diff --git a/parameter-learning_nd_disc/.gitignore b/parameter-learning_nd_disc/.gitignore new file mode 100755 index 0000000..5a8de6d --- /dev/null +++ b/parameter-learning_nd_disc/.gitignore @@ -0,0 +1,3 @@ +*.pyc +.idea/workspace.xml +.idea/vcs.xml diff --git a/parameter-learning_nd_disc/.idea/ParameterLearning.iml b/parameter-learning_nd_disc/.idea/ParameterLearning.iml new file mode 100755 index 0000000..6f63a63 --- /dev/null +++ b/parameter-learning_nd_disc/.idea/ParameterLearning.iml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/parameter-learning_nd_disc/.idea/inspectionProfiles/profiles_settings.xml b/parameter-learning_nd_disc/.idea/inspectionProfiles/profiles_settings.xml new file mode 100755 index 0000000..c23ecac --- /dev/null +++ b/parameter-learning_nd_disc/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/parameter-learning_nd_disc/.idea/misc.xml b/parameter-learning_nd_disc/.idea/misc.xml new file mode 100755 index 0000000..7b4d854 --- /dev/null +++ b/parameter-learning_nd_disc/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/parameter-learning_nd_disc/.idea/modules.xml b/parameter-learning_nd_disc/.idea/modules.xml new file mode 100755 index 0000000..5d9c213 --- /dev/null +++ b/parameter-learning_nd_disc/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/FORCESNLPsolver.m b/parameter-learning_nd_disc/FORCESNLPsolver/FORCESNLPsolver.m new file mode 100644 index 0000000..45ec199 --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver/FORCESNLPsolver.m @@ -0,0 +1,93 @@ +% FORCESNLPsolver - a fast solver generated by FORCES Pro v1.6.121 +% +% OUTPUT = FORCESNLPsolver(PARAMS) solves a multistage problem +% subject to the parameters supplied in the following struct: +% PARAMS.x0 - column vector of length 1464 +% PARAMS.xinit - column vector of length 16 +% PARAMS.xfinal - column vector of length 11 +% PARAMS.all_parameters - column vector of length 2501 +% +% OUTPUT returns the values of the last iteration of the solver where +% OUTPUT.x01 - column vector of size 24 +% OUTPUT.x02 - column vector of size 24 +% OUTPUT.x03 - column vector of size 24 +% OUTPUT.x04 - column vector of size 24 +% OUTPUT.x05 - column vector of size 24 +% OUTPUT.x06 - column vector of size 24 +% OUTPUT.x07 - column vector of size 24 +% OUTPUT.x08 - column vector of size 24 +% OUTPUT.x09 - column vector of size 24 +% OUTPUT.x10 - column vector of size 24 +% OUTPUT.x11 - column vector of size 24 +% OUTPUT.x12 - column vector of size 24 +% OUTPUT.x13 - column vector of size 24 +% OUTPUT.x14 - column vector of size 24 +% OUTPUT.x15 - column vector of size 24 +% OUTPUT.x16 - column vector of size 24 +% OUTPUT.x17 - column vector of size 24 +% OUTPUT.x18 - column vector of size 24 +% OUTPUT.x19 - column vector of size 24 +% OUTPUT.x20 - column vector of size 24 +% OUTPUT.x21 - column vector of size 24 +% OUTPUT.x22 - column vector of size 24 +% OUTPUT.x23 - column vector of size 24 +% OUTPUT.x24 - column vector of size 24 +% OUTPUT.x25 - column vector of size 24 +% OUTPUT.x26 - column vector of size 24 +% OUTPUT.x27 - column vector of size 24 +% OUTPUT.x28 - column vector of size 24 +% OUTPUT.x29 - column vector of size 24 +% OUTPUT.x30 - column vector of size 24 +% OUTPUT.x31 - column vector of size 24 +% OUTPUT.x32 - column vector of size 24 +% OUTPUT.x33 - column vector of size 24 +% OUTPUT.x34 - column vector of size 24 +% OUTPUT.x35 - column vector of size 24 +% OUTPUT.x36 - column vector of size 24 +% OUTPUT.x37 - column vector of size 24 +% OUTPUT.x38 - column vector of size 24 +% OUTPUT.x39 - column vector of size 24 +% OUTPUT.x40 - column vector of size 24 +% OUTPUT.x41 - column vector of size 24 +% OUTPUT.x42 - column vector of size 24 +% OUTPUT.x43 - column vector of size 24 +% OUTPUT.x44 - column vector of size 24 +% OUTPUT.x45 - column vector of size 24 +% OUTPUT.x46 - column vector of size 24 +% OUTPUT.x47 - column vector of size 24 +% OUTPUT.x48 - column vector of size 24 +% OUTPUT.x49 - column vector of size 24 +% OUTPUT.x50 - column vector of size 24 +% OUTPUT.x51 - column vector of size 24 +% OUTPUT.x52 - column vector of size 24 +% OUTPUT.x53 - column vector of size 24 +% OUTPUT.x54 - column vector of size 24 +% OUTPUT.x55 - column vector of size 24 +% OUTPUT.x56 - column vector of size 24 +% OUTPUT.x57 - column vector of size 24 +% OUTPUT.x58 - column vector of size 24 +% OUTPUT.x59 - column vector of size 24 +% OUTPUT.x60 - column vector of size 24 +% OUTPUT.x61 - column vector of size 24 +% +% [OUTPUT, EXITFLAG] = FORCESNLPsolver(PARAMS) returns additionally +% the integer EXITFLAG indicating the state of the solution with +% 1 - OPTIMAL solution has been found (subject to desired accuracy) +% 0 - Timeout - maximum number of iterations reached +% -6 - NaN or INF occured during evaluation of functions and derivatives. Please check your initial guess. +% -7 - Method could not progress. Problem may be infeasible. Run FORCESdiagnostics on your problem to check for most common errors in the formulation. +% -100 - License error +% +% [OUTPUT, EXITFLAG, INFO] = FORCESNLPsolver(PARAMS) returns +% additional information about the last iterate: +% INFO.it - number of iterations that lead to this result +% INFO.res_eq - max. equality constraint residual +% INFO.res_ineq - max. inequality constraint residual +% INFO.rsnorm - norm of stationarity condition +% INFO.rcompnorm - max of all complementarity violations +% INFO.pobj - primal objective +% INFO.mu - duality measure +% INFO.solvetime - Time needed for solve (wall clock time) +% INFO.fevalstime - Time needed for function evaluations (wall clock time) +% +% See also COPYING diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/include/FORCESNLPsolver.h b/parameter-learning_nd_disc/FORCESNLPsolver/include/FORCESNLPsolver.h new file mode 100644 index 0000000..a3e08f8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver/include/FORCESNLPsolver.h @@ -0,0 +1,427 @@ +/* +FORCESNLPsolver : A fast customized optimization solver. + +Copyright (C) 2013-2018 EMBOTECH AG [info@embotech.com]. All rights reserved. + + +This software is intended for simulation and testing purposes only. +Use of this software for any commercial purpose is prohibited. + +This program is distributed in the hope that it will be useful. +EMBOTECH makes NO WARRANTIES with respect to the use of the software +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. + +EMBOTECH shall not have any liability for any damage arising from the use +of the software. + +This Agreement shall exclusively be governed by and interpreted in +accordance with the laws of Switzerland, excluding its principles +of conflict of laws. The Courts of Zurich-City shall have exclusive +jurisdiction in case of any dispute. + +*/ + +/* Generated by FORCES PRO v1.6.121 on Monday, March 26, 2018 at 8:17:55 AM */ + +#include + +#ifndef __FORCESNLPsolver_H__ +#define __FORCESNLPsolver_H__ + +/* DATA TYPE ------------------------------------------------------------*/ +typedef double FORCESNLPsolver_float; + +typedef double FORCESNLPsolverinterface_float; + +#ifndef __SOLVER_STANDARD_TYPES__ +#define __SOLVER_STANDARD_TYPES__ + +typedef signed char solver_int8_signed; +typedef unsigned char solver_int8_unsigned; +typedef char solver_int8_default; +typedef signed short int solver_int16_signed; +typedef unsigned short int solver_int16_unsigned; +typedef short int solver_int16_default; +typedef signed int solver_int32_signed; +typedef unsigned int solver_int32_unsigned; +typedef int solver_int32_default; +typedef signed long long int solver_int64_signed; +typedef unsigned long long int solver_int64_unsigned; +typedef long long int solver_int64_default; + +#endif + +#ifndef __SOLVER_STANDARD_TYPES__ +#define __SOLVER_STANDARD_TYPES__ + +typedef signed char solver_int8_signed; +typedef unsigned char solver_int8_unsigned; +typedef char solver_int8_default; +typedef signed short int solver_int16_signed; +typedef unsigned short int solver_int16_unsigned; +typedef short int solver_int16_default; +typedef signed int solver_int32_signed; +typedef unsigned int solver_int32_unsigned; +typedef int solver_int32_default; +typedef signed long long int solver_int64_signed; +typedef unsigned long long int solver_int64_unsigned; +typedef long long int solver_int64_default; + +#endif + +/* SOLVER SETTINGS ------------------------------------------------------*/ +/* print level */ +#ifndef FORCESNLPsolver_SET_PRINTLEVEL +#define FORCESNLPsolver_SET_PRINTLEVEL (1) +#endif + +/* timing */ +#ifndef FORCESNLPsolver_SET_TIMING +#define FORCESNLPsolver_SET_TIMING (1) +#endif + +/* Numeric Warnings */ +/* #define PRINTNUMERICALWARNINGS */ + +/* maximum number of iterations */ +#define FORCESNLPsolver_SET_MAXIT (5000) + +/* scaling factor of line search (FTB rule) */ +#define FORCESNLPsolver_SET_FLS_SCALE (FORCESNLPsolver_float)(0.99) + +/* maximum number of supported elements in the filter */ +#define FORCESNLPsolver_MAX_FILTER_SIZE (5000) + +/* maximum number of supported elements in the filter */ +#define FORCESNLPsolver_MAX_SOC_IT (4) + +/* desired relative duality gap */ +#define FORCESNLPsolver_SET_ACC_RDGAP (FORCESNLPsolver_float)(0.0001) + +/* desired maximum residual on equality constraints */ +#define FORCESNLPsolver_SET_ACC_RESEQ (FORCESNLPsolver_float)(1E-06) + +/* desired maximum residual on inequality constraints */ +#define FORCESNLPsolver_SET_ACC_RESINEQ (FORCESNLPsolver_float)(1E-06) + +/* desired maximum violation of complementarity */ +#define FORCESNLPsolver_SET_ACC_KKTCOMPL (FORCESNLPsolver_float)(1E-06) + + +/* RETURN CODES----------------------------------------------------------*/ +/* solver has converged within desired accuracy */ +#define FORCESNLPsolver_OPTIMAL (1) + +/* maximum number of iterations has been reached */ +#define FORCESNLPsolver_MAXITREACHED (0) + +/* factorization error */ +#define FORCESNLPsolver_FACTORIZATION_ERROR (-5) + +/* NaN encountered in function evaluations */ +#define FORCESNLPsolver_BADFUNCEVAL (-6) + +/* no progress in method possible */ +#define FORCESNLPsolver_NOPROGRESS (-7) + +/* licensing error - solver not valid on this machine */ +#define FORCESNLPsolver_LICENSE_ERROR (-100) + + + +/* PARAMETERS -----------------------------------------------------------*/ +/* fill this with data before calling the solver! */ +typedef struct FORCESNLPsolver_params +{ + /* vector of size 1464 */ + FORCESNLPsolver_float x0[1464]; + + /* vector of size 16 */ + FORCESNLPsolver_float xinit[16]; + + /* vector of size 11 */ + FORCESNLPsolver_float xfinal[11]; + + /* vector of size 2501 */ + FORCESNLPsolver_float all_parameters[2501]; + +} FORCESNLPsolver_params; + + +/* OUTPUTS --------------------------------------------------------------*/ +/* the desired variables are put here by the solver */ +typedef struct FORCESNLPsolver_output +{ + /* vector of size 24 */ + FORCESNLPsolver_float x01[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x02[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x03[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x04[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x05[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x06[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x07[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x08[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x09[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x10[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x11[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x12[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x13[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x14[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x15[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x16[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x17[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x18[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x19[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x20[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x21[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x22[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x23[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x24[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x25[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x26[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x27[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x28[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x29[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x30[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x31[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x32[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x33[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x34[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x35[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x36[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x37[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x38[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x39[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x40[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x41[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x42[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x43[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x44[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x45[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x46[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x47[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x48[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x49[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x50[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x51[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x52[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x53[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x54[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x55[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x56[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x57[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x58[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x59[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x60[24]; + + /* vector of size 24 */ + FORCESNLPsolver_float x61[24]; + +} FORCESNLPsolver_output; + + +/* SOLVER INFO ----------------------------------------------------------*/ +/* diagnostic data from last interior point step */ +typedef struct FORCESNLPsolver_info +{ + /* iteration number */ + solver_int32_default it; + + /* number of iterations needed to optimality (branch-and-bound) */ + solver_int32_default it2opt; + + /* inf-norm of equality constraint residuals */ + FORCESNLPsolver_float res_eq; + + /* inf-norm of inequality constraint residuals */ + FORCESNLPsolver_float res_ineq; + + /* norm of stationarity condition */ + FORCESNLPsolver_float rsnorm; + + /* max of all complementarity violations */ + FORCESNLPsolver_float rcompnorm; + + /* primal objective */ + FORCESNLPsolver_float pobj; + + /* dual objective */ + FORCESNLPsolver_float dobj; + + /* duality gap := pobj - dobj */ + FORCESNLPsolver_float dgap; + + /* relative duality gap := |dgap / pobj | */ + FORCESNLPsolver_float rdgap; + + /* duality measure */ + FORCESNLPsolver_float mu; + + /* duality measure (after affine step) */ + FORCESNLPsolver_float mu_aff; + + /* centering parameter */ + FORCESNLPsolver_float sigma; + + /* number of backtracking line search steps (affine direction) */ + solver_int32_default lsit_aff; + + /* number of backtracking line search steps (combined direction) */ + solver_int32_default lsit_cc; + + /* step size (affine direction) */ + FORCESNLPsolver_float step_aff; + + /* step size (combined direction) */ + FORCESNLPsolver_float step_cc; + + /* solvertime */ + FORCESNLPsolver_float solvetime; + + /* time spent in function evaluations */ + FORCESNLPsolver_float fevalstime; + +} FORCESNLPsolver_info; + + + + + + + + +/* SOLVER FUNCTION DEFINITION -------------------------------------------*/ +/* examine exitflag before using the result! */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef void (*FORCESNLPsolver_extfunc)(FORCESNLPsolver_float*, FORCESNLPsolver_float*, FORCESNLPsolver_float*, FORCESNLPsolver_float*, FORCESNLPsolver_float*, FORCESNLPsolver_float*, FORCESNLPsolver_float*, FORCESNLPsolver_float*, FORCESNLPsolver_float*, FORCESNLPsolver_float*, FORCESNLPsolver_float*, solver_int32_default); + +extern solver_int32_default FORCESNLPsolver_solve(FORCESNLPsolver_params *params, FORCESNLPsolver_output *output, FORCESNLPsolver_info *info, FILE *fs, FORCESNLPsolver_extfunc FORCESNLPsolver_evalextfunctions); + + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/interface/COPYING.m b/parameter-learning_nd_disc/FORCESNLPsolver/interface/COPYING.m new file mode 100644 index 0000000..4c63da1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver/interface/COPYING.m @@ -0,0 +1,21 @@ +% FORCESNLPsolver : A fast customized optimization solver. +% +% Copyright (C) 2013-2018 EMBOTECH AG [info@embotech.com]. All rights reserved. +% +% +% This software is intended for simulation and testing purposes only. +% Use of this software for any commercial purpose is prohibited. +% +% This program is distributed in the hope that it will be useful. +% EMBOTECH makes NO WARRANTIES with respect to the use of the software +% without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +% PARTICULAR PURPOSE. +% +% EMBOTECH shall not have any liability for any damage arising from the use +% of the software. +% +% This Agreement shall exclusively be governed by and interpreted in +% accordance with the laws of Switzerland, excluding its principles +% of conflict of laws. The Courts of Zurich-City shall have exclusive +% jurisdiction in case of any dispute. +% diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver.m b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver.m new file mode 100644 index 0000000..45ec199 --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver.m @@ -0,0 +1,93 @@ +% FORCESNLPsolver - a fast solver generated by FORCES Pro v1.6.121 +% +% OUTPUT = FORCESNLPsolver(PARAMS) solves a multistage problem +% subject to the parameters supplied in the following struct: +% PARAMS.x0 - column vector of length 1464 +% PARAMS.xinit - column vector of length 16 +% PARAMS.xfinal - column vector of length 11 +% PARAMS.all_parameters - column vector of length 2501 +% +% OUTPUT returns the values of the last iteration of the solver where +% OUTPUT.x01 - column vector of size 24 +% OUTPUT.x02 - column vector of size 24 +% OUTPUT.x03 - column vector of size 24 +% OUTPUT.x04 - column vector of size 24 +% OUTPUT.x05 - column vector of size 24 +% OUTPUT.x06 - column vector of size 24 +% OUTPUT.x07 - column vector of size 24 +% OUTPUT.x08 - column vector of size 24 +% OUTPUT.x09 - column vector of size 24 +% OUTPUT.x10 - column vector of size 24 +% OUTPUT.x11 - column vector of size 24 +% OUTPUT.x12 - column vector of size 24 +% OUTPUT.x13 - column vector of size 24 +% OUTPUT.x14 - column vector of size 24 +% OUTPUT.x15 - column vector of size 24 +% OUTPUT.x16 - column vector of size 24 +% OUTPUT.x17 - column vector of size 24 +% OUTPUT.x18 - column vector of size 24 +% OUTPUT.x19 - column vector of size 24 +% OUTPUT.x20 - column vector of size 24 +% OUTPUT.x21 - column vector of size 24 +% OUTPUT.x22 - column vector of size 24 +% OUTPUT.x23 - column vector of size 24 +% OUTPUT.x24 - column vector of size 24 +% OUTPUT.x25 - column vector of size 24 +% OUTPUT.x26 - column vector of size 24 +% OUTPUT.x27 - column vector of size 24 +% OUTPUT.x28 - column vector of size 24 +% OUTPUT.x29 - column vector of size 24 +% OUTPUT.x30 - column vector of size 24 +% OUTPUT.x31 - column vector of size 24 +% OUTPUT.x32 - column vector of size 24 +% OUTPUT.x33 - column vector of size 24 +% OUTPUT.x34 - column vector of size 24 +% OUTPUT.x35 - column vector of size 24 +% OUTPUT.x36 - column vector of size 24 +% OUTPUT.x37 - column vector of size 24 +% OUTPUT.x38 - column vector of size 24 +% OUTPUT.x39 - column vector of size 24 +% OUTPUT.x40 - column vector of size 24 +% OUTPUT.x41 - column vector of size 24 +% OUTPUT.x42 - column vector of size 24 +% OUTPUT.x43 - column vector of size 24 +% OUTPUT.x44 - column vector of size 24 +% OUTPUT.x45 - column vector of size 24 +% OUTPUT.x46 - column vector of size 24 +% OUTPUT.x47 - column vector of size 24 +% OUTPUT.x48 - column vector of size 24 +% OUTPUT.x49 - column vector of size 24 +% OUTPUT.x50 - column vector of size 24 +% OUTPUT.x51 - column vector of size 24 +% OUTPUT.x52 - column vector of size 24 +% OUTPUT.x53 - column vector of size 24 +% OUTPUT.x54 - column vector of size 24 +% OUTPUT.x55 - column vector of size 24 +% OUTPUT.x56 - column vector of size 24 +% OUTPUT.x57 - column vector of size 24 +% OUTPUT.x58 - column vector of size 24 +% OUTPUT.x59 - column vector of size 24 +% OUTPUT.x60 - column vector of size 24 +% OUTPUT.x61 - column vector of size 24 +% +% [OUTPUT, EXITFLAG] = FORCESNLPsolver(PARAMS) returns additionally +% the integer EXITFLAG indicating the state of the solution with +% 1 - OPTIMAL solution has been found (subject to desired accuracy) +% 0 - Timeout - maximum number of iterations reached +% -6 - NaN or INF occured during evaluation of functions and derivatives. Please check your initial guess. +% -7 - Method could not progress. Problem may be infeasible. Run FORCESdiagnostics on your problem to check for most common errors in the formulation. +% -100 - License error +% +% [OUTPUT, EXITFLAG, INFO] = FORCESNLPsolver(PARAMS) returns +% additional information about the last iterate: +% INFO.it - number of iterations that lead to this result +% INFO.res_eq - max. equality constraint residual +% INFO.res_ineq - max. inequality constraint residual +% INFO.rsnorm - norm of stationarity condition +% INFO.rcompnorm - max of all complementarity violations +% INFO.pobj - primal objective +% INFO.mu - duality measure +% INFO.solvetime - Time needed for solve (wall clock time) +% INFO.fevalstime - Time needed for function evaluations (wall clock time) +% +% See also COPYING diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_build.py b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_build.py new file mode 100644 index 0000000..139f9d0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_build.py @@ -0,0 +1,62 @@ +#FORCESNLPsolver : A fast customized optimization solver. +# +#Copyright (C) 2013-2018 EMBOTECH AG [info@embotech.com]. All rights reserved. +# +# +#This software is intended for simulation and testing purposes only. +#Use of this software for any commercial purpose is prohibited. +# +#This program is distributed in the hope that it will be useful. +#EMBOTECH makes NO WARRANTIES with respect to the use of the software +#without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +#PARTICULAR PURPOSE. +# +#EMBOTECH shall not have any liability for any damage arising from the use +#of the software. +# +#This Agreement shall exclusively be governed by and interpreted in +#accordance with the laws of Switzerland, excluding its principles +#of conflict of laws. The Courts of Zurich-City shall have exclusive +#jurisdiction in case of any dispute. +# +from distutils.ccompiler import new_compiler +c = new_compiler() +#from numpy.distutils.intelccompiler import IntelCCompiler +#c = IntelCCompiler() + + +import os +import sys +import distutils + +# determine source file +sourcefile = os.path.join(os.getcwd(),"FORCESNLPsolver","src","FORCESNLPsolver"+".c") + +# determine lib file +if sys.platform.startswith('win'): + libfile = os.path.join(os.getcwd(),"FORCESNLPsolver","lib","FORCESNLPsolver"+".lib") +else: + libfile = os.path.join(os.getcwd(),"FORCESNLPsolver","lib","FORCESNLPsolver"+".so") + +# create lib dir if it does not exist yet +if not os.path.exists(os.path.join(os.getcwd(),"FORCESNLPsolver","lib")): + os.makedirs(os.path.join(os.getcwd(),"FORCESNLPsolver","lib")) + + + +# compile into object file +objdir = os.path.join(os.getcwd(),"FORCESNLPsolver","obj") +if isinstance(c,distutils.unixccompiler.UnixCCompiler): + #objects = c.compile([sourcefile], output_dir=objdir, extra_preargs=['-O3','-fPIC','-fopenmp','-mavx']) + objects = c.compile([sourcefile], output_dir=objdir, extra_preargs=['-O3','-fPIC','-mavx']) + if sys.platform.startswith('linux'): + c.set_libraries(['rt','gomp']) +else: + objects = c.compile([sourcefile], output_dir=objdir) + + +# create libraries +libdir = os.path.join(os.getcwd(),"FORCESNLPsolver","lib") +exportsymbols = ["%s_solve" % "FORCESNLPsolver"] +c.create_static_lib(objects, "FORCESNLPsolver", output_dir=libdir) +c.link_shared_lib(objects, "FORCESNLPsolver", output_dir=libdir, export_symbols=exportsymbols) \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_lib.mdl b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_lib.mdl new file mode 100644 index 0000000..8771d6c --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_lib.mdl @@ -0,0 +1,947 @@ +Model { + Name "FORCESNLPsolver" + Version 8.0 + MdlSubVersion 0 + GraphicalInterface { + NumRootInports 0 + NumRootOutports 0 + ParameterArgumentNames "" + ComputedModelVersion "1.2" + NumModelReferences 0 + NumTestPointedSignals 0 + } + SavedCharacterEncoding "windows-1252" + SaveDefaultBlockParams on + ScopeRefreshTime 0.035000 + OverrideScopeRefreshTime on + DisableAllScopes off + DataTypeOverride "UseLocalSettings" + DataTypeOverrideAppliesTo "AllNumericTypes" + MinMaxOverflowLogging "UseLocalSettings" + MinMaxOverflowArchiveMode "Overwrite" + FPTRunName "Run 1" + MaxMDLFileLineLength 120 + Object { + $PropName "BdWindowsInfo" + $ObjectID 1 + $ClassName "Simulink.BDWindowsInfo" + Object { + $PropName "WindowsInfo" + $ObjectID 2 + $ClassName "Simulink.WindowInfo" + IsActive [1] + Location [385.0, 84.0, 816.0, 539.0] + Object { + $PropName "ModelBrowserInfo" + $ObjectID 3 + $ClassName "Simulink.ModelBrowserInfo" + Visible [1] + DockPosition "Left" + Width [50] + Height [50] + Filter [9] + } + Object { + $PropName "ExplorerBarInfo" + $ObjectID 4 + $ClassName "Simulink.ExplorerBarInfo" + Visible [1] + } + Object { + $PropName "EditorsInfo" + $ObjectID 5 + $ClassName "Simulink.EditorInfo" + IsActive [1] + ViewObjType "SimulinkTopLevel" + LoadSaveID "0" + Extents [569.0, 363.0] + ZoomFactor [1.0] + Offset [0.0, 0.0] + } + } + } + Created "3/26/2018 8:18:05 AM" + Creator "embotech AG" + UpdateHistory "UpdateHistoryNever" + ModifiedByFormat "%" + LastModifiedBy "embotech AG" + ModifiedDateFormat "%" + LastModifiedDate "3/26/2018 8:18:05 AM" + RTWModifiedTimeStamp 315310195 + ModelVersionFormat "1.%" + ConfigurationManager "None" + SampleTimeColors off + SampleTimeAnnotations off + LibraryLinkDisplay "disabled" + WideLines off + ShowLineDimensions off + ShowPortDataTypes off + ShowDesignRanges off + ShowLoopsOnError on + IgnoreBidirectionalLines off + ShowStorageClass off + ShowTestPointIcons on + ShowSignalResolutionIcons on + ShowViewerIcons on + SortedOrder off + ExecutionContextIcon off + ShowLinearizationAnnotations on + BlockNameDataTip off + BlockParametersDataTip off + BlockDescriptionStringDataTip off + ToolBar on + StatusBar on + BrowserShowLibraryLinks off + BrowserLookUnderMasks off + SimulationMode "normal" + LinearizationMsg "none" + Profile off + ParamWorkspaceSource "MATLABWorkspace" + AccelSystemTargetFile "accel.tlc" + AccelTemplateMakefile "accel_default_tmf" + AccelMakeCommand "make_rtw" + TryForcingSFcnDF off + Object { + $PropName "DataLoggingOverride" + $ObjectID 6 + $ClassName "Simulink.SimulationData.ModelLoggingInfo" + model_ "model_2012b" + overrideMode_ [0.0] + Array { + Type "Cell" + Dimension 1 + Cell "model_2012b" + PropName "logAsSpecifiedByModels_" + } + Array { + Type "Cell" + Dimension 1 + Cell [] + PropName "logAsSpecifiedByModelsSSIDs_" + } + } + RecordCoverage off + CovPath "/" + CovSaveName "covdata" + CovMetricSettings "dw" + CovNameIncrementing off + CovHtmlReporting on + CovForceBlockReductionOff on + covSaveCumulativeToWorkspaceVar on + CovSaveSingleToWorkspaceVar on + CovCumulativeVarName "covCumulativeData" + CovCumulativeReport off + CovReportOnPause on + CovModelRefEnable "Off" + CovExternalEMLEnable off + ExtModeBatchMode off + ExtModeEnableFloating on + ExtModeTrigType "manual" + ExtModeTrigMode "normal" + ExtModeTrigPort "1" + ExtModeTrigElement "any" + ExtModeTrigDuration 1000 + ExtModeTrigDurationFloating "auto" + ExtModeTrigHoldOff 0 + ExtModeTrigDelay 0 + ExtModeTrigDirection "rising" + ExtModeTrigLevel 0 + ExtModeArchiveMode "off" + ExtModeAutoIncOneShot off + ExtModeIncDirWhenArm off + ExtModeAddSuffixToVar off + ExtModeWriteAllDataToWs off + ExtModeArmWhenConnect on + ExtModeSkipDownloadWhenConnect off + ExtModeLogAll on + ExtModeAutoUpdateStatusClock on + BufferReuse on + ShowModelReferenceBlockVersion off + ShowModelReferenceBlockIO off + Array { + Type "Handle" + Dimension 1 + Simulink.ConfigSet { + $ObjectID 7 + Version "1.12.1" + Array { + Type "Handle" + Dimension 8 + Simulink.SolverCC { + $ObjectID 8 + Version "1.12.1" + StartTime "0.0" + StopTime "10.0" + AbsTol "auto" + FixedStep "auto" + InitialStep "auto" + MaxNumMinSteps "-1" + MaxOrder 5 + ZcThreshold "auto" + ConsecutiveZCsStepRelTol "10*128*eps" + MaxConsecutiveZCs "1000" + ExtrapolationOrder 4 + NumberNewtonIterations 1 + MaxStep "auto" + MinStep "auto" + MaxConsecutiveMinStep "1" + RelTol "1e-3" + SolverMode "Auto" + EnableConcurrentExecution off + ConcurrentTasks off + Solver "ode45" + SolverName "ode45" + SolverJacobianMethodControl "auto" + ShapePreserveControl "DisableAll" + ZeroCrossControl "UseLocalSettings" + ZeroCrossAlgorithm "Nonadaptive" + AlgebraicLoopSolver "TrustRegion" + SolverResetMethod "Fast" + PositivePriorityOrder off + AutoInsertRateTranBlk off + SampleTimeConstraint "Unconstrained" + InsertRTBMode "Whenever possible" + } + Simulink.DataIOCC { + $ObjectID 9 + Version "1.12.1" + Decimation "1" + ExternalInput "[t, u]" + FinalStateName "xFinal" + InitialState "xInitial" + LimitDataPoints on + MaxDataPoints "1000" + LoadExternalInput off + LoadInitialState off + SaveFinalState off + SaveCompleteFinalSimState off + SaveFormat "Array" + SignalLoggingSaveFormat "Dataset" + SaveOutput on + SaveState off + SignalLogging on + DSMLogging on + InspectSignalLogs off + SaveTime on + ReturnWorkspaceOutputs off + StateSaveName "xout" + TimeSaveName "tout" + OutputSaveName "yout" + SignalLoggingName "logsout" + DSMLoggingName "dsmout" + OutputOption "RefineOutputTimes" + OutputTimes "[]" + ReturnWorkspaceOutputsName "out" + Refine "1" + } + Simulink.OptimizationCC { + $ObjectID 10 + Version "1.12.1" + Array { + Type "Cell" + Dimension 8 + Cell "BooleansAsBitfields" + Cell "PassReuseOutputArgsAs" + Cell "PassReuseOutputArgsThreshold" + Cell "ZeroExternalMemoryAtStartup" + Cell "ZeroInternalMemoryAtStartup" + Cell "OptimizeModelRefInitCode" + Cell "NoFixptDivByZeroProtection" + Cell "UseSpecifiedMinMax" + PropName "DisabledProps" + } + BlockReduction on + BooleanDataType on + ConditionallyExecuteInputs on + InlineParams off + UseIntDivNetSlope off + UseFloatMulNetSlope off + UseSpecifiedMinMax off + InlineInvariantSignals off + OptimizeBlockIOStorage on + BufferReuse on + EnhancedBackFolding off + StrengthReduction off + ExpressionFolding on + BooleansAsBitfields off + BitfieldContainerType "uint_T" + EnableMemcpy on + MemcpyThreshold 64 + PassReuseOutputArgsAs "Structure reference" + ExpressionDepthLimit 2147483647 + FoldNonRolledExpr on + LocalBlockOutputs on + RollThreshold 5 + SystemCodeInlineAuto off + StateBitsets off + DataBitsets off + UseTempVars off + ZeroExternalMemoryAtStartup on + ZeroInternalMemoryAtStartup on + InitFltsAndDblsToZero off + NoFixptDivByZeroProtection off + EfficientFloat2IntCast off + EfficientMapNaN2IntZero on + OptimizeModelRefInitCode off + LifeSpan "inf" + MaxStackSize "Inherit from target" + BufferReusableBoundary on + SimCompilerOptimization "Off" + AccelVerboseBuild off + ParallelExecutionInRapidAccelerator on + } + Simulink.DebuggingCC { + $ObjectID 11 + Version "1.12.1" + RTPrefix "error" + ConsistencyChecking "none" + ArrayBoundsChecking "none" + SignalInfNanChecking "none" + SignalRangeChecking "none" + ReadBeforeWriteMsg "UseLocalSettings" + WriteAfterWriteMsg "UseLocalSettings" + WriteAfterReadMsg "UseLocalSettings" + AlgebraicLoopMsg "warning" + ArtificialAlgebraicLoopMsg "warning" + SaveWithDisabledLinksMsg "warning" + SaveWithParameterizedLinksMsg "warning" + CheckSSInitialOutputMsg on + UnderspecifiedInitializationDetection "Classic" + MergeDetectMultiDrivingBlocksExec "none" + CheckExecutionContextPreStartOutputMsg off + CheckExecutionContextRuntimeOutputMsg off + SignalResolutionControl "UseLocalSettings" + BlockPriorityViolationMsg "warning" + MinStepSizeMsg "warning" + TimeAdjustmentMsg "none" + MaxConsecutiveZCsMsg "error" + MaskedZcDiagnostic "warning" + IgnoredZcDiagnostic "warning" + SolverPrmCheckMsg "warning" + InheritedTsInSrcMsg "warning" + DiscreteInheritContinuousMsg "warning" + MultiTaskDSMMsg "error" + MultiTaskCondExecSysMsg "error" + MultiTaskRateTransMsg "error" + SingleTaskRateTransMsg "none" + TasksWithSamePriorityMsg "warning" + SigSpecEnsureSampleTimeMsg "warning" + CheckMatrixSingularityMsg "none" + IntegerOverflowMsg "warning" + Int32ToFloatConvMsg "warning" + ParameterDowncastMsg "error" + ParameterOverflowMsg "error" + ParameterUnderflowMsg "none" + ParameterPrecisionLossMsg "warning" + ParameterTunabilityLossMsg "warning" + FixptConstUnderflowMsg "none" + FixptConstOverflowMsg "none" + FixptConstPrecisionLossMsg "none" + UnderSpecifiedDataTypeMsg "none" + UnnecessaryDatatypeConvMsg "none" + VectorMatrixConversionMsg "none" + InvalidFcnCallConnMsg "error" + FcnCallInpInsideContextMsg "EnableAllAsError" + SignalLabelMismatchMsg "none" + UnconnectedInputMsg "warning" + UnconnectedOutputMsg "warning" + UnconnectedLineMsg "warning" + SFcnCompatibilityMsg "none" + FrameProcessingCompatibilityMsg "warning" + UniqueDataStoreMsg "none" + BusObjectLabelMismatch "warning" + RootOutportRequireBusObject "warning" + AssertControl "UseLocalSettings" + EnableOverflowDetection off + ModelReferenceIOMsg "none" + ModelReferenceMultiInstanceNormalModeStructChecksumCheck "error" + ModelReferenceVersionMismatchMessage "none" + ModelReferenceIOMismatchMessage "none" + ModelReferenceCSMismatchMessage "none" + UnknownTsInhSupMsg "warning" + ModelReferenceDataLoggingMessage "warning" + ModelReferenceSymbolNameMessage "warning" + ModelReferenceExtraNoncontSigs "error" + StateNameClashWarn "warning" + SimStateInterfaceChecksumMismatchMsg "warning" + SimStateOlderReleaseMsg "error" + InitInArrayFormatMsg "warning" + StrictBusMsg "ErrorLevel1" + BusNameAdapt "WarnAndRepair" + NonBusSignalsTreatedAsBus "none" + LoggingUnavailableSignals "error" + BlockIODiagnostic "none" + SFUnusedDataAndEventsDiag "warning" + SFUnexpectedBacktrackingDiag "warning" + SFInvalidInputDataAccessInChartInitDiag "warning" + SFNoUnconditionalDefaultTransitionDiag "warning" + SFTransitionOutsideNaturalParentDiag "warning" + SFUnconditionalTransitionShadowingDiag "warning" + SFUndirectedBroadcastEventsDiag "warning" + SFTransitionActionBeforeConditionDiag "warning" + } + Simulink.HardwareCC { + $ObjectID 12 + Version "1.12.1" + ProdBitPerChar 8 + ProdBitPerShort 16 + ProdBitPerInt 32 + ProdBitPerLong 32 + ProdBitPerFloat 32 + ProdBitPerDouble 64 + ProdBitPerPointer 32 + ProdLargestAtomicInteger "Char" + ProdLargestAtomicFloat "None" + ProdIntDivRoundTo "Undefined" + ProdEndianess "Unspecified" + ProdWordSize 32 + ProdShiftRightIntArith on + ProdHWDeviceType "32-bit Generic" + TargetBitPerChar 8 + TargetBitPerShort 16 + TargetBitPerInt 32 + TargetBitPerLong 32 + TargetBitPerFloat 32 + TargetBitPerDouble 64 + TargetBitPerPointer 32 + TargetLargestAtomicInteger "Char" + TargetLargestAtomicFloat "None" + TargetShiftRightIntArith on + TargetIntDivRoundTo "Undefined" + TargetEndianess "Unspecified" + TargetWordSize 32 + TargetTypeEmulationWarnSuppressLevel 0 + TargetPreprocMaxBitsSint 32 + TargetPreprocMaxBitsUint 32 + TargetHWDeviceType "Specified" + TargetUnknown off + ProdEqTarget on + } + Simulink.ModelReferenceCC { + $ObjectID 13 + Version "1.12.1" + UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" + CheckModelReferenceTargetMessage "error" + EnableParallelModelReferenceBuilds off + ParallelModelReferenceErrorOnInvalidPool on + ParallelModelReferenceMATLABWorkerInit "None" + ModelReferenceNumInstancesAllowed "Multi" + PropagateVarSize "Infer from blocks in model" + ModelReferencePassRootInputsByReference on + ModelReferenceMinAlgLoopOccurrences off + PropagateSignalLabelsOutOfModel off + SupportModelReferenceSimTargetCustomCode off + } + Simulink.SFSimCC { + $ObjectID 14 + Version "1.12.1" + SFSimEnableDebug on + SFSimOverflowDetection on + SFSimEcho on + SimBlas on + SimCtrlC on + SimExtrinsic on + SimIntegrity on + SimUseLocalCustomCode off + SimParseCustomCode on + SimBuildMode "sf_incremental_build" + } + Simulink.RTWCC { + $BackupClass "Simulink.RTWCC" + $ObjectID 15 + Version "1.12.1" + Array { + Type "Cell" + Dimension 15 + Cell "IncludeHyperlinkInReport" + Cell "GenerateTraceInfo" + Cell "GenerateTraceReport" + Cell "GenerateTraceReportSl" + Cell "GenerateTraceReportSf" + Cell "GenerateTraceReportEml" + Cell "PortableWordSizes" + Cell "GenerateWebview" + Cell "GenerateCodeMetricsReport" + Cell "GenerateCodeReplacementReport" + Cell "GenerateErtSFunction" + Cell "CreateSILPILBlock" + Cell "CodeExecutionProfiling" + Cell "CodeProfilingSaveOptions" + Cell "CodeProfilingInstrumentation" + PropName "DisabledProps" + } + SystemTargetFile "grt.tlc" + GenCodeOnly off + MakeCommand "make_rtw" + GenerateMakefile on + PackageGeneratedCodeAndArtifacts off + TemplateMakefile "grt_default_tmf" + GenerateReport off + SaveLog off + RTWVerbose on + RetainRTWFile off + ProfileTLC off + TLCDebug off + TLCCoverage off + TLCAssert off + ProcessScriptMode "Default" + ConfigurationMode "Optimized" + ConfigAtBuild off + RTWUseLocalCustomCode off + RTWUseSimCustomCode off + IncludeHyperlinkInReport off + LaunchReport off + PortableWordSizes off + GenerateErtSFunction off + CreateSILPILBlock "None" + CodeExecutionProfiling off + CodeExecutionProfileVariable "executionProfile" + CodeProfilingSaveOptions "SummaryOnly" + CodeProfilingInstrumentation off + TargetLang "C" + IncludeBusHierarchyInRTWFileBlockHierarchyMap off + IncludeERTFirstTime off + GenerateTraceInfo off + GenerateTraceReport off + GenerateTraceReportSl off + GenerateTraceReportSf off + GenerateTraceReportEml off + GenerateCodeInfo off + GenerateWebview off + GenerateCodeMetricsReport off + GenerateCodeReplacementReport off + RTWCompilerOptimization "Off" + CheckMdlBeforeBuild "Off" + CustomRebuildMode "OnUpdate" + Array { + Type "Handle" + Dimension 2 + Simulink.CodeAppCC { + $ObjectID 16 + Version "1.12.1" + Array { + Type "Cell" + Dimension 22 + Cell "IgnoreCustomStorageClasses" + Cell "IgnoreTestpoints" + Cell "InsertBlockDesc" + Cell "InsertPolySpaceComments" + Cell "SFDataObjDesc" + Cell "MATLABFcnDesc" + Cell "SimulinkDataObjDesc" + Cell "DefineNamingRule" + Cell "SignalNamingRule" + Cell "ParamNamingRule" + Cell "InternalIdentifier" + Cell "InlinedPrmAccess" + Cell "CustomSymbolStr" + Cell "CustomSymbolStrGlobalVar" + Cell "CustomSymbolStrType" + Cell "CustomSymbolStrField" + Cell "CustomSymbolStrFcn" + Cell "CustomSymbolStrFcnArg" + Cell "CustomSymbolStrBlkIO" + Cell "CustomSymbolStrTmpVar" + Cell "CustomSymbolStrMacro" + Cell "ReqsInCode" + PropName "DisabledProps" + } + ForceParamTrailComments off + GenerateComments on + IgnoreCustomStorageClasses on + IgnoreTestpoints off + IncHierarchyInIds off + MaxIdLength 31 + PreserveName off + PreserveNameWithParent off + ShowEliminatedStatement off + OperatorAnnotations off + IncAutoGenComments off + SimulinkDataObjDesc off + SFDataObjDesc off + MATLABFcnDesc off + IncDataTypeInIds off + MangleLength 1 + CustomSymbolStrGlobalVar "$R$N$M" + CustomSymbolStrType "$N$R$M" + CustomSymbolStrField "$N$M" + CustomSymbolStrFcn "$R$N$M$F" + CustomSymbolStrFcnArg "rt$I$N$M" + CustomSymbolStrBlkIO "rtb_$N$M" + CustomSymbolStrTmpVar "$N$M" + CustomSymbolStrMacro "$R$N$M" + DefineNamingRule "None" + ParamNamingRule "None" + SignalNamingRule "None" + InsertBlockDesc off + InsertPolySpaceComments off + SimulinkBlockComments on + MATLABSourceComments off + EnableCustomComments off + InternalIdentifier "Classic" + InlinedPrmAccess "Literals" + ReqsInCode off + UseSimReservedNames off + } + Simulink.GRTTargetCC { + $BackupClass "Simulink.TargetCC" + $ObjectID 17 + Version "1.12.1" + Array { + Type "Cell" + Dimension 15 + Cell "GeneratePreprocessorConditionals" + Cell "IncludeMdlTerminateFcn" + Cell "CombineOutputUpdateFcns" + Cell "SuppressErrorStatus" + Cell "ERTCustomFileBanners" + Cell "GenerateSampleERTMain" + Cell "GenerateTestInterfaces" + Cell "ModelStepFunctionPrototypeControlCompliant" + Cell "CPPClassGenCompliant" + Cell "MultiInstanceERTCode" + Cell "PurelyIntegerCode" + Cell "SupportComplex" + Cell "SupportAbsoluteTime" + Cell "SupportContinuousTime" + Cell "SupportNonInlinedSFcns" + PropName "DisabledProps" + } + TargetFcnLib "ansi_tfl_table_tmw.mat" + TargetLibSuffix "" + TargetPreCompLibLocation "" + CodeReplacementLibrary "ANSI_C" + UtilityFuncGeneration "Auto" + ERTMultiwordTypeDef "System defined" + ERTMultiwordLength 256 + MultiwordLength 2048 + GenerateFullHeader on + GenerateSampleERTMain off + GenerateTestInterfaces off + IsPILTarget off + ModelReferenceCompliant on + ParMdlRefBuildCompliant on + CompOptLevelCompliant on + ConcurrentExecutionCompliant on + IncludeMdlTerminateFcn on + GeneratePreprocessorConditionals "Disable all" + CombineOutputUpdateFcns on + CombineSignalStateStructs off + SuppressErrorStatus off + ERTFirstTimeCompliant off + IncludeFileDelimiter "Auto" + ERTCustomFileBanners off + SupportAbsoluteTime on + LogVarNameModifier "rt_" + MatFileLogging on + MultiInstanceERTCode off + SupportNonFinite on + SupportComplex on + PurelyIntegerCode off + SupportContinuousTime on + SupportNonInlinedSFcns on + SupportVariableSizeSignals off + EnableShiftOperators on + ParenthesesLevel "Nominal" + ModelStepFunctionPrototypeControlCompliant off + CPPClassGenCompliant off + AutosarCompliant off + GRTInterface off + UseMalloc off + ExtMode off + ExtModeStaticAlloc off + ExtModeTesting off + ExtModeStaticAllocSize 1000000 + ExtModeTransport 0 + ExtModeMexFile "ext_comm" + ExtModeIntrfLevel "Level1" + RTWCAPISignals off + RTWCAPIParams off + RTWCAPIStates off + RTWCAPIRootIO off + GenerateASAP2 off + } + PropName "Components" + } + } + PropName "Components" + } + Name "Configuration" + CurrentDlgPage "Solver" + ConfigPrmDlgPosition [ 520, 225, 1400, 855 ] + } + PropName "ConfigurationSets" + } + Simulink.ConfigSet { + $PropName "ActiveConfigurationSet" + $ObjectID 7 + } + Object { + $PropName "DataTransfer" + $ObjectID 18 + $ClassName "Simulink.GlobalDataTransfer" + DefaultTransitionBetweenSyncTasks "Ensure deterministic transfer (maximum delay)" + DefaultTransitionBetweenAsyncTasks "Ensure data integrity only" + DefaultTransitionBetweenContTasks "Ensure deterministic transfer (minimum delay)" + DefaultExtrapolationMethodBetweenContTasks "None" + AutoInsertRateTranBlk [0] + } + ExplicitPartitioning off + BlockDefaults { + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + NamePlacement "normal" + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + ShowName on + BlockRotation 0 + BlockMirror off + } + AnnotationDefaults { + HorizontalAlignment "center" + VerticalAlignment "middle" + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + UseDisplayTextAsClickCallback off + } + LineDefaults { + FontName "Helvetica" + FontSize 9 + FontWeight "normal" + FontAngle "normal" + } + MaskDefaults { + SelfModifiable "off" + IconFrame "on" + IconOpaque "on" + RunInitForIconRedraw "off" + IconRotate "none" + PortRotate "default" + IconUnits "autoscale" + } + MaskParameterDefaults { + Evaluate "on" + Tunable "on" + NeverSave "off" + Internal "off" + ReadOnly "off" + Enabled "on" + Visible "on" + ToolTip "on" + } + BlockParameterDefaults { + Block { + BlockType S-Function + FunctionName "system" + SFunctionModules "''" + PortCounts "[]" + SFunctionDeploymentMode off + } + } + System { + Name "FORCESNLPsolver" + Location [385, 84, 1201, 623] + Open on + ModelBrowserVisibility on + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + ReportName "simulink-default.rpt" + SIDHighWatermark "1" + Block { + BlockType S-Function + Name "FORCESNLPsolver" + SID "1" + Ports [4, 61] + Position [170, 99, 650, 1037] + ZOrder 1 + FunctionName "FORCESNLPsolver_simulinkBlock" + SFunctionModules "FORCESNLPsolver FORCESNLPsolver_simulinkBlock" + EnableBusSupport off + Object { + $PropName "MaskObject" + $ObjectID 19 + $ClassName "Simulink.Mask" + Type "FORCESNLPsolver_simulinkBlock" + Description " ---- Simulink block encapsulating your customized solver FORCESNLPsolver ---- \n\n" + "FORCESNLPsolver : A fast customized optimization solver.\n" +"\n" +"Copyright (C) 2013-2018 EMBOTECH AG [info@embotech.com]. All rights reserved.\n" +"\n" +"\n" +"This software is intended for simulation and testing purposes only. \n" +"Use of this software for any commercial purpose is prohibited.\n" +"\n" +"This program is distributed in the hope that it will be useful.\n" +"EMBOTECH makes NO WARRANTIES with respect to the use of the software \n" +"without even the implied warranty of MERCHANTABILITY or FITNESS FOR A \n" +"PARTICULAR PURPOSE. \n" +"\n" +"EMBOTECH shall not have any liability for any damage arising from the use\n" +"of the software.\n" +"\n" +"This Agreement shall exclusively be governed by and interpreted in \n" +"accordance with the laws of Switzerland, excluding its principles\n" +"of conflict of laws. The Courts of Zurich-City shall have exclusive \n" +"jurisdiction in case of any dispute.\n" +"\n" + + Help "FORCESNLPsolver_simulinkBlock provides an easy Simulink interface for simulating your customized solver. \n" + "\nOUTPUTS = FORCESNLPsolver(INPUTS) solves an optimization problem where:\n\n" + "INPUTS:\n" + " - x0 - column vector of length 1464\n " +" - xinit - column vector of length 16\n " +" - xfinal - column vector of length 11\n " +" - all_parameters - column vector of length 2501\n " + + "\nOUTPUTS:\n" + " - x01 - column vector of length 24\n " +" - x02 - column vector of length 24\n " +" - x03 - column vector of length 24\n " +" - x04 - column vector of length 24\n " +" - x05 - column vector of length 24\n " +" - x06 - column vector of length 24\n " +" - x07 - column vector of length 24\n " +" - x08 - column vector of length 24\n " +" - x09 - column vector of length 24\n " +" - x10 - column vector of length 24\n " +" - x11 - column vector of length 24\n " +" - x12 - column vector of length 24\n " +" - x13 - column vector of length 24\n " +" - x14 - column vector of length 24\n " +" - x15 - column vector of length 24\n " +" - x16 - column vector of length 24\n " +" - x17 - column vector of length 24\n " +" - x18 - column vector of length 24\n " +" - x19 - column vector of length 24\n " +" - x20 - column vector of length 24\n " +" - x21 - column vector of length 24\n " +" - x22 - column vector of length 24\n " +" - x23 - column vector of length 24\n " +" - x24 - column vector of length 24\n " +" - x25 - column vector of length 24\n " +" - x26 - column vector of length 24\n " +" - x27 - column vector of length 24\n " +" - x28 - column vector of length 24\n " +" - x29 - column vector of length 24\n " +" - x30 - column vector of length 24\n " +" - x31 - column vector of length 24\n " +" - x32 - column vector of length 24\n " +" - x33 - column vector of length 24\n " +" - x34 - column vector of length 24\n " +" - x35 - column vector of length 24\n " +" - x36 - column vector of length 24\n " +" - x37 - column vector of length 24\n " +" - x38 - column vector of length 24\n " +" - x39 - column vector of length 24\n " +" - x40 - column vector of length 24\n " +" - x41 - column vector of length 24\n " +" - x42 - column vector of length 24\n " +" - x43 - column vector of length 24\n " +" - x44 - column vector of length 24\n " +" - x45 - column vector of length 24\n " +" - x46 - column vector of length 24\n " +" - x47 - column vector of length 24\n " +" - x48 - column vector of length 24\n " +" - x49 - column vector of length 24\n " +" - x50 - column vector of length 24\n " +" - x51 - column vector of length 24\n " +" - x52 - column vector of length 24\n " +" - x53 - column vector of length 24\n " +" - x54 - column vector of length 24\n " +" - x55 - column vector of length 24\n " +" - x56 - column vector of length 24\n " +" - x57 - column vector of length 24\n " +" - x58 - column vector of length 24\n " +" - x59 - column vector of length 24\n " +" - x60 - column vector of length 24\n " +" - x61 - column vector of length 24\n " + + "\n For more information, see https://www.embotech.com/FORCES-Pro/How-to-use/Simulink-Interface/Simulink-Block \n " + + Display "port_label('input', 1, 'x0') \n " +"port_label('input', 2, 'xinit') \n " +"port_label('input', 3, 'xfinal') \n " +"port_label('input', 4, 'all_parameters') \n " +"port_label('output', 1, 'x01') \n " +"port_label('output', 2, 'x02') \n " +"port_label('output', 3, 'x03') \n " +"port_label('output', 4, 'x04') \n " +"port_label('output', 5, 'x05') \n " +"port_label('output', 6, 'x06') \n " +"port_label('output', 7, 'x07') \n " +"port_label('output', 8, 'x08') \n " +"port_label('output', 9, 'x09') \n " +"port_label('output', 10, 'x10') \n " +"port_label('output', 11, 'x11') \n " +"port_label('output', 12, 'x12') \n " +"port_label('output', 13, 'x13') \n " +"port_label('output', 14, 'x14') \n " +"port_label('output', 15, 'x15') \n " +"port_label('output', 16, 'x16') \n " +"port_label('output', 17, 'x17') \n " +"port_label('output', 18, 'x18') \n " +"port_label('output', 19, 'x19') \n " +"port_label('output', 20, 'x20') \n " +"port_label('output', 21, 'x21') \n " +"port_label('output', 22, 'x22') \n " +"port_label('output', 23, 'x23') \n " +"port_label('output', 24, 'x24') \n " +"port_label('output', 25, 'x25') \n " +"port_label('output', 26, 'x26') \n " +"port_label('output', 27, 'x27') \n " +"port_label('output', 28, 'x28') \n " +"port_label('output', 29, 'x29') \n " +"port_label('output', 30, 'x30') \n " +"port_label('output', 31, 'x31') \n " +"port_label('output', 32, 'x32') \n " +"port_label('output', 33, 'x33') \n " +"port_label('output', 34, 'x34') \n " +"port_label('output', 35, 'x35') \n " +"port_label('output', 36, 'x36') \n " +"port_label('output', 37, 'x37') \n " +"port_label('output', 38, 'x38') \n " +"port_label('output', 39, 'x39') \n " +"port_label('output', 40, 'x40') \n " +"port_label('output', 41, 'x41') \n " +"port_label('output', 42, 'x42') \n " +"port_label('output', 43, 'x43') \n " +"port_label('output', 44, 'x44') \n " +"port_label('output', 45, 'x45') \n " +"port_label('output', 46, 'x46') \n " +"port_label('output', 47, 'x47') \n " +"port_label('output', 48, 'x48') \n " +"port_label('output', 49, 'x49') \n " +"port_label('output', 50, 'x50') \n " +"port_label('output', 51, 'x51') \n " +"port_label('output', 52, 'x52') \n " +"port_label('output', 53, 'x53') \n " +"port_label('output', 54, 'x54') \n " +"port_label('output', 55, 'x55') \n " +"port_label('output', 56, 'x56') \n " +"port_label('output', 57, 'x57') \n " +"port_label('output', 58, 'x58') \n " +"port_label('output', 59, 'x59') \n " +"port_label('output', 60, 'x60') \n " +"port_label('output', 61, 'x61') \n " +"if( exist('forcesprologo.jpg','file') ), image(imread('forcesprologo.jpg'),'center','on'); elseif( exist(['interface',filesep,'forcesprologo.jpg'],'file') ), image(imread(['interface',filesep,'forcesprologo.jpg']),'center','on'); elseif( exist(['FORCESNLPsolver',filesep,'interface',filesep,'forcesprologo.jpg'],'file') ), image(imread(['FORCESNLPsolver',filesep,'interface',filesep,'forcesprologo.jpg']),'center','on'); end \n " + + } + } + } +} diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_mex.c b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_mex.c new file mode 100644 index 0000000..d0f6f9d --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_mex.c @@ -0,0 +1,496 @@ +/* +FORCESNLPsolver : A fast customized optimization solver. + +Copyright (C) 2013-2018 EMBOTECH AG [info@embotech.com]. All rights reserved. + + +This software is intended for simulation and testing purposes only. +Use of this software for any commercial purpose is prohibited. + +This program is distributed in the hope that it will be useful. +EMBOTECH makes NO WARRANTIES with respect to the use of the software +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. + +EMBOTECH shall not have any liability for any damage arising from the use +of the software. + +This Agreement shall exclusively be governed by and interpreted in +accordance with the laws of Switzerland, excluding its principles +of conflict of laws. The Courts of Zurich-City shall have exclusive +jurisdiction in case of any dispute. + +*/ + +#include "mex.h" +#include "math.h" +#include "../include/FORCESNLPsolver.h" +#include + + + +/* copy functions */ +void copyCArrayToM(double *src, double *dest, solver_int32_default dim) +{ + while (dim--) + { + *dest++ = (double)*src++; + } +} +void copyMArrayToC(double *src, double *dest, solver_int32_default dim) +{ + while (dim--) + { + *dest++ = (double) (*src++) ; + } +} + + +extern void FORCESNLPsolver_casadi2forces(FORCESNLPsolver_float *x, FORCESNLPsolver_float *y, FORCESNLPsolver_float *l, FORCESNLPsolver_float *p, FORCESNLPsolver_float *f, FORCESNLPsolver_float *nabla_f, FORCESNLPsolver_float *c, FORCESNLPsolver_float *nabla_c, FORCESNLPsolver_float *h, FORCESNLPsolver_float *nabla_h, FORCESNLPsolver_float *hess, solver_int32_default stage); +FORCESNLPsolver_extfunc pt2function = &FORCESNLPsolver_casadi2forces; + + +/* Some memory for mex-function */ +FORCESNLPsolver_params params; +FORCESNLPsolver_output output; +FORCESNLPsolver_info info; + +/* THE mex-function */ +void mexFunction( solver_int32_default nlhs, mxArray *plhs[], solver_int32_default nrhs, const mxArray *prhs[] ) +{ + /* file pointer for printing */ + FILE *fp = NULL; + + /* define variables */ + mxArray *par; + mxArray *outvar; + const mxArray *PARAMS = prhs[0]; + double *pvalue; + solver_int32_default i; + solver_int32_default exitflag; + const solver_int8_default *fname; + const solver_int8_default *outputnames[61] = {"x01","x02","x03","x04","x05","x06","x07","x08","x09","x10","x11","x12","x13","x14","x15","x16","x17","x18","x19","x20","x21","x22","x23","x24","x25","x26","x27","x28","x29","x30","x31","x32","x33","x34","x35","x36","x37","x38","x39","x40","x41","x42","x43","x44","x45","x46","x47","x48","x49","x50","x51","x52","x53","x54","x55","x56","x57","x58","x59","x60","x61"}; + const solver_int8_default *infofields[10] = { "it", "it2opt", "res_eq", "res_ineq", "rsnorm", "rcompnorm", "pobj", "mu", "solvetime", "fevalstime"}; + + /* Check for proper number of arguments */ + if (nrhs != 1) + { + mexErrMsgTxt("This function requires exactly 1 input: PARAMS struct.\nType 'help FORCESNLPsolver_mex' for details."); + } + if (nlhs > 3) + { + mexErrMsgTxt("This function returns at most 3 outputs.\nType 'help FORCESNLPsolver_mex' for details."); + } + + /* Check whether params is actually a structure */ + if( !mxIsStruct(PARAMS) ) + { + mexErrMsgTxt("PARAMS must be a structure."); + } + + /* copy parameters into the right location */ + par = mxGetField(PARAMS, 0, "x0"); +#ifdef MEXARGMUENTCHECKS + if( par == NULL ) + { + mexErrMsgTxt("PARAMS.x0 not found"); + } + if( !mxIsDouble(par) ) + { + mexErrMsgTxt("PARAMS.x0 must be a double."); + } + if( mxGetM(par) != 1464 || mxGetN(par) != 1 ) + { + mexErrMsgTxt("PARAMS.x0 must be of size [1464 x 1]"); + } +#endif + copyMArrayToC(mxGetPr(par), params.x0, 1464); + + par = mxGetField(PARAMS, 0, "xinit"); +#ifdef MEXARGMUENTCHECKS + if( par == NULL ) + { + mexErrMsgTxt("PARAMS.xinit not found"); + } + if( !mxIsDouble(par) ) + { + mexErrMsgTxt("PARAMS.xinit must be a double."); + } + if( mxGetM(par) != 16 || mxGetN(par) != 1 ) + { + mexErrMsgTxt("PARAMS.xinit must be of size [16 x 1]"); + } +#endif + copyMArrayToC(mxGetPr(par), params.xinit, 16); + + par = mxGetField(PARAMS, 0, "xfinal"); +#ifdef MEXARGMUENTCHECKS + if( par == NULL ) + { + mexErrMsgTxt("PARAMS.xfinal not found"); + } + if( !mxIsDouble(par) ) + { + mexErrMsgTxt("PARAMS.xfinal must be a double."); + } + if( mxGetM(par) != 11 || mxGetN(par) != 1 ) + { + mexErrMsgTxt("PARAMS.xfinal must be of size [11 x 1]"); + } +#endif + copyMArrayToC(mxGetPr(par), params.xfinal, 11); + + par = mxGetField(PARAMS, 0, "all_parameters"); +#ifdef MEXARGMUENTCHECKS + if( par == NULL ) + { + mexErrMsgTxt("PARAMS.all_parameters not found"); + } + if( !mxIsDouble(par) ) + { + mexErrMsgTxt("PARAMS.all_parameters must be a double."); + } + if( mxGetM(par) != 2501 || mxGetN(par) != 1 ) + { + mexErrMsgTxt("PARAMS.all_parameters must be of size [2501 x 1]"); + } +#endif + copyMArrayToC(mxGetPr(par), params.all_parameters, 2501); + + #if FORCESNLPsolver_SET_PRINTLEVEL > 0 + /* Prepare file for printfs */ + /*fp = freopen("stdout_temp","w+",stdout);*/ + fp = fopen("stdout_temp","w+"); + if( fp == NULL ) + { + mexErrMsgTxt("freopen of stdout did not work."); + } + rewind(fp); + #endif + + /* call solver */ + exitflag = FORCESNLPsolver_solve(¶ms, &output, &info, fp, pt2function); + + /* close stdout */ + /* fclose(fp); */ + + #if FORCESNLPsolver_SET_PRINTLEVEL > 0 + /* Read contents of printfs printed to file */ + rewind(fp); + while( (i = fgetc(fp)) != EOF ) + { + mexPrintf("%c",i); + } + fclose(fp); + #endif + + /* copy output to matlab arrays */ + plhs[0] = mxCreateStructMatrix(1, 1, 61, outputnames); + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x01, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x01", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x02, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x02", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x03, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x03", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x04, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x04", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x05, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x05", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x06, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x06", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x07, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x07", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x08, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x08", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x09, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x09", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x10, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x10", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x11, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x11", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x12, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x12", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x13, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x13", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x14, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x14", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x15, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x15", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x16, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x16", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x17, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x17", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x18, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x18", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x19, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x19", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x20, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x20", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x21, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x21", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x22, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x22", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x23, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x23", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x24, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x24", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x25, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x25", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x26, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x26", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x27, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x27", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x28, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x28", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x29, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x29", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x30, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x30", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x31, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x31", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x32, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x32", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x33, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x33", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x34, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x34", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x35, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x35", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x36, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x36", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x37, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x37", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x38, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x38", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x39, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x39", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x40, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x40", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x41, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x41", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x42, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x42", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x43, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x43", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x44, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x44", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x45, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x45", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x46, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x46", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x47, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x47", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x48, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x48", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x49, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x49", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x50, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x50", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x51, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x51", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x52, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x52", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x53, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x53", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x54, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x54", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x55, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x55", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x56, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x56", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x57, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x57", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x58, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x58", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x59, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x59", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x60, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x60", outvar); + + outvar = mxCreateDoubleMatrix(24, 1, mxREAL); + copyCArrayToM( output.x61, mxGetPr(outvar), 24); + mxSetField(plhs[0], 0, "x61", outvar); + + /* copy exitflag */ + if( nlhs > 1 ) + { + plhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL); + *mxGetPr(plhs[1]) = (double)exitflag; + } + + /* copy info struct */ + if( nlhs > 2 ) + { + plhs[2] = mxCreateStructMatrix(1, 1, 10, infofields); + + + /* iterations */ + outvar = mxCreateDoubleMatrix(1, 1, mxREAL); + *mxGetPr(outvar) = (double)info.it; + mxSetField(plhs[2], 0, "it", outvar); + + /* iterations to optimality (branch and bound) */ + outvar = mxCreateDoubleMatrix(1, 1, mxREAL); + *mxGetPr(outvar) = (double)info.it2opt; + mxSetField(plhs[2], 0, "it2opt", outvar); + + /* res_eq */ + outvar = mxCreateDoubleMatrix(1, 1, mxREAL); + *mxGetPr(outvar) = info.res_eq; + mxSetField(plhs[2], 0, "res_eq", outvar); + + /* res_ineq */ + outvar = mxCreateDoubleMatrix(1, 1, mxREAL); + *mxGetPr(outvar) = info.res_ineq; + mxSetField(plhs[2], 0, "res_ineq", outvar); + + /* rsnorm */ + outvar = mxCreateDoubleMatrix(1, 1, mxREAL); + *mxGetPr(outvar) = info.rsnorm; + mxSetField(plhs[2], 0, "rsnorm", outvar); + + /* rcompnorm */ + outvar = mxCreateDoubleMatrix(1, 1, mxREAL); + *mxGetPr(outvar) = info.rcompnorm; + mxSetField(plhs[2], 0, "rcompnorm", outvar); + + /* pobj */ + outvar = mxCreateDoubleMatrix(1, 1, mxREAL); + *mxGetPr(outvar) = info.pobj; + mxSetField(plhs[2], 0, "pobj", outvar); + + /* mu */ + outvar = mxCreateDoubleMatrix(1, 1, mxREAL); + *mxGetPr(outvar) = info.mu; + mxSetField(plhs[2], 0, "mu", outvar); + + /* solver time */ + outvar = mxCreateDoubleMatrix(1, 1, mxREAL); + *mxGetPr(outvar) = info.solvetime; + mxSetField(plhs[2], 0, "solvetime", outvar); + + /* solver time */ + outvar = mxCreateDoubleMatrix(1, 1, mxREAL); + *mxGetPr(outvar) = info.fevalstime; + mxSetField(plhs[2], 0, "fevalstime", outvar); + } +} \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_py.py b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_py.py new file mode 100644 index 0000000..69d3969 --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_py.py @@ -0,0 +1,491 @@ +#FORCESNLPsolver : A fast customized optimization solver. +# +#Copyright (C) 2013-2018 EMBOTECH AG [info@embotech.com]. All rights reserved. +# +# +#This software is intended for simulation and testing purposes only. +#Use of this software for any commercial purpose is prohibited. +# +#This program is distributed in the hope that it will be useful. +#EMBOTECH makes NO WARRANTIES with respect to the use of the software +#without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +#PARTICULAR PURPOSE. +# +#EMBOTECH shall not have any liability for any damage arising from the use +#of the software. +# +#This Agreement shall exclusively be governed by and interpreted in +#accordance with the laws of Switzerland, excluding its principles +#of conflict of laws. The Courts of Zurich-City shall have exclusive +#jurisdiction in case of any dispute. +# +#def __init__(): +''' +a Python wrapper for a fast solver generated by FORCES Pro v1.6.121 + + OUTPUT = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) solves a multistage problem + subject to the parameters supplied in the following dictionary: + PARAMS['x0'] - column vector of length 1464 + PARAMS['xinit'] - column vector of length 16 + PARAMS['xfinal'] - column vector of length 11 + PARAMS['all_parameters'] - column vector of length 2501 + + OUTPUT returns the values of the last iteration of the solver where + OUTPUT['x01'] - column vector of size 24 + OUTPUT['x02'] - column vector of size 24 + OUTPUT['x03'] - column vector of size 24 + OUTPUT['x04'] - column vector of size 24 + OUTPUT['x05'] - column vector of size 24 + OUTPUT['x06'] - column vector of size 24 + OUTPUT['x07'] - column vector of size 24 + OUTPUT['x08'] - column vector of size 24 + OUTPUT['x09'] - column vector of size 24 + OUTPUT['x10'] - column vector of size 24 + OUTPUT['x11'] - column vector of size 24 + OUTPUT['x12'] - column vector of size 24 + OUTPUT['x13'] - column vector of size 24 + OUTPUT['x14'] - column vector of size 24 + OUTPUT['x15'] - column vector of size 24 + OUTPUT['x16'] - column vector of size 24 + OUTPUT['x17'] - column vector of size 24 + OUTPUT['x18'] - column vector of size 24 + OUTPUT['x19'] - column vector of size 24 + OUTPUT['x20'] - column vector of size 24 + OUTPUT['x21'] - column vector of size 24 + OUTPUT['x22'] - column vector of size 24 + OUTPUT['x23'] - column vector of size 24 + OUTPUT['x24'] - column vector of size 24 + OUTPUT['x25'] - column vector of size 24 + OUTPUT['x26'] - column vector of size 24 + OUTPUT['x27'] - column vector of size 24 + OUTPUT['x28'] - column vector of size 24 + OUTPUT['x29'] - column vector of size 24 + OUTPUT['x30'] - column vector of size 24 + OUTPUT['x31'] - column vector of size 24 + OUTPUT['x32'] - column vector of size 24 + OUTPUT['x33'] - column vector of size 24 + OUTPUT['x34'] - column vector of size 24 + OUTPUT['x35'] - column vector of size 24 + OUTPUT['x36'] - column vector of size 24 + OUTPUT['x37'] - column vector of size 24 + OUTPUT['x38'] - column vector of size 24 + OUTPUT['x39'] - column vector of size 24 + OUTPUT['x40'] - column vector of size 24 + OUTPUT['x41'] - column vector of size 24 + OUTPUT['x42'] - column vector of size 24 + OUTPUT['x43'] - column vector of size 24 + OUTPUT['x44'] - column vector of size 24 + OUTPUT['x45'] - column vector of size 24 + OUTPUT['x46'] - column vector of size 24 + OUTPUT['x47'] - column vector of size 24 + OUTPUT['x48'] - column vector of size 24 + OUTPUT['x49'] - column vector of size 24 + OUTPUT['x50'] - column vector of size 24 + OUTPUT['x51'] - column vector of size 24 + OUTPUT['x52'] - column vector of size 24 + OUTPUT['x53'] - column vector of size 24 + OUTPUT['x54'] - column vector of size 24 + OUTPUT['x55'] - column vector of size 24 + OUTPUT['x56'] - column vector of size 24 + OUTPUT['x57'] - column vector of size 24 + OUTPUT['x58'] - column vector of size 24 + OUTPUT['x59'] - column vector of size 24 + OUTPUT['x60'] - column vector of size 24 + OUTPUT['x61'] - column vector of size 24 + + [OUTPUT, EXITFLAG] = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) returns additionally + the integer EXITFLAG indicating the state of the solution with + 1 - Optimal solution has been found (subject to desired accuracy) + 2 - (only branch-and-bound) A feasible point has been identified for which the objective value is no more than codeoptions.mip.mipgap*100 per cent worse than the global optimum + 0 - Timeout - maximum number of iterations reached + -1 - (only branch-and-bound) Infeasible problem (problems solving the root relaxation to the desired accuracy) + -2 - (only branch-and-bound) Out of memory - cannot fit branch and bound nodes into pre-allocated memory. + -6 - NaN or INF occured during evaluation of functions and derivatives. Please check your initial guess. + -7 - Method could not progress. Problem may be infeasible. Run FORCESdiagnostics on your problem to check for most common errors in the formulation. + -10 - The convex solver could not proceed due to an internal error + -100 - License error + + [OUTPUT, EXITFLAG, INFO] = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) returns + additional information about the last iterate: + INFO.it - number of iterations that lead to this result + INFO.it2opt - number of convex solves + INFO.res_eq - max. equality constraint residual + INFO.res_ineq - max. inequality constraint residual + INFO.rsnorm - norm of stationarity condition + INFO.rcompnorm - max of all complementarity violations + INFO.pobj - primal objective + INFO.mu - duality measure + INFO.solvetime - Time needed for solve (wall clock time) + INFO.fevalstime - Time needed for function evaluations (wall clock time) + + See also COPYING + +''' + +import ctypes +import os +import numpy as np +import numpy.ctypeslib as npct +import sys + +#_lib = ctypes.CDLL(os.path.join(os.getcwd(),'FORCESNLPsolver/lib/FORCESNLPsolver.so')) +try: + _lib = ctypes.CDLL(os.path.join(os.path.dirname(os.path.abspath(__file__)),'FORCESNLPsolver/lib/FORCESNLPsolver_withModel.so')) + csolver = getattr(_lib,'FORCESNLPsolver_solve') +except: + _lib = ctypes.CDLL(os.path.join(os.path.dirname(os.path.abspath(__file__)),'FORCESNLPsolver/lib/libFORCESNLPsolver_withModel.so')) + csolver = getattr(_lib,'FORCESNLPsolver_solve') + +class FORCESNLPsolver_params_ctypes(ctypes.Structure): +# @classmethod +# def from_param(self): +# return self + _fields_ = [('x0', ctypes.c_double * 1464), +('xinit', ctypes.c_double * 16), +('xfinal', ctypes.c_double * 11), +('all_parameters', ctypes.c_double * 2501), +] + +FORCESNLPsolver_params = {'x0' : np.array([]), +'xinit' : np.array([]), +'xfinal' : np.array([]), +'all_parameters' : np.array([]), +} +params = {'x0' : np.array([]), +'xinit' : np.array([]), +'xfinal' : np.array([]), +'all_parameters' : np.array([]), +} + +class FORCESNLPsolver_outputs_ctypes(ctypes.Structure): +# @classmethod +# def from_param(self): +# return self + _fields_ = [('x01', ctypes.c_double * 24), +('x02', ctypes.c_double * 24), +('x03', ctypes.c_double * 24), +('x04', ctypes.c_double * 24), +('x05', ctypes.c_double * 24), +('x06', ctypes.c_double * 24), +('x07', ctypes.c_double * 24), +('x08', ctypes.c_double * 24), +('x09', ctypes.c_double * 24), +('x10', ctypes.c_double * 24), +('x11', ctypes.c_double * 24), +('x12', ctypes.c_double * 24), +('x13', ctypes.c_double * 24), +('x14', ctypes.c_double * 24), +('x15', ctypes.c_double * 24), +('x16', ctypes.c_double * 24), +('x17', ctypes.c_double * 24), +('x18', ctypes.c_double * 24), +('x19', ctypes.c_double * 24), +('x20', ctypes.c_double * 24), +('x21', ctypes.c_double * 24), +('x22', ctypes.c_double * 24), +('x23', ctypes.c_double * 24), +('x24', ctypes.c_double * 24), +('x25', ctypes.c_double * 24), +('x26', ctypes.c_double * 24), +('x27', ctypes.c_double * 24), +('x28', ctypes.c_double * 24), +('x29', ctypes.c_double * 24), +('x30', ctypes.c_double * 24), +('x31', ctypes.c_double * 24), +('x32', ctypes.c_double * 24), +('x33', ctypes.c_double * 24), +('x34', ctypes.c_double * 24), +('x35', ctypes.c_double * 24), +('x36', ctypes.c_double * 24), +('x37', ctypes.c_double * 24), +('x38', ctypes.c_double * 24), +('x39', ctypes.c_double * 24), +('x40', ctypes.c_double * 24), +('x41', ctypes.c_double * 24), +('x42', ctypes.c_double * 24), +('x43', ctypes.c_double * 24), +('x44', ctypes.c_double * 24), +('x45', ctypes.c_double * 24), +('x46', ctypes.c_double * 24), +('x47', ctypes.c_double * 24), +('x48', ctypes.c_double * 24), +('x49', ctypes.c_double * 24), +('x50', ctypes.c_double * 24), +('x51', ctypes.c_double * 24), +('x52', ctypes.c_double * 24), +('x53', ctypes.c_double * 24), +('x54', ctypes.c_double * 24), +('x55', ctypes.c_double * 24), +('x56', ctypes.c_double * 24), +('x57', ctypes.c_double * 24), +('x58', ctypes.c_double * 24), +('x59', ctypes.c_double * 24), +('x60', ctypes.c_double * 24), +('x61', ctypes.c_double * 24), +] + +FORCESNLPsolver_outputs = {'x01' : np.array([]), +'x02' : np.array([]), +'x03' : np.array([]), +'x04' : np.array([]), +'x05' : np.array([]), +'x06' : np.array([]), +'x07' : np.array([]), +'x08' : np.array([]), +'x09' : np.array([]), +'x10' : np.array([]), +'x11' : np.array([]), +'x12' : np.array([]), +'x13' : np.array([]), +'x14' : np.array([]), +'x15' : np.array([]), +'x16' : np.array([]), +'x17' : np.array([]), +'x18' : np.array([]), +'x19' : np.array([]), +'x20' : np.array([]), +'x21' : np.array([]), +'x22' : np.array([]), +'x23' : np.array([]), +'x24' : np.array([]), +'x25' : np.array([]), +'x26' : np.array([]), +'x27' : np.array([]), +'x28' : np.array([]), +'x29' : np.array([]), +'x30' : np.array([]), +'x31' : np.array([]), +'x32' : np.array([]), +'x33' : np.array([]), +'x34' : np.array([]), +'x35' : np.array([]), +'x36' : np.array([]), +'x37' : np.array([]), +'x38' : np.array([]), +'x39' : np.array([]), +'x40' : np.array([]), +'x41' : np.array([]), +'x42' : np.array([]), +'x43' : np.array([]), +'x44' : np.array([]), +'x45' : np.array([]), +'x46' : np.array([]), +'x47' : np.array([]), +'x48' : np.array([]), +'x49' : np.array([]), +'x50' : np.array([]), +'x51' : np.array([]), +'x52' : np.array([]), +'x53' : np.array([]), +'x54' : np.array([]), +'x55' : np.array([]), +'x56' : np.array([]), +'x57' : np.array([]), +'x58' : np.array([]), +'x59' : np.array([]), +'x60' : np.array([]), +'x61' : np.array([]), +} + + +class FORCESNLPsolver_info(ctypes.Structure): +# @classmethod +# def from_param(self): +# return self + _fields_ = [('it', ctypes.c_int), +('it2opt', ctypes.c_int), +('res_eq', ctypes.c_double), +('res_ineq', ctypes.c_double), +('rsnorm', ctypes.c_double), +('rcompnorm', ctypes.c_double), +('pobj',ctypes.c_double), +('dobj',ctypes.c_double), +('dgap',ctypes.c_double), +('rdgap',ctypes.c_double), +('mu',ctypes.c_double), +('mu_aff',ctypes.c_double), +('sigma',ctypes.c_double), +('lsit_aff', ctypes.c_int), +('lsit_cc', ctypes.c_int), +('step_aff',ctypes.c_double), +('step_cc',ctypes.c_double), +('solvetime',ctypes.c_double), +('fevalstime',ctypes.c_double) +] + +class FILE(ctypes.Structure): + pass +if sys.version_info.major == 2: + PyFile_AsFile = ctypes.pythonapi.PyFile_AsFile # problem here with python 3 http://stackoverflow.com/questions/16130268/python-3-replacement-for-pyfile-asfile + PyFile_AsFile.argtypes = [ctypes.py_object] + PyFile_AsFile.restype = ctypes.POINTER(FILE) + +# determine data types for solver function prototype +csolver.argtypes = ( ctypes.POINTER(FORCESNLPsolver_params_ctypes), ctypes.POINTER(FORCESNLPsolver_outputs_ctypes), ctypes.POINTER(FORCESNLPsolver_info), ctypes.POINTER(FILE)) +csolver.restype = ctypes.c_int + +def FORCESNLPsolver_solve(params_arg): + ''' +a Python wrapper for a fast solver generated by FORCES Pro v1.6.121 + + OUTPUT = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) solves a multistage problem + subject to the parameters supplied in the following dictionary: + PARAMS['x0'] - column vector of length 1464 + PARAMS['xinit'] - column vector of length 16 + PARAMS['xfinal'] - column vector of length 11 + PARAMS['all_parameters'] - column vector of length 2501 + + OUTPUT returns the values of the last iteration of the solver where + OUTPUT['x01'] - column vector of size 24 + OUTPUT['x02'] - column vector of size 24 + OUTPUT['x03'] - column vector of size 24 + OUTPUT['x04'] - column vector of size 24 + OUTPUT['x05'] - column vector of size 24 + OUTPUT['x06'] - column vector of size 24 + OUTPUT['x07'] - column vector of size 24 + OUTPUT['x08'] - column vector of size 24 + OUTPUT['x09'] - column vector of size 24 + OUTPUT['x10'] - column vector of size 24 + OUTPUT['x11'] - column vector of size 24 + OUTPUT['x12'] - column vector of size 24 + OUTPUT['x13'] - column vector of size 24 + OUTPUT['x14'] - column vector of size 24 + OUTPUT['x15'] - column vector of size 24 + OUTPUT['x16'] - column vector of size 24 + OUTPUT['x17'] - column vector of size 24 + OUTPUT['x18'] - column vector of size 24 + OUTPUT['x19'] - column vector of size 24 + OUTPUT['x20'] - column vector of size 24 + OUTPUT['x21'] - column vector of size 24 + OUTPUT['x22'] - column vector of size 24 + OUTPUT['x23'] - column vector of size 24 + OUTPUT['x24'] - column vector of size 24 + OUTPUT['x25'] - column vector of size 24 + OUTPUT['x26'] - column vector of size 24 + OUTPUT['x27'] - column vector of size 24 + OUTPUT['x28'] - column vector of size 24 + OUTPUT['x29'] - column vector of size 24 + OUTPUT['x30'] - column vector of size 24 + OUTPUT['x31'] - column vector of size 24 + OUTPUT['x32'] - column vector of size 24 + OUTPUT['x33'] - column vector of size 24 + OUTPUT['x34'] - column vector of size 24 + OUTPUT['x35'] - column vector of size 24 + OUTPUT['x36'] - column vector of size 24 + OUTPUT['x37'] - column vector of size 24 + OUTPUT['x38'] - column vector of size 24 + OUTPUT['x39'] - column vector of size 24 + OUTPUT['x40'] - column vector of size 24 + OUTPUT['x41'] - column vector of size 24 + OUTPUT['x42'] - column vector of size 24 + OUTPUT['x43'] - column vector of size 24 + OUTPUT['x44'] - column vector of size 24 + OUTPUT['x45'] - column vector of size 24 + OUTPUT['x46'] - column vector of size 24 + OUTPUT['x47'] - column vector of size 24 + OUTPUT['x48'] - column vector of size 24 + OUTPUT['x49'] - column vector of size 24 + OUTPUT['x50'] - column vector of size 24 + OUTPUT['x51'] - column vector of size 24 + OUTPUT['x52'] - column vector of size 24 + OUTPUT['x53'] - column vector of size 24 + OUTPUT['x54'] - column vector of size 24 + OUTPUT['x55'] - column vector of size 24 + OUTPUT['x56'] - column vector of size 24 + OUTPUT['x57'] - column vector of size 24 + OUTPUT['x58'] - column vector of size 24 + OUTPUT['x59'] - column vector of size 24 + OUTPUT['x60'] - column vector of size 24 + OUTPUT['x61'] - column vector of size 24 + + [OUTPUT, EXITFLAG] = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) returns additionally + the integer EXITFLAG indicating the state of the solution with + 1 - Optimal solution has been found (subject to desired accuracy) + 2 - (only branch-and-bound) A feasible point has been identified for which the objective value is no more than codeoptions.mip.mipgap*100 per cent worse than the global optimum + 0 - Timeout - maximum number of iterations reached + -1 - (only branch-and-bound) Infeasible problem (problems solving the root relaxation to the desired accuracy) + -2 - (only branch-and-bound) Out of memory - cannot fit branch and bound nodes into pre-allocated memory. + -6 - NaN or INF occured during evaluation of functions and derivatives. Please check your initial guess. + -7 - Method could not progress. Problem may be infeasible. Run FORCESdiagnostics on your problem to check for most common errors in the formulation. + -10 - The convex solver could not proceed due to an internal error + -100 - License error + + [OUTPUT, EXITFLAG, INFO] = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) returns + additional information about the last iterate: + INFO.it - number of iterations that lead to this result + INFO.it2opt - number of convex solves + INFO.res_eq - max. equality constraint residual + INFO.res_ineq - max. inequality constraint residual + INFO.rsnorm - norm of stationarity condition + INFO.rcompnorm - max of all complementarity violations + INFO.pobj - primal objective + INFO.mu - duality measure + INFO.solvetime - Time needed for solve (wall clock time) + INFO.fevalstime - Time needed for function evaluations (wall clock time) + + See also COPYING + + ''' + global _lib + + # convert parameters + params_py = FORCESNLPsolver_params_ctypes() + for par in params_arg: + try: + #setattr(params_py, par, npct.as_ctypes(np.reshape(params_arg[par],np.size(params_arg[par]),order='A'))) + params_arg[par] = np.require(params_arg[par], dtype=np.float64, requirements='F') + setattr(params_py, par, npct.as_ctypes(np.reshape(params_arg[par],np.size(params_arg[par]),order='F'))) + except: + raise ValueError('Parameter ' + par + ' does not have the appropriate dimensions or data type. Please use numpy arrays for parameters.') + + outputs_py = FORCESNLPsolver_outputs_ctypes() + info_py = FORCESNLPsolver_info() + if sys.version_info.major == 2: + if sys.platform.startswith('win'): + fp = None # if set to none, the solver prints to stdout by default - necessary because we have an access violation otherwise under windows + else: + #fp = open('stdout_temp.txt','w') + fp = sys.stdout + try: + PyFile_AsFile.restype = ctypes.POINTER(FILE) + exitflag = _lib.FORCESNLPsolver_solve( params_py, ctypes.byref(outputs_py), ctypes.byref(info_py), PyFile_AsFile(fp) , _lib.FORCESNLPsolver_casadi2forces ) + #fp = open('stdout_temp.txt','r') + #print (fp.read()) + #fp.close() + except: + #print 'Problem with solver' + raise + elif sys.version_info.major == 3: + if sys.platform.startswith('win'): + libc = ctypes.cdll.msvcrt + elif sys.platform.startswith('darwin'): + libc = ctypes.CDLL('libc.dylib') + else: + libc = ctypes.CDLL('libc.so.6') # Open libc + cfopen = getattr(libc,'fopen') # Get its fopen + cfopen.restype = ctypes.POINTER(FILE) # Yes, fopen gives a file pointer + cfopen.argtypes = [ctypes.c_char_p, ctypes.c_char_p] # Yes, fopen gives a file pointer + fp = cfopen('stdout_temp.txt'.encode('utf-8'),'w'.encode('utf-8')) # Use that fopen + + try: + if sys.platform.startswith('win'): + exitflag = _lib.FORCESNLPsolver_solve( params_py, ctypes.byref(outputs_py), ctypes.byref(info_py), None , _lib.FORCESNLPsolver_casadi2forces) + else: + exitflag = _lib.FORCESNLPsolver_solve( params_py, ctypes.byref(outputs_py), ctypes.byref(info_py), fp , _lib.FORCESNLPsolver_casadi2forces) + libc.fclose(fp) + fptemp = open('stdout_temp.txt','r') + print (fptemp.read()) + fptemp.close() + except: + #print 'Problem with solver' + raise + + # convert outputs + for out in FORCESNLPsolver_outputs: + FORCESNLPsolver_outputs[out] = npct.as_array(getattr(outputs_py,out)) + + return FORCESNLPsolver_outputs,int(exitflag),info_py + +solve = FORCESNLPsolver_solve + + diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_simulinkBlock.c b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_simulinkBlock.c new file mode 100644 index 0000000..13ce888 --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_simulinkBlock.c @@ -0,0 +1,959 @@ +/* +FORCESNLPsolver : A fast customized optimization solver. + +Copyright (C) 2013-2018 EMBOTECH AG [info@embotech.com]. All rights reserved. + + +This software is intended for simulation and testing purposes only. +Use of this software for any commercial purpose is prohibited. + +This program is distributed in the hope that it will be useful. +EMBOTECH makes NO WARRANTIES with respect to the use of the software +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. + +EMBOTECH shall not have any liability for any damage arising from the use +of the software. + +This Agreement shall exclusively be governed by and interpreted in +accordance with the laws of Switzerland, excluding its principles +of conflict of laws. The Courts of Zurich-City shall have exclusive +jurisdiction in case of any dispute. + +*/ + + +#define S_FUNCTION_LEVEL 2 +#define S_FUNCTION_NAME FORCESNLPsolver_simulinkBlock + +#include "simstruc.h" + + + +/* SYSTEM INCLUDES FOR TIMING ------------------------------------------ */ + + +/* include FORCES functions and defs */ +#include "../include/FORCESNLPsolver.h" + +#if defined(MATLAB_MEX_FILE) +#include "tmwtypes.h" +#include "simstruc_types.h" +#else +#include "rtwtypes.h" +#endif + +typedef FORCESNLPsolverinterface_float FORCESNLPsolvernmpc_float; + +extern void FORCESNLPsolver_casadi2forces(double *x, double *y, double *l, double *p, double *f, double *nabla_f, double *c, double *nabla_c, double *h, double *nabla_h, double *hess, solver_int32_default stage); +FORCESNLPsolver_extfunc pt2function = &FORCESNLPsolver_casadi2forces; + + + + +/*====================* + * S-function methods * + *====================*/ +/* Function: mdlInitializeSizes ========================================= + * Abstract: + * Setup sizes of the various vectors. + */ +static void mdlInitializeSizes(SimStruct *S) +{ + + DECL_AND_INIT_DIMSINFO(inputDimsInfo); + DECL_AND_INIT_DIMSINFO(outputDimsInfo); + ssSetNumSFcnParams(S, 0); + if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) + { + return; /* Parameter mismatch will be reported by Simulink */ + } + + /* initialize size of continuous and discrete states to zero */ + ssSetNumContStates(S, 0); + ssSetNumDiscStates(S, 0); + + /* initialize input ports - there are 4 in total */ + if (!ssSetNumInputPorts(S, 4)) return; + + /* Input Port 0 */ + ssSetInputPortMatrixDimensions(S, 0, 1464, 1); + ssSetInputPortDataType(S, 0, SS_DOUBLE); + ssSetInputPortComplexSignal(S, 0, COMPLEX_NO); /* no complex signals suppported */ + ssSetInputPortDirectFeedThrough(S, 0, 1); /* Feedthrough enabled */ + ssSetInputPortRequiredContiguous(S, 0, 1); /*direct input signal access*/ + /* Input Port 1 */ + ssSetInputPortMatrixDimensions(S, 1, 16, 1); + ssSetInputPortDataType(S, 1, SS_DOUBLE); + ssSetInputPortComplexSignal(S, 1, COMPLEX_NO); /* no complex signals suppported */ + ssSetInputPortDirectFeedThrough(S, 1, 1); /* Feedthrough enabled */ + ssSetInputPortRequiredContiguous(S, 1, 1); /*direct input signal access*/ + /* Input Port 2 */ + ssSetInputPortMatrixDimensions(S, 2, 11, 1); + ssSetInputPortDataType(S, 2, SS_DOUBLE); + ssSetInputPortComplexSignal(S, 2, COMPLEX_NO); /* no complex signals suppported */ + ssSetInputPortDirectFeedThrough(S, 2, 1); /* Feedthrough enabled */ + ssSetInputPortRequiredContiguous(S, 2, 1); /*direct input signal access*/ + /* Input Port 3 */ + ssSetInputPortMatrixDimensions(S, 3, 2501, 1); + ssSetInputPortDataType(S, 3, SS_DOUBLE); + ssSetInputPortComplexSignal(S, 3, COMPLEX_NO); /* no complex signals suppported */ + ssSetInputPortDirectFeedThrough(S, 3, 1); /* Feedthrough enabled */ + ssSetInputPortRequiredContiguous(S, 3, 1); /*direct input signal access*/ + + + /* initialize output ports - there are 61 in total */ + if (!ssSetNumOutputPorts(S, 61)) return; + + /* Output Port 0 */ + ssSetOutputPortMatrixDimensions(S, 0, 24, 1); + ssSetOutputPortDataType(S, 0, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 0, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 1 */ + ssSetOutputPortMatrixDimensions(S, 1, 24, 1); + ssSetOutputPortDataType(S, 1, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 1, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 2 */ + ssSetOutputPortMatrixDimensions(S, 2, 24, 1); + ssSetOutputPortDataType(S, 2, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 2, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 3 */ + ssSetOutputPortMatrixDimensions(S, 3, 24, 1); + ssSetOutputPortDataType(S, 3, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 3, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 4 */ + ssSetOutputPortMatrixDimensions(S, 4, 24, 1); + ssSetOutputPortDataType(S, 4, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 4, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 5 */ + ssSetOutputPortMatrixDimensions(S, 5, 24, 1); + ssSetOutputPortDataType(S, 5, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 5, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 6 */ + ssSetOutputPortMatrixDimensions(S, 6, 24, 1); + ssSetOutputPortDataType(S, 6, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 6, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 7 */ + ssSetOutputPortMatrixDimensions(S, 7, 24, 1); + ssSetOutputPortDataType(S, 7, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 7, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 8 */ + ssSetOutputPortMatrixDimensions(S, 8, 24, 1); + ssSetOutputPortDataType(S, 8, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 8, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 9 */ + ssSetOutputPortMatrixDimensions(S, 9, 24, 1); + ssSetOutputPortDataType(S, 9, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 9, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 10 */ + ssSetOutputPortMatrixDimensions(S, 10, 24, 1); + ssSetOutputPortDataType(S, 10, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 10, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 11 */ + ssSetOutputPortMatrixDimensions(S, 11, 24, 1); + ssSetOutputPortDataType(S, 11, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 11, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 12 */ + ssSetOutputPortMatrixDimensions(S, 12, 24, 1); + ssSetOutputPortDataType(S, 12, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 12, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 13 */ + ssSetOutputPortMatrixDimensions(S, 13, 24, 1); + ssSetOutputPortDataType(S, 13, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 13, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 14 */ + ssSetOutputPortMatrixDimensions(S, 14, 24, 1); + ssSetOutputPortDataType(S, 14, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 14, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 15 */ + ssSetOutputPortMatrixDimensions(S, 15, 24, 1); + ssSetOutputPortDataType(S, 15, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 15, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 16 */ + ssSetOutputPortMatrixDimensions(S, 16, 24, 1); + ssSetOutputPortDataType(S, 16, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 16, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 17 */ + ssSetOutputPortMatrixDimensions(S, 17, 24, 1); + ssSetOutputPortDataType(S, 17, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 17, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 18 */ + ssSetOutputPortMatrixDimensions(S, 18, 24, 1); + ssSetOutputPortDataType(S, 18, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 18, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 19 */ + ssSetOutputPortMatrixDimensions(S, 19, 24, 1); + ssSetOutputPortDataType(S, 19, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 19, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 20 */ + ssSetOutputPortMatrixDimensions(S, 20, 24, 1); + ssSetOutputPortDataType(S, 20, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 20, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 21 */ + ssSetOutputPortMatrixDimensions(S, 21, 24, 1); + ssSetOutputPortDataType(S, 21, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 21, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 22 */ + ssSetOutputPortMatrixDimensions(S, 22, 24, 1); + ssSetOutputPortDataType(S, 22, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 22, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 23 */ + ssSetOutputPortMatrixDimensions(S, 23, 24, 1); + ssSetOutputPortDataType(S, 23, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 23, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 24 */ + ssSetOutputPortMatrixDimensions(S, 24, 24, 1); + ssSetOutputPortDataType(S, 24, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 24, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 25 */ + ssSetOutputPortMatrixDimensions(S, 25, 24, 1); + ssSetOutputPortDataType(S, 25, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 25, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 26 */ + ssSetOutputPortMatrixDimensions(S, 26, 24, 1); + ssSetOutputPortDataType(S, 26, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 26, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 27 */ + ssSetOutputPortMatrixDimensions(S, 27, 24, 1); + ssSetOutputPortDataType(S, 27, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 27, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 28 */ + ssSetOutputPortMatrixDimensions(S, 28, 24, 1); + ssSetOutputPortDataType(S, 28, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 28, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 29 */ + ssSetOutputPortMatrixDimensions(S, 29, 24, 1); + ssSetOutputPortDataType(S, 29, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 29, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 30 */ + ssSetOutputPortMatrixDimensions(S, 30, 24, 1); + ssSetOutputPortDataType(S, 30, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 30, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 31 */ + ssSetOutputPortMatrixDimensions(S, 31, 24, 1); + ssSetOutputPortDataType(S, 31, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 31, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 32 */ + ssSetOutputPortMatrixDimensions(S, 32, 24, 1); + ssSetOutputPortDataType(S, 32, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 32, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 33 */ + ssSetOutputPortMatrixDimensions(S, 33, 24, 1); + ssSetOutputPortDataType(S, 33, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 33, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 34 */ + ssSetOutputPortMatrixDimensions(S, 34, 24, 1); + ssSetOutputPortDataType(S, 34, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 34, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 35 */ + ssSetOutputPortMatrixDimensions(S, 35, 24, 1); + ssSetOutputPortDataType(S, 35, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 35, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 36 */ + ssSetOutputPortMatrixDimensions(S, 36, 24, 1); + ssSetOutputPortDataType(S, 36, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 36, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 37 */ + ssSetOutputPortMatrixDimensions(S, 37, 24, 1); + ssSetOutputPortDataType(S, 37, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 37, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 38 */ + ssSetOutputPortMatrixDimensions(S, 38, 24, 1); + ssSetOutputPortDataType(S, 38, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 38, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 39 */ + ssSetOutputPortMatrixDimensions(S, 39, 24, 1); + ssSetOutputPortDataType(S, 39, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 39, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 40 */ + ssSetOutputPortMatrixDimensions(S, 40, 24, 1); + ssSetOutputPortDataType(S, 40, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 40, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 41 */ + ssSetOutputPortMatrixDimensions(S, 41, 24, 1); + ssSetOutputPortDataType(S, 41, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 41, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 42 */ + ssSetOutputPortMatrixDimensions(S, 42, 24, 1); + ssSetOutputPortDataType(S, 42, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 42, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 43 */ + ssSetOutputPortMatrixDimensions(S, 43, 24, 1); + ssSetOutputPortDataType(S, 43, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 43, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 44 */ + ssSetOutputPortMatrixDimensions(S, 44, 24, 1); + ssSetOutputPortDataType(S, 44, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 44, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 45 */ + ssSetOutputPortMatrixDimensions(S, 45, 24, 1); + ssSetOutputPortDataType(S, 45, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 45, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 46 */ + ssSetOutputPortMatrixDimensions(S, 46, 24, 1); + ssSetOutputPortDataType(S, 46, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 46, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 47 */ + ssSetOutputPortMatrixDimensions(S, 47, 24, 1); + ssSetOutputPortDataType(S, 47, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 47, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 48 */ + ssSetOutputPortMatrixDimensions(S, 48, 24, 1); + ssSetOutputPortDataType(S, 48, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 48, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 49 */ + ssSetOutputPortMatrixDimensions(S, 49, 24, 1); + ssSetOutputPortDataType(S, 49, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 49, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 50 */ + ssSetOutputPortMatrixDimensions(S, 50, 24, 1); + ssSetOutputPortDataType(S, 50, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 50, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 51 */ + ssSetOutputPortMatrixDimensions(S, 51, 24, 1); + ssSetOutputPortDataType(S, 51, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 51, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 52 */ + ssSetOutputPortMatrixDimensions(S, 52, 24, 1); + ssSetOutputPortDataType(S, 52, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 52, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 53 */ + ssSetOutputPortMatrixDimensions(S, 53, 24, 1); + ssSetOutputPortDataType(S, 53, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 53, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 54 */ + ssSetOutputPortMatrixDimensions(S, 54, 24, 1); + ssSetOutputPortDataType(S, 54, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 54, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 55 */ + ssSetOutputPortMatrixDimensions(S, 55, 24, 1); + ssSetOutputPortDataType(S, 55, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 55, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 56 */ + ssSetOutputPortMatrixDimensions(S, 56, 24, 1); + ssSetOutputPortDataType(S, 56, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 56, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 57 */ + ssSetOutputPortMatrixDimensions(S, 57, 24, 1); + ssSetOutputPortDataType(S, 57, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 57, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 58 */ + ssSetOutputPortMatrixDimensions(S, 58, 24, 1); + ssSetOutputPortDataType(S, 58, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 58, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 59 */ + ssSetOutputPortMatrixDimensions(S, 59, 24, 1); + ssSetOutputPortDataType(S, 59, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 59, COMPLEX_NO); /* no complex signals suppported */ + + /* Output Port 60 */ + ssSetOutputPortMatrixDimensions(S, 60, 24, 1); + ssSetOutputPortDataType(S, 60, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 60, COMPLEX_NO); /* no complex signals suppported */ + + + /* set sampling time */ + ssSetNumSampleTimes(S, 1); + + /* set internal memory of block */ + ssSetNumRWork(S, 0); + ssSetNumIWork(S, 0); + ssSetNumPWork(S, 0); + ssSetNumModes(S, 0); + ssSetNumNonsampledZCs(S, 0); + + /* Take care when specifying exception free code - see sfuntmpl_doc.c */ + /* SS_OPTION_USE_TLC_WITH_ACCELERATOR removed */ + /* SS_OPTION_USE_TLC_WITH_ACCELERATOR removed */ + /* ssSetOptions(S, (SS_OPTION_EXCEPTION_FREE_CODE | + SS_OPTION_WORKS_WITH_CODE_REUSE)); */ + ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE ); + + +} + +#if defined(MATLAB_MEX_FILE) +#define MDL_SET_INPUT_PORT_DIMENSION_INFO +static void mdlSetInputPortDimensionInfo(SimStruct *S, + int_T port, + const DimsInfo_T *dimsInfo) +{ + if(!ssSetInputPortDimensionInfo(S, port, dimsInfo)) return; +} +#endif + +#define MDL_SET_OUTPUT_PORT_DIMENSION_INFO +#if defined(MDL_SET_OUTPUT_PORT_DIMENSION_INFO) +static void mdlSetOutputPortDimensionInfo(SimStruct *S, + int_T port, + const DimsInfo_T *dimsInfo) +{ + if (!ssSetOutputPortDimensionInfo(S, port, dimsInfo)) return; +} +#endif +# define MDL_SET_INPUT_PORT_FRAME_DATA +static void mdlSetInputPortFrameData(SimStruct *S, + int_T port, + Frame_T frameData) +{ + ssSetInputPortFrameData(S, port, frameData); +} +/* Function: mdlInitializeSampleTimes ========================================= + * Abstract: + * Specifiy the sample time. + */ +static void mdlInitializeSampleTimes(SimStruct *S) +{ + ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME); + ssSetOffsetTime(S, 0, 0.0); +} + +#define MDL_SET_INPUT_PORT_DATA_TYPE +static void mdlSetInputPortDataType(SimStruct *S, solver_int32_default port, DTypeId dType) +{ + ssSetInputPortDataType( S, 0, dType); +} +#define MDL_SET_OUTPUT_PORT_DATA_TYPE +static void mdlSetOutputPortDataType(SimStruct *S, solver_int32_default port, DTypeId dType) +{ + ssSetOutputPortDataType(S, 0, dType); +} + +#define MDL_SET_DEFAULT_PORT_DATA_TYPES +static void mdlSetDefaultPortDataTypes(SimStruct *S) +{ + ssSetInputPortDataType( S, 0, SS_DOUBLE); + ssSetOutputPortDataType(S, 0, SS_DOUBLE); +} + + + + + +/* Function: mdlOutputs ======================================================= + * +*/ +static void mdlOutputs(SimStruct *S, int_T tid) +{ + solver_int32_default i, j, k; + + /* file pointer for printing */ + FILE *fp = NULL; + + /* Simulink data */ + const real_T *x0 = (const real_T*) ssGetInputPortSignal(S,0); + const real_T *xinit = (const real_T*) ssGetInputPortSignal(S,1); + const real_T *xfinal = (const real_T*) ssGetInputPortSignal(S,2); + const real_T *all_parameters = (const real_T*) ssGetInputPortSignal(S,3); + + real_T *x01 = (real_T*) ssGetOutputPortSignal(S,0); + real_T *x02 = (real_T*) ssGetOutputPortSignal(S,1); + real_T *x03 = (real_T*) ssGetOutputPortSignal(S,2); + real_T *x04 = (real_T*) ssGetOutputPortSignal(S,3); + real_T *x05 = (real_T*) ssGetOutputPortSignal(S,4); + real_T *x06 = (real_T*) ssGetOutputPortSignal(S,5); + real_T *x07 = (real_T*) ssGetOutputPortSignal(S,6); + real_T *x08 = (real_T*) ssGetOutputPortSignal(S,7); + real_T *x09 = (real_T*) ssGetOutputPortSignal(S,8); + real_T *x10 = (real_T*) ssGetOutputPortSignal(S,9); + real_T *x11 = (real_T*) ssGetOutputPortSignal(S,10); + real_T *x12 = (real_T*) ssGetOutputPortSignal(S,11); + real_T *x13 = (real_T*) ssGetOutputPortSignal(S,12); + real_T *x14 = (real_T*) ssGetOutputPortSignal(S,13); + real_T *x15 = (real_T*) ssGetOutputPortSignal(S,14); + real_T *x16 = (real_T*) ssGetOutputPortSignal(S,15); + real_T *x17 = (real_T*) ssGetOutputPortSignal(S,16); + real_T *x18 = (real_T*) ssGetOutputPortSignal(S,17); + real_T *x19 = (real_T*) ssGetOutputPortSignal(S,18); + real_T *x20 = (real_T*) ssGetOutputPortSignal(S,19); + real_T *x21 = (real_T*) ssGetOutputPortSignal(S,20); + real_T *x22 = (real_T*) ssGetOutputPortSignal(S,21); + real_T *x23 = (real_T*) ssGetOutputPortSignal(S,22); + real_T *x24 = (real_T*) ssGetOutputPortSignal(S,23); + real_T *x25 = (real_T*) ssGetOutputPortSignal(S,24); + real_T *x26 = (real_T*) ssGetOutputPortSignal(S,25); + real_T *x27 = (real_T*) ssGetOutputPortSignal(S,26); + real_T *x28 = (real_T*) ssGetOutputPortSignal(S,27); + real_T *x29 = (real_T*) ssGetOutputPortSignal(S,28); + real_T *x30 = (real_T*) ssGetOutputPortSignal(S,29); + real_T *x31 = (real_T*) ssGetOutputPortSignal(S,30); + real_T *x32 = (real_T*) ssGetOutputPortSignal(S,31); + real_T *x33 = (real_T*) ssGetOutputPortSignal(S,32); + real_T *x34 = (real_T*) ssGetOutputPortSignal(S,33); + real_T *x35 = (real_T*) ssGetOutputPortSignal(S,34); + real_T *x36 = (real_T*) ssGetOutputPortSignal(S,35); + real_T *x37 = (real_T*) ssGetOutputPortSignal(S,36); + real_T *x38 = (real_T*) ssGetOutputPortSignal(S,37); + real_T *x39 = (real_T*) ssGetOutputPortSignal(S,38); + real_T *x40 = (real_T*) ssGetOutputPortSignal(S,39); + real_T *x41 = (real_T*) ssGetOutputPortSignal(S,40); + real_T *x42 = (real_T*) ssGetOutputPortSignal(S,41); + real_T *x43 = (real_T*) ssGetOutputPortSignal(S,42); + real_T *x44 = (real_T*) ssGetOutputPortSignal(S,43); + real_T *x45 = (real_T*) ssGetOutputPortSignal(S,44); + real_T *x46 = (real_T*) ssGetOutputPortSignal(S,45); + real_T *x47 = (real_T*) ssGetOutputPortSignal(S,46); + real_T *x48 = (real_T*) ssGetOutputPortSignal(S,47); + real_T *x49 = (real_T*) ssGetOutputPortSignal(S,48); + real_T *x50 = (real_T*) ssGetOutputPortSignal(S,49); + real_T *x51 = (real_T*) ssGetOutputPortSignal(S,50); + real_T *x52 = (real_T*) ssGetOutputPortSignal(S,51); + real_T *x53 = (real_T*) ssGetOutputPortSignal(S,52); + real_T *x54 = (real_T*) ssGetOutputPortSignal(S,53); + real_T *x55 = (real_T*) ssGetOutputPortSignal(S,54); + real_T *x56 = (real_T*) ssGetOutputPortSignal(S,55); + real_T *x57 = (real_T*) ssGetOutputPortSignal(S,56); + real_T *x58 = (real_T*) ssGetOutputPortSignal(S,57); + real_T *x59 = (real_T*) ssGetOutputPortSignal(S,58); + real_T *x60 = (real_T*) ssGetOutputPortSignal(S,59); + real_T *x61 = (real_T*) ssGetOutputPortSignal(S,60); + + + + /* Solver data */ + FORCESNLPsolver_params params; + FORCESNLPsolver_output output; + FORCESNLPsolver_info info; + solver_int32_default exitflag; + + /* Extra NMPC data */ + + + /* Copy inputs */ + for( i=0; i<1464; i++) + { + params.x0[i] = (double) x0[i]; + } + + for( i=0; i<16; i++) + { + params.xinit[i] = (double) xinit[i]; + } + + for( i=0; i<11; i++) + { + params.xfinal[i] = (double) xfinal[i]; + } + + for( i=0; i<2501; i++) + { + params.all_parameters[i] = (double) all_parameters[i]; + } + + + + + + #if FORCESNLPsolver_SET_PRINTLEVEL > 0 + /* Prepare file for printfs */ + fp = fopen("stdout_temp","w+"); + if( fp == NULL ) + { + mexErrMsgTxt("freopen of stdout did not work."); + } + rewind(fp); + #endif + + /* Call solver */ + exitflag = FORCESNLPsolver_solve(¶ms, &output, &info, fp , pt2function); + + #if FORCESNLPsolver_SET_PRINTLEVEL > 0 + /* Read contents of printfs printed to file */ + rewind(fp); + while( (i = fgetc(fp)) != EOF ) + { + ssPrintf("%c",i); + } + fclose(fp); + #endif + + + + /* Copy outputs */ + for( i=0; i<24; i++) + { + x01[i] = (real_T) output.x01[i]; + } + + for( i=0; i<24; i++) + { + x02[i] = (real_T) output.x02[i]; + } + + for( i=0; i<24; i++) + { + x03[i] = (real_T) output.x03[i]; + } + + for( i=0; i<24; i++) + { + x04[i] = (real_T) output.x04[i]; + } + + for( i=0; i<24; i++) + { + x05[i] = (real_T) output.x05[i]; + } + + for( i=0; i<24; i++) + { + x06[i] = (real_T) output.x06[i]; + } + + for( i=0; i<24; i++) + { + x07[i] = (real_T) output.x07[i]; + } + + for( i=0; i<24; i++) + { + x08[i] = (real_T) output.x08[i]; + } + + for( i=0; i<24; i++) + { + x09[i] = (real_T) output.x09[i]; + } + + for( i=0; i<24; i++) + { + x10[i] = (real_T) output.x10[i]; + } + + for( i=0; i<24; i++) + { + x11[i] = (real_T) output.x11[i]; + } + + for( i=0; i<24; i++) + { + x12[i] = (real_T) output.x12[i]; + } + + for( i=0; i<24; i++) + { + x13[i] = (real_T) output.x13[i]; + } + + for( i=0; i<24; i++) + { + x14[i] = (real_T) output.x14[i]; + } + + for( i=0; i<24; i++) + { + x15[i] = (real_T) output.x15[i]; + } + + for( i=0; i<24; i++) + { + x16[i] = (real_T) output.x16[i]; + } + + for( i=0; i<24; i++) + { + x17[i] = (real_T) output.x17[i]; + } + + for( i=0; i<24; i++) + { + x18[i] = (real_T) output.x18[i]; + } + + for( i=0; i<24; i++) + { + x19[i] = (real_T) output.x19[i]; + } + + for( i=0; i<24; i++) + { + x20[i] = (real_T) output.x20[i]; + } + + for( i=0; i<24; i++) + { + x21[i] = (real_T) output.x21[i]; + } + + for( i=0; i<24; i++) + { + x22[i] = (real_T) output.x22[i]; + } + + for( i=0; i<24; i++) + { + x23[i] = (real_T) output.x23[i]; + } + + for( i=0; i<24; i++) + { + x24[i] = (real_T) output.x24[i]; + } + + for( i=0; i<24; i++) + { + x25[i] = (real_T) output.x25[i]; + } + + for( i=0; i<24; i++) + { + x26[i] = (real_T) output.x26[i]; + } + + for( i=0; i<24; i++) + { + x27[i] = (real_T) output.x27[i]; + } + + for( i=0; i<24; i++) + { + x28[i] = (real_T) output.x28[i]; + } + + for( i=0; i<24; i++) + { + x29[i] = (real_T) output.x29[i]; + } + + for( i=0; i<24; i++) + { + x30[i] = (real_T) output.x30[i]; + } + + for( i=0; i<24; i++) + { + x31[i] = (real_T) output.x31[i]; + } + + for( i=0; i<24; i++) + { + x32[i] = (real_T) output.x32[i]; + } + + for( i=0; i<24; i++) + { + x33[i] = (real_T) output.x33[i]; + } + + for( i=0; i<24; i++) + { + x34[i] = (real_T) output.x34[i]; + } + + for( i=0; i<24; i++) + { + x35[i] = (real_T) output.x35[i]; + } + + for( i=0; i<24; i++) + { + x36[i] = (real_T) output.x36[i]; + } + + for( i=0; i<24; i++) + { + x37[i] = (real_T) output.x37[i]; + } + + for( i=0; i<24; i++) + { + x38[i] = (real_T) output.x38[i]; + } + + for( i=0; i<24; i++) + { + x39[i] = (real_T) output.x39[i]; + } + + for( i=0; i<24; i++) + { + x40[i] = (real_T) output.x40[i]; + } + + for( i=0; i<24; i++) + { + x41[i] = (real_T) output.x41[i]; + } + + for( i=0; i<24; i++) + { + x42[i] = (real_T) output.x42[i]; + } + + for( i=0; i<24; i++) + { + x43[i] = (real_T) output.x43[i]; + } + + for( i=0; i<24; i++) + { + x44[i] = (real_T) output.x44[i]; + } + + for( i=0; i<24; i++) + { + x45[i] = (real_T) output.x45[i]; + } + + for( i=0; i<24; i++) + { + x46[i] = (real_T) output.x46[i]; + } + + for( i=0; i<24; i++) + { + x47[i] = (real_T) output.x47[i]; + } + + for( i=0; i<24; i++) + { + x48[i] = (real_T) output.x48[i]; + } + + for( i=0; i<24; i++) + { + x49[i] = (real_T) output.x49[i]; + } + + for( i=0; i<24; i++) + { + x50[i] = (real_T) output.x50[i]; + } + + for( i=0; i<24; i++) + { + x51[i] = (real_T) output.x51[i]; + } + + for( i=0; i<24; i++) + { + x52[i] = (real_T) output.x52[i]; + } + + for( i=0; i<24; i++) + { + x53[i] = (real_T) output.x53[i]; + } + + for( i=0; i<24; i++) + { + x54[i] = (real_T) output.x54[i]; + } + + for( i=0; i<24; i++) + { + x55[i] = (real_T) output.x55[i]; + } + + for( i=0; i<24; i++) + { + x56[i] = (real_T) output.x56[i]; + } + + for( i=0; i<24; i++) + { + x57[i] = (real_T) output.x57[i]; + } + + for( i=0; i<24; i++) + { + x58[i] = (real_T) output.x58[i]; + } + + for( i=0; i<24; i++) + { + x59[i] = (real_T) output.x59[i]; + } + + for( i=0; i<24; i++) + { + x60[i] = (real_T) output.x60[i]; + } + + for( i=0; i<24; i++) + { + x61[i] = (real_T) output.x61[i]; + } + + +} + + + + + +/* Function: mdlTerminate ===================================================== + * Abstract: + * In this function, you should perform any actions that are necessary + * at the termination of a simulation. For example, if memory was + * allocated in mdlStart, this is the place to free it. + */ +static void mdlTerminate(SimStruct *S) +{ +} +#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */ +#include "simulink.c" /* MEX-file interface mechanism */ +#else +#include "cg_sfun.h" /* Code generation registration function */ +#endif + + diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_simulinkBlockcompact.c b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_simulinkBlockcompact.c new file mode 100644 index 0000000..74dc0a6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolver_simulinkBlockcompact.c @@ -0,0 +1,659 @@ +/* +FORCESNLPsolver : A fast customized optimization solver. + +Copyright (C) 2013-2018 EMBOTECH AG [info@embotech.com]. All rights reserved. + + +This software is intended for simulation and testing purposes only. +Use of this software for any commercial purpose is prohibited. + +This program is distributed in the hope that it will be useful. +EMBOTECH makes NO WARRANTIES with respect to the use of the software +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +PARTICULAR PURPOSE. + +EMBOTECH shall not have any liability for any damage arising from the use +of the software. + +This Agreement shall exclusively be governed by and interpreted in +accordance with the laws of Switzerland, excluding its principles +of conflict of laws. The Courts of Zurich-City shall have exclusive +jurisdiction in case of any dispute. + +*/ + + +#define S_FUNCTION_LEVEL 2 +#define S_FUNCTION_NAME FORCESNLPsolver_simulinkBlockcompact + +#include "simstruc.h" + + + +/* SYSTEM INCLUDES FOR TIMING ------------------------------------------ */ + + +/* include FORCES functions and defs */ +#include "../include/FORCESNLPsolver.h" + +#if defined(MATLAB_MEX_FILE) +#include "tmwtypes.h" +#include "simstruc_types.h" +#else +#include "rtwtypes.h" +#endif + +typedef FORCESNLPsolverinterface_float FORCESNLPsolvernmpc_float; + +extern void FORCESNLPsolver_casadi2forces(double *x, double *y, double *l, double *p, double *f, double *nabla_f, double *c, double *nabla_c, double *h, double *nabla_h, double *hess, solver_int32_default stage); +FORCESNLPsolver_extfunc pt2function = &FORCESNLPsolver_casadi2forces; + + + + +/*====================* + * S-function methods * + *====================*/ +/* Function: mdlInitializeSizes ========================================= + * Abstract: + * Setup sizes of the various vectors. + */ +static void mdlInitializeSizes(SimStruct *S) +{ + + DECL_AND_INIT_DIMSINFO(inputDimsInfo); + DECL_AND_INIT_DIMSINFO(outputDimsInfo); + ssSetNumSFcnParams(S, 0); + if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) + { + return; /* Parameter mismatch will be reported by Simulink */ + } + + /* initialize size of continuous and discrete states to zero */ + ssSetNumContStates(S, 0); + ssSetNumDiscStates(S, 0); + + /* initialize input ports - there are 4 in total */ + if (!ssSetNumInputPorts(S, 4)) return; + + /* Input Port 0 */ + ssSetInputPortMatrixDimensions(S, 0, 1464, 1); + ssSetInputPortDataType(S, 0, SS_DOUBLE); + ssSetInputPortComplexSignal(S, 0, COMPLEX_NO); /* no complex signals suppported */ + ssSetInputPortDirectFeedThrough(S, 0, 1); /* Feedthrough enabled */ + ssSetInputPortRequiredContiguous(S, 0, 1); /*direct input signal access*/ + /* Input Port 1 */ + ssSetInputPortMatrixDimensions(S, 1, 16, 1); + ssSetInputPortDataType(S, 1, SS_DOUBLE); + ssSetInputPortComplexSignal(S, 1, COMPLEX_NO); /* no complex signals suppported */ + ssSetInputPortDirectFeedThrough(S, 1, 1); /* Feedthrough enabled */ + ssSetInputPortRequiredContiguous(S, 1, 1); /*direct input signal access*/ + /* Input Port 2 */ + ssSetInputPortMatrixDimensions(S, 2, 11, 1); + ssSetInputPortDataType(S, 2, SS_DOUBLE); + ssSetInputPortComplexSignal(S, 2, COMPLEX_NO); /* no complex signals suppported */ + ssSetInputPortDirectFeedThrough(S, 2, 1); /* Feedthrough enabled */ + ssSetInputPortRequiredContiguous(S, 2, 1); /*direct input signal access*/ + /* Input Port 3 */ + ssSetInputPortMatrixDimensions(S, 3, 2501, 1); + ssSetInputPortDataType(S, 3, SS_DOUBLE); + ssSetInputPortComplexSignal(S, 3, COMPLEX_NO); /* no complex signals suppported */ + ssSetInputPortDirectFeedThrough(S, 3, 1); /* Feedthrough enabled */ + ssSetInputPortRequiredContiguous(S, 3, 1); /*direct input signal access*/ + + + /* initialize output ports - there are 1 in total */ + if (!ssSetNumOutputPorts(S, 1)) return; + + /* Output Port 0 */ + ssSetOutputPortMatrixDimensions(S, 0, 1464, 1); + ssSetOutputPortDataType(S, 0, SS_DOUBLE); + ssSetOutputPortComplexSignal(S, 0, COMPLEX_NO); /* no complex signals suppported */ + + + /* set sampling time */ + ssSetNumSampleTimes(S, 1); + + /* set internal memory of block */ + ssSetNumRWork(S, 0); + ssSetNumIWork(S, 0); + ssSetNumPWork(S, 0); + ssSetNumModes(S, 0); + ssSetNumNonsampledZCs(S, 0); + + /* Take care when specifying exception free code - see sfuntmpl_doc.c */ + /* SS_OPTION_USE_TLC_WITH_ACCELERATOR removed */ + /* SS_OPTION_USE_TLC_WITH_ACCELERATOR removed */ + /* ssSetOptions(S, (SS_OPTION_EXCEPTION_FREE_CODE | + SS_OPTION_WORKS_WITH_CODE_REUSE)); */ + ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE ); + + +} + +#if defined(MATLAB_MEX_FILE) +#define MDL_SET_INPUT_PORT_DIMENSION_INFO +static void mdlSetInputPortDimensionInfo(SimStruct *S, + int_T port, + const DimsInfo_T *dimsInfo) +{ + if(!ssSetInputPortDimensionInfo(S, port, dimsInfo)) return; +} +#endif + +#define MDL_SET_OUTPUT_PORT_DIMENSION_INFO +#if defined(MDL_SET_OUTPUT_PORT_DIMENSION_INFO) +static void mdlSetOutputPortDimensionInfo(SimStruct *S, + int_T port, + const DimsInfo_T *dimsInfo) +{ + if (!ssSetOutputPortDimensionInfo(S, port, dimsInfo)) return; +} +#endif +# define MDL_SET_INPUT_PORT_FRAME_DATA +static void mdlSetInputPortFrameData(SimStruct *S, + int_T port, + Frame_T frameData) +{ + ssSetInputPortFrameData(S, port, frameData); +} +/* Function: mdlInitializeSampleTimes ========================================= + * Abstract: + * Specifiy the sample time. + */ +static void mdlInitializeSampleTimes(SimStruct *S) +{ + ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME); + ssSetOffsetTime(S, 0, 0.0); +} + +#define MDL_SET_INPUT_PORT_DATA_TYPE +static void mdlSetInputPortDataType(SimStruct *S, solver_int32_default port, DTypeId dType) +{ + ssSetInputPortDataType( S, 0, dType); +} +#define MDL_SET_OUTPUT_PORT_DATA_TYPE +static void mdlSetOutputPortDataType(SimStruct *S, solver_int32_default port, DTypeId dType) +{ + ssSetOutputPortDataType(S, 0, dType); +} + +#define MDL_SET_DEFAULT_PORT_DATA_TYPES +static void mdlSetDefaultPortDataTypes(SimStruct *S) +{ + ssSetInputPortDataType( S, 0, SS_DOUBLE); + ssSetOutputPortDataType(S, 0, SS_DOUBLE); +} + + + + + +/* Function: mdlOutputs ======================================================= + * +*/ +static void mdlOutputs(SimStruct *S, int_T tid) +{ + solver_int32_default i, j, k; + + /* file pointer for printing */ + FILE *fp = NULL; + + /* Simulink data */ + const real_T *x0 = (const real_T*) ssGetInputPortSignal(S,0); + const real_T *xinit = (const real_T*) ssGetInputPortSignal(S,1); + const real_T *xfinal = (const real_T*) ssGetInputPortSignal(S,2); + const real_T *all_parameters = (const real_T*) ssGetInputPortSignal(S,3); + + real_T *outputs = (real_T*) ssGetOutputPortSignal(S,0); + + + + /* Solver data */ + FORCESNLPsolver_params params; + FORCESNLPsolver_output output; + FORCESNLPsolver_info info; + solver_int32_default exitflag; + + /* Extra NMPC data */ + + + /* Copy inputs */ + for( i=0; i<1464; i++) + { + params.x0[i] = (double) x0[i]; + } + + for( i=0; i<16; i++) + { + params.xinit[i] = (double) xinit[i]; + } + + for( i=0; i<11; i++) + { + params.xfinal[i] = (double) xfinal[i]; + } + + for( i=0; i<2501; i++) + { + params.all_parameters[i] = (double) all_parameters[i]; + } + + + + + + #if FORCESNLPsolver_SET_PRINTLEVEL > 0 + /* Prepare file for printfs */ + fp = fopen("stdout_temp","w+"); + if( fp == NULL ) + { + mexErrMsgTxt("freopen of stdout did not work."); + } + rewind(fp); + #endif + + /* Call solver */ + exitflag = FORCESNLPsolver_solve(¶ms, &output, &info, fp , pt2function); + + #if FORCESNLPsolver_SET_PRINTLEVEL > 0 + /* Read contents of printfs printed to file */ + rewind(fp); + while( (i = fgetc(fp)) != EOF ) + { + ssPrintf("%c",i); + } + fclose(fp); + #endif + + + + /* Copy outputs */ + for( i=0; i<24; i++) + { + outputs[i] = (real_T) output.x01[i]; + } + + k=24; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x02[i]; + } + + k=48; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x03[i]; + } + + k=72; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x04[i]; + } + + k=96; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x05[i]; + } + + k=120; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x06[i]; + } + + k=144; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x07[i]; + } + + k=168; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x08[i]; + } + + k=192; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x09[i]; + } + + k=216; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x10[i]; + } + + k=240; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x11[i]; + } + + k=264; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x12[i]; + } + + k=288; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x13[i]; + } + + k=312; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x14[i]; + } + + k=336; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x15[i]; + } + + k=360; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x16[i]; + } + + k=384; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x17[i]; + } + + k=408; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x18[i]; + } + + k=432; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x19[i]; + } + + k=456; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x20[i]; + } + + k=480; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x21[i]; + } + + k=504; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x22[i]; + } + + k=528; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x23[i]; + } + + k=552; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x24[i]; + } + + k=576; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x25[i]; + } + + k=600; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x26[i]; + } + + k=624; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x27[i]; + } + + k=648; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x28[i]; + } + + k=672; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x29[i]; + } + + k=696; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x30[i]; + } + + k=720; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x31[i]; + } + + k=744; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x32[i]; + } + + k=768; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x33[i]; + } + + k=792; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x34[i]; + } + + k=816; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x35[i]; + } + + k=840; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x36[i]; + } + + k=864; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x37[i]; + } + + k=888; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x38[i]; + } + + k=912; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x39[i]; + } + + k=936; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x40[i]; + } + + k=960; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x41[i]; + } + + k=984; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x42[i]; + } + + k=1008; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x43[i]; + } + + k=1032; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x44[i]; + } + + k=1056; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x45[i]; + } + + k=1080; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x46[i]; + } + + k=1104; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x47[i]; + } + + k=1128; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x48[i]; + } + + k=1152; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x49[i]; + } + + k=1176; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x50[i]; + } + + k=1200; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x51[i]; + } + + k=1224; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x52[i]; + } + + k=1248; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x53[i]; + } + + k=1272; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x54[i]; + } + + k=1296; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x55[i]; + } + + k=1320; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x56[i]; + } + + k=1344; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x57[i]; + } + + k=1368; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x58[i]; + } + + k=1392; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x59[i]; + } + + k=1416; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x60[i]; + } + + k=1440; + for( i=0; i<24; i++) + { + outputs[k++] = (real_T) output.x61[i]; + } + + +} + + + + + +/* Function: mdlTerminate ===================================================== + * Abstract: + * In this function, you should perform any actions that are necessary + * at the termination of a simulation. For example, if memory was + * allocated in mdlStart, this is the place to free it. + */ +static void mdlTerminate(SimStruct *S) +{ +} +#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */ +#include "simulink.c" /* MEX-file interface mechanism */ +#else +#include "cg_sfun.h" /* Code generation registration function */ +#endif + + diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolvercompact_lib.mdl b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolvercompact_lib.mdl new file mode 100644 index 0000000..c0cb7cb --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver/interface/FORCESNLPsolvercompact_lib.mdl @@ -0,0 +1,827 @@ +Model { + Name "FORCESNLPsolver" + Version 8.0 + MdlSubVersion 0 + GraphicalInterface { + NumRootInports 0 + NumRootOutports 0 + ParameterArgumentNames "" + ComputedModelVersion "1.2" + NumModelReferences 0 + NumTestPointedSignals 0 + } + SavedCharacterEncoding "windows-1252" + SaveDefaultBlockParams on + ScopeRefreshTime 0.035000 + OverrideScopeRefreshTime on + DisableAllScopes off + DataTypeOverride "UseLocalSettings" + DataTypeOverrideAppliesTo "AllNumericTypes" + MinMaxOverflowLogging "UseLocalSettings" + MinMaxOverflowArchiveMode "Overwrite" + FPTRunName "Run 1" + MaxMDLFileLineLength 120 + Object { + $PropName "BdWindowsInfo" + $ObjectID 1 + $ClassName "Simulink.BDWindowsInfo" + Object { + $PropName "WindowsInfo" + $ObjectID 2 + $ClassName "Simulink.WindowInfo" + IsActive [1] + Location [385.0, 84.0, 816.0, 539.0] + Object { + $PropName "ModelBrowserInfo" + $ObjectID 3 + $ClassName "Simulink.ModelBrowserInfo" + Visible [1] + DockPosition "Left" + Width [50] + Height [50] + Filter [9] + } + Object { + $PropName "ExplorerBarInfo" + $ObjectID 4 + $ClassName "Simulink.ExplorerBarInfo" + Visible [1] + } + Object { + $PropName "EditorsInfo" + $ObjectID 5 + $ClassName "Simulink.EditorInfo" + IsActive [1] + ViewObjType "SimulinkTopLevel" + LoadSaveID "0" + Extents [569.0, 363.0] + ZoomFactor [1.0] + Offset [0.0, 0.0] + } + } + } + Created "3/26/2018 8:18:05 AM" + Creator "embotech AG" + UpdateHistory "UpdateHistoryNever" + ModifiedByFormat "%" + LastModifiedBy "embotech AG" + ModifiedDateFormat "%" + LastModifiedDate "3/26/2018 8:18:05 AM" + RTWModifiedTimeStamp 315310195 + ModelVersionFormat "1.%" + ConfigurationManager "None" + SampleTimeColors off + SampleTimeAnnotations off + LibraryLinkDisplay "disabled" + WideLines off + ShowLineDimensions off + ShowPortDataTypes off + ShowDesignRanges off + ShowLoopsOnError on + IgnoreBidirectionalLines off + ShowStorageClass off + ShowTestPointIcons on + ShowSignalResolutionIcons on + ShowViewerIcons on + SortedOrder off + ExecutionContextIcon off + ShowLinearizationAnnotations on + BlockNameDataTip off + BlockParametersDataTip off + BlockDescriptionStringDataTip off + ToolBar on + StatusBar on + BrowserShowLibraryLinks off + BrowserLookUnderMasks off + SimulationMode "normal" + LinearizationMsg "none" + Profile off + ParamWorkspaceSource "MATLABWorkspace" + AccelSystemTargetFile "accel.tlc" + AccelTemplateMakefile "accel_default_tmf" + AccelMakeCommand "make_rtw" + TryForcingSFcnDF off + Object { + $PropName "DataLoggingOverride" + $ObjectID 6 + $ClassName "Simulink.SimulationData.ModelLoggingInfo" + model_ "model_2012b" + overrideMode_ [0.0] + Array { + Type "Cell" + Dimension 1 + Cell "model_2012b" + PropName "logAsSpecifiedByModels_" + } + Array { + Type "Cell" + Dimension 1 + Cell [] + PropName "logAsSpecifiedByModelsSSIDs_" + } + } + RecordCoverage off + CovPath "/" + CovSaveName "covdata" + CovMetricSettings "dw" + CovNameIncrementing off + CovHtmlReporting on + CovForceBlockReductionOff on + covSaveCumulativeToWorkspaceVar on + CovSaveSingleToWorkspaceVar on + CovCumulativeVarName "covCumulativeData" + CovCumulativeReport off + CovReportOnPause on + CovModelRefEnable "Off" + CovExternalEMLEnable off + ExtModeBatchMode off + ExtModeEnableFloating on + ExtModeTrigType "manual" + ExtModeTrigMode "normal" + ExtModeTrigPort "1" + ExtModeTrigElement "any" + ExtModeTrigDuration 1000 + ExtModeTrigDurationFloating "auto" + ExtModeTrigHoldOff 0 + ExtModeTrigDelay 0 + ExtModeTrigDirection "rising" + ExtModeTrigLevel 0 + ExtModeArchiveMode "off" + ExtModeAutoIncOneShot off + ExtModeIncDirWhenArm off + ExtModeAddSuffixToVar off + ExtModeWriteAllDataToWs off + ExtModeArmWhenConnect on + ExtModeSkipDownloadWhenConnect off + ExtModeLogAll on + ExtModeAutoUpdateStatusClock on + BufferReuse on + ShowModelReferenceBlockVersion off + ShowModelReferenceBlockIO off + Array { + Type "Handle" + Dimension 1 + Simulink.ConfigSet { + $ObjectID 7 + Version "1.12.1" + Array { + Type "Handle" + Dimension 8 + Simulink.SolverCC { + $ObjectID 8 + Version "1.12.1" + StartTime "0.0" + StopTime "10.0" + AbsTol "auto" + FixedStep "auto" + InitialStep "auto" + MaxNumMinSteps "-1" + MaxOrder 5 + ZcThreshold "auto" + ConsecutiveZCsStepRelTol "10*128*eps" + MaxConsecutiveZCs "1000" + ExtrapolationOrder 4 + NumberNewtonIterations 1 + MaxStep "auto" + MinStep "auto" + MaxConsecutiveMinStep "1" + RelTol "1e-3" + SolverMode "Auto" + EnableConcurrentExecution off + ConcurrentTasks off + Solver "ode45" + SolverName "ode45" + SolverJacobianMethodControl "auto" + ShapePreserveControl "DisableAll" + ZeroCrossControl "UseLocalSettings" + ZeroCrossAlgorithm "Nonadaptive" + AlgebraicLoopSolver "TrustRegion" + SolverResetMethod "Fast" + PositivePriorityOrder off + AutoInsertRateTranBlk off + SampleTimeConstraint "Unconstrained" + InsertRTBMode "Whenever possible" + } + Simulink.DataIOCC { + $ObjectID 9 + Version "1.12.1" + Decimation "1" + ExternalInput "[t, u]" + FinalStateName "xFinal" + InitialState "xInitial" + LimitDataPoints on + MaxDataPoints "1000" + LoadExternalInput off + LoadInitialState off + SaveFinalState off + SaveCompleteFinalSimState off + SaveFormat "Array" + SignalLoggingSaveFormat "Dataset" + SaveOutput on + SaveState off + SignalLogging on + DSMLogging on + InspectSignalLogs off + SaveTime on + ReturnWorkspaceOutputs off + StateSaveName "xout" + TimeSaveName "tout" + OutputSaveName "yout" + SignalLoggingName "logsout" + DSMLoggingName "dsmout" + OutputOption "RefineOutputTimes" + OutputTimes "[]" + ReturnWorkspaceOutputsName "out" + Refine "1" + } + Simulink.OptimizationCC { + $ObjectID 10 + Version "1.12.1" + Array { + Type "Cell" + Dimension 8 + Cell "BooleansAsBitfields" + Cell "PassReuseOutputArgsAs" + Cell "PassReuseOutputArgsThreshold" + Cell "ZeroExternalMemoryAtStartup" + Cell "ZeroInternalMemoryAtStartup" + Cell "OptimizeModelRefInitCode" + Cell "NoFixptDivByZeroProtection" + Cell "UseSpecifiedMinMax" + PropName "DisabledProps" + } + BlockReduction on + BooleanDataType on + ConditionallyExecuteInputs on + InlineParams off + UseIntDivNetSlope off + UseFloatMulNetSlope off + UseSpecifiedMinMax off + InlineInvariantSignals off + OptimizeBlockIOStorage on + BufferReuse on + EnhancedBackFolding off + StrengthReduction off + ExpressionFolding on + BooleansAsBitfields off + BitfieldContainerType "uint_T" + EnableMemcpy on + MemcpyThreshold 64 + PassReuseOutputArgsAs "Structure reference" + ExpressionDepthLimit 2147483647 + FoldNonRolledExpr on + LocalBlockOutputs on + RollThreshold 5 + SystemCodeInlineAuto off + StateBitsets off + DataBitsets off + UseTempVars off + ZeroExternalMemoryAtStartup on + ZeroInternalMemoryAtStartup on + InitFltsAndDblsToZero off + NoFixptDivByZeroProtection off + EfficientFloat2IntCast off + EfficientMapNaN2IntZero on + OptimizeModelRefInitCode off + LifeSpan "inf" + MaxStackSize "Inherit from target" + BufferReusableBoundary on + SimCompilerOptimization "Off" + AccelVerboseBuild off + ParallelExecutionInRapidAccelerator on + } + Simulink.DebuggingCC { + $ObjectID 11 + Version "1.12.1" + RTPrefix "error" + ConsistencyChecking "none" + ArrayBoundsChecking "none" + SignalInfNanChecking "none" + SignalRangeChecking "none" + ReadBeforeWriteMsg "UseLocalSettings" + WriteAfterWriteMsg "UseLocalSettings" + WriteAfterReadMsg "UseLocalSettings" + AlgebraicLoopMsg "warning" + ArtificialAlgebraicLoopMsg "warning" + SaveWithDisabledLinksMsg "warning" + SaveWithParameterizedLinksMsg "warning" + CheckSSInitialOutputMsg on + UnderspecifiedInitializationDetection "Classic" + MergeDetectMultiDrivingBlocksExec "none" + CheckExecutionContextPreStartOutputMsg off + CheckExecutionContextRuntimeOutputMsg off + SignalResolutionControl "UseLocalSettings" + BlockPriorityViolationMsg "warning" + MinStepSizeMsg "warning" + TimeAdjustmentMsg "none" + MaxConsecutiveZCsMsg "error" + MaskedZcDiagnostic "warning" + IgnoredZcDiagnostic "warning" + SolverPrmCheckMsg "warning" + InheritedTsInSrcMsg "warning" + DiscreteInheritContinuousMsg "warning" + MultiTaskDSMMsg "error" + MultiTaskCondExecSysMsg "error" + MultiTaskRateTransMsg "error" + SingleTaskRateTransMsg "none" + TasksWithSamePriorityMsg "warning" + SigSpecEnsureSampleTimeMsg "warning" + CheckMatrixSingularityMsg "none" + IntegerOverflowMsg "warning" + Int32ToFloatConvMsg "warning" + ParameterDowncastMsg "error" + ParameterOverflowMsg "error" + ParameterUnderflowMsg "none" + ParameterPrecisionLossMsg "warning" + ParameterTunabilityLossMsg "warning" + FixptConstUnderflowMsg "none" + FixptConstOverflowMsg "none" + FixptConstPrecisionLossMsg "none" + UnderSpecifiedDataTypeMsg "none" + UnnecessaryDatatypeConvMsg "none" + VectorMatrixConversionMsg "none" + InvalidFcnCallConnMsg "error" + FcnCallInpInsideContextMsg "EnableAllAsError" + SignalLabelMismatchMsg "none" + UnconnectedInputMsg "warning" + UnconnectedOutputMsg "warning" + UnconnectedLineMsg "warning" + SFcnCompatibilityMsg "none" + FrameProcessingCompatibilityMsg "warning" + UniqueDataStoreMsg "none" + BusObjectLabelMismatch "warning" + RootOutportRequireBusObject "warning" + AssertControl "UseLocalSettings" + EnableOverflowDetection off + ModelReferenceIOMsg "none" + ModelReferenceMultiInstanceNormalModeStructChecksumCheck "error" + ModelReferenceVersionMismatchMessage "none" + ModelReferenceIOMismatchMessage "none" + ModelReferenceCSMismatchMessage "none" + UnknownTsInhSupMsg "warning" + ModelReferenceDataLoggingMessage "warning" + ModelReferenceSymbolNameMessage "warning" + ModelReferenceExtraNoncontSigs "error" + StateNameClashWarn "warning" + SimStateInterfaceChecksumMismatchMsg "warning" + SimStateOlderReleaseMsg "error" + InitInArrayFormatMsg "warning" + StrictBusMsg "ErrorLevel1" + BusNameAdapt "WarnAndRepair" + NonBusSignalsTreatedAsBus "none" + LoggingUnavailableSignals "error" + BlockIODiagnostic "none" + SFUnusedDataAndEventsDiag "warning" + SFUnexpectedBacktrackingDiag "warning" + SFInvalidInputDataAccessInChartInitDiag "warning" + SFNoUnconditionalDefaultTransitionDiag "warning" + SFTransitionOutsideNaturalParentDiag "warning" + SFUnconditionalTransitionShadowingDiag "warning" + SFUndirectedBroadcastEventsDiag "warning" + SFTransitionActionBeforeConditionDiag "warning" + } + Simulink.HardwareCC { + $ObjectID 12 + Version "1.12.1" + ProdBitPerChar 8 + ProdBitPerShort 16 + ProdBitPerInt 32 + ProdBitPerLong 32 + ProdBitPerFloat 32 + ProdBitPerDouble 64 + ProdBitPerPointer 32 + ProdLargestAtomicInteger "Char" + ProdLargestAtomicFloat "None" + ProdIntDivRoundTo "Undefined" + ProdEndianess "Unspecified" + ProdWordSize 32 + ProdShiftRightIntArith on + ProdHWDeviceType "32-bit Generic" + TargetBitPerChar 8 + TargetBitPerShort 16 + TargetBitPerInt 32 + TargetBitPerLong 32 + TargetBitPerFloat 32 + TargetBitPerDouble 64 + TargetBitPerPointer 32 + TargetLargestAtomicInteger "Char" + TargetLargestAtomicFloat "None" + TargetShiftRightIntArith on + TargetIntDivRoundTo "Undefined" + TargetEndianess "Unspecified" + TargetWordSize 32 + TargetTypeEmulationWarnSuppressLevel 0 + TargetPreprocMaxBitsSint 32 + TargetPreprocMaxBitsUint 32 + TargetHWDeviceType "Specified" + TargetUnknown off + ProdEqTarget on + } + Simulink.ModelReferenceCC { + $ObjectID 13 + Version "1.12.1" + UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" + CheckModelReferenceTargetMessage "error" + EnableParallelModelReferenceBuilds off + ParallelModelReferenceErrorOnInvalidPool on + ParallelModelReferenceMATLABWorkerInit "None" + ModelReferenceNumInstancesAllowed "Multi" + PropagateVarSize "Infer from blocks in model" + ModelReferencePassRootInputsByReference on + ModelReferenceMinAlgLoopOccurrences off + PropagateSignalLabelsOutOfModel off + SupportModelReferenceSimTargetCustomCode off + } + Simulink.SFSimCC { + $ObjectID 14 + Version "1.12.1" + SFSimEnableDebug on + SFSimOverflowDetection on + SFSimEcho on + SimBlas on + SimCtrlC on + SimExtrinsic on + SimIntegrity on + SimUseLocalCustomCode off + SimParseCustomCode on + SimBuildMode "sf_incremental_build" + } + Simulink.RTWCC { + $BackupClass "Simulink.RTWCC" + $ObjectID 15 + Version "1.12.1" + Array { + Type "Cell" + Dimension 15 + Cell "IncludeHyperlinkInReport" + Cell "GenerateTraceInfo" + Cell "GenerateTraceReport" + Cell "GenerateTraceReportSl" + Cell "GenerateTraceReportSf" + Cell "GenerateTraceReportEml" + Cell "PortableWordSizes" + Cell "GenerateWebview" + Cell "GenerateCodeMetricsReport" + Cell "GenerateCodeReplacementReport" + Cell "GenerateErtSFunction" + Cell "CreateSILPILBlock" + Cell "CodeExecutionProfiling" + Cell "CodeProfilingSaveOptions" + Cell "CodeProfilingInstrumentation" + PropName "DisabledProps" + } + SystemTargetFile "grt.tlc" + GenCodeOnly off + MakeCommand "make_rtw" + GenerateMakefile on + PackageGeneratedCodeAndArtifacts off + TemplateMakefile "grt_default_tmf" + GenerateReport off + SaveLog off + RTWVerbose on + RetainRTWFile off + ProfileTLC off + TLCDebug off + TLCCoverage off + TLCAssert off + ProcessScriptMode "Default" + ConfigurationMode "Optimized" + ConfigAtBuild off + RTWUseLocalCustomCode off + RTWUseSimCustomCode off + IncludeHyperlinkInReport off + LaunchReport off + PortableWordSizes off + GenerateErtSFunction off + CreateSILPILBlock "None" + CodeExecutionProfiling off + CodeExecutionProfileVariable "executionProfile" + CodeProfilingSaveOptions "SummaryOnly" + CodeProfilingInstrumentation off + TargetLang "C" + IncludeBusHierarchyInRTWFileBlockHierarchyMap off + IncludeERTFirstTime off + GenerateTraceInfo off + GenerateTraceReport off + GenerateTraceReportSl off + GenerateTraceReportSf off + GenerateTraceReportEml off + GenerateCodeInfo off + GenerateWebview off + GenerateCodeMetricsReport off + GenerateCodeReplacementReport off + RTWCompilerOptimization "Off" + CheckMdlBeforeBuild "Off" + CustomRebuildMode "OnUpdate" + Array { + Type "Handle" + Dimension 2 + Simulink.CodeAppCC { + $ObjectID 16 + Version "1.12.1" + Array { + Type "Cell" + Dimension 22 + Cell "IgnoreCustomStorageClasses" + Cell "IgnoreTestpoints" + Cell "InsertBlockDesc" + Cell "InsertPolySpaceComments" + Cell "SFDataObjDesc" + Cell "MATLABFcnDesc" + Cell "SimulinkDataObjDesc" + Cell "DefineNamingRule" + Cell "SignalNamingRule" + Cell "ParamNamingRule" + Cell "InternalIdentifier" + Cell "InlinedPrmAccess" + Cell "CustomSymbolStr" + Cell "CustomSymbolStrGlobalVar" + Cell "CustomSymbolStrType" + Cell "CustomSymbolStrField" + Cell "CustomSymbolStrFcn" + Cell "CustomSymbolStrFcnArg" + Cell "CustomSymbolStrBlkIO" + Cell "CustomSymbolStrTmpVar" + Cell "CustomSymbolStrMacro" + Cell "ReqsInCode" + PropName "DisabledProps" + } + ForceParamTrailComments off + GenerateComments on + IgnoreCustomStorageClasses on + IgnoreTestpoints off + IncHierarchyInIds off + MaxIdLength 31 + PreserveName off + PreserveNameWithParent off + ShowEliminatedStatement off + OperatorAnnotations off + IncAutoGenComments off + SimulinkDataObjDesc off + SFDataObjDesc off + MATLABFcnDesc off + IncDataTypeInIds off + MangleLength 1 + CustomSymbolStrGlobalVar "$R$N$M" + CustomSymbolStrType "$N$R$M" + CustomSymbolStrField "$N$M" + CustomSymbolStrFcn "$R$N$M$F" + CustomSymbolStrFcnArg "rt$I$N$M" + CustomSymbolStrBlkIO "rtb_$N$M" + CustomSymbolStrTmpVar "$N$M" + CustomSymbolStrMacro "$R$N$M" + DefineNamingRule "None" + ParamNamingRule "None" + SignalNamingRule "None" + InsertBlockDesc off + InsertPolySpaceComments off + SimulinkBlockComments on + MATLABSourceComments off + EnableCustomComments off + InternalIdentifier "Classic" + InlinedPrmAccess "Literals" + ReqsInCode off + UseSimReservedNames off + } + Simulink.GRTTargetCC { + $BackupClass "Simulink.TargetCC" + $ObjectID 17 + Version "1.12.1" + Array { + Type "Cell" + Dimension 15 + Cell "GeneratePreprocessorConditionals" + Cell "IncludeMdlTerminateFcn" + Cell "CombineOutputUpdateFcns" + Cell "SuppressErrorStatus" + Cell "ERTCustomFileBanners" + Cell "GenerateSampleERTMain" + Cell "GenerateTestInterfaces" + Cell "ModelStepFunctionPrototypeControlCompliant" + Cell "CPPClassGenCompliant" + Cell "MultiInstanceERTCode" + Cell "PurelyIntegerCode" + Cell "SupportComplex" + Cell "SupportAbsoluteTime" + Cell "SupportContinuousTime" + Cell "SupportNonInlinedSFcns" + PropName "DisabledProps" + } + TargetFcnLib "ansi_tfl_table_tmw.mat" + TargetLibSuffix "" + TargetPreCompLibLocation "" + CodeReplacementLibrary "ANSI_C" + UtilityFuncGeneration "Auto" + ERTMultiwordTypeDef "System defined" + ERTMultiwordLength 256 + MultiwordLength 2048 + GenerateFullHeader on + GenerateSampleERTMain off + GenerateTestInterfaces off + IsPILTarget off + ModelReferenceCompliant on + ParMdlRefBuildCompliant on + CompOptLevelCompliant on + ConcurrentExecutionCompliant on + IncludeMdlTerminateFcn on + GeneratePreprocessorConditionals "Disable all" + CombineOutputUpdateFcns on + CombineSignalStateStructs off + SuppressErrorStatus off + ERTFirstTimeCompliant off + IncludeFileDelimiter "Auto" + ERTCustomFileBanners off + SupportAbsoluteTime on + LogVarNameModifier "rt_" + MatFileLogging on + MultiInstanceERTCode off + SupportNonFinite on + SupportComplex on + PurelyIntegerCode off + SupportContinuousTime on + SupportNonInlinedSFcns on + SupportVariableSizeSignals off + EnableShiftOperators on + ParenthesesLevel "Nominal" + ModelStepFunctionPrototypeControlCompliant off + CPPClassGenCompliant off + AutosarCompliant off + GRTInterface off + UseMalloc off + ExtMode off + ExtModeStaticAlloc off + ExtModeTesting off + ExtModeStaticAllocSize 1000000 + ExtModeTransport 0 + ExtModeMexFile "ext_comm" + ExtModeIntrfLevel "Level1" + RTWCAPISignals off + RTWCAPIParams off + RTWCAPIStates off + RTWCAPIRootIO off + GenerateASAP2 off + } + PropName "Components" + } + } + PropName "Components" + } + Name "Configuration" + CurrentDlgPage "Solver" + ConfigPrmDlgPosition [ 520, 225, 1400, 855 ] + } + PropName "ConfigurationSets" + } + Simulink.ConfigSet { + $PropName "ActiveConfigurationSet" + $ObjectID 7 + } + Object { + $PropName "DataTransfer" + $ObjectID 18 + $ClassName "Simulink.GlobalDataTransfer" + DefaultTransitionBetweenSyncTasks "Ensure deterministic transfer (maximum delay)" + DefaultTransitionBetweenAsyncTasks "Ensure data integrity only" + DefaultTransitionBetweenContTasks "Ensure deterministic transfer (minimum delay)" + DefaultExtrapolationMethodBetweenContTasks "None" + AutoInsertRateTranBlk [0] + } + ExplicitPartitioning off + BlockDefaults { + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + NamePlacement "normal" + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + ShowName on + BlockRotation 0 + BlockMirror off + } + AnnotationDefaults { + HorizontalAlignment "center" + VerticalAlignment "middle" + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + UseDisplayTextAsClickCallback off + } + LineDefaults { + FontName "Helvetica" + FontSize 9 + FontWeight "normal" + FontAngle "normal" + } + MaskDefaults { + SelfModifiable "off" + IconFrame "on" + IconOpaque "on" + RunInitForIconRedraw "off" + IconRotate "none" + PortRotate "default" + IconUnits "autoscale" + } + MaskParameterDefaults { + Evaluate "on" + Tunable "on" + NeverSave "off" + Internal "off" + ReadOnly "off" + Enabled "on" + Visible "on" + ToolTip "on" + } + BlockParameterDefaults { + Block { + BlockType S-Function + FunctionName "system" + SFunctionModules "''" + PortCounts "[]" + SFunctionDeploymentMode off + } + } + System { + Name "FORCESNLPsolver" + Location [385, 84, 1201, 623] + Open on + ModelBrowserVisibility on + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + ReportName "simulink-default.rpt" + SIDHighWatermark "1" + Block { + BlockType S-Function + Name "FORCESNLPsolver" + SID "1" + Ports [4, 1] + Position [170, 99, 650, 180] + ZOrder 1 + FunctionName "FORCESNLPsolver_simulinkBlockcompact" + SFunctionModules "FORCESNLPsolver FORCESNLPsolver_simulinkBlockcompact" + EnableBusSupport off + Object { + $PropName "MaskObject" + $ObjectID 19 + $ClassName "Simulink.Mask" + Type "FORCESNLPsolver_simulinkBlockcompact" + Description " ---- Simulink block encapsulating your customized solver FORCESNLPsolver ---- \n\n" + "FORCESNLPsolver : A fast customized optimization solver.\n" +"\n" +"Copyright (C) 2013-2018 EMBOTECH AG [info@embotech.com]. All rights reserved.\n" +"\n" +"\n" +"This software is intended for simulation and testing purposes only. \n" +"Use of this software for any commercial purpose is prohibited.\n" +"\n" +"This program is distributed in the hope that it will be useful.\n" +"EMBOTECH makes NO WARRANTIES with respect to the use of the software \n" +"without even the implied warranty of MERCHANTABILITY or FITNESS FOR A \n" +"PARTICULAR PURPOSE. \n" +"\n" +"EMBOTECH shall not have any liability for any damage arising from the use\n" +"of the software.\n" +"\n" +"This Agreement shall exclusively be governed by and interpreted in \n" +"accordance with the laws of Switzerland, excluding its principles\n" +"of conflict of laws. The Courts of Zurich-City shall have exclusive \n" +"jurisdiction in case of any dispute.\n" +"\n" + + Help "FORCESNLPsolver_simulinkBlockcompact provides an easy Simulink interface for simulating your customized solver. \n" + "\nOUTPUTS = FORCESNLPsolver(INPUTS) solves an optimization problem where:\n\n" + "INPUTS:\n" + " - x0 - column vector of length 1464\n " +" - xinit - column vector of length 16\n " +" - xfinal - column vector of length 11\n " +" - all_parameters - column vector of length 2501\n " + + "\nOUTPUTS:\n" + " - outputs - column vector of length 1464\n " + + "\n For more information, see https://www.embotech.com/FORCES-Pro/How-to-use/Simulink-Interface/Simulink-Block \n " + + Display "port_label('input', 1, 'x0') \n " +"port_label('input', 2, 'xinit') \n " +"port_label('input', 3, 'xfinal') \n " +"port_label('input', 4, 'all_parameters') \n " +"port_label('output', 1, 'outputs') \n " +"if( exist('forcesprologo.jpg','file') ), image(imread('forcesprologo.jpg'),'center','on'); elseif( exist(['interface',filesep,'forcesprologo.jpg'],'file') ), image(imread(['interface',filesep,'forcesprologo.jpg']),'center','on'); elseif( exist(['FORCESNLPsolver',filesep,'interface',filesep,'forcesprologo.jpg'],'file') ), image(imread(['FORCESNLPsolver',filesep,'interface',filesep,'forcesprologo.jpg']),'center','on'); end \n " + + } + } + } +} diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/lib/libFORCESNLPsolver.a b/parameter-learning_nd_disc/FORCESNLPsolver/lib/libFORCESNLPsolver.a new file mode 100644 index 0000000..6866e6f Binary files /dev/null and b/parameter-learning_nd_disc/FORCESNLPsolver/lib/libFORCESNLPsolver.a differ diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/lib/libFORCESNLPsolver.so b/parameter-learning_nd_disc/FORCESNLPsolver/lib/libFORCESNLPsolver.so new file mode 100755 index 0000000..6c8656f Binary files /dev/null and b/parameter-learning_nd_disc/FORCESNLPsolver/lib/libFORCESNLPsolver.so differ diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/lib/libFORCESNLPsolver_withModel.so b/parameter-learning_nd_disc/FORCESNLPsolver/lib/libFORCESNLPsolver_withModel.so new file mode 100755 index 0000000..f9dae8a Binary files /dev/null and b/parameter-learning_nd_disc/FORCESNLPsolver/lib/libFORCESNLPsolver_withModel.so differ diff --git a/parameter-learning_nd_disc/FORCESNLPsolver/obj/FORCESNLPsolver.o b/parameter-learning_nd_disc/FORCESNLPsolver/obj/FORCESNLPsolver.o new file mode 100644 index 0000000..d15262f Binary files /dev/null and b/parameter-learning_nd_disc/FORCESNLPsolver/obj/FORCESNLPsolver.o differ diff --git a/parameter-learning_nd_disc/FORCESNLPsolver_py.py b/parameter-learning_nd_disc/FORCESNLPsolver_py.py new file mode 100755 index 0000000..69d3969 --- /dev/null +++ b/parameter-learning_nd_disc/FORCESNLPsolver_py.py @@ -0,0 +1,491 @@ +#FORCESNLPsolver : A fast customized optimization solver. +# +#Copyright (C) 2013-2018 EMBOTECH AG [info@embotech.com]. All rights reserved. +# +# +#This software is intended for simulation and testing purposes only. +#Use of this software for any commercial purpose is prohibited. +# +#This program is distributed in the hope that it will be useful. +#EMBOTECH makes NO WARRANTIES with respect to the use of the software +#without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +#PARTICULAR PURPOSE. +# +#EMBOTECH shall not have any liability for any damage arising from the use +#of the software. +# +#This Agreement shall exclusively be governed by and interpreted in +#accordance with the laws of Switzerland, excluding its principles +#of conflict of laws. The Courts of Zurich-City shall have exclusive +#jurisdiction in case of any dispute. +# +#def __init__(): +''' +a Python wrapper for a fast solver generated by FORCES Pro v1.6.121 + + OUTPUT = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) solves a multistage problem + subject to the parameters supplied in the following dictionary: + PARAMS['x0'] - column vector of length 1464 + PARAMS['xinit'] - column vector of length 16 + PARAMS['xfinal'] - column vector of length 11 + PARAMS['all_parameters'] - column vector of length 2501 + + OUTPUT returns the values of the last iteration of the solver where + OUTPUT['x01'] - column vector of size 24 + OUTPUT['x02'] - column vector of size 24 + OUTPUT['x03'] - column vector of size 24 + OUTPUT['x04'] - column vector of size 24 + OUTPUT['x05'] - column vector of size 24 + OUTPUT['x06'] - column vector of size 24 + OUTPUT['x07'] - column vector of size 24 + OUTPUT['x08'] - column vector of size 24 + OUTPUT['x09'] - column vector of size 24 + OUTPUT['x10'] - column vector of size 24 + OUTPUT['x11'] - column vector of size 24 + OUTPUT['x12'] - column vector of size 24 + OUTPUT['x13'] - column vector of size 24 + OUTPUT['x14'] - column vector of size 24 + OUTPUT['x15'] - column vector of size 24 + OUTPUT['x16'] - column vector of size 24 + OUTPUT['x17'] - column vector of size 24 + OUTPUT['x18'] - column vector of size 24 + OUTPUT['x19'] - column vector of size 24 + OUTPUT['x20'] - column vector of size 24 + OUTPUT['x21'] - column vector of size 24 + OUTPUT['x22'] - column vector of size 24 + OUTPUT['x23'] - column vector of size 24 + OUTPUT['x24'] - column vector of size 24 + OUTPUT['x25'] - column vector of size 24 + OUTPUT['x26'] - column vector of size 24 + OUTPUT['x27'] - column vector of size 24 + OUTPUT['x28'] - column vector of size 24 + OUTPUT['x29'] - column vector of size 24 + OUTPUT['x30'] - column vector of size 24 + OUTPUT['x31'] - column vector of size 24 + OUTPUT['x32'] - column vector of size 24 + OUTPUT['x33'] - column vector of size 24 + OUTPUT['x34'] - column vector of size 24 + OUTPUT['x35'] - column vector of size 24 + OUTPUT['x36'] - column vector of size 24 + OUTPUT['x37'] - column vector of size 24 + OUTPUT['x38'] - column vector of size 24 + OUTPUT['x39'] - column vector of size 24 + OUTPUT['x40'] - column vector of size 24 + OUTPUT['x41'] - column vector of size 24 + OUTPUT['x42'] - column vector of size 24 + OUTPUT['x43'] - column vector of size 24 + OUTPUT['x44'] - column vector of size 24 + OUTPUT['x45'] - column vector of size 24 + OUTPUT['x46'] - column vector of size 24 + OUTPUT['x47'] - column vector of size 24 + OUTPUT['x48'] - column vector of size 24 + OUTPUT['x49'] - column vector of size 24 + OUTPUT['x50'] - column vector of size 24 + OUTPUT['x51'] - column vector of size 24 + OUTPUT['x52'] - column vector of size 24 + OUTPUT['x53'] - column vector of size 24 + OUTPUT['x54'] - column vector of size 24 + OUTPUT['x55'] - column vector of size 24 + OUTPUT['x56'] - column vector of size 24 + OUTPUT['x57'] - column vector of size 24 + OUTPUT['x58'] - column vector of size 24 + OUTPUT['x59'] - column vector of size 24 + OUTPUT['x60'] - column vector of size 24 + OUTPUT['x61'] - column vector of size 24 + + [OUTPUT, EXITFLAG] = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) returns additionally + the integer EXITFLAG indicating the state of the solution with + 1 - Optimal solution has been found (subject to desired accuracy) + 2 - (only branch-and-bound) A feasible point has been identified for which the objective value is no more than codeoptions.mip.mipgap*100 per cent worse than the global optimum + 0 - Timeout - maximum number of iterations reached + -1 - (only branch-and-bound) Infeasible problem (problems solving the root relaxation to the desired accuracy) + -2 - (only branch-and-bound) Out of memory - cannot fit branch and bound nodes into pre-allocated memory. + -6 - NaN or INF occured during evaluation of functions and derivatives. Please check your initial guess. + -7 - Method could not progress. Problem may be infeasible. Run FORCESdiagnostics on your problem to check for most common errors in the formulation. + -10 - The convex solver could not proceed due to an internal error + -100 - License error + + [OUTPUT, EXITFLAG, INFO] = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) returns + additional information about the last iterate: + INFO.it - number of iterations that lead to this result + INFO.it2opt - number of convex solves + INFO.res_eq - max. equality constraint residual + INFO.res_ineq - max. inequality constraint residual + INFO.rsnorm - norm of stationarity condition + INFO.rcompnorm - max of all complementarity violations + INFO.pobj - primal objective + INFO.mu - duality measure + INFO.solvetime - Time needed for solve (wall clock time) + INFO.fevalstime - Time needed for function evaluations (wall clock time) + + See also COPYING + +''' + +import ctypes +import os +import numpy as np +import numpy.ctypeslib as npct +import sys + +#_lib = ctypes.CDLL(os.path.join(os.getcwd(),'FORCESNLPsolver/lib/FORCESNLPsolver.so')) +try: + _lib = ctypes.CDLL(os.path.join(os.path.dirname(os.path.abspath(__file__)),'FORCESNLPsolver/lib/FORCESNLPsolver_withModel.so')) + csolver = getattr(_lib,'FORCESNLPsolver_solve') +except: + _lib = ctypes.CDLL(os.path.join(os.path.dirname(os.path.abspath(__file__)),'FORCESNLPsolver/lib/libFORCESNLPsolver_withModel.so')) + csolver = getattr(_lib,'FORCESNLPsolver_solve') + +class FORCESNLPsolver_params_ctypes(ctypes.Structure): +# @classmethod +# def from_param(self): +# return self + _fields_ = [('x0', ctypes.c_double * 1464), +('xinit', ctypes.c_double * 16), +('xfinal', ctypes.c_double * 11), +('all_parameters', ctypes.c_double * 2501), +] + +FORCESNLPsolver_params = {'x0' : np.array([]), +'xinit' : np.array([]), +'xfinal' : np.array([]), +'all_parameters' : np.array([]), +} +params = {'x0' : np.array([]), +'xinit' : np.array([]), +'xfinal' : np.array([]), +'all_parameters' : np.array([]), +} + +class FORCESNLPsolver_outputs_ctypes(ctypes.Structure): +# @classmethod +# def from_param(self): +# return self + _fields_ = [('x01', ctypes.c_double * 24), +('x02', ctypes.c_double * 24), +('x03', ctypes.c_double * 24), +('x04', ctypes.c_double * 24), +('x05', ctypes.c_double * 24), +('x06', ctypes.c_double * 24), +('x07', ctypes.c_double * 24), +('x08', ctypes.c_double * 24), +('x09', ctypes.c_double * 24), +('x10', ctypes.c_double * 24), +('x11', ctypes.c_double * 24), +('x12', ctypes.c_double * 24), +('x13', ctypes.c_double * 24), +('x14', ctypes.c_double * 24), +('x15', ctypes.c_double * 24), +('x16', ctypes.c_double * 24), +('x17', ctypes.c_double * 24), +('x18', ctypes.c_double * 24), +('x19', ctypes.c_double * 24), +('x20', ctypes.c_double * 24), +('x21', ctypes.c_double * 24), +('x22', ctypes.c_double * 24), +('x23', ctypes.c_double * 24), +('x24', ctypes.c_double * 24), +('x25', ctypes.c_double * 24), +('x26', ctypes.c_double * 24), +('x27', ctypes.c_double * 24), +('x28', ctypes.c_double * 24), +('x29', ctypes.c_double * 24), +('x30', ctypes.c_double * 24), +('x31', ctypes.c_double * 24), +('x32', ctypes.c_double * 24), +('x33', ctypes.c_double * 24), +('x34', ctypes.c_double * 24), +('x35', ctypes.c_double * 24), +('x36', ctypes.c_double * 24), +('x37', ctypes.c_double * 24), +('x38', ctypes.c_double * 24), +('x39', ctypes.c_double * 24), +('x40', ctypes.c_double * 24), +('x41', ctypes.c_double * 24), +('x42', ctypes.c_double * 24), +('x43', ctypes.c_double * 24), +('x44', ctypes.c_double * 24), +('x45', ctypes.c_double * 24), +('x46', ctypes.c_double * 24), +('x47', ctypes.c_double * 24), +('x48', ctypes.c_double * 24), +('x49', ctypes.c_double * 24), +('x50', ctypes.c_double * 24), +('x51', ctypes.c_double * 24), +('x52', ctypes.c_double * 24), +('x53', ctypes.c_double * 24), +('x54', ctypes.c_double * 24), +('x55', ctypes.c_double * 24), +('x56', ctypes.c_double * 24), +('x57', ctypes.c_double * 24), +('x58', ctypes.c_double * 24), +('x59', ctypes.c_double * 24), +('x60', ctypes.c_double * 24), +('x61', ctypes.c_double * 24), +] + +FORCESNLPsolver_outputs = {'x01' : np.array([]), +'x02' : np.array([]), +'x03' : np.array([]), +'x04' : np.array([]), +'x05' : np.array([]), +'x06' : np.array([]), +'x07' : np.array([]), +'x08' : np.array([]), +'x09' : np.array([]), +'x10' : np.array([]), +'x11' : np.array([]), +'x12' : np.array([]), +'x13' : np.array([]), +'x14' : np.array([]), +'x15' : np.array([]), +'x16' : np.array([]), +'x17' : np.array([]), +'x18' : np.array([]), +'x19' : np.array([]), +'x20' : np.array([]), +'x21' : np.array([]), +'x22' : np.array([]), +'x23' : np.array([]), +'x24' : np.array([]), +'x25' : np.array([]), +'x26' : np.array([]), +'x27' : np.array([]), +'x28' : np.array([]), +'x29' : np.array([]), +'x30' : np.array([]), +'x31' : np.array([]), +'x32' : np.array([]), +'x33' : np.array([]), +'x34' : np.array([]), +'x35' : np.array([]), +'x36' : np.array([]), +'x37' : np.array([]), +'x38' : np.array([]), +'x39' : np.array([]), +'x40' : np.array([]), +'x41' : np.array([]), +'x42' : np.array([]), +'x43' : np.array([]), +'x44' : np.array([]), +'x45' : np.array([]), +'x46' : np.array([]), +'x47' : np.array([]), +'x48' : np.array([]), +'x49' : np.array([]), +'x50' : np.array([]), +'x51' : np.array([]), +'x52' : np.array([]), +'x53' : np.array([]), +'x54' : np.array([]), +'x55' : np.array([]), +'x56' : np.array([]), +'x57' : np.array([]), +'x58' : np.array([]), +'x59' : np.array([]), +'x60' : np.array([]), +'x61' : np.array([]), +} + + +class FORCESNLPsolver_info(ctypes.Structure): +# @classmethod +# def from_param(self): +# return self + _fields_ = [('it', ctypes.c_int), +('it2opt', ctypes.c_int), +('res_eq', ctypes.c_double), +('res_ineq', ctypes.c_double), +('rsnorm', ctypes.c_double), +('rcompnorm', ctypes.c_double), +('pobj',ctypes.c_double), +('dobj',ctypes.c_double), +('dgap',ctypes.c_double), +('rdgap',ctypes.c_double), +('mu',ctypes.c_double), +('mu_aff',ctypes.c_double), +('sigma',ctypes.c_double), +('lsit_aff', ctypes.c_int), +('lsit_cc', ctypes.c_int), +('step_aff',ctypes.c_double), +('step_cc',ctypes.c_double), +('solvetime',ctypes.c_double), +('fevalstime',ctypes.c_double) +] + +class FILE(ctypes.Structure): + pass +if sys.version_info.major == 2: + PyFile_AsFile = ctypes.pythonapi.PyFile_AsFile # problem here with python 3 http://stackoverflow.com/questions/16130268/python-3-replacement-for-pyfile-asfile + PyFile_AsFile.argtypes = [ctypes.py_object] + PyFile_AsFile.restype = ctypes.POINTER(FILE) + +# determine data types for solver function prototype +csolver.argtypes = ( ctypes.POINTER(FORCESNLPsolver_params_ctypes), ctypes.POINTER(FORCESNLPsolver_outputs_ctypes), ctypes.POINTER(FORCESNLPsolver_info), ctypes.POINTER(FILE)) +csolver.restype = ctypes.c_int + +def FORCESNLPsolver_solve(params_arg): + ''' +a Python wrapper for a fast solver generated by FORCES Pro v1.6.121 + + OUTPUT = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) solves a multistage problem + subject to the parameters supplied in the following dictionary: + PARAMS['x0'] - column vector of length 1464 + PARAMS['xinit'] - column vector of length 16 + PARAMS['xfinal'] - column vector of length 11 + PARAMS['all_parameters'] - column vector of length 2501 + + OUTPUT returns the values of the last iteration of the solver where + OUTPUT['x01'] - column vector of size 24 + OUTPUT['x02'] - column vector of size 24 + OUTPUT['x03'] - column vector of size 24 + OUTPUT['x04'] - column vector of size 24 + OUTPUT['x05'] - column vector of size 24 + OUTPUT['x06'] - column vector of size 24 + OUTPUT['x07'] - column vector of size 24 + OUTPUT['x08'] - column vector of size 24 + OUTPUT['x09'] - column vector of size 24 + OUTPUT['x10'] - column vector of size 24 + OUTPUT['x11'] - column vector of size 24 + OUTPUT['x12'] - column vector of size 24 + OUTPUT['x13'] - column vector of size 24 + OUTPUT['x14'] - column vector of size 24 + OUTPUT['x15'] - column vector of size 24 + OUTPUT['x16'] - column vector of size 24 + OUTPUT['x17'] - column vector of size 24 + OUTPUT['x18'] - column vector of size 24 + OUTPUT['x19'] - column vector of size 24 + OUTPUT['x20'] - column vector of size 24 + OUTPUT['x21'] - column vector of size 24 + OUTPUT['x22'] - column vector of size 24 + OUTPUT['x23'] - column vector of size 24 + OUTPUT['x24'] - column vector of size 24 + OUTPUT['x25'] - column vector of size 24 + OUTPUT['x26'] - column vector of size 24 + OUTPUT['x27'] - column vector of size 24 + OUTPUT['x28'] - column vector of size 24 + OUTPUT['x29'] - column vector of size 24 + OUTPUT['x30'] - column vector of size 24 + OUTPUT['x31'] - column vector of size 24 + OUTPUT['x32'] - column vector of size 24 + OUTPUT['x33'] - column vector of size 24 + OUTPUT['x34'] - column vector of size 24 + OUTPUT['x35'] - column vector of size 24 + OUTPUT['x36'] - column vector of size 24 + OUTPUT['x37'] - column vector of size 24 + OUTPUT['x38'] - column vector of size 24 + OUTPUT['x39'] - column vector of size 24 + OUTPUT['x40'] - column vector of size 24 + OUTPUT['x41'] - column vector of size 24 + OUTPUT['x42'] - column vector of size 24 + OUTPUT['x43'] - column vector of size 24 + OUTPUT['x44'] - column vector of size 24 + OUTPUT['x45'] - column vector of size 24 + OUTPUT['x46'] - column vector of size 24 + OUTPUT['x47'] - column vector of size 24 + OUTPUT['x48'] - column vector of size 24 + OUTPUT['x49'] - column vector of size 24 + OUTPUT['x50'] - column vector of size 24 + OUTPUT['x51'] - column vector of size 24 + OUTPUT['x52'] - column vector of size 24 + OUTPUT['x53'] - column vector of size 24 + OUTPUT['x54'] - column vector of size 24 + OUTPUT['x55'] - column vector of size 24 + OUTPUT['x56'] - column vector of size 24 + OUTPUT['x57'] - column vector of size 24 + OUTPUT['x58'] - column vector of size 24 + OUTPUT['x59'] - column vector of size 24 + OUTPUT['x60'] - column vector of size 24 + OUTPUT['x61'] - column vector of size 24 + + [OUTPUT, EXITFLAG] = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) returns additionally + the integer EXITFLAG indicating the state of the solution with + 1 - Optimal solution has been found (subject to desired accuracy) + 2 - (only branch-and-bound) A feasible point has been identified for which the objective value is no more than codeoptions.mip.mipgap*100 per cent worse than the global optimum + 0 - Timeout - maximum number of iterations reached + -1 - (only branch-and-bound) Infeasible problem (problems solving the root relaxation to the desired accuracy) + -2 - (only branch-and-bound) Out of memory - cannot fit branch and bound nodes into pre-allocated memory. + -6 - NaN or INF occured during evaluation of functions and derivatives. Please check your initial guess. + -7 - Method could not progress. Problem may be infeasible. Run FORCESdiagnostics on your problem to check for most common errors in the formulation. + -10 - The convex solver could not proceed due to an internal error + -100 - License error + + [OUTPUT, EXITFLAG, INFO] = FORCESNLPsolver_py.FORCESNLPsolver_solve(PARAMS) returns + additional information about the last iterate: + INFO.it - number of iterations that lead to this result + INFO.it2opt - number of convex solves + INFO.res_eq - max. equality constraint residual + INFO.res_ineq - max. inequality constraint residual + INFO.rsnorm - norm of stationarity condition + INFO.rcompnorm - max of all complementarity violations + INFO.pobj - primal objective + INFO.mu - duality measure + INFO.solvetime - Time needed for solve (wall clock time) + INFO.fevalstime - Time needed for function evaluations (wall clock time) + + See also COPYING + + ''' + global _lib + + # convert parameters + params_py = FORCESNLPsolver_params_ctypes() + for par in params_arg: + try: + #setattr(params_py, par, npct.as_ctypes(np.reshape(params_arg[par],np.size(params_arg[par]),order='A'))) + params_arg[par] = np.require(params_arg[par], dtype=np.float64, requirements='F') + setattr(params_py, par, npct.as_ctypes(np.reshape(params_arg[par],np.size(params_arg[par]),order='F'))) + except: + raise ValueError('Parameter ' + par + ' does not have the appropriate dimensions or data type. Please use numpy arrays for parameters.') + + outputs_py = FORCESNLPsolver_outputs_ctypes() + info_py = FORCESNLPsolver_info() + if sys.version_info.major == 2: + if sys.platform.startswith('win'): + fp = None # if set to none, the solver prints to stdout by default - necessary because we have an access violation otherwise under windows + else: + #fp = open('stdout_temp.txt','w') + fp = sys.stdout + try: + PyFile_AsFile.restype = ctypes.POINTER(FILE) + exitflag = _lib.FORCESNLPsolver_solve( params_py, ctypes.byref(outputs_py), ctypes.byref(info_py), PyFile_AsFile(fp) , _lib.FORCESNLPsolver_casadi2forces ) + #fp = open('stdout_temp.txt','r') + #print (fp.read()) + #fp.close() + except: + #print 'Problem with solver' + raise + elif sys.version_info.major == 3: + if sys.platform.startswith('win'): + libc = ctypes.cdll.msvcrt + elif sys.platform.startswith('darwin'): + libc = ctypes.CDLL('libc.dylib') + else: + libc = ctypes.CDLL('libc.so.6') # Open libc + cfopen = getattr(libc,'fopen') # Get its fopen + cfopen.restype = ctypes.POINTER(FILE) # Yes, fopen gives a file pointer + cfopen.argtypes = [ctypes.c_char_p, ctypes.c_char_p] # Yes, fopen gives a file pointer + fp = cfopen('stdout_temp.txt'.encode('utf-8'),'w'.encode('utf-8')) # Use that fopen + + try: + if sys.platform.startswith('win'): + exitflag = _lib.FORCESNLPsolver_solve( params_py, ctypes.byref(outputs_py), ctypes.byref(info_py), None , _lib.FORCESNLPsolver_casadi2forces) + else: + exitflag = _lib.FORCESNLPsolver_solve( params_py, ctypes.byref(outputs_py), ctypes.byref(info_py), fp , _lib.FORCESNLPsolver_casadi2forces) + libc.fclose(fp) + fptemp = open('stdout_temp.txt','r') + print (fptemp.read()) + fptemp.close() + except: + #print 'Problem with solver' + raise + + # convert outputs + for out in FORCESNLPsolver_outputs: + FORCESNLPsolver_outputs[out] = npct.as_array(getattr(outputs_py,out)) + + return FORCESNLPsolver_outputs,int(exitflag),info_py + +solve = FORCESNLPsolver_solve + + diff --git a/parameter-learning_nd_disc/FORCES_client/BackwardEuler.m b/parameter-learning_nd_disc/FORCES_client/BackwardEuler.m new file mode 100755 index 0000000..44a2820 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/BackwardEuler.m @@ -0,0 +1,26 @@ +% Backward Eurler integrator +% +% [XNEXT, JAC] = BackwardEuler( X, U, XIDX, UDIX, F, H) implements implicit Euler integrator +% equations to discretize (potentially nonlinear) continuous dynamics with +% step size H. Note that H is the absolute time spent between X and XNEXT. +% F is a function handle to a function that takes the arguments (X, U) +% and returns dx/dt. XIDX and UIDX are the indices for the states and +% inputs used to construct the Jacobian JAC. +% +% [XNEXT, JAC] = BackwardEuler( X, U, XIDX, UDIX, F, H, P) as above, but parameters P are passed to the +% function handle F to support parameters in the dynamics, e.g. changing +% inertia etc. +% +% [XNEXT, JAC] = BackwardEuler( X, U, XIDX, UDIX, F, H, P, M) performs M-steps for the integration, i.e. +% it places M-1 intermediate points between X and XNEXT. Use this to +% integrate systems more accurately without increasing the number of +% optimization variables in the NLP solver. If no parameters are present, +% use P = []. +% +% +% See also ForwardEuler RK2 RK3 RK4 IRK2 IRK4 FORCES_NLP +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. + diff --git a/parameter-learning_nd_disc/FORCES_client/BackwardEuler.p b/parameter-learning_nd_disc/FORCES_client/BackwardEuler.p new file mode 100755 index 0000000..16c5a85 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/BackwardEuler.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/FORCES_NLP.m b/parameter-learning_nd_disc/FORCES_client/FORCES_NLP.m new file mode 100755 index 0000000..461df38 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/FORCES_NLP.m @@ -0,0 +1,75 @@ +% Interface to embotech's FORCES nonlinear programming (NLP) solver. +% +% FORCES_NLP(MODEL, OPTIONS) generates an efficient solver for the following +% possibly nonlinear problem: +% +% minimize sum_{i=1}^N f(x,p) +% subject to x(xinitidx) == xinit (initial conditions) +% E*x_{i+1} == c(x_i,p), for i = 1...N-1 (nonlinear equalities) +% x(xfinalidx) == xfinal (terminal conditions) +% lb <= x_i <= ub, for i = 1...N (bounds on x) +% hl <= h(z_i) <= hu for i = 1...N (nonlinear inequalities) +% +% The problem above is defined by the structure MODEL as follows: +% +% MODEL.N - number of steps N +% .nvar - number of variables in each stage +% .neq - number of equalities in each stage (size of c(x)) +% .nh - number of inequalities in each stage (size of h(x)) +% .npar - number of parameters (length of p above) in each stage +% +% .xinitidx - indices on which the initial conditions are defined +% .xfinalidx - indices on which the terminal conditions are defined +% .E - matrix multiplying the LHS of equalities +% +% .lb - lower bounds on x. If unconstrained, use -inf +% .ub - upper bounds on x. If unconstrained, use +inf +% .hl - lower bounds on h(x). If unconstrained, use -inf +% .hu - upper bounds on h(x). If unconstrained, use +inf +% +% Notes: - MODEL.nvar, .neq and .nh can be given per stage via cell arrays. +% ====== Otherwise it is assumed that they are the same for each stage. +% - MODEL.npar allows for parameterizing the functions and is +% optional (by default set to zero). +% - MODEL.lb and .ub can be empty; in this case provide +% MODEL.lbidx and MODEL.ubidx to indicate on which variables lower +% and upper bounds are present. The numerical values will then be +% expected at runtime. +% +% The generated code will have automatically the following parameters, +% which need to be supplied before calling the solver: +% +% PROBLEM.x0 - initial guess, supplied as one column vector of length nvar*N. +% +% If initial or final conditions are present, the following parameters have +% to be appropriately supplied: +% +% PROBLEM.xinit - initial condition +% PROBLEM.xfinal - final condition +% +% If lower and/or upper bounds are parametric (see notes above): +% +% PROBLEM.lb01 - lower bound for stage 1 +% PROBLEM.ub01 - upper bounds for stage 1 +% ... - similarly for all stages +% +% (the number of leading zeros is adjusted to the log10 of the number of +% stages automatically) +% +% The default output names are: +% +% OUTPUTS.x01 +% OUTPUTS.x02 etc. +% +% You can type "help " after calling FORCES_NLP for more detailed +% documentation of expected in- and outputs for the particular solver as +% well as exitflags. +% +% +% FORCES_NLP(MODEL, OPTIONS, OUTPUTS) as above, but with user defined +% outputs. +% +% See also GETOPTIONS NEQOUTPUT FORCES_LICENSE +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/FORCES_NLP.p b/parameter-learning_nd_disc/FORCES_client/FORCES_NLP.p new file mode 100755 index 0000000..5cf97c2 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/FORCES_NLP.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/FORCEScleanup.m b/parameter-learning_nd_disc/FORCES_client/FORCEScleanup.m new file mode 100755 index 0000000..53f89db --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/FORCEScleanup.m @@ -0,0 +1,48 @@ +% Cleans up directory from FORCES artifacts. +% +% --- USE WITH CARE, THIS FUNCTION DELETES FILES FROM YOUR SYSTEM! --- +% --- WHENEVER POSSIBLE, WE TURN ON THE RECYCLE OPTION --- +% +% +% FORCESCLEANUP(SOLVERNAME) removes artifacts that are placed during +% the code generation of a solver named SOLVERNAME in the current +% directory. It removes only files and directories that are not needed +% for running the solver in Matlab: +% +% - the @CodeGen directory (from older FORCES versions) +% - ZIP file .zip +% - C-files: +% * model_i.c +% * model_N.c +% * casadi2forces.c +% - Object files: +% * .[o,obj] +% * _simulinkBlock.[o,obj,pdb] +% * _simulinkBlockcompact.[o,obj,pdb] +% - Temporary file for solver prints: stdout_temp +% +% +% FORCESCLEANUP(SOLVERNAME,'all') cleans up more thoroughly, deleting +% all files placed by the code generator into the current directory: +% +% - the @FORCESproWS directory +% - the solverdirectory +% - MEX FILES: +% * . +% * _simulinkBlock. +% * _simulinkBlockcompact. +% - Matlab help file: .m +% +% +% FORCESCLEANUP(SOLVERNAME, MODE, DIR) as above, but perform cleanup of +% the directory DIR. To perform only a partial cleanup of DIR, use +% MODE = 'partial'. +% +% +% FORCESCLEANUP(SOLVERNAME, MODE, DIR, SILENT) as above but suppresses +% printing if SILENT==1. Set DIR=[] (empty matrix) if you want to clean +% the current directory. +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. diff --git a/parameter-learning_nd_disc/FORCES_client/FORCEScleanup.p b/parameter-learning_nd_disc/FORCES_client/FORCEScleanup.p new file mode 100755 index 0000000..4991eed Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/FORCEScleanup.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/FORCESdiagnostics.m b/parameter-learning_nd_disc/FORCES_client/FORCESdiagnostics.m new file mode 100755 index 0000000..9d450da --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/FORCESdiagnostics.m @@ -0,0 +1,13 @@ +% Detect problem formulation errors (like infeasibility or unboundness). +% +% FORCESdiagnostics(STAGES, PARAMSTRUCT, PARAM) +% returns a message describing any potential problems in your formulation +% +% STAGES: is the structure of the multistage formulation +% PARAMSTRUCT: are the parameters generated by NEWPARAM +% PARAM: are the values of the parameters +% +% See also STAGES2QCQP SUBSTITUTEPARAMS +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. diff --git a/parameter-learning_nd_disc/FORCES_client/FORCESdiagnostics.p b/parameter-learning_nd_disc/FORCES_client/FORCESdiagnostics.p new file mode 100755 index 0000000..627cf59 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/FORCESdiagnostics.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/FORCESstrsplit.m b/parameter-learning_nd_disc/FORCES_client/FORCESstrsplit.m new file mode 100755 index 0000000..2f0079c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/FORCESstrsplit.m @@ -0,0 +1,8 @@ +% Split strings. Shipped to support older Matlab versions. +% +% RESULT = FORCESSTRSPLIT(INPUT, DELIMITER) split string at specified +% delimiter and return the results in a cell array +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. + diff --git a/parameter-learning_nd_disc/FORCES_client/FORCESstrsplit.p b/parameter-learning_nd_disc/FORCES_client/FORCESstrsplit.p new file mode 100755 index 0000000..4c25e43 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/FORCESstrsplit.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/FORCESversion.m b/parameter-learning_nd_disc/FORCES_client/FORCESversion.m new file mode 100755 index 0000000..753e2f3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/FORCESversion.m @@ -0,0 +1,13 @@ +% Returns the version string of the FORCES client or a server. +% +% VER = FORCESVERSION() without any arguments returns the version of the +% FORCES PRO client as a string. +% +% VER = FORCESVERSION(SERVER) retrieves the server version as a +% string. An error is thrown if either no connection can be made, +% or the corresponding server does not publish its version. +% +% See also UPDATECLIENT Y2F_DOWNLOAD Y2F_INSTALL +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. diff --git a/parameter-learning_nd_disc/FORCES_client/FORCESversion.p b/parameter-learning_nd_disc/FORCES_client/FORCESversion.p new file mode 100755 index 0000000..ba566d0 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/FORCESversion.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/ForwardEuler.m b/parameter-learning_nd_disc/FORCES_client/ForwardEuler.m new file mode 100755 index 0000000..71efe2f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/ForwardEuler.m @@ -0,0 +1,25 @@ +% Explicit Runge-Kutta integrator of order 4. +% +% XNEXT = ForwardEuler( X, U, F, H) implements explicit Euler integrator +% equations to discretize (potentially nonlinear) continuous dynamics with +% step size H. Note that H is the absolute time spent between X and XNEXT. +% F is a function handle to a function that takes the arguments (X, U) +% and returns dx/dt. +% +% XNEXT = ForwardEuler( X, U, F, H, P) as above, but parameters P are passed to the +% function handle F to support parameters in the dynamics, e.g. changing +% inertia etc. +% +% XNEXT = ForwardEuler( X, U, F, H, P, M) performs M-steps for the integration, i.e. +% it places M-1 intermediate points between X and XNEXT. Use this to +% integrate systems more accurately without increasing the number of +% optimization variables in the NLP solver. If no parameters are present, +% use P = []. +% +% +% See also BackwardEuler RK2 RK3 RK4 IRK2 IRK4 FORCES_NLP +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. + diff --git a/parameter-learning_nd_disc/FORCES_client/ForwardEuler.p b/parameter-learning_nd_disc/FORCES_client/ForwardEuler.p new file mode 100755 index 0000000..3d909ea Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/ForwardEuler.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/IRK2.m b/parameter-learning_nd_disc/FORCES_client/IRK2.m new file mode 100755 index 0000000..a18f20e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/IRK2.m @@ -0,0 +1,26 @@ +% Implicit Runge-Kutta integrator of order 2. +% +% [XNEXT, JAC] = IRK2( X, U, XIDX, UDIX, F, H) implements implicit RK2 integrator +% equations to discretize (potentially nonlinear) continuous dynamics with +% step size H. Note that H is the absolute time spent between X and XNEXT. +% F is a function handle to a function that takes the arguments (X, U) +% and returns dx/dt. XIDX and UIDX are the indices for the states and +% inputs used to construct the Jacobian JAC. +% +% [XNEXT, JAC] = IRK2( X, U, XIDX, UDIX, F, H, P) as above, but parameters P are passed to the +% function handle F to support parameters in the dynamics, e.g. changing +% inertia etc. +% +% [XNEXT, JAC] = IRK2( X, U, XIDX, UDIX, F, H, P, M) performs M-steps for the integration, i.e. +% it places M-1 intermediate points between X and XNEXT. Use this to +% integrate systems more accurately without increasing the number of +% optimization variables in the NLP solver. If no parameters are present, +% use P = []. +% +% +% See also ForwardEuler BackwardEuler RK2 RK3 RK4 IRK4 FORCES_NLP +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. + diff --git a/parameter-learning_nd_disc/FORCES_client/IRK2.p b/parameter-learning_nd_disc/FORCES_client/IRK2.p new file mode 100755 index 0000000..835d7bc Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/IRK2.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/IRK4.m b/parameter-learning_nd_disc/FORCES_client/IRK4.m new file mode 100755 index 0000000..d96d96c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/IRK4.m @@ -0,0 +1,26 @@ +% Implicit Runge-Kutta integrator of order 4. +% +% [XNEXT, JAC] = IRK4( X, U, XIDX, UDIX, F, H) implements implicit RK4 integrator +% equations to discretize (potentially nonlinear) continuous dynamics with +% step size H. Note that H is the absolute time spent between X and XNEXT. +% F is a function handle to a function that takes the arguments (X, U) +% and returns dx/dt. XIDX and UIDX are the indices for the states and +% inputs used to construct the Jacobian JAC. +% +% [XNEXT, JAC] = IRK4( X, U, XIDX, UDIX, F, H, P) as above, but parameters P are passed to the +% function handle F to support parameters in the dynamics, e.g. changing +% inertia etc. +% +% [XNEXT, JAC] = IRK4( X, U, XIDX, UDIX, F, H, P, M) performs M-steps for the integration, i.e. +% it places M-1 intermediate points between X and XNEXT. Use this to +% integrate systems more accurately without increasing the number of +% optimization variables in the NLP solver. If no parameters are present, +% use P = []. +% +% +% See also ForwardEuler BackwardEuler RK2 RK3 RK4 IRK2 FORCES_NLP +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. + diff --git a/parameter-learning_nd_disc/FORCES_client/IRK4.p b/parameter-learning_nd_disc/FORCES_client/IRK4.p new file mode 100755 index 0000000..6f482b6 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/IRK4.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/MPC_lib_2012b.mdl b/parameter-learning_nd_disc/FORCES_client/MPC_lib_2012b.mdl new file mode 100755 index 0000000..e75ad2f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/MPC_lib_2012b.mdl @@ -0,0 +1,11985 @@ +Library { + Name "MPC_lib_2012b" + Version 8.3 + MdlSubVersion 0 + SavedCharacterEncoding "windows-1252" + LibraryType "BlockLibrary" + SaveDefaultBlockParams on + ScopeRefreshTime 0.035000 + OverrideScopeRefreshTime on + DisableAllScopes off + FPTRunName "Run 1" + MaxMDLFileLineLength 120 + Object { + $PropName "BdWindowsInfo" + $ObjectID 1 + $ClassName "Simulink.BDWindowsInfo" + Object { + $PropName "WindowsInfo" + $ObjectID 2 + $ClassName "Simulink.WindowInfo" + IsActive [1] + Location [910.0, 253.0, 688.0, 597.0] + Object { + $PropName "ModelBrowserInfo" + $ObjectID 3 + $ClassName "Simulink.ModelBrowserInfo" + Visible [1] + DockPosition "Left" + Width [50] + Height [50] + Filter [9] + } + Object { + $PropName "ExplorerBarInfo" + $ObjectID 4 + $ClassName "Simulink.ExplorerBarInfo" + Visible [1] + } + Object { + $PropName "EditorsInfo" + $ObjectID 5 + $ClassName "Simulink.EditorInfo" + IsActive [1] + ViewObjType "SimulinkTopLevel" + LoadSaveID "0" + Extents [445.0, 430.0] + ZoomFactor [1.25] + Offset [64.600000000000136, 66.74285714285719] + } + } + } + Created "Thu Feb 13 11:48:05 2014" + Creator "Juan" + UpdateHistory "UpdateHistoryNever" + ModifiedByFormat "%" + LastModifiedBy "juanj" + ModifiedDateFormat "%" + LastModifiedDate "Thu Oct 20 14:21:07 2016" + RTWModifiedTimeStamp 398874055 + ModelVersionFormat "1.%" + ConfigurationManager "none" + SampleTimeColors off + SampleTimeAnnotations off + LibraryLinkDisplay "disabled" + WideLines off + ShowLineDimensions off + ShowPortDataTypes off + ShowDesignRanges off + ShowLoopsOnError on + IgnoreBidirectionalLines off + ShowStorageClass off + ShowTestPointIcons on + ShowSignalResolutionIcons on + ShowViewerIcons on + SortedOrder off + ExecutionContextIcon off + ShowLinearizationAnnotations on + BlockNameDataTip off + BlockParametersDataTip off + BlockDescriptionStringDataTip off + ToolBar on + StatusBar on + BrowserShowLibraryLinks off + BrowserLookUnderMasks off + SimulationMode "normal" + PauseTimes "5" + NumberOfSteps 1 + SnapshotBufferSize 10 + SnapshotInterval 10 + NumberOfLastSnapshots 0 + LinearizationMsg "none" + Profile off + ParamWorkspaceSource "MATLABWorkspace" + RecordCoverage off + CovSaveName "covdata" + CovMetricSettings "dw" + CovNameIncrementing off + CovHtmlReporting on + CovForceBlockReductionOff on + CovEnableCumulative on + covSaveCumulativeToWorkspaceVar on + CovSaveSingleToWorkspaceVar on + CovCumulativeReport off + CovReportOnPause on + CovModelRefEnable "Off" + CovExternalEMLEnable off + CovSFcnEnable off + CovBoundaryAbsTol 0.000010 + CovBoundaryRelTol 0.010000 + ExtModeBatchMode off + ExtModeEnableFloating on + ExtModeTrigType "manual" + ExtModeTrigMode "normal" + ExtModeTrigPort "1" + ExtModeTrigElement "any" + ExtModeTrigDuration 1000 + ExtModeTrigDurationFloating "auto" + ExtModeTrigHoldOff 0 + ExtModeTrigDelay 0 + ExtModeTrigDirection "rising" + ExtModeTrigLevel 0 + ExtModeArchiveMode "off" + ExtModeAutoIncOneShot off + ExtModeIncDirWhenArm off + ExtModeAddSuffixToVar off + ExtModeWriteAllDataToWs off + ExtModeArmWhenConnect on + ExtModeSkipDownloadWhenConnect off + ExtModeLogAll on + ExtModeAutoUpdateStatusClock on + ShowModelReferenceBlockVersion off + ShowModelReferenceBlockIO off + Array { + Type "Handle" + Dimension 1 + Simulink.ConfigSet { + $ObjectID 6 + Version "1.14.2" + Array { + Type "Handle" + Dimension 8 + Simulink.SolverCC { + $ObjectID 7 + Version "1.14.2" + StartTime "0.0" + StopTime "10.0" + AbsTol "auto" + FixedStep "auto" + InitialStep "auto" + MaxNumMinSteps "-1" + MaxOrder 5 + ZcThreshold "auto" + ConsecutiveZCsStepRelTol "10*128*eps" + MaxConsecutiveZCs "1000" + ExtrapolationOrder 4 + NumberNewtonIterations 1 + MaxStep "auto" + MinStep "auto" + MaxConsecutiveMinStep "1" + RelTol "1e-3" + SolverMode "Auto" + EnableConcurrentExecution off + ConcurrentTasks off + Solver "ode45" + SolverName "ode45" + SolverJacobianMethodControl "auto" + ShapePreserveControl "DisableAll" + ZeroCrossControl "UseLocalSettings" + ZeroCrossAlgorithm "Nonadaptive" + AlgebraicLoopSolver "TrustRegion" + SolverResetMethod "Fast" + PositivePriorityOrder off + AutoInsertRateTranBlk off + SampleTimeConstraint "Unconstrained" + InsertRTBMode "Whenever possible" + } + Simulink.DataIOCC { + $ObjectID 8 + Version "1.14.2" + Decimation "1" + ExternalInput "[t, u]" + FinalStateName "xFinal" + InitialState "xInitial" + LimitDataPoints on + MaxDataPoints "1000" + LoadExternalInput off + LoadInitialState off + SaveFinalState off + SaveCompleteFinalSimState off + SaveFormat "Array" + SignalLoggingSaveFormat "Dataset" + SaveOutput on + SaveState off + SignalLogging on + DSMLogging on + InspectSignalLogs off + VisualizeSimOutput on + SaveTime on + ReturnWorkspaceOutputs off + StateSaveName "xout" + TimeSaveName "tout" + OutputSaveName "yout" + SignalLoggingName "logsout" + DSMLoggingName "dsmout" + OutputOption "RefineOutputTimes" + OutputTimes "[]" + ReturnWorkspaceOutputsName "out" + Refine "1" + } + Simulink.OptimizationCC { + $ObjectID 9 + Version "1.14.2" + Array { + Type "Cell" + Dimension 8 + Cell "BooleansAsBitfields" + Cell "PassReuseOutputArgsAs" + Cell "PassReuseOutputArgsThreshold" + Cell "ZeroExternalMemoryAtStartup" + Cell "ZeroInternalMemoryAtStartup" + Cell "OptimizeModelRefInitCode" + Cell "NoFixptDivByZeroProtection" + Cell "UseSpecifiedMinMax" + PropName "DisabledProps" + } + BlockReduction on + BooleanDataType on + ConditionallyExecuteInputs on + InlineParams off + UseIntDivNetSlope off + UseFloatMulNetSlope off + DefaultUnderspecifiedDataType "double" + UseSpecifiedMinMax off + InlineInvariantSignals off + OptimizeBlockIOStorage on + BufferReuse on + EnhancedBackFolding off + CachingGlobalReferences off + GlobalBufferReuse on + StrengthReduction off + ExpressionFolding on + BooleansAsBitfields off + BitfieldContainerType "uint_T" + EnableMemcpy on + MemcpyThreshold 64 + PassReuseOutputArgsAs "Structure reference" + ExpressionDepthLimit 128 + FoldNonRolledExpr on + LocalBlockOutputs on + RollThreshold 5 + SystemCodeInlineAuto off + StateBitsets off + DataBitsets off + ActiveStateOutputEnumStorageType "Native Integer" + UseTempVars off + ZeroExternalMemoryAtStartup on + ZeroInternalMemoryAtStartup on + InitFltsAndDblsToZero off + NoFixptDivByZeroProtection off + EfficientFloat2IntCast off + EfficientMapNaN2IntZero on + OptimizeModelRefInitCode off + LifeSpan "inf" + MaxStackSize "Inherit from target" + BufferReusableBoundary on + SimCompilerOptimization "Off" + AccelVerboseBuild off + ParallelExecutionInRapidAccelerator on + } + Simulink.DebuggingCC { + $ObjectID 10 + Version "1.14.2" + RTPrefix "error" + ConsistencyChecking "none" + ArrayBoundsChecking "none" + SignalInfNanChecking "none" + SignalRangeChecking "none" + ReadBeforeWriteMsg "UseLocalSettings" + WriteAfterWriteMsg "UseLocalSettings" + WriteAfterReadMsg "UseLocalSettings" + AlgebraicLoopMsg "warning" + ArtificialAlgebraicLoopMsg "warning" + SaveWithDisabledLinksMsg "warning" + SaveWithParameterizedLinksMsg "warning" + CheckSSInitialOutputMsg on + UnderspecifiedInitializationDetection "Classic" + MergeDetectMultiDrivingBlocksExec "none" + CheckExecutionContextPreStartOutputMsg off + CheckExecutionContextRuntimeOutputMsg off + SignalResolutionControl "UseLocalSettings" + BlockPriorityViolationMsg "warning" + MinStepSizeMsg "warning" + TimeAdjustmentMsg "none" + MaxConsecutiveZCsMsg "error" + MaskedZcDiagnostic "warning" + IgnoredZcDiagnostic "warning" + SolverPrmCheckMsg "warning" + InheritedTsInSrcMsg "warning" + DiscreteInheritContinuousMsg "warning" + MultiTaskDSMMsg "error" + MultiTaskCondExecSysMsg "error" + MultiTaskRateTransMsg "error" + SingleTaskRateTransMsg "none" + TasksWithSamePriorityMsg "warning" + SigSpecEnsureSampleTimeMsg "warning" + CheckMatrixSingularityMsg "none" + IntegerOverflowMsg "warning" + Int32ToFloatConvMsg "warning" + ParameterDowncastMsg "error" + ParameterOverflowMsg "error" + ParameterUnderflowMsg "none" + ParameterPrecisionLossMsg "warning" + ParameterTunabilityLossMsg "warning" + FixptConstUnderflowMsg "none" + FixptConstOverflowMsg "none" + FixptConstPrecisionLossMsg "none" + UnderSpecifiedDataTypeMsg "none" + UnnecessaryDatatypeConvMsg "none" + VectorMatrixConversionMsg "none" + InvalidFcnCallConnMsg "error" + FcnCallInpInsideContextMsg "EnableAllAsError" + SignalLabelMismatchMsg "none" + UnconnectedInputMsg "warning" + UnconnectedOutputMsg "warning" + UnconnectedLineMsg "warning" + SFcnCompatibilityMsg "none" + FrameProcessingCompatibilityMsg "warning" + UniqueDataStoreMsg "none" + BusObjectLabelMismatch "warning" + RootOutportRequireBusObject "warning" + AssertControl "UseLocalSettings" + EnableOverflowDetection off + ModelReferenceIOMsg "none" + ModelReferenceMultiInstanceNormalModeStructChecksumCheck "error" + ModelReferenceVersionMismatchMessage "none" + ModelReferenceIOMismatchMessage "none" + ModelReferenceCSMismatchMessage "none" + UnknownTsInhSupMsg "warning" + ModelReferenceDataLoggingMessage "warning" + ModelReferenceSymbolNameMessage "warning" + ModelReferenceExtraNoncontSigs "error" + StateNameClashWarn "warning" + SimStateInterfaceChecksumMismatchMsg "warning" + SimStateOlderReleaseMsg "error" + InitInArrayFormatMsg "warning" + StrictBusMsg "ErrorLevel1" + BusNameAdapt "WarnAndRepair" + NonBusSignalsTreatedAsBus "none" + LoggingUnavailableSignals "error" + BlockIODiagnostic "none" + SFUnusedDataAndEventsDiag "warning" + SFUnexpectedBacktrackingDiag "warning" + SFInvalidInputDataAccessInChartInitDiag "warning" + SFNoUnconditionalDefaultTransitionDiag "warning" + SFTransitionOutsideNaturalParentDiag "warning" + SFUnconditionalTransitionShadowingDiag "warning" + SFUndirectedBroadcastEventsDiag "warning" + SFTransitionActionBeforeConditionDiag "warning" + } + Simulink.HardwareCC { + $ObjectID 11 + Version "1.14.2" + ProdBitPerChar 8 + ProdBitPerShort 16 + ProdBitPerInt 32 + ProdBitPerLong 32 + ProdBitPerLongLong 64 + ProdBitPerFloat 32 + ProdBitPerDouble 64 + ProdBitPerPointer 32 + ProdLargestAtomicInteger "Char" + ProdLargestAtomicFloat "None" + ProdIntDivRoundTo "Undefined" + ProdEndianess "Unspecified" + ProdWordSize 32 + ProdShiftRightIntArith on + ProdLongLongMode off + ProdHWDeviceType "32-bit Generic" + TargetBitPerChar 8 + TargetBitPerShort 16 + TargetBitPerInt 32 + TargetBitPerLong 32 + TargetBitPerLongLong 64 + TargetBitPerFloat 32 + TargetBitPerDouble 64 + TargetBitPerPointer 32 + TargetLargestAtomicInteger "Char" + TargetLargestAtomicFloat "None" + TargetShiftRightIntArith on + TargetLongLongMode off + TargetIntDivRoundTo "Undefined" + TargetEndianess "Unspecified" + TargetWordSize 32 + TargetTypeEmulationWarnSuppressLevel 0 + TargetPreprocMaxBitsSint 32 + TargetPreprocMaxBitsUint 32 + TargetHWDeviceType "Specified" + TargetUnknown off + ProdEqTarget on + } + Simulink.ModelReferenceCC { + $ObjectID 12 + Version "1.14.2" + UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" + CheckModelReferenceTargetMessage "error" + EnableParallelModelReferenceBuilds off + ParallelModelReferenceErrorOnInvalidPool on + ParallelModelReferenceMATLABWorkerInit "None" + ModelReferenceNumInstancesAllowed "Multi" + PropagateVarSize "Infer from blocks in model" + ModelReferencePassRootInputsByReference on + ModelReferenceMinAlgLoopOccurrences off + PropagateSignalLabelsOutOfModel off + SupportModelReferenceSimTargetCustomCode off + } + Simulink.SFSimCC { + $ObjectID 13 + Version "1.14.2" + SFSimEnableDebug on + SFSimOverflowDetection on + SFSimEcho on + SimBlas on + SimCtrlC on + SimExtrinsic on + SimIntegrity on + SimUseLocalCustomCode off + SimParseCustomCode on + SimBuildMode "sf_incremental_build" + SimGenImportedTypeDefs off + } + Simulink.RTWCC { + $BackupClass "Simulink.RTWCC" + $ObjectID 14 + Version "1.14.2" + Array { + Type "Cell" + Dimension 15 + Cell "IncludeHyperlinkInReport" + Cell "GenerateTraceInfo" + Cell "GenerateTraceReport" + Cell "GenerateTraceReportSl" + Cell "GenerateTraceReportSf" + Cell "GenerateTraceReportEml" + Cell "PortableWordSizes" + Cell "GenerateWebview" + Cell "GenerateCodeMetricsReport" + Cell "GenerateCodeReplacementReport" + Cell "GenerateErtSFunction" + Cell "CreateSILPILBlock" + Cell "CodeExecutionProfiling" + Cell "CodeProfilingSaveOptions" + Cell "CodeProfilingInstrumentation" + PropName "DisabledProps" + } + SystemTargetFile "grt.tlc" + TLCOptions "" + GenCodeOnly off + MakeCommand "make_rtw" + GenerateMakefile on + PackageGeneratedCodeAndArtifacts off + PackageName "" + TemplateMakefile "grt_default_tmf" + PostCodeGenCommand "" + Description "" + GenerateReport off + SaveLog off + RTWVerbose on + RetainRTWFile off + ProfileTLC off + TLCDebug off + TLCCoverage off + TLCAssert off + ProcessScriptMode "Default" + ConfigurationMode "Optimized" + ProcessScript "" + ConfigurationScript "" + ConfigAtBuild off + RTWUseLocalCustomCode off + RTWUseSimCustomCode off + CustomSourceCode "" + CustomHeaderCode "" + CustomInclude "" + CustomSource "" + CustomLibrary "" + CustomInitializer "" + CustomTerminator "" + Toolchain "Automatically locate an installed toolchain" + BuildConfiguration "Faster Builds" + IncludeHyperlinkInReport off + LaunchReport off + PortableWordSizes off + CreateSILPILBlock "None" + CodeExecutionProfiling off + CodeExecutionProfileVariable "executionProfile" + CodeProfilingSaveOptions "SummaryOnly" + CodeProfilingInstrumentation off + SILDebugging off + TargetLang "C" + IncludeBusHierarchyInRTWFileBlockHierarchyMap off + IncludeERTFirstTime off + GenerateTraceInfo off + GenerateTraceReport off + GenerateTraceReportSl off + GenerateTraceReportSf off + GenerateTraceReportEml off + GenerateCodeInfo off + GenerateWebview off + GenerateCodeMetricsReport off + GenerateCodeReplacementReport off + RTWCompilerOptimization "Off" + RTWCustomCompilerOptimizations "" + CheckMdlBeforeBuild "Off" + CustomRebuildMode "OnUpdate" + DataInitializer "" + SharedConstantsCachingThreshold 1024 + Array { + Type "Handle" + Dimension 2 + Simulink.CodeAppCC { + $ObjectID 15 + Version "1.14.2" + Array { + Type "Cell" + Dimension 22 + Cell "IgnoreCustomStorageClasses" + Cell "IgnoreTestpoints" + Cell "InsertBlockDesc" + Cell "InsertPolySpaceComments" + Cell "SFDataObjDesc" + Cell "MATLABFcnDesc" + Cell "SimulinkDataObjDesc" + Cell "DefineNamingRule" + Cell "SignalNamingRule" + Cell "ParamNamingRule" + Cell "InternalIdentifier" + Cell "InlinedPrmAccess" + Cell "CustomSymbolStr" + Cell "CustomSymbolStrGlobalVar" + Cell "CustomSymbolStrType" + Cell "CustomSymbolStrField" + Cell "CustomSymbolStrFcn" + Cell "CustomSymbolStrFcnArg" + Cell "CustomSymbolStrBlkIO" + Cell "CustomSymbolStrTmpVar" + Cell "CustomSymbolStrMacro" + Cell "ReqsInCode" + PropName "DisabledProps" + } + ForceParamTrailComments off + GenerateComments on + CommentStyle "Auto" + IgnoreCustomStorageClasses on + IgnoreTestpoints off + IncHierarchyInIds off + MaxIdLength 31 + PreserveName off + PreserveNameWithParent off + ShowEliminatedStatement off + OperatorAnnotations off + IncAutoGenComments off + SimulinkDataObjDesc off + SFDataObjDesc off + MATLABFcnDesc off + IncDataTypeInIds off + MangleLength 1 + CustomSymbolStrGlobalVar "$R$N$M" + CustomSymbolStrType "$N$R$M_T" + CustomSymbolStrField "$N$M" + CustomSymbolStrFcn "$R$N$M$F" + CustomSymbolStrFcnArg "rt$I$N$M" + CustomSymbolStrBlkIO "rtb_$N$M" + CustomSymbolStrTmpVar "$N$M" + CustomSymbolStrMacro "$R$N$M" + CustomSymbolStrUtil "$N$C" + DefineNamingRule "None" + ParamNamingRule "None" + SignalNamingRule "None" + InsertBlockDesc off + InsertPolySpaceComments off + SimulinkBlockComments on + MATLABSourceComments off + EnableCustomComments off + InternalIdentifier "Shortened" + InlinedPrmAccess "Literals" + ReqsInCode off + UseSimReservedNames off + } + Simulink.GRTTargetCC { + $BackupClass "Simulink.TargetCC" + $ObjectID 16 + Version "1.14.2" + Array { + Type "Cell" + Dimension 15 + Cell "GeneratePreprocessorConditionals" + Cell "IncludeMdlTerminateFcn" + Cell "CombineOutputUpdateFcns" + Cell "SuppressErrorStatus" + Cell "ERTCustomFileBanners" + Cell "GenerateSampleERTMain" + Cell "GenerateTestInterfaces" + Cell "ModelStepFunctionPrototypeControlCompliant" + Cell "CPPClassGenCompliant" + Cell "GenerateAllocFcn" + Cell "PurelyIntegerCode" + Cell "SupportComplex" + Cell "SupportAbsoluteTime" + Cell "SupportContinuousTime" + Cell "SupportNonInlinedSFcns" + PropName "DisabledProps" + } + TargetFcnLib "ansi_tfl_table_tmw.mat" + TargetLibSuffix "" + TargetPreCompLibLocation "" + GenFloatMathFcnCalls "NOT IN USE" + TargetLangStandard "C89/C90 (ANSI)" + CodeReplacementLibrary "None" + UtilityFuncGeneration "Auto" + ERTMultiwordTypeDef "System defined" + ERTMultiwordLength 256 + MultiwordLength 2048 + GenerateFullHeader on + GenerateSampleERTMain off + GenerateTestInterfaces off + ModelReferenceCompliant on + ParMdlRefBuildCompliant on + CompOptLevelCompliant on + ConcurrentExecutionCompliant on + IncludeMdlTerminateFcn on + GeneratePreprocessorConditionals "Disable all" + CombineOutputUpdateFcns on + CombineSignalStateStructs off + SuppressErrorStatus off + ERTFirstTimeCompliant off + IncludeFileDelimiter "Auto" + ERTCustomFileBanners off + SupportAbsoluteTime on + LogVarNameModifier "rt_" + MatFileLogging on + MultiInstanceERTCode off + CodeInterfacePackaging "Nonreusable function" + SupportNonFinite on + SupportComplex on + PurelyIntegerCode off + SupportContinuousTime on + SupportNonInlinedSFcns on + SupportVariableSizeSignals off + EnableShiftOperators on + ParenthesesLevel "Nominal" + MATLABClassNameForMDSCustomization "Simulink.SoftwareTarget.GRTCustomization" + ModelStepFunctionPrototypeControlCompliant off + CPPClassGenCompliant on + AutosarCompliant off + GRTInterface off + GenerateAllocFcn off + UseMalloc off + ExtMode off + ExtModeStaticAlloc off + ExtModeTesting off + ExtModeStaticAllocSize 1000000 + ExtModeTransport 0 + ExtModeMexFile "ext_comm" + ExtModeIntrfLevel "Level1" + RTWCAPISignals off + RTWCAPIParams off + RTWCAPIStates off + RTWCAPIRootIO off + GenerateASAP2 off + MultiInstanceErrorCode "Error" + } + PropName "Components" + } + } + PropName "Components" + } + Name "Configuration" + CurrentDlgPage "Solver" + ConfigPrmDlgPosition [ 430, 225, 1490, 855 ] + } + PropName "ConfigurationSets" + } + ExplicitPartitioning off + BlockDefaults { + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + NamePlacement "normal" + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + ShowName on + BlockRotation 0 + BlockMirror off + } + AnnotationDefaults { + HorizontalAlignment "center" + VerticalAlignment "middle" + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + UseDisplayTextAsClickCallback off + } + LineDefaults { + FontName "Helvetica" + FontSize 9 + FontWeight "normal" + FontAngle "normal" + } + MaskDefaults { + SelfModifiable "off" + IconFrame "on" + IconOpaque "on" + RunInitForIconRedraw "off" + IconRotate "none" + PortRotate "default" + IconUnits "autoscale" + } + MaskParameterDefaults { + Evaluate "on" + Tunable "on" + NeverSave "off" + Internal "off" + ReadOnly "off" + Enabled "on" + Visible "on" + ToolTip "on" + } + BlockParameterDefaults { + Block { + BlockType S-Function + FunctionName "system" + SFunctionModules "''" + PortCounts "[]" + SFunctionDeploymentMode off + } + } + System { + Name "MPC_lib_2012b" + Location [910, 253, 1598, 850] + Open on + ModelBrowserVisibility on + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "125" + ReportName "simulink-default.rpt" + SIDHighWatermark "2" + Block { + BlockType S-Function + Name "MPC" + SID "1" + Ports [1, 1] + Position [135, 114, 315, 276] + ZOrder 2 + Priority "1000" + InitFcn "%configure_block(gcb,'generate');" + CloseFcn "%configure_block(gcb,'generate');" + FunctionName "FORCES_PRO" + EnableBusSupport off + Object { + $PropName "MaskObject" + $ObjectID 17 + $ClassName "Simulink.Mask" + Type "Configuration of customized MPC controller" + Description "Copy this block to your Simulink diagram before configuring.\n\nOnce the block is configured, type 'con" + "figure_block' if you want to generate a new controller.\n\nClick on 'Help' to get further information on the differen" + "t confiuration options." + Help "web('https://www.embotech.com/FORCES-Pro/User-Manual/Graphical-Interface', '-browser')" + SelfModifiable "on" + Array { + Type "Simulink.MaskParameter" + Dimension 982 + Object { + $ObjectID 18 + Type "checkbox" + Name "gsdfgdasfgsdfghsdf" + Prompt "ds" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'first_init')" + TabName "Model" + } + Object { + $ObjectID 19 + Type "popup" + Array { + Type "Cell" + Dimension 3 + Cell "x(./+) = Ax + Bu" + Cell "x(./+) = Ax + Bu + g" + Cell "Take model from Simulink block" + PropName "TypeOptions" + } + Name "modelType" + Prompt "Type:" + Value "x(./+) = Ax + Bu" + Evaluate "off" + Tunable "off" + Callback "configure_block(gcb,'model_type')" + TabName "Model" + } + Object { + $ObjectID 20 + Type "popup" + Array { + Type "Cell" + Dimension 2 + Cell "Continuous-time model" + Cell "Discrete-time model" + PropName "TypeOptions" + } + Name "modelTime" + Prompt "Time:" + Value "Continuous-time model" + Evaluate "off" + Tunable "off" + Callback "configure_block(gcb,'model_time')" + TabName "Model" + } + Object { + $ObjectID 21 + Type "edit" + Name "Ts" + Prompt "Sampling time (seconds):" + Value "0.05" + Evaluate "off" + Tunable "off" + TabName "Model" + } + Object { + $ObjectID 22 + Type "edit" + Name "sepbar1" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + TabName "Model" + } + Object { + $ObjectID 23 + Type "edit" + Name "A" + Prompt "A - state transistion matrix:" + Value "" + Evaluate "off" + Tunable "off" + Callback "configure_block(gcb,'getA_matrix')" + TabName "Model" + } + Object { + $ObjectID 24 + Type "checkbox" + Name "boolAparam" + Prompt "Parameter?" + Value "off" + Tunable "off" + Callback "configure_block(gcb,'params_check','A')" + TabName "Model" + } + Object { + $ObjectID 25 + Type "checkbox" + Name "boolAparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "Model" + } + Object { + $ObjectID 26 + Type "edit" + Name "B" + Prompt "B - input matrix:" + Value "" + Evaluate "off" + Tunable "off" + Callback "configure_block(gcb,'getB_matrix')" + TabName "Model" + } + Object { + $ObjectID 27 + Type "checkbox" + Name "boolBparam" + Prompt "Parameter?" + Value "off" + Tunable "off" + Callback "configure_block(gcb,'params_check','B')" + TabName "Model" + } + Object { + $ObjectID 28 + Type "checkbox" + Name "boolBparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "Model" + } + Object { + $ObjectID 29 + Type "edit" + Name "C" + Prompt "C - output matrix:" + Value "" + Evaluate "off" + Tunable "off" + Callback "configure_block(gcb,'getC_matrix')" + TabName "Model" + } + Object { + $ObjectID 30 + Type "edit" + Name "g" + Prompt "g - additive term:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'getg_matrix')" + TabName "Model" + } + Object { + $ObjectID 31 + Type "checkbox" + Name "boolgparam" + Prompt "Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','g')" + TabName "Model" + } + Object { + $ObjectID 32 + Type "checkbox" + Name "boolgparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "Model" + } + Object { + $ObjectID 33 + Type "edit" + Name "modelName" + Prompt "Simulink model name:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'getBlockName')" + TabName "Model" + } + Object { + $ObjectID 34 + Type "edit" + Name "no_inputs" + Prompt "Number of inputs:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'get_input_dim')" + TabName "Model" + } + Object { + $ObjectID 35 + Type "checkbox" + Name "boolOutputTrack" + Prompt "Reference tracking?" + Value "off" + Tunable "off" + Callback "configure_block(gcb,'output_traj')" + TabName "Control objectives" + } + Object { + $ObjectID 36 + Type "popup" + Array { + Type "Cell" + Dimension 2 + Cell "Provide output reference and calculate offset-free state and input references" + Cell "Provide state and input references" + PropName "TypeOptions" + } + Name "WhichRef" + Prompt "" + Value "Provide output reference and calculate offset-free state and input references" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "Control objectives" + } + Object { + $ObjectID 37 + Type "checkbox" + Name "boolKnownOutputTraj" + Prompt "Does the reference change over the prediction horizon?" + Value "off" + Tunable "off" + Visible "off" + TabName "Control objectives" + } + Object { + $ObjectID 38 + Type "checkbox" + Name "boolRatePen" + Prompt "Penalize the input slew rate?" + Value "off" + Tunable "off" + Callback "configure_block(gcb,'load_cost_mat')" + TabName "Control objectives" + } + Object { + $ObjectID 39 + Type "checkbox" + Name "boolTerCost" + Prompt "Use unconstrained LQR gain as terminal cost?" + Value "off" + Tunable "off" + Callback "configure_block(gcb,'auto_terminal_cost')" + TabName "Control objectives" + } + Object { + $ObjectID 40 + Type "edit" + Name "Ns" + Prompt "Control/prediction horizon (steps):" + Value "5" + Tunable "off" + TabName "Control objectives" + } + Object { + $ObjectID 41 + Type "edit" + Name "sepbar2" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + TabName "Control objectives" + } + Object { + $ObjectID 42 + Type "checkbox" + Name "boolLoadCostMat" + Prompt "Load weighing matrices?" + Value "on" + Tunable "off" + Callback "configure_block(gcb,'load_cost_mat')" + TabName "Control objectives" + } + Object { + $ObjectID 43 + Type "edit" + Name "Q" + Prompt "Q - output cost matrix:" + Value "" + Evaluate "off" + Tunable "off" + Callback "configure_block(gcb,'getQ_matrix')" + TabName "Control objectives" + } + Object { + $ObjectID 44 + Type "checkbox" + Name "boolQparam" + Prompt "Parameter?" + Value "off" + Tunable "off" + Callback "configure_block(gcb,'params_check','Q')" + TabName "Control objectives" + } + Object { + $ObjectID 45 + Type "checkbox" + Name "boolQparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "Control objectives" + } + Object { + $ObjectID 46 + Type "edit" + Name "Qterminal" + Prompt "Q_N - terminal state cost matrix:" + Value "" + Evaluate "off" + Tunable "off" + TabName "Control objectives" + } + Object { + $ObjectID 47 + Type "checkbox" + Name "boolQNparam" + Prompt "Parameter?" + Value "off" + Tunable "off" + Callback "configure_block(gcb,'params_check','Q_N')" + TabName "Control objectives" + } + Object { + $ObjectID 48 + Type "edit" + Name "R" + Prompt "R - input cost matrix:" + Value "" + Evaluate "off" + Tunable "off" + Callback "configure_block(gcb,'getR_matrix')" + TabName "Control objectives" + } + Object { + $ObjectID 49 + Type "checkbox" + Name "boolRparam" + Prompt "Parameter?" + Value "off" + Tunable "off" + Callback "configure_block(gcb,'params_check','R')" + TabName "Control objectives" + } + Object { + $ObjectID 50 + Type "checkbox" + Name "boolRparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "Control objectives" + } + Object { + $ObjectID 51 + Type "edit" + Name "T" + Prompt "T - input rate cost matrix:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'getT_matrix')" + TabName "Control objectives" + } + Object { + $ObjectID 52 + Type "checkbox" + Name "boolTparam" + Prompt "Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','T')" + TabName "Control objectives" + } + Object { + $ObjectID 53 + Type "checkbox" + Name "boolTparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "Control objectives" + } + Object { + $ObjectID 54 + Type "edit" + Name "WeightOutput1" + Prompt "Relative importance of output/state 1:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 55 + Type "edit" + Name "WeightOutput2" + Prompt "Relative importance of output/state 2:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 56 + Type "edit" + Name "WeightOutput3" + Prompt "Relative importance of output/state 3:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 57 + Type "edit" + Name "WeightOutput4" + Prompt "Relative importance of output/state 4:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 58 + Type "edit" + Name "WeightOutput5" + Prompt "Relative importance of output/state 5:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 59 + Type "edit" + Name "WeightOutput6" + Prompt "Relative importance of output/state 6:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 60 + Type "edit" + Name "WeightOutput7" + Prompt "Relative importance of output/state 7:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 61 + Type "edit" + Name "WeightOutput8" + Prompt "Relative importance of output/state 8:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 62 + Type "edit" + Name "WeightOutput9" + Prompt "Relative importance of output/state 9:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 63 + Type "edit" + Name "WeightOutput10" + Prompt "Relative importance of output/state 10:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 64 + Type "edit" + Name "WeightOutput11" + Prompt "Relative importance of output/state 11:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 65 + Type "edit" + Name "WeightOutput12" + Prompt "Relative importance of output/state 12:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 66 + Type "edit" + Name "WeightOutput13" + Prompt "Relative importance of output/state 13:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 67 + Type "edit" + Name "WeightOutput14" + Prompt "Relative importance of output/state 14:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 68 + Type "edit" + Name "WeightOutput15" + Prompt "Relative importance of output/state 15:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 69 + Type "edit" + Name "WeightOutput16" + Prompt "Relative importance of output/state 16:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 70 + Type "edit" + Name "WeightOutput17" + Prompt "Relative importance of output/state 17:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 71 + Type "edit" + Name "WeightOutput18" + Prompt "Relative importance of output/state 18:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 72 + Type "edit" + Name "WeightOutput19" + Prompt "Relative importance of output/state 19:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 73 + Type "edit" + Name "WeightOutput20" + Prompt "Relative importance of output/state 20:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 74 + Type "edit" + Name "WeightOutput21" + Prompt "Relative importance of output/state 21:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 75 + Type "edit" + Name "WeightOutput22" + Prompt "Relative importance of output/state 22:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 76 + Type "edit" + Name "WeightOutput23" + Prompt "Relative importance of output/state 23:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 77 + Type "edit" + Name "WeightOutput24" + Prompt "Relative importance of output/state 24:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 78 + Type "edit" + Name "WeightOutput25" + Prompt "Relative importance of output/state 25:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 79 + Type "edit" + Name "WeightOutput26" + Prompt "Relative importance of output/state 26:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 80 + Type "edit" + Name "WeightOutput27" + Prompt "Relative importance of output/state 27:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 81 + Type "edit" + Name "WeightOutput28" + Prompt "Relative importance of output/state 28:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 82 + Type "edit" + Name "WeightOutput29" + Prompt "Relative importance of output/state 29:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 83 + Type "edit" + Name "WeightOutput30" + Prompt "Relative importance of output/state 30:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 84 + Type "edit" + Name "WeightOutput31" + Prompt "Relative importance of output/state 31:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 85 + Type "edit" + Name "WeightOutput32" + Prompt "Relative importance of output/state 32:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 86 + Type "edit" + Name "WeightOutput33" + Prompt "Relative importance of output/state 33:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 87 + Type "edit" + Name "WeightOutput34" + Prompt "Relative importance of output/state 34:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 88 + Type "edit" + Name "WeightOutput35" + Prompt "Relative importance of output/state 35:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 89 + Type "edit" + Name "WeightOutput36" + Prompt "Relative importance of output/state 36:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 90 + Type "edit" + Name "WeightOutput37" + Prompt "Relative importance of output/state 37:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 91 + Type "edit" + Name "WeightOutput38" + Prompt "Relative importance of output/state 38:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 92 + Type "edit" + Name "WeightOutput39" + Prompt "Relative importance of output/state 39:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 93 + Type "edit" + Name "WeightOutput40" + Prompt "Relative importance of output/state 40:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 94 + Type "edit" + Name "WeightInput1" + Prompt "Relative importance of input 1 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 95 + Type "edit" + Name "WeightInput2" + Prompt "Relative importance of input 2 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 96 + Type "edit" + Name "WeightInput3" + Prompt "Relative importance of input 3 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 97 + Type "edit" + Name "WeightInput4" + Prompt "Relative importance of input 4 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 98 + Type "edit" + Name "WeightInput5" + Prompt "Relative importance of input 5 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 99 + Type "edit" + Name "WeightInput6" + Prompt "Relative importance of input 6 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 100 + Type "edit" + Name "WeightInput7" + Prompt "Relative importance of input 7 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 101 + Type "edit" + Name "WeightInput8" + Prompt "Relative importance of input 8 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 102 + Type "edit" + Name "WeightInput9" + Prompt "Relative importance of input 9 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 103 + Type "edit" + Name "WeightInput10" + Prompt "Relative importance of input 10 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 104 + Type "edit" + Name "WeightInput11" + Prompt "Relative importance of input 11 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 105 + Type "edit" + Name "WeightInput12" + Prompt "Relative importance of input 12 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 106 + Type "edit" + Name "WeightInput13" + Prompt "Relative importance of input 13 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 107 + Type "edit" + Name "WeightInput14" + Prompt "Relative importance of input 14 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 108 + Type "edit" + Name "WeightInput15" + Prompt "Relative importance of input 15 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 109 + Type "edit" + Name "WeightInput16" + Prompt "Relative importance of input 16 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 110 + Type "edit" + Name "WeightInput17" + Prompt "Relative importance of input 17 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 111 + Type "edit" + Name "WeightInput18" + Prompt "Relative importance of input 18 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 112 + Type "edit" + Name "WeightInput19" + Prompt "Relative importance of input 19 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 113 + Type "edit" + Name "WeightInput20" + Prompt "Relative importance of input 20 magnitude:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 114 + Type "edit" + Name "WeightInputRate1" + Prompt "Relative importance of input 1 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 115 + Type "edit" + Name "WeightInputRate2" + Prompt "Relative importance of input 2 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 116 + Type "edit" + Name "WeightInputRate3" + Prompt "Relative importance of input 3 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 117 + Type "edit" + Name "WeightInputRate4" + Prompt "Relative importance of input 4 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 118 + Type "edit" + Name "WeightInputRate5" + Prompt "Relative importance of input 5 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 119 + Type "edit" + Name "WeightInputRate6" + Prompt "Relative importance of input 6 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 120 + Type "edit" + Name "WeightInputRate7" + Prompt "Relative importance of input 7 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 121 + Type "edit" + Name "WeightInputRate8" + Prompt "Relative importance of input 8 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 122 + Type "edit" + Name "WeightInputRate9" + Prompt "Relative importance of input 9 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 123 + Type "edit" + Name "WeightInputRate10" + Prompt "Relative importance of input 10 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 124 + Type "edit" + Name "WeightInputRate11" + Prompt "Relative importance of input 11 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 125 + Type "edit" + Name "WeightInputRate12" + Prompt "Relative importance of input 12 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 126 + Type "edit" + Name "WeightInputRate13" + Prompt "Relative importance of input 13 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 127 + Type "edit" + Name "WeightInputRate14" + Prompt "Relative importance of input 14 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 128 + Type "edit" + Name "WeightInputRate15" + Prompt "Relative importance of input 15 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 129 + Type "edit" + Name "WeightInputRate16" + Prompt "Relative importance of input 16 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 130 + Type "edit" + Name "WeightInputRate17" + Prompt "Relative importance of input 17 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 131 + Type "edit" + Name "WeightInputRate18" + Prompt "Relative importance of input 18 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 132 + Type "edit" + Name "WeightInputRate19" + Prompt "Relative importance of input 19 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 133 + Type "edit" + Name "WeightInputRate20" + Prompt "Relative importance of input 20 slew rate:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights')" + TabName "Control objectives" + } + Object { + $ObjectID 134 + Type "edit" + Name "OutConst1SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 135 + Type "checkbox" + Name "boolOutConst1" + Prompt "Constraints on output 1?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',1)" + TabName "System constraints" + } + Object { + $ObjectID 136 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst1Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 137 + Type "edit" + Name "OutConst1Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 138 + Type "checkbox" + Name "boolOutConst1Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst1Lower')" + TabName "System constraints" + } + Object { + $ObjectID 139 + Type "checkbox" + Name "boolOutConst1LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 140 + Type "edit" + Name "OutConst1Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 141 + Type "checkbox" + Name "boolOutConst1Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst1Upper')" + TabName "System constraints" + } + Object { + $ObjectID 142 + Type "checkbox" + Name "boolOutConst1UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 143 + Type "checkbox" + Name "OutConst1Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 144 + Type "edit" + Name "OutConst2SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 145 + Type "checkbox" + Name "boolOutConst2" + Prompt "Constraints on output 2?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',2)" + TabName "System constraints" + } + Object { + $ObjectID 146 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst2Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 147 + Type "edit" + Name "OutConst2Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 148 + Type "checkbox" + Name "boolOutConst2Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst2Lower')" + TabName "System constraints" + } + Object { + $ObjectID 149 + Type "checkbox" + Name "boolOutConst2LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 150 + Type "edit" + Name "OutConst2Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 151 + Type "checkbox" + Name "boolOutConst2Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst2Upper')" + TabName "System constraints" + } + Object { + $ObjectID 152 + Type "checkbox" + Name "boolOutConst2UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 153 + Type "checkbox" + Name "OutConst2Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 154 + Type "edit" + Name "OutConst3SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 155 + Type "checkbox" + Name "boolOutConst3" + Prompt "Constraints on output 3?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',3)" + TabName "System constraints" + } + Object { + $ObjectID 156 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst3Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 157 + Type "edit" + Name "OutConst3Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 158 + Type "checkbox" + Name "boolOutConst3Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst3Lower')" + TabName "System constraints" + } + Object { + $ObjectID 159 + Type "checkbox" + Name "boolOutConst3LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 160 + Type "edit" + Name "OutConst3Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 161 + Type "checkbox" + Name "boolOutConst3Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst3Upper')" + TabName "System constraints" + } + Object { + $ObjectID 162 + Type "checkbox" + Name "boolOutConst3UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 163 + Type "checkbox" + Name "OutConst3Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 164 + Type "edit" + Name "OutConst4SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 165 + Type "checkbox" + Name "boolOutConst4" + Prompt "Constraints on output 4?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',4)" + TabName "System constraints" + } + Object { + $ObjectID 166 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst4Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 167 + Type "edit" + Name "OutConst4Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 168 + Type "checkbox" + Name "boolOutConst4Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst4Lower')" + TabName "System constraints" + } + Object { + $ObjectID 169 + Type "checkbox" + Name "boolOutConst4LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 170 + Type "edit" + Name "OutConst4Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 171 + Type "checkbox" + Name "boolOutConst4Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst4Upper')" + TabName "System constraints" + } + Object { + $ObjectID 172 + Type "checkbox" + Name "boolOutConst4UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 173 + Type "checkbox" + Name "OutConst4Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 174 + Type "edit" + Name "OutConst5SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 175 + Type "checkbox" + Name "boolOutConst5" + Prompt "Constraints on output 5?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',5)" + TabName "System constraints" + } + Object { + $ObjectID 176 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst5Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 177 + Type "edit" + Name "OutConst5Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 178 + Type "checkbox" + Name "boolOutConst5Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst5Lower')" + TabName "System constraints" + } + Object { + $ObjectID 179 + Type "checkbox" + Name "boolOutConst5LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 180 + Type "edit" + Name "OutConst5Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 181 + Type "checkbox" + Name "boolOutConst5Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst5Upper')" + TabName "System constraints" + } + Object { + $ObjectID 182 + Type "checkbox" + Name "boolOutConst5UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 183 + Type "checkbox" + Name "OutConst5Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 184 + Type "edit" + Name "OutConst6SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 185 + Type "checkbox" + Name "boolOutConst6" + Prompt "Constraints on output 6?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',6)" + TabName "System constraints" + } + Object { + $ObjectID 186 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst6Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 187 + Type "edit" + Name "OutConst6Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 188 + Type "checkbox" + Name "boolOutConst6Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst6Lower')" + TabName "System constraints" + } + Object { + $ObjectID 189 + Type "checkbox" + Name "boolOutConst6LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 190 + Type "edit" + Name "OutConst6Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 191 + Type "checkbox" + Name "boolOutConst6Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst6Upper')" + TabName "System constraints" + } + Object { + $ObjectID 192 + Type "checkbox" + Name "boolOutConst6UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 193 + Type "checkbox" + Name "OutConst6Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 194 + Type "edit" + Name "OutConst7SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 195 + Type "checkbox" + Name "boolOutConst7" + Prompt "Constraints on output 7?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',7)" + TabName "System constraints" + } + Object { + $ObjectID 196 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst7Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 197 + Type "edit" + Name "OutConst7Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 198 + Type "checkbox" + Name "boolOutConst7Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst7Lower')" + TabName "System constraints" + } + Object { + $ObjectID 199 + Type "checkbox" + Name "boolOutConst7LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 200 + Type "edit" + Name "OutConst7Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 201 + Type "checkbox" + Name "boolOutConst7Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst7Upper')" + TabName "System constraints" + } + Object { + $ObjectID 202 + Type "checkbox" + Name "boolOutConst7UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 203 + Type "checkbox" + Name "OutConst7Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 204 + Type "edit" + Name "OutConst8SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 205 + Type "checkbox" + Name "boolOutConst8" + Prompt "Constraints on output 8?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',8)" + TabName "System constraints" + } + Object { + $ObjectID 206 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst8Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 207 + Type "edit" + Name "OutConst8Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 208 + Type "checkbox" + Name "boolOutConst8Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst8Lower')" + TabName "System constraints" + } + Object { + $ObjectID 209 + Type "checkbox" + Name "boolOutConst8LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 210 + Type "edit" + Name "OutConst8Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 211 + Type "checkbox" + Name "boolOutConst8Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst8Upper')" + TabName "System constraints" + } + Object { + $ObjectID 212 + Type "checkbox" + Name "boolOutConst8UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 213 + Type "checkbox" + Name "OutConst8Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 214 + Type "edit" + Name "OutConst9SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 215 + Type "checkbox" + Name "boolOutConst9" + Prompt "Constraints on output 9?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',9)" + TabName "System constraints" + } + Object { + $ObjectID 216 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst9Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 217 + Type "edit" + Name "OutConst9Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 218 + Type "checkbox" + Name "boolOutConst9Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst9Lower')" + TabName "System constraints" + } + Object { + $ObjectID 219 + Type "checkbox" + Name "boolOutConst9LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 220 + Type "edit" + Name "OutConst9Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 221 + Type "checkbox" + Name "boolOutConst9Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst9Upper')" + TabName "System constraints" + } + Object { + $ObjectID 222 + Type "checkbox" + Name "boolOutConst9UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 223 + Type "checkbox" + Name "OutConst9Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 224 + Type "edit" + Name "OutConst10SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 225 + Type "checkbox" + Name "boolOutConst10" + Prompt "Constraints on output 10?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',10)" + TabName "System constraints" + } + Object { + $ObjectID 226 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst10Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 227 + Type "edit" + Name "OutConst10Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 228 + Type "checkbox" + Name "boolOutConst10Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst10Lower')" + TabName "System constraints" + } + Object { + $ObjectID 229 + Type "checkbox" + Name "boolOutConst10LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 230 + Type "edit" + Name "OutConst10Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 231 + Type "checkbox" + Name "boolOutConst10Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst10Upper')" + TabName "System constraints" + } + Object { + $ObjectID 232 + Type "checkbox" + Name "boolOutConst10UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 233 + Type "checkbox" + Name "OutConst10Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 234 + Type "edit" + Name "OutConst11SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 235 + Type "checkbox" + Name "boolOutConst11" + Prompt "Constraints on output 11?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',11)" + TabName "System constraints" + } + Object { + $ObjectID 236 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst11Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 237 + Type "edit" + Name "OutConst11Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 238 + Type "checkbox" + Name "boolOutConst11Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst11Lower')" + TabName "System constraints" + } + Object { + $ObjectID 239 + Type "checkbox" + Name "boolOutConst11LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 240 + Type "edit" + Name "OutConst11Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 241 + Type "checkbox" + Name "boolOutConst11Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst11Upper')" + TabName "System constraints" + } + Object { + $ObjectID 242 + Type "checkbox" + Name "boolOutConst11UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 243 + Type "checkbox" + Name "OutConst11Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 244 + Type "edit" + Name "OutConst12SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 245 + Type "checkbox" + Name "boolOutConst12" + Prompt "Constraints on output 12?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',12)" + TabName "System constraints" + } + Object { + $ObjectID 246 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst12Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 247 + Type "edit" + Name "OutConst12Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 248 + Type "checkbox" + Name "boolOutConst12Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst12Lower')" + TabName "System constraints" + } + Object { + $ObjectID 249 + Type "checkbox" + Name "boolOutConst12LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 250 + Type "edit" + Name "OutConst12Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 251 + Type "checkbox" + Name "boolOutConst12Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst12Upper')" + TabName "System constraints" + } + Object { + $ObjectID 252 + Type "checkbox" + Name "boolOutConst12UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 253 + Type "checkbox" + Name "OutConst12Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 254 + Type "edit" + Name "OutConst13SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 255 + Type "checkbox" + Name "boolOutConst13" + Prompt "Constraints on output 13?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',13)" + TabName "System constraints" + } + Object { + $ObjectID 256 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst13Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 257 + Type "edit" + Name "OutConst13Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 258 + Type "checkbox" + Name "boolOutConst13Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst13Lower')" + TabName "System constraints" + } + Object { + $ObjectID 259 + Type "checkbox" + Name "boolOutConst13LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 260 + Type "edit" + Name "OutConst13Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 261 + Type "checkbox" + Name "boolOutConst13Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst13Upper')" + TabName "System constraints" + } + Object { + $ObjectID 262 + Type "checkbox" + Name "boolOutConst13UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 263 + Type "checkbox" + Name "OutConst13Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 264 + Type "edit" + Name "OutConst14SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 265 + Type "checkbox" + Name "boolOutConst14" + Prompt "Constraints on output 14?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',14)" + TabName "System constraints" + } + Object { + $ObjectID 266 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst14Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 267 + Type "edit" + Name "OutConst14Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 268 + Type "checkbox" + Name "boolOutConst14Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst14Lower')" + TabName "System constraints" + } + Object { + $ObjectID 269 + Type "checkbox" + Name "boolOutConst14LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 270 + Type "edit" + Name "OutConst14Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 271 + Type "checkbox" + Name "boolOutConst14Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst14Upper')" + TabName "System constraints" + } + Object { + $ObjectID 272 + Type "checkbox" + Name "boolOutConst14UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 273 + Type "checkbox" + Name "OutConst14Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 274 + Type "edit" + Name "OutConst15SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 275 + Type "checkbox" + Name "boolOutConst15" + Prompt "Constraints on output 15?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',15)" + TabName "System constraints" + } + Object { + $ObjectID 276 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst15Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 277 + Type "edit" + Name "OutConst15Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 278 + Type "checkbox" + Name "boolOutConst15Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst15Lower')" + TabName "System constraints" + } + Object { + $ObjectID 279 + Type "checkbox" + Name "boolOutConst15LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 280 + Type "edit" + Name "OutConst15Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 281 + Type "checkbox" + Name "boolOutConst15Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst15Upper')" + TabName "System constraints" + } + Object { + $ObjectID 282 + Type "checkbox" + Name "boolOutConst15UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 283 + Type "checkbox" + Name "OutConst15Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 284 + Type "edit" + Name "OutConst16SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 285 + Type "checkbox" + Name "boolOutConst16" + Prompt "Constraints on output 16?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',16)" + TabName "System constraints" + } + Object { + $ObjectID 286 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst16Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 287 + Type "edit" + Name "OutConst16Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 288 + Type "checkbox" + Name "boolOutConst16Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst16Lower')" + TabName "System constraints" + } + Object { + $ObjectID 289 + Type "checkbox" + Name "boolOutConst16LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 290 + Type "edit" + Name "OutConst16Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 291 + Type "checkbox" + Name "boolOutConst16Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst16Upper')" + TabName "System constraints" + } + Object { + $ObjectID 292 + Type "checkbox" + Name "boolOutConst16UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 293 + Type "checkbox" + Name "OutConst16Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 294 + Type "edit" + Name "OutConst17SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 295 + Type "checkbox" + Name "boolOutConst17" + Prompt "Constraints on output 17?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',17)" + TabName "System constraints" + } + Object { + $ObjectID 296 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst17Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 297 + Type "edit" + Name "OutConst17Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 298 + Type "checkbox" + Name "boolOutConst17Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst17Lower')" + TabName "System constraints" + } + Object { + $ObjectID 299 + Type "checkbox" + Name "boolOutConst17LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 300 + Type "edit" + Name "OutConst17Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 301 + Type "checkbox" + Name "boolOutConst17Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst17Upper')" + TabName "System constraints" + } + Object { + $ObjectID 302 + Type "checkbox" + Name "boolOutConst17UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 303 + Type "checkbox" + Name "OutConst17Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 304 + Type "edit" + Name "OutConst18SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 305 + Type "checkbox" + Name "boolOutConst18" + Prompt "Constraints on output 18?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',18)" + TabName "System constraints" + } + Object { + $ObjectID 306 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst18Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 307 + Type "edit" + Name "OutConst18Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 308 + Type "checkbox" + Name "boolOutConst18Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst18Lower')" + TabName "System constraints" + } + Object { + $ObjectID 309 + Type "checkbox" + Name "boolOutConst18LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 310 + Type "edit" + Name "OutConst18Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 311 + Type "checkbox" + Name "boolOutConst18Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst18Upper')" + TabName "System constraints" + } + Object { + $ObjectID 312 + Type "checkbox" + Name "boolOutConst18UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 313 + Type "checkbox" + Name "OutConst18Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 314 + Type "edit" + Name "OutConst19SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 315 + Type "checkbox" + Name "boolOutConst19" + Prompt "Constraints on output 19?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',19)" + TabName "System constraints" + } + Object { + $ObjectID 316 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst19Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 317 + Type "edit" + Name "OutConst19Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 318 + Type "checkbox" + Name "boolOutConst19Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst19Lower')" + TabName "System constraints" + } + Object { + $ObjectID 319 + Type "checkbox" + Name "boolOutConst19LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 320 + Type "edit" + Name "OutConst19Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 321 + Type "checkbox" + Name "boolOutConst19Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst19Upper')" + TabName "System constraints" + } + Object { + $ObjectID 322 + Type "checkbox" + Name "boolOutConst19UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 323 + Type "checkbox" + Name "OutConst19Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 324 + Type "edit" + Name "OutConst20SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 325 + Type "checkbox" + Name "boolOutConst20" + Prompt "Constraints on output 20?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',20)" + TabName "System constraints" + } + Object { + $ObjectID 326 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst20Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 327 + Type "edit" + Name "OutConst20Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 328 + Type "checkbox" + Name "boolOutConst20Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst20Lower')" + TabName "System constraints" + } + Object { + $ObjectID 329 + Type "checkbox" + Name "boolOutConst20LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 330 + Type "edit" + Name "OutConst20Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 331 + Type "checkbox" + Name "boolOutConst20Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst20Upper')" + TabName "System constraints" + } + Object { + $ObjectID 332 + Type "checkbox" + Name "boolOutConst20UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 333 + Type "checkbox" + Name "OutConst20Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 334 + Type "edit" + Name "OutConst21SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 335 + Type "checkbox" + Name "boolOutConst21" + Prompt "Constraints on output 21?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',21)" + TabName "System constraints" + } + Object { + $ObjectID 336 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst21Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 337 + Type "edit" + Name "OutConst21Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 338 + Type "checkbox" + Name "boolOutConst21Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst21Lower')" + TabName "System constraints" + } + Object { + $ObjectID 339 + Type "checkbox" + Name "boolOutConst21LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 340 + Type "edit" + Name "OutConst21Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 341 + Type "checkbox" + Name "boolOutConst21Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst21Upper')" + TabName "System constraints" + } + Object { + $ObjectID 342 + Type "checkbox" + Name "boolOutConst21UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 343 + Type "checkbox" + Name "OutConst21Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 344 + Type "edit" + Name "OutConst22SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 345 + Type "checkbox" + Name "boolOutConst22" + Prompt "Constraints on output 22?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',22)" + TabName "System constraints" + } + Object { + $ObjectID 346 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst22Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 347 + Type "edit" + Name "OutConst22Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 348 + Type "checkbox" + Name "boolOutConst22Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst22Lower')" + TabName "System constraints" + } + Object { + $ObjectID 349 + Type "checkbox" + Name "boolOutConst22LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 350 + Type "edit" + Name "OutConst22Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 351 + Type "checkbox" + Name "boolOutConst22Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst22Upper')" + TabName "System constraints" + } + Object { + $ObjectID 352 + Type "checkbox" + Name "boolOutConst22UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 353 + Type "checkbox" + Name "OutConst22Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 354 + Type "edit" + Name "OutConst23SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 355 + Type "checkbox" + Name "boolOutConst23" + Prompt "Constraints on output 23?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',23)" + TabName "System constraints" + } + Object { + $ObjectID 356 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst23Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 357 + Type "edit" + Name "OutConst23Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 358 + Type "checkbox" + Name "boolOutConst23Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst23Lower')" + TabName "System constraints" + } + Object { + $ObjectID 359 + Type "checkbox" + Name "boolOutConst23LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 360 + Type "edit" + Name "OutConst23Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 361 + Type "checkbox" + Name "boolOutConst23Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst23Upper')" + TabName "System constraints" + } + Object { + $ObjectID 362 + Type "checkbox" + Name "boolOutConst23UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 363 + Type "checkbox" + Name "OutConst23Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 364 + Type "edit" + Name "OutConst24SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 365 + Type "checkbox" + Name "boolOutConst24" + Prompt "Constraints on output 24?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',24)" + TabName "System constraints" + } + Object { + $ObjectID 366 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst24Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 367 + Type "edit" + Name "OutConst24Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 368 + Type "checkbox" + Name "boolOutConst24Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst24Lower')" + TabName "System constraints" + } + Object { + $ObjectID 369 + Type "checkbox" + Name "boolOutConst24LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 370 + Type "edit" + Name "OutConst24Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 371 + Type "checkbox" + Name "boolOutConst24Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst24Upper')" + TabName "System constraints" + } + Object { + $ObjectID 372 + Type "checkbox" + Name "boolOutConst24UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 373 + Type "checkbox" + Name "OutConst24Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 374 + Type "edit" + Name "OutConst25SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 375 + Type "checkbox" + Name "boolOutConst25" + Prompt "Constraints on output 25?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',25)" + TabName "System constraints" + } + Object { + $ObjectID 376 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst25Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 377 + Type "edit" + Name "OutConst25Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 378 + Type "checkbox" + Name "boolOutConst25Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst25Lower')" + TabName "System constraints" + } + Object { + $ObjectID 379 + Type "checkbox" + Name "boolOutConst25LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 380 + Type "edit" + Name "OutConst25Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 381 + Type "checkbox" + Name "boolOutConst25Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst25Upper')" + TabName "System constraints" + } + Object { + $ObjectID 382 + Type "checkbox" + Name "boolOutConst25UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 383 + Type "checkbox" + Name "OutConst25Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 384 + Type "edit" + Name "OutConst26SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 385 + Type "checkbox" + Name "boolOutConst26" + Prompt "Constraints on output 26?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',26)" + TabName "System constraints" + } + Object { + $ObjectID 386 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst26Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 387 + Type "edit" + Name "OutConst26Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 388 + Type "checkbox" + Name "boolOutConst26Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst26Lower')" + TabName "System constraints" + } + Object { + $ObjectID 389 + Type "checkbox" + Name "boolOutConst26LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 390 + Type "edit" + Name "OutConst26Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 391 + Type "checkbox" + Name "boolOutConst26Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst26Upper')" + TabName "System constraints" + } + Object { + $ObjectID 392 + Type "checkbox" + Name "boolOutConst26UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 393 + Type "checkbox" + Name "OutConst26Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 394 + Type "edit" + Name "OutConst27SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 395 + Type "checkbox" + Name "boolOutConst27" + Prompt "Constraints on output 27?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',27)" + TabName "System constraints" + } + Object { + $ObjectID 396 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst27Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 397 + Type "edit" + Name "OutConst27Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 398 + Type "checkbox" + Name "boolOutConst27Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst27Lower')" + TabName "System constraints" + } + Object { + $ObjectID 399 + Type "checkbox" + Name "boolOutConst27LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 400 + Type "edit" + Name "OutConst27Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 401 + Type "checkbox" + Name "boolOutConst27Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst27Upper')" + TabName "System constraints" + } + Object { + $ObjectID 402 + Type "checkbox" + Name "boolOutConst27UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 403 + Type "checkbox" + Name "OutConst27Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 404 + Type "edit" + Name "OutConst28SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 405 + Type "checkbox" + Name "boolOutConst28" + Prompt "Constraints on output 28?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',28)" + TabName "System constraints" + } + Object { + $ObjectID 406 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst28Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 407 + Type "edit" + Name "OutConst28Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 408 + Type "checkbox" + Name "boolOutConst28Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst28Lower')" + TabName "System constraints" + } + Object { + $ObjectID 409 + Type "checkbox" + Name "boolOutConst28LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 410 + Type "edit" + Name "OutConst28Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 411 + Type "checkbox" + Name "boolOutConst28Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst28Upper')" + TabName "System constraints" + } + Object { + $ObjectID 412 + Type "checkbox" + Name "boolOutConst28UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 413 + Type "checkbox" + Name "OutConst28Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 414 + Type "edit" + Name "OutConst29SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 415 + Type "checkbox" + Name "boolOutConst29" + Prompt "Constraints on output 29?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',29)" + TabName "System constraints" + } + Object { + $ObjectID 416 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst29Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 417 + Type "edit" + Name "OutConst29Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 418 + Type "checkbox" + Name "boolOutConst29Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst29Lower')" + TabName "System constraints" + } + Object { + $ObjectID 419 + Type "checkbox" + Name "boolOutConst29LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 420 + Type "edit" + Name "OutConst29Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 421 + Type "checkbox" + Name "boolOutConst29Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst29Upper')" + TabName "System constraints" + } + Object { + $ObjectID 422 + Type "checkbox" + Name "boolOutConst29UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 423 + Type "checkbox" + Name "OutConst29Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 424 + Type "edit" + Name "OutConst30SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 425 + Type "checkbox" + Name "boolOutConst30" + Prompt "Constraints on output 30?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',30)" + TabName "System constraints" + } + Object { + $ObjectID 426 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst30Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 427 + Type "edit" + Name "OutConst30Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 428 + Type "checkbox" + Name "boolOutConst30Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst30Lower')" + TabName "System constraints" + } + Object { + $ObjectID 429 + Type "checkbox" + Name "boolOutConst30LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 430 + Type "edit" + Name "OutConst30Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 431 + Type "checkbox" + Name "boolOutConst30Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst30Upper')" + TabName "System constraints" + } + Object { + $ObjectID 432 + Type "checkbox" + Name "boolOutConst30UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 433 + Type "checkbox" + Name "OutConst30Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 434 + Type "edit" + Name "OutConst31SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 435 + Type "checkbox" + Name "boolOutConst31" + Prompt "Constraints on output 31?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',31)" + TabName "System constraints" + } + Object { + $ObjectID 436 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst31Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 437 + Type "edit" + Name "OutConst31Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 438 + Type "checkbox" + Name "boolOutConst31Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst31Lower')" + TabName "System constraints" + } + Object { + $ObjectID 439 + Type "checkbox" + Name "boolOutConst31LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 440 + Type "edit" + Name "OutConst31Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 441 + Type "checkbox" + Name "boolOutConst31Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst31Upper')" + TabName "System constraints" + } + Object { + $ObjectID 442 + Type "checkbox" + Name "boolOutConst31UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 443 + Type "checkbox" + Name "OutConst31Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 444 + Type "edit" + Name "OutConst32SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 445 + Type "checkbox" + Name "boolOutConst32" + Prompt "Constraints on output 32?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',32)" + TabName "System constraints" + } + Object { + $ObjectID 446 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst32Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 447 + Type "edit" + Name "OutConst32Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 448 + Type "checkbox" + Name "boolOutConst32Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst32Lower')" + TabName "System constraints" + } + Object { + $ObjectID 449 + Type "checkbox" + Name "boolOutConst32LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 450 + Type "edit" + Name "OutConst32Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 451 + Type "checkbox" + Name "boolOutConst32Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst32Upper')" + TabName "System constraints" + } + Object { + $ObjectID 452 + Type "checkbox" + Name "boolOutConst32UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 453 + Type "checkbox" + Name "OutConst32Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 454 + Type "edit" + Name "OutConst33SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 455 + Type "checkbox" + Name "boolOutConst33" + Prompt "Constraints on output 33?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',33)" + TabName "System constraints" + } + Object { + $ObjectID 456 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst33Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 457 + Type "edit" + Name "OutConst33Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 458 + Type "checkbox" + Name "boolOutConst33Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst33Lower')" + TabName "System constraints" + } + Object { + $ObjectID 459 + Type "checkbox" + Name "boolOutConst33LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 460 + Type "edit" + Name "OutConst33Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 461 + Type "checkbox" + Name "boolOutConst33Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst33Upper')" + TabName "System constraints" + } + Object { + $ObjectID 462 + Type "checkbox" + Name "boolOutConst33UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 463 + Type "checkbox" + Name "OutConst33Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 464 + Type "edit" + Name "OutConst34SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 465 + Type "checkbox" + Name "boolOutConst34" + Prompt "Constraints on output 34?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',34)" + TabName "System constraints" + } + Object { + $ObjectID 466 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst34Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 467 + Type "edit" + Name "OutConst34Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 468 + Type "checkbox" + Name "boolOutConst34Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst34Lower')" + TabName "System constraints" + } + Object { + $ObjectID 469 + Type "checkbox" + Name "boolOutConst34LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 470 + Type "edit" + Name "OutConst34Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 471 + Type "checkbox" + Name "boolOutConst34Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst34Upper')" + TabName "System constraints" + } + Object { + $ObjectID 472 + Type "checkbox" + Name "boolOutConst34UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 473 + Type "checkbox" + Name "OutConst34Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 474 + Type "edit" + Name "OutConst35SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 475 + Type "checkbox" + Name "boolOutConst35" + Prompt "Constraints on output 35?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',35)" + TabName "System constraints" + } + Object { + $ObjectID 476 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst35Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 477 + Type "edit" + Name "OutConst35Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 478 + Type "checkbox" + Name "boolOutConst35Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst35Lower')" + TabName "System constraints" + } + Object { + $ObjectID 479 + Type "checkbox" + Name "boolOutConst35LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 480 + Type "edit" + Name "OutConst35Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 481 + Type "checkbox" + Name "boolOutConst35Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst35Upper')" + TabName "System constraints" + } + Object { + $ObjectID 482 + Type "checkbox" + Name "boolOutConst35UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 483 + Type "checkbox" + Name "OutConst35Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 484 + Type "edit" + Name "OutConst36SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 485 + Type "checkbox" + Name "boolOutConst36" + Prompt "Constraints on output 36?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',36)" + TabName "System constraints" + } + Object { + $ObjectID 486 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst36Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 487 + Type "edit" + Name "OutConst36Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 488 + Type "checkbox" + Name "boolOutConst36Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst36Lower')" + TabName "System constraints" + } + Object { + $ObjectID 489 + Type "checkbox" + Name "boolOutConst36LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 490 + Type "edit" + Name "OutConst36Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 491 + Type "checkbox" + Name "boolOutConst36Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst36Upper')" + TabName "System constraints" + } + Object { + $ObjectID 492 + Type "checkbox" + Name "boolOutConst36UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 493 + Type "checkbox" + Name "OutConst36Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 494 + Type "edit" + Name "OutConst37SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 495 + Type "checkbox" + Name "boolOutConst37" + Prompt "Constraints on output 37?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',37)" + TabName "System constraints" + } + Object { + $ObjectID 496 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst37Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 497 + Type "edit" + Name "OutConst37Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 498 + Type "checkbox" + Name "boolOutConst37Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst37Lower')" + TabName "System constraints" + } + Object { + $ObjectID 499 + Type "checkbox" + Name "boolOutConst37LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 500 + Type "edit" + Name "OutConst37Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 501 + Type "checkbox" + Name "boolOutConst37Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst37Upper')" + TabName "System constraints" + } + Object { + $ObjectID 502 + Type "checkbox" + Name "boolOutConst37UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 503 + Type "checkbox" + Name "OutConst37Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 504 + Type "edit" + Name "OutConst38SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 505 + Type "checkbox" + Name "boolOutConst38" + Prompt "Constraints on output 38?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',38)" + TabName "System constraints" + } + Object { + $ObjectID 506 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst38Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 507 + Type "edit" + Name "OutConst38Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 508 + Type "checkbox" + Name "boolOutConst38Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst38Lower')" + TabName "System constraints" + } + Object { + $ObjectID 509 + Type "checkbox" + Name "boolOutConst38LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 510 + Type "edit" + Name "OutConst38Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 511 + Type "checkbox" + Name "boolOutConst38Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst38Upper')" + TabName "System constraints" + } + Object { + $ObjectID 512 + Type "checkbox" + Name "boolOutConst38UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 513 + Type "checkbox" + Name "OutConst38Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 514 + Type "edit" + Name "OutConst39SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 515 + Type "checkbox" + Name "boolOutConst39" + Prompt "Constraints on output 39?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',39)" + TabName "System constraints" + } + Object { + $ObjectID 516 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst39Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 517 + Type "edit" + Name "OutConst39Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 518 + Type "checkbox" + Name "boolOutConst39Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst39Lower')" + TabName "System constraints" + } + Object { + $ObjectID 519 + Type "checkbox" + Name "boolOutConst39LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 520 + Type "edit" + Name "OutConst39Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 521 + Type "checkbox" + Name "boolOutConst39Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst39Upper')" + TabName "System constraints" + } + Object { + $ObjectID 522 + Type "checkbox" + Name "boolOutConst39UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 523 + Type "checkbox" + Name "OutConst39Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 524 + Type "edit" + Name "OutConst40SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 525 + Type "checkbox" + Name "boolOutConst40" + Prompt "Constraints on output 40?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'output_const',40)" + TabName "System constraints" + } + Object { + $ObjectID 526 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "OutConst40Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 527 + Type "edit" + Name "OutConst40Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 528 + Type "checkbox" + Name "boolOutConst40Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst40Lower')" + TabName "System constraints" + } + Object { + $ObjectID 529 + Type "checkbox" + Name "boolOutConst40LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 530 + Type "edit" + Name "OutConst40Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 531 + Type "checkbox" + Name "boolOutConst40Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','OutConst40Upper')" + TabName "System constraints" + } + Object { + $ObjectID 532 + Type "checkbox" + Name "boolOutConst40UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 533 + Type "checkbox" + Name "OutConst40Soft" + Prompt "Soft constraint" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 534 + Type "edit" + Name "InConst1SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 535 + Type "checkbox" + Name "boolInConst1" + Prompt "Constraints on input 1 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',1)" + TabName "System constraints" + } + Object { + $ObjectID 536 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst1Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 537 + Type "edit" + Name "InConst1Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 538 + Type "checkbox" + Name "boolInConst1Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst1Lower')" + TabName "System constraints" + } + Object { + $ObjectID 539 + Type "checkbox" + Name "boolInConst1LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 540 + Type "edit" + Name "InConst1Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 541 + Type "checkbox" + Name "boolInConst1Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst1Upper')" + TabName "System constraints" + } + Object { + $ObjectID 542 + Type "checkbox" + Name "boolInConst1UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 543 + Type "edit" + Name "InConst2SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 544 + Type "checkbox" + Name "boolInConst2" + Prompt "Constraints on input 2 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',2)" + TabName "System constraints" + } + Object { + $ObjectID 545 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst2Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 546 + Type "edit" + Name "InConst2Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 547 + Type "checkbox" + Name "boolInConst2Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst2Lower')" + TabName "System constraints" + } + Object { + $ObjectID 548 + Type "checkbox" + Name "boolInConst2LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 549 + Type "edit" + Name "InConst2Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 550 + Type "checkbox" + Name "boolInConst2Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst2Upper')" + TabName "System constraints" + } + Object { + $ObjectID 551 + Type "checkbox" + Name "boolInConst2UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 552 + Type "edit" + Name "InConst3SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 553 + Type "checkbox" + Name "boolInConst3" + Prompt "Constraints on input 3 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',3)" + TabName "System constraints" + } + Object { + $ObjectID 554 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst3Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 555 + Type "edit" + Name "InConst3Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 556 + Type "checkbox" + Name "boolInConst3Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst3Lower')" + TabName "System constraints" + } + Object { + $ObjectID 557 + Type "checkbox" + Name "boolInConst3LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 558 + Type "edit" + Name "InConst3Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 559 + Type "checkbox" + Name "boolInConst3Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst3Upper')" + TabName "System constraints" + } + Object { + $ObjectID 560 + Type "checkbox" + Name "boolInConst3UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 561 + Type "edit" + Name "InConst4SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 562 + Type "checkbox" + Name "boolInConst4" + Prompt "Constraints on input 4 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',4)" + TabName "System constraints" + } + Object { + $ObjectID 563 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst4Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 564 + Type "edit" + Name "InConst4Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 565 + Type "checkbox" + Name "boolInConst4Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst4Lower')" + TabName "System constraints" + } + Object { + $ObjectID 566 + Type "checkbox" + Name "boolInConst4LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 567 + Type "edit" + Name "InConst4Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 568 + Type "checkbox" + Name "boolInConst4Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst4Upper')" + TabName "System constraints" + } + Object { + $ObjectID 569 + Type "checkbox" + Name "boolInConst4UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 570 + Type "edit" + Name "InConst5SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 571 + Type "checkbox" + Name "boolInConst5" + Prompt "Constraints on input 5 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',5)" + TabName "System constraints" + } + Object { + $ObjectID 572 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst5Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 573 + Type "edit" + Name "InConst5Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 574 + Type "checkbox" + Name "boolInConst5Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst5Lower')" + TabName "System constraints" + } + Object { + $ObjectID 575 + Type "checkbox" + Name "boolInConst5LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 576 + Type "edit" + Name "InConst5Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 577 + Type "checkbox" + Name "boolInConst5Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst5Upper')" + TabName "System constraints" + } + Object { + $ObjectID 578 + Type "checkbox" + Name "boolInConst5UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 579 + Type "edit" + Name "InConst6SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 580 + Type "checkbox" + Name "boolInConst6" + Prompt "Constraints on input 6 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',6)" + TabName "System constraints" + } + Object { + $ObjectID 581 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst6Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 582 + Type "edit" + Name "InConst6Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 583 + Type "checkbox" + Name "boolInConst6Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst6Lower')" + TabName "System constraints" + } + Object { + $ObjectID 584 + Type "checkbox" + Name "boolInConst6LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 585 + Type "edit" + Name "InConst6Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 586 + Type "checkbox" + Name "boolInConst6Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst6Upper')" + TabName "System constraints" + } + Object { + $ObjectID 587 + Type "checkbox" + Name "boolInConst6UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 588 + Type "edit" + Name "InConst7SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 589 + Type "checkbox" + Name "boolInConst7" + Prompt "Constraints on input 7 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',7)" + TabName "System constraints" + } + Object { + $ObjectID 590 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst7Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 591 + Type "edit" + Name "InConst7Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 592 + Type "checkbox" + Name "boolInConst7Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst7Lower')" + TabName "System constraints" + } + Object { + $ObjectID 593 + Type "checkbox" + Name "boolInConst7LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 594 + Type "edit" + Name "InConst7Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 595 + Type "checkbox" + Name "boolInConst7Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst7Upper')" + TabName "System constraints" + } + Object { + $ObjectID 596 + Type "checkbox" + Name "boolInConst7UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 597 + Type "edit" + Name "InConst8SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 598 + Type "checkbox" + Name "boolInConst8" + Prompt "Constraints on input 8 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',8)" + TabName "System constraints" + } + Object { + $ObjectID 599 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst8Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 600 + Type "edit" + Name "InConst8Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 601 + Type "checkbox" + Name "boolInConst8Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst8Lower')" + TabName "System constraints" + } + Object { + $ObjectID 602 + Type "checkbox" + Name "boolInConst8LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 603 + Type "edit" + Name "InConst8Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 604 + Type "checkbox" + Name "boolInConst8Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst8Upper')" + TabName "System constraints" + } + Object { + $ObjectID 605 + Type "checkbox" + Name "boolInConst8UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 606 + Type "edit" + Name "InConst9SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 607 + Type "checkbox" + Name "boolInConst9" + Prompt "Constraints on input 9 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',9)" + TabName "System constraints" + } + Object { + $ObjectID 608 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst9Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 609 + Type "edit" + Name "InConst9Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 610 + Type "checkbox" + Name "boolInConst9Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst9Lower')" + TabName "System constraints" + } + Object { + $ObjectID 611 + Type "checkbox" + Name "boolInConst9LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 612 + Type "edit" + Name "InConst9Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 613 + Type "checkbox" + Name "boolInConst9Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst9Upper')" + TabName "System constraints" + } + Object { + $ObjectID 614 + Type "checkbox" + Name "boolInConst9UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 615 + Type "edit" + Name "InConst10SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 616 + Type "checkbox" + Name "boolInConst10" + Prompt "Constraints on input 10 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',10)" + TabName "System constraints" + } + Object { + $ObjectID 617 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst10Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 618 + Type "edit" + Name "InConst10Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 619 + Type "checkbox" + Name "boolInConst10Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst10Lower')" + TabName "System constraints" + } + Object { + $ObjectID 620 + Type "checkbox" + Name "boolInConst10LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 621 + Type "edit" + Name "InConst10Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 622 + Type "checkbox" + Name "boolInConst10Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst10Upper')" + TabName "System constraints" + } + Object { + $ObjectID 623 + Type "checkbox" + Name "boolInConst10UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 624 + Type "edit" + Name "InConst11SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 625 + Type "checkbox" + Name "boolInConst11" + Prompt "Constraints on input 11 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',11)" + TabName "System constraints" + } + Object { + $ObjectID 626 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst11Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 627 + Type "edit" + Name "InConst11Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 628 + Type "checkbox" + Name "boolInConst11Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst11Lower')" + TabName "System constraints" + } + Object { + $ObjectID 629 + Type "checkbox" + Name "boolInConst11LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 630 + Type "edit" + Name "InConst11Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 631 + Type "checkbox" + Name "boolInConst11Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst11Upper')" + TabName "System constraints" + } + Object { + $ObjectID 632 + Type "checkbox" + Name "boolInConst11UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 633 + Type "edit" + Name "InConst12SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 634 + Type "checkbox" + Name "boolInConst12" + Prompt "Constraints on input 12 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',12)" + TabName "System constraints" + } + Object { + $ObjectID 635 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst12Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 636 + Type "edit" + Name "InConst12Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 637 + Type "checkbox" + Name "boolInConst12Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst12Lower')" + TabName "System constraints" + } + Object { + $ObjectID 638 + Type "checkbox" + Name "boolInConst12LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 639 + Type "edit" + Name "InConst12Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 640 + Type "checkbox" + Name "boolInConst12Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst12Upper')" + TabName "System constraints" + } + Object { + $ObjectID 641 + Type "checkbox" + Name "boolInConst12UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 642 + Type "edit" + Name "InConst13SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 643 + Type "checkbox" + Name "boolInConst13" + Prompt "Constraints on input 13 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',13)" + TabName "System constraints" + } + Object { + $ObjectID 644 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst13Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 645 + Type "edit" + Name "InConst13Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 646 + Type "checkbox" + Name "boolInConst13Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst13Lower')" + TabName "System constraints" + } + Object { + $ObjectID 647 + Type "checkbox" + Name "boolInConst13LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 648 + Type "edit" + Name "InConst13Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 649 + Type "checkbox" + Name "boolInConst13Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst13Upper')" + TabName "System constraints" + } + Object { + $ObjectID 650 + Type "checkbox" + Name "boolInConst13UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 651 + Type "edit" + Name "InConst14SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 652 + Type "checkbox" + Name "boolInConst14" + Prompt "Constraints on input 14 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',14)" + TabName "System constraints" + } + Object { + $ObjectID 653 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst14Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 654 + Type "edit" + Name "InConst14Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 655 + Type "checkbox" + Name "boolInConst14Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst14Lower')" + TabName "System constraints" + } + Object { + $ObjectID 656 + Type "checkbox" + Name "boolInConst14LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 657 + Type "edit" + Name "InConst14Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 658 + Type "checkbox" + Name "boolInConst14Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst14Upper')" + TabName "System constraints" + } + Object { + $ObjectID 659 + Type "checkbox" + Name "boolInConst14UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 660 + Type "edit" + Name "InConst15SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 661 + Type "checkbox" + Name "boolInConst15" + Prompt "Constraints on input 15 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',15)" + TabName "System constraints" + } + Object { + $ObjectID 662 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst15Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 663 + Type "edit" + Name "InConst15Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 664 + Type "checkbox" + Name "boolInConst15Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst15Lower')" + TabName "System constraints" + } + Object { + $ObjectID 665 + Type "checkbox" + Name "boolInConst15LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 666 + Type "edit" + Name "InConst15Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 667 + Type "checkbox" + Name "boolInConst15Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst15Upper')" + TabName "System constraints" + } + Object { + $ObjectID 668 + Type "checkbox" + Name "boolInConst15UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 669 + Type "edit" + Name "InConst16SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 670 + Type "checkbox" + Name "boolInConst16" + Prompt "Constraints on input 16 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',16)" + TabName "System constraints" + } + Object { + $ObjectID 671 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst16Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 672 + Type "edit" + Name "InConst16Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 673 + Type "checkbox" + Name "boolInConst16Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst16Lower')" + TabName "System constraints" + } + Object { + $ObjectID 674 + Type "checkbox" + Name "boolInConst16LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 675 + Type "edit" + Name "InConst16Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 676 + Type "checkbox" + Name "boolInConst16Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst16Upper')" + TabName "System constraints" + } + Object { + $ObjectID 677 + Type "checkbox" + Name "boolInConst16UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 678 + Type "edit" + Name "InConst17SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 679 + Type "checkbox" + Name "boolInConst17" + Prompt "Constraints on input 17 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',17)" + TabName "System constraints" + } + Object { + $ObjectID 680 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst17Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 681 + Type "edit" + Name "InConst17Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 682 + Type "checkbox" + Name "boolInConst17Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst17Lower')" + TabName "System constraints" + } + Object { + $ObjectID 683 + Type "checkbox" + Name "boolInConst17LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 684 + Type "edit" + Name "InConst17Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 685 + Type "checkbox" + Name "boolInConst17Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst17Upper')" + TabName "System constraints" + } + Object { + $ObjectID 686 + Type "checkbox" + Name "boolInConst17UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 687 + Type "edit" + Name "InConst18SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 688 + Type "checkbox" + Name "boolInConst18" + Prompt "Constraints on input 18 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',18)" + TabName "System constraints" + } + Object { + $ObjectID 689 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst18Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 690 + Type "edit" + Name "InConst18Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 691 + Type "checkbox" + Name "boolInConst18Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst18Lower')" + TabName "System constraints" + } + Object { + $ObjectID 692 + Type "checkbox" + Name "boolInConst18LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 693 + Type "edit" + Name "InConst18Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 694 + Type "checkbox" + Name "boolInConst18Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst18Upper')" + TabName "System constraints" + } + Object { + $ObjectID 695 + Type "checkbox" + Name "boolInConst18UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 696 + Type "edit" + Name "InConst19SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 697 + Type "checkbox" + Name "boolInConst19" + Prompt "Constraints on input 19 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',19)" + TabName "System constraints" + } + Object { + $ObjectID 698 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst19Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 699 + Type "edit" + Name "InConst19Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 700 + Type "checkbox" + Name "boolInConst19Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst19Lower')" + TabName "System constraints" + } + Object { + $ObjectID 701 + Type "checkbox" + Name "boolInConst19LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 702 + Type "edit" + Name "InConst19Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 703 + Type "checkbox" + Name "boolInConst19Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst19Upper')" + TabName "System constraints" + } + Object { + $ObjectID 704 + Type "checkbox" + Name "boolInConst19UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 705 + Type "edit" + Name "InConst20SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 706 + Type "checkbox" + Name "boolInConst20" + Prompt "Constraints on input 20 magnitude?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_const',20)" + TabName "System constraints" + } + Object { + $ObjectID 707 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InConst20Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 708 + Type "edit" + Name "InConst20Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 709 + Type "checkbox" + Name "boolInConst20Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst20Lower')" + TabName "System constraints" + } + Object { + $ObjectID 710 + Type "checkbox" + Name "boolInConst20LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 711 + Type "edit" + Name "InConst20Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 712 + Type "checkbox" + Name "boolInConst20Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InConst20Upper')" + TabName "System constraints" + } + Object { + $ObjectID 713 + Type "checkbox" + Name "boolInConst20UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 714 + Type "edit" + Name "InRateConst1SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 715 + Type "checkbox" + Name "boolInRateConst1" + Prompt "Constraints on input 1 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',1)" + TabName "System constraints" + } + Object { + $ObjectID 716 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst1Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 717 + Type "edit" + Name "InRateConst1Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 718 + Type "checkbox" + Name "boolInRateConst1Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst1Lower')" + TabName "System constraints" + } + Object { + $ObjectID 719 + Type "checkbox" + Name "boolInRateConst1LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 720 + Type "edit" + Name "InRateConst1Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 721 + Type "checkbox" + Name "boolInRateConst1Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst1Upper')" + TabName "System constraints" + } + Object { + $ObjectID 722 + Type "checkbox" + Name "boolInRateConst1UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 723 + Type "edit" + Name "InRateConst2SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 724 + Type "checkbox" + Name "boolInRateConst2" + Prompt "Constraints on input 2 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',2)" + TabName "System constraints" + } + Object { + $ObjectID 725 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst2Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 726 + Type "edit" + Name "InRateConst2Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 727 + Type "checkbox" + Name "boolInRateConst2Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst2Lower')" + TabName "System constraints" + } + Object { + $ObjectID 728 + Type "checkbox" + Name "boolInRateConst2LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 729 + Type "edit" + Name "InRateConst2Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 730 + Type "checkbox" + Name "boolInRateConst2Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst2Upper')" + TabName "System constraints" + } + Object { + $ObjectID 731 + Type "checkbox" + Name "boolInRateConst2UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 732 + Type "edit" + Name "InRateConst3SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 733 + Type "checkbox" + Name "boolInRateConst3" + Prompt "Constraints on input 3 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',3)" + TabName "System constraints" + } + Object { + $ObjectID 734 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst3Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 735 + Type "edit" + Name "InRateConst3Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 736 + Type "checkbox" + Name "boolInRateConst3Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst3Lower')" + TabName "System constraints" + } + Object { + $ObjectID 737 + Type "checkbox" + Name "boolInRateConst3LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 738 + Type "edit" + Name "InRateConst3Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 739 + Type "checkbox" + Name "boolInRateConst3Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst3Upper')" + TabName "System constraints" + } + Object { + $ObjectID 740 + Type "checkbox" + Name "boolInRateConst3UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 741 + Type "edit" + Name "InRateConst4SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 742 + Type "checkbox" + Name "boolInRateConst4" + Prompt "Constraints on input 4 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',4)" + TabName "System constraints" + } + Object { + $ObjectID 743 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst4Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 744 + Type "edit" + Name "InRateConst4Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 745 + Type "checkbox" + Name "boolInRateConst4Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst4Lower')" + TabName "System constraints" + } + Object { + $ObjectID 746 + Type "checkbox" + Name "boolInRateConst4LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 747 + Type "edit" + Name "InRateConst4Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 748 + Type "checkbox" + Name "boolInRateConst4Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst4Upper')" + TabName "System constraints" + } + Object { + $ObjectID 749 + Type "checkbox" + Name "boolInRateConst4UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 750 + Type "edit" + Name "InRateConst5SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 751 + Type "checkbox" + Name "boolInRateConst5" + Prompt "Constraints on input 5 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',5)" + TabName "System constraints" + } + Object { + $ObjectID 752 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst5Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 753 + Type "edit" + Name "InRateConst5Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 754 + Type "checkbox" + Name "boolInRateConst5Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst5Lower')" + TabName "System constraints" + } + Object { + $ObjectID 755 + Type "checkbox" + Name "boolInRateConst5LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 756 + Type "edit" + Name "InRateConst5Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 757 + Type "checkbox" + Name "boolInRateConst5Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst5Upper')" + TabName "System constraints" + } + Object { + $ObjectID 758 + Type "checkbox" + Name "boolInRateConst5UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 759 + Type "edit" + Name "InRateConst6SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 760 + Type "checkbox" + Name "boolInRateConst6" + Prompt "Constraints on input 6 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',6)" + TabName "System constraints" + } + Object { + $ObjectID 761 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst6Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 762 + Type "edit" + Name "InRateConst6Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 763 + Type "checkbox" + Name "boolInRateConst6Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst6Lower')" + TabName "System constraints" + } + Object { + $ObjectID 764 + Type "checkbox" + Name "boolInRateConst6LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 765 + Type "edit" + Name "InRateConst6Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 766 + Type "checkbox" + Name "boolInRateConst6Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst6Upper')" + TabName "System constraints" + } + Object { + $ObjectID 767 + Type "checkbox" + Name "boolInRateConst6UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 768 + Type "edit" + Name "InRateConst7SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 769 + Type "checkbox" + Name "boolInRateConst7" + Prompt "Constraints on input 7 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',7)" + TabName "System constraints" + } + Object { + $ObjectID 770 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst7Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 771 + Type "edit" + Name "InRateConst7Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 772 + Type "checkbox" + Name "boolInRateConst7Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst7Lower')" + TabName "System constraints" + } + Object { + $ObjectID 773 + Type "checkbox" + Name "boolInRateConst7LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 774 + Type "edit" + Name "InRateConst7Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 775 + Type "checkbox" + Name "boolInRateConst7Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst7Upper')" + TabName "System constraints" + } + Object { + $ObjectID 776 + Type "checkbox" + Name "boolInRateConst7UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 777 + Type "edit" + Name "InRateConst8SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 778 + Type "checkbox" + Name "boolInRateConst8" + Prompt "Constraints on input 8 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',8)" + TabName "System constraints" + } + Object { + $ObjectID 779 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst8Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 780 + Type "edit" + Name "InRateConst8Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 781 + Type "checkbox" + Name "boolInRateConst8Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst8Lower')" + TabName "System constraints" + } + Object { + $ObjectID 782 + Type "checkbox" + Name "boolInRateConst8LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 783 + Type "edit" + Name "InRateConst8Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 784 + Type "checkbox" + Name "boolInRateConst8Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst8Upper')" + TabName "System constraints" + } + Object { + $ObjectID 785 + Type "checkbox" + Name "boolInRateConst8UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 786 + Type "edit" + Name "InRateConst9SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 787 + Type "checkbox" + Name "boolInRateConst9" + Prompt "Constraints on input 9 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',9)" + TabName "System constraints" + } + Object { + $ObjectID 788 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst9Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 789 + Type "edit" + Name "InRateConst9Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 790 + Type "checkbox" + Name "boolInRateConst9Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst9Lower')" + TabName "System constraints" + } + Object { + $ObjectID 791 + Type "checkbox" + Name "boolInRateConst9LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 792 + Type "edit" + Name "InRateConst9Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 793 + Type "checkbox" + Name "boolInRateConst9Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst9Upper')" + TabName "System constraints" + } + Object { + $ObjectID 794 + Type "checkbox" + Name "boolInRateConst9UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 795 + Type "edit" + Name "InRateConst10SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 796 + Type "checkbox" + Name "boolInRateConst10" + Prompt "Constraints on input 10 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',10)" + TabName "System constraints" + } + Object { + $ObjectID 797 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst10Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 798 + Type "edit" + Name "InRateConst10Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 799 + Type "checkbox" + Name "boolInRateConst10Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst10Lower')" + TabName "System constraints" + } + Object { + $ObjectID 800 + Type "checkbox" + Name "boolInRateConst10LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 801 + Type "edit" + Name "InRateConst10Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 802 + Type "checkbox" + Name "boolInRateConst10Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst10Upper')" + TabName "System constraints" + } + Object { + $ObjectID 803 + Type "checkbox" + Name "boolInRateConst10UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 804 + Type "edit" + Name "InRateConst11SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 805 + Type "checkbox" + Name "boolInRateConst11" + Prompt "Constraints on input 11 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',11)" + TabName "System constraints" + } + Object { + $ObjectID 806 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst11Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 807 + Type "edit" + Name "InRateConst11Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 808 + Type "checkbox" + Name "boolInRateConst11Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst11Lower')" + TabName "System constraints" + } + Object { + $ObjectID 809 + Type "checkbox" + Name "boolInRateConst11LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 810 + Type "edit" + Name "InRateConst11Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 811 + Type "checkbox" + Name "boolInRateConst11Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst11Upper')" + TabName "System constraints" + } + Object { + $ObjectID 812 + Type "checkbox" + Name "boolInRateConst11UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 813 + Type "edit" + Name "InRateConst12SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 814 + Type "checkbox" + Name "boolInRateConst12" + Prompt "Constraints on input 12 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',12)" + TabName "System constraints" + } + Object { + $ObjectID 815 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst12Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 816 + Type "edit" + Name "InRateConst12Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 817 + Type "checkbox" + Name "boolInRateConst12Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst12Lower')" + TabName "System constraints" + } + Object { + $ObjectID 818 + Type "checkbox" + Name "boolInRateConst12LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 819 + Type "edit" + Name "InRateConst12Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 820 + Type "checkbox" + Name "boolInRateConst12Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst12Upper')" + TabName "System constraints" + } + Object { + $ObjectID 821 + Type "checkbox" + Name "boolInRateConst12UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 822 + Type "edit" + Name "InRateConst13SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 823 + Type "checkbox" + Name "boolInRateConst13" + Prompt "Constraints on input 13 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',13)" + TabName "System constraints" + } + Object { + $ObjectID 824 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst13Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 825 + Type "edit" + Name "InRateConst13Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 826 + Type "checkbox" + Name "boolInRateConst13Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst13Lower')" + TabName "System constraints" + } + Object { + $ObjectID 827 + Type "checkbox" + Name "boolInRateConst13LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 828 + Type "edit" + Name "InRateConst13Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 829 + Type "checkbox" + Name "boolInRateConst13Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst13Upper')" + TabName "System constraints" + } + Object { + $ObjectID 830 + Type "checkbox" + Name "boolInRateConst13UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 831 + Type "edit" + Name "InRateConst14SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 832 + Type "checkbox" + Name "boolInRateConst14" + Prompt "Constraints on input 14 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',14)" + TabName "System constraints" + } + Object { + $ObjectID 833 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst14Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 834 + Type "edit" + Name "InRateConst14Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 835 + Type "checkbox" + Name "boolInRateConst14Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst14Lower')" + TabName "System constraints" + } + Object { + $ObjectID 836 + Type "checkbox" + Name "boolInRateConst14LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 837 + Type "edit" + Name "InRateConst14Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 838 + Type "checkbox" + Name "boolInRateConst14Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst14Upper')" + TabName "System constraints" + } + Object { + $ObjectID 839 + Type "checkbox" + Name "boolInRateConst14UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 840 + Type "edit" + Name "InRateConst15SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 841 + Type "checkbox" + Name "boolInRateConst15" + Prompt "Constraints on input 15 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',15)" + TabName "System constraints" + } + Object { + $ObjectID 842 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst15Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 843 + Type "edit" + Name "InRateConst15Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 844 + Type "checkbox" + Name "boolInRateConst15Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst15Lower')" + TabName "System constraints" + } + Object { + $ObjectID 845 + Type "checkbox" + Name "boolInRateConst15LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 846 + Type "edit" + Name "InRateConst15Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 847 + Type "checkbox" + Name "boolInRateConst15Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst15Upper')" + TabName "System constraints" + } + Object { + $ObjectID 848 + Type "checkbox" + Name "boolInRateConst15UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 849 + Type "edit" + Name "InRateConst16SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 850 + Type "checkbox" + Name "boolInRateConst16" + Prompt "Constraints on input 16 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',16)" + TabName "System constraints" + } + Object { + $ObjectID 851 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst16Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 852 + Type "edit" + Name "InRateConst16Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 853 + Type "checkbox" + Name "boolInRateConst16Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst16Lower')" + TabName "System constraints" + } + Object { + $ObjectID 854 + Type "checkbox" + Name "boolInRateConst16LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 855 + Type "edit" + Name "InRateConst16Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 856 + Type "checkbox" + Name "boolInRateConst16Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst16Upper')" + TabName "System constraints" + } + Object { + $ObjectID 857 + Type "checkbox" + Name "boolInRateConst16UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 858 + Type "edit" + Name "InRateConst17SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 859 + Type "checkbox" + Name "boolInRateConst17" + Prompt "Constraints on input 17 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',17)" + TabName "System constraints" + } + Object { + $ObjectID 860 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst17Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 861 + Type "edit" + Name "InRateConst17Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 862 + Type "checkbox" + Name "boolInRateConst17Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst17Lower')" + TabName "System constraints" + } + Object { + $ObjectID 863 + Type "checkbox" + Name "boolInRateConst17LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 864 + Type "edit" + Name "InRateConst17Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 865 + Type "checkbox" + Name "boolInRateConst17Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst17Upper')" + TabName "System constraints" + } + Object { + $ObjectID 866 + Type "checkbox" + Name "boolInRateConst17UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 867 + Type "edit" + Name "InRateConst18SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 868 + Type "checkbox" + Name "boolInRateConst18" + Prompt "Constraints on input 18 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',18)" + TabName "System constraints" + } + Object { + $ObjectID 869 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst18Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 870 + Type "edit" + Name "InRateConst18Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 871 + Type "checkbox" + Name "boolInRateConst18Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst18Lower')" + TabName "System constraints" + } + Object { + $ObjectID 872 + Type "checkbox" + Name "boolInRateConst18LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 873 + Type "edit" + Name "InRateConst18Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 874 + Type "checkbox" + Name "boolInRateConst18Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst18Upper')" + TabName "System constraints" + } + Object { + $ObjectID 875 + Type "checkbox" + Name "boolInRateConst18UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 876 + Type "edit" + Name "InRateConst19SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 877 + Type "checkbox" + Name "boolInRateConst19" + Prompt "Constraints on input 19 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',19)" + TabName "System constraints" + } + Object { + $ObjectID 878 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst19Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 879 + Type "edit" + Name "InRateConst19Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 880 + Type "checkbox" + Name "boolInRateConst19Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst19Lower')" + TabName "System constraints" + } + Object { + $ObjectID 881 + Type "checkbox" + Name "boolInRateConst19LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 882 + Type "edit" + Name "InRateConst19Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 883 + Type "checkbox" + Name "boolInRateConst19Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst19Upper')" + TabName "System constraints" + } + Object { + $ObjectID 884 + Type "checkbox" + Name "boolInRateConst19UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 885 + Type "edit" + Name "InRateConst20SepBar" + Prompt "" + Value " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 886 + Type "checkbox" + Name "boolInRateConst20" + Prompt "Constraints on input 20 slew rate?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'input_rate_const',20)" + TabName "System constraints" + } + Object { + $ObjectID 887 + Type "popup" + Array { + Type "Cell" + Dimension 1 + Cell "Bound constraints" + PropName "TypeOptions" + } + Name "InRateConst20Type" + Prompt "Constraint type:" + Value "Bound constraints" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 888 + Type "edit" + Name "InRateConst20Lower" + Prompt "Lower bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 889 + Type "checkbox" + Name "boolInRateConst20Lowerparam" + Prompt "Lower bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst20Lower')" + TabName "System constraints" + } + Object { + $ObjectID 890 + Type "checkbox" + Name "boolInRateConst20LowerparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 891 + Type "edit" + Name "InRateConst20Upper" + Prompt "Upper bound:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 892 + Type "checkbox" + Name "boolInRateConst20Upperparam" + Prompt "Upper bound - Parameter?" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'params_check','InRateConst20Upper')" + TabName "System constraints" + } + Object { + $ObjectID 893 + Type "checkbox" + Name "boolInRateConst20UpperparamTimeVarying" + Prompt "Constant over horizon?" + Value "on" + Tunable "off" + Visible "off" + TabName "System constraints" + } + Object { + $ObjectID 894 + Type "popup" + Array { + Type "Cell" + Dimension 2 + Cell "State Feedback" + Cell "Output Feedback" + PropName "TypeOptions" + } + Name "WhichFeedback" + Prompt "Feedback type:" + Value "State Feedback" + Evaluate "off" + Tunable "off" + Callback "configure_block(gcb,'load_cov_mat')" + TabName "Estimator" + } + Object { + $ObjectID 895 + Type "checkbox" + Name "estimatorOutput" + Prompt "Get estimator output" + Value "off" + Tunable "off" + Visible "off" + TabName "Estimator" + } + Object { + $ObjectID 896 + Type "checkbox" + Name "boolLoadCovMat" + Prompt "Load noise covariance matrices?" + Value "on" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'load_cov_mat')" + TabName "Estimator" + } + Object { + $ObjectID 897 + Type "edit" + Name "Qn" + Prompt "Qn - Process Noise Covariance:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'getQn_matrix')" + TabName "Estimator" + } + Object { + $ObjectID 898 + Type "edit" + Name "Rn" + Prompt "Rn - Measurement Noise Covariance:" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'getRn_matrix')" + TabName "Estimator" + } + Object { + $ObjectID 899 + Type "edit" + Name "WeightProcess1" + Prompt "Relative importance of process noise channel 1:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 900 + Type "edit" + Name "WeightProcess2" + Prompt "Relative importance of process noise channel 2:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 901 + Type "edit" + Name "WeightProcess3" + Prompt "Relative importance of process noise channel 3:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 902 + Type "edit" + Name "WeightProcess4" + Prompt "Relative importance of process noise channel 4:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 903 + Type "edit" + Name "WeightProcess5" + Prompt "Relative importance of process noise channel 5:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 904 + Type "edit" + Name "WeightProcess6" + Prompt "Relative importance of process noise channel 6:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 905 + Type "edit" + Name "WeightProcess7" + Prompt "Relative importance of process noise channel 7:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 906 + Type "edit" + Name "WeightProcess8" + Prompt "Relative importance of process noise channel 8:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 907 + Type "edit" + Name "WeightProcess9" + Prompt "Relative importance of process noise channel 9:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 908 + Type "edit" + Name "WeightProcess10" + Prompt "Relative importance of process noise channel 10:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 909 + Type "edit" + Name "WeightProcess11" + Prompt "Relative importance of process noise channel 11:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 910 + Type "edit" + Name "WeightProcess12" + Prompt "Relative importance of process noise channel 12:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 911 + Type "edit" + Name "WeightProcess13" + Prompt "Relative importance of process noise channel 13:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 912 + Type "edit" + Name "WeightProcess14" + Prompt "Relative importance of process noise channel 14:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 913 + Type "edit" + Name "WeightProcess15" + Prompt "Relative importance of process noise channel 15:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 914 + Type "edit" + Name "WeightProcess16" + Prompt "Relative importance of process noise channel 16:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 915 + Type "edit" + Name "WeightProcess17" + Prompt "Relative importance of process noise channel 17:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 916 + Type "edit" + Name "WeightProcess18" + Prompt "Relative importance of process noise channel 18:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 917 + Type "edit" + Name "WeightProcess19" + Prompt "Relative importance of process noise channel 19:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 918 + Type "edit" + Name "WeightProcess20" + Prompt "Relative importance of process noise channel 20:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 919 + Type "edit" + Name "WeightProcess21" + Prompt "Relative importance of process noise channel 21:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 920 + Type "edit" + Name "WeightProcess22" + Prompt "Relative importance of process noise channel 22:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 921 + Type "edit" + Name "WeightProcess23" + Prompt "Relative importance of process noise channel 23:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 922 + Type "edit" + Name "WeightProcess24" + Prompt "Relative importance of process noise channel 24:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 923 + Type "edit" + Name "WeightProcess25" + Prompt "Relative importance of process noise channel 25:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 924 + Type "edit" + Name "WeightProcess26" + Prompt "Relative importance of process noise channel 26:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 925 + Type "edit" + Name "WeightProcess27" + Prompt "Relative importance of process noise channel 27:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 926 + Type "edit" + Name "WeightProcess28" + Prompt "Relative importance of process noise channel 28:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 927 + Type "edit" + Name "WeightProcess29" + Prompt "Relative importance of process noise channel 29:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 928 + Type "edit" + Name "WeightProcess30" + Prompt "Relative importance of process noise channel 30:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 929 + Type "edit" + Name "WeightProcess31" + Prompt "Relative importance of process noise channel 31:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 930 + Type "edit" + Name "WeightProcess32" + Prompt "Relative importance of process noise channel 32:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 931 + Type "edit" + Name "WeightProcess33" + Prompt "Relative importance of process noise channel 33:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 932 + Type "edit" + Name "WeightProcess34" + Prompt "Relative importance of process noise channel 34:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 933 + Type "edit" + Name "WeightProcess35" + Prompt "Relative importance of process noise channel 35:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 934 + Type "edit" + Name "WeightProcess36" + Prompt "Relative importance of process noise channel 36:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 935 + Type "edit" + Name "WeightProcess37" + Prompt "Relative importance of process noise channel 37:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 936 + Type "edit" + Name "WeightProcess38" + Prompt "Relative importance of process noise channel 38:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 937 + Type "edit" + Name "WeightProcess39" + Prompt "Relative importance of process noise channel 39:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 938 + Type "edit" + Name "WeightProcess40" + Prompt "Relative importance of process noise channel 40:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 939 + Type "edit" + Name "WeightNoise1" + Prompt "Relative importance of measurement noise channel 1:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 940 + Type "edit" + Name "WeightNoise2" + Prompt "Relative importance of measurement noise channel 2:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 941 + Type "edit" + Name "WeightNoise3" + Prompt "Relative importance of measurement noise channel 3:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 942 + Type "edit" + Name "WeightNoise4" + Prompt "Relative importance of measurement noise channel 4:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 943 + Type "edit" + Name "WeightNoise5" + Prompt "Relative importance of measurement noise channel 5:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 944 + Type "edit" + Name "WeightNoise6" + Prompt "Relative importance of measurement noise channel 6:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 945 + Type "edit" + Name "WeightNoise7" + Prompt "Relative importance of measurement noise channel 7:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 946 + Type "edit" + Name "WeightNoise8" + Prompt "Relative importance of measurement noise channel 8:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 947 + Type "edit" + Name "WeightNoise9" + Prompt "Relative importance of measurement noise channel 9:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 948 + Type "edit" + Name "WeightNoise10" + Prompt "Relative importance of measurement noise channel 10:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 949 + Type "edit" + Name "WeightNoise11" + Prompt "Relative importance of measurement noise channel 11:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 950 + Type "edit" + Name "WeightNoise12" + Prompt "Relative importance of measurement noise channel 12:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 951 + Type "edit" + Name "WeightNoise13" + Prompt "Relative importance of measurement noise channel 13:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 952 + Type "edit" + Name "WeightNoise14" + Prompt "Relative importance of measurement noise channel 14:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 953 + Type "edit" + Name "WeightNoise15" + Prompt "Relative importance of measurement noise channel 15:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 954 + Type "edit" + Name "WeightNoise16" + Prompt "Relative importance of measurement noise channel 16:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 955 + Type "edit" + Name "WeightNoise17" + Prompt "Relative importance of measurement noise channel 17:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 956 + Type "edit" + Name "WeightNoise18" + Prompt "Relative importance of measurement noise channel 18:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 957 + Type "edit" + Name "WeightNoise19" + Prompt "Relative importance of measurement noise channel 19:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 958 + Type "edit" + Name "WeightNoise20" + Prompt "Relative importance of measurement noise channel 20:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 959 + Type "edit" + Name "WeightNoise21" + Prompt "Relative importance of measurement noise channel 21:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 960 + Type "edit" + Name "WeightNoise22" + Prompt "Relative importance of measurement noise channel 22:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 961 + Type "edit" + Name "WeightNoise23" + Prompt "Relative importance of measurement noise channel 23:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 962 + Type "edit" + Name "WeightNoise24" + Prompt "Relative importance of measurement noise channel 24:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 963 + Type "edit" + Name "WeightNoise25" + Prompt "Relative importance of measurement noise channel 25:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 964 + Type "edit" + Name "WeightNoise26" + Prompt "Relative importance of measurement noise channel 26:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 965 + Type "edit" + Name "WeightNoise27" + Prompt "Relative importance of measurement noise channel 27:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 966 + Type "edit" + Name "WeightNoise28" + Prompt "Relative importance of measurement noise channel 28:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 967 + Type "edit" + Name "WeightNoise29" + Prompt "Relative importance of measurement noise channel 29:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 968 + Type "edit" + Name "WeightNoise30" + Prompt "Relative importance of measurement noise channel 30:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 969 + Type "edit" + Name "WeightNoise31" + Prompt "Relative importance of measurement noise channel 31:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 970 + Type "edit" + Name "WeightNoise32" + Prompt "Relative importance of measurement noise channel 32:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 971 + Type "edit" + Name "WeightNoise33" + Prompt "Relative importance of measurement noise channel 33:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 972 + Type "edit" + Name "WeightNoise34" + Prompt "Relative importance of measurement noise channel 34:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 973 + Type "edit" + Name "WeightNoise35" + Prompt "Relative importance of measurement noise channel 35:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 974 + Type "edit" + Name "WeightNoise36" + Prompt "Relative importance of measurement noise channel 36:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 975 + Type "edit" + Name "WeightNoise37" + Prompt "Relative importance of measurement noise channel 37:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 976 + Type "edit" + Name "WeightNoise38" + Prompt "Relative importance of measurement noise channel 38:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 977 + Type "edit" + Name "WeightNoise39" + Prompt "Relative importance of measurement noise channel 39:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 978 + Type "edit" + Name "WeightNoise40" + Prompt "Relative importance of measurement noise channel 40:" + Value "1" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'calc_weights_cov')" + TabName "Estimator" + } + Object { + $ObjectID 979 + Type "popup" + Array { + Type "Cell" + Dimension 4 + Cell "double precision - double" + Cell "single precision - float" + Cell "32-bit fixed-point - int" + Cell "16-bit fixed-point - short" + PropName "TypeOptions" + } + Name "dataType" + Prompt "Data type:" + Value "double precision - double" + Tunable "off" + TabName "Settings" + } + Object { + $ObjectID 980 + Type "popup" + Array { + Type "Cell" + Dimension 4 + Cell "Primal-Dual Interior-Point" + Cell "ADMM" + Cell "Dual Fast Gradient" + Cell "Fast Gradient" + PropName "TypeOptions" + } + Name "methodType" + Prompt "Optimization method:" + Value "Primal-Dual Interior-Point" + Tunable "off" + Callback "configure_block(gcb,'method_sel')" + TabName "Settings" + } + Object { + $ObjectID 981 + Type "checkbox" + Name "boolAutoMethod" + Prompt "Choose method automatically" + Value "off" + Tunable "off" + Callback "configure_block(gcb,'method_sel')" + TabName "Settings" + } + Object { + $ObjectID 982 + Type "edit" + Name "maxIter" + Prompt "Maximum number of iterations" + Value "30" + Tunable "off" + TabName "Settings" + } + Object { + $ObjectID 983 + Type "checkbox" + Name "boolAutoIter" + Prompt "Choose maximum number of iterations automatically" + Value "off" + Tunable "off" + TabName "Settings" + } + Object { + $ObjectID 984 + Type "popup" + Array { + Type "Cell" + Dimension 11 + Cell "Generic" + Cell "x86_64" + Cell "x86" + Cell "ARM Cortex-M3" + Cell "ARM Cortex-M4 (NO FPU)" + Cell "ARM Cortex-M4 (FPU)" + Cell "ARM Cortex-A" + Cell "Tricore" + Cell "PowerPC" + Cell "PowerPC64" + Cell "VHDL" + PropName "TypeOptions" + } + Name "platform" + Prompt "Platform:" + Value "Generic" + Tunable "off" + TabName "Settings" + } + Object { + $ObjectID 985 + Type "edit" + Name "ADMM_rho" + Prompt "ADMM option: rho parameter" + Value "1" + Tunable "off" + Visible "off" + TabName "Settings" + } + Object { + $ObjectID 986 + Type "checkbox" + Name "ADMM_sparse" + Prompt "ADMM option: Sparsify matrix M_11" + Value "off" + Tunable "off" + Visible "off" + TabName "Settings" + } + Object { + $ObjectID 987 + Type "edit" + Name "ADMM_max_z" + Prompt "ADMM option: Maximum absolute value of primal variables" + Value "1" + Tunable "off" + Visible "off" + TabName "Settings" + } + Object { + $ObjectID 988 + Type "edit" + Name "solverDesc" + Prompt "Enter an optional controller description" + Value "" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "Settings" + } + Object { + $ObjectID 989 + Type "checkbox" + Name "solveInfo" + Prompt "Get solve information" + Value "off" + Tunable "off" + TabName "Settings" + } + Object { + $ObjectID 990 + Type "checkbox" + Name "fullVecInfo" + Prompt "Get full optimal control vector" + Value "off" + Tunable "off" + TabName "Settings" + } + Object { + $ObjectID 991 + Type "checkbox" + Name "getCompactInt" + Prompt "Get compact interface" + Value "off" + Tunable "off" + TabName "Settings" + } + Object { + $ObjectID 992 + Type "edit" + Name "codegenServer" + Prompt "Specify alternative server for code generation" + Value "" + Evaluate "off" + Tunable "off" + TabName "Settings" + } + Object { + $ObjectID 993 + Type "edit" + Name "integratorOptions" + Prompt "" + Value " - - - - - - - - - - - - - INTEGRATOR OPTIONS - - - - - - - - - - - - - - - - " + Evaluate "off" + Tunable "off" + Enabled "off" + Visible "off" + TabName "Settings" + } + Object { + $ObjectID 994 + Type "popup" + Array { + Type "Cell" + Dimension 3 + Cell "Explicit Runge-Kutta Order 2" + Cell "Explicit Runge-Kutta Order 3" + Cell "Explicit Runge-Kutta Order 4" + PropName "TypeOptions" + } + Name "integratorType" + Prompt "Integrator type:" + Value "Explicit Runge-Kutta Order 4" + Tunable "off" + Visible "off" + TabName "Settings" + } + Object { + $ObjectID 995 + Type "edit" + Name "integratornIt" + Prompt "Number of integration steps per integration interval (integer):" + Value "1" + Evaluate "off" + Tunable "off" + Enabled "off" + TabName "Settings" + } + Object { + $ObjectID 996 + Type "edit" + Name "integratorhPert" + Prompt "Jacobian perturbation step:" + Value "1e-8" + Evaluate "off" + Tunable "off" + Visible "off" + TabName "Settings" + } + Object { + $ObjectID 997 + Type "checkbox" + Name "fullStateTraj" + Prompt "Get full state trajectory" + Value "off" + Tunable "off" + Visible "off" + TabName "Settings" + } + Object { + $ObjectID 998 + Type "checkbox" + Name "FORCES_PRO" + Prompt "" + Value "on" + Tunable "off" + Visible "off" + TabName "Settings" + } + Object { + $ObjectID 999 + Type "checkbox" + Name "gfdgdfgsdfgsdfs" + Prompt "dgdfgdfgs" + Value "off" + Tunable "off" + Visible "off" + Callback "configure_block(gcb,'last_init')" + TabName "Settings" + } + PropName "Parameters" + } + } + } + } +} diff --git a/parameter-learning_nd_disc/FORCES_client/MultistageProblem.m b/parameter-learning_nd_disc/FORCES_client/MultistageProblem.m new file mode 100755 index 0000000..575056d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/MultistageProblem.m @@ -0,0 +1,62 @@ +% Default initialization for a multistage problem. +% +% STAGES = MULTISTAGEPROBLEM(N) returns an array of structs defining a +% multistage problem of with N stages: +% +% min sum_{i=1}^N z_i'*H*z_i + f_i'*z_i +% {z_i} +% +% subject to: +% lb_i <= z_i <= ub_i (bound constraints), i=1,...,N +% Aineq_i*z_i <= b_i (affine inequalities), i=1,...,N +% z_i'*Q_{i,j}*z_i + g_{i,j}'*z_i <= r_{i,j}^2, i=1,...,N, +% (quadratic inequalities) j=1,...q +% D1*z1 = c1 +% C_i*z_i + D_i+1*z_i+1 = c_i+1, (equality constraints) i=1,...,N-1. +% +% Both H and Q are supposed to be positive definite. +% +% The ith stage of the problem is accessed by STAGES(i), and has the +% following fields: +% +% stages(i) +% .dims.n - length of stage variable +% .r - number of affine equalities (only for stages 1..N-1) +% .l - vector in (1,n) indicating the number of lower bounds +% .u - vector in (1,n) indicating the number of upper bounds +% .p - number of linear inequalities g'*z <= h +% .q - number of quadratic constraints z'*M*z + g'*z <= r +% .h - number of general inequalities (possibly nonlinear, non-convex) +% +% .cost.H - Hessian of cost +% .f - linear part of cost +% +% .eq.C - equality constraint matrix Ci +% .D - equality constraint matrix Di +% .c - vector containing the RHS of equality constraints ci +% +% .ineq.b.lb - vector of lower bounds of stage variables +% .lbidx - vector indicating to which stage variables the +% lower bounds belong to +% .ub - vector of upper bounds of stage variables +% .ubidx - vector indicating to which stage variables the +% upper bounds belong to +% +% .ineq.p.A - matrix defining the Jacobian of the polytopic inequalities A*z <= b +% p.b - vector, RHS of polytopic inequalities +% +% .ineq.q.Q - cell array containing the Hessians of quadratic +% inequalities z'*Q*z + g'*z <= r +% .l - linear part of quadratic inequalities ( N x q matrix ) +% .r - RHS of quadratic inequalities ( q x 1 vector ) +% +% .ineq.h.hl - lower bound for inequality hl <= h(z) +% .hlidx - indicates on which indices of h(z) the lower bounds act +% .hu - upper bound for inequality h(z) <= hu +% .huidx - indicates on which indices of h(z) the upper bounds act +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. +% +% See also FORCES_NLP NEWPARAM NEWOUTPUT diff --git a/parameter-learning_nd_disc/FORCES_client/MultistageProblem.p b/parameter-learning_nd_disc/FORCES_client/MultistageProblem.p new file mode 100755 index 0000000..ea6fb27 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/MultistageProblem.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/RK2.m b/parameter-learning_nd_disc/FORCES_client/RK2.m new file mode 100755 index 0000000..e9ae8b9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/RK2.m @@ -0,0 +1,24 @@ +% Explicit Runge-Kutta integrator of order 2. +% +% XNEXT = RK2( X, U, F, H) implements explicit RK2 integrator +% equations to discretize (potentially nonlinear) continuous dynamics with +% step size H. Note that H is the absolute time spent between X and XNEXT. +% F is a function handle to a function that takes the arguments (X, U) +% and returns dx/dt. +% +% XNEXT = RK2( X, U, F, H, P) as above, but parameters P are passed to the +% function handle F to support parameters in the dynamics, e.g. changing +% inertia etc. +% +% XNEXT = RK2( X, U, F, H, P, M) performs M-steps for the integration, i.e. +% it places M-1 intermediate points between X and XNEXT. Use this to +% integrate systems more accurately without increasing the number of +% optimization variables in the NLP solver. If no parameters are present, +% use P = []. +% +% +% See also ForwardEuler BackwardEuler RK3 RK4 IRK2 IRK4 FORCES_NLP +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. + diff --git a/parameter-learning_nd_disc/FORCES_client/RK2.p b/parameter-learning_nd_disc/FORCES_client/RK2.p new file mode 100755 index 0000000..6228c62 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/RK2.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/RK3.m b/parameter-learning_nd_disc/FORCES_client/RK3.m new file mode 100755 index 0000000..3b297b1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/RK3.m @@ -0,0 +1,24 @@ +% Explicit Runge-Kutta integrator of order 3. +% +% XNEXT = RK3( X, U, F, H) implements explicit RK3 integrator +% equations to discretize (potentially nonlinear) continuous dynamics with +% step size H. Note that H is the absolute time spent between X and XNEXT. +% F is a function handle to a function that takes the arguments (X, U) +% and returns dx/dt. +% +% XNEXT = RK3( X, U, F, H, P) as above, but parameters P are passed to the +% function handle F to support parameters in the dynamics, e.g. changing +% inertia etc. +% +% XNEXT = RK3( X, U, F, H, P, M) performs M-steps for the integration, i.e. +% it places M-1 intermediate points between X and XNEXT. Use this to +% integrate systems more accurately without increasing the number of +% optimization variables in the NLP solver. If no parameters are present, +% use P = []. +% +% +% See also ForwardEuler BackwardEuler RK2 RK4 IRK2 IRK4 FORCES_NLP +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. diff --git a/parameter-learning_nd_disc/FORCES_client/RK3.p b/parameter-learning_nd_disc/FORCES_client/RK3.p new file mode 100755 index 0000000..6fd814c Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/RK3.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/RK4.m b/parameter-learning_nd_disc/FORCES_client/RK4.m new file mode 100755 index 0000000..17657f6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/RK4.m @@ -0,0 +1,24 @@ +% Explicit Runge-Kutta integrator of order 4. +% +% XNEXT = RK4( X, U, F, H) implements explicit RK4 integrator +% equations to discretize (potentially nonlinear) continuous dynamics with +% step size H. Note that H is the absolute time spent between X and XNEXT. +% F is a function handle to a function that takes the arguments (X, U) +% and returns dx/dt. +% +% XNEXT = RK4( X, U, F, H, P) as above, but parameters P are passed to the +% function handle F to support parameters in the dynamics, e.g. changing +% inertia etc. +% +% XNEXT = RK4( X, U, F, H, P, M) performs M-steps for the integration, i.e. +% it places M-1 intermediate points between X and XNEXT. Use this to +% integrate systems more accurately without increasing the number of +% optimization variables in the NLP solver. If no parameters are present, +% use P = []. +% +% +% See also ForwardEuler BackwardEuler RK2 RK3 IRK2 IRK4 FORCES_NLP +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/RK4.p b/parameter-learning_nd_disc/FORCES_client/RK4.p new file mode 100755 index 0000000..fa9d782 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/RK4.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/SimpleRegulationMPC.m b/parameter-learning_nd_disc/FORCES_client/SimpleRegulationMPC.m new file mode 100755 index 0000000..1644e61 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/SimpleRegulationMPC.m @@ -0,0 +1,306 @@ +function [ controller, stages, params, codeoptions, outputs ] = SimpleRegulationMPC(system, objective, bounds, N, solvername, userOptions, debug) +%% SimpleRegulationMPC - generates an MPC regulator for a given LTI system +% Uses the FORCES Pro code-generation system to implement an optimal MPC +% controller that regulates the given LTI system to the origin. The stage +% cost penalizing control inputs and state-deviation from the origin is +% assumed to be quadratic. +% +% SimpleRegulationMPC generates a mathematical optimization solver for +% the following standard MPC problem: +% min x_N'*P*x_N + sum_{i=0}^{N-1}( x_i'*Q*x_i + u_i'*R*u_i ) +% x_i,u_i +% s.t. x_0 = x +% x_{i+1} = A*x_i + B*u_i for i = 0...N-1 +% xmin <= x_i <= xmax for i = 1...N +% umin <= u_i <= umax for i = 0...N-1 +% +% The matrices Q and R define the stage cost while P is usually referred +% to as the terminal cost matrix. +% +% The solver generated by SimpleRegulationMPC takes the value of x_0 as a +% parameter and returns the optimal value for u_0, i.e. the control input +% for the first stage, if the MPC problem is feasible. Always check the +% exitflag provided by the solver to make sure there were no issues! +% +% The first output parameter of SimpleRegulationMPC is a simple function +% handle wrapper around the solver that takes the current system state x, +% hands it over to the solver in the appropriate format, and returns the +% solver outputs. Call help YOUR_SOLVER_NAME (or help LTI_MPC_Solver if +% no name is specified) for details. +% +% You can use the additional output parameters of SimpleRegulationMPC to +% call +% >> generateCode(stages, params, codeoptions, outputs) +% This can be useful if you want to change some default options that are +% not exposed in the interface of SimpleRegulationMPC or inspect what we +% produce for you in this function and want to learn how you can use all +% capabilities of FORCES Pro. +% +% Inputs: +% system - Struct with the following fields: +% system.A: +% State-transition matrix of the LTI-system to be controlled +% system.B: +% Input matrix of the LTI-system to be controlled +% +% objective - Struct with the following fields: +% objective.Q: +% Positive semi-definite matrix penalizing state-deviations from the origin. +% objective.R: +% Positive definite matrix penalizing control inputs. +% objective.computeTerminalCost: [OPTIONAL] +% Boolean indicating whether the terminal cost matrix P should be +% computed by solving the discrete-time algebraic Riccati equation. +% objective.P: [OPTIONAL] +% Positive semi-definite matrix penalizing the terminal state. If +% not present (or computed), Q will be used instead. +% +% bounds - Struct with the following fields: +% bounds.xmin, bounds.xmax: [OPTIONAL] +% Vectors representing component-wise lower and upper bounds on the +% individual states. Components can be (minus) infinity to indicate +% unbounded states. Can be given as a scalar to specify identical +% bounds for all states. If not present, unboundedness is assumed. +% bounds.umin, bounds.umax: [OPTIONAL] +% Vectors representing component-wise lower and upper bounds on the +% control inputs. Components can be (minus) infinity to indicate +% unbounded inputs. Can be given as a scalar to specify identical +% bounds for all inputs. If not present, unboundedness is assumed. +% +% N: +% Scalar specifying the prediction horizon for the MPC problem. +% +% solvername [OPTIONAL]: +% String specifying a name for the generated solver. +% +% userOptions [OPTIONAL]: +% Structure specifying non-standard options to use when generating +% the MPC solver with FORCES Pro, see help getOptions for details. +% +% Outputs: +% controller: +% A function handle that takes a particular value for the system +% state, calls the solver with it, and returns the solver outputs. +% +% stages: +% A structure array defining the MPC problem in FORCES Pro format. +% +% params: +% A structure defining the inputs (parameters) to the solver, i.e. +% this initial system state x1, in FORCES Pro format. +% +% codeoptions: +% A structure specifying the options used by FORCES Pro when +% generating the MPC solver. +% +% outputs: +% A structure specifying which variables values the solver should +% return, i.e. the input u1 of the first stage. +% +% See also: generateCode, getOptions +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-18, Zurich, Switzerland. All rights reserved. + +if nargin < 5 || isempty(solvername) || ~ischar(solvername) + solvername = 'LTI_MPC_Solver'; +end + +if nargin < 6 || isempty(userOptions) + userOptions = struct(); +end + +if nargin < 7 + debug = false; +end + +%% extract some problem data + +% get the system matrices +A = system.A; +B = system.B; +[nx, nu] = size(B); + +% get the input and state bounds +if ~isempty(bounds) && isfield(bounds, 'xmin') + xmin = bounds.xmin; +else + xmin = -inf; +end +if ~isempty(bounds) && isfield(bounds, 'xmax') + xmax = bounds.xmax; +else + xmax = inf; +end +if ~isempty(bounds) && isfield(bounds, 'umin') + umin = bounds.umin; +else + umin = -inf; +end +if ~isempty(bounds) && isfield(bounds, 'umax') + umax = bounds.umax; +else + umax = inf; +end + + +% make sure the matrices have corresponding dimensions +assert(all(size(A) == nx), 'The dimensions of A (%i x %i) and B (%i x %i) do not match!', size(A), size(B)); + +% make sure the bounds have appropriate dimensions +assert(isscalar(xmin) || (isvector(xmin) && length(xmin) == nx), 'The given lower bounds (size %i by %i) do not match the statespace dimension (nx = %i)!', size(xmin), nx); +assert(isscalar(xmax) || (isvector(xmax) && length(xmax) == nx), 'The given upper bounds (size %i by %i) do not match the statespace dimension (nx = %i)!', size(xmax), nx); +assert(isscalar(umin) || (isvector(umin) && length(umin) == nu), 'The given lower bounds (size %i by %i) do not match the input dimension (nu = %i)!', size(umin), nu); +assert(isscalar(umax) || (isvector(umax) && length(umax) == nu), 'The given upper bounds (size %i by %i) do not match the input dimension (nu = %i)!', size(umax), nu); + +% make sure the cost-structure has appropriate dimensions +assert(isscalar(objective) && isstruct(objective) && isfield(objective, 'Q') && isfield(objective, 'R'), ... + 'The objective has to be specified in a structure with fields Q and R (and potentially P)!'); + +% prepare variables to hold the cost matrices +Q = objective.Q; +R = objective.R; + +% make sure the cost-matrices have the right dimensions +assert(all(size(Q) == nx) && issymmetric(Q) && all(eig(Q) >= 0), ... + 'The stage cost for the state variables has to be given as a symmetric positive-semidefinite matrix!'); + +assert(all(size(R) == nu) && issymmetric(R) && all(eig(R) > 0), ... + 'The stage cost for the input variables has to be given as a symmetric positive-definite matrix!'); + +% use appropriate terminal cost matrix +if isfield(objective, 'P') && ~isempty(objective.P) + P = objective.P; +elseif isfield(objective, 'computeTerminalCost') && objective.computeTerminalCost + fprintf('Computing optimal terminal cost for the given dynamics and stage-cost.\n'); + P = dare(A, B, Q, R); +else + warning(['Using the state variable stage cost matrix for the terminal stage.' char(10) 'Provide a terminal cost matrix in objective.P or specify objective.computeTerminalCost = true if you want different behavior.']); + P = Q; +end + +assert(all(size(P) == nx) && issymmetric(P) && all(eig(P) >= 0), ... + 'The terminal cost has to be a symmetric positive-semidefinite matrix!'); + + + +% make sure bounds are vectors +if isscalar(xmin) + xmin = xmin*ones(nx,1); +end +if isscalar(xmax) + xmax = xmax*ones(nx,1); +end +if isscalar(umin) + umin = umin*ones(nu,1); +end +if isscalar(umax) + umax = umax*ones(nu,1); +end + +% extract infinity bounds and fix the bounding vector and index vector +% accordingly +zmin = [umin; xmin]; +zmax = [umax; xmax]; +lowerBoundIdx = ~isinf([umin; xmin]); +upperBoundIdx = ~isinf([umax; xmax]); + +% check for infeasible bounds +assert(all(xmax - xmin > 0), 'The given state bounds are infeasible, please make sure that xmax > xmin!'); +[~,degenerateIdx] = find(xmax == xmin, 1); +if ~isempty(degenerateIdx) + warning('The state bounds are degenerate (xmin == xmax for state %i), this can lead to problems when solving the MPC problem!', degenerateIdx); +end + +assert(all(umax - umin > 0), 'The given input bounds are infeasible, please make sure that umax > umin!'); +[~,degenerateIdx] = find(umax == umin, 1); +if ~isempty(degenerateIdx) + warning('The input bounds are degenerate (umin == umax for input %i), this can lead to problems when solving the MPC problem!', degenerateIdx); +end + +% make sure N is given properly +assert(N >= 1 && isscalar(N) && rem(N,1) == 0, 'The prediction horizon N must be an integer scalar greater than or equal to 1!'); + +%% Create FORCES multistage form structure +% assume variable ordering zi = [ui; xi+1] for i=1...N-1 + +stages = MultistageProblem(N); +for i = 1:N + + % dimension + stages(i).dims.n = nx+nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = sum(lowerBoundIdx); % number of lower bounds + stages(i).dims.u = sum(upperBoundIdx); % number of upper bounds + + % cost + if i1 ) + stages(i).eq.c = zeros(nx,1); + end + stages(i).eq.D = [B, -eye(nx)]; + +end +params(1) = newParam('minusA_times_x0',1,'eq.c'); % RHS of first eq. constr. is a parameter: z1=-A*x0 + + + +%% define outputs of the solver +outputs(1) = newOutput('u0',1,1:nu); + +%% solver settings +codeoptions = getOptions(solvername); +codeoptions.maxit = 50; + +% update from user-provided structure +userFields = fieldnames(userOptions); +for i = 1:length(userFields) + codeoptions.(userFields{i}) = userOptions.(userFields{i}); +end + +if ~debug + %% generate code + generateCode(stages,params,codeoptions,outputs); + + %% construct function handle to call controller + + controller = @(x0)(feval(solvername, struct('minusA_times_x0', -A*x0))); + + fprintf(['\n\n FORCES Pro implemented a fast optimization algorithm to solve your MPC problem for you.\n'... + ' A function handle to the controller is returned by this function (%s).\n'... + ' To compute the optimal control input, simply call the controller with the current system state x0:\n'... + ' >> controller = %s(...);\n'... + ' >> [output, exitflag, info] = controller(x0);\n'... + '\n' ... + ' You can access the optimal control input for the first stage in output.u0.\n' ... + ' Always check the exitflag before using output.u0! It will be 1 if the optimal control input could be calculated.\n' ... + '\n' ... + ' To get information about the underlying solver, type the following:\n' ... + ' >> help %s\n' ... + '\n Have fun solving your MPC problems (fast)!\n' + ], mfilename, mfilename, solvername); +else + controller = []; + warning('In debug mode, only returning the structures for FORCES Pro to the user!'); +end + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/CHANGELOG.md b/parameter-learning_nd_disc/FORCES_client/Y2F/CHANGELOG.md new file mode 100755 index 0000000..caf3a19 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/CHANGELOG.md @@ -0,0 +1,42 @@ +# Changelog + +## 0.1.10 +- Fix a compilation bug under Windows when using the new Azure servers + +## 0.1.9 + +- Added `y2f_version` function that returns currently installed version of Y2F + +## 0.1.8 + +- Fixed compilation for Visual Studio 2015 users + +## 0.1.7 + +- Fixed bug in MEX file compilation on Windows machines + +## 0.1.6 + +- Fixed bug affecting parsing of problems with parameters influencing cost + + +## 0.1.5 + +- Changed method Y2F uses to store Simulink blocks: All blocks are now stored in a single library that can be accessed from the Simulink Library Browser. If the user re-generates a solver, the Simulink block gets updated automatically. + + + +## 0.1.4 + +*skipped* + + +## 0.1.3 + +- Added basic ADMM example +- Fixed bug that occurred in Matlab versions < 2014a when generating valid names for solvers + + +## 0.1.2 + +- Fixed a glitch that caused the build to fail when no solver libs are shipped diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/CONTRIBUTING.md b/parameter-learning_nd_disc/FORCES_client/Y2F/CONTRIBUTING.md new file mode 100755 index 0000000..0b466b9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/CONTRIBUTING.md @@ -0,0 +1,82 @@ +Thank you for your interest in contributing to Y2F, a project maintained by embotech ("We" or "Us"). + +The purpose of this contributor agreement ("Agreement") is to clarify and document the rights granted by contributors to Us. By contributing to the project in any traceable way (pull requests, issues, emails etc.), you agree to these terms. + +## 1. DEFINITIONS + +"**You**" means the Individual Copyright owner who submits a Contribution to Us. If You are an employee and submit the Contribution as part of your employment, You have had Your employer approve this Agreement or sign the Entity version of this document (see the CONTRIBUTING-entity.md file). + +"**Contribution**" means any original work of authorship (software and/or documentation) including any modifications or additions to an existing work, Submitted by You to Us, in which You own the Copyright. If You do not own the Copyright in the entire work of authorship, please contact Us at info@embotech.com. + +"**Copyright**" means all rights protecting works of authorship owned or controlled by You, including copyright, moral and neighboring rights, as appropriate, for the full term of their existence including any extensions by You. + +"**Material**" means the software or documentation made available by Us to third parties. When this Agreement covers more than one software project, the Material means the software or documentation to which the Contribution was Submitted. After You Submit the Contribution, it may be included in the Material. + +"**Submit**" means any form of physical, electronic, or written communication sent to Us, including but not limited to electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, Us, but excluding communication that is conspicuously marked or otherwise designated in writing by You as "Not a Contribution." + +"**Submission Date**" means the date You Submit a Contribution to Us. + +"**Documentation**" means any non-software portion of a Contribution. + +## 2. LICENSE GRANT +### 2.1 Copyright License to Us +Subject to the terms and conditions of this Agreement, You hereby grant to Us a worldwide, royalty-free, NON-exclusive, perpetual and irrevocable license, with the right to transfer an unlimited number of non-exclusive licenses or to grant sublicenses to third parties, under the Copyright covering the Contribution to use the Contribution by all means, including, but not limited to: +
    +
  • to publish the Contribution,
  • +
  • to modify the Contribution, to prepare derivative works based upon or containing the Contribution and to combine the Contribution with other software code,
  • +
  • to reproduce the Contribution in original or modified form,
  • +
  • to distribute, to make the Contribution available to the public, display and publicly perform the Contribution in original or modified form.
  • +
+ +### 2.2 Moral Rights +Moral rights remain unaffected to the extent they are recognized and not waivable by applicable law. Notwithstanding, You may add your name in the header of the source code files of Your Contribution and We will respect this attribution when using Your Contribution. + +## 3. PATENTS +### 3.1 Patent License + +Subject to the terms and conditions of this Agreement You hereby grant to us a worldwide, royalty-free, non-exclusive, +perpetual and irrevocable (except as stated in Section 3.2) patent license, +with the right to transfer an unlimited number of non-exclusive licenses or to grant sublicenses to third parties, +to make, have made, use, sell, offer for sale, import and otherwise transfer the Contribution and the Contribution in +combination with the Material (and portions of such combination). This license applies to all patents owned or controlled by +You, whether already acquired or hereafter acquired, that would be infringed by making, having made, using, selling, offering +for sale, importing or otherwise transferring of Your Contribution(s) alone or by combination of Your Contribution(s) +with the Material. + +### 3.2 Revocation of Patent License +You reserve the right to revoke the patent license stated in section 3.1 if we make any infringement claim that is +targeted at your Contribution and not asserted for a Defensive Purpose. An assertion of claims of the Patents shall be +considered for a "Defensive Purpose" if the claims are asserted against an entity that has filed, maintained, threatened, or +voluntarily participated in a patent infringement lawsuit against Us or any of Our licensees. + +## 4. DISCLAIMER +THE CONTRIBUTION IS PROVIDED "AS IS". MORE PARTICULARLY, ALL EXPRESS OR IMPLIED WARRANTIES INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY DISCLAIMED BY YOU TO US AND BY US TO YOU. TO THE EXTENT THAT ANY SUCH WARRANTIES CANNOT BE DISCLAIMED, SUCH WARRANTY IS LIMITED IN DURATION TO THE MINIMUM PERIOD PERMITTED BY LAW. + +## 5. Consequential Damage Waiver +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL YOU OR US BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF ANTICIPATED SAVINGS, LOSS OF DATA, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL AND EXEMPLARY DAMAGES ARISING OUT OF THIS AGREEMENT REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH THE CLAIM IS BASED. + +## 6. Approximation of Disclaimer and Damage Waiver +IF THE DISCLAIMER AND DAMAGE WAIVER MENTIONED IN SECTION 4 AND SECTION 5 CANNOT BE GIVEN LEGAL EFFECT UNDER APPLICABLE LOCAL LAW, +REVIEWING COURTS SHALL APPLY LOCAL LAW THAT MOST CLOSELY APPROXIMATES AN ABSOLUTE WAIVER OF ALL CIVIL LIABILITY IN CONNECTION WITH +THE CONTRIBUTION. + +## 7. Term +**7.1** This Agreement shall come into effect upon Your acceptance of the terms and conditions. + +**7.2** In the event of a termination of this Agreement Sections 4, 5, 6, 7 and 8 shall survive such termination and shall remain in +full force thereafter. For the avoidance of doubt, Contributions that are already licensed under a free and open source license at +the date of the termination shall remain in full force after the termination of this Agreement. + +## 8. Miscellaneous +**8.1** This Agreement and all disputes, claims, actions, suits or other proceedings arising out of this agreement or relating in any way to it shall be governed by the laws of Switzerland excluding its private international law provisions.

+ +**8.2** This Agreement sets out the entire agreement between You and Us for Your Contributions to Us and overrides all other agreements or +understandings. + +**8.3** If any provision of this Agreement is found void and unenforceable, such provision will be replaced to the extent possible +with a provision that comes closest to the meaning of the original provision and that is enforceable. The terms and conditions set +forth in this Agreement shall apply notwithstanding any failure of essential purpose of this Agreement or any limited remedy to the +maximum extent possible under law. + +**8.4** You agree to notify Us of any facts or circumstances of which you become aware that would make this Agreement inaccurate +in any respect. diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/LICENSE b/parameter-learning_nd_disc/FORCES_client/Y2F/LICENSE new file mode 100755 index 0000000..5dddfd1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 embotech + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/README.md b/parameter-learning_nd_disc/FORCES_client/Y2F/README.md new file mode 100755 index 0000000..0d85ac8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/README.md @@ -0,0 +1,68 @@ +# Y2F - YALMIP to FORCES Pro Interface + +This project provides a simple MATLAB interface that connects [YALMIP](http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Main.WhatIsYALMIP) +with [FORCES Pro](https://www.embotech.com/FORCES-Pro). It combines YALMIP's intuitiveness with the high efficiency of FORCES Pro for rapid development. + +## Installation + +Simply download the code to the desired location and add the `Y2F` folder to your [MATLAB search path](http://ch.mathworks.com/help/matlab/ref/addpath.html). + +The Y2F interface requires a working YALMIP installation. See [https://yalmip.github.io/tutorial/installation/](https://yalmip.github.io/tutorial/installation/) for instructions on how to install YALMIP. + +The code has been tested with YALMIP release 20150919. Older versions might work but have not been tested. + +## Example Usage + +Consider the following linear MPC problem with lower and upper bounds on state and inputs, and a terminal cost term: + +![\begin{aligned}\text{minimize} \quad & x_N^T P x_N + \sum_{i=0}^{N-1} x_i^T Q x_i + u_i^T R u_i \\ \text{s.t.} \quad & x_0 = x(t) \\& x_{i+1} = Ax_i + Bu_i \\& \underline{x} \leq x_i \leq \bar{x} \\& \underline{u} \leq u_i \leq \bar{u}\end{aligned}](example_problem.png) + +This problem is parametric in the initial state x(t), and the first input u0 is typically applied to the system after a solution has been obtained. The following code generates a solver that returns u0, which can then be applied to the system: + +``` +% Define variables +X = sdpvar(nx,N+1,'full'); % state trajectory: x0,x1,...,xN (columns of X) +U = sdpvar(nu,N,'full'); % input trajectory: u0,...,u_{N-1} (columns of U) + +% Initialize objective and constraints of the problem +cost = 0; const = []; + +% Assemble MPC formulation +for i = 1:N + % cost + if( i < N ) + cost = cost + 0.5*X(:,i+1)'*Q*X(:,i+1) + 0.5*U(:,i)'*R*U(:,i); + else + cost = cost + 0.5*X(:,N+1)'*P*X(:,N+1) + 0.5*U(:,N)'*R*U(:,N); + end + + % model + const = [const, X(:,i+1) == A*X(:,i) + B*U(:,i)]; + + % bounds + const = [const, umin <= U(:,i) <= umax]; + const = [const, xmin <= X(:,i+1) <= xmax]; +end + +controller = optimizerFORCES(const, cost, codeoptions, X(:,1), U(:,1)); +``` + +The generated solver can then be called using curly braces: + +``` +u0 = controller{x0}; +``` + +## Limitations + +- The Y2F interface only supports convex quadratically constrained programs (QCQPs). FORCES' NLP solver is currently not supported. +- If you have rate constraints or cost, you need to manually define delta variables (e.g. U+ = U + dU, and then constrain dU). Otherwise, Y2F cannot figure out the multistage structure from your problem, and you might obtain a slow solver. + + +## License + +The code is licensed under the MIT License. For more information see LICENSE file. + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) file. diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/VERSION b/parameter-learning_nd_disc/FORCES_client/Y2F/VERSION new file mode 100755 index 0000000..9767cc9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/VERSION @@ -0,0 +1 @@ +0.1.10 diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/compileSimulinkInterfaceCode.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/compileSimulinkInterfaceCode.m new file mode 100755 index 0000000..a6bf8ec --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/compileSimulinkInterfaceCode.m @@ -0,0 +1,102 @@ +function compileSimulinkInterfaceCode( self ) +%COMPILESIMULINKINTERFACECODE Compiles the MEX code generated by +%GENERATESIMULINKINTERFACECODE. Important: This function has to be called +%AFTER COMPILESOLVERINTERFACECODE. +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +solverName = self.default_codeoptions.name; +cName = [solverName '/interface/' solverName]; +simulinkName = [solverName '/interface/' solverName '_simulinkBlock']; +outputName = ['"' solverName '_simulinkBlock"']; + +% copy the O-files of all solvers into /interface +% we'll delete them later, but this makes compilation easier +for i=1:self.numSolvers + if( ~ispc ) + copyfile(sprintf('%s/obj/%s.o',solverName,self.codeoptions{i}.name), sprintf('%s/interface',solverName), 'f'); + end +end + +% final MEX build +if exist( [cName '.c'], 'file' ) && exist( [simulinkName '.c'], 'file' ) + if( ~exist([solverName '/interface/' solverName '.obj'],'file') ) + mex('-c','-g','-silent','-outdir',[solverName '/interface'],[cName '.c']) % compile C interface + end + mex('-c','-g','-silent','-outdir',[solverName '/interface'],[simulinkName '.c']) % compile Simulink interface + if( ispc ) % PC - we need additional libraries + + % Create a list of internal solver libraries + if( exist([solverName,filesep,'lib'],'dir') ) + libs = cell(1,self.numSolvers); + for i=1:self.numSolvers + lib = dir([solverName,filesep,'lib/',self.codeoptions{i}.name,'*.lib']); + if length(lib)>1 + % fix for new server which produces shared and static + % libraries, so we have more than 1 library found above + lib = dir([solverName,filesep,'lib/',self.codeoptions{i}.name,'_static.lib']); + end + libs{i} = ['-l' lib.name(1:end-4)]; + end + end + + % figure our whether we need additional libraries indeed (Intel) + clientPath = fileparts(which('generateCode')); + intelLibsDir = [clientPath,filesep,'libs_intel']; + if( exist( intelLibsDir, 'dir' ) ) + intelLibsDirFlag = ['-L', intelLibsDir]; + addpath(intelLibsDir); savepath; + else + intelLibsDirFlag = ''; + end + + % Figure out whether we need legacy libraries for Visual Studio + try + thisCompiler = mex.getCompilerConfigurations('C','Selected'); + mexcomp.name = thisCompiler(1).Name; + mexcomp.ver = thisCompiler(1).Version; + mexcomp.vendor = thisCompiler(1).Manufacturer; + catch + mexcomp = []; + end + if( ~isempty(mexcomp) ... + && ~isempty(strfind(mexcomp.vendor,'Microsoft')) ... + && str2double(mexcomp.ver) >= 14.0 ) + legacyLibs = '-llegacy_stdio_definitions'; + else + legacyLibs = ''; + end + + % Call mex compiler + if( exist([solverName,filesep,'lib'],'dir') ) + mex([solverName '/interface/' solverName '.obj'], ... + [solverName '/interface/' solverName '_simulinkBlock.obj'], ... + '-output', outputName, ... + ['-L' solverName '/lib'], libs{:}, intelLibsDirFlag, ... + '-ldecimal', '-lirc', '-lmmt', '-lsvml_dispmt', ... + legacyLibs, '-lIPHLPAPI.lib', '-largeArrayDims','-silent'); + else + % it seems that we have been compiling with VS only, + % so we do not add the Intel libs and use only object files + mex([solverName, '/interface/' solverName '.obj'], ... + [solverName, '/interface/' solverName '_simulinkBlock.obj'], ... + [solverName '/obj/*.obj'], '-lIPHLPAPI.lib', legacyLibs, ... + '-output', [outputName(2:end-1),'.',mexext],'-silent'); + end + % delete([solverName '/interface/*.obj']); + elseif( ismac ) + mex([solverName '/interface/*.o'], '-output', outputName, '-silent') + delete([solverName '/interface/*.o']); + else % we're on a linux system + mex([solverName '/interface/*.o'], '-output', outputName,'-lrt', '-silent') + delete([solverName '/interface/*.o']); + end +else + fprintf('Could not find source file. This file is meant to be used for building from source code.'); +end + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/compileSolverInterfaceCode.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/compileSolverInterfaceCode.m new file mode 100755 index 0000000..58a61b3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/compileSolverInterfaceCode.m @@ -0,0 +1,139 @@ +function compileSolverInterfaceCode( self ) +%COMPILESOLVERINTERFACECODE Compiles the MEX code generated by +%GENERATECINTERFACECODE and GENERATEMEXINTERFACECODE. +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +solverName = self.default_codeoptions.name; +cName = [solverName '/interface/' solverName]; +mexName = [solverName '/interface/' solverName '_mex']; +outputName = ['"' solverName '"']; + +% move the (necessary) files of all solvers to the new directory and delete +% the folders of the "internal" solvers +for i=1:self.numSolvers + % include + dir2move = sprintf('%s/include',self.codeoptions{i}.name); + if( exist(dir2move,'dir') ) + copyfile(dir2move, sprintf('%s/include',solverName), 'f'); + end + % lib + dir2move = sprintf('%s/lib',self.codeoptions{i}.name); + if( exist(dir2move,'dir') ) + copyfile(dir2move, sprintf('%s/lib',solverName), 'f'); + end + % obj + dir2move = sprintf('%s/obj',self.codeoptions{i}.name); + if( exist(dir2move,'dir') ) + copyfile(dir2move, sprintf('%s/obj',solverName), 'f'); + end + % src + dir2move = sprintf('%s/src',self.codeoptions{i}.name); + if exist(dir2move,'dir') + copyfile(dir2move, sprintf('%s/src',solverName), 'f'); + end + % obj_target + dir2move = sprintf('%s/obj_target',self.codeoptions{i}.name); + if exist(dir2move,'dir') + copyfile(dir2move, sprintf('%s/obj_target',solverName), 'f'); + end + % lib_target + dir2move = sprintf('%s/lib_target',self.codeoptions{i}.name); + if exist(dir2move,'dir') + copyfile(dir2move, sprintf('%s/lib_target',solverName), 'f'); + end + + % Delete files + rmdir(self.codeoptions{i}.name, 's'); + delete([self.codeoptions{i}.name '*']); +end + +% copy the O-files of all solvers into /interface +% we'll delete them later, but this makes compilation easier +for i=1:self.numSolvers + if( ~ispc ) + copyfile(sprintf('%s/obj/%s.o',solverName,self.codeoptions{i}.name), sprintf('%s/interface',solverName), 'f'); + end +end + +% final MEX build +if exist( [cName '.c'], 'file' ) && exist( [mexName '.c'], 'file' ) + mex('-c','-g','-silent','-outdir',[solverName '/interface'],[cName '.c']) % compiles C interface + mex('-c','-g','-silent','-outdir',[solverName '/interface'],[mexName '.c']) % compiles MEX interface + + if( ispc ) % PC - we need additional libraries + + % Create a list of internal solver libraries + if( exist([solverName,filesep,'lib'],'dir') ) + libs = cell(1,self.numSolvers); + for i=1:self.numSolvers + lib = dir([solverName,filesep,'lib/',self.codeoptions{i}.name,'*.lib']); + if length(lib)>1 + % fix for new server which produces shared and static + % libraries, so we have more than 1 library found above + lib = dir([solverName,filesep,'lib/',self.codeoptions{i}.name,'_static.lib']); + end + libs{i} = ['-l' lib.name(1:end-4)]; + end + end + + % figure our whether we need additional libraries for Intel + clientPath = fileparts(which('generateCode')); + intelLibsDir = [clientPath,filesep,'libs_intel']; + if( exist( intelLibsDir, 'dir' ) ) + intelLibsDirFlag = ['-L', intelLibsDir]; + addpath(intelLibsDir); savepath; + else + intelLibsDirFlag = ''; + end + + % Figure out whether we need legacy libraries for Visual Studio + try + thisCompiler = mex.getCompilerConfigurations('C','Selected'); + mexcomp.name = thisCompiler(1).Name; + mexcomp.ver = thisCompiler(1).Version; + mexcomp.vendor = thisCompiler(1).Manufacturer; + catch + mexcomp = []; + end + if( ~isempty(mexcomp) ... + && ~isempty(strfind(mexcomp.vendor,'Microsoft')) ... + && str2double(mexcomp.ver) >= 14.0 ) + legacyLibs = '-llegacy_stdio_definitions'; + else + legacyLibs = ''; + end + + % Call mex compiler + if( exist([solverName,filesep,'lib'],'dir') ) + mex([solverName '/interface/' solverName '.obj'], ... + [solverName '/interface/' solverName '_mex.obj'], ... + '-output', outputName, ... + ['-L' solverName '/lib'], libs{:}, intelLibsDirFlag, ... + '-ldecimal', '-lirc', '-lmmt', '-lsvml_dispmt', ... + legacyLibs, '-lIPHLPAPI.lib', '-largeArrayDims', '-silent'); + else + % it seems that we have been compiling with VS only, + % so we do not add the Intel libs and use only object files + mex([solverName, '/interface/' solverName '.obj'], ... + [solverName, '/interface/' solverName '_mex.obj'], ... + [solverName '/obj/*.obj'], '-lIPHLPAPI.lib', legacyLibs, ... + '-output', [outputName(2:end-1),'.',mexext], '-silent'); + end + % delete([solverName '/interface/*.obj']); + elseif( ismac ) + mex([solverName '/interface/*.o'], '-output', outputName, '-silent') + delete([solverName '/interface/*.o']); + else % we're on a linux system + mex([solverName '/interface/*.o'], '-output', outputName,'-lrt', '-silent') + delete([solverName '/interface/*.o']); + end +else + fprintf('Could not find source file. This file is meant to be used for building from source code.'); +end + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateCInterfaceCode.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateCInterfaceCode.m new file mode 100755 index 0000000..6dccdcd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateCInterfaceCode.m @@ -0,0 +1,526 @@ +function success = generateCInterfaceCode( self ) +%GENERATECINTERFACECODE generates C code that will prepare the user-defined +%parameters for the FORCES solver. It also assembles the correct outputs. +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +success = 0; + +% Get solver name from option +solverName = self.default_codeoptions.name; + +% Check if FORCES solver has been generated +if ~isdir(self.codeoptions{1}.name) && ~isdir(solverName) + error('Solver ''%s'' has not been generated!', solverName) +end + +% Make directories +if ~isdir(solverName) + mkdir(solverName) +end +if ~isdir([solverName '/interface']) + mkdir([solverName '/interface']) +end +if ~isdir([solverName '/include']) + mkdir([solverName '/include']) +end +if ~isdir([solverName '/solvers']) + mkdir([solverName '/solvers']) +end + +% % Move "internal" solver(s) to new directory ("hide" them from the user) +% for i=1:self.numSolvers +% copyfile(self.codeoptions{i}.name, [solverName '/solvers/' self.codeoptions{i}.name]); +% end + +% Remove "internal" solver(s) +% for i=1:self.numSolvers +% FORCEScleanup(self.codeoptions{i}.name, 'all'); +% end + + +% Create files +hFileID = fopen([solverName '/include/' solverName '.h'],'w'); +cFileID = fopen([solverName '/interface/' solverName '.c'],'w'); + +% Create h file +fprintf(hFileID, '/*\nHeader file containing definitions for C interface of %s,\n', solverName); +fprintf(hFileID, ' a fast costumized optimization solver.\n*/\n\n'); + +fprintf(hFileID, '#include \n\n'); + +fprintf(hFileID, '#ifndef __%s_H__\n',solverName); +fprintf(hFileID, '#define __%s_H__\n\n',solverName); + +% Visual Studio 2015 Compatibility +fprintf(hFileID, '/* For Visual Studio 2015 Compatibility */\n'); +fprintf(hFileID, '#if _MSC_VER == 1900\n'); +fprintf(hFileID, 'FILE * __cdecl __iob_func(void);\n'); +fprintf(hFileID, '#endif\n'); + +fprintf(hFileID, '/* DATA TYPE ------------------------------------------------------------*/\n'); +fprintf(hFileID, 'typedef double %s_FLOAT;\n\n',solverName); + +%fprintf(hFileID, 'typedef double %sINTERFACE_FLOAT;\n\n',solverName); + +fprintf(hFileID, '/* SOLVER SETTINGS ------------------------------------------------------*/\n'); +fprintf(hFileID, '/* print level */\n'); +fprintf(hFileID, '#ifndef %s_SET_PRINTLEVEL\n', solverName); +fprintf(hFileID, '#define %s_SET_PRINTLEVEL (%u)\n', solverName, self.default_codeoptions.printlevel); +fprintf(hFileID, '#endif\n\n'); + +fprintf(hFileID, '/* PARAMETERS -----------------------------------------------------------*/\n'); +fprintf(hFileID, '/* fill this with data before calling the solver! */\n'); +fprintf(hFileID, 'typedef struct %s_params\n',solverName); +fprintf(hFileID, '{\n'); + +for i=1:self.numParams + if self.paramSizes(i,1) == 1 && self.paramSizes(i,2) == 1 % scalar parameter + fprintf(hFileID, '\t/* scalar */\n'); + elseif self.paramSizes(i,1) == 1 % row vector + fprintf(hFileID, '\t/* row vector of length %u */\n',self.paramSizes(i,2)); + elseif self.paramSizes(i,2) == 1 % column vector + fprintf(hFileID, '\t/* column vector of length %u */\n',self.paramSizes(i,1)); + else + fprintf(hFileID, '\t/* matrix of size [%u x %u] (column major format) */\n',self.paramSizes(i,1),self.paramSizes(i,2)); + end + fprintf(hFileID, '\t%s_FLOAT %s[%u];\n\n',solverName,self.paramNames{i},prod(self.paramSizes(i,:))); +end + +fprintf(hFileID, '} %s_params;\n\n\n',solverName); + + +fprintf(hFileID, '/* OUTPUTS --------------------------------------------------------------*/\n'); +fprintf(hFileID, '/* the desired variables are put here by the solver */\n'); +fprintf(hFileID, 'typedef struct %s_output\n',solverName); +fprintf(hFileID, '{\n'); + +for i=1:numel(self.outputSize) + if self.outputSize{i}(1) == 1 && self.outputSize{i}(2) == 1 % scalar parameter + fprintf(hFileID, '\t/* scalar */\n'); + elseif self.outputSize{i}(1) == 1 % row vector + fprintf(hFileID, '\t/* row vector of length %u */\n',self.outputSize{i}(2)); + elseif self.outputSize{i}(2) == 1 % column vector + fprintf(hFileID, '\t/* column vector of length %u */\n',self.outputSize{i}(1)); + else + fprintf(hFileID, '\t/* matrix of size [%u x %u] (column major format) */\n',self.outputSize{i}(1),self.outputSize{i}(2)); + end + fprintf(hFileID, '\t%s_FLOAT %s[%u];\n\n',solverName,self.outputNames{i},prod(self.outputSize{i})); +end + +fprintf(hFileID, '} %s_output;\n\n\n',solverName); + +% Solver info (contains arrays if multiple solvers are used) +if self.numSolvers == 1 + fprintf(hFileID, '/* SOLVER INFO ----------------------------------------------------------*/\n'); + fprintf(hFileID, '/* diagnostic data from last interior point step */\n'); + fprintf(hFileID, 'typedef struct %s_info\n',solverName); + fprintf(hFileID, '{\n'); + + fprintf(hFileID, '\t/* iteration number */\n'); + fprintf(hFileID, '\tint it;\n\n'); + + fprintf(hFileID, '\t/* number of iterations needed to optimality (branch-and-bound) */\n'); + fprintf(hFileID, '\tint it2opt;\n\n'); + + fprintf(hFileID, '\t/* inf-norm of equality constraint residuals */\n'); + fprintf(hFileID, '\t%s_FLOAT res_eq;\n\n',solverName); + + if isfield(self.default_codeoptions, 'solvemethod') && strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % extra field for ADMM + fprintf(hFileID, '\t/* inf-norm of dual residual */\n'); + fprintf(hFileID, '\t%s_FLOAT res_dual;\n\n',solverName); + else % not for ADMM + fprintf(hFileID, '\t/* inf-norm of inequality constraint residuals */\n'); + fprintf(hFileID, '\t%s_FLOAT res_ineq;\n\n',solverName); + end + + fprintf(hFileID, '\t/* primal objective */\n'); + fprintf(hFileID, '\t%s_FLOAT pobj;\n\n',solverName); + + fprintf(hFileID, '\t/* dual objective */\n'); + fprintf(hFileID, '\t%s_FLOAT dobj;\n\n',solverName); + + fprintf(hFileID, '\t/* duality gap := pobj - dobj */\n'); + fprintf(hFileID, '\t%s_FLOAT dgap;\n\n',solverName); + + fprintf(hFileID, '\t/* relative duality gap := |dgap / pobj | */\n'); + fprintf(hFileID, '\t%s_FLOAT rdgap;\n\n',solverName); + + if ~isfield(self.default_codeoptions, 'solvemethod') || ~strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % not for ADMM + fprintf(hFileID, '\t/* duality measure */\n'); + fprintf(hFileID, '\t%s_FLOAT mu;\n\n',solverName); + + fprintf(hFileID, '\t/* duality measure (after affine step) */\n'); + fprintf(hFileID, '\t%s_FLOAT mu_aff;\n\n',solverName); + + fprintf(hFileID, '\t/* centering parameter */\n'); + fprintf(hFileID, '\t%s_FLOAT sigma;\n\n',solverName); + + fprintf(hFileID, '\t/* number of backtracking line search steps (affine direction) */\n'); + fprintf(hFileID, '\tint lsit_aff;\n\n'); + + fprintf(hFileID, '\t/* number of backtracking line search steps (combined direction) */\n'); + fprintf(hFileID, '\tint lsit_cc;\n\n'); + + fprintf(hFileID, '\t/* step size (affine direction) */\n'); + fprintf(hFileID, '\t%s_FLOAT step_aff;\n\n',solverName); + + fprintf(hFileID, '\t/* step size (combined direction) */\n'); + fprintf(hFileID, '\t%s_FLOAT step_cc;\n\n',solverName); + end + + fprintf(hFileID, '\t/* solvertime */\n'); + fprintf(hFileID, '\t%s_FLOAT solvetime;\n\n',solverName); + + fprintf(hFileID, '} %s_info;\n\n\n',solverName); +else + fprintf(hFileID, '/* SOLVER INFO ----------------------------------------------------------*/\n'); + fprintf(hFileID, '/* diagnostic data from last interior point step for every solver */\n'); + fprintf(hFileID, '/* (in total %u solvers are used) */\n',self.numSolvers); + fprintf(hFileID, 'typedef struct %s_info\n',solverName); + fprintf(hFileID, '{\n'); + + fprintf(hFileID, '\t/* iteration number */\n'); + fprintf(hFileID, '\tint it[%u];\n\n',self.numSolvers); + + fprintf(hFileID, '\t/* number of iterations needed to optimality (branch-and-bound) */\n'); + fprintf(hFileID, '\tint it2opt[%u];\n\n',self.numSolvers); + + fprintf(hFileID, '\t/* inf-norm of equality constraint residuals */\n'); + fprintf(hFileID, '\t%s_FLOAT res_eq[%u];\n\n',solverName,self.numSolvers); + + if isfield(self.default_codeoptions, 'solvemethod') && strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % extra field for ADMM + fprintf(hFileID, '\t/* inf-norm of inequality constraint residuals */\n'); + fprintf(hFileID, '\t%s_FLOAT res_dual[%u];\n\n',solverName,self.numSolvers); + else % not for ADMM + fprintf(hFileID, '\t/* inf-norm of inequality constraint residuals */\n'); + fprintf(hFileID, '\t%s_FLOAT res_ineq[%u];\n\n',solverName,self.numSolvers); + end + + fprintf(hFileID, '\t/* primal objective */\n'); + fprintf(hFileID, '\t%s_FLOAT pobj[%u];\n\n',solverName,self.numSolvers); + + fprintf(hFileID, '\t/* dual objective */\n'); + fprintf(hFileID, '\t%s_FLOAT dobj[%u];\n\n',solverName,self.numSolvers); + + fprintf(hFileID, '\t/* duality gap := pobj - dobj */\n'); + fprintf(hFileID, '\t%s_FLOAT dgap[%u];\n\n',solverName,self.numSolvers); + + fprintf(hFileID, '\t/* relative duality gap := |dgap / pobj | */\n'); + fprintf(hFileID, '\t%s_FLOAT rdgap[%u];\n\n',solverName,self.numSolvers); + + if ~isfield(self.default_codeoptions, 'solvemethod') || ~strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % not for ADMM + fprintf(hFileID, '\t/* duality measure */\n'); + fprintf(hFileID, '\t%s_FLOAT mu[%u];\n\n',solverName,self.numSolvers); + + fprintf(hFileID, '\t/* duality measure (after affine step) */\n'); + fprintf(hFileID, '\t%s_FLOAT mu_aff[%u];\n\n',solverName,self.numSolvers); + + fprintf(hFileID, '\t/* centering parameter */\n'); + fprintf(hFileID, '\t%s_FLOAT sigma[%u];\n\n',solverName,self.numSolvers); + + fprintf(hFileID, '\t/* number of backtracking line search steps (affine direction) */\n'); + fprintf(hFileID, '\tint lsit_aff[%u];\n\n',self.numSolvers); + + fprintf(hFileID, '\t/* number of backtracking line search steps (combined direction) */\n'); + fprintf(hFileID, '\tint lsit_cc[%u];\n\n',self.numSolvers); + + fprintf(hFileID, '\t/* step size (affine direction) */\n'); + fprintf(hFileID, '\t%s_FLOAT step_aff[%u];\n\n',solverName,self.numSolvers); + + fprintf(hFileID, '\t/* step size (combined direction) */\n'); + fprintf(hFileID, '\t%s_FLOAT step_cc[%u];\n\n',solverName,self.numSolvers); + end + + fprintf(hFileID, '\t/* solvertime */\n'); + fprintf(hFileID, '\t%s_FLOAT solvetime[%u];\n\n',solverName,self.numSolvers); + + fprintf(hFileID, '} %s_info;\n\n\n',solverName); +end + +% Solver function +fprintf(hFileID, '/* SOLVER FUNCTION DEFINITION -------------------------------------------*/\n'); +if self.numSolvers == 1 + fprintf(hFileID, '/* examine exitflag before using the result! */\n'); + fprintf(hFileID, 'int %s_solve(%s_params* params, %s_output* output, %s_info* info, FILE* fs);\n\n', solverName, solverName, solverName, solverName); +else + fprintf(hFileID, '/* examine all of the %u exitflags before using the result! */\n', self.numSolvers); + fprintf(hFileID, 'int* %s_solve(%s_params* params, %s_output* output, %s_info* info, FILE* fs);\n\n', solverName, solverName, solverName, solverName); +end + +fprintf(hFileID, '#endif\n'); + +% Close h-file +fclose(hFileID); + +% Write standard comment +fprintf(cFileID, '/*\n This is an interface for %s that ',solverName); +fprintf(cFileID, 'can be used to call the solver generated by FORCES Pro\n'); +fprintf(cFileID, '*/ \n\n'); + +fprintf(cFileID, '#include "../include/%s.h"\n',solverName); +for k=1:self.numSolvers + fprintf(cFileID, '#include "../include/%s.h"\n',self.codeoptions{k}.name); +end +fprintf(cFileID, '#include \n\n'); + +% Visual Studio 2015 Compatibility +fprintf(cFileID, '/* For Visual Studio 2015 Compatibility */\n'); +fprintf(cFileID, '#if _MSC_VER == 1900\n'); +fprintf(cFileID, 'FILE _iob[3];\n'); +fprintf(cFileID, 'FILE * __cdecl __iob_func(void)\n'); +fprintf(cFileID, '{\n'); +fprintf(cFileID, ' _iob[0] = *stdin;\n'); +fprintf(cFileID, ' _iob[1] = *stdout;\n'); +fprintf(cFileID, ' _iob[2] = *stderr;\n'); +fprintf(cFileID, ' return _iob;\n'); +fprintf(cFileID, '}\n'); +fprintf(cFileID, '#endif\n\n'); + +% Arguments for solver(s) +fprintf(cFileID, '/* Some memory */\n'); +for k=1:self.numSolvers + if ~self.solverIsBinary(k) % no binary variables + fprintf(cFileID, '%s_params params_%u;\n',self.codeoptions{k}.name,k); + fprintf(cFileID, '%s_output output_%u;\n',self.codeoptions{k}.name,k); + fprintf(cFileID, '%s_info info_%u;\n\n',self.codeoptions{k}.name,k); + else + fprintf(cFileID, '%s_binaryparams params_%u;\n',self.codeoptions{k}.name,k); + fprintf(cFileID, '%s_binaryoutput output_%u;\n',self.codeoptions{k}.name,k); + fprintf(cFileID, '%s_info info_%u;\n\n',self.codeoptions{k}.name,k); + end +end +if self.numSolvers == 1 + fprintf(cFileID, 'int exitflag;\n'); +else + fprintf(cFileID, 'int exitflag[%u];\n',self.numSolvers); +end + +% Start of interface function +if self.numSolvers == 1 + fprintf(cFileID, 'int %s_solve(%s_params* params, %s_output* output, %s_info* info, FILE* fs) {\n', solverName, solverName, solverName, solverName); +else + fprintf(cFileID, 'int* %s_solve(%s_params* params, %s_output* output, %s_info* info, FILE* fs) {\n', solverName, solverName, solverName, solverName); +end + +fprintf(cFileID, '\t/* define variables */\n'); +fprintf(cFileID, '\tint i;\n'); + +% We need managment code for every solver +for k=1:self.numSolvers + fprintf(cFileID, '\t/* SOLVER %u --------------------------------------------------------*/\n',k); + + fprintf(cFileID, '\t/*Assigning parameter values of solver #%u*/\n',k); + solverName = self.codeoptions{k}.name; + + % Set FORCES parameter values + fprintf(cFileID, '\t/*Assigning parameter values of solver #%u*/\n',k); + if self.solverHasParams(k) % otherwise there is fake one + problem = self.standardParamValues{k}; + fields = fieldnames(problem); + % Go through all parameters (fields contains p_1, p_2, ...) + for i=1:numel(fields) + paramMap = self.forcesParamMap{k}.(fields{i}); + % Go through all elements of this parameter + for j=1:numel(problem.(fields{i})) + ps = find(paramMap(1,:) == j); % all relevant param map entries + if isempty(ps) + % Load standard value + fprintf(cFileID, '\tparams_%u.%s[%u] = %.15g;\n',k,fields{i},j-1,problem.(fields{i})(j)); + else + if abs(problem.(fields{i})(j)) > 1e-15 % only print standard value if it's not 0 + fprintf(cFileID, '\tparams_%u.%s[%u] = %.15g',k,fields{i},j-1,problem.(fields{i})(j)); % print std value + + % Add additive parameters + for p=ps + factor = paramMap(2,p); + valueMatrix = paramMap(3,p); + valueIndex = paramMap(4,p); + fprintf(cFileID, ' + %.15g * params->%s[%u]',factor,self.paramNames{valueMatrix},valueIndex-1); + end + fprintf(cFileID, ';\n'); + else + % print first additive param + factor = paramMap(2,ps(1)); + valueMatrix = paramMap(3,ps(1)); + valueIndex = paramMap(4,ps(1)); + fprintf(cFileID, '\tparams_%u.%s[%u] = %.15g * params->%s[%u]',k,fields{i},j-1,factor,self.paramNames{valueMatrix},valueIndex-1); + % Add other additive parameters + for p=ps(2:end) + factor = paramMap(2,p); + valueMatrix = paramMap(3,p); + valueIndex = paramMap(4,p); + fprintf(cFileID, ' + %.15g * params->%s[%u]',factor,self.paramNames{valueMatrix},valueIndex-1); + end + fprintf(cFileID, ';\n'); + end + end + end + fprintf(cFileID, '\n'); + end + else % we need the value of the fake parameter + for i=1:numel(self.standardParamValues{k}) + fprintf(cFileID, '\tparams_%u.p[%u] = %.15g;\n',k,i-1,self.standardParamValues{k}(i)); + end + end + + fprintf(cFileID, '\t/* call solver #%u */\n',k); + if self.numSolvers == 1 + fprintf(cFileID, '\texitflag = %s_solve(¶ms_%u, &output_%u, &info_%u, fs );\n\n',solverName,k,k,k); + else + fprintf(cFileID, '\texitflag[%u] = %s_solve(¶ms_%u, &output_%u, &info_%u, fs );\n\n',k-1,solverName,k,k,k); + end + + % Diagnostics + if self.numSolvers == 1 + fprintf(cFileID, '\t/* iterations */\n'); + fprintf(cFileID, '\tinfo->it = info_%u.it;\n\n',k); + + fprintf(cFileID, '\t/* iterations to optimality (branch and bound) */\n'); + fprintf(cFileID, '\tinfo->it2opt = info_%u.it2opt;\n\n',k); + + fprintf(cFileID, '\t/* res_eq */\n'); + fprintf(cFileID, '\tinfo->res_eq = info_%u.res_eq;\n\n',k); + + if isfield(self.default_codeoptions, 'solvemethod') && strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % extra field for ADMM + fprintf(cFileID, '\t/* res_dual */\n'); + fprintf(cFileID, '\tinfo->res_dual = info_%u.res_dual;\n\n',k); + else % not for ADMM + fprintf(cFileID, '\t/* res_ineq */\n'); + fprintf(cFileID, '\tinfo->res_ineq = info_%u.res_ineq;\n\n',k); + end + + fprintf(cFileID, '\t/* pobj */\n'); + fprintf(cFileID, '\tinfo->pobj = info_%u.pobj;\n\n',k); + + fprintf(cFileID, '\t/* dobj */\n'); + fprintf(cFileID, '\tinfo->dobj = info_%u.dobj;\n\n',k); + + fprintf(cFileID, '\t/* dgap */\n'); + fprintf(cFileID, '\tinfo->dgap = info_%u.dgap;\n\n',k); + + fprintf(cFileID, '\t/* rdgap */\n'); + fprintf(cFileID, '\tinfo->rdgap = info_%u.rdgap;\n\n',k); + + if ~isfield(self.default_codeoptions, 'solvemethod') || ~strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % not for ADMM + fprintf(cFileID, '\t/* mu */\n'); + fprintf(cFileID, '\tinfo->mu = info_%u.mu;\n\n',k); + + fprintf(cFileID, '\t/* mu_aff */\n'); + fprintf(cFileID, '\tinfo->mu_aff = info_%u.mu_aff;\n\n',k); + + fprintf(cFileID, '\t/* sigma */\n'); + fprintf(cFileID, '\tinfo->sigma = info_%u.sigma;\n\n',k); + + fprintf(cFileID, '\t/* lsit_aff */\n\n'); + fprintf(cFileID, '\tinfo->lsit_aff = info_%u.lsit_aff;\n\n',k); + + fprintf(cFileID, '\t/* lsit_cc */\n'); + fprintf(cFileID, '\tinfo->lsit_cc = info_%u.lsit_cc;\n\n',k); + + fprintf(cFileID, '\t/* step_aff */\n'); + fprintf(cFileID, '\tinfo->step_aff = info_%u.step_aff;\n\n',k); + + fprintf(cFileID, '\t/* step_cc */\n'); + fprintf(cFileID, '\tinfo->step_cc = info_%u.step_cc;\n\n',k); + end + + fprintf(cFileID, '\t/* solver time */\n'); + fprintf(cFileID, '\tinfo->solvetime = info_%u.solvetime;\n\n\n',k); + else + fprintf(cFileID, '\t/* iterations */\n'); + fprintf(cFileID, '\tinfo->it[%u] = info_%u.it;\n\n',k-1,k); + + fprintf(cFileID, '\t/* iterations to optimality (branch and bound) */\n'); + fprintf(cFileID, '\tinfo->it2opt[%u] = info_%u.it2opt;\n\n',k-1,k); + + fprintf(cFileID, '\t/* res_eq */\n'); + fprintf(cFileID, '\tinfo->res_eq[%u] = info_%u.res_eq;\n\n',k-1,k); + + + if isfield(self.default_codeoptions, 'solvemethod') && strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % extra field for ADMM + fprintf(cFileID, '\t/* res_ineq */\n'); + fprintf(cFileID, '\tinfo->res_dual[%u] = info_%u.res_dual;\n\n',k-1,k); + else % not for ADMM + fprintf(cFileID, '\t/* res_ineq */\n'); + fprintf(cFileID, '\tinfo->res_ineq[%u] = info_%u.res_ineq;\n\n',k-1,k); + end + + fprintf(cFileID, '\t/* pobj */\n'); + fprintf(cFileID, '\tinfo->pobj[%u] = info_%u.pobj;\n\n',k-1,k); + + fprintf(cFileID, '\t/* dobj */\n'); + fprintf(cFileID, '\tinfo->dobj[%u] = info_%u.dobj;\n\n',k-1,k); + + fprintf(cFileID, '\t/* dgap */\n'); + fprintf(cFileID, '\tinfo->dgap[%u] = info_%u.dgap;\n\n',k-1,k); + + fprintf(cFileID, '\t/* rdgap */\n'); + fprintf(cFileID, '\tinfo->rdgap[%u] = info_%u.rdgap;\n\n',k-1,k); + + if ~isfield(self.default_codeoptions, 'solvemethod') || ~strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % not for ADMM + fprintf(cFileID, '\t/* mu */\n'); + fprintf(cFileID, '\tinfo->mu[%u] = info_%u.mu;\n\n',k-1,k); + + fprintf(cFileID, '\t/* mu_aff */\n'); + fprintf(cFileID, '\tinfo->mu_aff[%u] = info_%u.mu_aff;\n\n',k-1,k); + + fprintf(cFileID, '\t/* sigma */\n'); + fprintf(cFileID, '\tinfo->sigma[%u] = info_%u.sigma;\n\n',k-1,k); + + fprintf(cFileID, '\t/* lsit_aff */\n'); + fprintf(cFileID, '\tinfo->lsit_aff[%u] = info_%u.lsit_aff;\n\n',k-1,k); + + fprintf(cFileID, '\t/* lsit_cc */\n'); + fprintf(cFileID, '\tinfo->lsit_cc[%u] = info_%u.lsit_cc;\n\n',k-1,k); + + fprintf(cFileID, '\t/* step_aff */\n'); + fprintf(cFileID, '\tinfo->step_aff[%u] = info_%u.step_aff;\n\n',k-1,k); + + fprintf(cFileID, '\t/* step_cc */\n'); + fprintf(cFileID, '\tinfo->step_cc[%u] = info_%u.step_cc;\n\n',k-1,k); + end + + fprintf(cFileID, '\t/* solver time */\n'); + fprintf(cFileID, '\tinfo->solvetime[%u] = info_%u.solvetime;\n\n\n',k-1,k); + end +end + +% Put outputs together +fprintf(cFileID, '\t/* OUTPUTS -----------------------------------------------------------*/\n'); +fprintf(cFileID, '\t/*Build outputs*/\n'); +mapOffset = 0; % needed for outputMap +for i=1:numel(self.outputBase) % every output has a base + base = self.outputBase{i}; + for j=1:size(base,1) % elements (decision var or parameters) needed for this output + fprintf(cFileID, '\toutput->%s[%u] = %.15g',self.outputNames{i},j-1,base(j,1)); + idx = find(base(j,2:end)); % index of necessary elements inside outputMap (plus offset) + for k=idx + if self.outputMap(1,k+mapOffset) == 1 + fprintf(cFileID, ' + %.15g * output_%u.o_%u[0]',base(j,k+1),self.outputMap(2,k+mapOffset),self.outputMap(3,k+mapOffset)); + elseif self.outputMap(1,k+mapOffset) == 2 + fprintf(cFileID, ' + %.15g * params->%s[%u]',base(j,k+1),self.paramNames{self.outputMap(2,k+mapOffset)},self.outputMap(3,k+mapOffset)-1); + else + error('Unknown output variable type'); + end + end + + fprintf(cFileID, ';\n\n\n'); + end + mapOffset = mapOffset + size(base,1); +end + + +fprintf(cFileID, '\treturn exitflag;\n'); +fprintf(cFileID, '}'); % end of mex-function + +% Don't forget to close C file +fclose(cFileID); + +success = 1; + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateHelp.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateHelp.m new file mode 100755 index 0000000..4dddb33 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateHelp.m @@ -0,0 +1,128 @@ +function success = generateHelp( self ) +%GENERATEHELP generates an m-file containing a description of the solver +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +success = 0; + +% Get solver name from option +solverName = self.default_codeoptions.name; + +% Create file +mFileID = fopen([solverName '.m'],'w'); + +% Write documentation +fprintf(mFileID, '%% %s - a fast optimizer generated by FORCES Pro through Y2F\n',solverName); % TODO interior point?? + +% More than one internal solver --> say that! +if self.numSolvers > 1 + fprintf(mFileID, '%%\n'); + fprintf(mFileID, '%% %s was generated based on a separable problem.',solverName); + fprintf(mFileID, '%% Internally, %u separate solver are used.\n',self.numSolvers); +end + +% Parameter description +fprintf(mFileID, '%%\n'); +fprintf(mFileID, '%% OUTPUT = %s(PARAMS) solves a multistage problem\n',solverName); +fprintf(mFileID, '%% subject to the parameters supplied in a cell array with the following elements:\n'); + +for i=1:self.numParams + if self.paramSizes(i,1) == 1 && self.paramSizes(i,2) == 1 % scalar parameter + fprintf(mFileID, '%% PARAMS{%u} is %s (a scalar)\n',i,self.paramNames{i}); + elseif self.paramSizes(i,1) == 1 % row vector + fprintf(mFileID, '%% PARAMS{%u} is %s (row vector of length %u)\n',i,self.paramNames{i},self.paramSizes(i,2)); + elseif self.paramSizes(i,2) == 1 % column vector + fprintf(mFileID, '%% PARAMS{%u} is %s (column vector of length %u)\n',i,self.paramNames{i},self.paramSizes(i,1)); + else + fprintf(mFileID, '%% PARAMS{%u} is %s (matrix of size [%u x %u])\n',i,self.paramNames{i},self.paramSizes(i,1),self.paramSizes(i,2)); + end +end + +% Ouput description +fprintf(mFileID, '%%\n'); +fprintf(mFileID, '%% OUTPUT is a cell array containg the values of the last iteration of the solver where\n'); + +for i=1:numel(self.outputSize) + if self.outputSize{i}(1) == 1 && self.outputSize{i}(2) == 1 % scalar output + fprintf(mFileID, '%% OUTPUT{%u} is %s (a scalar)\n',i,self.outputNames{i}); + elseif self.outputSize{i}(1) == 1 % row vector + fprintf(mFileID, '%% OUTPUT{%u} is %s (row vector of length %u)\n',i,self.outputNames{i},self.outputSize{i}(2)); + elseif self.outputSize{i}(2) == 1 % column vector + fprintf(mFileID, '%% OUTPUT{%u} is %s (column vector of length %u)\n',i,self.outputNames{i},self.outputSize{i}(1)); + else + fprintf(mFileID, '%% OUTPUT{%u} is %s (matrix of size [%u x %u])\n',i,self.outputNames{i},self.outputSize{i}(1),self.outputSize{i}(2)); + end +end + +% Exitflag description +if self.numSolvers == 1 + fprintf(mFileID, '%%\n'); + fprintf(mFileID, '%% [OUTPUT, EXITFLAG] = %s(PARAMS) returns additionally\n',solverName); + fprintf(mFileID, '%% the integer EXITFLAG indicating the state of the solution with \n'); + fprintf(mFileID, '%% 1 - OPTIMAL solution has been found (subject to desired accuracy)\n'); + fprintf(mFileID, '%% 0 - Timeout - maximum number of iterations reached\n'); + fprintf(mFileID, '%% -7 - Method could not progress. Problem may be infeasible.\n'); + fprintf(mFileID, '%% -100 - License error\n'); + fprintf(mFileID, '%%\n'); +else + fprintf(mFileID, '%%\n'); + fprintf(mFileID, '%% [OUTPUT, EXITFLAGS] = %s(PARAMS) returns additionally\n',solverName); + fprintf(mFileID, '%% the integer row vector EXITFLAGS indicating the state of the solution\n'); + fprintf(mFileID, '%% for the different solvers with \n'); + fprintf(mFileID, '%% EXITFLAGS(i) = 1 - OPTIMAL solution has been found (subject to desired accuracy)\n'); + fprintf(mFileID, '%% EXITFLAGS(i) = 0 - Timeout - maximum number of iterations reached\n'); + fprintf(mFileID, '%% EXITFLAGS(i) = -7 - Method could not progress. Problem may be infeasible.\n'); + fprintf(mFileID, '%% EXITFLAGS(i) = -100 - License error\n'); + fprintf(mFileID, '%% for the i-th solver\n'); + fprintf(mFileID, '%%\n'); +end + +% Info fields description +if self.numSolvers == 1 + fprintf(mFileID, '%% [OUTPUT, EXITFLAG, INFO] = %s(PARAMS) returns \n',solverName); + fprintf(mFileID, '%% additional information about the last iterate:\n'); + fprintf(mFileID, '%% INFO.it - number of iterations that lead to this result\n'); + fprintf(mFileID, '%% INFO.res_eq - max. equality constraint residual\n'); + fprintf(mFileID, '%% INFO.res_ineq - max. inequality constraint residual\n'); + fprintf(mFileID, '%% INFO.pobj - primal objective\n'); + fprintf(mFileID, '%% INFO.dobj - dual objective\n'); + fprintf(mFileID, '%% INFO.dgap - duality gap := pobj - dobj\n'); + fprintf(mFileID, '%% INFO.rdgap - relative duality gap := |dgap / pobj|\n'); + fprintf(mFileID, '%% INFO.mu - duality measure\n'); + fprintf(mFileID, '%% INFO.sigma - centering parameter\n'); + fprintf(mFileID, '%% INFO.lsit_aff - iterations of affine line search\n'); + fprintf(mFileID, '%% INFO.lsit_cc - iterations of line search (combined direction)\n'); + fprintf(mFileID, '%% INFO.step_aff - step size (affine direction)\n'); + fprintf(mFileID, '%% INFO.step_cc - step size (centering direction)\n'); + fprintf(mFileID, '%% INFO.solvetime - Time needed for solve (wall clock time)\n'); + fprintf(mFileID, '%%\n'); +else + fprintf(mFileID, '%% [OUTPUT, EXITFLAGS, INFO] = %s(PARAMS) returns \n',solverName); + fprintf(mFileID, '%% additional information about the last iterate of the i-th solver:\n'); + fprintf(mFileID, '%% INFO(i).it - number of iterations that lead to this result\n'); + fprintf(mFileID, '%% INFO(i).res_eq - max. equality constraint residual\n'); + fprintf(mFileID, '%% INFO(i).res_ineq - max. inequality constraint residual\n'); + fprintf(mFileID, '%% INFO(i).pobj - primal objective\n'); + fprintf(mFileID, '%% INFO(i).dobj - dual objective\n'); + fprintf(mFileID, '%% INFO(i).dgap - duality gap := pobj - dobj\n'); + fprintf(mFileID, '%% INFO(i).rdgap - relative duality gap := |dgap / pobj|\n'); + fprintf(mFileID, '%% INFO(i).mu - duality measure\n'); + fprintf(mFileID, '%% INFO(i).sigma - centering parameter\n'); + fprintf(mFileID, '%% INFO(i).lsit_aff - iterations of affine line search\n'); + fprintf(mFileID, '%% INFO(i).lsit_cc - iterations of line search (combined direction)\n'); + fprintf(mFileID, '%% INFO(i).step_aff - step size (affine direction)\n'); + fprintf(mFileID, '%% INFO(i).step_cc - step size (centering direction)\n'); + fprintf(mFileID, '%% INFO(i).solvetime - Time needed for solve (wall clock time)\n'); + fprintf(mFileID, '%%\n'); +end + + +fprintf(mFileID, '%% See also COPYING'); + +% Close file +fclose(mFileID); + +success = 1; \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateMEXInterfaceCode.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateMEXInterfaceCode.m new file mode 100755 index 0000000..dfd0663 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateMEXInterfaceCode.m @@ -0,0 +1,390 @@ +function success = generateMEXInterfaceCode( self ) +%GENERATEMEXINTERFACECODE generates MEX C code that will prepare the +%parameters for the FORCES solver. It also assembles the correct outputs. +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +success = 0; + +% Get solver name from option +solverName = self.default_codeoptions.name; + +% Check if FORCES solver has been generated +if ~isdir(solverName) + error('Solver ''%s'' has not been generated!', solverName) +end + +fileID = fopen([solverName '/interface/' solverName '_mex.c'],'w'); + +% Write standard comment +fprintf(fileID, '/*\n This is an interface for %s that ',solverName); +fprintf(fileID, 'is used by optimizerFORCES to call the solver\n'); +fprintf(fileID, '*/ \n\n'); + +% Includes +fprintf(fileID, '#include "mex.h"\n'); +fprintf(fileID, '#include "math.h"\n'); +fprintf(fileID, '#include "../include/%s.h"\n',solverName,solverName); +fprintf(fileID, '#include \n\n'); + +% Copy functions stolen from FORCES +fprintf(fileID, '/* copy functions */\n'); +fprintf(fileID, 'void copyCArrayToM(double *src, double *dest, int dim) {\n'); +fprintf(fileID, '\twhile (dim--) {\n'); +fprintf(fileID, '\t\t*dest++ = (double)*src++;\n'); +fprintf(fileID, '\t}\n'); +fprintf(fileID, '}\n'); +fprintf(fileID, 'void copyMArrayToC(double *src, double *dest, int dim) {\n'); +fprintf(fileID, '\twhile (dim--) {\n'); +fprintf(fileID, '\t\t*dest++ = (double) (*src++) ;\n'); +fprintf(fileID, '\t}\n'); +fprintf(fileID, '}\n\n'); + +% Arguments for solver(s) +fprintf(fileID, '/* Some memory for mex-function */\n'); +fprintf(fileID, '%s_params params;\n',solverName); +fprintf(fileID, '%s_output output;\n',solverName); +fprintf(fileID, '%s_info info;\n\n',solverName); + +% Start of MEX function +fprintf(fileID, '/* THE mex-function */\n'); +fprintf(fileID, 'void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] ) {\n'); +fprintf(fileID, '\t/* file pointer for printing */\n'); +fprintf(fileID, '\tFILE *fp = NULL;\n\n'); + +fprintf(fileID, '\t/* define variables */\n'); +fprintf(fileID, '\tmxArray *par;\n\n'); +fprintf(fileID, '\tconst mxArray *param_values = prhs[0];\n'); +fprintf(fileID, '\tmxArray *outvar;\n'); +fprintf(fileID, '\tint i;\n'); +if self.numSolvers == 1 + fprintf(fileID, '\tint exitflag;\n'); +else + fprintf(fileID, '\tint *exitflag;\n'); +end +fprintf(fileID, '\tconst char *fname;\n\n'); + +% Solver info fields +if ~isfield(self.default_codeoptions, 'solvemethod') || ~strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % not for ADMM + fprintf(fileID, '\tconst char *infofields[16] = { "it", "it2opt", "res_eq", "res_ineq", "pobj", "dobj", "dgap", "rdgap", "mu", "mu_aff", "sigma", "lsit_aff", "lsit_cc", "step_aff", "step_cc", "solvetime"};\n\n'); +else % ADMM has slightly different fields + fprintf(fileID, '\tconst char *infofields[9] = { "it", "it2opt", "res_eq", "res_dual", "pobj", "dobj", "dgap", "rdgap", "solvetime"};\n\n'); +end + +% Check number of in- and outputs +fprintf(fileID, '\t/* Check for proper number of arguments */\n'); +fprintf(fileID, '\tif (nrhs != 1) {\n'); +fprintf(fileID, '\t\tmexErrMsgTxt("This function requires exactly 1 input: parameter value cell array.");\n'); +fprintf(fileID, '\t}\n'); +fprintf(fileID, '\tif (nlhs > 3) {\n'); +fprintf(fileID, '\t\tmexErrMsgTxt("This function returns at most 3 outputs.");\n'); +fprintf(fileID, '\t}\n'); + +% Check type of input +fprintf(fileID, '\t/* Check whether params is actually a cell array */\n'); +fprintf(fileID, '\tif( !mxIsCell(param_values) ) {\n'); +fprintf(fileID, '\t\tmexErrMsgTxt("%s requires a cell array as input.");\n',solverName); +fprintf(fileID, '\t}\n\n'); + +% Check length of input +fprintf(fileID, '\t/* Check whether params has the right number of elements */\n'); +fprintf(fileID, '\tif( mxGetNumberOfElements(param_values) != %u ) {\n',self.numParams); +fprintf(fileID, '\t\tmexErrMsgTxt("Input must have %u elements.");\n',self.numParams); +fprintf(fileID, '\t}\n\n'); + +% Check sizes of parameter values and load their values +fprintf(fileID, '\t/* Load param values into C arrays and check their size */\n'); +for i=1:self.numParams + % Get cell element + fprintf(fileID, '\tpar = mxGetCell(param_values,%u);\n',i-1); + + % Cell element not found + fprintf(fileID, '\tif( par == NULL ) {\n'); + fprintf(fileID, '\t\tmexErrMsgTxt("Parameter #%u not found");\n',i); + fprintf(fileID, '\t}\n'); + + % Parameter value is not double + fprintf(fileID, '\tif( !mxIsDouble(par) ) {\n'); + fprintf(fileID, '\t\tmexErrMsgTxt("Parameter #%u must be a double.");\n',i); + fprintf(fileID, '\t}\n'); + + % Check parameter value size + fprintf(fileID, '\tif( mxGetM(par) != %u || mxGetN(par) != %u ) {\n',self.paramSizes(i,1),self.paramSizes(i,2)); + fprintf(fileID, '\t\tmexErrMsgTxt("Parameter #%u must be of size [%u x %u]");\n',i,self.paramSizes(i,1),self.paramSizes(i,2)); + fprintf(fileID, '\t}\n'); + + % Copy parameter value + fprintf(fileID, '\tcopyMArrayToC(mxGetPr(par),params.%s,%u);\n\n',self.paramNames{i},prod(self.paramSizes(i,:))); +end + +% If the user wanted output, we need to store it +fprintf(fileID, '\t#if %s_SET_PRINTLEVEL > 0\n',solverName); +fprintf(fileID, '\t\t/* Prepare file for printfs */\n'); +fprintf(fileID, '\t\t/*fp = freopen("stdout_temp","w+",stdout);*/\n'); +fprintf(fileID, '\t\tfp = fopen("stdout_temp","w+");\n'); +fprintf(fileID, '\t\tif( fp == NULL ) {\n'); +fprintf(fileID, '\t\t\tmexErrMsgTxt("freopen of stdout did not work.");\n'); +fprintf(fileID, '\t\t}\n'); +fprintf(fileID, '\t\trewind(fp);\n'); +fprintf(fileID, '\t#endif\n\n'); + +fprintf(fileID, '\t/* call solver */\n'); +fprintf(fileID, '\texitflag = %s_solve(¶ms, &output, &info, fp );\n\n',solverName); + +% Print output in console +fprintf(fileID, '\t#if %s_SET_PRINTLEVEL > 0\n',solverName); +fprintf(fileID, '\t\t/* Read contents of printfs printed to file */\n'); +fprintf(fileID, '\t\trewind(fp);\n'); +fprintf(fileID, '\t\twhile( (i = fgetc(fp)) != EOF ) {\n'); +fprintf(fileID, '\t\t\tmexPrintf("%%c",i);\n'); +fprintf(fileID, '\t\t}\n'); +fprintf(fileID, '\t\tfclose(fp);\n'); +fprintf(fileID, '\t#endif\n\n'); + +% Put outputs together +if self.outputIsCell % multiple outputs possible + % Create MATLAB output cell array + fprintf(fileID, '\tplhs[0] = mxCreateCellMatrix(1, %u);\n',numel(self.outputBase)); + for i=1:numel(self.outputBase) % every output has a base + outSize = self.outputSize{i}; + fprintf(fileID, '\toutvar = mxCreateDoubleMatrix(%u, %u, mxREAL);\n',outSize(1),outSize(2)); + fprintf(fileID, '\tcopyCArrayToM(output.%s, mxGetPr(outvar), %u);\n',self.outputNames{i},prod(outSize)); + fprintf(fileID, '\tmxSetCell(plhs[0], %u, outvar);\n\n',i-1); + end +else % only one output + % Create MATLAB output matrix + outSize = self.outputSize{1}; + fprintf(fileID, '\tplhs[0] = mxCreateDoubleMatrix(%u, %u, mxREAL);\n',outSize(1),outSize(2)); + fprintf(fileID, '\tcopyCArrayToM(output.%s, mxGetPr(plhs[0]), %u);\n\n',self.outputNames{1},prod(outSize)); +end + +% add other output arguments (exitflags and info) +if self.numSolvers > 1 + fprintf(fileID, '\t/* copy exitflags */\n'); + fprintf(fileID, '\tif( nlhs > 1 ) {\n'); + fprintf(fileID, '\t\tplhs[1] = mxCreateDoubleMatrix(1, %u, mxREAL);\n',self.numSolvers); + for i=1:self.numSolvers + fprintf(fileID, '\t\t*(mxGetPr(plhs[1])+%u) = (double)exitflag[%u];\n',i-1,i-1); + end + fprintf(fileID, '\t}\n\n'); + + fprintf(fileID, '\t/* copy info structs */\n'); + fprintf(fileID, '\tif( nlhs > 2 ) {\n'); + if isfield(self.default_codeoptions, 'solvemethod') && strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % ADMM has different fields + fprintf(fileID, '\t\tplhs[2] = mxCreateStructMatrix(%u, 1, 9, infofields);\n\n', self.numSolvers); + else + fprintf(fileID, '\t\tplhs[2] = mxCreateStructMatrix(%u, 1, 16, infofields);\n\n', self.numSolvers); + end + + for i=1:self.numSolvers + fprintf(fileID, '\t\t/* info for solver #%u */\n',i); + + fprintf(fileID, '\t\t/* iterations */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = (double)info.it[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "it", outvar);\n\n',i-1); + + fprintf(fileID, '\t\t/* iterations to optimality (branch and bound) */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = (double)info.it2opt[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "it2opt", outvar);\n\n',i-1); + + fprintf(fileID, '\t\t/* res_eq */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.res_eq[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "res_eq", outvar);\n\n',i-1); + + if isfield(self.default_codeoptions, 'solvemethod') && strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % extra field for ADMM + fprintf(fileID, '\t\t/* res_dual */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.res_dual[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "res_dual", outvar);\n\n',i-1); + else + fprintf(fileID, '\t\t/* res_ineq */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.res_ineq[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "res_ineq", outvar);\n\n',i-1); + end + + fprintf(fileID, '\t\t/* pobj */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.pobj[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "pobj", outvar);\n\n',i-1); + + fprintf(fileID, '\t\t/* dobj */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.dobj[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "dobj", outvar);\n\n',i-1); + + fprintf(fileID, '\t\t/* dgap */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.dgap[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "dgap", outvar);\n\n',i-1); + + fprintf(fileID, '\t\t/* rdgap */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.rdgap[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "rdgap", outvar);\n\n',i-1); + + if ~isfield(self.default_codeoptions, 'solvemethod') || ~strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % not for ADMM + fprintf(fileID, '\t\t/* mu */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.mu[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "mu", outvar);\n\n',i-1); + + fprintf(fileID, '\t\t/* mu_aff */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.mu_aff[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "mu_aff", outvar);\n\n',i-1); + + fprintf(fileID, '\t\t/* sigma */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.sigma[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "sigma", outvar);\n\n',i-1); + + fprintf(fileID, '\t\t/* lsit_aff */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = (double)info.lsit_aff[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "lsit_aff", outvar);\n\n',i-1); + + fprintf(fileID, '\t\t/* lsit_cc */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = (double)info.lsit_cc[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "lsit_cc", outvar);\n\n',i-1); + + fprintf(fileID, '\t\t/* step_aff */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.step_aff[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "step_aff", outvar);\n\n',i-1); + + fprintf(fileID, '\t\t/* step_cc */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.step_cc[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "step_cc", outvar);\n\n',i-1); + end + + fprintf(fileID, '\t\t/* solver time */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.solvetime[%u];\n',i-1); + fprintf(fileID, '\t\tmxSetField(plhs[2], %u, "solvetime", outvar);\n\n',i-1); + end + fprintf(fileID, '\t}\n'); +else % only one solver --> no cell arrays necessary + fprintf(fileID, '\t/* copy exitflag */\n'); + fprintf(fileID, '\tif( nlhs > 1 ) {\n'); + fprintf(fileID, '\t\tplhs[1] = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*(mxGetPr(plhs[1])) = (double)exitflag;\n'); + fprintf(fileID, '\t}\n\n'); + + fprintf(fileID, '\t/* copy info struct */\n'); + fprintf(fileID, '\tif( nlhs > 2 ) {\n'); + if isfield(self.default_codeoptions, 'solvemethod') && strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % ADMM has different fields + fprintf(fileID, '\t\tplhs[2] = mxCreateStructMatrix(1, 1, 9, infofields);\n\n'); + else + fprintf(fileID, '\t\tplhs[2] = mxCreateStructMatrix(1, 1, 16, infofields);\n\n'); + end + + fprintf(fileID, '\t\t/* iterations */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = (double)info.it;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "it", outvar);\n\n'); + + fprintf(fileID, '\t\t/* iterations to optimality (branch and bound) */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = (double)info.it2opt;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "it2opt", outvar);\n\n'); + + fprintf(fileID, '\t\t/* res_eq */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.res_eq;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "res_eq", outvar);\n\n'); + + if isfield(self.default_codeoptions, 'solvemethod') && strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % extra field for ADMM + fprintf(fileID, '\t\t/* res_dual */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.res_dual;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "res_dual", outvar);\n\n'); + else % not for ADMM + fprintf(fileID, '\t\t/* res_ineq */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.res_ineq;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "res_ineq", outvar);\n\n'); + end + + fprintf(fileID, '\t\t/* pobj */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.pobj;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "pobj", outvar);\n\n'); + + fprintf(fileID, '\t\t/* dobj */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.dobj;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "dobj", outvar);\n\n'); + + fprintf(fileID, '\t\t/* dgap */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.dgap;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "dgap", outvar);\n\n'); + + fprintf(fileID, '\t\t/* rdgap */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.rdgap;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "rdgap", outvar);\n\n'); + + if ~isfield(self.default_codeoptions, 'solvemethod') || ~strcmpi(self.default_codeoptions.solvemethod, 'ADMM') % not for ADMM + fprintf(fileID, '\t\t/* mu */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.mu;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "mu", outvar);\n\n'); + + fprintf(fileID, '\t\t/* mu_aff */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.mu_aff;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "mu_aff", outvar);\n\n'); + + fprintf(fileID, '\t\t/* sigma */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.sigma;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "sigma", outvar);\n\n'); + + fprintf(fileID, '\t\t/* lsit_aff */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = (double)info.lsit_aff;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "lsit_aff", outvar);\n\n'); + + fprintf(fileID, '\t\t/* lsit_cc */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = (double)info.lsit_cc;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "lsit_cc", outvar);\n\n'); + + fprintf(fileID, '\t\t/* step_aff */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.step_aff;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "step_aff", outvar);\n\n'); + + fprintf(fileID, '\t\t/* step_cc */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.step_cc;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "step_cc", outvar);\n\n'); + end + + fprintf(fileID, '\t\t/* solver time */\n'); + fprintf(fileID, '\t\toutvar = mxCreateDoubleMatrix(1, 1, mxREAL);\n'); + fprintf(fileID, '\t\t*mxGetPr(outvar) = info.solvetime;\n'); + fprintf(fileID, '\t\tmxSetField(plhs[2], 0, "solvetime", outvar);\n'); + + fprintf(fileID, '\t}\n'); +end + +fprintf(fileID, '}'); % end of mex-function + +% Don't forget to close MEX file +fclose(fileID); + +success = 1; + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateSimulinkBlock.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateSimulinkBlock.m new file mode 100755 index 0000000..1d38c1e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateSimulinkBlock.m @@ -0,0 +1,144 @@ +function generateSimulinkBlock( self ) +%GENERATESIMULINKBLOCK Create a model containing a Simulink block for the +%solver +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +success = 0; + +% Get solver name from option +solverName = self.default_codeoptions.name; + +% Check if FORCES solver has been generated +if ~isdir(solverName) + error('Solver ''%s'' has not been generated!', solverName) +end + +library = 'y2f_simulink_lib'; +block = solverName; + +% Create Simulink library +if exist(library) % library found, no need to create one + disp('Found existing Y2F Simulink library.') + load_system(library); + + % we need to unlock the library to edit it + set_param(library,'Lock','off') +else % no library found + disp('Y2F Simulink library not found, creating new one.') + + % Check if slblocks.m exists, if yes ask user if we can overwrite it + if ~isempty(dir('slblocks.m')) + while 1 + beep + in = input(['[' 8 'slblocks.m already exists in the current folder. Y2F needs to overwrite it to create the Simulink library.\nDo you want to continue [y/n]? ]' 8],'s'); + if strcmpi(in,'y') + break + elseif strcmpi(in,'n') + error('Y2F could not create Simulink library.'); + end + end + end + + % Create library + new_system(library, 'Library'); + + % Create slblocks.m to "register" Y2F library + mFileID = fopen('slblocks.m','w'); + + fprintf(mFileID, 'function blkStruct = slblocks\n'); + fprintf(mFileID, '%% This function specifies that the Y2F library should appear in the\n'); + fprintf(mFileID, '%% Library Browser and be cached in the browser repository\n'); + fprintf(mFileID, 'Browser.Library = ''y2f_simulink_lib'';\n'); + fprintf(mFileID, 'Browser.Name = ''Y2F FORCES Pro Solvers'';\n'); + fprintf(mFileID, 'blkStruct.Browser = Browser;\n'); + + fclose(mFileID); + +end + +% Add S-function block if it doesn't exist already +blocks = find_system(library); +if ~any(cell2mat(strfind(blocks,[library '/' block]))) + add_block('built-in/S-Function', [library '/' block]); + + % Create mask + mask = Simulink.Mask.create([library '/' block]); +else + % We need to load the mask to edit it + mask = Simulink.Mask.get([library '/' block]); +end + +% Set right parameters, ports, etc. for block +set_param([library '/' block], 'FunctionName', [solverName '_simulinkBlock']); + +% Create mask to name input/output ports and add image + +iconDrawingString = 'image(''forcesprologo.jpg'', ''center'', ''on'')'; +for i=1:self.numParams + iconDrawingString = sprintf('%s;port_label(''input'', %u, ''%s'')', iconDrawingString, i, self.paramNames{i}); +end +for i=1:numel(self.outputSize) + iconDrawingString = sprintf('%s;port_label(''output'', %u, ''%s'')', iconDrawingString, i, self.outputNames{i}); +end +if (isfield(self.default_codeoptions,'showinfo') && self.default_codeoptions.showinfo) % we have diagnostic fields + iconDrawingString = sprintf('%s;port_label(''output'', %u, ''exitflag'')',iconDrawingString,numel(self.outputSize)+1); + iconDrawingString = sprintf('%s;port_label(''output'', %u, ''iterations'')',iconDrawingString,numel(self.outputSize)+2); + iconDrawingString = sprintf('%s;port_label(''output'', %u, ''solve_time'')',iconDrawingString,numel(self.outputSize)+3); + iconDrawingString = sprintf('%s;port_label(''output'', %u, ''primal_obj'')',iconDrawingString,numel(self.outputSize)+4); +end +set_param([library '/' block], 'MaskDisplay', iconDrawingString) + +% Set position of block +set_param([library '/' block], 'Position', [170, 99, 550, 200]) + +% Generate description and help +desc = sprintf(['---- Simulink block encapsulating your customized solver %s ----\n\n' ... + '%s : A fast customized optimization solver.'], solverName, solverName); +set_param([library '/' block], 'MaskDescription', desc); + +help = sprintf('%s_simulinkBlock provides an easy Simulink interface for simulating your customized solver.\n\n',solverName); +help = sprintf('%sOUTPUTS = %s(INPUTS) solves an optimization problem where:\n\n', help, solverName); +help = sprintf('%sINPUTS:\n', help); + +for i=1:self.numParams + if self.paramSizes(i,1) == 1 && self.paramSizes(i,2) == 1 % scalar parameter + help = sprintf('%s- %s (a scalar)\n',help,self.paramNames{i}); + elseif self.paramSizes(i,1) == 1 % row vector + help = sprintf('%s- %s (row vector of length %u)\n',help,self.paramNames{i},self.paramSizes(i,2)); + elseif self.paramSizes(i,2) == 1 % column vector + help = sprintf('%s- %s (column vector of length %u)\n',help,self.paramNames{i},self.paramSizes(i,1)); + else + help = sprintf('%s- %s (matrix of size [%u x %u])\n',help,self.paramNames{i},self.paramSizes(i,1),self.paramSizes(i,2)); + end +end + +help = sprintf('%s\nOUTPUTS:\n',help); + +for i=1:numel(self.outputSize) + if self.outputSize{i}(1) == 1 && self.outputSize{i}(2) == 1 % scalar parameter + help = sprintf('%s- %s (a scalar)\n',help,self.outputNames{i}); + elseif self.outputSize{i}(1) == 1 % row vector + help = sprintf('%s- %s (row vector of length %u)\n',help,self.outputNames{i},self.outputSize{i}(2)); + elseif self.outputSize{i}(2) == 1 % column vector + help = sprintf('%s- %s (column vector of length %u)\n',help,self.outputNames{i},self.outputSize{i}(1)); + else + help = sprintf('%s- %s (matrix of size [%u x %u])\n',help,self.outputNames{i},self.outputSize{i}(1),self.outputSize{i}(2)); + end +end + +help = sprintf('%s\nFor more information, see https://www.embotech.com/FORCES-Pro/How-to-use/Simulink-Interface/Simulink-Block',help); + +set_param([library '/' block], 'MaskHelp', help); + +% Save system +%set_param(gcs,'EnableLBRepository','on'); % enable library in browser +set_param(library,'EnableLBRepository','on'); % enable library in browser +filename = save_system(library); +close_system(library, 0); + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateSimulinkInterfaceCode.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateSimulinkInterfaceCode.m new file mode 100755 index 0000000..8693c8a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/generateSimulinkInterfaceCode.m @@ -0,0 +1,342 @@ +function success = generateSimulinkInterfaceCode( self ) +%GENERATESIMULINKINTERFACECODE generates a C file with an S-function for +%use in a Simulink model. +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +success = 0; + +% Get solver name from option +solverName = self.default_codeoptions.name; + +% Check if FORCES solver has been generated +if ~isdir(solverName) + error('Solver ''%s'' has not been generated!', solverName) +end + +fileID = fopen([solverName '/interface/' solverName '_simulinkBlock.c'],'w'); + +fprintf(fileID, '/*\n'); +fprintf(fileID, '%s : A fast customized optimization solver.\n',solverName); +fprintf(fileID, '*/\n'); +fprintf(fileID, '\n'); +fprintf(fileID, '#define S_FUNCTION_LEVEL 2\n'); +fprintf(fileID, '#define S_FUNCTION_NAME %s_simulinkBlock\n',solverName); +fprintf(fileID, '\n'); +fprintf(fileID, '#include "simstruc.h"\n'); +fprintf(fileID, '\n'); +fprintf(fileID, '/* SYSTEM INCLUDES FOR TIMING ------------------------------------------ */\n'); +fprintf(fileID, '\n'); +fprintf(fileID, '/* include FORCES functions and defs */\n'); +fprintf(fileID, '#include "../include/%s.h"\n',solverName); +fprintf(fileID, '\n'); +fprintf(fileID, '#if defined(MATLAB_MEX_FILE)\n'); +fprintf(fileID, '#include "tmwtypes.h"\n'); +fprintf(fileID, '#include "simstruc_types.h"\n'); +fprintf(fileID, '#else\n'); +fprintf(fileID, '#include "rtwtypes.h"\n'); +fprintf(fileID, '#endif\n'); +fprintf(fileID, '\n'); +fprintf(fileID, '\n'); +fprintf(fileID, '/*====================*\n'); +fprintf(fileID, ' * S-function methods *\n'); +fprintf(fileID, ' *====================*/\n'); +fprintf(fileID, '/* Function: mdlInitializeSizes =========================================\n'); +fprintf(fileID, ' * Abstract:\n'); +fprintf(fileID, ' * Setup sizes of the various vectors.\n'); +fprintf(fileID, ' */\n'); +fprintf(fileID, 'static void mdlInitializeSizes(SimStruct *S)\n'); +fprintf(fileID, '{\n'); +fprintf(fileID, '\n'); +fprintf(fileID, ' DECL_AND_INIT_DIMSINFO(inputDimsInfo);\n'); +fprintf(fileID, ' DECL_AND_INIT_DIMSINFO(outputDimsInfo);\n'); +fprintf(fileID, ' ssSetNumSFcnParams(S, 0);\n'); +fprintf(fileID, ' if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) {\n'); +fprintf(fileID, ' return; /* Parameter mismatch will be reported by Simulink */\n'); +fprintf(fileID, ' }\n'); +fprintf(fileID, '\n'); +fprintf(fileID, ' /* initialize size of continuous and discrete states to zero */\n'); +fprintf(fileID, ' ssSetNumContStates(S, 0);\n'); +fprintf(fileID, ' ssSetNumDiscStates(S, 0);\n'); +fprintf(fileID, '\n'); + +% Input ports +fprintf(fileID, ' /* initialize input ports - there are %u in total */\n',self.numParams); +fprintf(fileID, ' if (!ssSetNumInputPorts(S, %u)) return;\n',self.numParams); +fprintf(fileID, ' \n'); + +for i=1:self.numParams + fprintf(fileID, ' /* Input Port %u (%s) */\n',i-1,self.paramNames{i}); + fprintf(fileID, ' ssSetInputPortMatrixDimensions(S, %u, %u, %u);\n', i-1, self.paramSizes(i,1), self.paramSizes(i,2)); + fprintf(fileID, ' ssSetInputPortDataType(S, %u, SS_DOUBLE);\n',i-1); + fprintf(fileID, ' ssSetInputPortComplexSignal(S, %u, COMPLEX_NO); /* no complex signals suppported */\n',i-1); + fprintf(fileID, ' ssSetInputPortDirectFeedThrough(S, %u, 1); /* Feedthrough enabled */\n',i-1); + fprintf(fileID, ' ssSetInputPortRequiredContiguous(S, %u, 1); /*direct input signal access*/ \n',i-1); + fprintf(fileID, '\n'); +end +fprintf(fileID, '\n'); + +% Output ports +fprintf(fileID, ' /* initialize output ports - there are %u in total */\n',numel(self.outputSize)); +if (isfield(self.default_codeoptions,'showinfo') && self.default_codeoptions.showinfo) % Info fields (exitflag, iterations, solve time, pobj) are optional + fprintf(fileID, ' if (!ssSetNumOutputPorts(S, %u)) return; \n',numel(self.outputSize) + 4); +else % no info fields + fprintf(fileID, ' if (!ssSetNumOutputPorts(S, %u)) return; \n',numel(self.outputSize)); +end +fprintf(fileID, ' \n'); + +for i=1:numel(self.outputSize) % normal output ports + fprintf(fileID, ' /* Output Port %u */\n',i-1); + fprintf(fileID, ' ssSetOutputPortMatrixDimensions(S, %u, %u, %u);\n',i-1,self.outputSize{i}(1),self.outputSize{i}(2)); + fprintf(fileID, ' ssSetOutputPortDataType(S, %u, SS_DOUBLE);\n',i-1); + fprintf(fileID, ' ssSetOutputPortComplexSignal(S, %u, COMPLEX_NO); /* no complex signals suppported */\n',i-1); + fprintf(fileID, '\n'); +end + +% Diagnostic info ports +if (isfield(self.default_codeoptions,'showinfo') && self.default_codeoptions.showinfo) + fprintf(fileID, ' /* Diagnostic Output Ports */\n'); + fprintf(fileID, ' ssSetOutputPortMatrixDimensions(S, %u, 1, 1);\n',numel(self.outputSize)+(0:3)); + fprintf(fileID, ' ssSetOutputPortDataType(S, %u, SS_DOUBLE);\n',numel(self.outputSize)+(0:3)); + fprintf(fileID, ' ssSetOutputPortComplexSignal(S, %u, COMPLEX_NO);\n',numel(self.outputSize)+(0:3)); +end + +fprintf(fileID, '\n'); +fprintf(fileID, ' /* set sampling time */\n'); +fprintf(fileID, ' ssSetNumSampleTimes(S, 1);\n'); +fprintf(fileID, '\n'); +fprintf(fileID, ' /* set internal memory of block */\n'); +fprintf(fileID, ' ssSetNumRWork(S, 0);\n'); +fprintf(fileID, ' ssSetNumIWork(S, 0);\n'); +fprintf(fileID, ' ssSetNumPWork(S, 0);\n'); +fprintf(fileID, ' ssSetNumModes(S, 0);\n'); +fprintf(fileID, ' ssSetNumNonsampledZCs(S, 0);\n'); +fprintf(fileID, '\n'); +fprintf(fileID, ' /* Take care when specifying exception free code - see sfuntmpl_doc.c */\n'); +fprintf(fileID, ' /* SS_OPTION_USE_TLC_WITH_ACCELERATOR removed */ \n'); +fprintf(fileID, ' /* SS_OPTION_USE_TLC_WITH_ACCELERATOR removed */ \n'); +fprintf(fileID, ' /* ssSetOptions(S, (SS_OPTION_EXCEPTION_FREE_CODE |\n'); +fprintf(fileID, ' SS_OPTION_WORKS_WITH_CODE_REUSE)); */\n'); +fprintf(fileID, ' ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE );\n'); +fprintf(fileID, '}\n'); +fprintf(fileID, '\n'); +fprintf(fileID, 'static void mdlSetInputPortDimensionInfo(SimStruct *S, \n'); +fprintf(fileID, ' int_T port,\n'); +fprintf(fileID, ' const DimsInfo_T *dimsInfo)\n'); +fprintf(fileID, '{\n'); +fprintf(fileID, ' if(!ssSetInputPortDimensionInfo(S, port, dimsInfo)) return;\n'); +fprintf(fileID, '}\n'); +fprintf(fileID, '\n'); +fprintf(fileID, 'static void mdlSetOutputPortDimensionInfo(SimStruct *S, \n'); +fprintf(fileID, ' int_T port, \n'); +fprintf(fileID, ' const DimsInfo_T *dimsInfo)\n'); +fprintf(fileID, '{\n'); +fprintf(fileID, ' if (!ssSetOutputPortDimensionInfo(S, port, dimsInfo)) return;\n'); +fprintf(fileID, '}\n'); +fprintf(fileID, '\n'); +fprintf(fileID, 'static void mdlSetInputPortFrameData(SimStruct *S, \n'); +fprintf(fileID, ' int_T port,\n'); +fprintf(fileID, ' Frame_T frameData)\n'); +fprintf(fileID, '{\n'); +fprintf(fileID, ' ssSetInputPortFrameData(S, port, frameData);\n'); +fprintf(fileID, '}\n'); +fprintf(fileID, '\n'); +fprintf(fileID, '/* Function: mdlInitializeSampleTimes =========================================\n'); +fprintf(fileID, ' * Abstract:\n'); +fprintf(fileID, ' * Specifiy the sample time.\n'); +fprintf(fileID, ' */\n'); +fprintf(fileID, 'static void mdlInitializeSampleTimes(SimStruct *S)\n'); +fprintf(fileID, '{\n'); +fprintf(fileID, ' ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME);\n'); +fprintf(fileID, ' ssSetOffsetTime(S, 0, 0.0);\n'); +fprintf(fileID, '}\n'); +fprintf(fileID, '\n'); +fprintf(fileID, 'static void mdlSetInputPortDataType(SimStruct *S, int port, DTypeId dType)\n'); +fprintf(fileID, '{\n'); +fprintf(fileID, ' ssSetInputPortDataType( S, port, dType);\n'); +fprintf(fileID, '}\n'); +fprintf(fileID, '\n'); +fprintf(fileID, 'static void mdlSetOutputPortDataType(SimStruct *S, int port, DTypeId dType)\n'); +fprintf(fileID, '{\n'); +fprintf(fileID, ' ssSetOutputPortDataType(S, port, dType);\n'); +fprintf(fileID, '}\n'); +fprintf(fileID, '\n'); +fprintf(fileID, 'static void mdlSetDefaultPortDataTypes(SimStruct *S)\n'); +fprintf(fileID, '{\n'); + +for i=1:self.numParams + fprintf(fileID, ' ssSetInputPortDataType( S, %u, SS_DOUBLE);\n',i-1); +end + +% Info fields are optional +if (isfield(self.default_codeoptions,'showinfo') && self.default_codeoptions.showinfo) + for i=1:numel(self.outputSize)+4 + fprintf(fileID, ' ssSetOutputPortDataType(S, %u, SS_DOUBLE);\n',i-1); + end +else + for i=1:numel(self.outputSize) + fprintf(fileID, ' ssSetOutputPortDataType(S, %u, SS_DOUBLE);\n',i-1); + end +end +fprintf(fileID, '}\n'); +fprintf(fileID, '\n'); +fprintf(fileID, '/* Function: mdlOutputs =======================================================\n'); +fprintf(fileID, ' *\n'); +fprintf(fileID, ' */\n'); +fprintf(fileID, 'static void mdlOutputs(SimStruct *S, int_T tid)\n'); +fprintf(fileID, '{\n'); +fprintf(fileID, ' int i, j, k;\n'); +fprintf(fileID, ' \n'); +fprintf(fileID, ' /* file pointer for printing */\n'); +fprintf(fileID, ' FILE *fp = NULL;\n'); +fprintf(fileID, '\n'); +fprintf(fileID, ' /* Simulink data */\n'); + +for i=1:self.numParams + fprintf(fileID, ' const real_T *param_%s = (const real_T*) ssGetInputPortSignal(S,%u);\n',self.paramNames{i},i-1); +end +fprintf(fileID, ' \n'); + +for i=1:numel(self.outputSize) + fprintf(fileID, ' real_T *output_%s = (real_T*) ssGetOutputPortSignal(S,%u);\n',self.outputNames{i},i-1); +end +fprintf(fileID, '\n'); + +% Info fields are optional +if (isfield(self.default_codeoptions,'showinfo') && self.default_codeoptions.showinfo) + fprintf(fileID, ' /* Diagnostic output ports */\n'); + fprintf(fileID, ' real_T *solver_exitflag = (real_T*) ssGetOutputPortSignal(S,%u);\n',numel(self.outputSize)); + fprintf(fileID, ' real_T *iterations = (real_T*) ssGetOutputPortSignal(S,%u);\n',numel(self.outputSize)+1); + fprintf(fileID, ' real_T *solve_time = (real_T*) ssGetOutputPortSignal(S,%u);\n',numel(self.outputSize)+2); + fprintf(fileID, ' real_T *primal_obj = (real_T*) ssGetOutputPortSignal(S,%u);\n',numel(self.outputSize)+3); + fprintf(fileID, '\n'); +end + +fprintf(fileID, '\n'); +fprintf(fileID, ' /* Solver data */\n'); +fprintf(fileID, ' %s_params params;\n',solverName); +fprintf(fileID, ' %s_output output;\n',solverName); +fprintf(fileID, ' %s_info info; \n',solverName); +if self.numSolvers == 1 + fprintf(fileID, ' int exitflag;\n'); +else + fprintf(fileID, ' int* exitflag;\n'); +end + +fprintf(fileID, '\n'); +fprintf(fileID, ' /* Extra NMPC data */\n'); +fprintf(fileID, '\n'); + +fprintf(fileID, ' /* Copy inputs */\n'); +for i=1:self.numParams + fprintf(fileID, ' for( i=0; i<%u; i++){ params.%s[i] = (double) param_%s[i]; }\n',prod(self.paramSizes(i,:)),self.paramNames{i},self.paramNames{i}); +end +fprintf(fileID, '\n'); + +fprintf(fileID, ' #if %s_SET_PRINTLEVEL > 0\n',solverName); +fprintf(fileID, ' /* Prepare file for printfs */\n'); +fprintf(fileID, ' fp = fopen("stdout_temp","w+");\n'); +fprintf(fileID, ' if( fp == NULL ) {\n'); +fprintf(fileID, ' mexErrMsgTxt("freopen of stdout did not work.");\n'); +fprintf(fileID, ' }\n'); +fprintf(fileID, ' rewind(fp);\n'); +fprintf(fileID, ' #endif\n'); +fprintf(fileID, '\n'); + +fprintf(fileID, ' /* Call solver */\n'); +fprintf(fileID, ' exitflag = %s_solve(¶ms, &output, &info, fp );\n',solverName); +fprintf(fileID, '\n'); + +fprintf(fileID, ' #if %s_SET_PRINTLEVEL > 0\n',solverName); +fprintf(fileID, ' /* Read contents of printfs printed to file */\n'); +fprintf(fileID, ' rewind(fp);\n'); +fprintf(fileID, ' while( (i = fgetc(fp)) != EOF ) {\n'); +fprintf(fileID, ' ssPrintf("%%c",i);\n'); +fprintf(fileID, ' }\n'); +fprintf(fileID, ' fclose(fp);\n'); +fprintf(fileID, ' #endif\n'); +fprintf(fileID, '\n'); + +fprintf(fileID, ' /* Copy outputs */\n'); +for i=1:numel(self.outputSize) + fprintf(fileID, ' for( i=0; i<%u; i++){ output_%s[i] = (real_T) output.%s[i]; }\n',prod(self.outputSize{i}),self.outputNames{i},self.outputNames{i}); +end + +% Info fields are optional +if (isfield(self.default_codeoptions,'showinfo') && self.default_codeoptions.showinfo) + fprintf(fileID, '\n/* Diagnostic info */\n'); + if self.numSolvers == 1 + fprintf(fileID, ' iterations[0] = info.it;\n'); + fprintf(fileID, ' solve_time[0] = info.solvetime;\n'); + fprintf(fileID, ' primal_obj[0] = info.pobj;\n'); + fprintf(fileID, ' solver_exitflag[0] = exitflag;\n'); + else % multiple solvers + % sum iterations + fprintf(fileID, ' iterations[0] = info.it[0]'); + for i=2:self.numSolvers + fprintf(fileID, ' + info.it[%u]', i-1); + end + fprintf(fileID, ';\n'); + + % sum solve times + fprintf(fileID, ' solve_time[0] = info.solvetime[0]'); + for i=2:self.numSolvers + fprintf(fileID, ' + info.solvetime[%u]', i-1); + end + fprintf(fileID, ';\n'); + + % sum objective values + fprintf(fileID, ' primal_obj[0] = info.pobj[0]'); + for i=2:self.numSolvers + fprintf(fileID, ' + info.pobj[%u]', i-1); + end + fprintf(fileID, ';\n'); + + % Find worst exitflag (worst-to-best: -100,-10,-2,-1,0,2,1) + if isempty(self.qcqpParams.bidx) % not branch-and-bound + fprintf(fileID, ' solver_exitflag[0] = exitflag[0];\n'); + fprintf(fileID, ' for ( i=1; i<%u; i++) {\n', self.numSolvers); + fprintf(fileID, ' if (exitflag[i] < solver_exitflag[0])\n'); + fprintf(fileID, ' solver_exitflag[0] = exitflag[i];\n'); + fprintf(fileID, ' };\n'); + else + fprintf(fileID, ' solver_exitflag[0] = exitflag[0];\n'); + fprintf(fileID, ' int i = 0;\n'); + fprintf(fileID, ' for ( i=1; i<%u; i++) {\n', self.numSolvers); + fprintf(fileID, ' if (exitflag[i] == 2 && solver_exitflag[0] == 1) {\n'); + fprintf(fileID, ' solver_exitflag[0] = 2;\n'); + fprintf(fileID, ' } else if (exitflag[i] != 2 && exitflag[i] < solver_exitflag[0]) {\n'); + fprintf(fileID, ' solver_exitflag[0] = exitflag[i];\n'); + fprintf(fileID, ' };\n'); + fprintf(fileID, ' };\n'); + end + end +end + +fprintf(fileID, '}\n'); + +fprintf(fileID, '\n'); +fprintf(fileID, '/* Function: mdlTerminate =====================================================\n'); +fprintf(fileID, ' * Abstract:\n'); +fprintf(fileID, ' * In this function, you should perform any actions that are necessary\n'); +fprintf(fileID, ' * at the termination of a simulation. For example, if memory was\n'); +fprintf(fileID, ' * allocated in mdlStart, this is the place to free it.\n'); +fprintf(fileID, ' */\n'); +fprintf(fileID, 'static void mdlTerminate(SimStruct *S)\n'); +fprintf(fileID, '{\n'); +fprintf(fileID, '}\n'); +fprintf(fileID, '#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */\n'); +fprintf(fileID, '#include "simulink.c" /* MEX-file interface mechanism */\n'); +fprintf(fileID, '#else\n'); +fprintf(fileID, '#include "cg_sfun.h" /* Code generation registration function */\n'); +fprintf(fileID, '#endif\n'); + +% Don't forget to close S-function file +fclose(fileID); + +success = 1; + +end \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/numel.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/numel.m new file mode 100755 index 0000000..f7dd083 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/numel.m @@ -0,0 +1,4 @@ +function n = numel(varargin) +%NUMEL Overload of numel. Tell object to return one argument. +n = 1; + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/optimizerFORCES.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/optimizerFORCES.m new file mode 100755 index 0000000..3d9f98c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/optimizerFORCES.m @@ -0,0 +1,1098 @@ +function [sys, success] = optimizerFORCES( constraint,objective,codeoptions,parameters,solverOutputs,parameterNames,outputNames ) +%OPTIMIZERFORCES Generates a FORCES Pro solver from a YALMIP problem formulation +% +% solver = OPTIMIZERFORCES(constraint,objective,codeoptions,parameters,solverOutputs) +% generates a solver using FORCES Pro that solves the specified problem +% for given parameter values and returns the value of the specified +% outputs. The solver can be called by indexing the returned OPTIMIZERFORCES +% object with the parameter values. The parameter values can be passed in +% a number of different ways: +% +% output = solver{param1, param2, ...} OR +% output = solver{ {param1, param2, ...} } OR +% output = solver(param1, param2, ...) +% +% This API is compatible with the YALMIP function OPTIMIZER. To obtain more +% information on the solver, you can type 'help ' after the code +% has been generated, where is the name you give to the solver +% via codeoptions.name. +% +% +% solver = OPTIMIZERFORCES(constraint,objective,codeoptions,parameters,solverOutputs,parameterNames,outputNames) +% same as above, but the generated code and all its associated help +% files, the Simulink block etc. will carry the names provided in the +% last two arguments for parameters and outputs, respectively. It is +% strongly recommended to provide these names. +% +% +% Example usage: +% +% sdpvar x y p +% options = getOptions('solver_name') +% solver = optimizerFORCES([x + y == p], x^2+y^2, options, p, {x,y}, {'p'}, {'x_optimal','y_optimal'}) +% solution = solver{5} % solve problem for p = 5 +% +% +% Inputs: +% constraint: constraints in YALMIP format, see e.g. OPTIMIZER +% objective: objective in YALMIP format, see e.g. OPTIMIZER +% codeoptions: options for FORCES Pro solver, see GETOPTIONS +% parameters: Single SDPVAR object or cell array of SDPVAR +% objects that should be considered a parameter +% solverOutputs: Single SDPVAR object or cell array of SDPVAR +% objects whose value(s) should be returned by the +% solver, can be a linear combination of decision +% variables and parameters +% parameterNames: (optional) Cell array of strings with names for +% parameters that will, for example, be used in the +% Simulink block. If names are not specified, they +% will be auto-generated. +% outputNames: (optional) Cell array of strings with names for +% outputs that will, for example, be used in the +% Simulink block. If names are not specified, they +% will be auto-generated. +% +% Outputs: +% solver: reference to OPTIMIZERFORCES object. Use this to +% call solver. Example: +% solver = optimizerFORCES(...); +% x = solver{paramValues}; +% success: 1 if solver generation was successful, 0 otherwise +% +% +% Getting details on solver: +% +% help % get more details on the generated solver +% +% See also SDPVAR OPTIMIZER +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +disp('YALMIP-to-FORCES code generator') +disp('-------------------------------') + +% Check if YALMIP is installed +if ~exist('optimizer','file') + error('YALMIP could not be found. Please make sure it is installed correctly.') +end + +% We need all arguments +switch nargin + case 0 + error('Constraints not found') + case 1 + error('Objective not found') + case 2 + error('Solver options not found') + case 3 + error('Parameter(s) not found') + case 4 + error('Output(s) not found') +end + +% Make valid solver name +if ~verLessThan('matlab', '8.3') + codeoptions.name = matlab.lang.makeValidName(codeoptions.name); +else + codeoptions.name = genvarname(codeoptions.name); +end + +% We need parameters +if isempty(parameters) + error('FORCES Pro does not support problems without parameters.'); +end + +% Read parameter names if they were passed along +if nargin >= 6 + if ~iscellstr(parameterNames) + error('parameterNames needs to be a cell array of strings.') + end + + % Fix names (make them valid and unique) + if ~verLessThan('matlab', '8.3') + parameterNames = matlab.lang.makeValidName(parameterNames); + parameterNames = matlab.lang.makeUniqueStrings(parameterNames); + else + parameterNames = genvarname(parameterNames); + end +elseif isa(solverOutputs,'sdpvar') + % Single parameter supplied, we might get its name! + name = inputname(4); + if ~isempty(name) + parameterNames = {name}; + else + parameterNames = {}; + warning('Y2F:noParameterNames',['No parameter names specified for solver. We recommend adding names for better code documentation. ' ... + 'For more info type ''help optimizerFORCES''.']); + end +else + parameterNames = {}; + warning('Y2F:noParameterNames',['No parameter names specified for solver. We recommend adding names for better code documentation. ' ... + 'For more info type ''help optimizerFORCES''.']); +end + +% Read output names if they were passed along +if nargin >= 7 + if ~iscellstr(parameterNames) + error('outputNames needs to be a cell array of strings.') + end + + % Fix names (make them valid and unique) + if ~verLessThan('matlab', '8.3') + outputNames = matlab.lang.makeValidName(outputNames); + outputNames = matlab.lang.makeUniqueStrings(outputNames); + else + outputNames = genvarname(outputNames); + end +elseif isa(solverOutputs,'sdpvar') + % Single output supplied, we might get its name! + name = inputname(5); + if ~isempty(name) + outputNames = {name}; + else + outputNames = {}; + warning('Y2F:noOutputNames',['No output names specified for solver. We recommend adding names for better code documentation. ' ... + 'For more info type ''help optimizerFORCES''.']); + end +else + outputNames = {}; + warning('Y2F:noOutputNames',['No output names specified for solver. We recommend adding names for better code documentation. ' ... + 'For more info type ''help optimizerFORCES''.']); +end + +% Create missing parameter names +while numel(parameterNames) < numel(parameters) + parameterNames{end+1} = sprintf('param%u', numel(parameterNames)+1); +end + +% We allow single parameters --> wrap them in a cell array +if ~iscell(parameters) + parameters = {parameters}; % put single param into cell array +end + +% Prepare struct that is going to be converted into the optimizerFORCES +% class +sys = struct; + +sys.outputIsCell = 1; +if ~iscell(solverOutputs) + solverOutputs = {solverOutputs}; + sys.outputIsCell = 0; +end + +% Create missing parameter names +while numel(outputNames) < numel(solverOutputs) + outputNames{end+1} = sprintf('output%u', numel(outputNames)+1); +end + + +%% Call YALMIP and convert QP into FORCES format +disp('This is Y2F (v0.1.10), the YALMIP interface of FORCES Pro.'); +disp('For more information visit https://github.com/embotech/y2f'); +fprintf('\nUsing YALMIP to convert problem into QP...') +tic; +[internalmodel,H,f,Aineq,bineq,Aeq,beq,lb,ub] = getQpAndModelFromYALMIP(); +yalmiptime=toc; +fprintf(' [OK, %5.1f sec]\n', yalmiptime); + +% Check if matrices are numeric +if ~isnumeric(H) || ~isnumeric(f) + error('Y2F can only handle numeric inputs. There are non-numeric terms in the cost.') +end +if ~isnumeric(Aineq) || ~isnumeric(bineq) + error('Y2F can only handle numeric inputs. There are non-numeric terms in the inequality contraints.') +end +if ~isnumeric(Aeq) || ~isnumeric(beq) + error('Y2F can only handle numeric inputs. There are non-numeric terms in the equality contraints.') +end +if ~isnumeric(lb) || ~isnumeric(ub) + error('Y2F can only handle numeric inputs. There are non-numeric terms in the bounds.') +end + +% Check if matrices are real +if ~isreal(H) || ~isreal(f) + error('Y2F can only handle real inputs. There are complex terms in the cost.') +end +if ~isreal(Aineq) || ~isreal(bineq) + error('Y2F can only handle real inputs. There are complex terms in the inequality contraints.') +end +if ~isreal(Aeq) || ~isreal(beq) + error('Y2F can only handle real inputs. There are complex terms in the equality contraints.') +end +if ~isreal(lb) || ~isreal(ub) + error('Y2F can only handle real inputs. There are complex terms in the bounds.') +end + +% Check if matrices are doubles +if ~isa(H,'double') || ~isa(f,'double') + warning('Y2F:nonDoubleCost', 'Y2F can only handle inputs of type ''double''. The cost will be cast to ''double''.') + H = double(H); + f = double(f); +end +if ~isa(Aineq,'double') || ~isa(bineq,'double') + warning('Y2F:nonDoubleInequality', 'Y2F can only handle inputs of type ''double''. The inequality constraints will be cast to ''double''.') + Aineq = double(Aineq); + bineq = double(bineq); +end +if ~isa(Aeq,'double') || ~isa(beq,'double') + warning('Y2F:nonDoubleEquality', 'Y2F can only handle inputs of type ''double''. The equality constraints will be cast to ''double''.') + Aeq = double(Aeq); + beq = double(beq); +end +if ~isa(lb,'double') || ~isa(ub,'double') + warning('Y2F:nonDoubleBounds', 'Y2F can only handle inputs of type ''double''. The bounds will be cast to ''double''.') + lb = double(lb); + ub = double(ub); +end + +%% Assemble parameters & convert quadratic variables +% Quadratic inequalities are not recognized by YALMIP +% Information is stored in internalmodel + +fprintf('Extract parameters and quadratic inequalities from YALMIP model...') +tic; +[qcqpParams,Q,l,r,solverVars,paramVars,yalmipParamMap] = buildParamsAndQuadIneqs(); +extractStagesTime=toc; +fprintf(' [OK, %5.1f sec]\n', extractStagesTime); + +%% + +fprintf('Assembling stages...') +tic; +% Construct matrices where parametric elements are == 1 +% This is necessary to build graph and recognise infeasible problems +H_temp = H; +H_temp([qcqpParams.H.maps2index]) = 1; +Aineq_temp = Aineq; +Aineq_temp([qcqpParams.Aineq.maps2index]) = 1; +Aeq_temp = Aeq; +Aeq_temp([qcqpParams.Aeq.maps2index]) = 1; +Q_temp = Q; +for i=1:numel(qcqpParams.Q) + Q_temp{qcqpParams.Q(i).maps2mat}(qcqpParams.Q(i).maps2index) = 1; +end +l_temp = l; +for i=1:numel(qcqpParams.l) + l_temp(qcqpParams.l(i).maps2index,qcqpParams.l(i).maps2mat) = 1; +end + +%% Warn the user if the problem is/might be infeasible + +checkQcqpForInfeasibility() + + +%% Generate standard stages +% Construct (potentially multiple) path graphs from Qp + +% Compute decision variable indices that are needed in output (only +% relevant for separable problems) +outputIdx = []; +for i=1:numel(solverOutputs) + outputVars = getvariables(solverOutputs{i}); + outputIdx = [outputIdx find(ismember(solverVars, outputVars))]; +end + +graphComponents = pathGraphsFromQcqp(H_temp,Aineq_temp,Aeq_temp,Q_temp,l_temp); +[graphComponents, stages, params, standardParamValues,forcesParamMap] = stagesFromPathGraphs(graphComponents,H,f,Aineq,bineq,Aeq,beq,l,Q,r,lb,ub,qcqpParams,yalmipParamMap,outputIdx); + +if numel(stages) == 1 + fprintf('Found %u stages.\n', numel(stages{1})); +else % we have multiple solvers + fprintf('The problem is separable. %u solvers are needed:\n', numel(stages)); + for i=1:numel(stages) + fprintf(' - Solver %u has %u stages\n', i, numel(stages{i})); + end +end + + +%% Assemble the rest of the FORCES parameters +% Fake a parameter for each solver if there are none (we need one for FORCES) +sys.solverHasParams = zeros(1,numel(stages)); +for i=1:numel(stages) + if isempty(params{i}) + params{i}(1) = newParam('p',1,'cost.f'); + standardParamValues{i} = stages{i}(1).cost.f; + stages{i}(1).cost.f = []; + else % count params + sys.solverHasParams(i) = 1; + end +end + +% Mark solvers that contain binary variables +sys.solverIsBinary = zeros(1,numel(stages)); +if ~isempty(qcqpParams.bidx) + for i=1:numel(stages) + if any(ismember(cell2mat(graphComponents{i}.vertices),qcqpParams.bidx)) + sys.solverIsBinary(i) = 1; + end + end +end + +% Assemble outputs +outputFORCES = buildOutput(); + +assembleStagesTime=toc; +fprintf(' [OK, %5.1f sec]\n', assembleStagesTime); + +%% Generate solver using FORCES +disp('Generating solver using FORCES...') + +% set flag to let FORCES know that request came from Y2F +codeoptions.interface = 'y2f'; + +success = 1; +default_codeoptions = codeoptions; +codeoptions = cell(1,numel(stages)); +for i=1:numel(stages) + % new name for each solver + codeoptions{i} = default_codeoptions; + codeoptions{i}.name = sprintf('internal_%s_%u',default_codeoptions.name,i); + codeoptions{i}.nohash = 1; % added by AD to avoid problem - exeprimental + success = generateCode(stages{i},params{i},codeoptions{i},outputFORCES{i}) & success; +end + +if ~success + error('Code generation was not successful'); +end + +% Store temporary data in object +sys.stages = stages; +sys.numSolvers = numel(stages); +sys.params = params; +sys.paramNames = parameterNames; +sys.outputNames = outputNames; +sys.outputFORCES = outputFORCES; +sys.qcqpParams = qcqpParams; +sys.standardParamValues = standardParamValues; +sys.solverVars = solverVars; +sys.parameters = parameters; +sys.forcesParamMap = forcesParamMap; +sys.codeoptions = codeoptions; +sys.default_codeoptions = default_codeoptions; +sys.interfaceFunction = str2func(default_codeoptions.name); + +sys = class(sys,'optimizerFORCES'); + +% Generate MEX code that is called when the solver is used +disp('Generating C interface...'); +%generateSolverInterfaceCode(sys); +generateCInterfaceCode(sys); +generateMEXInterfaceCode(sys); +generateSimulinkInterfaceCode(sys); + +% Compile MEX code +disp('Compiling MEX code for solver interface...'); + +compileSolverInterfaceCode(sys); + +% Generate help file +disp('Writing help file...'); + +generateHelp(sys); + +if (~isfield(default_codeoptions,'BuildSimulinkBlock') || default_codeoptions.BuildSimulinkBlock ~= 0) + % Compile Simulink code (is optional) + disp('Compiling Simulink code for solver interface...'); + + compileSimulinkInterfaceCode(sys); + + % Compile Simulink code + disp('Generating Simulink Block...'); + + generateSimulinkBlock(sys); +end + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + function [internalmodel,H,f,Aineq,bineq,Aeq,beq,lb,ub] = getQpAndModelFromYALMIP() + % Helper function that uses YALMIP to create Qp from user's constraints + % and objective. Parameters and quadratic constraints are ignored for + % now and handled later on. + + % Call YALMIP's export + % model contains Qp (in quadprog format) + % internalmodel contains data that we need to recover parameters and + % quadratic inequalities + options = sdpsettings('solver','+quadprog','verbose',2); + [model,~,diagnostics,internalmodel] = export(constraint,objective,options,[],[],1); + if ~isempty(diagnostics) + disp(diagnostics) + error('YALMIP was not able to convert the problem into a QCQp.') + end + + % Get matrices from quadprog model + H = full(model.Q); + f = full(model.c); + Aineq = full(model.A); + bineq = full(model.b); + Aeq = full(model.Aeq); + beq = full(model.beq); + lb = full(model.lb); + ub = full(model.ub); + + % YALMIP doesn't always recognize bounds as such (and makes them + % inequalities) --> we have to convert them + bounds_idx = []; % remember to delete these + for i=1:size(Aineq,1) + vars = find(Aineq(i,:)); % variables used in inequality + if length(vars) == 1 && internalmodel.variabletype(vars) == 0 % a single linear variable + % we can make a bound out of this + bounds_idx(end+1) = i; + if Aineq(i,vars) > 0 % upper bound + ub(vars) = min(ub(vars),bineq(i)/Aineq(i,vars)); + else % < 0 --> lower bound + lb(vars) = max(lb(vars),bineq(i)/Aineq(i,vars)); + end + end + end + Aineq(bounds_idx,:) = []; + bineq(bounds_idx) = []; + + end + + function [qcqpParams,Q,l,r,solverVars,paramVars,yalmipParamMap] = buildParamsAndQuadIneqs() + % Helper function that builds QCQp parameter list and recognises + % quadratic inequalities + + % Build empty additive QCQp param struct + qcqpParams.H = struct('maps2index',{},'maps2origparam',{},... + 'maps2mat',{},'factor',{}); + qcqpParams.f = struct('maps2index',{},'maps2origparam',{},... + 'maps2mat',{},'factor',{}); + qcqpParams.Aineq = struct('maps2index',{},'maps2origparam',{},... + 'maps2mat',{},'factor',{}); + qcqpParams.bineq = struct('maps2index',{},'maps2origparam',{},... + 'maps2mat',{},'factor',{}); + qcqpParams.Aeq = struct('maps2index',{},'maps2origparam',{},... + 'maps2mat',{},'factor',{}); + qcqpParams.beq = struct('maps2index',{},'maps2origparam',{},... + 'maps2mat',{},'factor',{}); + qcqpParams.l = struct('maps2index',{},'maps2origparam',{},... + 'maps2mat',{},'factor',{}); + qcqpParams.Q = struct('maps2index',{},'maps2origparam',{},... + 'maps2mat',{},'factor',{}); + qcqpParams.r = struct('maps2index',{},'maps2origparam',{},... + 'maps2mat',{},'factor',{}); + qcqpParams.lb = struct('maps2index',{},'maps2origparam',{},... + 'maps2mat',{},'factor',{}); + qcqpParams.ub = struct('maps2index',{},'maps2origparam',{},... + 'maps2mat',{},'factor',{}); + qcqpParams.bidx = []; + + % Build empty quadratic constraints + Q = {}; + l = []; + r = []; + + % Find all YALMIP variable indices for parameters & build parameter map + paramVars = []; % YALMIP variables that are parameters + yalmipParamMap = zeros(2,0); % 1st row: index of matrix with values, + % 2nd row: index of element inside matrix + if ~isempty(parameters) + sys.paramSizes = zeros(numel(parameters),2); + for i=1:numel(parameters) + if ~isa(parameters{i}, 'sdpvar') + error('Parameters must be a SDPVAR or a cell array of SDPVARs.'); + end + + % store size for code generation + sys.paramSizes(i,:) = size(parameters{i}); + + % find YALMIP variables that make up parameter + newParams = getvariables(parameters{i}); + paramVars = [paramVars newParams]; + + % find element inside matrix (given by user) that contains value of + % parameter + for p=newParams + yalmipParamMap(:,end+1) = [i; find(getbasematrix(parameters{i},p),1)]; + end + end + + assert(length(paramVars) == size(yalmipParamMap,2)); + sys.numParams = numel(parameters); + else + sys.numParams = 0; + end + + + + quadIneq = zeros(2,0); % data structure for keeping track of (parametric) quadratic inequalities + % first row: id of linear inequality + % second row: id of quad inequality + + % Go through all variables and classify them. Remove parameters and + % interpret + removeIdx = []; % don't forget to delete these + for i=length(internalmodel.used_variables):-1:1 % go through all YALMIP variables + var = recover(internalmodel.used_variables(i)); % get corresponding SDPVAR object + + % is this variables binary? + binary = ismember(i,internalmodel.integer_variables); + if binary + qcqpParams.bidx(end+1) = i; + + if lb(i) ~= 0 || ub(i) ~= 1 + error('No integer variables other than binary supported.'); + end + end + + % Is this variable a linear parameter? + if is(var, 'linear') && ... + any(paramVars == internalmodel.used_variables(i)) + + % Parameters cannot be binary + if binary + error('Parameters cannot be binary.'); + end + + % index in parameter list (needed to recover value later on) + p_idx = find(paramVars == internalmodel.used_variables(i),1); + + % Variable is parameter --> remove it + removeIdx = [removeIdx i]; + + % Check if parameter appears in H --> put into f + rows = find(H(:,i)); + rows = rows(rows ~= i); % param*param just adds a constant term to cost + for row=rows' + if ~any(paramVars == internalmodel.used_variables(row)) % param1*param2 just adds a constant term to cost + qcqpParams.f(end+1) = newAdditiveQcqpParam(row,p_idx,1,0.5*H(row,i)); + end + end + cols = find(H(i,:)); + cols = cols(cols ~= i); % param*param just adds a constant term to cost + for col=cols + if ~any(paramVars == internalmodel.used_variables(col)) % param1*param2 just adds a constant term to cost + qcqpParams.f(end+1) = newAdditiveQcqpParam(col,p_idx,1,0.5*H(i,col)); + end + end + + % We can ignore it if param appears in f (just a constant term) + + % Check if parameter is used in Aineq --> add to bineq + rows = find(Aineq(:,i)); + for row=rows' + qcqpParams.bineq(end+1) = newAdditiveQcqpParam(row,p_idx,1,-Aineq(row,i)); + end + + % Check if parameter is used in Aeq --> add to beq + rows = find(Aeq(:,i)); + for row=rows' + qcqpParams.beq(end+1) = newAdditiveQcqpParam(row,p_idx,1,-Aeq(row,i)); + end + + % Check bounds + if lb(i) ~= -Inf || ub(i) ~= Inf + beep + warning('Y2F:parameterBounds','Bounds on parameters have no effect.') + end + + % Quadratic constraints don't have to be checked + + elseif ~is(var, 'linear') + + % Nonlinear variables cannot be binary + if binary + error('Nonlinear variables cannot be binary.'); + end + + % Is variable bilinear/quadratic? + if sum(internalmodel.monomtable(i,:)) == 2 + % Is variable the square of another variable? + if any(internalmodel.monomtable(i,:)==2) + v_idx = find(internalmodel.monomtable(i,:)==2,1); + assert(length(v_idx)==1); + v = internalmodel.used_variables(v_idx); + if any(paramVars == v) + error('Parameters can only be used affinely.') + end + + % Remove this pseudo-variable + removeIdx = [removeIdx i]; + + % If it appears in the linear cost --> move it + if f(i) ~= 0 + H(v_idx,v_idx) = H(v_idx,v_idx) + 2*f(i); + end + + % Cannot appear in quadratic cost + if nnz(H(i,:)) > 0 || nnz(H(:,i)) > 0 + error('Non-quadratic term appears in cost.') + end + + % Cannot appear in equalities + if nnz(Aeq(:,i)) > 0 + error('Quadratic equalities are not supported.') + end + + % Check bounds + if lb(i) ~= -Inf || ub(i) ~= Inf + beep + warning('Y2F:quadraticTermBounds','Bounds on quadratic terms have no effect.') + end + + % Check if variable is used in Aineq --> put in quad. ineq. + rows = find(Aineq(:,i)); + for row=rows' + [k,quadIneq,Q,l,r] = findOrCreateQuadraticInequality(row,quadIneq,Q,l,r); + Q{k}(v_idx,v_idx) = Aineq(row,i); + end + + % Is it bilinearly dependent! + % (e.g. if C_i is a parameter) + else + deps_idx = find(internalmodel.monomtable(i,:)==1); + assert(length(deps_idx) == 2); + deps = internalmodel.used_variables(deps_idx); + + if all(ismember(deps, paramVars)) + error('Parameters can only be used affinely.') + end + + if ~any(ismember(deps, paramVars)) % no parameter + % Remove this pseudo-variable + removeIdx = [removeIdx i]; + + % If it appears in the linear cost --> move it + if f(i) ~= 0 + H(deps_idx(1),deps_idx(2)) = H(deps_idx(1),deps_idx(2)) + f(i); + H(deps_idx(2),deps_idx(1)) = H(deps_idx(2),deps_idx(1)) + f(i); + end + + % Cannot appear in quadratic cost + if nnz(H(i,:)) > 0 || nnz(H(:,i)) > 0 + error('Non-quadratic term appears in cost.') + end + + % Cannot appear in equalities + if nnz(Aeq(:,i)) > 0 + error('Bilinear equalities are not supported.') + end + + % Check bounds + if lb(i) ~= -Inf || ub(i) ~= Inf + beep + warning('Y2F:bilinearTermBounds','Bounds on bilinear terms have no effect.') + end + + % Check if variable is used in Aineq --> put in quad. ineq. + rows = find(Aineq(:,i)); + for row=rows' + [k,quadIneq,Q,l,r] = findOrCreateQuadraticInequality(row,quadIneq,Q,l,r); + Q{k}(deps_idx(1),deps_idx(2)) = 0.5*Aineq(row,i); + Q{k}(deps_idx(2),deps_idx(1)) = 0.5*Aineq(row,i); + end + + else % a parameter is involed + if any(deps(1) == paramVars) && ... + ~any(deps(2) == paramVars) && ... + is(recover(deps(2)),'linear') + v = deps(2); % variable + v_idx = find(internalmodel.used_variables == v,1); + p = deps(1); % parameter + p_idx = find(paramVars == p,1); + elseif any(deps(2) == paramVars) && ... + ~any(deps(1) == paramVars) && ... + is(recover(deps(1)),'linear') + v = deps(1); + v_idx = find(internalmodel.used_variables == v,1); + p = deps(2); + p_idx = find(paramVars == p,1); + else % This shouldn't happen! Case is handled above + error('Internal error! Please contact support@embotech.ch') + end + + % Variable is parameter --> remove it + removeIdx = [removeIdx i]; + + % Does bilinear combo influence cost? + if f(i) ~= 0 + qcqpParams.f(end+1) = newAdditiveQcqpParam(v_idx,p_idx,1,f(i)); + end + + if any(H(:,i)) || any(H(i,:)) + error('Parameters can only be used affinely.') + end + + % Check if parameter is used in Aineq + rows = find(Aineq(:,i)); + for row=rows' + qcqpParams.Aineq(end+1) = newAdditiveQcqpParam(sub2ind(size(Aineq),row,v_idx),p_idx,1,Aineq(row,i)); + end + + % Check if parameter is used in Aeq + rows = find(Aeq(:,i)); + for row=rows' + qcqpParams.Aeq(end+1) = newAdditiveQcqpParam(sub2ind(size(Aeq),row,v_idx),p_idx,1,Aeq(row,i)); + end + + % Check bounds + if lb(i) ~= -Inf || ub(i) ~= Inf + beep + warning('Y2F:bilinearTermBounds','Bounds on bilinear terms have no effect.') + end + end + end + elseif sum(internalmodel.monomtable(i,:))==3 + % Decide which variable is the parameter + % At the end v1 and v2 are real variables, p is the parameter + temp_idx = find(internalmodel.monomtable(i,:)); + if length(temp_idx) == 2 % p*x^2 + v1_idx = find(internalmodel.monomtable(i,:) == 2,1); % variable + v1 = internalmodel.used_variables(v1_idx); + v2_idx = v1_idx; + v2 = v1; + p = internalmodel.used_variables(find(internalmodel.monomtable(i,:) == 1,1)); + p_idx = find(paramVars == p,1); + if isempty(p_idx) || any(paramVars == v1) + error('One of the non-quadratic terms cannot be interpreted.') + end + elseif length(temp_idx) == 3 % p*x1*x2 + temp_idx = find(internalmodel.monomtable(i,:) == 1); + temp_vars = internalmodel.used_variables(temp_idx); % variables & parameter + if ismember(temp_vars(1), paramVars) && ~any(ismember(temp_vars(2:3), paramVars)) + v1_idx = temp_idx(2); % variables + v1 = temp_vars(2); + v2_idx = temp_idx(3); + v2 = temp_vars(3); + p = temp_vars(1); + p_idx = find(paramVars == p,1); + elseif ismember(temp_vars(2), paramVars) && ~any(ismember(temp_vars([1 3]), paramVars)) + v1_idx = temp_idx(1); % variables + v1 = temp_vars(1); + v2_idx = temp_idx(3); + v2 = temp_vars(3); + p = temp_vars(2); + p_idx = find(paramVars == p,1); + elseif ismember(temp_vars(3), paramVars) && ~any(ismember(temp_vars(1:2), paramVars)) + v1_idx = temp_idx(1); % variables + v1 = temp_vars(1); + v2_idx = temp_idx(2); + v2 = temp_vars(2); + p = temp_vars(3); + p_idx = find(paramVars == p,1); + else + error('One of the non-quadratic terms cannot be interpreted.') + end + else + error('One of the non-quadratic terms cannot be interpreted.') + end + + % Variable is parameter --> remove it + removeIdx = [removeIdx i]; + + if f(i) ~= 0 % pseudo-variable affects cost --> param in H + qcqpParams.H(end+1) = newAdditiveQcqpParam(sub2ind(size(H),v1_idx,v2_idx),p_idx,1,f(i)); + qcqpParams.H(end+1) = newAdditiveQcqpParam(sub2ind(size(H),v2_idx,v1_idx),p_idx,1,f(i)); + end + + % Cannot appear in quadratic cost + if nnz(H(i,:)) > 0 || nnz(H(:,i)) > 0 + error('Non-quadratic term appears in cost.') + end + + % Cannot appear in equalities + if nnz(Aeq(:,i)) > 0 + error('Nonlinear equalities are not allowed.') + end + + % Check bounds + if lb(i) ~= -Inf || ub(i) ~= Inf + beep + warning('Y2F:nonlinearTermBounds','Bounds on nonlinear terms have no effect.') + end + + % Check inequalities + rows = find(Aineq(:,i)); + for row=rows' + [k,quadIneq,Q,l,r] = findOrCreateQuadraticInequality(row,quadIneq,Q,l,r); + if v1_idx ~= v2_idx % make sure Q is symmetric + qcqpParams.Q(end+1) = newAdditiveQcqpParam(sub2ind(size(Q{k}),v1_idx,v2_idx),p_idx,k,0.5*Aineq(row,i)); + qcqpParams.Q(end+1) = newAdditiveQcqpParam(sub2ind(size(Q{k}),v2_idx,v1_idx),p_idx,k,0.5*Aineq(row,i)); + else + qcqpParams.Q(end+1) = newAdditiveQcqpParam(sub2ind(size(Q{k}),v1_idx,v1_idx),p_idx,k,Aineq(row,i)); + end + end + else + error('One of the non-quadratic terms cannot be interpreted.') + end + end + end + + % Before removing params, every real state can be recovered + solverVars = internalmodel.used_variables; + solverVars(removeIdx) = []; + + % Compute shifts of variables (to adjust parameters) + shift = zeros(1,length(internalmodel.used_variables)); + for i=1:length(shift) + shift(i) = nnz(removeIdx <= i); + end + + % Remove parameter indices from equations + H(removeIdx,:) = []; + H(:,removeIdx) = []; + f(removeIdx) = []; + Aineq(:,removeIdx) = []; + Aeq(:,removeIdx) = []; + lb(removeIdx) = []; + ub(removeIdx) = []; + if ~isempty(Q) + for k=1:numel(Q) + Q{k}(removeIdx,:) = []; + Q{k}(:,removeIdx) = []; + end + l(removeIdx,:) = []; + end + + % Shift indices of parameters + for i=1:numel(qcqpParams.H) + [row,col] = ind2sub(size(H)+length(removeIdx),qcqpParams.H(i).maps2index); + qcqpParams.H(i).maps2index = sub2ind(size(H),row-shift(row),col-shift(col)); + end + for i=1:numel(qcqpParams.f) + qcqpParams.f(i).maps2index = qcqpParams.f(i).maps2index - shift(qcqpParams.f(i).maps2index); + end + for i=1:numel(qcqpParams.Aineq) + [row,col] = ind2sub(size(Aineq)+[0 length(removeIdx)],qcqpParams.Aineq(i).maps2index); + qcqpParams.Aineq(i).maps2index = sub2ind(size(Aineq),row,col-shift(col)); + end + for i=1:numel(qcqpParams.Aeq) + [row,col] = ind2sub(size(Aeq)+[0 length(removeIdx)],qcqpParams.Aeq(i).maps2index); + qcqpParams.Aeq(i).maps2index = sub2ind(size(Aeq),row,col-shift(col)); + end + for i=1:numel(qcqpParams.lb) + qcqpParams.lb(i).maps2index = qcqpParams.lb(i).maps2index - shift(qcqpParams.lb(i).maps2index); + end + for i=1:numel(qcqpParams.ub) + qcqpParams.ub(i).maps2index = qcqpParams.ub(i).maps2index - shift(qcqpParams.ub(i).maps2index); + end + for i=1:numel(qcqpParams.Q) + [row,col] = ind2sub(size(Q{qcqpParams.Q(i).maps2mat})+length(removeIdx),qcqpParams.Q(i).maps2index); + qcqpParams.Q(i).maps2index = sub2ind(size(Q{qcqpParams.Q(i).maps2mat}),row,col-shift(col)); + end + for i=1:numel(qcqpParams.l) + qcqpParams.l(i).maps2index = qcqpParams.l(i).maps2index - shift(qcqpParams.l(i).maps2index); + end + + % Shift & sort binary variables + qcqpParams.bidx = sort(qcqpParams.bidx - shift(qcqpParams.bidx)); + + % Finish converting linear inequalities to quadratic ones + for i=1:size(quadIneq,2) + row = quadIneq(1,i); + k = quadIneq(2,i); + + r(k) = r(k) + bineq(row); + l(:,k) = l(:,k) + Aineq(row,:)'; + + % Convert bineq params + relevantParams = findRelevantParams(row, 1, size(bineq), qcqpParams.bineq); + for j=fliplr(relevantParams) % sort descending + qcqpParams.r(end+1) = newAdditiveQcqpParam(k,qcqpParams.bineq(j).maps2origparam, ... + 1, qcqpParams.bineq(j).factor); + qcqpParams.bineq(j) = []; + end + + % Convert Aineq params + relevantParams = findRelevantParams(row, 1:size(Aineq,2), size(Aineq), qcqpParams.Aineq); + for j=fliplr(relevantParams) % sort descending + [~,col] = ind2sub(size(Aineq), qcqpParams.Aineq(j).maps2index); + qcqpParams.l(end+1) = newAdditiveQcqpParam(col,qcqpParams.Aineq(j).maps2origparam, ... + k, qcqpParams.Aineq(j).factor); + qcqpParams.Aineq(j) = []; + end + end + % Compute shift in rows for linear inequalites + shift = zeros(1,length(bineq)); + for i=1:length(shift) + shift(i) = nnz(quadIneq(1,:) <= i); + end + % Delete linear inequalities + Aineq(quadIneq(1,:),:) = []; + bineq(quadIneq(1,:)) = []; + % Fix parameters + for i=1:numel(qcqpParams.Aineq) + [row,col] = ind2sub(size(Aineq)+[length(quadIneq(1,:)) 0],qcqpParams.Aineq(i).maps2index); + qcqpParams.Aineq(i).maps2index = sub2ind(size(Aineq),row-shift(row),col); + end + for i=1:numel(qcqpParams.bineq) + qcqpParams.bineq(i).maps2index = qcqpParams.bineq(i).maps2index - shift(qcqpParams.bineq(i).maps2index); + end + + % Convert inequalities to bounds - Round 2 + % This is only necessary if we have parameters that affect bounds + bounds_idx = []; + for i=1:size(Aineq,1) + vars = find(Aineq(i,:)); % variables used in inequality + if length(vars) == 1 && is(recover(solverVars(vars)),'linear') + relevantParams = findRelevantParams(i, 1:size(Aineq,2), size(Aineq), qcqpParams.Aineq); + if isempty(relevantParams) % No parameters affecting LHS of inequality + if Aineq(i,vars) > 0 && ub(vars) == Inf % No bounds so far + % we can make a bound out of this + bounds_idx(end+1) = i; + ub(vars) = bineq(i)/Aineq(i,vars); + + % Convert bineq params + relevantParams = findRelevantParams(i, 1, size(bineq), qcqpParams.bineq); + for j=fliplr(relevantParams) % sort descending + qcqpParams.ub(end+1) = newAdditiveQcqpParam(vars,qcqpParams.bineq(j).maps2origparam, ... + 1, qcqpParams.bineq(j).factor/Aineq(i,vars)); + qcqpParams.bineq(j) = []; + end + elseif Aineq(i,vars) < 0 && lb(vars) == -Inf % No bounds so far + % we can make a bound out of this + bounds_idx(end+1) = i; + lb(vars) = bineq(i)/Aineq(i,vars); + + % Convert bineq params + relevantParams = findRelevantParams(i, 1, size(bineq), qcqpParams.bineq); + for j=fliplr(relevantParams) % sort descending + qcqpParams.lb(end+1) = newAdditiveQcqpParam(vars,qcqpParams.bineq(j).maps2origparam, ... + 1, qcqpParams.bineq(j).factor/Aineq(i,vars)); + qcqpParams.bineq(j) = []; + end + end + end + end + end + % Compute shift in rows for linear inequalites + shift = zeros(1,length(bineq)); + for i=1:length(shift) + shift(i) = nnz(bounds_idx <= i); + end + % Delete rows + Aineq(bounds_idx,:) = []; + bineq(bounds_idx) = []; + % Fix parameters + for i=1:numel(qcqpParams.Aineq) + [row,col] = ind2sub(size(Aineq)+[length(bounds_idx) 0],qcqpParams.Aineq(i).maps2index); + qcqpParams.Aineq(i).maps2index = sub2ind(size(Aineq),row-shift(row),col); + end + for i=1:numel(qcqpParams.bineq) + qcqpParams.bineq(i).maps2index = qcqpParams.bineq(i).maps2index - shift(qcqpParams.bineq(i).maps2index); + end + end + + function [k,quadIneq,Q,l,r] = findOrCreateQuadraticInequality(rowIdx,quadIneq,Q,l,r) + % Helper function to find/create quadratic inequalities + % Input: + % rowIdx index of linear inequality (row in Aineq) + % quadIneq data structure containing information about quadratic + % inequalities + % first row: id of linear inequality + % second row: id of quad inequality + % Q,l,r quadratic inequalities + % + % Output: + % k index of quadratic inequality (as in Q{k} = ...) + % updated quadIneq, Q, l, and r + id = find(quadIneq(1,:) == rowIdx); + if ~isempty(id) + assert(length(id) == 1); + k = quadIneq(2,id); + else + Q{end+1} = spalloc(size(H,1),size(H,2),0);%zeros(size(H)); + l(:,end+1) = spalloc(size(H,1),1,0); %zeros(size(H,1),1); + r(end+1) = 0; + k = length(r); + quadIneq(:,end+1) = [rowIdx;k]; + end + end + + function outputFORCES = buildOutput() + % Helper function that builds the output struct required for the FORCES + % solver(s), an outputMap that allows to recover the wantend output + % values from the solver output, an outputParamTable that allows the + % usage of parameters in outputs + + outputFORCES = {}; + % we need to know which output to get from which solver + sys.outputMap = zeros(3,0); % 1st row: variable type (1=decision variable,2=parameter) + % 2nd row: index of solver/index of parameter value + % 3rd row: index of output/index of element inside value matrix + + o = ones(numel(stages),1); % counter variable outputs + p = 1; % counter parameters + k = 1; % counter total number of outputs + for i=1:numel(solverOutputs) + outputVars = getvariables(solverOutputs{i}); + sys.outputBase{i} = full(getbase(solverOutputs{i})); + sys.outputSize{i} = size(solverOutputs{i}); + for j=1:length(outputVars) + idx = find(solverVars == outputVars(j),1); + if length(idx) == 1 + [stage, state, component] = findVariableIndex(graphComponents,idx); + outputFORCES{component}(o(component)) = newOutput(sprintf('o_%u',o(component)), stage, state); + sys.outputMap(:,end+1) = [1; component; o(component)]; + o(component) = o(component) + 1; + else + idx = find(paramVars == outputVars(j),1); + if length(idx) == 1 + sys.outputMap(:,end+1) = [2; yalmipParamMap(:,idx)]; + p = p+1; + else + error('Output is not valid. Only linear combinations of optimization variables and parameters are allowed.') + end + end + k = k + 1; + end + end + sys.lengthOutput = k-1; + end + + function checkQcqpForInfeasibility() + % Helper function that checks if the QCQP might be infeasible and warns + % the user + + % Check if cost matrix is positive semi-definite + if isempty(qcqpParams.H) && (~issymmetric(H) || ~all(eig(H) >= -1e-7)) + error('Hessian is not positive semi-definite.') + end + + if ~issymmetric(H_temp) + beep + warning('Y2F:nonsymmetricHessian','Hessian is not symmetric.') + end + + % Check if bounds make sense + if isempty(qcqpParams.lb) && isempty(qcqpParams.ub) && any(lb > ub) + error('Bounds are infeasible.') + end + + % Check if any quadratic constraint matrix is indefinite + for k=1:numel(Q_temp) + if ~issymmetric(Q_temp{k}) + beep + warning('Y2F:nonsymmetricQuadraticConstraint', ... + 'One of the quadratic constraint matrices is not symmetric.') + end + + if isempty(qcqpParams.Q) && any(eig(Q{k}) < -1e-7) && any(eig(Q{k}) > -1e-7) + beep + warning('Y2F:indefiniteQuadraticConstraint', ... + 'One of the quadratic constraint matrices is indefinite.') + end + end + + % Create warning if binary variables are used + if ~isempty(qcqpParams.bidx) + while 1 + beep + % MATLAB displays anything between [\8 ... ]\8 in orange font + in = input(['[' 8 'YALMIP created a mixed integer problem. This could slow down the generated solver.\nDo you want to continue [y/n]? ]' 8],'s'); + if strcmpi(in,'y') + break + elseif strcmpi(in,'n') + error('Please reformulate your problem or contact support at support@embotech.com.'); + end + end + end + end + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/subsref.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/subsref.m new file mode 100755 index 0000000..3fd6fed --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/@optimizerFORCES/subsref.m @@ -0,0 +1,18 @@ +function [output,exitflag,info] = subsref(self,subs) +%SUBSREF Overload of subsref. Makes A{B} for object A possible. +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +if isequal(subs.type,'.') + error('No fields accessible in OPTIMIZERFORCES.'); +elseif isequal(subs.type,'{}') || isequal(subs.type,'()') % --> call solver + if numel(subs.subs) == 1 && isa(subs.subs{1},'cell') + paramValues = subs.subs{1}; + else + paramValues = subs.subs; + end + [output,exitflag,info] = self.interfaceFunction(paramValues); +end \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/checkIfGraphIsConnected.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/checkIfGraphIsConnected.m new file mode 100755 index 0000000..c604cfa --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/checkIfGraphIsConnected.m @@ -0,0 +1,28 @@ +function result = checkIfGraphIsConnected( G ) +%CHECKIFGRAPHISCONNECTED result = 1 if G is connected graph, 0 otherwise +% G has the format described in EMPTYGRAPH +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +if G.n <= 1 + result = 1; + return +end + +nextVertices = 1; +verticesNotVisited = 2:G.n; + +while ~isempty(verticesNotVisited) && ~isempty(nextVertices) + v = nextVertices(1); + idx = intersect(find(G.adjMatrix(v,:)), verticesNotVisited); + verticesNotVisited = setdiff(verticesNotVisited, idx); + nextVertices = [nextVertices(2:end) idx]; +end + +result = isempty(verticesNotVisited); + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/checkIfGraphIsPathGraph.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/checkIfGraphIsPathGraph.m new file mode 100755 index 0000000..f64cdcb --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/checkIfGraphIsPathGraph.m @@ -0,0 +1,35 @@ +function result = checkIfGraphIsPathGraph( G ) +%CHECKGRAPHISPATHGRAPH Checks if a graph is a path graph +% result = 1 if given graph is a path graph, 0 otherwise +% G has the format described in EMPTYGRAPH +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +result = 0; + +if ~checkIfGraphIsConnected(G) + return +end + +% Simple cases +if G.n <= 1 + result = 1; + return +end + +% Do we have the right degrees? We need two 1s and the rest 2s +deg = sum(G.adjMatrix); +% Find the 1s +ones = find(deg == 1); +if length(ones) == 2 + deg(ones) = []; + if all(deg == 2) + result = 1; + end +end + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/contractVertices.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/contractVertices.m new file mode 100755 index 0000000..9533469 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/contractVertices.m @@ -0,0 +1,37 @@ +function G = contractVertices( G, vertex1, vertex2 ) +%CONTRACTVERTICES Contract two vertices of a graph +% graph = graph data structure (see EMPTYGRAPH for more information) +% vertex1 = index of first vertex +% vertex2 = index of second vertex +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +if vertex1 == vertex2 + return % nothing to do +end + +% We want to keep vertices in order --> switch if necessary +if G.vertices{vertex1}(1) > G.vertices{vertex2}(1) + v = vertex1; + vertex1 = vertex2; + vertex2 = v; +end + +% Fix edges +G.adjMatrix(vertex1,:) = G.adjMatrix(vertex1,:) | G.adjMatrix(vertex2,:); +G.adjMatrix(:,vertex1) = G.adjMatrix(:,vertex1) | G.adjMatrix(:,vertex2); +G.adjMatrix(vertex1,vertex1) = 0; +G.adjMatrix(:,vertex2) = []; +G.adjMatrix(vertex2,:) = []; + +% Merge variable sets +G.vertices{vertex1} = sort([G.vertices{vertex1} G.vertices{vertex2}]); +G.vertices(vertex2) = []; + +G.n = G.n - 1; + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/emptyGraph.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/emptyGraph.m new file mode 100755 index 0000000..10c0027 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/emptyGraph.m @@ -0,0 +1,18 @@ +function G = emptyGraph() +%EMPTYGRAPH returns an empty graph G +% Graphs are stored as structs with the following fields: +% .vertices cell array of vertex labels (lists of variable indices) +% .adjMatrix adjacency matrix +% .n number of vertices +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +G.vertices = {}; +G.adjMatrix = []; +G.n = 0; + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/findPathPartition.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/findPathPartition.m new file mode 100755 index 0000000..257d42c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/findPathPartition.m @@ -0,0 +1,63 @@ +function partition = findPathPartition( G ) +%FINDPATHPARTITION Applies path partitioning algorithm to find a maximal +%path partition of the graph G. G has the format described in EMPTYGRAPH. +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +if G.n == 1 + partition = G; + return +end + +% order vertices according to their degree --> lower degree vertices are +% preferred as starting vertices (likely to belong to first or last stage) +indicies = 1:G.n; +deg = sum(G.adjMatrix); +[~,I] = sort(deg); +indicies = indicies(I); + +% Start path partitioning with every vertices and compare number of subsets +best_vertices = {}; +min_cost = 0; +for i=indicies + % Path partitioning ("Algorithm 1" in the thesis) + v = i; + vertices = {[G.vertices{v}]}; + remaining_v = ones(1,G.n); + remaining_v(v) = 0; + while any(remaining_v) + next_v = find(any(G.adjMatrix(v,:),1) & remaining_v); + vertices{end+1} = [G.vertices{next_v}]; + remaining_v(next_v) = 0; + v = next_v; + end + + % Compare number of subsets with current best + cost = costOfGraphVertices(vertices); + if isempty(best_vertices) || numel(vertices) > numel(best_vertices) || cost < min_cost + best_vertices = vertices; + min_cost = cost; + end +end + +% Create new graph from path partitioning +partition = emptyGraph; +partition.vertices = best_vertices; +partition.n = numel(best_vertices); +partition.adjMatrix = zeros(partition.n); +partition.adjMatrix(partition.n+1:partition.n+1:end) = 1; +partition.adjMatrix(2:partition.n+1:end) = 1; + +end + +function cost = costOfGraphVertices(vertices) +% Computes a cost that can be used to compare different path graphs +% Cost depends on number of subsets and variables in those subsets + +cost = sum(cellfun(@length,vertices).^3); + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/findRelevantParams.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/findRelevantParams.m new file mode 100755 index 0000000..37dd920 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/findRelevantParams.m @@ -0,0 +1,34 @@ +function idx = findRelevantParams( rowIdx, colIdx, matrixSize, qcqpParamList, maps2mat ) +%FINDRELEVANTPARAMS Helper function that finds QCQP parameters that apply +%to given (subscript) indices (and matrix) inside given parameter list. +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +% convert subscripts to linear indices +linIndices = []; +if all(matrixSize > 1) + for c=colIdx + for r=rowIdx + linIndices(end+1) = sub2ind(matrixSize,r,c); + end + end +elseif matrixSize(2) == 1 + linIndices = rowIdx; +elseif matrixSize(1) == 1 + linIndices = colIdx; +end + +% compare linear indices to index of every QCQP param +idx = []; +for i=1:numel(qcqpParamList) + if any(ismember(qcqpParamList(i).maps2index, linIndices)) && ... + (nargin==4 || qcqpParamList(i).maps2mat == maps2mat) + idx(end+1) = i; + end +end + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/findVariableIndex.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/findVariableIndex.m new file mode 100755 index 0000000..ddb9645 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/findVariableIndex.m @@ -0,0 +1,33 @@ +function [vertexIdx,localIdx,componentIdx] = findVariableIndex( components, variable ) +%FINDVARIABLEINDEX Returns index of vertex where the given variable is +% located, the position inside the vertex, and the corresponding component +% index. If variable cannot be found this function returns 0. +% +% Input: +% components cell array of connected graphs +% variable variable number +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +if ~iscell(components) + components = {components}; +end + +for k=1:numel(components) + G = components{k}; + vertexIdx = 0; + componentIdx = k; + for i=1:numel(G.vertices) + localIdx = find(G.vertices{i} == variable,1); + if ~isempty(localIdx) + vertexIdx = i; + return + end + end +end + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/forcesprologo.jpg b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/forcesprologo.jpg new file mode 100755 index 0000000..2056f73 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/forcesprologo.jpg differ diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/generateAdjMatrixFromEqualities.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/generateAdjMatrixFromEqualities.m new file mode 100755 index 0000000..bb33ab9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/generateAdjMatrixFromEqualities.m @@ -0,0 +1,17 @@ +function adj = generateAdjMatrixFromEqualities( Aeq ) +%GENERATEADJMATRIXFROMEQUALITIES Generates adjacency matrix from equality +%constraints. If two variables appear in the same equality, the +%corresponding vertices are connected. +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +n = size(Aeq,2); +adj = double(Aeq ~= 0); % temp result +adj = (adj'*adj) > 0; +adj(1:n+1:end) = 0; % diagonal has to be 0 + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/generateStagesFromGraph.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/generateStagesFromGraph.m new file mode 100755 index 0000000..1b1494e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/generateStagesFromGraph.m @@ -0,0 +1,496 @@ +function [stages, params, standardParamValues, forcesParamMap] = generateStagesFromGraph( G, H,f,Aineq,bineq,Aeq,beq,l,Q,r,lb,ub,qcqpParams,yalmipParamMap ) +%GENERATESTAGESFROMGRAPH Generates stages from path graph containing all variables of the problem +% qcqpParams will be modified to contain a link to the params they are linked to +% Input: +% yalmipParamMap: Map that maps YALMIP parameters to value matrices +% 1st row: index of matrix with values, +% 2nd row: index of element inside matrix +% +% Output: +% stages: FORCES stages +% params: FORCES parameters +% standardParamValues: "standard" values for FORCES parameters. +% Not every element of the matrix has be +% covered by a QCQP parameter. Param values +% get added to this value. +% forcesParamMap: Map that maps FORCES parameters to parameter value matrices +% .(param_name)(1,.): index of element that's affected +% .(param_name)(2,.): factor by which value gets multiplied +% .(param_name)(3,.): matrix that contains value +% .(param_name)(4,.): points to element inside value matrix +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +SPARSITY_THRESHOLD = 0.2; + +if ~checkIfGraphIsPathGraph(G) + error('Path is not a path graph. Other structures are not supported.') +end + +% Find all variable names +last_idx = G.vertices{1}; +all_idx = sort(cell2mat(G.vertices)); + +% Prepare stages +stages = MultistageProblem(G.n); +params = struct('name',{},'maps2stage',{},'maps2data',{},'type',{},... + 'maps2mat',{},'structure',{},'variables',{}); % empty param struct +standardParamValues = struct; +p = 1; +if nargout >= 4 + forcesParamMap = struct; +end + +% Construct matrices where parametric elements are == 1 +H_temp = H; +H_temp([qcqpParams.H.maps2index]) = 1; +Aineq_temp = Aineq; +Aineq_temp([qcqpParams.Aineq.maps2index]) = 1; +Aeq_temp = Aeq; +Aeq_temp([qcqpParams.Aeq.maps2index]) = 1; +Q_temp = Q; +for i=1:numel(qcqpParams.Q) + Q_temp{qcqpParams.Q(i).maps2mat}(qcqpParams.Q(i).maps2index) = 1; +end +l_temp = l; +for i=1:numel(qcqpParams.l) + l_temp(qcqpParams.l(i).maps2index,qcqpParams.l(i).maps2mat) = 1; +end + +% Assemble linear indices of all parameters (for faster checking afterwards) +qcqpParamIndices.H = [qcqpParams.H.maps2index]; +qcqpParamIndices.f = [qcqpParams.f.maps2index]; +qcqpParamIndices.Aineq = [qcqpParams.Aineq.maps2index]; +qcqpParamIndices.bineq = [qcqpParams.bineq.maps2index]; +qcqpParamIndices.Aeq = [qcqpParams.Aeq.maps2index]; +qcqpParamIndices.beq = [qcqpParams.beq.maps2index]; +qcqpParamIndices.l = [qcqpParams.l.maps2index]; +qcqpParamIndices.Q = [qcqpParams.Q.maps2index]; +qcqpParamIndices.r = [qcqpParams.r.maps2index]; +qcqpParamIndices.lb = [qcqpParams.lb.maps2index]; +qcqpParamIndices.ub = [qcqpParams.ub.maps2index]; + +% Go through all stages (and create them) +barwidth = 30; +%status = y2f_progressbar([],0,G.n,barwidth); +status = []; +createParamTime = 0; +for i=1:G.n + idx = G.vertices{i}; % sorting just to make sure code below works + stages(i).dims.n = length(idx); % length of stage variable zi + stages(i).cost.H = H(idx,idx); % Hessian + stages(i).cost.f = f(idx); % linear term + + % Is H a parameter? + local_H_temp = H_temp(idx,idx); + if all(local_H_temp(~eye(length(idx))) == 0) % is H diagonal? + tic; + param = findRelevantQcqpParamsAndCreateDiagonalForcesParameter( ... + i,idx,size(H),qcqpParams.H,qcqpParamIndices.H,'cost.H'); + if ~isempty(param) + standardParamValues.(param.name) = stages(i).cost.H(1:(length(idx)+1):end); + stages(i).cost.H = []; + end + createParamTime = createParamTime + toc; + else % H not diagonal --> standard function + tic; + findRelevantQcqpParamsAndCreateForcesParameter( ... + i,idx,idx,size(H),qcqpParams.H,qcqpParamIndices.H,'cost.H'); + createParamTime = createParamTime + toc; + end + + % Is f a parameter? + tic; + findRelevantQcqpParamsAndCreateForcesParameter( ... + i,idx,1,size(f),qcqpParams.f,qcqpParamIndices.f,'cost.f'); + createParamTime = createParamTime + toc; + + % Select relevant equalities and set the constraints + eq_idx = find(sum(Aeq_temp(:,idx)~=0, 2))'; + eq_idx = eq_idx(sum(Aeq_temp(eq_idx,setdiff(all_idx,[last_idx idx]))~=0,2)==0); + eq_idx = sort(eq_idx); + if i == 1 + d1IsSet = ~isempty(Aeq_temp(eq_idx,idx)); + end + if d1IsSet + if i > 1 + stages(i-1).eq.C = Aeq(eq_idx,last_idx); + end + stages(i).dims.r = length(eq_idx); % number of equality constraints + stages(i).eq.c = beq(eq_idx); + stages(i).eq.D = Aeq(eq_idx,idx); + else + if i > 1 + stages(i-1).dims.r = length(eq_idx); % number of equality constraints + stages(i-1).eq.C = Aeq(eq_idx,last_idx); + stages(i-1).eq.c = beq(eq_idx); + end + stages(i).eq.D = Aeq(eq_idx,idx); + end + + % Create parameters only if there are equations + if ~isempty(eq_idx) + % Is C a parameter? + if i > 1 + tic; + findRelevantQcqpParamsAndCreateForcesParameter( ... + i-1,eq_idx,last_idx,size(Aeq),qcqpParams.Aeq,qcqpParamIndices.Aeq,'eq.C'); + createParamTime = createParamTime + toc; + end + + % Is D a parameter? + tic; + findRelevantQcqpParamsAndCreateForcesParameter( ... + i,eq_idx,idx,size(Aeq),qcqpParams.Aeq,qcqpParamIndices.Aeq,'eq.D'); + createParamTime = createParamTime + toc; + + % Is c a parameter? + if d1IsSet + tic; + findRelevantQcqpParamsAndCreateForcesParameter( ... + i,eq_idx,1,size(beq),qcqpParams.beq,qcqpParamIndices.beq,'eq.c'); + createParamTime = createParamTime + toc; + else + tic; + findRelevantQcqpParamsAndCreateForcesParameter( ... + i-1,eq_idx,1,size(beq),qcqpParams.beq,qcqpParamIndices.beq,'eq.c'); + createParamTime = createParamTime + toc; + end + end + + % Lower bounds + temp_lb = lb(idx); + stages(i).dims.l = sum(temp_lb ~= -Inf); % number of lower bounds + stages(i).ineq.b.lbidx = find(temp_lb ~= -Inf)'; % index vector for lower bounds + stages(i).ineq.b.lb = temp_lb(temp_lb ~= -Inf); % lower bounds + + % Create parameter only if there are bounds + if ~isempty(stages(i).ineq.b.lbidx) + % Is lb a parameter? + tic; + findRelevantQcqpParamsAndCreateForcesParameter( ... + i,idx(stages(i).ineq.b.lbidx),1,size(lb),qcqpParams.lb,qcqpParamIndices.lb,'ineq.b.lb'); + createParamTime = createParamTime + toc; + end + + % Upper bounds + temp_ub = ub(idx); + stages(i).dims.u = sum(temp_ub ~= Inf); % number of upper bounds + stages(i).ineq.b.ubidx = find(temp_ub ~= Inf)'; % index vector for upper bounds + stages(i).ineq.b.ub = temp_ub(temp_ub ~= Inf); % upper bounds + + % Create parameter only if there are bounds + if ~isempty(stages(i).ineq.b.ubidx) + % Is ub a parameter? + tic; + findRelevantQcqpParamsAndCreateForcesParameter( ... + i,idx(stages(i).ineq.b.ubidx),1,size(ub),qcqpParams.ub,qcqpParamIndices.ub,'ineq.b.ub'); + createParamTime = createParamTime + toc; + end + + % Linear inequalities + ineq_idx = find(sum(Aineq_temp(:,idx)~=0, 2))'; + stages(i).dims.p = length(ineq_idx); % number of polytopic constraints + if ~isempty(ineq_idx) + stages(i).ineq.p.A = Aineq(ineq_idx, idx); % Jacobian of linear inequality + stages(i).ineq.p.b = bineq(ineq_idx); % RHS of linear inequality + + % Is p.A a parameter? + % compute sparsity + local_Aineq_temp = Aineq_temp(ineq_idx,idx); + nonzeros = find(local_Aineq_temp); + if length(nonzeros)/numel(Aineq_temp) <= SPARSITY_THRESHOLD % is Aineq sparse? + % compute location of nonzeros in big matrix + [i1, i2] = ind2sub(size(local_Aineq_temp),nonzeros); + nonzeros_idx = sub2ind(size(Aineq), ineq_idx(i1), idx(i2)); + tic; + param = findRelevantQcqpParamsAndCreateSparseForcesParameter( ... + i,nonzeros_idx,local_Aineq_temp,qcqpParams.Aineq,qcqpParamIndices.Aineq,'ineq.p.A'); + if ~isempty(param) + standardParamValues.(param.name) = stages(i).ineq.p.A(nonzeros); + stages(i).ineq.p.A = []; + end + createParamTime = createParamTime + toc; + else % Aineq is dense + tic; + findRelevantQcqpParamsAndCreateForcesParameter( ... + i,ineq_idx,idx,size(Aineq),qcqpParams.Aineq,qcqpParamIndices.Aineq,'ineq.p.A'); + createParamTime = createParamTime + toc; + end + + % Is p.b a parameter? + tic; + findRelevantQcqpParamsAndCreateForcesParameter( ... + i,ineq_idx,1,size(bineq),qcqpParams.bineq,qcqpParamIndices.bineq,'ineq.p.b'); + createParamTime = createParamTime + toc; + end + + + % Quadratic constraints + stages(i).dims.q = 0; % number of quadratic constraints + if ~isempty(Q) + stages(i).ineq.q.idx = {}; % index vectors + stages(i).ineq.q.Q = {}; % Hessians + stages(i).ineq.q.l = {}; % linear terms + stages(i).ineq.q.r = []; % RHSs + + for k=1:numel(Q) % go through each quad. inequality + subQ = Q_temp{k}(idx,idx); + subL = l_temp(idx,k); + if any(any(subQ)) || any(subL) % Inequality is relevant + quad_idx = []; + for s=1:size(subQ,1) + quad_idx = [quad_idx find(subQ(s,:)~=0)]; + if subL(s)~=0 + quad_idx(end+1) = s; + end + end + quad_idx = sort(unique(quad_idx)); + + stages(i).ineq.q.idx{end+1} = quad_idx; + stages(i).ineq.q.Q{end+1} = full(Q{k}(idx(quad_idx),idx(quad_idx))); + stages(i).ineq.q.l{end+1} = full(l(idx(quad_idx),k)); % linear terms + stages(i).ineq.q.r(end+1) = r(k); % RHSs + stages(i).dims.q = stages(i).dims.q + 1; + + orig_idx = idx(quad_idx); + + % Is Q a param? (Q,l,r are special cases because of k) + tic; + param = findRelevantQcqpParamsAndCreateForcesParameter( ... + i,orig_idx,orig_idx,size(H),qcqpParams.Q,qcqpParamIndices.Q,'ineq.q.Q', ... + k); % maps2mat argument! + % important: set maps2mat (not set in function) and set + % standard value + if ~isempty(param) + params(p-1).maps2mat = stages(i).dims.q; + standardParamValues.(param.name) = stages(i).ineq.q.Q{end}; + stages(i).ineq.q.Q{end} = []; + end + createParamTime = createParamTime + toc; + + % Is l a param? + tic; + param = findRelevantQcqpParamsAndCreateForcesParameter( ... + i,orig_idx,1,size(f),qcqpParams.l,qcqpParamIndices.l,'ineq.q.l', ... + k); % maps2mat argument! + % important: set maps2mat (not set in function) and set + % standard value + if ~isempty(param) + params(p-1).maps2mat = stages(i).dims.q; + standardParamValues.(param.name) = stages(i).ineq.q.l{end}; + stages(i).ineq.q.l{end} = []; + end + createParamTime = createParamTime + toc; + + % Is r a param? + tic; + param = findRelevantQcqpParamsAndCreateForcesParameter( ... + i,1,k,size(r),qcqpParams.r,qcqpParamIndices.r,'ineq.q.r',... + 1); % maps2mat argument --> don't set standard value + + % important: set maps2mat (not set in function) and set + % standard value + if ~isempty(param) + params(p-1).maps2mat = stages(i).dims.q; + standardParamValues.(param.name) = stages(i).ineq.q.r(end); + stages(i).ineq.q.r(end) = 0; + end + createParamTime = createParamTime + toc; + end + end + end + + % Assign binary variables, if there are any + bidx = find(ismember(idx,qcqpParams.bidx)); + if ~isempty(bidx) + stages(i).bidx = bidx; + end + + % Assign boundaries on binary variables if needed + if isfield(stages(i),'bidx') + for j=stages(i).bidx + if ~ismember(j,stages(i).ineq.b.lbidx) + stages(i).ineq.b.lbidx(end+1) = j; + stages(i).ineq.b.lb(end+1) = 0; + stages(i).dims.l = stages(i).dims.l + 1; + end + if ~ismember(j,stages(i).ineq.b.ubidx) + stages(i).ineq.b.ubidx(end+1) = j; + stages(i).ineq.b.ub(end+1) = 1; + stages(i).dims.u = stages(i).dims.u + 1; + end + end + end + + last_idx = idx; + + status = y2f_progressbar(status,i,G.n,barwidth); +end + + function result = computeLinearIndices(matrixSize, row_idx, col_idx) + % Helper function that returns array of indices for all elements in the + % specified rows and columns + + if ~isempty(row_idx) && ~isempty(col_idx) + m = length(row_idx); + n = length(col_idx); + cols = repmat(col_idx,m,1); + result = sub2ind(matrixSize, repmat(row_idx,1,n), cols(:)'); + else + result = zeros(0,1); + end + end + + function param = findRelevantQcqpParamsAndCreateDiagonalForcesParameter( stage, row_idx, fullMatrixSize, qcqpParams, qcqpParamIndices, param_name) + % Helper function to create diagonal FORCES parameters if necessary + % Attention: standard value is not set by this function! + % Do it after calling it with 'standardParamValues.(param.name) = ...' + + param = []; + + % Find relevant QCQP parameters (=> check indices in big matrix) + element_idx = sub2ind(fullMatrixSize, row_idx, row_idx); + [relevant_params,param_local_idx] = ismember(qcqpParamIndices, element_idx); % find positions of parameters + % relevant_params(j) is 1 iff QCQP param at index j is needed + % param_local_idx(j) contains the (local) index of the element + % influenced by this parameter + + if any(relevant_params) % We have QCQP params --> create a FORCES param + % Create FORCES param with standard value + param_id = sprintf('p_%u',p); + params(p) = newParam(param_id, stage, param_name, 'diag'); + + % Make param map (additive parts of parameter, see help of + % generateStagesFromGraph) + forcesParamMap.(param_id) = zeros(4,0); + for j=find(relevant_params) + forcesParamMap.(param_id)(:,end+1) = [param_local_idx(j);... + qcqpParams(j).factor;... + yalmipParamMap(:,qcqpParams(j).maps2origparam)]; + end + + param = params(p); + p = p+1; + end + + end + + function param = findRelevantQcqpParamsAndCreateSparseForcesParameter( stage, nonzero_idx, sparsityPattern, qcqpParams, qcqpParamIndices, param_name) + % Helper function to create sparse FORCES parameters if necessary + % Attention: standard value is not set by this function! + % Do it after calling it with 'standardParamValues.(param.name) = ...' + + param = []; + + % Find relevant QCQP parameters (=> check indices in big matrix) + [relevant_params,param_local_idx] = ismember(qcqpParamIndices, nonzero_idx); % find positions of parameters + % relevant_params(j) is 1 iff QCQP param at index j is needed + % param_local_idx(j) contains the (local) index of the element + % influenced by this parameter + + if any(relevant_params) % We have QCQP params --> create a FORCES param + % Create FORCES param + param_id = sprintf('p_%u',p); + params(p) = newParam(param_id, stage, param_name, 'sparse', sparsityPattern); + + % Make param map (additive parts of parameter, see help of + % generateStagesFromGraph) + forcesParamMap.(param_id) = zeros(4,0); + for j=find(relevant_params) + forcesParamMap.(param_id)(:,end+1) = [param_local_idx(j);... + qcqpParams(j).factor;... + yalmipParamMap(:,qcqpParams(j).maps2origparam)]; + end + + param = params(p); + p = p+1; + end + + end + + function param = findRelevantQcqpParamsAndCreateForcesParameter( stage, row_idx, col_idx, fullMatrixSize, qcqpParams, qcqpParamIndices, param_name, maps2mat) + % Helper function to create FORCES parameters if necessary + + param = []; + + % Find relevant QCQP parameters (=> check indices in big matrix) + element_idx = computeLinearIndices(fullMatrixSize, row_idx, col_idx); + [relevant_params,param_local_idx] = ismember(qcqpParamIndices, element_idx); % find positions of parameters + % relevant_params(j) is 1 iff QCQP param at index j is needed + % param_local_idx(j) contains the (local) index of the element + % influenced by this parameter + + % special case: maps2mat was set (we're dealing with Q or l) + if nargin >= 8 + % filter params that do not affect this "mat" + not_affected_params = [qcqpParams.maps2mat] ~= maps2mat; + relevant_params(not_affected_params) = 0; + param_local_idx(not_affected_params) = 0; + end + + if any(relevant_params) % We have QCQP params --> create a FORCES param + % Create FORCES param with standard value + param_id = sprintf('p_%u',p); + params(p) = newParam(param_id, stage, param_name); + if nargin <= 7 % no maps2mat (we can't set standardParamValues for that case) + var = regexp(param_name,'[.]','split'); % split name + if length(var) == 2 + standardParamValues.(param_id) = stages(stage).(genvarname(var{1})).(genvarname(var{2})); + stages(stage).(genvarname(var{1})).(genvarname(var{2})) = []; + elseif length(var) == 3 + standardParamValues.(param_id) = stages(stage).(genvarname(var{1})).(genvarname(var{2})).(genvarname(var{3})); + stages(stage).(genvarname(var{1})).(genvarname(var{2})).(genvarname(var{3})) = []; + else + error('This case exists?'); + end + end + + % Make param map (additive parts of parameter, see help of + % generateStagesFromGraph) + forcesParamMap.(param_id) = zeros(4,0); + for j=find(relevant_params) + forcesParamMap.(param_id)(:,end+1) = [param_local_idx(j);... + qcqpParams(j).factor;... + yalmipParamMap(:,qcqpParams(j).maps2origparam)]; + end + + param = params(p); + p = p+1; + end + + end + +% function createDiagonalCostParameter(stage, relevantParams, element_idx) +% % Helper function to create a FORCES parameters for a diagonal cost +% params(p) = newParam(sprintf('p_%u',p), stage, 'cost.H', 'diag'); +% standardParamValues.(sprintf('p_%u',p)) = stages(stage).cost.H(logical(eye(length(element_idx)))); % only use diagonal +% stages(stage).cost.H = []; +% +% forcesParamMap.(sprintf('p_%u',p)) = zeros(4,0); +% paramSize = size(standardParamValues.(sprintf('p_%u',p))); +% for j=relevantParams +% for element=1:length(element_idx) +% value_idx = find(sub2ind(size(H),element_idx(element),element_idx(element)) == ... +% qcqpParams.H(j).maps2index); +% if length(value_idx) == 1 +% forcesParamMap.(sprintf('p_%u',p))(:,end+1) = [element;... +% qcqpParams.H(j).factor;... +% yalmipParamMap(:,qcqpParams.H(j).maps2origparam)]; +% elseif length(value_idx) > 1 +% error('Mistake in the new stages formulation') +% end +% end +% end +% p = p + 1; +% end + +fprintf('\nTime spent in createParameter: %5.1f seconds\n', createParamTime); + +end + + + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/newAdditiveQcqpParam.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/newAdditiveQcqpParam.m new file mode 100755 index 0000000..49835b2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/newAdditiveQcqpParam.m @@ -0,0 +1,40 @@ +function param = newAdditiveQcqpParam( maps2index, maps2origparam, maps2mat, factor ) +%NEWQCQPPARAM Creates new additive parameter for QCQPs +% structure: +% param.maps2index index of QCQP matrix elements that is affected +% by parameter +% param.maps2origparam index of original parameter (used to recover +% value) +% param.factor factor by which parameter value has to be +% multiplied before it is added +% param.maps2mat index of QCQP matrix (only relevant for quad. +% constraints) +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +param.maps2index = maps2index; + +if nargin >= 2 + param.maps2origparam = maps2origparam; +else + param.maps2origparam = 0; +end + +if nargin >= 3 + param.maps2mat = maps2mat; +else + param.maps2mat = 1; +end + +if nargin >= 4 + param.factor = factor; +else + param.factor = 1; +end + + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/pathGraphsFromQcqp.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/pathGraphsFromQcqp.m new file mode 100755 index 0000000..63488a7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/pathGraphsFromQcqp.m @@ -0,0 +1,42 @@ +function graphs = pathGraphsFromQcqp(H,Aineq,Aeq,Q,l) +%PATHGRAPHSFROMQCQP Creates path graphs from a given QCQP using path +% partitioning algorithm. +% Input: +% H,Aineq,Aeq,Q,l are standard QCQP matrices +% Output: +% cell array of graphs (see EMPTYGRAPH for graph format) +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +% Construct graph from equality constraints +G = emptyGraph; +n = size(H,1); +G.vertices = num2cell(1:n); +G.adjMatrix = generateAdjMatrixFromEqualities(Aeq); +G.n = n; + +% Variables have to be in the same stage if they appear in the same cost +% term or linear/quadratic inequality +G = simplifyGraphWithCost(G,H); +G = simplifyGraphWithIneq(G,Aineq); +for k=1:numel(Q) + G = simplifyGraphWithQuadIneq(G,Q{k},l(:,k)); +end + +if ~checkIfGraphIsConnected(G) + beep + warning('Y2F:separableProblem','Problem is separable. Consider using multiple solvers.'); +end + +% Find components of graph +graphs = splitGraphIntoComponents(G); + +% Use partitioning algorithm to convert each component into path graph +for i=1:numel(graphs) + graphs{i} = findPathPartition(graphs{i}); +end + +end \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/simplifyGraphWithCost.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/simplifyGraphWithCost.m new file mode 100755 index 0000000..90682c8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/simplifyGraphWithCost.m @@ -0,0 +1,32 @@ +function G = simplifyGraphWithCost( G, H ) +%SIMPLIFYGRAPHWITHCOST contracts vertices that contain variables in +%their labels that appear in the same cost term. +%Example: cost = ... + x2 * x3 + ... --> vertices with x2 and x3 in their +%respective label are contracted +%Input: +% G graph (format see EMPTYGRAPH) +% H cost matrix (Hessian) +%Output: +% modified graph G +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +if ~isempty(H) && size(H,1)~=size(H,2) + error('H has to be quadratic') +end + +for r=1:size(H,1) + for c=find(H(r,:)~=0) + if c~=r + i1 = findVariableIndex(G,r); + i2 = findVariableIndex(G,c); + G = contractVertices(G,i1,i2); + end + end +end + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/simplifyGraphWithIneq.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/simplifyGraphWithIneq.m new file mode 100755 index 0000000..df3d3a3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/simplifyGraphWithIneq.m @@ -0,0 +1,30 @@ +function G = simplifyGraphWithIneq( G, Aineq ) +%SIMPLIFYGRAPHWITHINEQ contracts vertices that contain variables in +%their labels that appear in the same linear inequality. +%Example: x2 + x3 + ... <= 5 --> vertices with x2 and x3 in their +%respective label are contracted +%Input: +% G graph (format see EMPTYGRAPH) +% Aineq linear inequality matrix +%Output: +% modified graph G +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +for i=1:size(Aineq,1) + idx = find(Aineq(i,:)~=0); + if ~isempty(idx) + v1 = idx(1); + for v2=idx(2:end) + i1 = findVariableIndex(G,v1); + i2 = findVariableIndex(G,v2); + G = contractVertices(G,i1,i2); + end + end +end + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/simplifyGraphWithQuadIneq.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/simplifyGraphWithQuadIneq.m new file mode 100755 index 0000000..0a6fefd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/simplifyGraphWithQuadIneq.m @@ -0,0 +1,40 @@ +function G = simplifyGraphWithQuadIneq( G, Q, l ) +%SIMPLIFYGRAPHWITHQUADINEQ contracts vertices that contain variables in +%their labels that appear in the same quadratic inequality. +%Example: x2*x3 + ... <= 5 --> vertices with x2 and x3 in their +%respective label are contracted +%Input: +% G graph (format see EMPTYGRAPH) +% Q, l matrices of LHS of a quadratic inequality +%Output: +% modified graph G +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +if ~isempty(Q) && size(Q,1)~=size(Q,2) + error('Q has to be quadratic') +end + +if ~isvector(l) + error('l has to be a vector') +end + +idx = []; +for r=1:size(Q,1) + idx = [idx find(Q(r,:)~=0)]; +end +idx = [idx find(l'~=0)]; + +idx = sort(unique(idx)); + +i1 = findVariableIndex(G,idx(1)); +for v2 = idx(end:-1:2) + i2 = findVariableIndex(G,v2); + G = contractVertices(G,i1,i2); +end + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/splitGraphIntoComponents.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/splitGraphIntoComponents.m new file mode 100755 index 0000000..b3865c9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/splitGraphIntoComponents.m @@ -0,0 +1,38 @@ +function components = splitGraphIntoComponents( G ) +%SPLITGRAPHINTOCOMPONENTS splits graph G up into connected subgraphs using +%a breadth-first search. Returns a cell array containing all subgraphs. See +%EMPTYGRAPH for graph format. +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +if G.n <= 1 + components = {G}; + return +end + +components = {}; +c = 1; + +verticesNotVisited = 1:G.n; + +while ~isempty(verticesNotVisited) + verticesForGraph = []; + nextVertices = verticesNotVisited(1); + verticesNotVisited = verticesNotVisited(2:end); + while ~isempty(nextVertices) + v = nextVertices(1); + idx = intersect(find(G.adjMatrix(v,:)), verticesNotVisited); + verticesNotVisited = setdiff(verticesNotVisited, idx); + nextVertices = [nextVertices(2:end) idx]; + verticesForGraph = [verticesForGraph v]; + end + verticesForGraph = sort(unique(verticesForGraph)); + components{c} = subgraph(G,verticesForGraph); + c = c+1; +end + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/stagesFromPathGraphs.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/stagesFromPathGraphs.m new file mode 100755 index 0000000..8bd6f2e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/stagesFromPathGraphs.m @@ -0,0 +1,60 @@ +function [components,stages,params,standardParamValues,forcesParamMap] = stagesFromPathGraphs(components,H,f,Aineq,bineq,Aeq,beq,l,Q,r,lb,ub,qcqpParams,yalmipParamMap,outputIndices) +%STAGESFROMPATHGRAPHS Creates stages for a graph that has been split into +%path graphs. This function just combines the stages for each subgraph into +%a cell array. The real conversion is done by GENERATESTAGESFROMGRAPH. +% Input: +% components cell array of connected graphs +% H,f,Aineq,bineq,Aeq,beq, standard QCQP matrices +% l,Q,r,lb,ub +% qcqpParams see STAGES2PARAMQCQP +% yalmipParamMap parameter map for YALMIP parameters. +% (matrix) +% Each column corresponds to the +% parameter with the same index. +% 1st row: index of matrix with values, +% 2nd row: index of element inside matrix +% outputIndices variable indices of variables relevant +% for output (row vector) +% +% Output: +% components modified components list, subgraphs not +% relevant for ouput are removed +% stages cell array of stages (see +% GENERATESTAGESFROMGRAPH) +% params cell array of params (see +% GENERATESTAGESFROMGRAPH) +% standardParamValues cell array of standardParamValues (see +% GENERATESTAGESFROMGRAPH) +% forcesParamMap cell array of forcesParamMaps (see +% GENERATESTAGESFROMGRAPH) +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +stages = {}; +params = {}; +standardParamValues = {}; +forcesParamMap = {}; + +% Go through all components and convert them to stages +removeIdx = []; % don't forget to delete these +for i=1:numel(components) + if any(ismember(outputIndices, cell2mat(components{i}.vertices))) + % Construct stages using path graph + [stages_temp,params_temp,standardParamValues_temp,forcesParamMap_temp] = generateStagesFromGraph(components{i},H,f,Aineq,bineq,Aeq,beq,l,Q,r,lb,ub,qcqpParams,yalmipParamMap); + + % Hook new stages together with other stages + stages{end+1} = stages_temp; + params{end+1} = params_temp; + standardParamValues{end+1} = standardParamValues_temp; + forcesParamMap{end+1} = forcesParamMap_temp; + else % we can delete component + removeIdx(end+1) = i; + end +end + +components(removeIdx) = []; + +end \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/subgraph.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/subgraph.m new file mode 100755 index 0000000..eb17a25 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/subgraph.m @@ -0,0 +1,15 @@ +function G = subgraph( G, idx ) +%SUBGRAPH Returns the induced subgraph of G containing the vertices with +% indices in idx +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +G.vertices = G.vertices(idx); +G.adjMatrix = G.adjMatrix(idx, idx); +G.n = length(idx); + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/y2f_progressbar.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/y2f_progressbar.m new file mode 100755 index 0000000..2f25a81 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/y2f_progressbar.m @@ -0,0 +1,12 @@ +function status = y2f_progressbar(status,i,N,width) +% Displays progress bar in command window +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +bar = repmat(sprintf('='),1,round(i/N*width)); +msg = sprintf('[%-30s] %d/%d', bar, i, N); +fprintf([status, msg]); +status = repmat(sprintf('%c',8), 1, length(msg)); diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/y2f_version.m b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/y2f_version.m new file mode 100755 index 0000000..d8aae70 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F/Y2F/y2f_version.m @@ -0,0 +1,7 @@ +function version = y2f_version() +%Y2F_VERSION returns the version of Y2F installed on the current system + +version = '0.1.10'; + +end + diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F/example_problem.png b/parameter-learning_nd_disc/FORCES_client/Y2F/example_problem.png new file mode 100755 index 0000000..df1b083 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/Y2F/example_problem.png differ diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F_download.m b/parameter-learning_nd_disc/FORCES_client/Y2F_download.m new file mode 100755 index 0000000..4ba4d7c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F_download.m @@ -0,0 +1,81 @@ +function target = Y2F_download(version, silent, target) +% Download Y2F, the Yalmip-FORCES interface. +% +% Y2F_DOWNLOAD() downloads the master branch of Y2F and unpacks +% it into the directory 'Y2F'. If that directory exists, the user is +% prompted to confirm deleting the existing directory. +% +% Y2F_DOWNLOAD(VERSION) downloads the tag 'v{VERSION}' of Y2F and unpacks +% it into the directory 'Y2F'. If that directory exists, the user is +% prompted to confirm deleting the existing directory. +% +% Y2F_DOWNLOAD(VERSION,SILENT) As above, and for SILENT==TRUE no prompt will be +% displayed - any existing directory will be deleted. If VERSION is an +% empty matrix [], the master branch will be retrieved. +% +% Y2F_DOWNLOAD(VERSION, SILENT, TARGET) As above, but the contents of +% Y2F will be placed into the directory defined in the string TARGET. +% +% See also Y2F_INSTALL +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. + +if nargin == 0 || isempty(version) + version = 'master'; + src = ['https://github.com/embotech/Y2F/archive/master.zip']; +else + % strip out v at the beginnig + if( version(1)=='V' || version(1)=='v' ) + version = version(2:end); + end + + % test whether it has the right format + if( length(strfind(version,'.'))~=2 ) + error('Version number must have format [v]X.Y.Z'); + end + + src = ['https://github.com/embotech/Y2F/archive/v',version,'.zip']; +end + +if nargin <= 1 + silent = false; +end + +if nargin <= 2 + w = what; + target = [w.path,filesep,'Y2F']; +end + +%% Download +fprintf('Downloading Y2F from %s...', src); +urlwrite(src, 'y2f.zip'); +fprintf(' [OK]\n'); + + +%% Remove existing directory +if exist(target,'dir') + if( ~silent) + answer = input(sprintf('Existing directory %s will be deleted. Continue? [y]/n ',target),'s'); + else + answer = 'y'; + end + + if( silent || isempty(answer) || lower(answer)=='y' ) + rmdir(target,'s'); + else + delete('y2f.zip'); + fprintf('Operation aborted\n'); + return; + end +end + + +%% Unzip +fprintf('Extracting ZIP package into %s...', target); +unzip('y2f.zip'); +movefile(['Y2F-',version],target); +fprintf(' [OK]\n'); + +%% Remove y2f.zip +delete('y2f.zip'); diff --git a/parameter-learning_nd_disc/FORCES_client/Y2F_install.m b/parameter-learning_nd_disc/FORCES_client/Y2F_install.m new file mode 100755 index 0000000..d216510 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/Y2F_install.m @@ -0,0 +1,43 @@ +function Y2F_install(version, silent, target) +% Download Y2F, the Yalmip-FORCES interface, and add it to the Matlab path. +% +% Y2F_INSTALL() downloads the master branch of Y2F and unpacks +% it into the directory 'Y2F'. If that directory exists, the user is +% prompted to confirm deleting the existing directory. The directory is +% added to the Matlab path, such that Y2F can be used from any +% directory. +% +% Y2F_INSTALL(VERSION) as above, downloads the tag 'v{VERSION}' of Y2F. +% If VERSION is an empty matrix [], the master branch will be retrieved. +% +% Y2F_INSTALL(VERSION, SILENT) As above, and for SILENT==TRUE no prompt +% will be displayed - any existing directory will be deleted. +% +% Y2F_INSTALL(VERSION, SILENT, TARGET) As above, but the contents of Y2F +% will be placed into the directory defined in the string TARGET. +% +% See also Y2F_DOWNLOAD +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. + +%% download y2f +switch( nargin ) + + case 0 + y2f_directory = Y2F_download; + + case 1 + y2f_directory = Y2F_download(version); + + case 2 + y2f_directory = Y2F_download(version, silent); + + otherwise + y2f_directory = Y2F_download(version, silent, target); + +end + +%% add to path +addpath(genpath(y2f_directory)); +savepath; diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ALGEBRAIC.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ALGEBRAIC.m new file mode 100755 index 0000000..08b0248 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ALGEBRAIC.m @@ -0,0 +1,7 @@ +function v = ALGEBRAIC() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 162); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ALIAS.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ALIAS.m new file mode 100755 index 0000000..122c70e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ALIAS.m @@ -0,0 +1,7 @@ +function v = ALIAS() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 165); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_ALGEBRAIC.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_ALGEBRAIC.m new file mode 100755 index 0000000..6f2116b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_ALGEBRAIC.m @@ -0,0 +1,7 @@ +function v = CAT_ALGEBRAIC() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 174); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_DEPENDENT_CONSTANT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_DEPENDENT_CONSTANT.m new file mode 100755 index 0000000..28547a6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_DEPENDENT_CONSTANT.m @@ -0,0 +1,7 @@ +function v = CAT_DEPENDENT_CONSTANT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 170); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_DEPENDENT_PARAMETER.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_DEPENDENT_PARAMETER.m new file mode 100755 index 0000000..ea47f51 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_DEPENDENT_PARAMETER.m @@ -0,0 +1,7 @@ +function v = CAT_DEPENDENT_PARAMETER() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 172); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_DERIVATIVE.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_DERIVATIVE.m new file mode 100755 index 0000000..674aaf3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_DERIVATIVE.m @@ -0,0 +1,7 @@ +function v = CAT_DERIVATIVE() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 168); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_INDEPENDENT_CONSTANT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_INDEPENDENT_CONSTANT.m new file mode 100755 index 0000000..bb750d3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_INDEPENDENT_CONSTANT.m @@ -0,0 +1,7 @@ +function v = CAT_INDEPENDENT_CONSTANT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 171); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_INDEPENDENT_PARAMETER.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_INDEPENDENT_PARAMETER.m new file mode 100755 index 0000000..ca58323 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_INDEPENDENT_PARAMETER.m @@ -0,0 +1,7 @@ +function v = CAT_INDEPENDENT_PARAMETER() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 173); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_STATE.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_STATE.m new file mode 100755 index 0000000..d0b004c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_STATE.m @@ -0,0 +1,7 @@ +function v = CAT_STATE() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 169); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_UNKNOWN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_UNKNOWN.m new file mode 100755 index 0000000..734be4f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CAT_UNKNOWN.m @@ -0,0 +1,7 @@ +function v = CAT_UNKNOWN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 167); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CONSTANT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CONSTANT.m new file mode 100755 index 0000000..4912b45 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CONSTANT.m @@ -0,0 +1,7 @@ +function v = CONSTANT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 155); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CONTINUOUS.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CONTINUOUS.m new file mode 100755 index 0000000..a2210e4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CONTINUOUS.m @@ -0,0 +1,7 @@ +function v = CONTINUOUS() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 158); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Callback.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Callback.m new file mode 100755 index 0000000..ea00444 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Callback.m @@ -0,0 +1,67 @@ +classdef Callback < casadi.Functor + %Callback. + % + %In C++, supply a CallbackCPtr function pointer When the callback function + %returns a non-zero integer, the host is signalled of a problem. E.g. an + %NlpSolver may halt iterations if the Callback is something else than 0 + % + %In python, supply a callable, annotated with pycallback decorator + % + %C++ includes: functor.hpp + %Usage: Callback () + % + methods + function varargout = paren(self,varargin) + %Usage: retval = paren (fcn, user_data) + % + %fcn is of type Function. user_data is of type void *. fcn is of type Function. user_data is of type void *. retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1086, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = Callback(varargin) + self@casadi.Functor(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1087, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1088, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Callback2.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Callback2.m new file mode 100755 index 0000000..a46a3ab --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Callback2.m @@ -0,0 +1,290 @@ +classdef Callback2 < SwigRef + %C++ includes: callback.hpp + %Usage: Callback2 () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = paren(self,varargin) + %Usage: retval = paren (arg) + % + %arg is of type std::vector< casadi::DMatrix,std::allocator< casadi::DMatrix > > const &. arg is of type std::vector< casadi::DMatrix,std::allocator< casadi::DMatrix > > const &. retval is of type std::vector< casadi::DMatrix,std::allocator< casadi::DMatrix > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1058, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nIn(self,varargin) + %Number of input arguments. + % + %Specify the number of input arguments that a specific instance can handle. + %The number must not be changed over the lifetime of the object + % + %Default implementation: 1 + % + % + %Usage: retval = nIn () + % + %retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1059, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nOut(self,varargin) + %Number of output arguments. + % + %Specify the number of output arguments that a specific instance can handle. + %The number must not be changed over the lifetime of the object + % + %Default implementation: 1 + % + % + %Usage: retval = nOut () + % + %retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1060, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inputSparsity(self,varargin) + %Specify input sparsity. + % + %Specify the sparsity corresponding to a given input. The sparsity must not + %be changed over the lifetime of the object + % + %Default implementation: dense using inputShape + % + % + %Usage: retval = inputSparsity (i) + % + %i is of type int. i is of type int. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1061, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = outputSparsity(self,varargin) + %Specify output sparsity. + % + %Specify the sparsity corresponding to a given output. The sparsity must not + %be changed over the lifetime of the object + % + %Default implementation: dense using outputShape + % + % + %Usage: retval = outputSparsity (i) + % + %i is of type int. i is of type int. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1062, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inputShape(self,varargin) + %Specify input shape. + % + %Specify the shape corresponding to a given input. The shape must not be + %changed over the lifetime of the object + % + %Default implementation: scalar (1,1) + % + % + %Usage: retval = inputShape (i) + % + %i is of type int. i is of type int. retval is of type std::pair< int,int >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1063, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = outputShape(self,varargin) + %Specify output shape. + % + %Specify the shape corresponding to a given output. The shape must not be + %changed over the lifetime of the object + % + %Default implementation: scalar (1,1) + % + % + %Usage: retval = outputShape (i) + % + %i is of type int. i is of type int. retval is of type std::pair< int,int >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1064, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = name(self,varargin) + %Specify the name of the object. + % + % + %Usage: retval = name () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1065, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = options(self,varargin) + %Specify the options of the object. + % + % + %Usage: retval = options () + % + %retval is of type casadi::Dict. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1066, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = create(self,varargin) + %Usage: retval = create () + % + %retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1067, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function delete(self) + if self.swigPtr + casadiMEX(1068, self); + self.swigPtr=[]; + end + end + function self = Callback2(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + if strcmp(class(self),'director_basic.Callback2') + tmp = casadiMEX(1069, 0, varargin{:}); + else + tmp = casadiMEX(1069, self, varargin{:}); + end + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CasadiMeta.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CasadiMeta.m new file mode 100755 index 0000000..5cd04fd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CasadiMeta.m @@ -0,0 +1,255 @@ +classdef CasadiMeta < SwigRef + %Collects global CasADi meta information. + % + %Joris Gillis + % + %C++ includes: casadi_meta.hpp + %Usage: CasadiMeta () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function self = CasadiMeta(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1217, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1218, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = getVersion(varargin) + %Usage: retval = getVersion () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1206, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getGitRevision(varargin) + %Usage: retval = getGitRevision () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1207, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getGitDescribe(varargin) + %Usage: retval = getGitDescribe () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1208, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getFeatureList(varargin) + %Usage: retval = getFeatureList () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1209, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getBuildType(varargin) + %Usage: retval = getBuildType () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1210, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getCompilerId(varargin) + %Usage: retval = getCompilerId () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1211, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getCompiler(varargin) + %Usage: retval = getCompiler () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1212, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getCompilerFlags(varargin) + %Usage: retval = getCompilerFlags () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1213, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getModules(varargin) + %Usage: retval = getModules () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1214, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getPlugins(varargin) + %Usage: retval = getPlugins () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1215, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getInstallPrefix(varargin) + %Usage: retval = getInstallPrefix () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1216, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CasadiOptions.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CasadiOptions.m new file mode 100755 index 0000000..4c96e30 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CasadiOptions.m @@ -0,0 +1,334 @@ +classdef CasadiOptions < SwigRef + %Collects global CasADi options. + % + %Note to developers: use sparingly. Global options are - in general - a + %rather bad idea + % + %this class must never be instantiated. Access its static members directly + %Joris Gillis + % + %C++ includes: casadi_options.hpp + %Usage: CasadiOptions () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function self = CasadiOptions(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1204, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1205, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = setCatchErrorsSwig(varargin) + %Usage: setCatchErrorsSwig (flag) + % + %flag is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(1189, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getCatchErrorsSwig(varargin) + %Usage: retval = getCatchErrorsSwig () + % + %retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1190, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setSimplificationOnTheFly(varargin) + %Usage: setSimplificationOnTheFly (flag) + % + %flag is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(1191, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getSimplificationOnTheFly(varargin) + %Usage: retval = getSimplificationOnTheFly () + % + %retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1192, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = startProfiling(varargin) + %Usage: startProfiling (filename) + % + %filename is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1193, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = stopProfiling(varargin) + %Usage: stopProfiling () + % + + try + + [varargout{1:nargout}] = casadiMEX(1194, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setProfilingBinary(varargin) + %Usage: setProfilingBinary (flag) + % + %flag is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(1195, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getProfilingBinary(varargin) + %Usage: retval = getProfilingBinary () + % + %retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1196, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setPurgeSeeds(varargin) + %Usage: retval = setPurgeSeeds () + % + %retval is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(1197, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setAllowedInternalAPI(varargin) + %Usage: setAllowedInternalAPI (flag) + % + %flag is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(1198, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getAllowedInternalAPI(varargin) + %Usage: retval = getAllowedInternalAPI () + % + %retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1199, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setCasadiPath(varargin) + %Usage: setCasadiPath (path) + % + %path is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1200, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getCasadiPath(varargin) + %Usage: retval = getCasadiPath () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1201, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setOptimizedNumDir(varargin) + %Usage: setOptimizedNumDir (n) + % + %n is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(1202, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOptimizedNumDir(varargin) + %Usage: retval = getOptimizedNumDir () + % + %retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1203, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CleSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CleSolver.m new file mode 100755 index 0000000..add47fe --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CleSolver.m @@ -0,0 +1,508 @@ +classdef CleSolver < casadi.Function + %Base class for Discrete Lyapunov Equation Solvers. + % + %Given matrices $A$ and symmetric $V$ + % + % + % + %:: + % + % A in R^(n x n) + % V in S^n + % + % + % + % + %finds $P$ that satisfies: + % + % + % + %:: + % + % 0 = A P + P A' + V + % + % + % + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::CLEInput (CLE_NUM_IN = 2) [cleIn] + % + %+-----------+-------+-------------+ + %| Full name | Short | Description | + %+===========+=======+=============+ + %| CLE_A | a | A matrix . | + %+-----------+-------+-------------+ + %| CLE_V | v | V matrix . | + %+-----------+-------+-------------+ + % + %>Output scheme: casadi::CLEOutput (CLE_NUM_OUT = 1) [cleOut] + % + %+-----------+-------+-------------------+ + %| Full name | Short | Description | + %+===========+=======+===================+ + %| CLE_P | p | Lyapunov matrix . | + %+-----------+-------+-------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| eps_unstable | OT_REAL | 0.000 | A margin for | casadi::CleI | + %| | | | unstability | nternal | + %| | | | detection | | + %+--------------+--------------+--------------+--------------+--------------+ + %| error_unstab | OT_BOOLEAN | false | Throw an | casadi::CleI | + %| le | | | exception | nternal | + %| | | | when it is | | + %| | | | detected | | + %| | | | that | | + %| | | | Product(A_i, | | + %| | | | i=N..1) has | | + %| | | | eigenvalues | | + %| | | | greater than | | + %| | | | 1-eps_unstab | | + %| | | | le | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| pos_def | OT_BOOLEAN | false | Assume P | casadi::CleI | + %| | | | positive | nternal | + %| | | | definite | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- simple + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %CleSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %simple + %------ + % + % + % + %Solving the Discrete Lyapunov Equations with a regular LinearSolver + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| linear_solver | OT_STRING | GenericType() | User-defined | + %| | | | linear solver | + %| | | | class. Needed | + %| | | | for | + %| | | | sensitivities. | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_o | OT_DICT | GenericType() | Options to be | + %| ptions | | | passed to the | + %| | | | linear solver. | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joris Gillis + %Diagrams + %-------- + % + % + % + %C++ includes: cle_solver.hpp + %Usage: CleSolver () + % + methods + function varargout = clone(self,varargin) + %Clone. + % + % + %Usage: retval = clone () + % + %retval is of type CleSolver. + + try + + if ~isa(self,'casadi.CleSolver') + self = casadi.CleSolver(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1127, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printStats(self,varargin) + %Print solver statistics. + % + % + %Usage: printStats () + % + + try + + if ~isa(self,'casadi.CleSolver') + self = casadi.CleSolver(self); + end + [varargout{1:nargout}] = casadiMEX(1128, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = CleSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1133, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1134, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1129, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1130, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1131, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1132, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CodeGenerator.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CodeGenerator.m new file mode 100755 index 0000000..9aeca75 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CodeGenerator.m @@ -0,0 +1,151 @@ +classdef CodeGenerator < SwigRef + %C++ includes: + %code_generator.hpp + %Usage: CodeGenerator () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function self = CodeGenerator(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(894, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function varargout = add(self,varargin) + %> void CodeGenerator.add(Function f) + %------------------------------------------------------------------------ + % + %Add a function (name generated) + % + %> void CodeGenerator.add(Function f, str fname) + %------------------------------------------------------------------------ + % + %Add a function. + % + % + %Usage: add (f, fname) + % + %f is of type Function. fname is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(895, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = generate(self,varargin) + %> void CodeGenerator.generate(str name) const + %------------------------------------------------------------------------ + % + %Generate a file. + % + %> str CodeGenerator.generate() const + %------------------------------------------------------------------------ + % + %Generate a file, return code as string. + % + % + %Usage: retval = generate () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.CodeGenerator') + self = casadi.CodeGenerator(self); + end + [varargout{1:nargout}] = casadiMEX(896, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = compile(self,varargin) + %Compile and load function. + % + % + %Usage: retval = compile (name, compiler = "gcc -fPIC -O2") + % + %name is of type std::string const &. compiler is of type std::string const &. name is of type std::string const &. compiler is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(897, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = addInclude(self,varargin) + %Add an include file optionally using a relative path "..." instead of an + %absolute path <...> + % + % + %Usage: addInclude (new_include, relative_path = false, use_ifdef = std::string()) + % + %new_include is of type std::string const &. relative_path is of type bool. use_ifdef is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(898, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function delete(self) + if self.swigPtr + casadiMEX(899, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Compiler.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Compiler.m new file mode 100755 index 0000000..602d778 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Compiler.m @@ -0,0 +1,254 @@ +classdef Compiler < casadi.OptionsFunctionality + %Compiler. + % + %Just-in-time compilation of code + % + %General information + %=================== + % + % + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- clang + % + %- shell + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %Compiler.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %clang + %----- + % + % + % + %Interface to the JIT compiler CLANG + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| flags | OT_STRINGVECTOR | GenericType() | Compile flags | + %| | | | for the JIT | + %| | | | compiler. | + %| | | | Default: None | + %+-----------------+-----------------+-----------------+-----------------+ + %| include_path | OT_STRING | "" | Include paths | + %| | | | for the JIT | + %| | | | compiler. The | + %| | | | include | + %| | | | directory | + %| | | | shipped with | + %| | | | CasADi will be | + %| | | | automatically | + %| | | | appended. | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %shell + %----- + % + % + % + %Interface to the JIT compiler SHELL + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| compiler | OT_STRING | "gcc" | Compiler | + %| | | | command | + %+-----------------+-----------------+-----------------+-----------------+ + %| compiler_setup | OT_STRING | "-fPIC -shared" | Compiler setup | + %| | | | command | + %+-----------------+-----------------+-----------------+-----------------+ + %| flags | OT_STRINGVECTOR | GenericType() | Compile flags | + %| | | | for the JIT | + %| | | | compiler. | + %| | | | Default: None | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joris Gillis + %Diagrams + %-------- + % + % + % + %C++ includes: compiler.hpp + %Usage: Compiler () + % + methods + function varargout = plugin_name(self,varargin) + %Query plugin name. + % + % + %Usage: retval = plugin_name () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.Compiler') + self = casadi.Compiler(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(939, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = Compiler(varargin) + self@casadi.OptionsFunctionality(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(940, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(941, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(935, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(936, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(937, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(938, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ControlSimulator.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ControlSimulator.m new file mode 100755 index 0000000..3851c0b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ControlSimulator.m @@ -0,0 +1,464 @@ +classdef ControlSimulator < casadi.Function + %Piecewise Simulation class. + % + %A ControlSimulator can be seen as a chain of Simulators whereby some + %parameters change from one Simulator to the next. + % + %These changing parameters can typically be interpreted as "controls" in + %the context of dynamic optimization. + % + %We discriminate between the following time steps: Major time-steps. These + %are the time steps provided by the supplied grid. Controls are constant + %inbetween major time-steps Minor time-steps. These are time steps linearly + %interpolated from one major time-step to the next. The option 'nf' regulates + %how many minor time-steps are taken. Integration time-steps. Time steps + %that the supplied integrator might choose to integrate the continuous + %dynamics. They are not important what ControlSimulator is concerned. np + %Number of parameters nu Number of controls ns The number of major grid + %points, as supplied in the constructor nf The number of minor grid points + %per major interval + % + %Joris Gillis + % + %>Input scheme: casadi::ControlSimulatorInput (CONTROLSIMULATOR_NUM_IN = 3) [controlsimulatorIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| CONTROLSIMULATOR_X0 | x0 | Differential or | + %| | | algebraic state at t0 | + %| | | (dimension nx-by-1) . | + %+------------------------+------------------------+------------------------+ + %| CONTROLSIMULATOR_P | p | Parameters that are | + %| | | fixed over the entire | + %| | | horizon (dimension np- | + %| | | by-1) . | + %+------------------------+------------------------+------------------------+ + %| CONTROLSIMULATOR_U | u | Parameters that change | + %| | | over the integration | + %| | | intervals (dimension | + %| | | nu-by-(ns-1)) . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| control_endp | OT_BOOLEAN | false | Include a | casadi::Cont | + %| oint | | | control | rolSimulator | + %| | | | value at the | Internal | + %| | | | end of the | | + %| | | | simulation | | + %| | | | domain. Used | | + %| | | | for interpol | | + %| | | | ation. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| control_inte | OT_STRING | "none" | none|nearest | casadi::Cont | + %| rpolation | | | |linear | rolSimulator | + %| | | | | Internal | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| integrator | OT_STRING | GenericType( | An | casadi::Cont | + %| | | ) | integrator | rolSimulator | + %| | | | creator | Internal | + %| | | | function | | + %+--------------+--------------+--------------+--------------+--------------+ + %| integrator_o | OT_DICT | GenericType( | Options to | casadi::Cont | + %| ptions | | ) | be passed to | rolSimulator | + %| | | | the | Internal | + %| | | | integrator | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| minor_grid | OT_INTEGERVE | GenericType( | The local | casadi::Cont | + %| | CTOR | ) | grid used on | rolSimulator | + %| | | | each major | Internal | + %| | | | interval, | | + %| | | | with time | | + %| | | | normalized | | + %| | | | to 1. By | | + %| | | | default, | | + %| | | | option 'nf' | | + %| | | | is used to | | + %| | | | construct a | | + %| | | | linearly | | + %| | | | spaced grid. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| nf | OT_INTEGER | 1 | Number of | casadi::Cont | + %| | | | minor | rolSimulator | + %| | | | grained | Internal | + %| | | | integration | | + %| | | | steps per | | + %| | | | major | | + %| | | | interval. | | + %| | | | nf>0 must | | + %| | | | hold. This | | + %| | | | option is | | + %| | | | not used | | + %| | | | when | | + %| | | | 'minor_grid' | | + %| | | | is provided. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| simulator_op | OT_DICT | GenericType( | Options to | casadi::Cont | + %| tions | | ) | be passed to | rolSimulator | + %| | | | the | Internal | + %| | | | simulator | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: control_simulator.hpp + %Usage: ControlSimulator () + % + methods + function varargout = getMinorT(self,varargin) + %Get the (minor) time grid The length is (ns-1)*nf + 1 + % + % + %Usage: retval = getMinorT () + % + %retval is of type std::vector< double,std::allocator< double > >. + + try + + if ~isa(self,'casadi.ControlSimulator') + self = casadi.ControlSimulator(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(980, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getMinorU(self,varargin) + %Get the controls, sampled on the minor timescale. Number of rows is + %(ns-1)*nf. + % + % + %Usage: retval = getMinorU () + % + %retval is of type DMatrix. + + try + + if ~isa(self,'casadi.ControlSimulator') + self = casadi.ControlSimulator(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(981, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getMajorIndex(self,varargin) + %Get the index i such that gridminor[i] == gridmajor + % + % + %Usage: retval = getMajorIndex () + % + %retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.ControlSimulator') + self = casadi.ControlSimulator(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(982, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = ControlSimulator(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(983, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(984, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(979, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CustomEvaluate.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CustomEvaluate.m new file mode 100755 index 0000000..277bab0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CustomEvaluate.m @@ -0,0 +1,65 @@ +classdef CustomEvaluate < casadi.Functor + %CustomEvaluate. + % + %In C++, supply a CustomEvaluateCPtr function pointer + % + %In python, supply a callable, annotated with pyevaluate decorator + % + %C++ includes: functor.hpp + %Usage: CustomEvaluate () + % + methods + function varargout = paren(self,varargin) + %Usage: paren (fcn, user_data) + % + %fcn is of type CustomFunction. user_data is of type void *. + + try + + [varargout{1:nargout}] = casadiMEX(1080, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = CustomEvaluate(varargin) + self@casadi.Functor(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1081, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1082, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CustomFunction.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CustomFunction.m new file mode 100755 index 0000000..1a8a073 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/CustomFunction.m @@ -0,0 +1,294 @@ +classdef CustomFunction < casadi.Function + %Interface to a custom function. + % + %Joel Andersson + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: custom_function.hpp + %Usage: CustomFunction () + % + methods + function self = CustomFunction(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1056, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1057, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1055, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DIFFERENTIAL.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DIFFERENTIAL.m new file mode 100755 index 0000000..a3a7dbf --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DIFFERENTIAL.m @@ -0,0 +1,7 @@ +function v = DIFFERENTIAL() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 163); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DISCRETE.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DISCRETE.m new file mode 100755 index 0000000..44f3760 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DISCRETE.m @@ -0,0 +1,7 @@ +function v = DISCRETE() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 157); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DMatrix.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DMatrix.m new file mode 100755 index 0000000..15bd043 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DMatrix.m @@ -0,0 +1,2065 @@ +classdef DMatrix < casadi.MatrixCommon & casadi.ExpDMatrix & casadi.GenDMatrix & casadi.PrintDMatrix + %Sparse matrix class. SX and DMatrix are specializations. + % + %General sparse matrix class that is designed with the idea that "everything + %is a matrix", that is, also scalars and vectors. This philosophy makes it + %easy to use and to interface in particularly with Python and Matlab/Octave. + %Index starts with 0. Index vec happens as follows: (rr, cc) -> k = + %rr+cc*size1() Vectors are column vectors. The storage format is Compressed + %Column Storage (CCS), similar to that used for sparse matrices in Matlab, + %but unlike this format, we do allow for elements to be structurally non-zero + %but numerically zero. Matrix is polymorphic with a + %std::vector that contain all non-identical-zero elements. The + %sparsity can be accessed with Sparsity& sparsity() Joel Andersson + % + %C++ includes: casadi_types.hpp + %Usage: DMatrix () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = sanityCheck(self,varargin) + %Check if the dimensions and colind, row vectors are compatible. + % + %Parameters: + %----------- + % + %complete: set to true to also check elementwise throws an error as possible + %result + % + % + %Usage: sanityCheck (complete = false) + % + %complete is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(587, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasNZ(self,varargin) + %Returns true if the matrix has a non-zero at location rr, cc. + % + % + %Usage: retval = hasNZ (rr, cc) + % + %rr is of type int. cc is of type int. rr is of type int. cc is of type int. retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(588, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nonzero(self,varargin) + %Returns the truth value of a Matrix. + % + % + %Usage: retval = nonzero () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(589, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isSlice(self,varargin) + %> bool array(DataType) .isSlice(bool ind1=false) const + %------------------------------------------------------------------------ + % + %Is the Matrix a Slice (only for IMatrix) + % + % + %Usage: retval = isSlice (ind1 = false) + % + %ind1 is of type bool. ind1 is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(590, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toSlice(self,varargin) + %> Slice array(DataType) .toSlice(bool ind1=false) const + %------------------------------------------------------------------------ + % + %Convert to Slice (only for IMatrix) + % + % + %Usage: retval = toSlice (ind1 = false) + % + %ind1 is of type bool. ind1 is of type bool. retval is of type Slice. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(591, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = get(self,varargin) + %> void array(DataType) .get([double ] output_m) const + %------------------------------------------------------------------------ + % + %Get the elements numerically. + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Slice rr) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, IMatrix rr) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Sparsity sp) const + %------------------------------------------------------------------------ + % + %Get a submatrix, single argument + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Slice rr, Slice cc) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Slice rr, IMatrix cc) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, IMatrix rr, Slice cc) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, IMatrix rr, IMatrix cc) const + %------------------------------------------------------------------------ + % + %Get a submatrix, two arguments + % + % + %Usage: get (ind1, rr, cc) + % + %ind1 is of type bool. rr is of type IMatrix. cc is of type IMatrix. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(592, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = set(self,varargin) + %> void array(DataType) .set(double val) + % + %> void array(DataType) .set(const double *val, bool tr=false) + % + %> void array(DataType) .set([double ] val, bool tr=false) + %------------------------------------------------------------------------ + % + %Get the elements numerically. + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Slice rr) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, IMatrix rr) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Sparsity sp) + %------------------------------------------------------------------------ + % + %Set a submatrix, single argument + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Slice rr, Slice cc) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Slice rr, IMatrix cc) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, IMatrix rr, Slice cc) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, IMatrix rr, IMatrix cc) + %------------------------------------------------------------------------ + % + %Set a submatrix, two arguments + % + %> void array(DataType) .set(array(DataType) val) + %------------------------------------------------------------------------ + % + %Set all the entries without changing sparsity pattern. + % + % + %Usage: set (m, ind1, rr, cc) + % + %m is of type DMatrix. ind1 is of type bool. rr is of type IMatrix. cc is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(593, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setSym(self,varargin) + %Set upper triangular elements. + % + % + %Usage: setSym (val) + % + %val is of type std::vector< double,std::allocator< double > > const &. + + try + + [varargout{1:nargout}] = casadiMEX(594, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getSym(self,varargin) + %Get upper triangular elements. + % + % + %Usage: getSym () + % + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(595, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getNZ(self,varargin) + %> void array(DataType) .getNZ([double ] output_m) const + %------------------------------------------------------------------------ + % + %Get the elements numerically. + % + %> void array(DataType) .getNZ(array(DataType) output_m, bool ind1, Slice k) const + % + %> void array(DataType) .getNZ(array(DataType) output_m, bool ind1, IMatrix k) const + %------------------------------------------------------------------------ + % + %Get a set of nonzeros + % + % + %Usage: getNZ (ind1, k) + % + %ind1 is of type bool. k is of type IMatrix. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(596, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setNZ(self,varargin) + %> void array(DataType) .setNZ(double val) + % + %> void array(DataType) .setNZ(const double *val) + % + %> void array(DataType) .setNZ([double ] val) + %------------------------------------------------------------------------ + % + %Set the elements numerically. + % + %> void array(DataType) .setNZ(array(DataType) m, bool ind1, Slice k) + % + %> void array(DataType) .setNZ(array(DataType) m, bool ind1, IMatrix k) + %------------------------------------------------------------------------ + % + %Set a set of nonzeros + % + % + %Usage: setNZ (m, ind1, k) + % + %m is of type DMatrix. ind1 is of type bool. k is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(597, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = append(self,varargin) + %[DEPRECATED] Append a matrix vertically (NOTE: only efficient if vector) + % + % + %Usage: append (y) + % + %y is of type DMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(598, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = appendColumns(self,varargin) + %[DEPRECATED] Append a matrix horizontally + % + % + %Usage: appendColumns (y) + % + %y is of type DMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(599, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setZero(self,varargin) + %[DEPRECATED] Set all elements to zero + % + % + %Usage: setZero () + % + + try + + [varargout{1:nargout}] = casadiMEX(600, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = makeSparse(self,varargin) + %[DEPRECATED: use sparsify instead] Make a matrix sparse by removing + %numerical zeros smaller in absolute value than a specified tolerance + % + % + %Usage: makeSparse (tol = 0) + % + %tol is of type double. + + try + + [varargout{1:nargout}] = casadiMEX(601, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = uplus(self,varargin) + %Usage: retval = uplus () + % + %retval is of type DMatrix. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(602, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = uminus(self,varargin) + %Usage: retval = uminus () + % + %retval is of type DMatrix. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(603, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printme(self,varargin) + %Usage: retval = printme (y) + % + %y is of type DMatrix. y is of type DMatrix. retval is of type DMatrix. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(609, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = T(self,varargin) + %Transpose the matrix. + % + % + %Usage: retval = T () + % + %retval is of type DMatrix. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(610, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = print(self,varargin) + %Print a description of the object. + % + % + %Usage: print (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(614, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printSplit(self,varargin) + %Get strings corresponding to the nonzeros and the interdependencies. + % + % + %Usage: printSplit () + % + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(615, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = disp(self,varargin) + %Print a representation of the object. + % + % + %Usage: disp (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(616, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printScalar(self,varargin) + %Print scalar. + % + % + %Usage: printScalar (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(617, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printVector(self,varargin) + %Print vector-style. + % + % + %Usage: printVector (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(618, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printDense(self,varargin) + %Print dense matrix-stype. + % + % + %Usage: printDense (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(619, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printSparse(self,varargin) + %Print sparse matrix style. + % + % + %Usage: printSparse (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(620, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = clear(self,varargin) + %Usage: clear () + % + + try + + [varargout{1:nargout}] = casadiMEX(621, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = resize(self,varargin) + %Usage: resize (nrow, ncol) + % + %nrow is of type int. ncol is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(622, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = reserve(self,varargin) + %Usage: reserve (nnz, ncol) + % + %nnz is of type int. ncol is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(623, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = erase(self,varargin) + %> void array(DataType) .erase([int ] rr, [int ] cc, bool ind1=false) + %------------------------------------------------------------------------ + % + %Erase a submatrix (leaving structural zeros in its place) Erase rows and/or + %columns of a matrix. + % + %> void array(DataType) .erase([int ] rr, bool ind1=false) + %------------------------------------------------------------------------ + % + %Erase a submatrix (leaving structural zeros in its place) Erase elements of + %a matrix. + % + % + %Usage: erase (rr, ind1 = false) + % + %rr is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(624, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = remove(self,varargin) + %Remove columns and rows Remove/delete rows and/or columns of a matrix. + % + % + %Usage: remove (rr, cc) + % + %rr is of type std::vector< int,std::allocator< int > > const &. cc is of type std::vector< int,std::allocator< int > > const &. + + try + + [varargout{1:nargout}] = casadiMEX(625, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = enlarge(self,varargin) + %Enlarge matrix Make the matrix larger by inserting empty rows and columns, + %keeping the existing non-zeros. + % + % + %Usage: enlarge (nrow, ncol, rr, cc, ind1 = false) + % + %nrow is of type int. ncol is of type int. rr is of type std::vector< int,std::allocator< int > > const &. cc is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(626, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparsity(self,varargin) + %Get an owning reference to the sparsity pattern. + % + % + %Usage: retval = sparsity () + % + %retval is of type Sparsity. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(627, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getElementHash(self,varargin) + %Returns a number that is unique for a given symbolic scalar. + % + %Only defined if symbolic scalar. + % + % + %Usage: retval = getElementHash () + % + %retval is of type size_t. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(632, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isRegular(self,varargin) + %Checks if expression does not contain NaN or Inf. + % + % + %Usage: retval = isRegular () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(633, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isSmooth(self,varargin) + %Check if smooth. + % + % + %Usage: retval = isSmooth () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(634, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isLeaf(self,varargin) + %Check if SX is a leaf of the SX graph. + % + %Only defined if symbolic scalar. + % + % + %Usage: retval = isLeaf () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(635, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isCommutative(self,varargin) + %Check whether a binary SX is commutative. + % + %Only defined if symbolic scalar. + % + % + %Usage: retval = isCommutative () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(636, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isSymbolic(self,varargin) + %Check if symbolic (Dense) Sparse matrices invariable return false. + % + % + %Usage: retval = isSymbolic () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(637, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isValidInput(self,varargin) + %Check if matrix can be used to define function inputs. Sparse matrices can + %return true if all non-zero elements are symbolic. + % + % + %Usage: retval = isValidInput () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(638, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasDuplicates(self,varargin) + %[INTERNAL] Detect + %duplicate symbolic expressions If there are symbolic primitives appearing + %more than once, the function will return true and the names of the duplicate + %expressions will be printed to userOut(). Note: Will mark the + %node using SXElement::setTemp. Make sure to call resetInput() after usage. + % + % + %Usage: retval = hasDuplicates () + % + %retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(639, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = resetInput(self,varargin) + %[INTERNAL] Reset the + %marker for an input expression. + % + % + %Usage: resetInput () + % + + try + + [varargout{1:nargout}] = casadiMEX(640, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isConstant(self,varargin) + %Check if the matrix is constant (note that false negative answers are + %possible) + % + % + %Usage: retval = isConstant () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(641, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isInteger(self,varargin) + %Check if the matrix is integer-valued (note that false negative answers are + %possible) + % + % + %Usage: retval = isInteger () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(642, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isZero(self,varargin) + %check if the matrix is 0 (note that false negative answers are possible) + % + % + %Usage: retval = isZero () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(643, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isOne(self,varargin) + %check if the matrix is 1 (note that false negative answers are possible) + % + % + %Usage: retval = isOne () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(644, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isMinusOne(self,varargin) + %check if the matrix is -1 (note that false negative answers are possible) + % + % + %Usage: retval = isMinusOne () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(645, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isIdentity(self,varargin) + %check if the matrix is an identity matrix (note that false negative answers + %are possible) + % + % + %Usage: retval = isIdentity () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(646, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasNonStructuralZeros(self,varargin) + %Check if the matrix has any zero entries which are not structural zeros. + % + % + %Usage: retval = hasNonStructuralZeros () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(647, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getValue(self,varargin) + %> double array(DataType) .getValue() const + %------------------------------------------------------------------------ + % + %Get double value (only if constant) + % + %> double array(DataType) .getValue(int k) const + %------------------------------------------------------------------------ + % + %Get double value (particular nonzero) + % + % + %Usage: retval = getValue (k) + % + %k is of type int. k is of type int. retval is of type double. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(648, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setValue(self,varargin) + %> void array(DataType) .setValue(double m) + %------------------------------------------------------------------------ + % + %Set double value (only if constant) + % + %> void array(DataType) .setValue(double m, int k) + %------------------------------------------------------------------------ + % + %Set double value (particular nonzero) + % + % + %Usage: setValue (m, k) + % + %m is of type double. k is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(649, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getIntValue(self,varargin) + %Get double value (only if integer constant) + % + % + %Usage: retval = getIntValue () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(650, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nonzeros(self,varargin) + %Get all nonzeros. + % + % + %Usage: retval = nonzeros () + % + %retval is of type std::vector< double,std::allocator< double > >. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(651, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nonzeros_int(self,varargin) + %Get all nonzeros. + % + % + %Usage: retval = nonzeros_int () + % + %retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(652, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getName(self,varargin) + %Get name (only if symbolic scalar) + % + % + %Usage: retval = getName () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(653, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getDep(self,varargin) + %Get expressions of the children of the expression Only defined if symbolic + %scalar. Wraps SXElement SXElement::getDep(int ch=0) const. + % + % + %Usage: retval = getDep (ch = 0) + % + %ch is of type int. ch is of type int. retval is of type DMatrix. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(654, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getNdeps(self,varargin) + %Get the number of dependencies of a binary SXElement Only defined if + %symbolic scalar. + % + % + %Usage: retval = getNdeps () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(655, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = DMatrix(varargin) + self@casadi.MatrixCommon(SwigRef.Null); + self@casadi.ExpDMatrix(SwigRef.Null); + self@casadi.GenDMatrix(SwigRef.Null); + self@casadi.PrintDMatrix(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(659, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function varargout = assign(self,varargin) + %Usage: assign (rhs) + % + %rhs is of type DMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(660, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = paren(self,varargin) + %Usage: retval = paren (rr, cc) + % + %rr is of type IMatrix. cc is of type IMatrix. rr is of type IMatrix. cc is of type IMatrix. retval is of type DMatrix. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(661, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = paren_asgn(self,varargin) + %Usage: paren_asgn (m, rr, cc) + % + %m is of type DMatrix. rr is of type IMatrix. cc is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(662, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = brace(self,varargin) + %Usage: retval = brace (rr) + % + %rr is of type IMatrix. rr is of type IMatrix. retval is of type DMatrix. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(663, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setbrace(self,varargin) + %Usage: setbrace (m, rr) + % + %m is of type DMatrix. rr is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(664, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = end(self,varargin) + %Usage: retval = end (i, n) + % + %i is of type int. n is of type int. i is of type int. n is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(665, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ctranspose(self,varargin) + %Usage: retval = ctranspose () + % + %retval is of type DMatrix. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(666, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = full(self,varargin) + %Usage: retval = full () + % + %retval is of type mxArray *. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(667, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparse(self,varargin) + %[DEPRECATED] Create a sparse matrix with all zeros Use MatType(nrow, ncol) + %instead + % + % + %Usage: retval = sparse () + % + %retval is of type mxArray *. + + try + + if ~isa(self,'casadi.DMatrix') + self = casadi.DMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(668, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function delete(self) + if self.swigPtr + casadiMEX(669, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = binary(varargin) + %[INTERNAL] Create nodes by + %their ID. + % + % + %Usage: retval = binary (op, x, y) + % + %op is of type int. x is of type DMatrix. y is of type DMatrix. op is of type int. x is of type DMatrix. y is of type DMatrix. retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(604, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = unary(varargin) + %[INTERNAL] Create nodes by + %their ID. + % + % + %Usage: retval = unary (op, x) + % + %op is of type int. x is of type DMatrix. op is of type int. x is of type DMatrix. retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(605, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = scalar_matrix(varargin) + %[INTERNAL] Create + %nodes by their ID. + % + % + %Usage: retval = scalar_matrix (op, x, y) + % + %op is of type int. x is of type DMatrix. y is of type DMatrix. op is of type int. x is of type DMatrix. y is of type DMatrix. retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(606, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = matrix_scalar(varargin) + %[INTERNAL] Create + %nodes by their ID. + % + % + %Usage: retval = matrix_scalar (op, x, y) + % + %op is of type int. x is of type DMatrix. y is of type DMatrix. op is of type int. x is of type DMatrix. y is of type DMatrix. retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(607, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = matrix_matrix(varargin) + %[INTERNAL] Create + %nodes by their ID. + % + % + %Usage: retval = matrix_matrix (op, x, y) + % + %op is of type int. x is of type DMatrix. y is of type DMatrix. op is of type int. x is of type DMatrix. y is of type DMatrix. retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(608, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setEqualityCheckingDepth(varargin) + %Usage: setEqualityCheckingDepth (eq_depth = 1) + % + %eq_depth is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(611, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getEqualityCheckingDepth(varargin) + %Usage: retval = getEqualityCheckingDepth () + % + %retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(612, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = className(varargin) + %Usage: retval = className () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(613, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = triplet(varargin) + %Usage: retval = triplet (row, col, d, rc) + % + %row is of type std::vector< int,std::allocator< int > > const &. col is of type std::vector< int,std::allocator< int > > const &. d is of type DMatrix. rc is of type std::pair< int,int > const &. row is of type std::vector< int,std::allocator< int > > const &. col is of type std::vector< int,std::allocator< int > > const &. d is of type DMatrix. rc is of type std::pair< int,int > const &. retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(628, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inf(varargin) + %create a matrix with all inf + % + % + %Usage: retval = inf (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(629, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nan(varargin) + %create a matrix with all nan + % + % + %Usage: retval = nan (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(630, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eye(varargin) + %Usage: retval = eye (ncol) + % + %ncol is of type int. ncol is of type int. retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(631, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setPrecision(varargin) + %Set the 'precision, width & scientific' used in printing and serializing to + %streams. + % + % + %Usage: setPrecision (precision) + % + %precision is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(656, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setWidth(varargin) + %Set the 'precision, width & scientific' used in printing and serializing to + %streams. + % + % + %Usage: setWidth (width) + % + %width is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(657, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setScientific(varargin) + %Set the 'precision, width & scientific' used in printing and serializing to + %streams. + % + % + %Usage: setScientific (scientific) + % + %scientific is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(658, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DaeBuilder.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DaeBuilder.m new file mode 100755 index 0000000..0787833 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DaeBuilder.m @@ -0,0 +1,1414 @@ +classdef DaeBuilder < casadi.PrintDaeBuilder + %An initial-value problem in differential-algebraic equations. + % + %Independent variables: + %====================== + % + % + % + % + % + %:: + % + % t: time + % + % + % + % + %Time-continuous variables: + %========================== + % + % + % + % + % + %:: + % + % x: states defined by ODE + % s: implicitly defined states + % z: algebraic variables + % u: control signals + % q: quadrature states + % y: outputs + % + % + % + % + %Time-constant variables: + %======================== + % + % + % + % + % + %:: + % + % p: free parameters + % d: dependent parameters + % + % + % + % + %Dynamic constraints (imposed everywhere): + %========================================= + % + % + % + % + % + %:: + % + % ODE \\dot{x} == ode(t, x, s, z, u, p, d) + % DAE or implicit ODE: 0 == dae(t, x, s, z, u, p, d, sdot) + % algebraic equations: 0 == alg(t, x, s, z, u, p, d) + % quadrature equations: \\dot{q} == quad(t, x, s, z, u, p, d) + % deppendent parameters: d == ddef(t, x, s, z, u, p, d) + % output equations: y == ydef(t, x, s, z, u, p, d) + % + % + % + % + %Point constraints (imposed pointwise): + %====================================== + % + % + % + % + % + %:: + % + % Initial equations: 0 == init(t, x, s, z, u, p, d, sdot) + % + % + % + % + %Joel Andersson + % + %C++ includes: dae_builder.hpp + %Usage: DaeBuilder () + % + methods + function v = t(self) + v = casadiMEX(1260, self); + end + function v = x(self) + v = casadiMEX(1261, self); + end + function v = ode(self) + v = casadiMEX(1262, self); + end + function v = lam_ode(self) + v = casadiMEX(1263, self); + end + function v = s(self) + v = casadiMEX(1264, self); + end + function v = sdot(self) + v = casadiMEX(1265, self); + end + function v = dae(self) + v = casadiMEX(1266, self); + end + function v = lam_dae(self) + v = casadiMEX(1267, self); + end + function v = z(self) + v = casadiMEX(1268, self); + end + function v = alg(self) + v = casadiMEX(1269, self); + end + function v = lam_alg(self) + v = casadiMEX(1270, self); + end + function v = q(self) + v = casadiMEX(1271, self); + end + function v = quad(self) + v = casadiMEX(1272, self); + end + function v = lam_quad(self) + v = casadiMEX(1273, self); + end + function v = w(self) + v = casadiMEX(1274, self); + end + function v = wdef(self) + v = casadiMEX(1275, self); + end + function v = lam_wdef(self) + v = casadiMEX(1276, self); + end + function v = y(self) + v = casadiMEX(1277, self); + end + function v = ydef(self) + v = casadiMEX(1278, self); + end + function v = lam_ydef(self) + v = casadiMEX(1279, self); + end + function v = u(self) + v = casadiMEX(1280, self); + end + function v = p(self) + v = casadiMEX(1281, self); + end + function v = c(self) + v = casadiMEX(1282, self); + end + function v = cdef(self) + v = casadiMEX(1283, self); + end + function v = d(self) + v = casadiMEX(1284, self); + end + function v = ddef(self) + v = casadiMEX(1285, self); + end + function v = lam_ddef(self) + v = casadiMEX(1286, self); + end + function v = init(self) + v = casadiMEX(1287, self); + end + function varargout = add_p(self,varargin) + %Add a new parameter + % + % + %Usage: retval = add_p (name = std::string(), n = 1) + % + %name is of type std::string const &. n is of type int. name is of type std::string const &. n is of type int. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1288, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = add_u(self,varargin) + %Add a new control. + % + % + %Usage: retval = add_u (name = std::string(), n = 1) + % + %name is of type std::string const &. n is of type int. name is of type std::string const &. n is of type int. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1289, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = add_x(self,varargin) + %Add a new differential state. + % + % + %Usage: retval = add_x (name = std::string(), n = 1) + % + %name is of type std::string const &. n is of type int. name is of type std::string const &. n is of type int. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1290, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = add_s(self,varargin) + %Add a implicit state. + % + % + %Usage: retval = add_s (name = std::string(), n = 1) + % + %name is of type std::string const &. n is of type int. name is of type std::string const &. n is of type int. retval is of type std::pair< casadi::MX,casadi::MX >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1291, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = add_z(self,varargin) + %Add a new algebraic variable. + % + % + %Usage: retval = add_z (name = std::string(), n = 1) + % + %name is of type std::string const &. n is of type int. name is of type std::string const &. n is of type int. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1292, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = add_q(self,varargin) + %Add a new quadrature state. + % + % + %Usage: retval = add_q (name = std::string(), n = 1) + % + %name is of type std::string const &. n is of type int. name is of type std::string const &. n is of type int. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1293, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = add_d(self,varargin) + %Add a new dependent parameter. + % + % + %Usage: retval = add_d (new_ddef, name = std::string()) + % + %new_ddef is of type MX. name is of type std::string const &. new_ddef is of type MX. name is of type std::string const &. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1294, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = add_y(self,varargin) + %Add a new output. + % + % + %Usage: retval = add_y (new_ydef, name = std::string()) + % + %new_ydef is of type MX. name is of type std::string const &. new_ydef is of type MX. name is of type std::string const &. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1295, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = add_ode(self,varargin) + %Add an ordinary differential equation. + % + % + %Usage: add_ode (new_ode, name = std::string()) + % + %new_ode is of type MX. name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1296, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = add_dae(self,varargin) + %Add a differential-algebraic equation. + % + % + %Usage: add_dae (new_dae, name = std::string()) + % + %new_dae is of type MX. name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1297, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = add_alg(self,varargin) + %Add an algebraic equation. + % + % + %Usage: add_alg (new_alg, name = std::string()) + % + %new_alg is of type MX. name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1298, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = add_quad(self,varargin) + %Add a quadrature equation. + % + % + %Usage: add_quad (new_quad, name = std::string()) + % + %new_quad is of type MX. name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1299, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sanityCheck(self,varargin) + %Check if dimensions match. + % + % + %Usage: sanityCheck () + % + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:nargout}] = casadiMEX(1300, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = split_dae(self,varargin) + %Identify and separate the algebraic variables and equations in the DAE. + % + % + %Usage: split_dae () + % + + try + + [varargout{1:nargout}] = casadiMEX(1301, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eliminate_alg(self,varargin) + %Eliminate algebraic variables and equations transforming them into outputs. + % + % + %Usage: eliminate_alg () + % + + try + + [varargout{1:nargout}] = casadiMEX(1302, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = makeSemiExplicit(self,varargin) + %Transform the implicit DAE to a semi-explicit DAE. + % + % + %Usage: makeSemiExplicit () + % + + try + + [varargout{1:nargout}] = casadiMEX(1303, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = makeExplicit(self,varargin) + %Transform the implicit DAE or semi-explicit DAE into an explicit ODE. + % + % + %Usage: makeExplicit () + % + + try + + [varargout{1:nargout}] = casadiMEX(1304, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sort_d(self,varargin) + %Sort dependent parameters. + % + % + %Usage: sort_d () + % + + try + + [varargout{1:nargout}] = casadiMEX(1305, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = split_d(self,varargin) + %Eliminate interdependencies amongst dependent parameters. + % + % + %Usage: split_d () + % + + try + + [varargout{1:nargout}] = casadiMEX(1306, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eliminate_d(self,varargin) + %Eliminate dependent parameters. + % + % + %Usage: eliminate_d () + % + + try + + [varargout{1:nargout}] = casadiMEX(1307, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eliminate_quad(self,varargin) + %Eliminate quadrature states and turn them into ODE states. + % + % + %Usage: eliminate_quad () + % + + try + + [varargout{1:nargout}] = casadiMEX(1308, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sort_dae(self,varargin) + %Sort the DAE and implicitly defined states. + % + % + %Usage: sort_dae () + % + + try + + [varargout{1:nargout}] = casadiMEX(1309, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sort_alg(self,varargin) + %Sort the algebraic equations and algebraic states. + % + % + %Usage: sort_alg () + % + + try + + [varargout{1:nargout}] = casadiMEX(1310, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = scaleVariables(self,varargin) + %Scale the variables. + % + % + %Usage: scaleVariables () + % + + try + + [varargout{1:nargout}] = casadiMEX(1311, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = scaleEquations(self,varargin) + %Scale the implicit equations. + % + % + %Usage: scaleEquations () + % + + try + + [varargout{1:nargout}] = casadiMEX(1312, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = parseFMI(self,varargin) + %Import existing problem from FMI/XML + % + % + %Usage: parseFMI (filename) + % + %filename is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1313, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = addLinearCombination(self,varargin) + %Add a named linear combination of output expressions. + % + % + %Usage: retval = addLinearCombination (name, f_out) + % + %name is of type std::string const &. f_out is of type std::vector< std::string,std::allocator< std::string > > const &. name is of type std::string const &. f_out is of type std::vector< std::string,std::allocator< std::string > > const &. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1314, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = create(self,varargin) + %Construct a function object. + % + % + %Usage: retval = create (fname, s_in, s_out) + % + %fname is of type std::string const &. s_in is of type std::vector< std::string,std::allocator< std::string > > const &. s_out is of type std::vector< std::string,std::allocator< std::string > > const &. fname is of type std::string const &. s_in is of type std::vector< std::string,std::allocator< std::string > > const &. s_out is of type std::vector< std::string,std::allocator< std::string > > const &. retval is of type MXFunction. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1315, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = paren(self,varargin) + %Usage: retval = paren (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type MX. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1316, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = der(self,varargin) + %> MX DaeBuilder.der(str name) const + %------------------------------------------------------------------------ + % + %Get a derivative expression by name. + % + %> MX DaeBuilder.der(MX var) const + %------------------------------------------------------------------------ + % + %Get a derivative expression by non-differentiated expression. + % + % + %Usage: retval = der (var) + % + %var is of type MX. var is of type MX. retval is of type MX. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1317, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nominal(self,varargin) + %> double DaeBuilder.nominal(str name) const + %------------------------------------------------------------------------ + % + %Get the nominal value by name. + % + %> [double] DaeBuilder.nominal(MX var) const + %------------------------------------------------------------------------ + % + %Get the nominal value(s) by expression. + % + % + %Usage: retval = nominal (var) + % + %var is of type MX. var is of type MX. retval is of type std::vector< double,std::allocator< double > >. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1318, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setNominal(self,varargin) + %> void DaeBuilder.setNominal(str name, double val) + %------------------------------------------------------------------------ + % + %Set the nominal value by name. + % + %> void DaeBuilder.setNominal(MX var, [double ] val) + %------------------------------------------------------------------------ + % + %Set the nominal value(s) by expression. + % + % + %Usage: setNominal (var, val) + % + %var is of type MX. val is of type std::vector< double,std::allocator< double > > const &. + + try + + [varargout{1:nargout}] = casadiMEX(1319, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = min(self,varargin) + %> double DaeBuilder.min(str name, bool normalized=false) const + %------------------------------------------------------------------------ + % + %Get the lower bound by name. + % + %> [double] DaeBuilder.min(MX var, bool normalized=false) const + %------------------------------------------------------------------------ + % + %Get the lower bound(s) by expression. + % + % + %Usage: retval = min (var, normalized = false) + % + %var is of type MX. normalized is of type bool. var is of type MX. normalized is of type bool. retval is of type std::vector< double,std::allocator< double > >. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1320, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setMin(self,varargin) + %> void DaeBuilder.setMin(str name, double val, bool normalized=false) + %------------------------------------------------------------------------ + % + %Set the lower bound by name. + % + %> void DaeBuilder.setMin(MX var, [double ] val, bool normalized=false) + %------------------------------------------------------------------------ + % + %Set the lower bound(s) by expression. + % + % + %Usage: setMin (var, val, normalized = false) + % + %var is of type MX. val is of type std::vector< double,std::allocator< double > > const &. normalized is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(1321, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = max(self,varargin) + %> double DaeBuilder.max(str name, bool normalized=false) const + %------------------------------------------------------------------------ + % + %Get the upper bound by name. + % + %> [double] DaeBuilder.max(MX var, bool normalized=false) const + %------------------------------------------------------------------------ + % + %Get the upper bound(s) by expression. + % + % + %Usage: retval = max (var, normalized = false) + % + %var is of type MX. normalized is of type bool. var is of type MX. normalized is of type bool. retval is of type std::vector< double,std::allocator< double > >. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1322, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setMax(self,varargin) + %> void DaeBuilder.setMax(str name, double val, bool normalized=false) + %------------------------------------------------------------------------ + % + %Set the upper bound by name. + % + %> void DaeBuilder.setMax(MX var, [double ] val, bool normalized=false) + %------------------------------------------------------------------------ + % + %Set the upper bound(s) by expression. + % + % + %Usage: setMax (var, val, normalized = false) + % + %var is of type MX. val is of type std::vector< double,std::allocator< double > > const &. normalized is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(1323, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = initialGuess(self,varargin) + %> double DaeBuilder.initialGuess(str name, bool normalized=false) const + %------------------------------------------------------------------------ + % + %Get the initial guess by name. + % + %> [double] DaeBuilder.initialGuess(MX var, bool normalized=false) const + %------------------------------------------------------------------------ + % + %Get the initial guess(es) by expression. + % + % + %Usage: retval = initialGuess (var, normalized = false) + % + %var is of type MX. normalized is of type bool. var is of type MX. normalized is of type bool. retval is of type std::vector< double,std::allocator< double > >. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1324, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setInitialGuess(self,varargin) + %> void DaeBuilder.setInitialGuess(str name, double val, bool normalized=false) + %------------------------------------------------------------------------ + % + %Set the initial guess by name. + % + %> void DaeBuilder.setInitialGuess(MX var, [double ] val, bool normalized=false) + %------------------------------------------------------------------------ + % + %Set the initial guess(es) by expression. + % + % + %Usage: setInitialGuess (var, val, normalized = false) + % + %var is of type MX. val is of type std::vector< double,std::allocator< double > > const &. normalized is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(1325, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = start(self,varargin) + %> double DaeBuilder.start(str name, bool normalized=false) const + %------------------------------------------------------------------------ + % + %Get the (optionally normalized) value at time 0 by name. + % + %> [double] DaeBuilder.start(MX var, bool normalized=false) const + %------------------------------------------------------------------------ + % + %Get the (optionally normalized) value(s) at time 0 by expression. + % + % + %Usage: retval = start (var, normalized = false) + % + %var is of type MX. normalized is of type bool. var is of type MX. normalized is of type bool. retval is of type std::vector< double,std::allocator< double > >. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1326, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setStart(self,varargin) + %> void DaeBuilder.setStart(str name, double val, bool normalized=false) + %------------------------------------------------------------------------ + % + %Set the (optionally normalized) value at time 0 by name. + % + %> void DaeBuilder.setStart(MX var, [double ] val, bool normalized=false) + %------------------------------------------------------------------------ + % + %Set the (optionally normalized) value(s) at time 0 by expression. + % + % + %Usage: setStart (var, val, normalized = false) + % + %var is of type MX. val is of type std::vector< double,std::allocator< double > > const &. normalized is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(1327, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = derivativeStart(self,varargin) + %> double DaeBuilder.derivativeStart(str name, bool normalized=false) const + %------------------------------------------------------------------------ + % + %Get the (optionally normalized) derivative value at time 0 by name. + % + %> [double] DaeBuilder.derivativeStart(MX var, bool normalized=false) const + %------------------------------------------------------------------------ + % + %Get the (optionally normalized) derivative value(s) at time 0 by expression. + % + % + %Usage: retval = derivativeStart (var, normalized = false) + % + %var is of type MX. normalized is of type bool. var is of type MX. normalized is of type bool. retval is of type std::vector< double,std::allocator< double > >. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1328, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setDerivativeStart(self,varargin) + %> void DaeBuilder.setDerivativeStart(str name, double val, bool normalized=false) + %------------------------------------------------------------------------ + % + %Set the (optionally normalized) derivative value at time 0 by name. + % + %> void DaeBuilder.setDerivativeStart(MX var, [double ] val, bool normalized=false) + %------------------------------------------------------------------------ + % + %Set the (optionally normalized) derivative value(s) at time 0 by expression. + % + % + %Usage: setDerivativeStart (var, val, normalized = false) + % + %var is of type MX. val is of type std::vector< double,std::allocator< double > > const &. normalized is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(1329, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = unit(self,varargin) + %> str DaeBuilder.unit(str name) const + %------------------------------------------------------------------------ + % + %Get the unit for a component. + % + %> str DaeBuilder.unit(MX var) const + %------------------------------------------------------------------------ + % + %Get the unit given a vector of symbolic variables (all units must be + %identical) + % + % + %Usage: retval = unit (var) + % + %var is of type MX. var is of type MX. retval is of type std::string. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1330, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setUnit(self,varargin) + %Set the unit for a component. + % + % + %Usage: setUnit (name, val) + % + %name is of type std::string const &. val is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1331, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = disp(self,varargin) + %Print representation. + % + % + %Usage: disp (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:nargout}] = casadiMEX(1332, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = print(self,varargin) + %Print description. + % + % + %Usage: print (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:nargout}] = casadiMEX(1333, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = addVariable(self,varargin) + %> void DaeBuilder.addVariable(str name, Variable var) + %------------------------------------------------------------------------ + % + %Add a variable. + % + %> MX DaeBuilder.addVariable(str name, int n=1) + % + %> MX DaeBuilder.addVariable(str name, Sparsity sp) + %------------------------------------------------------------------------ + % + %Add a new variable: returns corresponding symbolic expression. + % + % + %Usage: retval = addVariable (name, sp) + % + %name is of type std::string const &. sp is of type Sparsity. name is of type std::string const &. sp is of type Sparsity. retval is of type MX. + + try + + [varargout{1:nargout}] = casadiMEX(1334, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = variable(self,varargin) + %Access a variable by name + % + % + %Usage: retval = variable (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type Variable. + + try + + if ~isa(self,'casadi.DaeBuilder') + self = casadi.DaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1335, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = DaeBuilder(varargin) + self@casadi.PrintDaeBuilder(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1336, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1337, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DerivativeGenerator.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DerivativeGenerator.m new file mode 100755 index 0000000..940f798 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DerivativeGenerator.m @@ -0,0 +1,65 @@ +classdef DerivativeGenerator < casadi.Functor + %Derivative Generator Functor. + % + %In C++, supply a DerivativeGeneratorCPtr function pointer + % + %In python, supply a callable, annotated with derivativegenerator decorator + % + %C++ includes: functor.hpp + %Usage: DerivativeGenerator () + % + methods + function varargout = paren(self,varargin) + %Usage: retval = paren (fcn, ndir, user_data) + % + %fcn is of type Function. ndir is of type int. user_data is of type void *. fcn is of type Function. ndir is of type int. user_data is of type void *. retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1077, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = DerivativeGenerator(varargin) + self@casadi.Functor(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1078, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1079, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DerivativeGenerator2.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DerivativeGenerator2.m new file mode 100755 index 0000000..40763f4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DerivativeGenerator2.m @@ -0,0 +1,107 @@ +classdef DerivativeGenerator2 < SwigRef + %C++ includes: + %callback.hpp + %Usage: DerivativeGenerator2 () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = paren(self,varargin) + %Usage: retval = paren (fcn, ndir) + % + %fcn is of type Function. ndir is of type int. fcn is of type Function. ndir is of type int. retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1070, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = original(self,varargin) + %Computes the derivative as if this derivative generator does not exist. + % + % + %Usage: retval = original (fcn, ndir, fwd) + % + %fcn is of type Function. ndir is of type int. fwd is of type bool. fcn is of type Function. ndir is of type int. fwd is of type bool. retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1071, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = create(self,varargin) + %Usage: retval = create () + % + %retval is of type DerivativeGenerator. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1072, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function delete(self) + if self.swigPtr + casadiMEX(1073, self); + self.swigPtr=[]; + end + end + function self = DerivativeGenerator2(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + if strcmp(class(self),'director_basic.DerivativeGenerator2') + tmp = casadiMEX(1074, 0, varargin{:}); + else + tmp = casadiMEX(1074, self, varargin{:}); + end + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DleSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DleSolver.m new file mode 100755 index 0000000..fdc072a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DleSolver.m @@ -0,0 +1,649 @@ +classdef DleSolver < casadi.Function + %Base class for Discrete Lyapunov Equation Solvers. + % + %Given matrices $A$ and symmetric $V$ + % + % + % + %:: + % + % A in R^(n x n) + % V in S^n + % + % + % + % + %finds $P$ that satisfies: + % + % + % + %:: + % + % P = A P A' + V + % + % + % + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::DLEInput (DLE_NUM_IN = 2) [dleIn] + % + %+-----------+-------+-------------+ + %| Full name | Short | Description | + %+===========+=======+=============+ + %| DLE_A | a | A matrix . | + %+-----------+-------+-------------+ + %| DLE_V | v | V matrix . | + %+-----------+-------+-------------+ + % + %>Output scheme: casadi::DLEOutput (DLE_NUM_OUT = 1) [dleOut] + % + %+-----------+-------+-------------+ + %| Full name | Short | Description | + %+===========+=======+=============+ + %| DLE_P | p | P matrix . | + %+-----------+-------+-------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| eps_unstable | OT_REAL | 0.000 | A margin for | casadi::DleI | + %| | | | unstability | nternal | + %| | | | detection | | + %+--------------+--------------+--------------+--------------+--------------+ + %| error_unstab | OT_BOOLEAN | false | Throw an | casadi::DleI | + %| le | | | exception | nternal | + %| | | | when it is | | + %| | | | detected | | + %| | | | that | | + %| | | | Product(A_i, | | + %| | | | i=N..1) has | | + %| | | | eigenvalues | | + %| | | | greater than | | + %| | | | 1-eps_unstab | | + %| | | | le | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| pos_def | OT_BOOLEAN | false | Assume P | casadi::DleI | + %| | | | positive | nternal | + %| | | | definite | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- dple + % + %- lrdle + % + %- fixed_smith + % + %- simple + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %DleSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %dple + %---- + % + % + % + %Solving the Discrete Lyapunov Equations with Periodic Solver + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %lrdle + %----- + % + % + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %fixed_smith + %----------- + % + % + % + %Solving the Discrete Lyapunov Equations with a fixed number of smith + %iterations. + % + %This plugin uses Smith iterations. + % + %Th basic idea is to exploit the fact that the discrete algebraic Lyapunov + %operator f(X) = AXA^T + V has a fixed point when A is stable. + % + %The pure Smith iterations are: + % + % + % + %:: + % + % X_{-1} = 0 + % X_0 = V + % k = 0 + % while ||X_k - X_{k-1} || < do + % X_{k+1} = A X_k A^T + V + % k += 1 + % end + % + % P = X_k + % + % + % + % + %With frequency doubling, we have: + % + % + % + %:: + % + % X_{-1} = 0 + % X_0 = V + % V_0 = V + % A_0 = A + % k = 0 + % while ||X_k - X_{k-1} || < do + % X_{k+1} = A_k X_k A_k^T + V_k + % V_{k+1} = A_k V_k A_k^T + V_k + % A_{k+1} = A_k A_k + % k += 1 + % end + % + % P = X_k + % + % + % + % + %>List of available options + % + %+---------------+------------+---------+----------------------------+ + %| Id | Type | Default | Description | + %+===============+============+=========+============================+ + %| freq_doubling | OT_BOOLEAN | false | Use frequency doubling | + %+---------------+------------+---------+----------------------------+ + %| iter | OT_INTEGER | 100 | Number of Smith iterations | + %+---------------+------------+---------+----------------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %simple + %------ + % + % + % + %Solving the Discrete Lyapunov Equations with a regular LinearSolver + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| compressed_solv | OT_BOOLEAN | true | When a system | + %| e | | | with sparse rhs | + %| | | | arises, | + %| | | | compress toa | + %| | | | smaller system | + %| | | | with dense rhs. | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver | OT_STRING | GenericType() | User-defined | + %| | | | linear solver | + %| | | | class. Needed | + %| | | | for | + %| | | | sensitivities. | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_o | OT_DICT | GenericType() | Options to be | + %| ptions | | | passed to the | + %| | | | linear solver. | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joris Gillis + %Diagrams + %-------- + % + % + % + %C++ includes: dle_solver.hpp + %Usage: DleSolver () + % + methods + function varargout = clone(self,varargin) + %Clone. + % + % + %Usage: retval = clone () + % + %retval is of type DleSolver. + + try + + if ~isa(self,'casadi.DleSolver') + self = casadi.DleSolver(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1101, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printStats(self,varargin) + %Print solver statistics. + % + % + %Usage: printStats () + % + + try + + if ~isa(self,'casadi.DleSolver') + self = casadi.DleSolver(self); + end + [varargout{1:nargout}] = casadiMEX(1102, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = DleSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1108, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1109, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1103, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1104, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1105, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1106, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparsity(varargin) + %Usage: retval = sparsity (st) + % + %st is of type std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > > const &. st is of type std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > > const &. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1107, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DpleSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DpleSolver.m new file mode 100755 index 0000000..ecba79b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/DpleSolver.m @@ -0,0 +1,672 @@ +classdef DpleSolver < casadi.Function + %Base class for Discrete Periodic Lyapunov Equation Solvers. + % + %Given matrices $A_k$ and symmetric $V_k, k = 0..K-1$ + % + % + % + %:: + % + % A_k in R^(n x n) + % V_k in R^n + % + % + % + % + %provides all of $P_k$ that satisfy: + % + % + % + %:: + % + % P_0 = A_(K-1)*P_(K-1)*A_(K-1)' + V_k + % P_k+1 = A_k*P_k*A_k' + V_k for k = 1..K-1 + % + % + % + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::DPLEInput (DPLE_NUM_IN = 2) [dpleIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| DPLE_A | a | A matrices (horzcat | + %| | | when const_dim, | + %| | | diagcat otherwise) . | + %+------------------------+------------------------+------------------------+ + %| DPLE_V | v | V matrices (horzcat | + %| | | when const_dim, | + %| | | diagcat otherwise) . | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::DPLEOutput (DPLE_NUM_OUT = 1) [dpleOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| DPLE_P | p | Lyapunov matrix | + %| | | (horzcat when | + %| | | const_dim, diagcat | + %| | | otherwise) (Cholesky | + %| | | of P if pos_def) . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| const_dim | OT_BOOLEAN | true | Assume | casadi::Dple | + %| | | | constant | Internal | + %| | | | dimension of | | + %| | | | P | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| eps_unstable | OT_REAL | 0.000 | A margin for | casadi::Dple | + %| | | | unstability | Internal | + %| | | | detection | | + %+--------------+--------------+--------------+--------------+--------------+ + %| error_unstab | OT_BOOLEAN | false | Throw an | casadi::Dple | + %| le | | | exception | Internal | + %| | | | when it is | | + %| | | | detected | | + %| | | | that | | + %| | | | Product(A_i, | | + %| | | | i=N..1) has | | + %| | | | eigenvalues | | + %| | | | greater than | | + %| | | | 1-eps_unstab | | + %| | | | le | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| pos_def | OT_BOOLEAN | false | Assume P | casadi::Dple | + %| | | | positive | Internal | + %| | | | definite | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- slicot + % + %- condensing + % + %- lrdple + % + %- lifting + % + %- simple + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %DpleSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %slicot + %------ + % + % + % + %An efficient solver for Discrete Periodic Lyapunov Equations using SLICOT + % + %Uses Periodic Schur Decomposition ('psd') and does not assume positive + %definiteness. Based on Periodic Lyapunov equations: some applications and + %new algorithms. Int. J. Control, vol. 67, pp. 69-87, 1997. + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| linear_solver | OT_STRING | GenericType() | User-defined | + %| | | | linear solver | + %| | | | class. Needed | + %| | | | for | + %| | | | sensitivities. | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_o | OT_DICT | GenericType() | Options to be | + %| ptions | | | passed to the | + %| | | | linear solver. | + %+-----------------+-----------------+-----------------+-----------------+ + %| psd_num_zero | OT_REAL | 0.000 | Numerical zero | + %| | | | used in | + %| | | | Periodic Schur | + %| | | | decomposition | + %| | | | with | + %| | | | slicot.This | + %| | | | option is | + %| | | | needed when | + %| | | | your systems | + %| | | | has Floquet | + %| | | | multiplierszero | + %| | | | or close to | + %| | | | zero | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available stats + % + %+----------------+ + %| Id | + %+================+ + %| t_linear_solve | + %+----------------+ + %| t_psd | + %+----------------+ + %| t_total | + %+----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %condensing + %---------- + % + % + % + %Solving the Discrete Periodic Lyapunov Equations by condensing the entire + %period to a single Discrete Lyapunov Equation + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %lrdple + %------ + % + % + % + %Solving the Low-Rank Discrete Lyapunov Equations with a Low-Rank Discrete + %Lyapunov Equations Solver + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %lifting + %------- + % + % + % + %Solving the Discrete Periodic Lyapunov Equations by lifting the entire + %period to a single Discrete Lyapunov Equation + % + %>List of available options + % + %+------+-----------+---------+-----------------------------------+ + %| Id | Type | Default | Description | + %+======+===========+=========+===================================+ + %| form | OT_STRING | "A" | The form of the lifting (A:0|B:1) | + %+------+-----------+---------+-----------------------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %simple + %------ + % + % + % + %Solving the Discrete Periodic Lyapunov Equations with a regular LinearSolver + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| linear_solver | OT_STRING | GenericType() | User-defined | + %| | | | linear solver | + %| | | | class. Needed | + %| | | | for | + %| | | | sensitivities. | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_o | OT_DICT | GenericType() | Options to be | + %| ptions | | | passed to the | + %| | | | linear solver. | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joris Gillis + %Diagrams + %-------- + % + % + % + %C++ includes: dple_solver.hpp + %Usage: DpleSolver () + % + methods + function varargout = clone(self,varargin) + %Clone. + % + % + %Usage: retval = clone () + % + %retval is of type DpleSolver. + + try + + if ~isa(self,'casadi.DpleSolver') + self = casadi.DpleSolver(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1092, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printStats(self,varargin) + %Print solver statistics. + % + % + %Usage: printStats () + % + + try + + if ~isa(self,'casadi.DpleSolver') + self = casadi.DpleSolver(self); + end + [varargout{1:nargout}] = casadiMEX(1093, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = DpleSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1099, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1100, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1094, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1095, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1096, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1097, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = periodic_schur(varargin) + %Usage: periodic_schur (name, A, num_zero = 0) + % + %name is of type std::string const &. A is of type std::vector< casadi::Matrix< double >,std::allocator< casadi::Matrix< double > > > const &. num_zero is of type double. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1098, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpDMatrix.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpDMatrix.m new file mode 100755 index 0000000..f5c0e49 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpDMatrix.m @@ -0,0 +1,46 @@ +classdef ExpDMatrix < casadi.GenericExpressionCommon + %Expression interface. + % + %This is a common base class for SX, MX and Matrix<>, introducing a uniform + %syntax and implementing common functionality using the curiously recurring + %template pattern (CRTP) idiom. Joel Andersson + % + %C++ includes: generic_expression.hpp + %Usage: ExpDMatrix () + % + methods + function self = ExpDMatrix(varargin) + self@casadi.GenericExpressionCommon(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(471, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(472, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpIMatrix.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpIMatrix.m new file mode 100755 index 0000000..684b177 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpIMatrix.m @@ -0,0 +1,46 @@ +classdef ExpIMatrix < casadi.GenericExpressionCommon + %Expression interface. + % + %This is a common base class for SX, MX and Matrix<>, introducing a uniform + %syntax and implementing common functionality using the curiously recurring + %template pattern (CRTP) idiom. Joel Andersson + % + %C++ includes: generic_expression.hpp + %Usage: ExpIMatrix () + % + methods + function self = ExpIMatrix(varargin) + self@casadi.GenericExpressionCommon(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(469, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(470, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpMX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpMX.m new file mode 100755 index 0000000..872bd34 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpMX.m @@ -0,0 +1,46 @@ +classdef ExpMX < casadi.GenericExpressionCommon + %Expression interface. + % + %This is a common base class for SX, MX and Matrix<>, introducing a uniform + %syntax and implementing common functionality using the curiously recurring + %template pattern (CRTP) idiom. Joel Andersson + % + %C++ includes: generic_expression.hpp + %Usage: ExpMX () + % + methods + function self = ExpMX(varargin) + self@casadi.GenericExpressionCommon(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(475, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(476, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpSX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpSX.m new file mode 100755 index 0000000..07119c6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExpSX.m @@ -0,0 +1,46 @@ +classdef ExpSX < casadi.GenericExpressionCommon + %Expression interface. + % + %This is a common base class for SX, MX and Matrix<>, introducing a uniform + %syntax and implementing common functionality using the curiously recurring + %template pattern (CRTP) idiom. Joel Andersson + % + %C++ includes: generic_expression.hpp + %Usage: ExpSX () + % + methods + function self = ExpSX(varargin) + self@casadi.GenericExpressionCommon(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(473, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(474, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExternalFunction.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExternalFunction.m new file mode 100755 index 0000000..a9269e2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ExternalFunction.m @@ -0,0 +1,304 @@ +classdef ExternalFunction < casadi.Function + %Interface for a function that is not implemented by CasADi symbolics. + % + %Joel Andersson + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %>List of available monitors + % + %+---------+--------------------------+ + %| Id | Used in | + %+=========+==========================+ + %| inputs | casadi::FunctionInternal | + %+---------+--------------------------+ + %| outputs | casadi::FunctionInternal | + %+---------+--------------------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: external_function.hpp + %Usage: ExternalFunction () + % + methods + function self = ExternalFunction(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1050, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1051, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1049, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/FLAG.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/FLAG.m new file mode 100755 index 0000000..b1844ae --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/FLAG.m @@ -0,0 +1,7 @@ +function v = FLAG() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 152); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Function.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Function.m new file mode 100755 index 0000000..76a0846 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Function.m @@ -0,0 +1,1921 @@ +classdef Function < casadi.OptionsFunctionality & casadi.IOInterfaceFunction + %General function. + % + %A general function $f$ in casadi can be multi-input, multi-output. Number of + %inputs: nin nIn() Number of outputs: nout nOut() We can view this function + %as a being composed of a ( nin, nout) grid of single-input, single-output + %primitive functions. Each such primitive function $f_ {i, j} \\forall i + %\\in [0, nin-1], j \\in [0, nout-1]$ can map as $\\mathbf {R}^{n, + %m}\\to\\mathbf{R}^{p, q}$, in which n, m, p, q can take different values + %for every (i, j) pair. When passing input, you specify which partition $i$ + %is active. You pass the numbers vectorized, as a vector of size $(n*m)$. + %When requesting output, you specify which partition $j$ is active. You get + %the numbers vectorized, as a vector of size $(p*q)$. To calculate + %Jacobians, you need to have $(m=1, q=1)$. + % + %Write the Jacobian as $J_ {i, j} = \\nabla f_{i, j} = \\frac + %{\\partial f_{i, j}(\\vec{x})}{\\partial \\vec{x}}$. + % + %We have the following relationships for function mapping from a row vector + %to a row vector: + % + %$ \\vec {s}_f = \\nabla f_{i, j} . \\vec{v}$ $ \\vec {s}_a = + %(\\nabla f_{i, j})^T . \\vec{w}$ + % + %Some quantities in these formulas must be transposed: input col: transpose $ + %\\vec {v} $ and $\\vec{s}_a$ output col: transpose $ \\vec {w} $ and + %$\\vec{s}_f$ NOTE: Functions are allowed to modify their input arguments + %when evaluating: implicitFunction, IDAS solver Further releases may disallow + %this. + % + %Joel Andersson + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %>List of available monitors + % + %+---------+--------------------------+ + %| Id | Used in | + %+=========+==========================+ + %| inputs | casadi::FunctionInternal | + %+---------+--------------------------+ + %| outputs | casadi::FunctionInternal | + %+---------+--------------------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: function.hpp + %Usage: Function () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function delete(self) + if self.swigPtr + casadiMEX(832, self); + self.swigPtr=[]; + end + end + function varargout = inputIndex(self,varargin) + %Find the index for a string describing a particular entry of an input + %scheme. + % + %example: schemeEntry("x_opt") -> returns NLP_SOLVER_X if FunctionInternal + %adheres to SCHEME_NLPINput + % + % + %Usage: retval = inputIndex (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type int. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(833, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = outputIndex(self,varargin) + %Find the index for a string describing a particular entry of an output + %scheme. + % + %example: schemeEntry("x_opt") -> returns NLP_SOLVER_X if FunctionInternal + %adheres to SCHEME_NLPINput + % + % + %Usage: retval = outputIndex (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type int. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(834, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inputName(self,varargin) + %Get input scheme name by index. + % + % + %Usage: retval = inputName (ind) + % + %ind is of type int. ind is of type int. retval is of type std::string. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(835, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = outputName(self,varargin) + %Get output scheme name by index. + % + % + %Usage: retval = outputName (ind) + % + %ind is of type int. ind is of type int. retval is of type std::string. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(836, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inputDescription(self,varargin) + %Get input scheme description by index. + % + % + %Usage: retval = inputDescription (ind) + % + %ind is of type int. ind is of type int. retval is of type std::string. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(837, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = outputDescription(self,varargin) + %Get output scheme description by index. + % + % + %Usage: retval = outputDescription (ind) + % + %ind is of type int. ind is of type int. retval is of type std::string. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(838, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = defaultInput(self,varargin) + %Get default input value. + % + % + %Usage: retval = defaultInput (ind) + % + %ind is of type int. ind is of type int. retval is of type double. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(839, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inputSparsity(self,varargin) + %Get sparsity of a given input. + % + % + %Usage: retval = inputSparsity (iname) + % + %iname is of type std::string const &. iname is of type std::string const &. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(840, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = outputSparsity(self,varargin) + %Get sparsity of a given output. + % + % + %Usage: retval = outputSparsity (iname) + % + %iname is of type std::string const &. iname is of type std::string const &. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(841, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nIn(self,varargin) + %Get the number of function inputs. + % + % + %Usage: retval = nIn () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(842, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nOut(self,varargin) + %Get the number of function outputs. + % + % + %Usage: retval = nOut () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(843, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nnzIn(self,varargin) + %Get total number of nonzeros in all of the matrix-valued inputs. + % + % + %Usage: retval = nnzIn () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(844, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nnzOut(self,varargin) + %Get total number of nonzeros in all of the matrix-valued outputs. + % + % + %Usage: retval = nnzOut () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(845, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = numelIn(self,varargin) + %Get total number of elements in all of the matrix-valued inputs. + % + % + %Usage: retval = numelIn () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(846, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = numelOut(self,varargin) + %Get total number of elements in all of the matrix-valued outputs. + % + % + %Usage: retval = numelOut () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(847, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inputScheme(self,varargin) + %Get input scheme. + % + % + %Usage: retval = inputScheme () + % + %retval is of type std::vector< std::string,std::allocator< std::string > >. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(848, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = outputScheme(self,varargin) + %Get output scheme. + % + % + %Usage: retval = outputScheme () + % + %retval is of type std::vector< std::string,std::allocator< std::string > >. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(849, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = evaluate(self,varargin) + %Evaluate. + % + % + %Usage: evaluate () + % + + try + + [varargout{1:nargout}] = casadiMEX(850, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printDimensions(self,varargin) + %Print dimensions of inputs and outputs. + % + % + %Usage: printDimensions () + % + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:nargout}] = casadiMEX(851, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = jacobian(self,varargin) + %Generate a Jacobian function of output oind with respect to input iind. + % + %Parameters: + %----------- + % + %iind: The index of the input + % + %oind: The index of the output + % + %The default behavior of this class is defined by the derived class. If + %compact is set to true, only the nonzeros of the input and output + %expressions are considered. If symmetric is set to true, the Jacobian being + %calculated is known to be symmetric (usually a Hessian), which can be + %exploited by the algorithm. + % + %The generated Jacobian has one more output than the calling function + %corresponding to the Jacobian and the same number of inputs. + % + % + %Usage: retval = jacobian (iind, oind, compact = false, symmetric = false) + % + %iind is of type std::string const &. oind is of type std::string const &. compact is of type bool. symmetric is of type bool. iind is of type std::string const &. oind is of type std::string const &. compact is of type bool. symmetric is of type bool. retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(852, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setJacobian(self,varargin) + %Set the Jacobian function of output oind with respect to input iind NOTE: + %Does not take ownership, only weak references to the Jacobians are kept + %internally + % + % + %Usage: setJacobian (jac, iind = 0, oind = 0, compact = false) + % + %jac is of type Function. iind is of type int. oind is of type int. compact is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(853, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = gradient(self,varargin) + %Generate a gradient function of output oind with respect to input iind. + % + %Parameters: + %----------- + % + %iind: The index of the input + % + %oind: The index of the output + % + %The default behavior of this class is defined by the derived class. Note + %that the output must be scalar. In other cases, use the Jacobian instead. + % + % + %Usage: retval = gradient (iind, oind) + % + %iind is of type std::string const &. oind is of type std::string const &. iind is of type std::string const &. oind is of type std::string const &. retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(854, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = tangent(self,varargin) + %Generate a tangent function of output oind with respect to input iind. + % + %Parameters: + %----------- + % + %iind: The index of the input + % + %oind: The index of the output + % + %The default behavior of this class is defined by the derived class. Note + %that the input must be scalar. In other cases, use the Jacobian instead. + % + % + %Usage: retval = tangent (iind, oind) + % + %iind is of type std::string const &. oind is of type std::string const &. iind is of type std::string const &. oind is of type std::string const &. retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(855, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hessian(self,varargin) + %Generate a Hessian function of output oind with respect to input iind. + % + %Parameters: + %----------- + % + %iind: The index of the input + % + %oind: The index of the output + % + %The generated Hessian has two more outputs than the calling function + %corresponding to the Hessian and the gradients. + % + % + %Usage: retval = hessian (iind, oind) + % + %iind is of type std::string const &. oind is of type std::string const &. iind is of type std::string const &. oind is of type std::string const &. retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(856, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = fullJacobian(self,varargin) + %Generate a Jacobian function of all the inputs elements with respect to all + %the output elements). + % + % + %Usage: retval = fullJacobian () + % + %retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(857, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setFullJacobian(self,varargin) + %Set the Jacobian of all the input nonzeros with respect to all output + %nonzeros NOTE: Does not take ownership, only weak references to the Jacobian + %are kept internally + % + % + %Usage: setFullJacobian (jac) + % + %jac is of type Function. + + try + + [varargout{1:nargout}] = casadiMEX(858, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = call(self,varargin) + %Evaluate the function symbolically or numerically. + % + % + %Usage: call (arg, always_inline = false, never_inline = false) + % + %arg is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const &. always_inline is of type bool. never_inline is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(859, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = paren(self,varargin) + %Usage: retval = paren (arg, always_inline = false, never_inline = false) + % + %arg is of type casadi::MXDict const &. always_inline is of type bool. never_inline is of type bool. arg is of type casadi::MXDict const &. always_inline is of type bool. never_inline is of type bool. retval is of type casadi::MXDict const. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(860, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = callForward(self,varargin) + %Create call to (cached) derivative function, forward mode. + % + % + %Usage: callForward (arg, res, fseed, always_inline = false, never_inline = false) + % + %arg is of type std::vector< casadi::DMatrix,std::allocator< casadi::DMatrix > > const &. res is of type std::vector< casadi::DMatrix,std::allocator< casadi::DMatrix > > const &. fseed is of type std::vector< std::vector< casadi::DMatrix,std::allocator< casadi::DMatrix > >,std::allocator< std::vector< casadi::DMatrix,std::allocator< casadi::DMatrix > > > > const &. always_inline is of type bool. never_inline is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(861, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = callReverse(self,varargin) + %Create call to (cached) derivative function, reverse mode. + % + % + %Usage: callReverse (arg, res, aseed, always_inline = false, never_inline = false) + % + %arg is of type std::vector< casadi::DMatrix,std::allocator< casadi::DMatrix > > const &. res is of type std::vector< casadi::DMatrix,std::allocator< casadi::DMatrix > > const &. aseed is of type std::vector< std::vector< casadi::DMatrix,std::allocator< casadi::DMatrix > >,std::allocator< std::vector< casadi::DMatrix,std::allocator< casadi::DMatrix > > > > const &. always_inline is of type bool. never_inline is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(862, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = callDerivative(self,varargin) + %[INTERNAL] + %Evaluate the function symbolically or numerically with directional + %derivatives The first two arguments are the nondifferentiated inputs and + %results of the evaluation, the next two arguments are a set of forward + %directional seeds and the resulting forward directional derivatives, the + %length of the vector being the number of forward directions. The next two + %arguments are a set of adjoint directional seeds and the resulting adjoint + %directional derivatives, the length of the vector being the number of + %adjoint directions. + % + % + %Usage: callDerivative (arg, fseed, aseed, always_inline = false, never_inline = false) + % + %arg is of type casadi::MXVector const &. fseed is of type casadi::MXVectorVector const &. aseed is of type casadi::MXVectorVector const &. always_inline is of type bool. never_inline is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(863, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = mapsum(self,varargin) + %Evaluate symbolically in parallel and sum (matrix graph) + % + %Parameters: + %----------- + % + %parallelization: Type of parallelization used: expand|serial|openmp + % + % + %Usage: retval = mapsum (arg, parallelization = "serial") + % + %arg is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const &. parallelization is of type std::string const &. arg is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const &. parallelization is of type std::string const &. retval is of type std::vector< casadi::MX,std::allocator< casadi::MX > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(864, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = mapaccum(self,varargin) + %Create a mapaccumulated version of this function. + % + %Suppose the function has a signature of: + % + %:: + % + % f: (x, u) -> (x_next , y ) + % + % + % + % + %The the mapaccumulated version has the signature: + % + %:: + % + % F: (x0, U) -> (X , Y ) + % + % with + % U: horzcat([u0, u1, ..., u_(N-1)]) + % X: horzcat([x1, x2, ..., x_N]) + % Y: horzcat([y0, y1, ..., y_(N-1)]) + % + % and + % x1, y0 <- f(x0, u0) + % x2, y1 <- f(x1, u1) + % ... + % x_N, y_(N-1) <- f(x_(N-1), u_(N-1)) + % + % + % + % + % + %Usage: retval = mapaccum (name, N, options = casadi::Dict()) + % + %name is of type std::string const &. N is of type int. options is of type casadi::Dict const &. name is of type std::string const &. N is of type int. options is of type casadi::Dict const &. retval is of type Function. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(865, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = map(self,varargin) + %> [[MX] ] Function.map([[MX ] ] arg, str parallelization="serial") + % + %> [MX] Function.map([MX ] arg, str parallelization="serial") + %------------------------------------------------------------------------ + % + %Evaluate symbolically in parallel (matrix graph) + % + %Parameters: + %----------- + % + %parallelization: Type of parallelization used: expand|serial|openmp + % + %> Function Function.map(str name, int N, Dict options=Dict()) const + %------------------------------------------------------------------------ + % + %Create a mapped version of this function. + % + %Suppose the function has a signature of: + % + %:: + % + % f: (a, p) -> ( s ) + % + % + % + % + %The the mapaccumulated version has the signature: + % + %:: + % + % F: (A, P) -> (S ) + % + % with + % a: horzcat([a0, a1, ..., a_(N-1)]) + % p: horzcat([p0, p1, ..., p_(N-1)]) + % s: horzcat([s0, s1, ..., s_(N-1)]) + % and + % s0 <- f(a0, p0) + % s1 <- f(a1, p1) + % ... + % s_(N-1) <- f(a_(N-1), p_(N-1)) + % + % + % + % + % + %Usage: retval = map (name, N, options = casadi::Dict()) + % + %name is of type std::string const &. N is of type int. options is of type casadi::Dict const &. name is of type std::string const &. N is of type int. options is of type casadi::Dict const &. retval is of type Function. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(866, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = derivative(self,varargin) + %Get a function that calculates nfwd forward derivatives and nadj adjoint + %derivatives Legacy function: Use derForward and derReverse instead. + % + %Returns a function with (1+nfwd)*n_in+nadj*n_out inputs and (1+nfwd)*n_out + + %nadj*n_in outputs. The first n_in inputs correspond to nondifferentiated + %inputs. The next nfwd*n_in inputs correspond to forward seeds, one direction + %at a time and the last nadj*n_out inputs correspond to adjoint seeds, one + %direction at a time. The first n_out outputs correspond to nondifferentiated + %outputs. The next nfwd*n_out outputs correspond to forward sensitivities, + %one direction at a time and the last nadj*n_in outputs corresponds to + %adjoint sensitivities, one direction at a time. + % + %(n_in = nIn(), n_out = nOut()) + % + % + %Usage: retval = derivative (nfwd, nadj) + % + %nfwd is of type int. nadj is of type int. nfwd is of type int. nadj is of type int. retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(867, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = derForward(self,varargin) + %Get a function that calculates nfwd forward derivatives. + % + %Returns a function with n_in + n_out +nfwd*n_in inputs and nfwd*n_out + %outputs. The first n_in inputs correspond to nondifferentiated inputs. The + %next n_out inputs correspond to nondifferentiated outputs. and the last + %nfwd*n_in inputs correspond to forward seeds, one direction at a time The + %nfwd*n_out outputs correspond to forward sensitivities, one direction at a + %time. * (n_in = nIn(), n_out = nOut()) + % + %The functions returned are cached, meaning that if called multiple timed + %with the same value, then multiple references to the same function will be + %returned. + % + % + %Usage: retval = derForward (nfwd) + % + %nfwd is of type int. nfwd is of type int. retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(868, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = derReverse(self,varargin) + %Get a function that calculates nadj adjoint derivatives. + % + %Returns a function with n_in + n_out +nadj*n_out inputs and nadj*n_in + %outputs. The first n_in inputs correspond to nondifferentiated inputs. The + %next n_out inputs correspond to nondifferentiated outputs. and the last + %nadj*n_out inputs correspond to adjoint seeds, one direction at a time The + %nadj*n_in outputs correspond to adjoint sensitivities, one direction at a + %time. * (n_in = nIn(), n_out = nOut()) + % + %(n_in = nIn(), n_out = nOut()) + % + %The functions returned are cached, meaning that if called multiple timed + %with the same value, then multiple references to the same function will be + %returned. + % + % + %Usage: retval = derReverse (nadj) + % + %nadj is of type int. nadj is of type int. retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(869, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setDerForward(self,varargin) + %Set a function that calculates nfwd forward derivatives NOTE: Does not take + %ownership, only weak references to the derivatives are kept internally. + % + % + %Usage: setDerForward (fcn, nfwd) + % + %fcn is of type Function. nfwd is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(870, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setDerReverse(self,varargin) + %Set a function that calculates nadj adjoint derivatives NOTE: Does not take + %ownership, only weak references to the derivatives are kept internally. + % + % + %Usage: setDerReverse (fcn, nadj) + % + %fcn is of type Function. nadj is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(871, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = jacSparsity(self,varargin) + %Get, if necessary generate, the sparsity of a Jacobian block + % + % + %Usage: retval = jacSparsity (iind, oind, compact = false, symmetric = false) + % + %iind is of type std::string const &. oind is of type std::string const &. compact is of type bool. symmetric is of type bool. iind is of type std::string const &. oind is of type std::string const &. compact is of type bool. symmetric is of type bool. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(872, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setJacSparsity(self,varargin) + %Generate the sparsity of a Jacobian block + % + % + %Usage: setJacSparsity (sp, iind, oind, compact = false) + % + %sp is of type Sparsity. iind is of type std::string const &. oind is of type std::string const &. compact is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(873, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = generate(self,varargin) + %Export / Generate C code for the function. + % + % + %Usage: generate (opts = casadi::Dict()) + % + %opts is of type casadi::Dict const &. + + try + + [varargout{1:nargout}] = casadiMEX(874, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getStats(self,varargin) + %Get all statistics obtained at the end of the last evaluate call. + % + % + %Usage: retval = getStats () + % + %retval is of type casadi::Dict const &. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(876, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getStat(self,varargin) + %Get a single statistic obtained at the end of the last evaluate call. + % + % + %Usage: retval = getStat (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type GenericType. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(877, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = symbolicInput(self,varargin) + %Get a vector of symbolic variables with the same dimensions as the inputs. + % + %There is no guarantee that consecutive calls return identical objects + % + % + %Usage: retval = symbolicInput (unique = false) + % + %unique is of type bool. unique is of type bool. retval is of type std::vector< casadi::MX,std::allocator< casadi::MX > >. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(878, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = symbolicInputSX(self,varargin) + %Get a vector of symbolic variables with the same dimensions as the inputs, + %SX graph. + % + %There is no guarantee that consecutive calls return identical objects + % + % + %Usage: retval = symbolicInputSX () + % + %retval is of type std::vector< casadi::SX,std::allocator< casadi::SX > >. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(879, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = symbolicOutput(self,varargin) + %Get a vector of symbolic variables with the same dimensions as the outputs. + % + %There is no guarantee that consecutive calls return identical objects + % + % + %Usage: retval = symbolicOutput () + % + %retval is of type std::vector< casadi::MX,std::allocator< casadi::MX > >. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(880, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = spCanEvaluate(self,varargin) + %[INTERNAL] Is the + %class able to propagate seeds through the algorithm? + % + %(for usage, see the example propagating_sparsity.cpp) + % + % + %Usage: retval = spCanEvaluate (fwd) + % + %fwd is of type bool. fwd is of type bool. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(881, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = spInit(self,varargin) + %[INTERNAL] Reset the + %sparsity propagation. + % + %(for usage, see the example propagating_sparsity.cpp) + % + % + %Usage: spInit (fwd) + % + %fwd is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(882, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = spEvaluate(self,varargin) + %[INTERNAL] Propagate + %the sparsity pattern through a set of directional. + % + %derivatives forward or backward (for usage, see the example + %propagating_sparsity.cpp) + % + % + %Usage: spEvaluate (fwd) + % + %fwd is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(883, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sz_arg(self,varargin) + %[INTERNAL] Get required + %length of arg field. + % + % + %Usage: retval = sz_arg () + % + %retval is of type size_t. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(884, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sz_res(self,varargin) + %[INTERNAL] Get required + %length of res field. + % + % + %Usage: retval = sz_res () + % + %retval is of type size_t. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(885, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sz_iw(self,varargin) + %[INTERNAL] Get required + %length of iw field. + % + % + %Usage: retval = sz_iw () + % + %retval is of type size_t. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(886, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sz_w(self,varargin) + %[INTERNAL] Get required + %length of w field. + % + % + %Usage: retval = sz_w () + % + %retval is of type size_t. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(887, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = addMonitor(self,varargin) + %Add modules to be monitored. + % + % + %Usage: addMonitor (mon) + % + %mon is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(888, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = removeMonitor(self,varargin) + %Remove modules to be monitored. + % + % + %Usage: removeMonitor (mon) + % + %mon is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(889, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = checkInputs(self,varargin) + %[INTERNAL] Check if + %the numerical values of the supplied bounds make sense. + % + % + %Usage: checkInputs () + % + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:nargout}] = casadiMEX(890, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getSanitizedName(self,varargin) + %get function name with all non alphanumeric characters converted to '_' + % + % + %Usage: retval = getSanitizedName () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.Function') + self = casadi.Function(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(891, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = Function(varargin) + self@casadi.OptionsFunctionality(SwigRef.Null); + self@casadi.IOInterfaceFunction(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(893, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(875, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sanitizeName(varargin) + %Usage: retval = sanitizeName (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(892, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Functor.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Functor.m new file mode 100755 index 0000000..6a7adb3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Functor.m @@ -0,0 +1,44 @@ +classdef Functor < casadi.SharedObject + %Functor. + % + %Joris Gillis + % + %C++ includes: functor.hpp + %Usage: Functor () + % + methods + function self = Functor(varargin) + self@casadi.SharedObject(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1075, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1076, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenDMatrix.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenDMatrix.m new file mode 100755 index 0000000..78a3e0a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenDMatrix.m @@ -0,0 +1,743 @@ +classdef GenDMatrix < casadi.GenericMatrixCommon & casadi.SpDMatrix + %Matrix base class. + % + %This is a common base class for MX and Matrix<>, introducing a uniform + %syntax and implementing common functionality using the curiously recurring + %template pattern (CRTP) idiom. The class is designed with the idea that + %"everything is a matrix", that is, also scalars and vectors. This + %philosophy makes it easy to use and to interface in particularly with Python + %and Matlab/Octave. The syntax tries to stay as close as possible to the + %ublas syntax when it comes to vector/matrix operations. Index starts with + %0. Index vec happens as follows: (rr, cc) -> k = rr+cc*size1() Vectors are + %column vectors. The storage format is Compressed Column Storage (CCS), + %similar to that used for sparse matrices in Matlab, but unlike this format, + %we do allow for elements to be structurally non-zero but numerically zero. + %The sparsity pattern, which is reference counted and cached, can be accessed + %with Sparsity& sparsity() Joel Andersson + % + %C++ includes: generic_matrix.hpp + %Usage: GenDMatrix () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = nnz(self,varargin) + %Get the number of (structural) non-zero elements. + % + % + %Usage: retval = nnz () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(340, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeL(self,varargin) + %Get the number of non-zeros in the lower triangular half. + % + % + %Usage: retval = sizeL () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(341, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeU(self,varargin) + %Get the number of non-zeros in the upper triangular half. + % + % + %Usage: retval = sizeU () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(342, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeD(self,varargin) + %Get get the number of non-zeros on the diagonal. + % + % + %Usage: retval = sizeD () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(343, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = numel(self,varargin) + %> int MatType .numel() const + %------------------------------------------------------------------------ + % + %Get the number of elements. + % + %> int MatType .numel(int i) const + %------------------------------------------------------------------------ + % + %Get the number of elements in slice (cf. MATLAB) + % + % + %Usage: retval = numel (i) + % + %i is of type int. i is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(344, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size1(self,varargin) + %Get the first dimension (i.e. number of rows) + % + % + %Usage: retval = size1 () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(345, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size2(self,varargin) + %Get the second dimension (i.e. number of columns) + % + % + %Usage: retval = size2 () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(346, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = dimString(self,varargin) + %Get string representation of dimensions. The representation is (nrow x ncol + %= numel | size) + % + % + %Usage: retval = dimString () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(347, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size(self,varargin) + %> (int,int) MatType .shape() const + %------------------------------------------------------------------------ + % + %Get the shape. + % + %> int MatType .shape(int axis) const + %------------------------------------------------------------------------ + % + %Get the size along a particular dimensions. + % + % + %Usage: retval = size (axis) + % + %axis is of type int. axis is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + out = casadiMEX(348, self, varargin{:}); + if nargout>1 + for i=1:length(out) + varargout{i} = out(i); + end + else + varargout{1}=out; + end + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isempty(self,varargin) + %Check if the sparsity is empty, i.e. if one of the dimensions is zero (or + %optionally both dimensions) + % + % + %Usage: retval = isempty (both = false) + % + %both is of type bool. both is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(349, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isdense(self,varargin) + %Check if the matrix expression is dense. + % + % + %Usage: retval = isdense () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(350, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isscalar(self,varargin) + %Check if the matrix expression is scalar. + % + % + %Usage: retval = isscalar (scalar_and_dense = false) + % + %scalar_and_dense is of type bool. scalar_and_dense is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(351, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = issquare(self,varargin) + %Check if the matrix expression is square. + % + % + %Usage: retval = issquare () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(352, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isvector(self,varargin) + %Check if the matrix is a row or column vector. + % + % + %Usage: retval = isvector () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(353, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isrow(self,varargin) + %Check if the matrix is a row vector (i.e. size1()==1) + % + % + %Usage: retval = isrow () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(354, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = iscolumn(self,varargin) + %Check if the matrix is a column vector (i.e. size2()==1) + % + % + %Usage: retval = iscolumn () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(355, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = istriu(self,varargin) + %Check if the matrix is upper triangular. + % + % + %Usage: retval = istriu () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(356, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = istril(self,varargin) + %Check if the matrix is lower triangular. + % + % + %Usage: retval = istril () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(357, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = row(self,varargin) + %Get the sparsity pattern. See the Sparsity class for details. + % + % + %Usage: retval = row (el) + % + %el is of type int. el is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(358, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = colind(self,varargin) + %Get the sparsity pattern. See the Sparsity class for details. + % + % + %Usage: retval = colind (col) + % + %col is of type int. col is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(359, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = find(self,varargin) + %Get the location of all non-zero elements as they would appear in a Dense + %matrix A : DenseMatrix 4 x 3 B : SparseMatrix 4 x 3 , 5 structural non- + %zeros. + % + %k = A.find() A[k] will contain the elements of A that are non-zero in B + % + % + %Usage: retval = find (ind1 = true) + % + %ind1 is of type bool. ind1 is of type bool. retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(360, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparsity(self,varargin) + %Get the sparsity pattern. + % + % + %Usage: retval = sparsity () + % + %retval is of type Sparsity. + + try + + if ~isa(self,'casadi.GenDMatrix') + self = casadi.GenDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(361, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = GenDMatrix(varargin) + self@casadi.GenericMatrixCommon(SwigRef.Null); + self@casadi.SpDMatrix(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(365, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(366, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = sym(varargin) + %> static MatType MatType .sym(str name, int nrow=1, int ncol=1) + %------------------------------------------------------------------------ + % + %Create an nrow-by-ncol symbolic primitive. + % + %> static MatType MatType .sym(str name, (int,int) rc) + %------------------------------------------------------------------------ + % + %Construct a symbolic primitive with given dimensions. + % + %> MatType MatType .sym(str name, Sparsity sp) + %------------------------------------------------------------------------ + % + %Create symbolic primitive with a given sparsity pattern. + % + %> [MatType ] MatType .sym(str name, Sparsity sp, int p) + %------------------------------------------------------------------------ + % + %Create a vector of length p with with matrices with symbolic primitives of + %given sparsity. + % + %> static[MatType ] MatType .sym(str name, int nrow, int ncol, int p) + %------------------------------------------------------------------------ + % + %Create a vector of length p with nrow-by-ncol symbolic primitives. + % + %> [[MatType ] ] MatType .sym(str name, Sparsity sp, int p, int r) + %------------------------------------------------------------------------ + % + %Create a vector of length r of vectors of length p with symbolic primitives + %with given sparsity. + % + %> static[[MatType] ] MatType .sym(str name, int nrow, int ncol, int p, int r) + %------------------------------------------------------------------------ + % + %Create a vector of length r of vectors of length p with nrow-by-ncol + %symbolic primitives. + % + % + %Usage: retval = sym (name, nrow, ncol, p, r) + % + %name is of type std::string const &. nrow is of type int. ncol is of type int. p is of type int. r is of type int. name is of type std::string const &. nrow is of type int. ncol is of type int. p is of type int. r is of type int. retval is of type std::vector< std::vector< casadi::Matrix< double >,std::allocator< casadi::Matrix< double > > >,std::allocator< std::vector< casadi::Matrix< double >,std::allocator< casadi::Matrix< double > > > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(362, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = zeros(varargin) + %Create a dense matrix or a matrix with specified sparsity with all entries + %zero. + % + % + %Usage: retval = zeros (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(363, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ones(varargin) + %Create a dense matrix or a matrix with specified sparsity with all entries + %one. + % + % + %Usage: retval = ones (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(364, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenIMatrix.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenIMatrix.m new file mode 100755 index 0000000..96999ef --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenIMatrix.m @@ -0,0 +1,743 @@ +classdef GenIMatrix < casadi.GenericMatrixCommon & casadi.SpIMatrix + %Matrix base class. + % + %This is a common base class for MX and Matrix<>, introducing a uniform + %syntax and implementing common functionality using the curiously recurring + %template pattern (CRTP) idiom. The class is designed with the idea that + %"everything is a matrix", that is, also scalars and vectors. This + %philosophy makes it easy to use and to interface in particularly with Python + %and Matlab/Octave. The syntax tries to stay as close as possible to the + %ublas syntax when it comes to vector/matrix operations. Index starts with + %0. Index vec happens as follows: (rr, cc) -> k = rr+cc*size1() Vectors are + %column vectors. The storage format is Compressed Column Storage (CCS), + %similar to that used for sparse matrices in Matlab, but unlike this format, + %we do allow for elements to be structurally non-zero but numerically zero. + %The sparsity pattern, which is reference counted and cached, can be accessed + %with Sparsity& sparsity() Joel Andersson + % + %C++ includes: generic_matrix.hpp + %Usage: GenIMatrix () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = nnz(self,varargin) + %Get the number of (structural) non-zero elements. + % + % + %Usage: retval = nnz () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(313, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeL(self,varargin) + %Get the number of non-zeros in the lower triangular half. + % + % + %Usage: retval = sizeL () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(314, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeU(self,varargin) + %Get the number of non-zeros in the upper triangular half. + % + % + %Usage: retval = sizeU () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(315, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeD(self,varargin) + %Get get the number of non-zeros on the diagonal. + % + % + %Usage: retval = sizeD () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(316, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = numel(self,varargin) + %> int MatType .numel() const + %------------------------------------------------------------------------ + % + %Get the number of elements. + % + %> int MatType .numel(int i) const + %------------------------------------------------------------------------ + % + %Get the number of elements in slice (cf. MATLAB) + % + % + %Usage: retval = numel (i) + % + %i is of type int. i is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(317, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size1(self,varargin) + %Get the first dimension (i.e. number of rows) + % + % + %Usage: retval = size1 () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(318, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size2(self,varargin) + %Get the second dimension (i.e. number of columns) + % + % + %Usage: retval = size2 () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(319, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = dimString(self,varargin) + %Get string representation of dimensions. The representation is (nrow x ncol + %= numel | size) + % + % + %Usage: retval = dimString () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(320, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size(self,varargin) + %> (int,int) MatType .shape() const + %------------------------------------------------------------------------ + % + %Get the shape. + % + %> int MatType .shape(int axis) const + %------------------------------------------------------------------------ + % + %Get the size along a particular dimensions. + % + % + %Usage: retval = size (axis) + % + %axis is of type int. axis is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + out = casadiMEX(321, self, varargin{:}); + if nargout>1 + for i=1:length(out) + varargout{i} = out(i); + end + else + varargout{1}=out; + end + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isempty(self,varargin) + %Check if the sparsity is empty, i.e. if one of the dimensions is zero (or + %optionally both dimensions) + % + % + %Usage: retval = isempty (both = false) + % + %both is of type bool. both is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(322, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isdense(self,varargin) + %Check if the matrix expression is dense. + % + % + %Usage: retval = isdense () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(323, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isscalar(self,varargin) + %Check if the matrix expression is scalar. + % + % + %Usage: retval = isscalar (scalar_and_dense = false) + % + %scalar_and_dense is of type bool. scalar_and_dense is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(324, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = issquare(self,varargin) + %Check if the matrix expression is square. + % + % + %Usage: retval = issquare () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(325, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isvector(self,varargin) + %Check if the matrix is a row or column vector. + % + % + %Usage: retval = isvector () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(326, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isrow(self,varargin) + %Check if the matrix is a row vector (i.e. size1()==1) + % + % + %Usage: retval = isrow () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(327, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = iscolumn(self,varargin) + %Check if the matrix is a column vector (i.e. size2()==1) + % + % + %Usage: retval = iscolumn () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(328, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = istriu(self,varargin) + %Check if the matrix is upper triangular. + % + % + %Usage: retval = istriu () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(329, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = istril(self,varargin) + %Check if the matrix is lower triangular. + % + % + %Usage: retval = istril () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(330, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = row(self,varargin) + %Get the sparsity pattern. See the Sparsity class for details. + % + % + %Usage: retval = row (el) + % + %el is of type int. el is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(331, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = colind(self,varargin) + %Get the sparsity pattern. See the Sparsity class for details. + % + % + %Usage: retval = colind (col) + % + %col is of type int. col is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(332, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = find(self,varargin) + %Get the location of all non-zero elements as they would appear in a Dense + %matrix A : DenseMatrix 4 x 3 B : SparseMatrix 4 x 3 , 5 structural non- + %zeros. + % + %k = A.find() A[k] will contain the elements of A that are non-zero in B + % + % + %Usage: retval = find (ind1 = true) + % + %ind1 is of type bool. ind1 is of type bool. retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(333, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparsity(self,varargin) + %Get the sparsity pattern. + % + % + %Usage: retval = sparsity () + % + %retval is of type Sparsity. + + try + + if ~isa(self,'casadi.GenIMatrix') + self = casadi.GenIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(334, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = GenIMatrix(varargin) + self@casadi.GenericMatrixCommon(SwigRef.Null); + self@casadi.SpIMatrix(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(338, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(339, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = sym(varargin) + %> static MatType MatType .sym(str name, int nrow=1, int ncol=1) + %------------------------------------------------------------------------ + % + %Create an nrow-by-ncol symbolic primitive. + % + %> static MatType MatType .sym(str name, (int,int) rc) + %------------------------------------------------------------------------ + % + %Construct a symbolic primitive with given dimensions. + % + %> MatType MatType .sym(str name, Sparsity sp) + %------------------------------------------------------------------------ + % + %Create symbolic primitive with a given sparsity pattern. + % + %> [MatType ] MatType .sym(str name, Sparsity sp, int p) + %------------------------------------------------------------------------ + % + %Create a vector of length p with with matrices with symbolic primitives of + %given sparsity. + % + %> static[MatType ] MatType .sym(str name, int nrow, int ncol, int p) + %------------------------------------------------------------------------ + % + %Create a vector of length p with nrow-by-ncol symbolic primitives. + % + %> [[MatType ] ] MatType .sym(str name, Sparsity sp, int p, int r) + %------------------------------------------------------------------------ + % + %Create a vector of length r of vectors of length p with symbolic primitives + %with given sparsity. + % + %> static[[MatType] ] MatType .sym(str name, int nrow, int ncol, int p, int r) + %------------------------------------------------------------------------ + % + %Create a vector of length r of vectors of length p with nrow-by-ncol + %symbolic primitives. + % + % + %Usage: retval = sym (name, nrow, ncol, p, r) + % + %name is of type std::string const &. nrow is of type int. ncol is of type int. p is of type int. r is of type int. name is of type std::string const &. nrow is of type int. ncol is of type int. p is of type int. r is of type int. retval is of type std::vector< std::vector< casadi::Matrix< int >,std::allocator< casadi::Matrix< int > > >,std::allocator< std::vector< casadi::Matrix< int >,std::allocator< casadi::Matrix< int > > > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(335, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = zeros(varargin) + %Create a dense matrix or a matrix with specified sparsity with all entries + %zero. + % + % + %Usage: retval = zeros (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type IMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(336, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ones(varargin) + %Create a dense matrix or a matrix with specified sparsity with all entries + %one. + % + % + %Usage: retval = ones (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type IMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(337, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenMX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenMX.m new file mode 100755 index 0000000..76a44a3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenMX.m @@ -0,0 +1,743 @@ +classdef GenMX < casadi.GenericMatrixCommon & casadi.SpMX + %Matrix base class. + % + %This is a common base class for MX and Matrix<>, introducing a uniform + %syntax and implementing common functionality using the curiously recurring + %template pattern (CRTP) idiom. The class is designed with the idea that + %"everything is a matrix", that is, also scalars and vectors. This + %philosophy makes it easy to use and to interface in particularly with Python + %and Matlab/Octave. The syntax tries to stay as close as possible to the + %ublas syntax when it comes to vector/matrix operations. Index starts with + %0. Index vec happens as follows: (rr, cc) -> k = rr+cc*size1() Vectors are + %column vectors. The storage format is Compressed Column Storage (CCS), + %similar to that used for sparse matrices in Matlab, but unlike this format, + %we do allow for elements to be structurally non-zero but numerically zero. + %The sparsity pattern, which is reference counted and cached, can be accessed + %with Sparsity& sparsity() Joel Andersson + % + %C++ includes: generic_matrix.hpp + %Usage: GenMX () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = nnz(self,varargin) + %Get the number of (structural) non-zero elements. + % + % + %Usage: retval = nnz () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(394, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeL(self,varargin) + %Get the number of non-zeros in the lower triangular half. + % + % + %Usage: retval = sizeL () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(395, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeU(self,varargin) + %Get the number of non-zeros in the upper triangular half. + % + % + %Usage: retval = sizeU () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(396, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeD(self,varargin) + %Get get the number of non-zeros on the diagonal. + % + % + %Usage: retval = sizeD () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(397, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = numel(self,varargin) + %> int MatType .numel() const + %------------------------------------------------------------------------ + % + %Get the number of elements. + % + %> int MatType .numel(int i) const + %------------------------------------------------------------------------ + % + %Get the number of elements in slice (cf. MATLAB) + % + % + %Usage: retval = numel (i) + % + %i is of type int. i is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(398, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size1(self,varargin) + %Get the first dimension (i.e. number of rows) + % + % + %Usage: retval = size1 () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(399, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size2(self,varargin) + %Get the second dimension (i.e. number of columns) + % + % + %Usage: retval = size2 () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(400, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = dimString(self,varargin) + %Get string representation of dimensions. The representation is (nrow x ncol + %= numel | size) + % + % + %Usage: retval = dimString () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(401, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size(self,varargin) + %> (int,int) MatType .shape() const + %------------------------------------------------------------------------ + % + %Get the shape. + % + %> int MatType .shape(int axis) const + %------------------------------------------------------------------------ + % + %Get the size along a particular dimensions. + % + % + %Usage: retval = size (axis) + % + %axis is of type int. axis is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + out = casadiMEX(402, self, varargin{:}); + if nargout>1 + for i=1:length(out) + varargout{i} = out(i); + end + else + varargout{1}=out; + end + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isempty(self,varargin) + %Check if the sparsity is empty, i.e. if one of the dimensions is zero (or + %optionally both dimensions) + % + % + %Usage: retval = isempty (both = false) + % + %both is of type bool. both is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(403, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isdense(self,varargin) + %Check if the matrix expression is dense. + % + % + %Usage: retval = isdense () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(404, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isscalar(self,varargin) + %Check if the matrix expression is scalar. + % + % + %Usage: retval = isscalar (scalar_and_dense = false) + % + %scalar_and_dense is of type bool. scalar_and_dense is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(405, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = issquare(self,varargin) + %Check if the matrix expression is square. + % + % + %Usage: retval = issquare () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(406, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isvector(self,varargin) + %Check if the matrix is a row or column vector. + % + % + %Usage: retval = isvector () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(407, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isrow(self,varargin) + %Check if the matrix is a row vector (i.e. size1()==1) + % + % + %Usage: retval = isrow () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(408, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = iscolumn(self,varargin) + %Check if the matrix is a column vector (i.e. size2()==1) + % + % + %Usage: retval = iscolumn () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(409, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = istriu(self,varargin) + %Check if the matrix is upper triangular. + % + % + %Usage: retval = istriu () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(410, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = istril(self,varargin) + %Check if the matrix is lower triangular. + % + % + %Usage: retval = istril () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(411, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = row(self,varargin) + %Get the sparsity pattern. See the Sparsity class for details. + % + % + %Usage: retval = row (el) + % + %el is of type int. el is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(412, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = colind(self,varargin) + %Get the sparsity pattern. See the Sparsity class for details. + % + % + %Usage: retval = colind (col) + % + %col is of type int. col is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(413, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = find(self,varargin) + %Get the location of all non-zero elements as they would appear in a Dense + %matrix A : DenseMatrix 4 x 3 B : SparseMatrix 4 x 3 , 5 structural non- + %zeros. + % + %k = A.find() A[k] will contain the elements of A that are non-zero in B + % + % + %Usage: retval = find (ind1 = true) + % + %ind1 is of type bool. ind1 is of type bool. retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(414, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparsity(self,varargin) + %Get the sparsity pattern. + % + % + %Usage: retval = sparsity () + % + %retval is of type Sparsity. + + try + + if ~isa(self,'casadi.GenMX') + self = casadi.GenMX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(415, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = GenMX(varargin) + self@casadi.GenericMatrixCommon(SwigRef.Null); + self@casadi.SpMX(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(419, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(420, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = sym(varargin) + %> static MatType MatType .sym(str name, int nrow=1, int ncol=1) + %------------------------------------------------------------------------ + % + %Create an nrow-by-ncol symbolic primitive. + % + %> static MatType MatType .sym(str name, (int,int) rc) + %------------------------------------------------------------------------ + % + %Construct a symbolic primitive with given dimensions. + % + %> MatType MatType .sym(str name, Sparsity sp) + %------------------------------------------------------------------------ + % + %Create symbolic primitive with a given sparsity pattern. + % + %> [MatType ] MatType .sym(str name, Sparsity sp, int p) + %------------------------------------------------------------------------ + % + %Create a vector of length p with with matrices with symbolic primitives of + %given sparsity. + % + %> static[MatType ] MatType .sym(str name, int nrow, int ncol, int p) + %------------------------------------------------------------------------ + % + %Create a vector of length p with nrow-by-ncol symbolic primitives. + % + %> [[MatType ] ] MatType .sym(str name, Sparsity sp, int p, int r) + %------------------------------------------------------------------------ + % + %Create a vector of length r of vectors of length p with symbolic primitives + %with given sparsity. + % + %> static[[MatType] ] MatType .sym(str name, int nrow, int ncol, int p, int r) + %------------------------------------------------------------------------ + % + %Create a vector of length r of vectors of length p with nrow-by-ncol + %symbolic primitives. + % + % + %Usage: retval = sym (name, nrow, ncol, p, r) + % + %name is of type std::string const &. nrow is of type int. ncol is of type int. p is of type int. r is of type int. name is of type std::string const &. nrow is of type int. ncol is of type int. p is of type int. r is of type int. retval is of type std::vector< std::vector< casadi::MX,std::allocator< casadi::MX > >,std::allocator< std::vector< casadi::MX,std::allocator< casadi::MX > > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(416, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = zeros(varargin) + %Create a dense matrix or a matrix with specified sparsity with all entries + %zero. + % + % + %Usage: retval = zeros (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(417, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ones(varargin) + %Create a dense matrix or a matrix with specified sparsity with all entries + %one. + % + % + %Usage: retval = ones (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(418, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenSX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenSX.m new file mode 100755 index 0000000..ab51f26 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenSX.m @@ -0,0 +1,743 @@ +classdef GenSX < casadi.GenericMatrixCommon & casadi.SpSX + %Matrix base class. + % + %This is a common base class for MX and Matrix<>, introducing a uniform + %syntax and implementing common functionality using the curiously recurring + %template pattern (CRTP) idiom. The class is designed with the idea that + %"everything is a matrix", that is, also scalars and vectors. This + %philosophy makes it easy to use and to interface in particularly with Python + %and Matlab/Octave. The syntax tries to stay as close as possible to the + %ublas syntax when it comes to vector/matrix operations. Index starts with + %0. Index vec happens as follows: (rr, cc) -> k = rr+cc*size1() Vectors are + %column vectors. The storage format is Compressed Column Storage (CCS), + %similar to that used for sparse matrices in Matlab, but unlike this format, + %we do allow for elements to be structurally non-zero but numerically zero. + %The sparsity pattern, which is reference counted and cached, can be accessed + %with Sparsity& sparsity() Joel Andersson + % + %C++ includes: generic_matrix.hpp + %Usage: GenSX () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = nnz(self,varargin) + %Get the number of (structural) non-zero elements. + % + % + %Usage: retval = nnz () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(367, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeL(self,varargin) + %Get the number of non-zeros in the lower triangular half. + % + % + %Usage: retval = sizeL () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(368, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeU(self,varargin) + %Get the number of non-zeros in the upper triangular half. + % + % + %Usage: retval = sizeU () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(369, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeD(self,varargin) + %Get get the number of non-zeros on the diagonal. + % + % + %Usage: retval = sizeD () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(370, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = numel(self,varargin) + %> int MatType .numel() const + %------------------------------------------------------------------------ + % + %Get the number of elements. + % + %> int MatType .numel(int i) const + %------------------------------------------------------------------------ + % + %Get the number of elements in slice (cf. MATLAB) + % + % + %Usage: retval = numel (i) + % + %i is of type int. i is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(371, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size1(self,varargin) + %Get the first dimension (i.e. number of rows) + % + % + %Usage: retval = size1 () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(372, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size2(self,varargin) + %Get the second dimension (i.e. number of columns) + % + % + %Usage: retval = size2 () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(373, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = dimString(self,varargin) + %Get string representation of dimensions. The representation is (nrow x ncol + %= numel | size) + % + % + %Usage: retval = dimString () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(374, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size(self,varargin) + %> (int,int) MatType .shape() const + %------------------------------------------------------------------------ + % + %Get the shape. + % + %> int MatType .shape(int axis) const + %------------------------------------------------------------------------ + % + %Get the size along a particular dimensions. + % + % + %Usage: retval = size (axis) + % + %axis is of type int. axis is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + out = casadiMEX(375, self, varargin{:}); + if nargout>1 + for i=1:length(out) + varargout{i} = out(i); + end + else + varargout{1}=out; + end + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isempty(self,varargin) + %Check if the sparsity is empty, i.e. if one of the dimensions is zero (or + %optionally both dimensions) + % + % + %Usage: retval = isempty (both = false) + % + %both is of type bool. both is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(376, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isdense(self,varargin) + %Check if the matrix expression is dense. + % + % + %Usage: retval = isdense () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(377, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isscalar(self,varargin) + %Check if the matrix expression is scalar. + % + % + %Usage: retval = isscalar (scalar_and_dense = false) + % + %scalar_and_dense is of type bool. scalar_and_dense is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(378, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = issquare(self,varargin) + %Check if the matrix expression is square. + % + % + %Usage: retval = issquare () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(379, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isvector(self,varargin) + %Check if the matrix is a row or column vector. + % + % + %Usage: retval = isvector () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(380, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isrow(self,varargin) + %Check if the matrix is a row vector (i.e. size1()==1) + % + % + %Usage: retval = isrow () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(381, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = iscolumn(self,varargin) + %Check if the matrix is a column vector (i.e. size2()==1) + % + % + %Usage: retval = iscolumn () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(382, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = istriu(self,varargin) + %Check if the matrix is upper triangular. + % + % + %Usage: retval = istriu () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(383, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = istril(self,varargin) + %Check if the matrix is lower triangular. + % + % + %Usage: retval = istril () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(384, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = row(self,varargin) + %Get the sparsity pattern. See the Sparsity class for details. + % + % + %Usage: retval = row (el) + % + %el is of type int. el is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(385, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = colind(self,varargin) + %Get the sparsity pattern. See the Sparsity class for details. + % + % + %Usage: retval = colind (col) + % + %col is of type int. col is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(386, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = find(self,varargin) + %Get the location of all non-zero elements as they would appear in a Dense + %matrix A : DenseMatrix 4 x 3 B : SparseMatrix 4 x 3 , 5 structural non- + %zeros. + % + %k = A.find() A[k] will contain the elements of A that are non-zero in B + % + % + %Usage: retval = find (ind1 = true) + % + %ind1 is of type bool. ind1 is of type bool. retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(387, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparsity(self,varargin) + %Get the sparsity pattern. + % + % + %Usage: retval = sparsity () + % + %retval is of type Sparsity. + + try + + if ~isa(self,'casadi.GenSX') + self = casadi.GenSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(388, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = GenSX(varargin) + self@casadi.GenericMatrixCommon(SwigRef.Null); + self@casadi.SpSX(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(392, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(393, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = sym(varargin) + %> static MatType MatType .sym(str name, int nrow=1, int ncol=1) + %------------------------------------------------------------------------ + % + %Create an nrow-by-ncol symbolic primitive. + % + %> static MatType MatType .sym(str name, (int,int) rc) + %------------------------------------------------------------------------ + % + %Construct a symbolic primitive with given dimensions. + % + %> MatType MatType .sym(str name, Sparsity sp) + %------------------------------------------------------------------------ + % + %Create symbolic primitive with a given sparsity pattern. + % + %> [MatType ] MatType .sym(str name, Sparsity sp, int p) + %------------------------------------------------------------------------ + % + %Create a vector of length p with with matrices with symbolic primitives of + %given sparsity. + % + %> static[MatType ] MatType .sym(str name, int nrow, int ncol, int p) + %------------------------------------------------------------------------ + % + %Create a vector of length p with nrow-by-ncol symbolic primitives. + % + %> [[MatType ] ] MatType .sym(str name, Sparsity sp, int p, int r) + %------------------------------------------------------------------------ + % + %Create a vector of length r of vectors of length p with symbolic primitives + %with given sparsity. + % + %> static[[MatType] ] MatType .sym(str name, int nrow, int ncol, int p, int r) + %------------------------------------------------------------------------ + % + %Create a vector of length r of vectors of length p with nrow-by-ncol + %symbolic primitives. + % + % + %Usage: retval = sym (name, nrow, ncol, p, r) + % + %name is of type std::string const &. nrow is of type int. ncol is of type int. p is of type int. r is of type int. name is of type std::string const &. nrow is of type int. ncol is of type int. p is of type int. r is of type int. retval is of type std::vector< std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > >,std::allocator< std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(389, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = zeros(varargin) + %Create a dense matrix or a matrix with specified sparsity with all entries + %zero. + % + % + %Usage: retval = zeros (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(390, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ones(varargin) + %Create a dense matrix or a matrix with specified sparsity with all entries + %one. + % + % + %Usage: retval = ones (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(391, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenericExpressionCommon.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenericExpressionCommon.m new file mode 100755 index 0000000..fefbccd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenericExpressionCommon.m @@ -0,0 +1,1005 @@ +classdef GenericExpressionCommon < SwigRef + %Usage: GenericExpressionCommon () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = plus(varargin) + %Usage: retval = plus (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(421, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = minus(varargin) + %Usage: retval = minus (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(422, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = times(varargin) + %Usage: retval = times (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(423, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = rdivide(varargin) + %Usage: retval = rdivide (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(424, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ldivide(varargin) + %Usage: retval = ldivide (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(425, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = lt(varargin) + %Usage: retval = lt (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(426, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = le(varargin) + %Usage: retval = le (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(427, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = gt(varargin) + %Usage: retval = gt (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(428, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ge(varargin) + %Usage: retval = ge (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(429, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eq(varargin) + %Usage: retval = eq (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(430, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ne(varargin) + %Usage: retval = ne (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(431, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = and(varargin) + %Usage: retval = and (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(432, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = or(varargin) + %Usage: retval = or (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(433, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = not(varargin) + %Usage: retval = not (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(434, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = abs(varargin) + %Absolute value. + % + % + %Usage: retval = abs (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(435, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sqrt(varargin) + %Square root. + % + % + %Usage: retval = sqrt (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(436, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sin(varargin) + %Sine. + % + % + %Usage: retval = sin (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(437, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = cos(varargin) + %Cosine. + % + % + %Usage: retval = cos (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(438, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = tan(varargin) + %Tangent. + % + % + %Usage: retval = tan (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(439, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = atan(varargin) + %Arc tangent. + % + % + %Usage: retval = atan (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(440, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = asin(varargin) + %Arc sine. + % + % + %Usage: retval = asin (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(441, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = acos(varargin) + %Arc cosine. + % + % + %Usage: retval = acos (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(442, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = tanh(varargin) + %Hyperbolic tangent. + % + % + %Usage: retval = tanh (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(443, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sinh(varargin) + %Hyperbolic sine. + % + % + %Usage: retval = sinh (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(444, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = cosh(varargin) + %Hyperbolic cosine. + % + % + %Usage: retval = cosh (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(445, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = atanh(varargin) + %Inverse hyperbolic tangent. + % + % + %Usage: retval = atanh (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(446, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = asinh(varargin) + %Inverse hyperbolic sine. + % + % + %Usage: retval = asinh (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(447, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = acosh(varargin) + %Inverse hyperbolic cosine. + % + % + %Usage: retval = acosh (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(448, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = exp(varargin) + %Exponential function. + % + % + %Usage: retval = exp (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(449, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = log(varargin) + %Natural logarithm. + % + % + %Usage: retval = log (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(450, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = log10(varargin) + %Base-10 logarithm. + % + % + %Usage: retval = log10 (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(451, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = floor(varargin) + %Round down to nearest integer. + % + % + %Usage: retval = floor (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(452, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ceil(varargin) + %Round up to nearest integer. + % + % + %Usage: retval = ceil (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(453, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = erf(varargin) + %Error function. + % + % + %Usage: retval = erf (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(454, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = erfinv(varargin) + %Invers error function. + % + % + %Usage: retval = erfinv (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(455, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sign(varargin) + %Sine function sign(x) := -1 for x<0 sign(x) := 1 for x>0, sign(0) := 0 + %sign(NaN) := NaN + % + % + %Usage: retval = sign (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(456, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = power(varargin) + %Usage: retval = power (x, n) + % + %x is of type SX. n is of type SX. x is of type SX. n is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(457, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = mod(varargin) + %Usage: retval = mod (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(458, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = atan2(varargin) + %Two argument arc tangent. + % + % + %Usage: retval = atan2 (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(459, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = min(varargin) + %Usage: retval = min (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(460, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = max(varargin) + %Usage: retval = max (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(461, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = simplify(varargin) + %Simplify an expression. + % + % + %Usage: retval = simplify (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(462, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isEqual(varargin) + %Check if two nodes are equivalent up to a given depth. Depth=0 checks if the + %expressions are identical, i.e. points to the same node. + % + %a = x*x b = x*x + % + %a.isEqual(b, 0) will return false, but a.isEqual(b, 1) will return true + % + % + %Usage: retval = isEqual (x, y, depth = 0) + % + %x is of type SX. y is of type SX. depth is of type int. x is of type SX. y is of type SX. depth is of type int. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(463, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = iszero(varargin) + %Addition. + % + % + %Usage: retval = iszero (x) + % + %x is of type SX. x is of type SX. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(464, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = copysign(varargin) + %Copy sign. + % + % + %Usage: retval = copysign (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(465, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = constpow(varargin) + %Elementwise power with const power. + % + % + %Usage: retval = constpow (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(466, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = GenericExpressionCommon(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(467, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(468, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenericMatrixCommon.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenericMatrixCommon.m new file mode 100755 index 0000000..083ff64 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenericMatrixCommon.m @@ -0,0 +1,976 @@ +classdef GenericMatrixCommon < SwigRef + %Usage: GenericMatrixCommon () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = mpower(varargin) + %Matrix power x^n. + % + % + %Usage: retval = mpower (x, n) + % + %x is of type SX. n is of type SX. x is of type SX. n is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(272, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = mrdivide(varargin) + %Matrix divide (cf. slash '/' in MATLAB) + % + % + %Usage: retval = mrdivide (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(273, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = mldivide(varargin) + %Matrix divide (cf. backslash '\\' in MATLAB) + % + % + %Usage: retval = mldivide (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(274, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = symvar(varargin) + %Get all symbols contained in the supplied expression Get all symbols on + %which the supplied expression depends. + % + %See: SXFunction::getFree(), MXFunction::getFree() + % + % + %Usage: retval = symvar (x) + % + %x is of type SX. x is of type SX. retval is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(275, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = quad_form(varargin) + %> MatType quad_form(MatType X, MatType A) + %------------------------------------------------------------------------ + % + %Calculate quadratic form X^T A X. + % + %> MatType quad_form(MatType X) + %------------------------------------------------------------------------ + % + %Calculate quadratic form X^T X. + % + % + %Usage: retval = quad_form (X) + % + %X is of type SX. X is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(276, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sum_square(varargin) + %Calculate some of squares: sum_ij X_ij^2. + % + % + %Usage: retval = sum_square (X) + % + %X is of type SX. X is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(277, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = linspace(varargin) + %Matlab's linspace command. + % + % + %Usage: retval = linspace (a, b, nsteps) + % + %a is of type SX. b is of type SX. nsteps is of type int. a is of type SX. b is of type SX. nsteps is of type int. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(278, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = cross(varargin) + %Matlab's cross command. + % + % + %Usage: retval = cross (a, b, dim = -1) + % + %a is of type SX. b is of type SX. dim is of type int. a is of type SX. b is of type SX. dim is of type int. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(279, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = det(varargin) + %Matrix determinant (experimental) + % + % + %Usage: retval = det (A) + % + %A is of type SX. A is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(280, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inv(varargin) + %Matrix inverse (experimental) + % + % + %Usage: retval = inv (A) + % + %A is of type SX. A is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(281, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = trace(varargin) + %Matrix trace. + % + % + %Usage: retval = trace (a) + % + %a is of type SX. a is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(282, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = tril2symm(varargin) + %Convert a lower triangular matrix to a symmetric one. + % + % + %Usage: retval = tril2symm (a) + % + %a is of type SX. a is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(283, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = triu2symm(varargin) + %Convert a upper triangular matrix to a symmetric one. + % + % + %Usage: retval = triu2symm (a) + % + %a is of type SX. a is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(284, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = norm_F(varargin) + %Frobenius norm. + % + % + %Usage: retval = norm_F (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(285, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = norm_2(varargin) + %2-norm + % + % + %Usage: retval = norm_2 (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(286, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = norm_1(varargin) + %1-norm + % + % + %Usage: retval = norm_1 (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(287, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = norm_inf(varargin) + %Infinity-norm. + % + % + %Usage: retval = norm_inf (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(288, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sumCols(varargin) + %Return a col-wise summation of elements. + % + % + %Usage: retval = sumCols (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(289, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sumRows(varargin) + %Return a row-wise summation of elements. + % + % + %Usage: retval = sumRows (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(290, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inner_prod(varargin) + %Inner product of two matrices with x and y matrices of the same dimension. + % + % + %Usage: retval = inner_prod (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(291, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = outer_prod(varargin) + %Take the outer product of two vectors Equals. + % + %with x and y vectors + % + % + %Usage: retval = outer_prod (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(292, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nullspace(varargin) + %Computes the nullspace of a matrix A. + % + %Finds Z m-by-(m-n) such that AZ = 0 with A n-by-m with m > n + % + %Assumes A is full rank + % + %Inspired by Numerical Methods in Scientific Computing by Ake Bjorck + % + % + %Usage: retval = nullspace (A) + % + %A is of type SX. A is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(293, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = polyval(varargin) + %Evaluate a polynomial with coefficients p in x. + % + % + %Usage: retval = polyval (p, x) + % + %p is of type SX. x is of type SX. p is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(294, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = diag(varargin) + %Get the diagonal of a matrix or construct a diagonal When the input is + %square, the diagonal elements are returned. If the input is vector- like, a + %diagonal matrix is constructed with it. + % + % + %Usage: retval = diag (A) + % + %A is of type SX. A is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(295, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = unite(varargin) + %Unite two matrices no overlapping sparsity. + % + % + %Usage: retval = unite (A, B) + % + %A is of type SX. B is of type SX. A is of type SX. B is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(296, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = densify(varargin) + %Make the matrix dense if not already. + % + % + %Usage: retval = densify (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(297, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = project(varargin) + %Create a new matrix with a given sparsity pattern but with the nonzeros + %taken from an existing matrix. + % + % + %Usage: retval = project (A, sp, intersect = false) + % + %A is of type SX. sp is of type Sparsity. intersect is of type bool. A is of type SX. sp is of type Sparsity. intersect is of type bool. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(298, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = if_else(varargin) + %Branching on MX nodes Ternary operator, "cond ? if_true : if_false". + % + % + %Usage: retval = if_else (cond, if_true, if_false, short_circuit = true) + % + %cond is of type SX. if_true is of type SX. if_false is of type SX. short_circuit is of type bool. cond is of type SX. if_true is of type SX. if_false is of type SX. short_circuit is of type bool. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(299, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = conditional(varargin) + %Create a switch. + % + %If the condition + % + %Parameters: + %----------- + % + %ind: evaluates to the integer k, where 0<=k,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. x_default is of type SX. short_circuit is of type bool. ind is of type SX. x is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. x_default is of type SX. short_circuit is of type bool. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(300, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = dependsOn(varargin) + %Check if expression depends on the argument The argument must be symbolic. + % + % + %Usage: retval = dependsOn (f, arg) + % + %f is of type SX. arg is of type SX. f is of type SX. arg is of type SX. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(301, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = solve(varargin) + %> MatType solve(MatType A, MatType b) + %------------------------------------------------------------------------ + % + %Solve a system of equations: A*x = b The solve routine works similar to + %Matlab's backslash when A is square and nonsingular. The algorithm used is + %the following: + % + %A simple forward or backward substitution if A is upper or lower triangular + % + %If the linear system is at most 3-by-3, form the inverse via minor expansion + %and multiply + % + %Permute the variables and equations as to get a (structurally) nonzero + %diagonal, then perform a QR factorization without pivoting and solve the + %factorized system. + % + %Note 1: If there are entries of the linear system known to be zero, these + %will be removed. Elements that are very small, or will evaluate to be zero, + %can still cause numerical errors, due to the lack of pivoting (which is not + %possible since cannot compare the size of entries) + % + %Note 2: When permuting the linear system, a BLT (block lower triangular) + %transformation is formed. Only the permutation part of this is however used. + %An improvement would be to solve block-by-block if there are multiple BLT + %blocks. + % + %> MatType solve(MatType A, MatType b, str lsolver, Dict dict=Dict()) + %------------------------------------------------------------------------ + % + %Solve a system of equations: A*x = b. + % + % + %Usage: retval = solve (A, b, lsolver, opts = casadi::Dict()) + % + %A is of type SX. b is of type SX. lsolver is of type std::string const &. opts is of type casadi::Dict const &. A is of type SX. b is of type SX. lsolver is of type std::string const &. opts is of type casadi::Dict const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(302, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = pinv(varargin) + %> MatType pinv(MatType A) + %------------------------------------------------------------------------ + % + %Computes the Moore-Penrose pseudo-inverse. + % + %If the matrix A is fat (size1size2), mul(pinv(A), A) is unity. + % + %pinv(A) = (A'A)^(-1) A' + % + %> MatType pinv(MatType A, str lsolver, Dict dict=Dict()) + %------------------------------------------------------------------------ + % + %Computes the Moore-Penrose pseudo-inverse. + % + %If the matrix A is fat (size1>size2), mul(A, pinv(A)) is unity. If the + %matrix A is slender (size2 > const &. xb is of type SX. args is of type std::vector< std::string,std::allocator< std::string > > const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(309, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = repsum(varargin) + %Given a repeated matrix, computes the sum of repeated parts. + % + % + %Usage: retval = repsum (A, n, m = 1) + % + %A is of type SX. n is of type int. m is of type int. A is of type SX. n is of type int. m is of type int. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(310, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = GenericMatrixCommon(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(311, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(312, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenericType.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenericType.m new file mode 100755 index 0000000..3f9c92c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/GenericType.m @@ -0,0 +1,820 @@ +classdef GenericType < casadi.SharedObject + %Generic data type, can hold different types such as bool, int, string etc. + % + %Joel Andersson + % + %C++ includes: generic_type.hpp + %Usage: GenericType () + % + methods + function varargout = get_description(self,varargin) + %Get a description of the object's type. + % + % + %Usage: retval = get_description () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(74, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getType(self,varargin) + %Usage: retval = getType () + % + %retval is of type casadi::TypeID. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(76, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = can_cast_to(self,varargin) + %Usage: retval = can_cast_to (other) + % + %other is of type GenericType. other is of type GenericType. retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(77, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isBool(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isBool () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(78, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isInt(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isInt () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(79, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isDouble(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isDouble () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(80, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isString(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isString () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(81, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isemptyVector(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isemptyVector () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(82, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isIntVector(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isIntVector () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(83, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isIntVectorVector(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isIntVectorVector () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(84, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isDoubleVector(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isDoubleVector () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(85, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isStringVector(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isStringVector () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(86, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isDict(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isDict () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(87, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isFunction(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isFunction () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(88, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isVoidPointer(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isVoidPointer () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(89, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isCallback(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isCallback () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(90, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isDerivativeGenerator(self,varargin) + %Check if a particular type. + % + % + %Usage: retval = isDerivativeGenerator () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(91, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toBool(self,varargin) + %Convert to a type. + % + % + %Usage: retval = toBool () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(92, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toInt(self,varargin) + %Convert to a type. + % + % + %Usage: retval = toInt () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(93, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toDouble(self,varargin) + %Convert to a type. + % + % + %Usage: retval = toDouble () + % + %retval is of type double. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(94, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toString(self,varargin) + %Convert to a type. + % + % + %Usage: retval = toString () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(95, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toIntVector(self,varargin) + %Convert to a type. + % + % + %Usage: retval = toIntVector () + % + %retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(96, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toIntVectorVector(self,varargin) + %Convert to a type. + % + % + %Usage: retval = toIntVectorVector () + % + %retval is of type std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > >. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(97, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toDoubleVector(self,varargin) + %Convert to a type. + % + % + %Usage: retval = toDoubleVector () + % + %retval is of type std::vector< double,std::allocator< double > >. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(98, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toStringVector(self,varargin) + %Convert to a type. + % + % + %Usage: retval = toStringVector () + % + %retval is of type std::vector< std::string,std::allocator< std::string > >. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(99, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toDict(self,varargin) + %Convert to a type. + % + % + %Usage: retval = toDict () + % + %retval is of type casadi::GenericType::Dict. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(100, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toFunction(self,varargin) + %Convert to a type. + % + % + %Usage: retval = toFunction () + % + %retval is of type Function. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(101, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toVoidPointer(self,varargin) + %Convert to a type. + % + % + %Usage: retval = toVoidPointer () + % + %retval is of type void *. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(102, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eq(self,varargin) + %Usage: retval = eq (op2) + % + %op2 is of type GenericType. op2 is of type GenericType. retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(103, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ne(self,varargin) + %Usage: retval = ne (op2) + % + %op2 is of type GenericType. op2 is of type GenericType. retval is of type bool. + + try + + if ~isa(self,'casadi.GenericType') + self = casadi.GenericType(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(104, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = GenericType(varargin) + self@casadi.SharedObject(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(105, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(106, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = get_type_description(varargin) + %Usage: retval = get_type_description (type) + % + %type is of type casadi::TypeID. type is of type casadi::TypeID. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(73, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = from_type(varargin) + %Usage: retval = from_type (type) + % + %type is of type casadi::TypeID. type is of type casadi::TypeID. retval is of type GenericType. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(75, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/HomotopyNlpSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/HomotopyNlpSolver.m new file mode 100755 index 0000000..b0160ea --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/HomotopyNlpSolver.m @@ -0,0 +1,497 @@ +classdef HomotopyNlpSolver < casadi.Function + %Base class for Homotopy NLP Solvers. + % + %Solves the following parametric nonlinear program (NLP): + % + %:: + % + % min F(x, p, tau) + % x + % + % subject to + % LBX <= x <= UBX + % LBG <= G(x, p) <= UBG + % p == P + % + % nx: number of decision variables + % ng: number of constraints + % np: number of parameters + % + % + % + % + %In a homotopy from tau = 0 to tau = 1. + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::NlpSolverInput (NLP_SOLVER_NUM_IN = 8) [nlpSolverIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| NLP_SOLVER_X0 | x0 | Decision variables, | + %| | | initial guess (nx x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_P | p | Value of fixed | + %| | | parameters (np x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LBX | lbx | Decision variables | + %| | | lower bound (nx x 1), | + %| | | default -inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_UBX | ubx | Decision variables | + %| | | upper bound (nx x 1), | + %| | | default +inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LBG | lbg | Constraints lower | + %| | | bound (ng x 1), | + %| | | default -inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_UBG | ubg | Constraints upper | + %| | | bound (ng x 1), | + %| | | default +inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_X0 | lam_x0 | Lagrange multipliers | + %| | | for bounds on X, | + %| | | initial guess (nx x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_G0 | lam_g0 | Lagrange multipliers | + %| | | for bounds on G, | + %| | | initial guess (ng x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::NlpSolverOutput (NLP_SOLVER_NUM_OUT = 6) [nlpSolverOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| NLP_SOLVER_X | x | Decision variables at | + %| | | the optimal solution | + %| | | (nx x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_F | f | Cost function value at | + %| | | the optimal solution | + %| | | (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_G | g | Constraints function | + %| | | at the optimal | + %| | | solution (ng x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_X | lam_x | Lagrange multipliers | + %| | | for bounds on X at the | + %| | | solution (nx x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_G | lam_g | Lagrange multipliers | + %| | | for bounds on G at the | + %| | | solution (ng x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_P | lam_p | Lagrange multipliers | + %| | | for bounds on P at the | + %| | | solution (np x 1) . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| expand | OT_BOOLEAN | false | Expand the | casadi::Homo | + %| | | | NLP function | topyNLPInter | + %| | | | in terms of | nal | + %| | | | scalar | | + %| | | | operations, | | + %| | | | i.e. MX->SX | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- simple + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %HomotopyNlpSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %simple + %------ + % + % + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| nlp_solver | OT_STRING | GenericType() | The NLP solver | + %| | | | to be used by | + %| | | | the Homotopy | + %| | | | solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| nlp_solver_opti | OT_DICT | GenericType() | Options to be | + %| ons | | | passed to the | + %| | | | Homotopy solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| num_steps | OT_INTEGER | 10 | Take this many | + %| | | | steps to go | + %| | | | from tau=0 to | + %| | | | tau=1. | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joris Gillis + %Diagrams + %-------- + % + % + % + %C++ includes: homotopy_nlp_solver.hpp + %Usage: HomotopyNlpSolver () + % + methods + function self = HomotopyNlpSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1003, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1004, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(999, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1000, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1001, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1002, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IMatrix.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IMatrix.m new file mode 100755 index 0000000..69191b0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IMatrix.m @@ -0,0 +1,2017 @@ +classdef IMatrix < casadi.MatrixCommon & casadi.ExpIMatrix & casadi.GenIMatrix & casadi.PrintIMatrix + %Sparse matrix class. SX and DMatrix are specializations. + % + %General sparse matrix class that is designed with the idea that "everything + %is a matrix", that is, also scalars and vectors. This philosophy makes it + %easy to use and to interface in particularly with Python and Matlab/Octave. + %Index starts with 0. Index vec happens as follows: (rr, cc) -> k = + %rr+cc*size1() Vectors are column vectors. The storage format is Compressed + %Column Storage (CCS), similar to that used for sparse matrices in Matlab, + %but unlike this format, we do allow for elements to be structurally non-zero + %but numerically zero. Matrix is polymorphic with a + %std::vector that contain all non-identical-zero elements. The + %sparsity can be accessed with Sparsity& sparsity() Joel Andersson + % + %C++ includes: casadi_types.hpp + %Usage: IMatrix () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = sanityCheck(self,varargin) + %Check if the dimensions and colind, row vectors are compatible. + % + %Parameters: + %----------- + % + %complete: set to true to also check elementwise throws an error as possible + %result + % + % + %Usage: sanityCheck (complete = false) + % + %complete is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(506, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = IMatrix(varargin) + self@casadi.MatrixCommon(SwigRef.Null); + self@casadi.ExpIMatrix(SwigRef.Null); + self@casadi.GenIMatrix(SwigRef.Null); + self@casadi.PrintIMatrix(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(507, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function varargout = hasNZ(self,varargin) + %Returns true if the matrix has a non-zero at location rr, cc. + % + % + %Usage: retval = hasNZ (rr, cc) + % + %rr is of type int. cc is of type int. rr is of type int. cc is of type int. retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(508, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nonzero(self,varargin) + %Returns the truth value of a Matrix. + % + % + %Usage: retval = nonzero () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(509, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isSlice(self,varargin) + %> bool array(DataType) .isSlice(bool ind1=false) const + %------------------------------------------------------------------------ + % + %Is the Matrix a Slice (only for IMatrix) + % + % + %Usage: retval = isSlice (ind1 = false) + % + %ind1 is of type bool. ind1 is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(510, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toSlice(self,varargin) + %> Slice array(DataType) .toSlice(bool ind1=false) const + %------------------------------------------------------------------------ + % + %Convert to Slice (only for IMatrix) + % + % + %Usage: retval = toSlice (ind1 = false) + % + %ind1 is of type bool. ind1 is of type bool. retval is of type Slice. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(511, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = get(self,varargin) + %> void array(DataType) .get([double ] output_m) const + %------------------------------------------------------------------------ + % + %Get the elements numerically. + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Slice rr) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, IMatrix rr) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Sparsity sp) const + %------------------------------------------------------------------------ + % + %Get a submatrix, single argument + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Slice rr, Slice cc) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Slice rr, IMatrix cc) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, IMatrix rr, Slice cc) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, IMatrix rr, IMatrix cc) const + %------------------------------------------------------------------------ + % + %Get a submatrix, two arguments + % + % + %Usage: get (ind1, rr, cc) + % + %ind1 is of type bool. rr is of type IMatrix. cc is of type IMatrix. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(512, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = set(self,varargin) + %> void array(DataType) .set(double val) + % + %> void array(DataType) .set(const double *val, bool tr=false) + % + %> void array(DataType) .set([double ] val, bool tr=false) + %------------------------------------------------------------------------ + % + %Get the elements numerically. + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Slice rr) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, IMatrix rr) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Sparsity sp) + %------------------------------------------------------------------------ + % + %Set a submatrix, single argument + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Slice rr, Slice cc) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Slice rr, IMatrix cc) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, IMatrix rr, Slice cc) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, IMatrix rr, IMatrix cc) + %------------------------------------------------------------------------ + % + %Set a submatrix, two arguments + % + %> void array(DataType) .set(array(DataType) val) + %------------------------------------------------------------------------ + % + %Set all the entries without changing sparsity pattern. + % + % + %Usage: set (m, ind1, rr, cc) + % + %m is of type IMatrix. ind1 is of type bool. rr is of type IMatrix. cc is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(513, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setSym(self,varargin) + %Set upper triangular elements. + % + % + %Usage: setSym (val) + % + %val is of type std::vector< double,std::allocator< double > > const &. + + try + + [varargout{1:nargout}] = casadiMEX(514, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getSym(self,varargin) + %Get upper triangular elements. + % + % + %Usage: getSym () + % + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(515, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getNZ(self,varargin) + %> void array(DataType) .getNZ([double ] output_m) const + %------------------------------------------------------------------------ + % + %Get the elements numerically. + % + %> void array(DataType) .getNZ(array(DataType) output_m, bool ind1, Slice k) const + % + %> void array(DataType) .getNZ(array(DataType) output_m, bool ind1, IMatrix k) const + %------------------------------------------------------------------------ + % + %Get a set of nonzeros + % + % + %Usage: getNZ (ind1, k) + % + %ind1 is of type bool. k is of type IMatrix. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(516, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setNZ(self,varargin) + %> void array(DataType) .setNZ(double val) + % + %> void array(DataType) .setNZ(const double *val) + % + %> void array(DataType) .setNZ([double ] val) + %------------------------------------------------------------------------ + % + %Set the elements numerically. + % + %> void array(DataType) .setNZ(array(DataType) m, bool ind1, Slice k) + % + %> void array(DataType) .setNZ(array(DataType) m, bool ind1, IMatrix k) + %------------------------------------------------------------------------ + % + %Set a set of nonzeros + % + % + %Usage: setNZ (m, ind1, k) + % + %m is of type IMatrix. ind1 is of type bool. k is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(517, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = append(self,varargin) + %[DEPRECATED] Append a matrix vertically (NOTE: only efficient if vector) + % + % + %Usage: append (y) + % + %y is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(518, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = appendColumns(self,varargin) + %[DEPRECATED] Append a matrix horizontally + % + % + %Usage: appendColumns (y) + % + %y is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(519, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setZero(self,varargin) + %[DEPRECATED] Set all elements to zero + % + % + %Usage: setZero () + % + + try + + [varargout{1:nargout}] = casadiMEX(520, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = makeSparse(self,varargin) + %[DEPRECATED: use sparsify instead] Make a matrix sparse by removing + %numerical zeros smaller in absolute value than a specified tolerance + % + % + %Usage: makeSparse (tol = 0) + % + %tol is of type double. + + try + + [varargout{1:nargout}] = casadiMEX(521, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = uplus(self,varargin) + %Usage: retval = uplus () + % + %retval is of type IMatrix. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(522, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = uminus(self,varargin) + %Usage: retval = uminus () + % + %retval is of type IMatrix. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(523, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printme(self,varargin) + %Usage: retval = printme (y) + % + %y is of type IMatrix. y is of type IMatrix. retval is of type IMatrix. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(529, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = T(self,varargin) + %Transpose the matrix. + % + % + %Usage: retval = T () + % + %retval is of type IMatrix. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(530, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = print(self,varargin) + %Print a description of the object. + % + % + %Usage: print (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(534, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printSplit(self,varargin) + %Get strings corresponding to the nonzeros and the interdependencies. + % + % + %Usage: printSplit () + % + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(535, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = disp(self,varargin) + %Print a representation of the object. + % + % + %Usage: disp (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(536, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printScalar(self,varargin) + %Print scalar. + % + % + %Usage: printScalar (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(537, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printVector(self,varargin) + %Print vector-style. + % + % + %Usage: printVector (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(538, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printDense(self,varargin) + %Print dense matrix-stype. + % + % + %Usage: printDense (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(539, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printSparse(self,varargin) + %Print sparse matrix style. + % + % + %Usage: printSparse (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:nargout}] = casadiMEX(540, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = clear(self,varargin) + %Usage: clear () + % + + try + + [varargout{1:nargout}] = casadiMEX(541, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = resize(self,varargin) + %Usage: resize (nrow, ncol) + % + %nrow is of type int. ncol is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(542, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = reserve(self,varargin) + %Usage: reserve (nnz, ncol) + % + %nnz is of type int. ncol is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(543, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = erase(self,varargin) + %> void array(DataType) .erase([int ] rr, [int ] cc, bool ind1=false) + %------------------------------------------------------------------------ + % + %Erase a submatrix (leaving structural zeros in its place) Erase rows and/or + %columns of a matrix. + % + %> void array(DataType) .erase([int ] rr, bool ind1=false) + %------------------------------------------------------------------------ + % + %Erase a submatrix (leaving structural zeros in its place) Erase elements of + %a matrix. + % + % + %Usage: erase (rr, ind1 = false) + % + %rr is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(544, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = remove(self,varargin) + %Remove columns and rows Remove/delete rows and/or columns of a matrix. + % + % + %Usage: remove (rr, cc) + % + %rr is of type std::vector< int,std::allocator< int > > const &. cc is of type std::vector< int,std::allocator< int > > const &. + + try + + [varargout{1:nargout}] = casadiMEX(545, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = enlarge(self,varargin) + %Enlarge matrix Make the matrix larger by inserting empty rows and columns, + %keeping the existing non-zeros. + % + % + %Usage: enlarge (nrow, ncol, rr, cc, ind1 = false) + % + %nrow is of type int. ncol is of type int. rr is of type std::vector< int,std::allocator< int > > const &. cc is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(546, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparsity(self,varargin) + %Get an owning reference to the sparsity pattern. + % + % + %Usage: retval = sparsity () + % + %retval is of type Sparsity. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(547, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getElementHash(self,varargin) + %Returns a number that is unique for a given symbolic scalar. + % + %Only defined if symbolic scalar. + % + % + %Usage: retval = getElementHash () + % + %retval is of type size_t. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(552, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isRegular(self,varargin) + %Checks if expression does not contain NaN or Inf. + % + % + %Usage: retval = isRegular () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(553, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isSmooth(self,varargin) + %Check if smooth. + % + % + %Usage: retval = isSmooth () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(554, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isLeaf(self,varargin) + %Check if SX is a leaf of the SX graph. + % + %Only defined if symbolic scalar. + % + % + %Usage: retval = isLeaf () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(555, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isCommutative(self,varargin) + %Check whether a binary SX is commutative. + % + %Only defined if symbolic scalar. + % + % + %Usage: retval = isCommutative () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(556, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isSymbolic(self,varargin) + %Check if symbolic (Dense) Sparse matrices invariable return false. + % + % + %Usage: retval = isSymbolic () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(557, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isValidInput(self,varargin) + %Check if matrix can be used to define function inputs. Sparse matrices can + %return true if all non-zero elements are symbolic. + % + % + %Usage: retval = isValidInput () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(558, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasDuplicates(self,varargin) + %[INTERNAL] Detect + %duplicate symbolic expressions If there are symbolic primitives appearing + %more than once, the function will return true and the names of the duplicate + %expressions will be printed to userOut(). Note: Will mark the + %node using SXElement::setTemp. Make sure to call resetInput() after usage. + % + % + %Usage: retval = hasDuplicates () + % + %retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(559, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = resetInput(self,varargin) + %[INTERNAL] Reset the + %marker for an input expression. + % + % + %Usage: resetInput () + % + + try + + [varargout{1:nargout}] = casadiMEX(560, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isConstant(self,varargin) + %Check if the matrix is constant (note that false negative answers are + %possible) + % + % + %Usage: retval = isConstant () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(561, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isInteger(self,varargin) + %Check if the matrix is integer-valued (note that false negative answers are + %possible) + % + % + %Usage: retval = isInteger () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(562, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isZero(self,varargin) + %check if the matrix is 0 (note that false negative answers are possible) + % + % + %Usage: retval = isZero () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(563, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isOne(self,varargin) + %check if the matrix is 1 (note that false negative answers are possible) + % + % + %Usage: retval = isOne () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(564, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isMinusOne(self,varargin) + %check if the matrix is -1 (note that false negative answers are possible) + % + % + %Usage: retval = isMinusOne () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(565, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isIdentity(self,varargin) + %check if the matrix is an identity matrix (note that false negative answers + %are possible) + % + % + %Usage: retval = isIdentity () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(566, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasNonStructuralZeros(self,varargin) + %Check if the matrix has any zero entries which are not structural zeros. + % + % + %Usage: retval = hasNonStructuralZeros () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(567, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getValue(self,varargin) + %> double array(DataType) .getValue() const + %------------------------------------------------------------------------ + % + %Get double value (only if constant) + % + %> double array(DataType) .getValue(int k) const + %------------------------------------------------------------------------ + % + %Get double value (particular nonzero) + % + % + %Usage: retval = getValue (k) + % + %k is of type int. k is of type int. retval is of type double. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(568, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setValue(self,varargin) + %> void array(DataType) .setValue(double m) + %------------------------------------------------------------------------ + % + %Set double value (only if constant) + % + %> void array(DataType) .setValue(double m, int k) + %------------------------------------------------------------------------ + % + %Set double value (particular nonzero) + % + % + %Usage: setValue (m, k) + % + %m is of type double. k is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(569, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getIntValue(self,varargin) + %Get double value (only if integer constant) + % + % + %Usage: retval = getIntValue () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(570, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nonzeros(self,varargin) + %Get all nonzeros. + % + % + %Usage: retval = nonzeros () + % + %retval is of type std::vector< double,std::allocator< double > >. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(571, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nonzeros_int(self,varargin) + %Get all nonzeros. + % + % + %Usage: retval = nonzeros_int () + % + %retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(572, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getName(self,varargin) + %Get name (only if symbolic scalar) + % + % + %Usage: retval = getName () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(573, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getDep(self,varargin) + %Get expressions of the children of the expression Only defined if symbolic + %scalar. Wraps SXElement SXElement::getDep(int ch=0) const. + % + % + %Usage: retval = getDep (ch = 0) + % + %ch is of type int. ch is of type int. retval is of type IMatrix. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(574, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getNdeps(self,varargin) + %Get the number of dependencies of a binary SXElement Only defined if + %symbolic scalar. + % + % + %Usage: retval = getNdeps () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(575, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = assign(self,varargin) + %Usage: assign (rhs) + % + %rhs is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(579, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = paren(self,varargin) + %Usage: retval = paren (rr, cc) + % + %rr is of type IMatrix. cc is of type IMatrix. rr is of type IMatrix. cc is of type IMatrix. retval is of type IMatrix. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(580, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = paren_asgn(self,varargin) + %Usage: paren_asgn (m, rr, cc) + % + %m is of type IMatrix. rr is of type IMatrix. cc is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(581, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = brace(self,varargin) + %Usage: retval = brace (rr) + % + %rr is of type IMatrix. rr is of type IMatrix. retval is of type IMatrix. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(582, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setbrace(self,varargin) + %Usage: setbrace (m, rr) + % + %m is of type IMatrix. rr is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(583, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = end(self,varargin) + %Usage: retval = end (i, n) + % + %i is of type int. n is of type int. i is of type int. n is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(584, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ctranspose(self,varargin) + %Usage: retval = ctranspose () + % + %retval is of type IMatrix. + + try + + if ~isa(self,'casadi.IMatrix') + self = casadi.IMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(585, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function delete(self) + if self.swigPtr + casadiMEX(586, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = binary(varargin) + %[INTERNAL] Create nodes by + %their ID. + % + % + %Usage: retval = binary (op, x, y) + % + %op is of type int. x is of type IMatrix. y is of type IMatrix. op is of type int. x is of type IMatrix. y is of type IMatrix. retval is of type IMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(524, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = unary(varargin) + %[INTERNAL] Create nodes by + %their ID. + % + % + %Usage: retval = unary (op, x) + % + %op is of type int. x is of type IMatrix. op is of type int. x is of type IMatrix. retval is of type IMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(525, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = scalar_matrix(varargin) + %[INTERNAL] Create + %nodes by their ID. + % + % + %Usage: retval = scalar_matrix (op, x, y) + % + %op is of type int. x is of type IMatrix. y is of type IMatrix. op is of type int. x is of type IMatrix. y is of type IMatrix. retval is of type IMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(526, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = matrix_scalar(varargin) + %[INTERNAL] Create + %nodes by their ID. + % + % + %Usage: retval = matrix_scalar (op, x, y) + % + %op is of type int. x is of type IMatrix. y is of type IMatrix. op is of type int. x is of type IMatrix. y is of type IMatrix. retval is of type IMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(527, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = matrix_matrix(varargin) + %[INTERNAL] Create + %nodes by their ID. + % + % + %Usage: retval = matrix_matrix (op, x, y) + % + %op is of type int. x is of type IMatrix. y is of type IMatrix. op is of type int. x is of type IMatrix. y is of type IMatrix. retval is of type IMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(528, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setEqualityCheckingDepth(varargin) + %Usage: setEqualityCheckingDepth (eq_depth = 1) + % + %eq_depth is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(531, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getEqualityCheckingDepth(varargin) + %Usage: retval = getEqualityCheckingDepth () + % + %retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(532, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = className(varargin) + %Usage: retval = className () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(533, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = triplet(varargin) + %Usage: retval = triplet (row, col, d, rc) + % + %row is of type std::vector< int,std::allocator< int > > const &. col is of type std::vector< int,std::allocator< int > > const &. d is of type IMatrix. rc is of type std::pair< int,int > const &. row is of type std::vector< int,std::allocator< int > > const &. col is of type std::vector< int,std::allocator< int > > const &. d is of type IMatrix. rc is of type std::pair< int,int > const &. retval is of type IMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(548, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inf(varargin) + %create a matrix with all inf + % + % + %Usage: retval = inf (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type IMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(549, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nan(varargin) + %create a matrix with all nan + % + % + %Usage: retval = nan (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type IMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(550, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eye(varargin) + %Usage: retval = eye (ncol) + % + %ncol is of type int. ncol is of type int. retval is of type IMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(551, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setPrecision(varargin) + %Set the 'precision, width & scientific' used in printing and serializing to + %streams. + % + % + %Usage: setPrecision (precision) + % + %precision is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(576, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setWidth(varargin) + %Set the 'precision, width & scientific' used in printing and serializing to + %streams. + % + % + %Usage: setWidth (width) + % + %width is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(577, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setScientific(varargin) + %Set the 'precision, width & scientific' used in printing and serializing to + %streams. + % + % + %Usage: setScientific (scientific) + % + %scientific is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(578, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/INPUT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/INPUT.m new file mode 100755 index 0000000..de390af --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/INPUT.m @@ -0,0 +1,7 @@ +function v = INPUT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 159); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/INTERNAL.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/INTERNAL.m new file mode 100755 index 0000000..f62254f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/INTERNAL.m @@ -0,0 +1,7 @@ +function v = INTERNAL() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 161); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IOInterfaceFunction.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IOInterfaceFunction.m new file mode 100755 index 0000000..61c6e35 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IOInterfaceFunction.m @@ -0,0 +1,161 @@ +classdef IOInterfaceFunction < SwigRef + %Usage: IOInterfaceFunction () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = getInput(self,varargin) + %Usage: retval = getInput (iname) + % + %iname is of type std::string const &. iname is of type std::string const &. retval is of type DMatrix. + + try + + if ~isa(self,'casadi.IOInterfaceFunction') + self = casadi.IOInterfaceFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(823, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOutput(self,varargin) + %Usage: retval = getOutput (oname) + % + %oname is of type std::string const &. oname is of type std::string const &. retval is of type DMatrix. + + try + + if ~isa(self,'casadi.IOInterfaceFunction') + self = casadi.IOInterfaceFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(824, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setInput(self,varargin) + %Usage: setInput (val, iname) + % + %val is of type DMatrix. iname is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(825, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setOutput(self,varargin) + %Usage: setOutput (val, oname) + % + %val is of type DMatrix. oname is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(826, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setInputNZ(self,varargin) + %Usage: setInputNZ (val, iname) + % + %val is of type DMatrix. iname is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(827, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setOutputNZ(self,varargin) + %Usage: setOutputNZ (val, oname) + % + %val is of type DMatrix. oname is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(828, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = IOInterfaceFunction(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(829, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(830, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IOScheme.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IOScheme.m new file mode 100755 index 0000000..17e5f30 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IOScheme.m @@ -0,0 +1,19 @@ +function varargout = IOScheme(varargin) + %Usage: retval = IOScheme (arg_s0, arg_s1 = "", arg_s2 = "", arg_s3 = "", arg_s4 = "", arg_s5 = "", arg_s6 = "", arg_s7 = "", arg_s8 = "", arg_s9 = "", arg_s10 = "", arg_s11 = "", arg_s12 = "", arg_s13 = "", arg_s14 = "", arg_s15 = "", arg_s16 = "", arg_s17 = "", arg_s18 = "", arg_s19 = "") + % + %arg_s0 is of type std::string const &. arg_s1 is of type std::string const &. arg_s2 is of type std::string const &. arg_s3 is of type std::string const &. arg_s4 is of type std::string const &. arg_s5 is of type std::string const &. arg_s6 is of type std::string const &. arg_s7 is of type std::string const &. arg_s8 is of type std::string const &. arg_s9 is of type std::string const &. arg_s10 is of type std::string const &. arg_s11 is of type std::string const &. arg_s12 is of type std::string const &. arg_s13 is of type std::string const &. arg_s14 is of type std::string const &. arg_s15 is of type std::string const &. arg_s16 is of type std::string const &. arg_s17 is of type std::string const &. arg_s18 is of type std::string const &. arg_s19 is of type std::string const &. arg_s0 is of type std::string const &. arg_s1 is of type std::string const &. arg_s2 is of type std::string const &. arg_s3 is of type std::string const &. arg_s4 is of type std::string const &. arg_s5 is of type std::string const &. arg_s6 is of type std::string const &. arg_s7 is of type std::string const &. arg_s8 is of type std::string const &. arg_s9 is of type std::string const &. arg_s10 is of type std::string const &. arg_s11 is of type std::string const &. arg_s12 is of type std::string const &. arg_s13 is of type std::string const &. arg_s14 is of type std::string const &. arg_s15 is of type std::string const &. arg_s16 is of type std::string const &. arg_s17 is of type std::string const &. arg_s18 is of type std::string const &. arg_s19 is of type std::string const &. retval is of type std::vector< std::string,std::allocator< std::string > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(831,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_DMATRIX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_DMATRIX.m new file mode 100755 index 0000000..dab6542 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_DMATRIX.m @@ -0,0 +1,7 @@ +function v = IS_DMATRIX() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 148); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_GLOBAL.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_GLOBAL.m new file mode 100755 index 0000000..afdde3c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_GLOBAL.m @@ -0,0 +1,7 @@ +function v = IS_GLOBAL() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 145); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_IMATRIX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_IMATRIX.m new file mode 100755 index 0000000..d666603 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_IMATRIX.m @@ -0,0 +1,7 @@ +function v = IS_IMATRIX() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 149); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_MEMBER.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_MEMBER.m new file mode 100755 index 0000000..71239f4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_MEMBER.m @@ -0,0 +1,7 @@ +function v = IS_MEMBER() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 146); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_MX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_MX.m new file mode 100755 index 0000000..23983fc --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_MX.m @@ -0,0 +1,7 @@ +function v = IS_MX() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 151); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_SPARSITY.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_SPARSITY.m new file mode 100755 index 0000000..bd9df7d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_SPARSITY.m @@ -0,0 +1,7 @@ +function v = IS_SPARSITY() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 147); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_SX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_SX.m new file mode 100755 index 0000000..5175a27 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IS_SX.m @@ -0,0 +1,7 @@ +function v = IS_SX() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 150); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ImplicitFunction.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ImplicitFunction.m new file mode 100755 index 0000000..7e76c54 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/ImplicitFunction.m @@ -0,0 +1,688 @@ +classdef ImplicitFunction < casadi.Function + %Abstract base class for the implicit function classes. + % + %Mathematically, the equation: + % + %F(z, x1, x2, ..., xn) == 0 + % + %where d_F/dz is invertible, implicitly defines the equation: + % + %z := G(x1, x2, ..., xn) + % + %In CasADi, F is a Function. The first input presents the variables that need + %to be solved for. The first output is the residual that needs to attain + %zero. Optional remaining outputs can be supplied; they are output + %expressions. + % + %In pseudo-code, we can write: + % + %G* = ImplicitFunction('solver',F) + % + %Here, G* is a Function with one extra input over the pure mathematical G: + % + %z := G*(z0, x1, x2, ..., xn) + % + %The first input to the ImplicitFunction is the intial guess for z. + % + %General information + %=================== + % + % + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| constraints | OT_INTEGERVE | GenericType( | Constrain | casadi::Impl | + %| | CTOR | ) | the | icitFunction | + %| | | | unknowns. 0 | Internal | + %| | | | (default): | | + %| | | | no | | + %| | | | constraint | | + %| | | | on ui, 1: ui | | + %| | | | >= 0.0, -1: | | + %| | | | ui <= 0.0, | | + %| | | | 2: ui > 0.0, | | + %| | | | -2: ui < | | + %| | | | 0.0. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| implicit_inp | OT_INTEGER | 0 | Index of the | casadi::Impl | + %| ut | | | input that | icitFunction | + %| | | | corresponds | Internal | + %| | | | to the | | + %| | | | actual root- | | + %| | | | finding | | + %+--------------+--------------+--------------+--------------+--------------+ + %| implicit_out | OT_INTEGER | 0 | Index of the | casadi::Impl | + %| put | | | output that | icitFunction | + %| | | | corresponds | Internal | + %| | | | to the | | + %| | | | actual root- | | + %| | | | finding | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jacobian_fun | OT_FUNCTION | GenericType( | Function | casadi::Impl | + %| ction | | ) | object for | icitFunction | + %| | | | calculating | Internal | + %| | | | the Jacobian | | + %| | | | (autogenerat | | + %| | | | ed by | | + %| | | | default) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| linear_solve | OT_STRING | "csparse" | User-defined | casadi::Impl | + %| r | | | linear | icitFunction | + %| | | | solver | Internal | + %| | | | class. | | + %| | | | Needed for s | | + %| | | | ensitivities | | + %| | | | . | | + %+--------------+--------------+--------------+--------------+--------------+ + %| linear_solve | OT_FUNCTION | GenericType( | Function | casadi::Impl | + %| r_function | | ) | object for | icitFunction | + %| | | | solving the | Internal | + %| | | | linearized | | + %| | | | problem (aut | | + %| | | | ogenerated | | + %| | | | by default) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| linear_solve | OT_DICT | GenericType( | Options to | casadi::Impl | + %| r_options | | ) | be passed to | icitFunction | + %| | | | the linear | Internal | + %| | | | solver. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- kinsol + % + %- nlp + % + %- newton + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %ImplicitFunction.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %kinsol + %------ + % + % + % + %KINSOL interface from the Sundials suite + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| abstol | OT_REAL | 0.000 | Stopping | + %| | | | criterion | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| disable_interna | OT_BOOLEAN | false | Disable KINSOL | + %| l_warnings | | | internal | + %| | | | warning | + %| | | | messages | + %+-----------------+-----------------+-----------------+-----------------+ + %| exact_jacobian | OT_BOOLEAN | true | | + %+-----------------+-----------------+-----------------+-----------------+ + %| f_scale | OT_REALVECTOR | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| iterative_solve | OT_STRING | "gmres" | gmres|bcgstab|t | + %| r | | | fqmr | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_t | OT_STRING | "dense" | dense|banded|it | + %| ype | | | erative|user_de | + %| | | | fined | + %+-----------------+-----------------+-----------------+-----------------+ + %| lower_bandwidth | OT_INTEGER | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_iter | OT_INTEGER | 0 | Maximum number | + %| | | | of Newton | + %| | | | iterations. | + %| | | | Putting 0 sets | + %| | | | the default | + %| | | | value of | + %| | | | KinSol. | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_krylov | OT_INTEGER | 0 | | + %+-----------------+-----------------+-----------------+-----------------+ + %| pretype | OT_STRING | "none" | (none|left|righ | + %| | | | t|both) | + %+-----------------+-----------------+-----------------+-----------------+ + %| strategy | OT_STRING | "none" | Globalization | + %| | | | strategy (none| | + %| | | | linesearch) | + %+-----------------+-----------------+-----------------+-----------------+ + %| u_scale | OT_REALVECTOR | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| upper_bandwidth | OT_INTEGER | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| use_preconditio | OT_BOOLEAN | false | precondition an | + %| ner | | | iterative | + %| | | | solver | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available monitors + % + %+-----------+ + %| Id | + %+===========+ + %| eval_djac | + %+-----------+ + %| eval_f | + %+-----------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %nlp + %--- + % + % + % + %Use an NlpSolver as ImplicitFunction solver + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %>List of available stats + % + %+--------------+ + %| Id | + %+==============+ + %| solver_stats | + %+--------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %newton + %------ + % + % + % + %Implements simple newton iterations to solve an implicit function. + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| abstol | OT_REAL | 0.000 | Stopping | + %| | | | criterion | + %| | | | tolerance on | + %| | | | max(|F|) | + %+-----------------+-----------------+-----------------+-----------------+ + %| abstolStep | OT_REAL | 0.000 | Stopping | + %| | | | criterion | + %| | | | tolerance on | + %| | | | step size | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_iter | OT_INTEGER | 1000 | Maximum number | + %| | | | of Newton | + %| | | | iterations to | + %| | | | perform before | + %| | | | returning. | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_iteration | OT_BOOLEAN | false | Print | + %| | | | information | + %| | | | about each | + %| | | | iteration | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available monitors + % + %+----------+ + %| Id | + %+==========+ + %| F | + %+----------+ + %| J | + %+----------+ + %| normF | + %+----------+ + %| step | + %+----------+ + %| stepsize | + %+----------+ + % + %>List of available stats + % + %+---------------+ + %| Id | + %+===============+ + %| iter | + %+---------------+ + %| return_status | + %+---------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joel Andersson + %Diagrams + %-------- + % + % + % + %C++ includes: implicit_function.hpp + %Usage: ImplicitFunction () + % + methods + function varargout = getF(self,varargin) + %Access F. + % + % + %Usage: retval = getF () + % + %retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(956, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getJac(self,varargin) + %Access Jacobian. + % + % + %Usage: retval = getJac () + % + %retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(957, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getLinsol(self,varargin) + %Access linear solver. + % + % + %Usage: retval = getLinsol () + % + %retval is of type LinearSolver. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(958, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = ImplicitFunction(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(959, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(960, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(952, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(953, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(954, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(955, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Integrator.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Integrator.m new file mode 100755 index 0000000..7f00f91 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Integrator.m @@ -0,0 +1,1467 @@ +classdef Integrator < casadi.Function + %Base class for integrators. + % + %Integrator abstract base class + % + %Solves an initial value problem (IVP) coupled to a terminal value problem + %with differential equation given as an implicit ODE coupled to an algebraic + %equation and a set of quadratures: + % + %:: + % + % Initial conditions at t=t0 + % x(t0) = x0 + % q(t0) = 0 + % + % Forward integration from t=t0 to t=tf + % der(x) = function(x, z, p, t) Forward ODE + % 0 = fz(x, z, p, t) Forward algebraic equations + % der(q) = fq(x, z, p, t) Forward quadratures + % + % Terminal conditions at t=tf + % rx(tf) = rx0 + % rq(tf) = 0 + % + % Backward integration from t=tf to t=t0 + % der(rx) = gx(rx, rz, rp, x, z, p, t) Backward ODE + % 0 = gz(rx, rz, rp, x, z, p, t) Backward algebraic equations + % der(rq) = gq(rx, rz, rp, x, z, p, t) Backward quadratures + % + % where we assume that both the forward and backwards integrations are index-1 + % (i.e. dfz/dz, dgz/drz are invertible) and furthermore that + % gx, gz and gq have a linear dependency on rx, rz and rp. + % + % + % + %The Integrator class provides some additional functionality, such as getting + %the value of the state and/or sensitivities at certain time points. + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::IntegratorInput (INTEGRATOR_NUM_IN = 6) [integratorIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| INTEGRATOR_X0 | x0 | Differential state at | + %| | | the initial time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_P | p | Parameters . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_Z0 | z0 | Initial guess for the | + %| | | algebraic variable . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RX0 | rx0 | Backward differential | + %| | | state at the final | + %| | | time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RP | rp | Backward parameter | + %| | | vector . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RZ0 | rz0 | Initial guess for the | + %| | | backwards algebraic | + %| | | variable . | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::IntegratorOutput (INTEGRATOR_NUM_OUT = 6) [integratorOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| INTEGRATOR_XF | xf | Differential state at | + %| | | the final time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_QF | qf | Quadrature state at | + %| | | the final time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_ZF | zf | Algebraic variable at | + %| | | the final time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RXF | rxf | Backward differential | + %| | | state at the initial | + %| | | time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RQF | rqf | Backward quadrature | + %| | | state at the initial | + %| | | time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RZF | rzf | Backward algebraic | + %| | | variable at the | + %| | | initial time . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| augmented_op | OT_DICT | GenericType( | Options to | casadi::Inte | + %| tions | | ) | be passed | gratorIntern | + %| | | | down to the | al | + %| | | | augmented | | + %| | | | integrator, | | + %| | | | if one is | | + %| | | | constructed. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| expand_augme | OT_BOOLEAN | true | If DAE | casadi::Inte | + %| nted | | | callback | gratorIntern | + %| | | | functions | al | + %| | | | are | | + %| | | | SXFunction , | | + %| | | | have | | + %| | | | augmented | | + %| | | | DAE callback | | + %| | | | function | | + %| | | | also be | | + %| | | | SXFunction . | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| print_stats | OT_BOOLEAN | false | Print out | casadi::Inte | + %| | | | statistics | gratorIntern | + %| | | | after | al | + %| | | | integration | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| t0 | OT_REAL | 0 | Beginning of | casadi::Inte | + %| | | | the time | gratorIntern | + %| | | | horizon | al | + %+--------------+--------------+--------------+--------------+--------------+ + %| tf | OT_REAL | 1 | End of the | casadi::Inte | + %| | | | time horizon | gratorIntern | + %| | | | | al | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- cvodes + % + %- idas + % + %- collocation + % + %- oldcollocation + % + %- rk + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %Integrator.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %cvodes + %------ + % + % + % + %Interface to CVodes from the Sundials suite. + % + %A call to evaluate will integrate to the end. + % + %You can retrieve the entire state trajectory as follows, after the evaluate + %call: Call reset. Then call integrate(t_i) and getOuput for a series of + %times t_i. + % + %Note: depending on the dimension and structure of your problem, you may + %experience a dramatic speed-up by using a sparse linear solver: + % + % + % + %:: + % + % intg.setOption("linear_solver","csparse") + % intg.setOption("linear_solver_type","user_defined") + % + % + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| abstol | OT_REAL | 0.000 | Absolute | + %| | | | tolerence for | + %| | | | the IVP | + %| | | | solution | + %+-----------------+-----------------+-----------------+-----------------+ + %| abstolB | OT_REAL | GenericType() | Absolute | + %| | | | tolerence for | + %| | | | the adjoint | + %| | | | sensitivity | + %| | | | solution | + %| | | | [default: equal | + %| | | | to abstol] | + %+-----------------+-----------------+-----------------+-----------------+ + %| disable_interna | OT_BOOLEAN | false | Disable CVodes | + %| l_warnings | | | internal | + %| | | | warning | + %| | | | messages | + %+-----------------+-----------------+-----------------+-----------------+ + %| exact_jacobian | OT_BOOLEAN | true | Use exact | + %| | | | Jacobian | + %| | | | information for | + %| | | | the forward | + %| | | | integration | + %+-----------------+-----------------+-----------------+-----------------+ + %| exact_jacobianB | OT_BOOLEAN | GenericType() | Use exact | + %| | | | Jacobian | + %| | | | information for | + %| | | | the backward | + %| | | | integration | + %| | | | [default: equal | + %| | | | to | + %| | | | exact_jacobian] | + %+-----------------+-----------------+-----------------+-----------------+ + %| finite_differen | OT_BOOLEAN | false | Use finite | + %| ce_fsens | | | differences to | + %| | | | approximate the | + %| | | | forward | + %| | | | sensitivity | + %| | | | equations (if | + %| | | | AD is not | + %| | | | available) | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_abstol | OT_REAL | GenericType() | Absolute | + %| | | | tolerence for | + %| | | | the forward | + %| | | | sensitivity | + %| | | | solution | + %| | | | [default: equal | + %| | | | to abstol] | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_all_at_on | OT_BOOLEAN | true | Calculate all | + %| ce | | | right hand | + %| | | | sides of the | + %| | | | sensitivity | + %| | | | equations at | + %| | | | once | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_err_con | OT_BOOLEAN | true | include the | + %| | | | forward | + %| | | | sensitivities | + %| | | | in all error | + %| | | | controls | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_reltol | OT_REAL | GenericType() | Relative | + %| | | | tolerence for | + %| | | | the forward | + %| | | | sensitivity | + %| | | | solution | + %| | | | [default: equal | + %| | | | to reltol] | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_scaling_f | OT_REALVECTOR | GenericType() | Scaling factor | + %| actors | | | for the | + %| | | | components if | + %| | | | finite | + %| | | | differences is | + %| | | | used | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_sensitivi | OT_INTEGERVECTO | GenericType() | Specifies which | + %| y_parameters | R | | components will | + %| | | | be used when | + %| | | | estimating the | + %| | | | sensitivity | + %| | | | equations | + %+-----------------+-----------------+-----------------+-----------------+ + %| interpolation_t | OT_STRING | "hermite" | Type of | + %| ype | | | interpolation | + %| | | | for the adjoint | + %| | | | sensitivities ( | + %| | | | hermite|polynom | + %| | | | ial) | + %+-----------------+-----------------+-----------------+-----------------+ + %| iterative_solve | OT_STRING | "gmres" | (gmres|bcgstab| | + %| r | | | tfqmr) | + %+-----------------+-----------------+-----------------+-----------------+ + %| iterative_solve | OT_STRING | GenericType() | (gmres|bcgstab| | + %| rB | | | tfqmr) | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_multiste | OT_STRING | "bdf" | Integrator | + %| p_method | | | scheme | + %| | | | (bdf|adams) | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver | OT_STRING | GenericType() | A custom linear | + %| | | | solver creator | + %| | | | function | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solverB | OT_STRING | GenericType() | A custom linear | + %| | | | solver creator | + %| | | | function for | + %| | | | backwards | + %| | | | integration | + %| | | | [default: equal | + %| | | | to | + %| | | | linear_solver] | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_o | OT_DICT | GenericType() | Options to be | + %| ptions | | | passed to the | + %| | | | linear solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_o | OT_DICT | GenericType() | Options to be | + %| ptionsB | | | passed to the | + %| | | | linear solver | + %| | | | for backwards | + %| | | | integration | + %| | | | [default: equal | + %| | | | to linear_solve | + %| | | | r_options] | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_t | OT_STRING | "dense" | (user_defined|d | + %| ype | | | ense|banded|ite | + %| | | | rative) | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_t | OT_STRING | GenericType() | (user_defined|d | + %| ypeB | | | ense|banded|ite | + %| | | | rative) | + %+-----------------+-----------------+-----------------+-----------------+ + %| lower_bandwidth | OT_INTEGER | GenericType() | Lower band- | + %| | | | width of banded | + %| | | | Jacobian | + %| | | | (estimations) | + %+-----------------+-----------------+-----------------+-----------------+ + %| lower_bandwidth | OT_INTEGER | GenericType() | lower band- | + %| B | | | width of banded | + %| | | | jacobians for | + %| | | | backward | + %| | | | integration | + %| | | | [default: equal | + %| | | | to lower_bandwi | + %| | | | dth] | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_krylov | OT_INTEGER | 10 | Maximum Krylov | + %| | | | subspace size | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_krylovB | OT_INTEGER | GenericType() | Maximum krylov | + %| | | | subspace size | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_multistep_o | OT_INTEGER | 5 | | + %| rder | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_num_steps | OT_INTEGER | 10000 | Maximum number | + %| | | | of integrator | + %| | | | steps | + %+-----------------+-----------------+-----------------+-----------------+ + %| nonlinear_solve | OT_STRING | "newton" | (newton|functio | + %| r_iteration | | | nal) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pretype | OT_STRING | "none" | (none|left|righ | + %| | | | t|both) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pretypeB | OT_STRING | GenericType() | (none|left|righ | + %| | | | t|both) | + %+-----------------+-----------------+-----------------+-----------------+ + %| quad_err_con | OT_BOOLEAN | false | Should the | + %| | | | quadratures | + %| | | | affect the step | + %| | | | size control | + %+-----------------+-----------------+-----------------+-----------------+ + %| reltol | OT_REAL | 0.000 | Relative | + %| | | | tolerence for | + %| | | | the IVP | + %| | | | solution | + %+-----------------+-----------------+-----------------+-----------------+ + %| reltolB | OT_REAL | GenericType() | Relative | + %| | | | tolerence for | + %| | | | the adjoint | + %| | | | sensitivity | + %| | | | solution | + %| | | | [default: equal | + %| | | | to reltol] | + %+-----------------+-----------------+-----------------+-----------------+ + %| sensitivity_met | OT_STRING | "simultaneous" | (simultaneous|s | + %| hod | | | taggered) | + %+-----------------+-----------------+-----------------+-----------------+ + %| steps_per_check | OT_INTEGER | 20 | Number of steps | + %| point | | | between two | + %| | | | consecutive | + %| | | | checkpoints | + %+-----------------+-----------------+-----------------+-----------------+ + %| stop_at_end | OT_BOOLEAN | true | Stop the | + %| | | | integrator at | + %| | | | the end of the | + %| | | | interval | + %+-----------------+-----------------+-----------------+-----------------+ + %| upper_bandwidth | OT_INTEGER | GenericType() | Upper band- | + %| | | | width of banded | + %| | | | Jacobian | + %| | | | (estimations) | + %+-----------------+-----------------+-----------------+-----------------+ + %| upper_bandwidth | OT_INTEGER | GenericType() | Upper band- | + %| B | | | width of banded | + %| | | | jacobians for | + %| | | | backward | + %| | | | integration | + %| | | | [default: equal | + %| | | | to upper_bandwi | + %| | | | dth] | + %+-----------------+-----------------+-----------------+-----------------+ + %| use_preconditio | OT_BOOLEAN | false | Precondition an | + %| ner | | | iterative | + %| | | | solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| use_preconditio | OT_BOOLEAN | GenericType() | Precondition an | + %| nerB | | | iterative | + %| | | | solver for the | + %| | | | backwards | + %| | | | problem | + %| | | | [default: equal | + %| | | | to use_precondi | + %| | | | tioner] | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available monitors + % + %+---------+ + %| Id | + %+=========+ + %| djacB | + %+---------+ + %| psetupB | + %+---------+ + %| res | + %+---------+ + %| resB | + %+---------+ + %| resQB | + %+---------+ + %| reset | + %+---------+ + % + %>List of available stats + % + %+-------------+ + %| Id | + %+=============+ + %| nlinsetups | + %+-------------+ + %| nlinsetupsB | + %+-------------+ + %| nsteps | + %+-------------+ + %| nstepsB | + %+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %idas + %---- + % + % + % + %Interface to IDAS from the Sundials suite. + % + %Note: depending on the dimension and structure of your problem, you may + %experience a dramatic speed-up by using a sparse linear solver: + % + % + % + %:: + % + % intg.setOption("linear_solver","csparse") + % intg.setOption("linear_solver_type","user_defined") + % + % + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| abstol | OT_REAL | 0.000 | Absolute | + %| | | | tolerence for | + %| | | | the IVP | + %| | | | solution | + %+-----------------+-----------------+-----------------+-----------------+ + %| abstolB | OT_REAL | GenericType() | Absolute | + %| | | | tolerence for | + %| | | | the adjoint | + %| | | | sensitivity | + %| | | | solution | + %| | | | [default: equal | + %| | | | to abstol] | + %+-----------------+-----------------+-----------------+-----------------+ + %| abstolv | OT_REALVECTOR | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| calc_ic | OT_BOOLEAN | true | Use IDACalcIC | + %| | | | to get | + %| | | | consistent | + %| | | | initial | + %| | | | conditions. | + %+-----------------+-----------------+-----------------+-----------------+ + %| calc_icB | OT_BOOLEAN | GenericType() | Use IDACalcIC | + %| | | | to get | + %| | | | consistent | + %| | | | initial | + %| | | | conditions for | + %| | | | backwards | + %| | | | system | + %| | | | [default: equal | + %| | | | to calc_ic]. | + %+-----------------+-----------------+-----------------+-----------------+ + %| cj_scaling | OT_BOOLEAN | false | IDAS scaling on | + %| | | | cj for the | + %| | | | user-defined | + %| | | | linear solver | + %| | | | module | + %+-----------------+-----------------+-----------------+-----------------+ + %| disable_interna | OT_BOOLEAN | false | Disable IDAS | + %| l_warnings | | | internal | + %| | | | warning | + %| | | | messages | + %+-----------------+-----------------+-----------------+-----------------+ + %| exact_jacobian | OT_BOOLEAN | true | Use exact | + %| | | | Jacobian | + %| | | | information for | + %| | | | the forward | + %| | | | integration | + %+-----------------+-----------------+-----------------+-----------------+ + %| exact_jacobianB | OT_BOOLEAN | GenericType() | Use exact | + %| | | | Jacobian | + %| | | | information for | + %| | | | the backward | + %| | | | integration | + %| | | | [default: equal | + %| | | | to | + %| | | | exact_jacobian] | + %+-----------------+-----------------+-----------------+-----------------+ + %| extra_fsens_cal | OT_BOOLEAN | false | Call calc ic an | + %| c_ic | | | extra time, | + %| | | | with fsens=0 | + %+-----------------+-----------------+-----------------+-----------------+ + %| finite_differen | OT_BOOLEAN | false | Use finite | + %| ce_fsens | | | differences to | + %| | | | approximate the | + %| | | | forward | + %| | | | sensitivity | + %| | | | equations (if | + %| | | | AD is not | + %| | | | available) | + %+-----------------+-----------------+-----------------+-----------------+ + %| first_time | OT_REAL | GenericType() | First requested | + %| | | | time as a | + %| | | | fraction of the | + %| | | | time interval | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_abstol | OT_REAL | GenericType() | Absolute | + %| | | | tolerence for | + %| | | | the forward | + %| | | | sensitivity | + %| | | | solution | + %| | | | [default: equal | + %| | | | to abstol] | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_abstolv | OT_REALVECTOR | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_err_con | OT_BOOLEAN | true | include the | + %| | | | forward | + %| | | | sensitivities | + %| | | | in all error | + %| | | | controls | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_reltol | OT_REAL | GenericType() | Relative | + %| | | | tolerence for | + %| | | | the forward | + %| | | | sensitivity | + %| | | | solution | + %| | | | [default: equal | + %| | | | to reltol] | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_scaling_f | OT_REALVECTOR | GenericType() | Scaling factor | + %| actors | | | for the | + %| | | | components if | + %| | | | finite | + %| | | | differences is | + %| | | | used | + %+-----------------+-----------------+-----------------+-----------------+ + %| fsens_sensitivi | OT_INTEGERVECTO | GenericType() | Specifies which | + %| y_parameters | R | | components will | + %| | | | be used when | + %| | | | estimating the | + %| | | | sensitivity | + %| | | | equations | + %+-----------------+-----------------+-----------------+-----------------+ + %| init_xdot | OT_REALVECTOR | GenericType() | Initial values | + %| | | | for the state | + %| | | | derivatives | + %+-----------------+-----------------+-----------------+-----------------+ + %| interpolation_t | OT_STRING | "hermite" | Type of | + %| ype | | | interpolation | + %| | | | for the adjoint | + %| | | | sensitivities ( | + %| | | | hermite|polynom | + %| | | | ial) | + %+-----------------+-----------------+-----------------+-----------------+ + %| iterative_solve | OT_STRING | "gmres" | (gmres|bcgstab| | + %| r | | | tfqmr) | + %+-----------------+-----------------+-----------------+-----------------+ + %| iterative_solve | OT_STRING | GenericType() | (gmres|bcgstab| | + %| rB | | | tfqmr) | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver | OT_STRING | GenericType() | A custom linear | + %| | | | solver creator | + %| | | | function | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solverB | OT_STRING | GenericType() | A custom linear | + %| | | | solver creator | + %| | | | function for | + %| | | | backwards | + %| | | | integration | + %| | | | [default: equal | + %| | | | to | + %| | | | linear_solver] | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_o | OT_DICT | GenericType() | Options to be | + %| ptions | | | passed to the | + %| | | | linear solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_o | OT_DICT | GenericType() | Options to be | + %| ptionsB | | | passed to the | + %| | | | linear solver | + %| | | | for backwards | + %| | | | integration | + %| | | | [default: equal | + %| | | | to linear_solve | + %| | | | r_options] | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_t | OT_STRING | "dense" | (user_defined|d | + %| ype | | | ense|banded|ite | + %| | | | rative) | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver_t | OT_STRING | GenericType() | (user_defined|d | + %| ypeB | | | ense|banded|ite | + %| | | | rative) | + %+-----------------+-----------------+-----------------+-----------------+ + %| lower_bandwidth | OT_INTEGER | GenericType() | Lower band- | + %| | | | width of banded | + %| | | | Jacobian | + %| | | | (estimations) | + %+-----------------+-----------------+-----------------+-----------------+ + %| lower_bandwidth | OT_INTEGER | GenericType() | lower band- | + %| B | | | width of banded | + %| | | | jacobians for | + %| | | | backward | + %| | | | integration | + %| | | | [default: equal | + %| | | | to lower_bandwi | + %| | | | dth] | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_krylov | OT_INTEGER | 10 | Maximum Krylov | + %| | | | subspace size | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_krylovB | OT_INTEGER | GenericType() | Maximum krylov | + %| | | | subspace size | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_multistep_o | OT_INTEGER | 5 | | + %| rder | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_num_steps | OT_INTEGER | 10000 | Maximum number | + %| | | | of integrator | + %| | | | steps | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_step_size | OT_REAL | 0 | Maximim step | + %| | | | size | + %+-----------------+-----------------+-----------------+-----------------+ + %| pretype | OT_STRING | "none" | (none|left|righ | + %| | | | t|both) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pretypeB | OT_STRING | GenericType() | (none|left|righ | + %| | | | t|both) | + %+-----------------+-----------------+-----------------+-----------------+ + %| quad_err_con | OT_BOOLEAN | false | Should the | + %| | | | quadratures | + %| | | | affect the step | + %| | | | size control | + %+-----------------+-----------------+-----------------+-----------------+ + %| reltol | OT_REAL | 0.000 | Relative | + %| | | | tolerence for | + %| | | | the IVP | + %| | | | solution | + %+-----------------+-----------------+-----------------+-----------------+ + %| reltolB | OT_REAL | GenericType() | Relative | + %| | | | tolerence for | + %| | | | the adjoint | + %| | | | sensitivity | + %| | | | solution | + %| | | | [default: equal | + %| | | | to reltol] | + %+-----------------+-----------------+-----------------+-----------------+ + %| sensitivity_met | OT_STRING | "simultaneous" | (simultaneous|s | + %| hod | | | taggered) | + %+-----------------+-----------------+-----------------+-----------------+ + %| steps_per_check | OT_INTEGER | 20 | Number of steps | + %| point | | | between two | + %| | | | consecutive | + %| | | | checkpoints | + %+-----------------+-----------------+-----------------+-----------------+ + %| stop_at_end | OT_BOOLEAN | true | Stop the | + %| | | | integrator at | + %| | | | the end of the | + %| | | | interval | + %+-----------------+-----------------+-----------------+-----------------+ + %| suppress_algebr | OT_BOOLEAN | false | Suppress | + %| aic | | | algebraic | + %| | | | variables in | + %| | | | the error | + %| | | | testing | + %+-----------------+-----------------+-----------------+-----------------+ + %| upper_bandwidth | OT_INTEGER | GenericType() | Upper band- | + %| | | | width of banded | + %| | | | Jacobian | + %| | | | (estimations) | + %+-----------------+-----------------+-----------------+-----------------+ + %| upper_bandwidth | OT_INTEGER | GenericType() | Upper band- | + %| B | | | width of banded | + %| | | | jacobians for | + %| | | | backward | + %| | | | integration | + %| | | | [default: equal | + %| | | | to upper_bandwi | + %| | | | dth] | + %+-----------------+-----------------+-----------------+-----------------+ + %| use_preconditio | OT_BOOLEAN | false | Precondition an | + %| ner | | | iterative | + %| | | | solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| use_preconditio | OT_BOOLEAN | GenericType() | Precondition an | + %| nerB | | | iterative | + %| | | | solver for the | + %| | | | backwards | + %| | | | problem | + %| | | | [default: equal | + %| | | | to use_precondi | + %| | | | tioner] | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available monitors + % + %+--------------------------+ + %| Id | + %+==========================+ + %| bjacB | + %+--------------------------+ + %| correctInitialConditions | + %+--------------------------+ + %| jtimesB | + %+--------------------------+ + %| psetup | + %+--------------------------+ + %| psetupB | + %+--------------------------+ + %| psolveB | + %+--------------------------+ + %| res | + %+--------------------------+ + %| resB | + %+--------------------------+ + %| resS | + %+--------------------------+ + %| rhsQB | + %+--------------------------+ + % + %>List of available stats + % + %+-------------+ + %| Id | + %+=============+ + %| nlinsetups | + %+-------------+ + %| nlinsetupsB | + %+-------------+ + %| nsteps | + %+-------------+ + %| nstepsB | + %+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %collocation + %----------- + % + % + % + %Fixed-step implicit Runge-Kutta integrator ODE/DAE integrator based on + %collocation schemes + % + %The method is still under development + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| collocation_sch | OT_STRING | "radau" | Collocation | + %| eme | | | scheme (radau|l | + %| | | | egendre) | + %+-----------------+-----------------+-----------------+-----------------+ + %| implicit_solver | OT_STRING | GenericType() | An implicit | + %| | | | function solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| implicit_solver | OT_DICT | GenericType() | Options to be | + %| _options | | | passed to the | + %| | | | NLP Solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| interpolation_o | OT_INTEGER | 3 | Order of the | + %| rder | | | interpolating | + %| | | | polynomials | + %+-----------------+-----------------+-----------------+-----------------+ + %| number_of_finit | OT_INTEGER | 20 | Number of | + %| e_elements | | | finite elements | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %oldcollocation + %-------------- + % + % + % + %Collocation integrator ODE/DAE integrator based on collocation + % + %The method is still under development + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| collocation_sch | OT_STRING | "radau" | Collocation | + %| eme | | | scheme (radau|l | + %| | | | egendre) | + %+-----------------+-----------------+-----------------+-----------------+ + %| expand_f | OT_BOOLEAN | false | Expand the | + %| | | | ODE/DAE | + %| | | | residual | + %| | | | function in an | + %| | | | SX graph | + %+-----------------+-----------------+-----------------+-----------------+ + %| expand_q | OT_BOOLEAN | false | Expand the | + %| | | | quadrature | + %| | | | function in an | + %| | | | SX graph | + %+-----------------+-----------------+-----------------+-----------------+ + %| hotstart | OT_BOOLEAN | true | Initialize the | + %| | | | trajectory at | + %| | | | the previous | + %| | | | solution | + %+-----------------+-----------------+-----------------+-----------------+ + %| implicit_solver | OT_STRING | GenericType() | An implicit | + %| | | | function solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| implicit_solver | OT_DICT | GenericType() | Options to be | + %| _options | | | passed to the | + %| | | | implicit solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| interpolation_o | OT_INTEGER | 3 | Order of the | + %| rder | | | interpolating | + %| | | | polynomials | + %+-----------------+-----------------+-----------------+-----------------+ + %| number_of_finit | OT_INTEGER | 20 | Number of | + %| e_elements | | | finite elements | + %+-----------------+-----------------+-----------------+-----------------+ + %| startup_integra | OT_STRING | GenericType() | An ODE/DAE | + %| tor | | | integrator that | + %| | | | can be used to | + %| | | | generate a | + %| | | | startup | + %| | | | trajectory | + %+-----------------+-----------------+-----------------+-----------------+ + %| startup_integra | OT_DICT | GenericType() | Options to be | + %| tor_options | | | passed to the | + %| | | | startup | + %| | | | integrator | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %rk -- + % + % + % + %Fixed-step explicit Runge-Kutta integrator for ODEs Currently implements + %RK4. + % + %The method is still under development + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| number_of_finit | OT_INTEGER | 20 | Number of | + %| e_elements | | | finite elements | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joel Andersson + %Diagrams + %-------- + % + % + % + %C++ includes: integrator.hpp + %Usage: Integrator () + % + methods + function varargout = clone(self,varargin) + %Clone. + % + % + %Usage: retval = clone () + % + %retval is of type Integrator. + + try + + if ~isa(self,'casadi.Integrator') + self = casadi.Integrator(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(961, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printStats(self,varargin) + %Print solver statistics. + % + % + %Usage: printStats () + % + + try + + if ~isa(self,'casadi.Integrator') + self = casadi.Integrator(self); + end + [varargout{1:nargout}] = casadiMEX(962, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = reset(self,varargin) + %Reset the forward problem Time will be set to t0 and state to + %input(INTEGRATOR_X0) + % + % + %Usage: reset () + % + + try + + [varargout{1:nargout}] = casadiMEX(963, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = integrate(self,varargin) + %Integrate forward until a specified time point. + % + % + %Usage: integrate (t_out) + % + %t_out is of type double. + + try + + [varargout{1:nargout}] = casadiMEX(964, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = resetB(self,varargin) + %Reset the backward problem. + % + %Time will be set to tf and backward state to input(INTEGRATOR_RX0) + % + % + %Usage: resetB () + % + + try + + [varargout{1:nargout}] = casadiMEX(965, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = integrateB(self,varargin) + %Integrate backward until a specified time point. + % + % + %Usage: integrateB (t_out) + % + %t_out is of type double. + + try + + [varargout{1:nargout}] = casadiMEX(966, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getAugmented(self,varargin) + %Generate a augmented DAE system with nfwd forward sensitivities and nadj + %adjoint sensitivities. + % + % + %Usage: retval = getAugmented (nfwd, nadj) + % + %nfwd is of type int. nadj is of type int. nfwd is of type int. nadj is of type int. retval is of type std::pair< casadi::Function,casadi::Function >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(970, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getDAE(self,varargin) + %Get the DAE. + % + % + %Usage: retval = getDAE () + % + %retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(971, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setStopTime(self,varargin) + %Set a stop time for the forward integration. + % + % + %Usage: setStopTime (tf) + % + %tf is of type double. + + try + + [varargout{1:nargout}] = casadiMEX(972, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = Integrator(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(974, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(975, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(967, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(968, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(969, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(973, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IterationCallback.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IterationCallback.m new file mode 100755 index 0000000..cb321da --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/IterationCallback.m @@ -0,0 +1,66 @@ +classdef IterationCallback < SwigRef + %C++ includes: functor.hpp + % + %Usage: IterationCallback () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = paren(self,varargin) + %Usage: retval = paren (fcn) + % + %fcn is of type Function. fcn is of type Function. retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1083, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function delete(self) + if self.swigPtr + casadiMEX(1084, self); + self.swigPtr=[]; + end + end + function self = IterationCallback(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + if strcmp(class(self),'director_basic.IterationCallback') + tmp = casadiMEX(1085, 0, varargin{:}); + else + tmp = casadiMEX(1085, self, varargin{:}); + end + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/KernelSum2D.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/KernelSum2D.m new file mode 100755 index 0000000..1df38a9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/KernelSum2D.m @@ -0,0 +1,316 @@ +classdef KernelSum2D < casadi.Function + %KernelSum2D + % + %Consider a dense matrix V. + % + %KernelSum computes + % + %F(V,X) = sum_i sum_j f ( [i;j], V(i,j), X) + % + %with X: [x;y] + % + %where the summation is taken for all entries (i,j) that are a distance r + %away from X. + % + %This function assumes that V is fixed: sensitivities with respect to it are + %not computed. + % + %This allows for improved speed of evaluation. + % + %Having V fixed is a common use case: V may be a large bitmap (observation), + %onto which a kernel is fitted. + % + %Summation does not occur outside the image. Runtime will not grow after + %distance r grows large enough to contian the whole image. + % + %Joris Gillis + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: kernel_sum_2d.hpp + %Usage: KernelSum2D () + % + methods + function self = KernelSum2D(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1142, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1143, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1141, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LEGENDRE.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LEGENDRE.m new file mode 100755 index 0000000..fd8aca8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LEGENDRE.m @@ -0,0 +1,7 @@ +function v = LEGENDRE() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 153); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LinearSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LinearSolver.m new file mode 100755 index 0000000..0089759 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LinearSolver.m @@ -0,0 +1,637 @@ +classdef LinearSolver < casadi.Function + %Base class for the linear solver classes. + % + %Solves the linear system A*X = B or A^T*X = B for X with A square and non- + %singular + % + %If A is structurally singular, an error will be thrown during init. If A is + %numerically singular, the prepare step will fail. + % + %The usual procedure to use LinearSolver is: init() + % + %set the first input (A) + % + %prepare() + % + %set the second input (b) + % + %solve() + % + %Repeat steps 4 and 5 to work with other b vectors. + % + %The method evaluate() combines the prepare() and solve() step and is + %therefore more expensive if A is invariant. + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::LinsolInput (LINSOL_NUM_IN = 2) [linsolIn] + % + %+-----------+-------+------------------------------------------------+ + %| Full name | Short | Description | + %+===========+=======+================================================+ + %| LINSOL_A | A | The square matrix A: sparse, (n x n). . | + %+-----------+-------+------------------------------------------------+ + %| LINSOL_B | B | The right-hand-side matrix b: dense, (n x m) . | + %+-----------+-------+------------------------------------------------+ + % + %>Output scheme: casadi::LinsolOutput (LINSOL_NUM_OUT = 1) [linsolOut] + % + %+-----------+-------+----------------------------------------------+ + %| Full name | Short | Description | + %+===========+=======+==============================================+ + %| LINSOL_X | X | Solution to the linear system of equations . | + %+-----------+-------+----------------------------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- csparsecholesky + % + %- csparse + % + %- lapacklu + % + %- lapackqr + % + %- symbolicqr + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %LinearSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %csparsecholesky + %--------------- + % + % + % + %LinearSolver with CSparseCholesky Interface + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %csparse + %------- + % + % + % + %LinearSolver with CSparse Interface + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %lapacklu + %-------- + % + % + % + %This class solves the linear system A.x=b by making an LU factorization of + %A: A = L.U, with L lower and U upper triangular + % + %>List of available options + % + %+-----------------------------+------------+---------+-------------+ + %| Id | Type | Default | Description | + %+=============================+============+=========+=============+ + %| allow_equilibration_failure | OT_BOOLEAN | false | | + %+-----------------------------+------------+---------+-------------+ + %| equilibration | OT_BOOLEAN | true | | + %+-----------------------------+------------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %lapackqr + %-------- + % + % + % + %This class solves the linear system A.x=b by making an QR factorization of + %A: A = Q.R, with Q orthogonal and R upper triangular + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %symbolicqr + %---------- + % + % + % + %LinearSolver based on QR factorization with sparsity pattern based + %reordering without partial pivoting + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| codegen | OT_BOOLEAN | false | C-code | + %| | | | generation | + %+-----------------+-----------------+-----------------+-----------------+ + %| compiler | OT_STRING | "gcc -fPIC -O2" | Compiler | + %| | | | command to be | + %| | | | used for | + %| | | | compiling | + %| | | | generated code | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joel Andersson + %Diagrams + %-------- + % + % + % + %C++ includes: linear_solver.hpp + %Usage: LinearSolver () + % + methods + function varargout = prepare(self,varargin) + %Factorize the matrix. + % + % + %Usage: prepare () + % + + try + + [varargout{1:nargout}] = casadiMEX(942, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = solve(self,varargin) + %> void LinearSolver.solve(bool transpose=false) + %------------------------------------------------------------------------ + % + %Solve the system of equations, internal vector. + % + %> MX LinearSolver.solve(MX A, MX B, bool transpose=false) + %------------------------------------------------------------------------ + % + %Create a solve node. + % + % + %Usage: retval = solve (A, B, transpose = false) + % + %A is of type MX. B is of type MX. transpose is of type bool. A is of type MX. B is of type MX. transpose is of type bool. retval is of type MX. + + try + + [varargout{1:nargout}] = casadiMEX(943, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = prepared(self,varargin) + %Check if prepared. + % + % + %Usage: retval = prepared () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.LinearSolver') + self = casadi.LinearSolver(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(944, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getFactorizationSparsity(self,varargin) + %Obtain a symbolic Cholesky factorization Only for Cholesky solvers. + % + % + %Usage: retval = getFactorizationSparsity (transpose = false) + % + %transpose is of type bool. transpose is of type bool. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.LinearSolver') + self = casadi.LinearSolver(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(945, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getFactorization(self,varargin) + %Obtain a numeric Cholesky factorization Only for Cholesky solvers. + % + % + %Usage: retval = getFactorization (transpose = false) + % + %transpose is of type bool. transpose is of type bool. retval is of type DMatrix. + + try + + if ~isa(self,'casadi.LinearSolver') + self = casadi.LinearSolver(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(946, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = LinearSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(950, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(951, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(947, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(948, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(949, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LpSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LpSolver.m new file mode 100755 index 0000000..8e69fe6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LpSolver.m @@ -0,0 +1,460 @@ +classdef LpSolver < casadi.Function + %LpSolver. + % + %Solves the following linear problem: + % + % + % + %:: + % + % min c' x + % x + % + % subject to + % LBA <= A x <= UBA + % LBX <= x <= UBX + % + % with x ( n x 1) + % c ( n x 1 ) + % A sparse matrix ( nc x n) + % LBA, UBA dense vector (nc x 1) + % LBX, UBX dense vector (n x 1) + % + % n: number of decision variables (x) + % nc: number of constraints (A) + % + % + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::LpSolverInput (LP_SOLVER_NUM_IN = 6) [lpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| LP_SOLVER_C | c | The vector c: dense (n | + %| | | x 1) . | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_A | a | The matrix A: sparse, | + %| | | (nc x n) - product | + %| | | with x must be dense. | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_LBA | lba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_UBA | uba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_LBX | lbx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_UBX | ubx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::LpSolverOutput (LP_SOLVER_NUM_OUT = 4) [lpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| LP_SOLVER_X | x | The primal solution . | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_COST | cost | The optimal cost . | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to | + %| | | linear bounds . | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- qp + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %LpSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %qp -- + % + % + % + %Solve LPs using a QpSolver + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %>List of available stats + % + %+-----------------+ + %| Id | + %+=================+ + %| qp_solver_stats | + %+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joris Gillis + %Diagrams + %-------- + % + % + % + %C++ includes: lp_solver.hpp + %Usage: LpSolver () + % + methods + function self = LpSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1023, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1024, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1019, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1020, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1021, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1022, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LrDleSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LrDleSolver.m new file mode 100755 index 0000000..9bc6ed3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LrDleSolver.m @@ -0,0 +1,583 @@ +classdef LrDleSolver < casadi.Function + %Base class for Low-rank Discrete Lyapunov Equation Solvers. + % + % + % + %:: + % + % A in R^(n x n) + % V in S^m + % C in R^(n x m) + % Hi in R^(n x Hsi) + % + % + % + % + %finds $P$ that satisfies: + % + % + % + %:: + % + % P = A P A' + C V C' + % + % + % + % + %and outputs + % + %Yi = Hi^T P Hi + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::LR_DLEInput (LR_DLE_NUM_IN = 4) [lrdleIn] + % + %+-----------+-------+----------------------------------------+ + %| Full name | Short | Description | + %+===========+=======+========================================+ + %| LR_DLE_A | a | A matrix . | + %+-----------+-------+----------------------------------------+ + %| LR_DLE_V | v | V matrix . | + %+-----------+-------+----------------------------------------+ + %| LR_DLE_C | c | C matrix . | + %+-----------+-------+----------------------------------------+ + %| LR_DLE_H | h | H matrix: horizontal stack of all Hi . | + %+-----------+-------+----------------------------------------+ + % + %>Output scheme: casadi::LR_DLEOutput (LR_DLE_NUM_OUT = 1) [lrdleOut] + % + %+-----------+-------+---------------------------------+ + %| Full name | Short | Description | + %+===========+=======+=================================+ + %| LR_DLE_Y | y | Y matrix, block diagonal form . | + %+-----------+-------+---------------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| eps_unstable | OT_REAL | 0.000 | A margin for | casadi::LrDl | + %| | | | unstability | eInternal | + %| | | | detection | | + %+--------------+--------------+--------------+--------------+--------------+ + %| error_unstab | OT_BOOLEAN | false | Throw an | casadi::LrDl | + %| le | | | exception | eInternal | + %| | | | when it is | | + %| | | | detected | | + %| | | | that | | + %| | | | Product(A_i, | | + %| | | | i=N..1) has | | + %| | | | eigenvalues | | + %| | | | greater than | | + %| | | | 1-eps_unstab | | + %| | | | le | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| pos_def | OT_BOOLEAN | false | Assume P | casadi::LrDl | + %| | | | positive | eInternal | + %| | | | definite | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- fixed_smith + % + %- dle + % + %- lrdple + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %LrDleSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %fixed_smith + %----------- + % + % + % + %Solving the Discrete Lyapunov Equations with a regular LinearSolver + % + %>List of available options + % + %+------+------------+---------+----------------------------+ + %| Id | Type | Default | Description | + %+======+============+=========+============================+ + %| iter | OT_INTEGER | 100 | Number of Smith iterations | + %+------+------------+---------+----------------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %dle + %--- + % + % + % + %Solving the Discrete Lyapunov Equations with a Low-rank Discrete Lyapunov + %Equations solver + % + %Solving the Low-Rank Discrete Lyapunov Equations with a regular Discrete + %Lyapunov Equations solver + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %lrdple + %------ + % + % + % + %Solving the low-rank Periodic Discrete Lyapunov Equations with a low- rank + %discrete Lyapunov solver + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| dple | OT_DICT | GenericType() | Options to be | + %| | | | passed to the | + %| | | | DPLE solver. | + %+-----------------+-----------------+-----------------+-----------------+ + %| dple_solver | OT_STRING | GenericType() | User-defined | + %| | | | DPLE solver | + %| | | | class. | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joris Gillis + %Diagrams + %-------- + % + % + % + %C++ includes: lr_dle_solver.hpp + %Usage: LrDleSolver () + % + methods + function varargout = clone(self,varargin) + %Clone. + % + % + %Usage: retval = clone () + % + %retval is of type LrDleSolver. + + try + + if ~isa(self,'casadi.LrDleSolver') + self = casadi.LrDleSolver(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1118, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printStats(self,varargin) + %Print solver statistics. + % + % + %Usage: printStats () + % + + try + + if ~isa(self,'casadi.LrDleSolver') + self = casadi.LrDleSolver(self); + end + [varargout{1:nargout}] = casadiMEX(1119, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = LrDleSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1125, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1126, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1120, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1121, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1122, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1123, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparsity(varargin) + %Usage: retval = sparsity (st, Hs = std::vector< int >()) + % + %st is of type std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > > const &. Hs is of type std::vector< int,std::allocator< int > > const &. st is of type std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > > const &. Hs is of type std::vector< int,std::allocator< int > > const &. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1124, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LrDpleSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LrDpleSolver.m new file mode 100755 index 0000000..982251e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/LrDpleSolver.m @@ -0,0 +1,543 @@ +classdef LrDpleSolver < casadi.Function + %Base class for Discrete Periodic Lyapunov Equation Solvers. + % + %Given matrices $A_k$ and symmetric $V_k, k = 0..K-1$ + % + % + % + %:: + % + % A_k in R^(n x n) + % V_k in R^n + % + % + % + % + %provides all of $P_k$ that satisfy: + % + % + % + %:: + % + % P_0 = A_(K-1)*P_(K-1)*A_(K-1)' + V_k + % P_k+1 = A_k*P_k*A_k' + V_k for k = 1..K-1 + % + % + % + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::LR_DPLEInput (LR_DPLE_NUM_IN = 4) [lrdpleIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| LR_DPLE_A | a | A matrices (horzcat | + %| | | when const_dim, | + %| | | diagcat otherwise) . | + %+------------------------+------------------------+------------------------+ + %| LR_DPLE_V | v | V matrices (horzcat | + %| | | when const_dim, | + %| | | diagcat otherwise) . | + %+------------------------+------------------------+------------------------+ + %| LR_DPLE_C | c | C matrix . | + %+------------------------+------------------------+------------------------+ + %| LR_DPLE_H | h | H matrix: horizontal | + %| | | stack of all Hi . | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::LR_DPLEOutput (LR_DPLE_NUM_OUT = 1) [lrdpleOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| LR_DPLE_Y | y | Lyapunov matrix | + %| | | (horzcat when | + %| | | const_dim, diagcat | + %| | | otherwise) (Cholesky | + %| | | of P if pos_def) . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| const_dim | OT_BOOLEAN | true | Assume | casadi::LrDp | + %| | | | constant | leInternal | + %| | | | dimension of | | + %| | | | P | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| eps_unstable | OT_REAL | 0.000 | A margin for | casadi::LrDp | + %| | | | unstability | leInternal | + %| | | | detection | | + %+--------------+--------------+--------------+--------------+--------------+ + %| error_unstab | OT_BOOLEAN | false | Throw an | casadi::LrDp | + %| le | | | exception | leInternal | + %| | | | when it is | | + %| | | | detected | | + %| | | | that | | + %| | | | Product(A_i, | | + %| | | | i=N..1) has | | + %| | | | eigenvalues | | + %| | | | greater than | | + %| | | | 1-eps_unstab | | + %| | | | le | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| pos_def | OT_BOOLEAN | false | Assume P | casadi::LrDp | + %| | | | positive | leInternal | + %| | | | definite | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- lifting + % + %- dple + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %LrDpleSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %lifting + %------- + % + % + % + %Solving the Discrete Periodic Lyapunov Equations by lifting the entire + %period to a single Discrete Lyapunov Equation + % + %>List of available options + % + %+------+-----------+---------+-----------------------------------+ + %| Id | Type | Default | Description | + %+======+===========+=========+===================================+ + %| form | OT_STRING | "A" | The form of the lifting (A:0|B:1) | + %+------+-----------+---------+-----------------------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %dple + %---- + % + % + % + %Solving the Low-Rank Discrete Lyapunov Equations with a Low-Rank Discrete + %Lyapunov Equations Solver + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joris Gillis + %Diagrams + %-------- + % + % + % + %C++ includes: lr_dple_solver.hpp + %Usage: LrDpleSolver () + % + methods + function varargout = clone(self,varargin) + %Clone. + % + % + %Usage: retval = clone () + % + %retval is of type LrDpleSolver. + + try + + if ~isa(self,'casadi.LrDpleSolver') + self = casadi.LrDpleSolver(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1110, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printStats(self,varargin) + %Print solver statistics. + % + % + %Usage: printStats () + % + + try + + if ~isa(self,'casadi.LrDpleSolver') + self = casadi.LrDpleSolver(self); + end + [varargout{1:nargout}] = casadiMEX(1111, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = LrDpleSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1116, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1117, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1112, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1113, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1114, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1115, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MX.m new file mode 100755 index 0000000..75c0b93 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MX.m @@ -0,0 +1,1732 @@ +classdef MX < casadi.ExpMX & casadi.GenMX & casadi.SharedObject + %MX - Matrix expression. + % + %The MX class is used to build up trees made up from MXNodes. It is a more + %general graph representation than the scalar expression, SX, and much less + %efficient for small objects. On the other hand, the class allows much more + %general operations than does SX, in particular matrix valued operations and + %calls to arbitrary differentiable functions. + % + %The MX class is designed to have identical syntax with the Matrix<> template + %class, and uses Matrix as its internal representation of the values + %at a node. By keeping the syntaxes identical, it is possible to switch from + %one class to the other, as well as inlining MX functions to SXElement + %functions. + % + %Note that an operation is always "lazy", making a matrix multiplication + %will create a matrix multiplication node, not perform the actual + %multiplication. + % + %Joel Andersson + % + %C++ includes: mx.hpp + %Usage: MX () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function self = MX(varargin) + self@casadi.ExpMX(SwigRef.Null); + self@casadi.GenMX(SwigRef.Null); + self@casadi.SharedObject(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(752, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(753, self); + self.swigPtr=[]; + end + end + function varargout = nonzero(self,varargin) + %Returns the truth value of an MX expression. + % + % + %Usage: retval = nonzero () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(754, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparsity(self,varargin) + %Get an owning reference to the sparsity pattern. + % + % + %Usage: retval = sparsity () + % + %retval is of type Sparsity. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(755, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = erase(self,varargin) + %> void MX.erase([int ] rr, [int ] cc, bool ind1=false) + %------------------------------------------------------------------------ + % + %Erase a submatrix (leaving structural zeros in its place) Erase rows and/or + %columns of a matrix. + % + %> void MX.erase([int ] rr, bool ind1=false) + %------------------------------------------------------------------------ + % + %Erase a submatrix (leaving structural zeros in its place) Erase elements of + %a matrix. + % + % + %Usage: erase (rr, ind1 = false) + % + %rr is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(756, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = enlarge(self,varargin) + %Enlarge matrix Make the matrix larger by inserting empty rows and columns, + %keeping the existing non-zeros. + % + % + %Usage: enlarge (nrow, ncol, rr, cc, ind1 = false) + % + %nrow is of type int. ncol is of type int. rr is of type std::vector< int,std::allocator< int > > const &. cc is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(757, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = uminus(self,varargin) + %Usage: retval = uminus () + % + %retval is of type MX. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(758, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getDep(self,varargin) + %Get the nth dependency as MX. + % + % + %Usage: retval = getDep (ch = 0) + % + %ch is of type int. ch is of type int. retval is of type MX. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(759, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nOut(self,varargin) + %Number of outputs. + % + % + %Usage: retval = nOut () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(760, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOutput(self,varargin) + %Get an output. + % + % + %Usage: retval = getOutput (oind = 0) + % + %oind is of type int. oind is of type int. retval is of type MX. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(761, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getNdeps(self,varargin) + %Get the number of dependencies of a binary SXElement. + % + % + %Usage: retval = getNdeps () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(762, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getName(self,varargin) + %Get the name. + % + % + %Usage: retval = getName () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(763, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getValue(self,varargin) + %Get the value (only for scalar constant nodes) + % + % + %Usage: retval = getValue () + % + %retval is of type double. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(764, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getMatrixValue(self,varargin) + %Get the value (only for constant nodes) + % + % + %Usage: retval = getMatrixValue () + % + %retval is of type DMatrix. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(765, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isSymbolic(self,varargin) + %Check if symbolic. + % + % + %Usage: retval = isSymbolic () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(766, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isConstant(self,varargin) + %Check if constant. + % + % + %Usage: retval = isConstant () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(767, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isEvaluation(self,varargin) + %Check if evaluation. + % + % + %Usage: retval = isEvaluation () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(768, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isEvaluationOutput(self,varargin) + %Check if evaluation output. + % + % + %Usage: retval = isEvaluationOutput () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(769, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getEvaluationOutput(self,varargin) + %Get the index of evaluation output - only valid when isEvaluationoutput() is + %true. + % + % + %Usage: retval = getEvaluationOutput () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(770, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isOperation(self,varargin) + %Is it a certain operation. + % + % + %Usage: retval = isOperation (op) + % + %op is of type int. op is of type int. retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(771, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isMultiplication(self,varargin) + %Check if multiplication. + % + % + %Usage: retval = isMultiplication () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(772, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isCommutative(self,varargin) + %Check if commutative operation. + % + % + %Usage: retval = isCommutative () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(773, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isNorm(self,varargin) + %Check if norm. + % + % + %Usage: retval = isNorm () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(774, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isValidInput(self,varargin) + %Check if matrix can be used to define function inputs. Valid inputs for + %MXFunctions are combinations of Reshape, concatenations and SymbolicMX. + % + % + %Usage: retval = isValidInput () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(775, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = numPrimitives(self,varargin) + %Get the number of symbolic primitive Assumes isValidInput() returns true. + % + % + %Usage: retval = numPrimitives () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(776, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getPrimitives(self,varargin) + %Get symbolic primitives. + % + % + %Usage: retval = getPrimitives () + % + %retval is of type std::vector< casadi::MX,std::allocator< casadi::MX > >. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(777, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = splitPrimitives(self,varargin) + %Split up an expression along symbolic primitives. + % + % + %Usage: retval = splitPrimitives (x) + % + %x is of type MX. x is of type MX. retval is of type std::vector< casadi::MX,std::allocator< casadi::MX > >. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(778, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = joinPrimitives(self,varargin) + %Join an expression along symbolic primitives. + % + % + %Usage: retval = joinPrimitives (v) + % + %v is of type std::vector< casadi::MX,std::allocator< casadi::MX > > &. v is of type std::vector< casadi::MX,std::allocator< casadi::MX > > &. retval is of type MX. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(779, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasDuplicates(self,varargin) + %[INTERNAL] Detect + %duplicate symbolic expressions If there are symbolic primitives appearing + %more than once, the function will return true and the names of the duplicate + %expressions will be printed to userOut(). Note: Will mark the + %node using MX::setTemp. Make sure to call resetInput() after usage. + % + % + %Usage: retval = hasDuplicates () + % + %retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(780, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = resetInput(self,varargin) + %[INTERNAL] Reset the marker + %for an input expression. + % + % + %Usage: resetInput () + % + + try + + [varargout{1:nargout}] = casadiMEX(781, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isIdentity(self,varargin) + %check if identity + % + % + %Usage: retval = isIdentity () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(782, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isZero(self,varargin) + %check if zero (note that false negative answers are possible) + % + % + %Usage: retval = isZero () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(783, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isOne(self,varargin) + %check if zero (note that false negative answers are possible) + % + % + %Usage: retval = isOne () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(784, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isMinusOne(self,varargin) + %check if zero (note that false negative answers are possible) + % + % + %Usage: retval = isMinusOne () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(785, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isTranspose(self,varargin) + %Is the expression a transpose? + % + % + %Usage: retval = isTranspose () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(786, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isRegular(self,varargin) + %Checks if expression does not contain NaN or Inf. + % + % + %Usage: retval = isRegular () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(787, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = numFunctions(self,varargin) + %Number of functions. + % + % + %Usage: retval = numFunctions () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(788, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getFunction(self,varargin) + %Get function. + % + % + %Usage: retval = getFunction (i = 0) + % + %i is of type int. i is of type int. retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(789, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isBinary(self,varargin) + %Is binary operation. + % + % + %Usage: retval = isBinary () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(790, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isUnary(self,varargin) + %Is unary operation. + % + % + %Usage: retval = isUnary () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(791, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOp(self,varargin) + %Get operation type. + % + % + %Usage: retval = getOp () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(792, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getTemp(self,varargin) + %[INTERNAL] Get the temporary + %variable + % + % + %Usage: retval = getTemp () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(793, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setTemp(self,varargin) + %[INTERNAL] Set the temporary + %variable. + % + % + %Usage: setTemp (t) + % + %t is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(794, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = get(self,varargin) + %> void MX.get(MX &output_m, bool ind1, Slice rr) const + % + %> void MX.get(MX &output_m, bool ind1, IMatrix rr) const + % + %> void MX.get(MX &output_m, bool ind1, Sparsity sp) const + %------------------------------------------------------------------------ + % + %Get a submatrix, single argument + % + %> void MX.get(MX &output_m, bool ind1, Slice rr, Slice cc) const + % + %> void MX.get(MX &output_m, bool ind1, Slice rr, IMatrix cc) const + % + %> void MX.get(MX &output_m, bool ind1, IMatrix rr, Slice cc) const + % + %> void MX.get(MX &output_m, bool ind1, IMatrix rr, IMatrix cc) const + %------------------------------------------------------------------------ + % + %Get a submatrix, two arguments + % + % + %Usage: get (ind1, rr, cc) + % + %ind1 is of type bool. rr is of type IMatrix. cc is of type IMatrix. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(800, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = set(self,varargin) + %> void MX.set(MX m, bool ind1, Slice rr) + % + %> void MX.set(MX m, bool ind1, IMatrix rr) + % + %> void MX.set(MX m, bool ind1, Sparsity sp) + %------------------------------------------------------------------------ + % + %Set a submatrix, single argument + % + % + %Usage: set (m, ind1, rr, cc) + % + %m is of type MX. ind1 is of type bool. rr is of type IMatrix. cc is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(801, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getNZ(self,varargin) + %Get a set of nonzeros + % + % + %Usage: getNZ (ind1, kk) + % + %ind1 is of type bool. kk is of type IMatrix. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(802, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setNZ(self,varargin) + %Set a set of nonzeros + % + % + %Usage: setNZ (m, ind1, kk) + % + %m is of type MX. ind1 is of type bool. kk is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(803, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = append(self,varargin) + %[DEPRECATED] Append a matrix vertically (NOTE: only efficient if vector) + % + % + %Usage: append (y) + % + %y is of type MX. + + try + + [varargout{1:nargout}] = casadiMEX(804, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = appendColumns(self,varargin) + %[DEPRECATED] Append a matrix horizontally + % + % + %Usage: appendColumns (y) + % + %y is of type MX. + + try + + [varargout{1:nargout}] = casadiMEX(805, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printme(self,varargin) + %Usage: retval = printme (y) + % + %y is of type MX. y is of type MX. retval is of type MX. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(806, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = attachAssert(self,varargin) + %returns itself, but with an assertion attached + % + %If y does not evaluate to 1, a runtime error is raised + % + % + %Usage: retval = attachAssert (y, fail_message = "") + % + %y is of type MX. fail_message is of type std::string const &. y is of type MX. fail_message is of type std::string const &. retval is of type MX. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(807, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = monitor(self,varargin) + %Monitor an expression Returns itself, but with the side effect of printing + %the nonzeros along with a comment. + % + % + %Usage: retval = monitor (comment) + % + %comment is of type std::string const &. comment is of type std::string const &. retval is of type MX. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(808, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = makeDense(self,varargin) + %[DEPRECATED: Use densify instead] Make the matrix dense + % + % + %Usage: makeDense (val = 0) + % + %val is of type MX. + + try + + [varargout{1:nargout}] = casadiMEX(809, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = lift(self,varargin) + %[DEPRECATED] Lift an expression + % + % + %Usage: lift (x_guess) + % + %x_guess is of type MX. + + try + + [varargout{1:nargout}] = casadiMEX(810, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = T(self,varargin) + %Transpose the matrix. + % + % + %Usage: retval = T () + % + %retval is of type MX. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(811, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = mapping(self,varargin) + %Get an IMatrix representation of a GetNonzeros or SetNonzeros node. + % + % + %Usage: retval = mapping () + % + %retval is of type IMatrix. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(812, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = paren(self,varargin) + %Usage: retval = paren (rr, cc) + % + %rr is of type IMatrix. cc is of type IMatrix. rr is of type IMatrix. cc is of type IMatrix. retval is of type MX. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(816, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = paren_asgn(self,varargin) + %Usage: paren_asgn (m, rr, cc) + % + %m is of type MX. rr is of type IMatrix. cc is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(817, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = brace(self,varargin) + %Usage: retval = brace (rr) + % + %rr is of type IMatrix. rr is of type IMatrix. retval is of type MX. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(818, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setbrace(self,varargin) + %Usage: setbrace (m, rr) + % + %m is of type MX. rr is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(819, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = end(self,varargin) + %Usage: retval = end (i, n) + % + %i is of type int. n is of type int. i is of type int. n is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(820, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ctranspose(self,varargin) + %Usage: retval = ctranspose () + % + %retval is of type MX. + + try + + if ~isa(self,'casadi.MX') + self = casadi.MX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(821, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = find(varargin) + %Find first nonzero If failed, returns the number of rows. + % + % + %Usage: retval = find (x) + % + %x is of type MX. x is of type MX. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(822, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + methods(Static) + function varargout = binary(varargin) + %Create nodes by their ID. + % + % + %Usage: retval = binary (op, x, y) + % + %op is of type int. x is of type MX. y is of type MX. op is of type int. x is of type MX. y is of type MX. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(795, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = unary(varargin) + %Create nodes by their ID. + % + % + %Usage: retval = unary (op, x) + % + %op is of type int. x is of type MX. op is of type int. x is of type MX. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(796, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inf(varargin) + %create a matrix with all inf + % + % + %Usage: retval = inf (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(797, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nan(varargin) + %create a matrix with all nan + % + % + %Usage: retval = nan (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(798, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eye(varargin) + %Usage: retval = eye (ncol) + % + %ncol is of type int. ncol is of type int. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(799, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setEqualityCheckingDepth(varargin) + %Usage: setEqualityCheckingDepth (eq_depth = 1) + % + %eq_depth is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(813, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getEqualityCheckingDepth(varargin) + %Usage: retval = getEqualityCheckingDepth () + % + %retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(814, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(815, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MXFunction.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MXFunction.m new file mode 100755 index 0000000..ff51390 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MXFunction.m @@ -0,0 +1,520 @@ +classdef MXFunction < casadi.Function + %General function mapping from/to MX. + % + %Joel Andersson + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: mx_function.hpp + %Usage: MXFunction () + % + methods + function varargout = inputExpr(self,varargin) + %> const MX MXFunction.inputExpr(int ind) const + %------------------------------------------------------------------------ + % + %Get function input. + % + %> [MX] MXFunction.inputExpr() const + %------------------------------------------------------------------------ + % + %Get all function inputs. + % + % + %Usage: retval = inputExpr () + % + %retval is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const. + + try + + if ~isa(self,'casadi.MXFunction') + self = casadi.MXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(923, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = outputExpr(self,varargin) + %> const MX MXFunction.outputExpr(int ind) const + %------------------------------------------------------------------------ + % + %Get function output. + % + %> [MX] MXFunction.outputExpr() const + %------------------------------------------------------------------------ + % + %Get all function outputs. + % + % + %Usage: retval = outputExpr () + % + %retval is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const. + + try + + if ~isa(self,'casadi.MXFunction') + self = casadi.MXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(924, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = countNodes(self,varargin) + %Number of nodes in the algorithm. + % + % + %Usage: retval = countNodes () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.MXFunction') + self = casadi.MXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(925, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = jac(self,varargin) + %Jacobian via source code transformation. + % + % + %Usage: retval = jac (iname, oname, compact = false, symmetric = false) + % + %iname is of type std::string const &. oname is of type std::string const &. compact is of type bool. symmetric is of type bool. iname is of type std::string const &. oname is of type std::string const &. compact is of type bool. symmetric is of type bool. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(927, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = grad(self,varargin) + %Gradient via source code transformation. + % + % + %Usage: retval = grad (iname, oname) + % + %iname is of type std::string const &. oname is of type std::string const &. iname is of type std::string const &. oname is of type std::string const &. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(928, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = tang(self,varargin) + %Tangent via source code transformation. + % + % + %Usage: retval = tang (iname, oname) + % + %iname is of type std::string const &. oname is of type std::string const &. iname is of type std::string const &. oname is of type std::string const &. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(929, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = expand(self,varargin) + %Expand the matrix valued graph into a scalar valued graph. + % + % + %Usage: retval = expand (inputv = std::vector< casadi::SX >()) + % + %inputv is of type std::vector< casadi::SX,std::allocator< casadi::SX > > const &. inputv is of type std::vector< casadi::SX,std::allocator< casadi::SX > > const &. retval is of type SXFunction. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(930, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getFree(self,varargin) + %Get all the free variables of the function. + % + % + %Usage: retval = getFree () + % + %retval is of type std::vector< casadi::MX,std::allocator< casadi::MX > >. + + try + + if ~isa(self,'casadi.MXFunction') + self = casadi.MXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(931, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = generateLiftingFunctions(self,varargin) + %[INTERNAL] Extract the functions needed for the Lifted Newton method. + % + % + %Usage: generateLiftingFunctions (OUTPUT, OUTPUT) + % + %OUTPUT is of type MXFunction. OUTPUT is of type MXFunction. + + try + + [varargout{1:nargout}] = casadiMEX(932, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = MXFunction(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(933, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(934, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(926, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/M_PI.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/M_PI.m new file mode 100755 index 0000000..9b95dc1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/M_PI.m @@ -0,0 +1,7 @@ +function v = M_PI() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 62); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Map.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Map.m new file mode 100755 index 0000000..a4f228b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Map.m @@ -0,0 +1,306 @@ +classdef Map < casadi.Function + %Map Joris Gillis + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| parallelizat | OT_STRING | "serial" | Computationa | casadi::MapR | + %| ion | | | l strategy | educe | + %| | | | for parallel | | + %| | | | ization (ser | | + %| | | | ial|openmp) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| reduced_inpu | OT_INTEGERVE | GenericType( | Reduction | casadi::MapR | + %| ts | CTOR | ) | for certain | educe | + %| | | | inputs | | + %+--------------+--------------+--------------+--------------+--------------+ + %| reduced_outp | OT_INTEGERVE | GenericType( | Reduction | casadi::MapR | + %| uts | CTOR | ) | for certain | educe | + %| | | | outputs | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: map.hpp + %Usage: Map () + % + methods + function self = Map(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1136, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1137, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1135, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MapAccum.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MapAccum.m new file mode 100755 index 0000000..7543fc1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MapAccum.m @@ -0,0 +1,337 @@ +classdef MapAccum < casadi.Function + %MapAccum class. + % + %Consider a function: f(x, u) -> xp, y + % + %MapAccum will evaluate this function repeatedly, feeding the output back to + %the input: + % + % + % + %:: + % + % x1, y0 <- f(x0, u0) + % x2, y1 <- f(x1, u1) + % x3, y2 <- f(x2, u2) + % + % + % + % + %The inputs to MapAccum(f) are in this case: x0 + % + %[u0 u1 u2] The outputs are: + % + %[x1 x2 x3] + % + %[y0 y1 y2] + % + %This class treats the general case: n repetitions + % + %any number of accumulated inputs (x) + % + %any number of regular inputs (u) + % + %a boolean list input_accum flags which inputs are accumalated. + % + %An index list output_accum indicates the indices of the outputs that are fed + %back to the inputs. + % + %This implementation is optimized for speed. There is a penalty in memory: + %the entire accumulator history is an output. This allows the forward mode to + %use this history, instead of recreating the accumulator. + % + %In reverse mode, you would need the history anyway. + % + %For a memory-optimized implementation, see Fold. + % + %Joris Gillis + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: mapaccum.hpp + %Usage: MapAccum () + % + methods + function self = MapAccum(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1139, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1140, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1138, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MatlabSwigIterator.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MatlabSwigIterator.m new file mode 100755 index 0000000..0fd0a2f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MatlabSwigIterator.m @@ -0,0 +1,311 @@ +classdef MatlabSwigIterator < SwigRef + %Usage: MatlabSwigIterator () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function delete(self) + if self.swigPtr + casadiMEX(5, self); + self.swigPtr=[]; + end + end + function varargout = value(self,varargin) + %Usage: retval = value () + % + %retval is of type mxArray *. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(6, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = incr(self,varargin) + %Usage: retval = incr (n = 1) + % + %n is of type size_t. n is of type size_t. retval is of type MatlabSwigIterator. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(7, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = decr(self,varargin) + %Usage: retval = decr (n = 1) + % + %n is of type size_t. n is of type size_t. retval is of type MatlabSwigIterator. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(8, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = distance(self,varargin) + %Usage: retval = distance (x) + % + %x is of type MatlabSwigIterator. x is of type MatlabSwigIterator. retval is of type ptrdiff_t. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(9, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = equal(self,varargin) + %Usage: retval = equal (x) + % + %x is of type MatlabSwigIterator. x is of type MatlabSwigIterator. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(10, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = copy(self,varargin) + %Usage: retval = copy () + % + %retval is of type MatlabSwigIterator. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(11, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = next(self,varargin) + %Usage: retval = next () + % + %retval is of type mxArray *. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(12, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = previous(self,varargin) + %Usage: retval = previous () + % + %retval is of type mxArray *. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(13, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = advance(self,varargin) + %Usage: retval = advance (n) + % + %n is of type ptrdiff_t. n is of type ptrdiff_t. retval is of type MatlabSwigIterator. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(14, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eq(self,varargin) + %Usage: retval = eq (x) + % + %x is of type MatlabSwigIterator. x is of type MatlabSwigIterator. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(15, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ne(self,varargin) + %Usage: retval = ne (x) + % + %x is of type MatlabSwigIterator. x is of type MatlabSwigIterator. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(16, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = TODOincr(self,varargin) + %Usage: retval = TODOincr () + % + %retval is of type MatlabSwigIterator. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(17, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = TODOdecr(self,varargin) + %Usage: retval = TODOdecr () + % + %retval is of type MatlabSwigIterator. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(18, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = plus(self,varargin) + %Usage: retval = plus (n) + % + %n is of type ptrdiff_t. n is of type ptrdiff_t. retval is of type MatlabSwigIterator. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(19, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = minus(self,varargin) + %Usage: retval = minus (x) + % + %x is of type MatlabSwigIterator. x is of type MatlabSwigIterator. retval is of type ptrdiff_t. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(20, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = MatlabSwigIterator(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + error('No matching constructor'); + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MatrixCommon.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MatrixCommon.m new file mode 100755 index 0000000..49ec4bd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/MatrixCommon.m @@ -0,0 +1,651 @@ +classdef MatrixCommon < SwigRef + %Usage: MatrixCommon () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = all(varargin) + %Returns true only if every element in the matrix is true. + % + % + %Usage: retval = all (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(481, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = any(varargin) + %Returns true only if any element in the matrix is true. + % + % + %Usage: retval = any (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(482, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = adj(varargin) + %Matrix adjoint. + % + % + %Usage: retval = adj (A) + % + %A is of type SX. A is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(483, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getMinor(varargin) + %Get the (i,j) minor matrix. + % + % + %Usage: retval = getMinor (x, i, j) + % + %x is of type SX. i is of type int. j is of type int. x is of type SX. i is of type int. j is of type int. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(484, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = cofactor(varargin) + %Get the (i,j) cofactor matrix. + % + % + %Usage: retval = cofactor (x, i, j) + % + %x is of type SX. i is of type int. j is of type int. x is of type SX. i is of type int. j is of type int. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(485, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = qr(varargin) + %QR factorization using the modified Gram-Schmidt algorithm More stable than + %the classical Gram-Schmidt, but may break down if the rows of A are nearly + %linearly dependent See J. Demmel: Applied Numerical Linear Algebra + %(algorithm 3.1.). Note that in SWIG, Q and R are returned by value. + % + % + %Usage: qr (A, output_Q, output_R) + % + %A is of type SX. output_Q is of type SX. output_R is of type SX. + + try + + [varargout{1:nargout}] = casadiMEX(486, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = chol(varargin) + %Obtain a Cholesky factorisation of a matrix Returns an upper triangular R + %such that R'R = A. Matrix A must be positive definite. + % + %At the moment, the algorithm is dense (Cholesky-Banachiewicz). There is an + %open ticket #1212 to make it sparse. + % + % + %Usage: retval = chol (A) + % + %A is of type SX. A is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(487, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = norm_inf_mul(varargin) + %Inf-norm of a Matrix-Matrix product. + % + % + %Usage: retval = norm_inf_mul (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(488, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparsify(varargin) + %Make a matrix sparse by removing numerical zeros. + % + % + %Usage: retval = sparsify (A, tol = 0) + % + %A is of type SX. tol is of type double. A is of type SX. tol is of type double. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(489, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = expand(varargin) + %Expand the expression as a weighted sum (with constant weights) + % + % + %Usage: expand (ex, output_weights, output_terms) + % + %ex is of type SX. output_weights is of type SX. output_terms is of type SX. + + try + + [varargout{1:nargout}] = casadiMEX(490, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = pw_const(varargin) + %Create a piecewise constant function Create a piecewise constant function + %with n=val.size() intervals. + % + %Inputs: + % + %Parameters: + %----------- + % + %t: a scalar variable (e.g. time) + % + %tval: vector with the discrete values of t at the interval transitions + %(length n-1) + % + %val: vector with the value of the function for each interval (length n) + % + % + %Usage: retval = pw_const (t, tval, val) + % + %t is of type SX. tval is of type SX. val is of type SX. t is of type SX. tval is of type SX. val is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(491, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = pw_lin(varargin) + %t a scalar variable (e.g. time) + % + %Create a piecewise linear function Create a piecewise linear function: + % + %Inputs: tval vector with the the discrete values of t (monotonically + %increasing) val vector with the corresponding function values (same length + %as tval) + % + % + %Usage: retval = pw_lin (t, tval, val) + % + %t is of type SX. tval is of type SX. val is of type SX. t is of type SX. tval is of type SX. val is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(492, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = heaviside(varargin) + %Heaviside function. + % + %\\[ \\begin {cases} H(x) = 0 & x<0 \\\\ H(x) = 1/2 & x=0 \\\\ + %H(x) = 1 & x>0 \\\\ \\end {cases} \\] + % + % + %Usage: retval = heaviside (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(493, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = rectangle(varargin) + %rectangle function + % + %\\[ \\begin {cases} \\Pi(x) = 1 & |x| < 1/2 \\\\ \\Pi(x) = 1/2 & + %|x| = 1/2 \\\\ \\Pi(x) = 0 & |x| > 1/2 \\\\ \\end {cases} \\] + % + %Also called: gate function, block function, band function, pulse function, + %window function + % + % + %Usage: retval = rectangle (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(494, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = triangle(varargin) + %triangle function + % + %\\[ \\begin {cases} \\Lambda(x) = 0 & |x| >= 1 \\\\ \\Lambda(x) + %= 1-|x| & |x| < 1 \\end {cases} \\] + % + % + %Usage: retval = triangle (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(495, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ramp(varargin) + %ramp function + % + %\\[ \\begin {cases} R(x) = 0 & x <= 1 \\\\ R(x) = x & x > 1 \\\\ + %\\end {cases} \\] + % + %Also called: slope function + % + % + %Usage: retval = ramp (x) + % + %x is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(496, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = gauss_quadrature(varargin) + %> array(DataType) gauss_quadrature(array(DataType) f, array(DataType) x, array(DataType) a, array(DataType) b, int order=5) + %------------------------------------------------------------------------ + % + %Integrate f from a to b using Gaussian quadrature with n points. + % + %> array(DataType) gauss_quadrature(array(DataType) f, array(DataType) x, array(DataType) a, array(DataType) b, int order, array(DataType) w) + %------------------------------------------------------------------------ + % + %Matrix adjoint. + % + % + %Usage: retval = gauss_quadrature (f, x, a, b, order, w) + % + %f is of type SX. x is of type SX. a is of type SX. b is of type SX. order is of type int. w is of type SX. f is of type SX. x is of type SX. a is of type SX. b is of type SX. order is of type int. w is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(497, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = jacobianTimesVector(varargin) + %Calculate the Jacobian and multiply by a vector from the right This is + %equivalent to mul(jacobian(ex, arg), v) or mul(jacobian(ex, arg).T, v) for + %transpose_jacobian set to false and true respectively. If contrast to these + %expressions, it will use directional derivatives which is typically (but not + %necessarily) more efficient if the complete Jacobian is not needed and v has + %few rows. + % + % + %Usage: retval = jacobianTimesVector (ex, arg, v, transpose_jacobian = false) + % + %ex is of type SX. arg is of type SX. v is of type SX. transpose_jacobian is of type bool. ex is of type SX. arg is of type SX. v is of type SX. transpose_jacobian is of type bool. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(498, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = taylor(varargin) + %univariate Taylor series expansion + % + %Calculate the Taylor expansion of expression 'ex' up to order 'order' with + %respect to variable 'x' around the point 'a' + % + %$(x)=f(a)+f'(a)(x-a)+f''(a)\\frac + %{(x-a)^2}{2!}+f'''(a)\\frac{(x-a)^3}{3!}+\\ldots$ + % + %Example usage: + % + %:: + % + %>> x + % + % + % + % + %Usage: retval = taylor (ex, x, a = 0, order = 1) + % + %ex is of type SX. x is of type SX. a is of type SX. order is of type int. ex is of type SX. x is of type SX. a is of type SX. order is of type int. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(499, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = mtaylor(varargin) + %> array(DataType) mtaylor(array(DataType) ex, array(DataType) x, array(DataType) a, int order=1) + %------------------------------------------------------------------------ + % + %multivariate Taylor series expansion + % + %Do Taylor expansions until the aggregated order of a term is equal to + %'order'. The aggregated order of $x^n y^m$ equals $n+m$. + % + %> array(DataType) mtaylor(array(DataType) ex, array(DataType) x, array(DataType) a, int order, [int ] order_contributions) + %------------------------------------------------------------------------ + % + %multivariate Taylor series expansion + % + %Do Taylor expansions until the aggregated order of a term is equal to + %'order'. The aggregated order of $x^n y^m$ equals $n+m$. + % + %The argument order_contributions can denote how match each variable + %contributes to the aggregated order. If x=[x, y] and order_contributions=[1, + %2], then the aggregated order of $x^n y^m$ equals $1n+2m$. + % + %Example usage + % + %$ \\sin(b+a)+\\cos(b+a)(x-a)+\\cos(b+a)(y-b) $ $ y+x-(x^3+3y x^2+3 y^2 + %x+y^3)/6 $ $ (-3 x^2 y-x^3)/6+y+x $ + % + % + %Usage: retval = mtaylor (ex, x, a, order, order_contributions) + % + %ex is of type SX. x is of type SX. a is of type SX. order is of type int. order_contributions is of type std::vector< int,std::allocator< int > > const &. ex is of type SX. x is of type SX. a is of type SX. order is of type int. order_contributions is of type std::vector< int,std::allocator< int > > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(500, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = poly_coeff(varargin) + %extracts polynomial coefficients from an expression + % + %Parameters: + %----------- + % + %ex: Scalar expression that represents a polynomial + % + %x: Scalar symbol that the polynomial is build up with + % + % + %Usage: retval = poly_coeff (ex, x) + % + %ex is of type SX. x is of type SX. ex is of type SX. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(501, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = poly_roots(varargin) + %Attempts to find the roots of a polynomial. + % + %This will only work for polynomials up to order 3 It is assumed that the + %roots are real. + % + % + %Usage: retval = poly_roots (p) + % + %p is of type SX. p is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(502, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eig_symbolic(varargin) + %Attempts to find the eigenvalues of a symbolic matrix This will only work + %for up to 3x3 matrices. + % + % + %Usage: retval = eig_symbolic (m) + % + %m is of type SX. m is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(503, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = MatrixCommon(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(504, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(505, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NEGATED_ALIAS.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NEGATED_ALIAS.m new file mode 100755 index 0000000..d2501c0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NEGATED_ALIAS.m @@ -0,0 +1,7 @@ +function v = NEGATED_ALIAS() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 166); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NO_ALIAS.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NO_ALIAS.m new file mode 100755 index 0000000..f2e5543 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NO_ALIAS.m @@ -0,0 +1,7 @@ +function v = NO_ALIAS() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 164); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NUM_BUILT_IN_OPS.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NUM_BUILT_IN_OPS.m new file mode 100755 index 0000000..7609136 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NUM_BUILT_IN_OPS.m @@ -0,0 +1,7 @@ +function v = NUM_BUILT_IN_OPS() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 144); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NlpBuilder.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NlpBuilder.m new file mode 100755 index 0000000..5637f70 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NlpBuilder.m @@ -0,0 +1,143 @@ +classdef NlpBuilder < casadi.PrintNlpBuilder + %A symbolic NLP representation. + % + %Joel Andersson + % + %C++ includes: nlp_builder.hpp + %Usage: NlpBuilder () + % + methods + function v = x(self) + v = casadiMEX(1224, self); + end + function v = f(self) + v = casadiMEX(1225, self); + end + function v = g(self) + v = casadiMEX(1226, self); + end + function v = x_lb(self) + v = casadiMEX(1227, self); + end + function v = x_ub(self) + v = casadiMEX(1228, self); + end + function v = g_lb(self) + v = casadiMEX(1229, self); + end + function v = g_ub(self) + v = casadiMEX(1230, self); + end + function v = x_init(self) + v = casadiMEX(1231, self); + end + function v = lambda_init(self) + v = casadiMEX(1232, self); + end + function varargout = parseNL(self,varargin) + %Parse an AMPL och PyOmo NL-file. + % + % + %Usage: parseNL (filename, options = casadi::Dict()) + % + %filename is of type std::string const &. options is of type casadi::Dict const &. + + try + + [varargout{1:nargout}] = casadiMEX(1233, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = print(self,varargin) + %Print a description of the object. + % + % + %Usage: print (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.NlpBuilder') + self = casadi.NlpBuilder(self); + end + [varargout{1:nargout}] = casadiMEX(1234, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = disp(self,varargin) + %Print a representation of the object. + % + % + %Usage: disp (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.NlpBuilder') + self = casadi.NlpBuilder(self); + end + [varargout{1:nargout}] = casadiMEX(1235, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = NlpBuilder(varargin) + self@casadi.PrintNlpBuilder(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1236, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1237, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NlpSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NlpSolver.m new file mode 100755 index 0000000..c617f7b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/NlpSolver.m @@ -0,0 +1,4936 @@ +classdef NlpSolver < casadi.Function + %NlpSolver. + % + %Solves the following parametric nonlinear program (NLP): + % + %:: + % + % min F(x, p) + % x + % + % subject to + % LBX <= x <= UBX + % LBG <= G(x, p) <= UBG + % p == P + % + % nx: number of decision variables + % ng: number of constraints + % np: number of parameters + % + % + % + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::NlpSolverInput (NLP_SOLVER_NUM_IN = 8) [nlpSolverIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| NLP_SOLVER_X0 | x0 | Decision variables, | + %| | | initial guess (nx x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_P | p | Value of fixed | + %| | | parameters (np x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LBX | lbx | Decision variables | + %| | | lower bound (nx x 1), | + %| | | default -inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_UBX | ubx | Decision variables | + %| | | upper bound (nx x 1), | + %| | | default +inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LBG | lbg | Constraints lower | + %| | | bound (ng x 1), | + %| | | default -inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_UBG | ubg | Constraints upper | + %| | | bound (ng x 1), | + %| | | default +inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_X0 | lam_x0 | Lagrange multipliers | + %| | | for bounds on X, | + %| | | initial guess (nx x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_G0 | lam_g0 | Lagrange multipliers | + %| | | for bounds on G, | + %| | | initial guess (ng x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::NlpSolverOutput (NLP_SOLVER_NUM_OUT = 6) [nlpSolverOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| NLP_SOLVER_X | x | Decision variables at | + %| | | the optimal solution | + %| | | (nx x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_F | f | Cost function value at | + %| | | the optimal solution | + %| | | (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_G | g | Constraints function | + %| | | at the optimal | + %| | | solution (ng x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_X | lam_x | Lagrange multipliers | + %| | | for bounds on X at the | + %| | | solution (nx x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_G | lam_g | Lagrange multipliers | + %| | | for bounds on G at the | + %| | | solution (ng x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_P | lam_p | Lagrange multipliers | + %| | | for bounds on P at the | + %| | | solution (np x 1) . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode c | + %| | | | according to | asadi::NlpSo | + %| | | | a given | lverInternal | + %| | | | recipe (low- | | + %| | | | level) (qp) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| eval_errors_ | OT_BOOLEAN | false | When errors | casadi::NlpS | + %| fatal | | | occur during | olverInterna | + %| | | | evaluation | l | + %| | | | of | | + %| | | | f,g,...,stop | | + %| | | | the | | + %| | | | iterations | | + %+--------------+--------------+--------------+--------------+--------------+ + %| expand | OT_BOOLEAN | false | Expand the | casadi::NlpS | + %| | | | NLP function | olverInterna | + %| | | | in terms of | l | + %| | | | scalar | | + %| | | | operations, | | + %| | | | i.e. MX->SX | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| grad_f | OT_FUNCTION | GenericType( | Function for | casadi::NlpS | + %| | | ) | calculating | olverInterna | + %| | | | the gradient | l | + %| | | | of the | | + %| | | | objective | | + %| | | | (column, aut | | + %| | | | ogenerated | | + %| | | | by default) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| grad_f_optio | OT_DICT | GenericType( | Options for | casadi::NlpS | + %| ns | | ) | the autogene | olverInterna | + %| | | | rated | l | + %| | | | gradient of | | + %| | | | the | | + %| | | | objective. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| grad_lag | OT_FUNCTION | GenericType( | Function for | casadi::NlpS | + %| | | ) | calculating | olverInterna | + %| | | | the gradient | l | + %| | | | of the | | + %| | | | Lagrangian ( | | + %| | | | autogenerate | | + %| | | | d by | | + %| | | | default) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| grad_lag_opt | OT_DICT | GenericType( | Options for | casadi::NlpS | + %| ions | | ) | the autogene | olverInterna | + %| | | | rated | l | + %| | | | gradient of | | + %| | | | the | | + %| | | | Lagrangian. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| hess_lag | OT_FUNCTION | GenericType( | Function for | casadi::NlpS | + %| | | ) | calculating | olverInterna | + %| | | | the Hessian | l | + %| | | | of the | | + %| | | | Lagrangian ( | | + %| | | | autogenerate | | + %| | | | d by | | + %| | | | default) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| hess_lag_opt | OT_DICT | GenericType( | Options for | casadi::NlpS | + %| ions | | ) | the autogene | olverInterna | + %| | | | rated | l | + %| | | | Hessian of | | + %| | | | the | | + %| | | | Lagrangian. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ignore_check | OT_BOOLEAN | false | If set to | casadi::NlpS | + %| _vec | | | true, the | olverInterna | + %| | | | input shape | l | + %| | | | of F will | | + %| | | | not be | | + %| | | | checked. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| iteration_ca | OT_CALLBACK | GenericType( | A function | casadi::NlpS | + %| llback | | ) | that will be | olverInterna | + %| | | | called at | l | + %| | | | each | | + %| | | | iteration | | + %| | | | with the | | + %| | | | solver as | | + %| | | | input. Check | | + %| | | | documentatio | | + %| | | | n of | | + %| | | | Callback . | | + %+--------------+--------------+--------------+--------------+--------------+ + %| iteration_ca | OT_BOOLEAN | false | If set to | casadi::NlpS | + %| llback_ignor | | | true, errors | olverInterna | + %| e_errors | | | thrown by it | l | + %| | | | eration_call | | + %| | | | back will be | | + %| | | | ignored. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| iteration_ca | OT_INTEGER | 1 | Only call | casadi::NlpS | + %| llback_step | | | the callback | olverInterna | + %| | | | function | l | + %| | | | every few | | + %| | | | iterations. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_f | OT_FUNCTION | GenericType( | Function for | casadi::NlpS | + %| | | ) | calculating | olverInterna | + %| | | | the Jacobian | l | + %| | | | of the | | + %| | | | objective | | + %| | | | (sparse row, | | + %| | | | autogenerate | | + %| | | | d by | | + %| | | | default) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_f_option | OT_DICT | GenericType( | Options for | casadi::NlpS | + %| s | | ) | the autogene | olverInterna | + %| | | | rated | l | + %| | | | Jacobian of | | + %| | | | the | | + %| | | | objective. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_g | OT_FUNCTION | GenericType( | Function for | casadi::NlpS | + %| | | ) | calculating | olverInterna | + %| | | | the Jacobian | l | + %| | | | of the | | + %| | | | constraints | | + %| | | | (autogenerat | | + %| | | | ed by | | + %| | | | default) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_g_option | OT_DICT | GenericType( | Options for | casadi::NlpS | + %| s | | ) | the autogene | olverInterna | + %| | | | rated | l | + %| | | | Jacobian of | | + %| | | | the | | + %| | | | constraints. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + %| warn_initial | OT_BOOLEAN | false | Warn if the | casadi::NlpS | + %| _bounds | | | initial | olverInterna | + %| | | | guess does | l | + %| | | | not satisfy | | + %| | | | LBX and UBX | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- ipopt + % + %- knitro + % + %- snopt + % + %- worhp + % + %- scpgen + % + %- sqpmethod + % + %- stabilizedsqp + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %NlpSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %ipopt + %----- + % + % + % + %When in warmstart mode, output NLP_SOLVER_LAM_X may be used as input + % + %NOTE: Even when max_iter == 0, it is not guaranteed that + %input(NLP_SOLVER_X0) == output(NLP_SOLVER_X). Indeed if bounds on X or + %constraints are unmet, they will differ. + % + %For a good tutorial on IPOPT, + %seehttp://drops.dagstuhl.de/volltexte/2009/2089/pdf/09061.WaechterAndreas.Paper.2089.pdf + % + %A good resource about the algorithms in IPOPT is: Wachter and L. T. Biegler, + %On the Implementation of an Interior-Point Filter Line-Search Algorithm for + %Large-Scale Nonlinear Programming, Mathematical Programming 106(1), pp. + %25-57, 2006 (As Research Report RC 23149, IBM T. J. Watson Research Center, + %Yorktown, USA + % + %Caveats: with default options, multipliers for the decision variables are + %wrong for equality constraints. Change the 'fixed_variable_treatment' to + %'make_constraint' or 'relax_bounds' to obtain correct results. + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| accept_after_ma | OT_INTEGER | -1 | Accept a trial | + %| x_steps | | | point after | + %| | | | maximal this | + %| | | | number of | + %| | | | steps. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| accept_every_tr | OT_STRING | no | Always accept | + %| ial_step | | | the first trial | + %| | | | step. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| acceptable_comp | OT_REAL | 0.010 | "Acceptance" | + %| l_inf_tol | | | threshold for | + %| | | | the | + %| | | | complementarity | + %| | | | conditions. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| acceptable_cons | OT_REAL | 0.010 | "Acceptance" | + %| tr_viol_tol | | | threshold for | + %| | | | the constraint | + %| | | | violation. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| acceptable_dual | OT_REAL | 1.000e+10 | "Acceptance" | + %| _inf_tol | | | threshold for | + %| | | | the dual | + %| | | | infeasibility. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| acceptable_iter | OT_INTEGER | 15 | Number of | + %| | | | "acceptable" | + %| | | | iterates before | + %| | | | triggering | + %| | | | termination. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| acceptable_obj_ | OT_REAL | 1.000e+20 | "Acceptance" | + %| change_tol | | | stopping | + %| | | | criterion based | + %| | | | on objective | + %| | | | function | + %| | | | change. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| acceptable_tol | OT_REAL | 0.000 | "Acceptable" | + %| | | | convergence | + %| | | | tolerance | + %| | | | (relative). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| adaptive_mu_glo | OT_STRING | obj-constr- | Globalization | + %| balization | | filter | strategy for | + %| | | | the adaptive mu | + %| | | | selection mode. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| adaptive_mu_kkt | OT_STRING | 2-norm-squared | Norm used for | + %| _norm_type | | | the KKT error | + %| | | | in the adaptive | + %| | | | mu | + %| | | | globalization | + %| | | | strategies. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| adaptive_mu_kkt | OT_REAL | 1.000 | Sufficient | + %| error_red_fact | | | decrease factor | + %| | | | for "kkt-error" | + %| | | | globalization | + %| | | | strategy. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| adaptive_mu_kkt | OT_INTEGER | 4 | Maximum number | + %| error_red_iters | | | of iterations | + %| | | | requiring | + %| | | | sufficient | + %| | | | progress. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| adaptive_mu_mon | OT_REAL | 0.800 | Determines the | + %| otone_init_fact | | | initial value | + %| or | | | of the barrier | + %| | | | parameter when | + %| | | | switching to | + %| | | | the monotone | + %| | | | mode. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| adaptive_mu_res | OT_STRING | no | Indicates if | + %| tore_previous_i | | | the previous | + %| terate | | | iterate should | + %| | | | be restored if | + %| | | | the monotone | + %| | | | mode is | + %| | | | entered. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| adaptive_mu_saf | OT_REAL | 0 | (see IPOPT | + %| eguard_factor | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| alpha_for_y | OT_STRING | primal | Method to | + %| | | | determine the | + %| | | | step size for | + %| | | | constraint | + %| | | | multipliers. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| alpha_for_y_tol | OT_REAL | 10 | Tolerance for | + %| | | | switching to | + %| | | | full equality | + %| | | | multiplier | + %| | | | steps. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| alpha_min_frac | OT_REAL | 0.050 | Safety factor | + %| | | | for the minimal | + %| | | | step size | + %| | | | (before | + %| | | | switching to | + %| | | | restoration | + %| | | | phase). (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| alpha_red_facto | OT_REAL | 0.500 | Fractional | + %| r | | | reduction of | + %| | | | the trial step | + %| | | | size in the | + %| | | | backtracking | + %| | | | line search. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| barrier_tol_fac | OT_REAL | 10 | Factor for mu | + %| tor | | | in barrier stop | + %| | | | test. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| bound_frac | OT_REAL | 0.010 | Desired minimum | + %| | | | relative | + %| | | | distance from | + %| | | | the initial | + %| | | | point to bound. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| bound_mult_init | OT_STRING | constant | Initialization | + %| _method | | | method for | + %| | | | bound | + %| | | | multipliers | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| bound_mult_init | OT_REAL | 1 | Initial value | + %| _val | | | for the bound | + %| | | | multipliers. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| bound_mult_rese | OT_REAL | 1000 | Threshold for | + %| t_threshold | | | resetting bound | + %| | | | multipliers | + %| | | | after the | + %| | | | restoration | + %| | | | phase. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| bound_push | OT_REAL | 0.010 | Desired minimum | + %| | | | absolute | + %| | | | distance from | + %| | | | the initial | + %| | | | point to bound. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| bound_relax_fac | OT_REAL | 0.000 | Factor for | + %| tor | | | initial | + %| | | | relaxation of | + %| | | | the bounds. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| check_derivativ | OT_STRING | no | Indicates | + %| es_for_naninf | | | whether it is | + %| | | | desired to | + %| | | | check for | + %| | | | Nan/Inf in | + %| | | | derivative | + %| | | | matrices (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| chi_cup | OT_REAL | 1.500 | LIFENG WRITES | + %| | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| chi_hat | OT_REAL | 2 | LIFENG WRITES | + %| | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| chi_tilde | OT_REAL | 5 | LIFENG WRITES | + %| | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| compl_inf_tol | OT_REAL | 0.000 | Desired | + %| | | | threshold for | + %| | | | the | + %| | | | complementarity | + %| | | | conditions. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| con_integer_md | OT_DICT | None | Integer | + %| | | | metadata (a | + %| | | | dictionary with | + %| | | | lists of | + %| | | | integers) about | + %| | | | constraints to | + %| | | | be passed to | + %| | | | IPOPT | + %+-----------------+-----------------+-----------------+-----------------+ + %| con_numeric_md | OT_DICT | None | Numeric | + %| | | | metadata (a | + %| | | | dictionary with | + %| | | | lists of reals) | + %| | | | about | + %| | | | constraints to | + %| | | | be passed to | + %| | | | IPOPT | + %+-----------------+-----------------+-----------------+-----------------+ + %| con_string_md | OT_DICT | None | String metadata | + %| | | | (a dictionary | + %| | | | with lists of | + %| | | | strings) about | + %| | | | constraints to | + %| | | | be passed to | + %| | | | IPOPT | + %+-----------------+-----------------+-----------------+-----------------+ + %| constr_mult_ini | OT_REAL | 1000 | Maximum allowed | + %| t_max | | | least-square | + %| | | | guess of | + %| | | | constraint | + %| | | | multipliers. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| constr_mult_res | OT_REAL | 0 | Threshold for | + %| et_threshold | | | resetting | + %| | | | equality and | + %| | | | inequality | + %| | | | multipliers | + %| | | | after | + %| | | | restoration | + %| | | | phase. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| constr_viol_tol | OT_REAL | 0.000 | Desired | + %| | | | threshold for | + %| | | | the constraint | + %| | | | violation. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| constraint_viol | OT_STRING | 1-norm | Norm to be used | + %| ation_norm_type | | | for the | + %| | | | constraint | + %| | | | violation in | + %| | | | the line | + %| | | | search. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| corrector_compl | OT_REAL | 1 | Complementarity | + %| _avrg_red_fact | | | tolerance | + %| | | | factor for | + %| | | | accepting | + %| | | | corrector step | + %| | | | (unsupported!). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| corrector_type | OT_STRING | none | The type of | + %| | | | corrector steps | + %| | | | that should be | + %| | | | taken | + %| | | | (unsupported!). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| delta | OT_REAL | 1 | Multiplier for | + %| | | | constraint | + %| | | | violation in | + %| | | | the switching | + %| | | | rule. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| delta_y_max | OT_REAL | 1.000e+12 | a parameter | + %| | | | used to check | + %| | | | if the fast | + %| | | | direction can | + %| | | | be used asthe | + %| | | | line search | + %| | | | direction (for | + %| | | | Chen-Goldfarb | + %| | | | line search). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| dependency_dete | OT_STRING | no | Indicates if | + %| ction_with_rhs | | | the right hand | + %| | | | sides of the | + %| | | | constraints | + %| | | | should be | + %| | | | considered | + %| | | | during | + %| | | | dependency | + %| | | | detection (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| dependency_dete | OT_STRING | none | Indicates which | + %| ctor | | | linear solver | + %| | | | should be used | + %| | | | to detect | + %| | | | linearly | + %| | | | dependent | + %| | | | equality | + %| | | | constraints. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| derivative_test | OT_STRING | none | Enable | + %| | | | derivative | + %| | | | checker (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| derivative_test | OT_INTEGER | -2 | Index of first | + %| _first_index | | | quantity to be | + %| | | | checked by | + %| | | | derivative | + %| | | | checker (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| derivative_test | OT_REAL | 0.000 | Size of the | + %| _perturbation | | | finite | + %| | | | difference | + %| | | | perturbation in | + %| | | | derivative | + %| | | | test. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| derivative_test | OT_STRING | no | Indicates | + %| _print_all | | | whether | + %| | | | information for | + %| | | | all estimated | + %| | | | derivatives | + %| | | | should be | + %| | | | printed. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| derivative_test | OT_REAL | 0.000 | Threshold for | + %| _tol | | | indicating | + %| | | | wrong | + %| | | | derivative. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| diverging_itera | OT_REAL | 1.000e+20 | Threshold for | + %| tes_tol | | | maximal value | + %| | | | of primal | + %| | | | iterates. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| dual_inf_tol | OT_REAL | 1 | Desired | + %| | | | threshold for | + %| | | | the dual | + %| | | | infeasibility. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| epsilon_c | OT_REAL | 0.010 | LIFENG WRITES | + %| | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| eta_min | OT_REAL | 10 | LIFENG WRITES | + %| | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| eta_penalty | OT_REAL | 0.000 | Relaxation | + %| | | | factor in the | + %| | | | Armijo | + %| | | | condition for | + %| | | | the penalty | + %| | | | function. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| eta_phi | OT_REAL | 0.000 | Relaxation | + %| | | | factor in the | + %| | | | Armijo | + %| | | | condition. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| evaluate_orig_o | OT_STRING | yes | Determines if | + %| bj_at_resto_tri | | | the original | + %| al | | | objective | + %| | | | function should | + %| | | | be evaluated at | + %| | | | restoration | + %| | | | phase trial | + %| | | | points. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| expect_infeasib | OT_STRING | no | Enable | + %| le_problem | | | heuristics to | + %| | | | quickly detect | + %| | | | an infeasible | + %| | | | problem. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| expect_infeasib | OT_REAL | 0.001 | Threshold for | + %| le_problem_ctol | | | disabling "expe | + %| | | | ct_infeasible_p | + %| | | | roblem" option. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| expect_infeasib | OT_REAL | 100000000 | Multiplier | + %| le_problem_ytol | | | threshold for | + %| | | | activating "exp | + %| | | | ect_infeasible_ | + %| | | | problem" | + %| | | | option. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| fast_des_fact | OT_REAL | 0.100 | a parameter | + %| | | | used to check | + %| | | | if the fast | + %| | | | direction can | + %| | | | be used asthe | + %| | | | line search | + %| | | | direction (for | + %| | | | Chen-Goldfarb | + %| | | | line search). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| fast_step_compu | OT_STRING | no | Indicates if | + %| tation | | | the linear | + %| | | | system should | + %| | | | be solved | + %| | | | quickly. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| file_print_leve | OT_INTEGER | 5 | Verbosity level | + %| l | | | for output | + %| | | | file. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| filter_margin_f | OT_REAL | 0.000 | Factor | + %| act | | | determining | + %| | | | width of margin | + %| | | | for obj-constr- | + %| | | | filter adaptive | + %| | | | globalization | + %| | | | strategy. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| filter_max_marg | OT_REAL | 1 | Maximum width | + %| in | | | of margin in | + %| | | | obj-constr- | + %| | | | filter adaptive | + %| | | | globalization | + %| | | | strategy. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| filter_reset_tr | OT_INTEGER | 5 | Number of | + %| igger | | | iterations that | + %| | | | trigger the | + %| | | | filter reset. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| findiff_perturb | OT_REAL | 0.000 | Size of the | + %| ation | | | finite | + %| | | | difference | + %| | | | perturbation | + %| | | | for derivative | + %| | | | approximation. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| first_hessian_p | OT_REAL | 0.000 | Size of first | + %| erturbation | | | x-s | + %| | | | perturbation | + %| | | | tried. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| fixed_mu_oracle | OT_STRING | average_compl | Oracle for the | + %| | | | barrier | + %| | | | parameter when | + %| | | | switching to | + %| | | | fixed mode. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| fixed_variable_ | OT_STRING | make_parameter | Determines how | + %| treatment | | | fixed variables | + %| | | | should be | + %| | | | handled. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| gamma_hat | OT_REAL | 0.040 | LIFENG WRITES | + %| | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| gamma_phi | OT_REAL | 0.000 | Relaxation | + %| | | | factor in the | + %| | | | filter margin | + %| | | | for the barrier | + %| | | | function. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| gamma_theta | OT_REAL | 0.000 | Relaxation | + %| | | | factor in the | + %| | | | filter margin | + %| | | | for the | + %| | | | constraint | + %| | | | violation. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| gamma_tilde | OT_REAL | 4 | LIFENG WRITES | + %| | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| hessian_approxi | OT_STRING | exact | Indicates what | + %| mation | | | Hessian | + %| | | | information is | + %| | | | to be used. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| hessian_approxi | OT_STRING | nonlinear- | Indicates in | + %| mation_space | | variables | which subspace | + %| | | | the Hessian | + %| | | | information is | + %| | | | to be | + %| | | | approximated. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| hessian_constan | OT_STRING | no | Indicates | + %| t | | | whether the | + %| | | | problem is a | + %| | | | quadratic | + %| | | | problem (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| honor_original_ | OT_STRING | yes | Indicates | + %| bounds | | | whether final | + %| | | | points should | + %| | | | be projected | + %| | | | into original | + %| | | | bounds. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| inf_pr_output | OT_STRING | original | Determines what | + %| | | | value is | + %| | | | printed in the | + %| | | | "inf_pr" output | + %| | | | column. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| jac_c_constant | OT_STRING | no | Indicates | + %| | | | whether all | + %| | | | equality | + %| | | | constraints are | + %| | | | linear (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| jac_d_constant | OT_STRING | no | Indicates | + %| | | | whether all | + %| | | | inequality | + %| | | | constraints are | + %| | | | linear (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| jacobian_approx | OT_STRING | exact | Specifies | + %| imation | | | technique to | + %| | | | compute | + %| | | | constraint | + %| | | | Jacobian (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| jacobian_regula | OT_REAL | 0.250 | Exponent for mu | + %| rization_expone | | | in the | + %| nt | | | regularization | + %| | | | for rank- | + %| | | | deficient | + %| | | | constraint | + %| | | | Jacobians. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| jacobian_regula | OT_REAL | 0.000 | Size of the | + %| rization_value | | | regularization | + %| | | | for rank- | + %| | | | deficient | + %| | | | constraint | + %| | | | Jacobians. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| kappa_d | OT_REAL | 0.000 | Weight for | + %| | | | linear damping | + %| | | | term (to handle | + %| | | | one-sided | + %| | | | bounds). (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| kappa_sigma | OT_REAL | 1.000e+10 | Factor limiting | + %| | | | the deviation | + %| | | | of dual | + %| | | | variables from | + %| | | | primal | + %| | | | estimates. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| kappa_soc | OT_REAL | 0.990 | Factor in the | + %| | | | sufficient | + %| | | | reduction rule | + %| | | | for second | + %| | | | order | + %| | | | correction. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| kappa_x_dis | OT_REAL | 100 | a parameter | + %| | | | used to check | + %| | | | if the fast | + %| | | | direction can | + %| | | | be used asthe | + %| | | | line search | + %| | | | direction (for | + %| | | | Chen-Goldfarb | + %| | | | line search). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| kappa_y_dis | OT_REAL | 10000 | a parameter | + %| | | | used to check | + %| | | | if the fast | + %| | | | direction can | + %| | | | be used asthe | + %| | | | line search | + %| | | | direction (for | + %| | | | Chen-Goldfarb | + %| | | | line search). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| least_square_in | OT_STRING | no | Least square | + %| it_duals | | | initialization | + %| | | | of all dual | + %| | | | variables (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| least_square_in | OT_STRING | no | Least square | + %| it_primal | | | initialization | + %| | | | of the primal | + %| | | | variables (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| limited_memory_ | OT_STRING | sherman- | Strategy for | + %| aug_solver | | morrison | solving the | + %| | | | augmented | + %| | | | system for low- | + %| | | | rank Hessian. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| limited_memory_ | OT_REAL | 1 | Value for B0 in | + %| init_val | | | low-rank | + %| | | | update. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| limited_memory_ | OT_REAL | 100000000 | Upper bound on | + %| init_val_max | | | value for B0 in | + %| | | | low-rank | + %| | | | update. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| limited_memory_ | OT_REAL | 0.000 | Lower bound on | + %| init_val_min | | | value for B0 in | + %| | | | low-rank | + %| | | | update. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| limited_memory_ | OT_STRING | scalar1 | Initialization | + %| initialization | | | strategy for | + %| | | | the limited | + %| | | | memory quasi- | + %| | | | Newton | + %| | | | approximation. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| limited_memory_ | OT_INTEGER | 6 | Maximum size of | + %| max_history | | | the history for | + %| | | | the limited | + %| | | | quasi-Newton | + %| | | | Hessian | + %| | | | approximation. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| limited_memory_ | OT_INTEGER | 2 | Threshold for | + %| max_skipping | | | successive | + %| | | | iterations | + %| | | | where update is | + %| | | | skipped. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| limited_memory_ | OT_STRING | no | Determines if | + %| special_for_res | | | the quasi- | + %| to | | | Newton updates | + %| | | | should be | + %| | | | special during | + %| | | | the restoration | + %| | | | phase. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| limited_memory_ | OT_STRING | bfgs | Quasi-Newton | + %| update_type | | | update formula | + %| | | | for the limited | + %| | | | memory | + %| | | | approximation. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| line_search_met | OT_STRING | filter | Globalization | + %| hod | | | method used in | + %| | | | backtracking | + %| | | | line search | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_scaling_ | OT_STRING | yes | Flag indicating | + %| on_demand | | | that linear | + %| | | | scaling is only | + %| | | | done if it | + %| | | | seems required. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_solver | OT_STRING | mumps | Linear solver | + %| | | | used for step | + %| | | | computations. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| linear_system_s | OT_STRING | none | Method for | + %| caling | | | scaling the | + %| | | | linear system. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma27_ignore_sin | OT_STRING | no | Enables MA27's | + %| gularity | | | ability to | + %| | | | solve a linear | + %| | | | system even if | + %| | | | the matrix is | + %| | | | singular. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma27_la_init_fa | OT_REAL | 5 | Real workspace | + %| ctor | | | memory for | + %| | | | MA27. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma27_liw_init_f | OT_REAL | 5 | Integer | + %| actor | | | workspace | + %| | | | memory for | + %| | | | MA27. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma27_meminc_fac | OT_REAL | 10 | Increment | + %| tor | | | factor for | + %| | | | workspace size | + %| | | | for MA27. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma27_pivtol | OT_REAL | 0.000 | Pivot tolerance | + %| | | | for the linear | + %| | | | solver MA27. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma27_pivtolmax | OT_REAL | 0.000 | Maximum pivot | + %| | | | tolerance for | + %| | | | the linear | + %| | | | solver MA27. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma27_skip_inert | OT_STRING | no | Always pretend | + %| ia_check | | | inertia is | + %| | | | correct. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma28_pivtol | OT_REAL | 0.010 | Pivot tolerance | + %| | | | for linear | + %| | | | solver MA28. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma57_automatic_ | OT_STRING | yes | Controls MA57 | + %| scaling | | | automatic | + %| | | | scaling (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma57_block_size | OT_INTEGER | 16 | Controls block | + %| | | | size used by | + %| | | | Level 3 BLAS in | + %| | | | MA57BD (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma57_node_amalg | OT_INTEGER | 16 | Node | + %| amation | | | amalgamation | + %| | | | parameter (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma57_pivot_orde | OT_INTEGER | 5 | Controls pivot | + %| r | | | order in MA57 | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma57_pivtol | OT_REAL | 0.000 | Pivot tolerance | + %| | | | for the linear | + %| | | | solver MA57. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma57_pivtolmax | OT_REAL | 0.000 | Maximum pivot | + %| | | | tolerance for | + %| | | | the linear | + %| | | | solver MA57. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma57_pre_alloc | OT_REAL | 1.050 | Safety factor | + %| | | | for work space | + %| | | | memory | + %| | | | allocation for | + %| | | | the linear | + %| | | | solver MA57. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma57_small_pivo | OT_INTEGER | 0 | If set to 1, | + %| t_flag | | | then when small | + %| | | | entries defined | + %| | | | by CNTL(2) are | + %| | | | detected they | + %| | | | are removed and | + %| | | | the | + %| | | | corresponding | + %| | | | pivots placed | + %| | | | at the end of | + %| | | | the | + %| | | | factorization. | + %| | | | This can be | + %| | | | particularly | + %| | | | efficient if | + %| | | | the matrix is | + %| | | | highly rank | + %| | | | deficient. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma86_nemin | OT_INTEGER | 32 | Node | + %| | | | Amalgamation | + %| | | | parameter (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma86_print_leve | OT_INTEGER | 0 | Debug printing | + %| l | | | level for the | + %| | | | linear solver | + %| | | | MA86 (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma86_small | OT_REAL | 0.000 | Zero Pivot | + %| | | | Threshold (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma86_static | OT_REAL | 0 | Static Pivoting | + %| | | | Threshold (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma86_u | OT_REAL | 0.000 | Pivoting | + %| | | | Threshold (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ma86_umax | OT_REAL | 0.000 | Maximum | + %| | | | Pivoting | + %| | | | Threshold (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| magic_steps | OT_STRING | no | Enables magic | + %| | | | steps. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_cpu_time | OT_REAL | 1000000 | Maximum number | + %| | | | of CPU seconds. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_filter_rese | OT_INTEGER | 5 | Maximal allowed | + %| ts | | | number of | + %| | | | filter resets | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_hessian_per | OT_REAL | 1.000e+20 | Maximum value | + %| turbation | | | of | + %| | | | regularization | + %| | | | parameter for | + %| | | | handling | + %| | | | negative | + %| | | | curvature. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_iter | OT_INTEGER | 3000 | Maximum number | + %| | | | of iterations. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_refinement_ | OT_INTEGER | 10 | Maximum number | + %| steps | | | of iterative | + %| | | | refinement | + %| | | | steps per | + %| | | | linear system | + %| | | | solve. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_resto_iter | OT_INTEGER | 3000000 | Maximum number | + %| | | | of successive | + %| | | | iterations in | + %| | | | restoration | + %| | | | phase. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_soc | OT_INTEGER | 4 | Maximum number | + %| | | | of second order | + %| | | | correction | + %| | | | trial steps at | + %| | | | each iteration. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_soft_resto_ | OT_INTEGER | 10 | Maximum number | + %| iters | | | of iterations | + %| | | | performed | + %| | | | successively in | + %| | | | soft | + %| | | | restoration | + %| | | | phase. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mehrotra_algori | OT_STRING | no | Indicates if we | + %| thm | | | want to do | + %| | | | Mehrotra's | + %| | | | algorithm. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| min_alpha_prima | OT_REAL | 0.000 | LIFENG WRITES | + %| l | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| min_hessian_per | OT_REAL | 0.000 | Smallest | + %| turbation | | | perturbation of | + %| | | | the Hessian | + %| | | | block. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| min_refinement_ | OT_INTEGER | 1 | Minimum number | + %| steps | | | of iterative | + %| | | | refinement | + %| | | | steps per | + %| | | | linear system | + %| | | | solve. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mu_allow_fast_m | OT_STRING | yes | Allow skipping | + %| onotone_decreas | | | of barrier | + %| e | | | problem if | + %| | | | barrier test is | + %| | | | already met. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mu_init | OT_REAL | 0.100 | Initial value | + %| | | | for the barrier | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mu_linear_decre | OT_REAL | 0.200 | Determines | + %| ase_factor | | | linear decrease | + %| | | | rate of barrier | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mu_max | OT_REAL | 100000 | Maximum value | + %| | | | for barrier | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mu_max_fact | OT_REAL | 1000 | Factor for | + %| | | | initialization | + %| | | | of maximum | + %| | | | value for | + %| | | | barrier | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mu_min | OT_REAL | 0.000 | Minimum value | + %| | | | for barrier | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mu_oracle | OT_STRING | quality- | Oracle for a | + %| | | function | new barrier | + %| | | | parameter in | + %| | | | the adaptive | + %| | | | strategy. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mu_strategy | OT_STRING | monotone | Update strategy | + %| | | | for barrier | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mu_superlinear_ | OT_REAL | 1.500 | Determines | + %| decrease_power | | | superlinear | + %| | | | decrease rate | + %| | | | of barrier | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mu_target | OT_REAL | 0 | Desired value | + %| | | | of complementar | + %| | | | ity. (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mult_diverg_fea | OT_REAL | 0.000 | tolerance for | + %| sibility_tol | | | deciding if the | + %| | | | multipliers are | + %| | | | diverging (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mult_diverg_y_t | OT_REAL | 100000000 | tolerance for | + %| ol | | | deciding if the | + %| | | | multipliers are | + %| | | | diverging (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mumps_dep_tol | OT_REAL | -1 | Pivot threshold | + %| | | | for detection | + %| | | | of linearly | + %| | | | dependent | + %| | | | constraints in | + %| | | | MUMPS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mumps_mem_perce | OT_INTEGER | 1000 | Percentage | + %| nt | | | increase in the | + %| | | | estimated | + %| | | | working space | + %| | | | for MUMPS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mumps_permuting | OT_INTEGER | 7 | Controls | + %| _scaling | | | permuting and | + %| | | | scaling in | + %| | | | MUMPS (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mumps_pivot_ord | OT_INTEGER | 7 | Controls pivot | + %| er | | | order in MUMPS | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mumps_pivtol | OT_REAL | 0.000 | Pivot tolerance | + %| | | | for the linear | + %| | | | solver MUMPS. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mumps_pivtolmax | OT_REAL | 0.100 | Maximum pivot | + %| | | | tolerance for | + %| | | | the linear | + %| | | | solver MUMPS. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| mumps_scaling | OT_INTEGER | 77 | Controls | + %| | | | scaling in | + %| | | | MUMPS (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| neg_curv_test_t | OT_REAL | 0 | Tolerance for | + %| ol | | | heuristic to | + %| | | | ignore wrong | + %| | | | inertia. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| never_use_fact_ | OT_STRING | no | Toggle to | + %| cgpen_direction | | | switch off the | + %| | | | fast Chen- | + %| | | | Goldfarb | + %| | | | direction (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| never_use_piece | OT_STRING | no | Toggle to | + %| wise_penalty_ls | | | switch off the | + %| | | | piecewise | + %| | | | penalty method | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| nlp_lower_bound | OT_REAL | -1.000e+19 | any bound less | + %| _inf | | | or equal this | + %| | | | value will be | + %| | | | considered -inf | + %| | | | (i.e. not lower | + %| | | | bounded). (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| nlp_scaling_con | OT_REAL | 0 | Target value | + %| str_target_grad | | | for constraint | + %| ient | | | function | + %| | | | gradient size. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| nlp_scaling_max | OT_REAL | 100 | Maximum | + %| _gradient | | | gradient after | + %| | | | NLP scaling. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| nlp_scaling_met | OT_STRING | gradient-based | Select the | + %| hod | | | technique used | + %| | | | for scaling the | + %| | | | NLP. (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| nlp_scaling_min | OT_REAL | 0.000 | Minimum value | + %| _value | | | of gradient- | + %| | | | based scaling | + %| | | | values. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| nlp_scaling_obj | OT_REAL | 0 | Target value | + %| _target_gradien | | | for objective | + %| t | | | function | + %| | | | gradient size. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| nlp_upper_bound | OT_REAL | 1.000e+19 | any bound | + %| _inf | | | greater or this | + %| | | | value will be | + %| | | | considered +inf | + %| | | | (i.e. not upper | + %| | | | bounded). (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| nu_inc | OT_REAL | 0.000 | Increment of | + %| | | | the penalty | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| nu_init | OT_REAL | 0.000 | Initial value | + %| | | | of the penalty | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| num_linear_vari | OT_INTEGER | 0 | Number of | + %| ables | | | linear | + %| | | | variables (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| obj_max_inc | OT_REAL | 5 | Determines the | + %| | | | upper bound on | + %| | | | the acceptable | + %| | | | increase of | + %| | | | barrier | + %| | | | objective | + %| | | | function. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| obj_scaling_fac | OT_REAL | 1 | Scaling factor | + %| tor | | | for the | + %| | | | objective | + %| | | | function. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| option_file_nam | OT_STRING | | File name of | + %| e | | | options file | + %| | | | (to overwrite | + %| | | | default). (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| output_file | OT_STRING | | File name of | + %| | | | desired output | + %| | | | file (leave | + %| | | | unset for no | + %| | | | file output). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_iter_co | OT_INTEGER | 5000 | Maximum Size of | + %| arse_size | | | Coarse Grid | + %| | | | Matrix (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_iter_dr | OT_REAL | 0.500 | dropping value | + %| opping_factor | | | for incomplete | + %| | | | factor (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_iter_dr | OT_REAL | 0.100 | dropping value | + %| opping_schur | | | for sparsify | + %| | | | schur | + %| | | | complement | + %| | | | factor (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_iter_in | OT_REAL | 5000000 | (see IPOPT | + %| verse_norm_fact | | | documentation) | + %| or | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_iter_ma | OT_INTEGER | 10 | Maximum Size of | + %| x_levels | | | Grid Levels | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_iter_ma | OT_INTEGER | 10000000 | max fill for | + %| x_row_fill | | | each row (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_iter_re | OT_REAL | 0.000 | Relative | + %| lative_tol | | | Residual | + %| | | | Convergence | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_iterati | OT_STRING | no | Switch on | + %| ve | | | iterative | + %| | | | solver in | + %| | | | Pardiso library | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_matchin | OT_STRING | complete+2x2 | Matching | + %| g_strategy | | | strategy to be | + %| | | | used by Pardiso | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_max_dro | OT_INTEGER | 4 | Maximal number | + %| ptol_correction | | | of decreases of | + %| s | | | drop tolerance | + %| | | | during one | + %| | | | solve. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_max_ite | OT_INTEGER | 500 | Maximum number | + %| r | | | of Krylov- | + %| | | | Subspace | + %| | | | Iteration (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_msglvl | OT_INTEGER | 0 | Pardiso message | + %| | | | level (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_out_of_ | OT_INTEGER | 0 | Enables out-of- | + %| core_power | | | core variant of | + %| | | | Pardiso (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_redo_sy | OT_STRING | no | Toggle for | + %| mbolic_fact_onl | | | handling case | + %| y_if_inertia_wr | | | when elements | + %| ong | | | were perturbed | + %| | | | by Pardiso. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_repeate | OT_STRING | no | Interpretation | + %| d_perturbation_ | | | of perturbed | + %| means_singular | | | elements. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pardiso_skip_in | OT_STRING | no | Always pretend | + %| ertia_check | | | inertia is | + %| | | | correct. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pass_nonlinear_ | OT_BOOLEAN | False | n/a | + %| variables | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| pen_des_fact | OT_REAL | 0.200 | a parameter | + %| | | | used in penalty | + %| | | | parameter | + %| | | | computation | + %| | | | (for Chen- | + %| | | | Goldfarb line | + %| | | | search). (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pen_init_fac | OT_REAL | 50 | a parameter | + %| | | | used to choose | + %| | | | initial penalty | + %| | | | parameterswhen | + %| | | | the regularized | + %| | | | Newton method | + %| | | | is used. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| pen_theta_max_f | OT_REAL | 10000 | Determines | + %| act | | | upper bound for | + %| | | | constraint | + %| | | | violation in | + %| | | | the filter. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| penalty_init_ma | OT_REAL | 100000 | Maximal value | + %| x | | | for the intial | + %| | | | penalty | + %| | | | parameter (for | + %| | | | Chen-Goldfarb | + %| | | | line search). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| penalty_init_mi | OT_REAL | 1 | Minimal value | + %| n | | | for the intial | + %| | | | penalty | + %| | | | parameter for | + %| | | | line search(for | + %| | | | Chen-Goldfarb | + %| | | | line search). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| penalty_max | OT_REAL | 1.000e+30 | Maximal value | + %| | | | for the penalty | + %| | | | parameter (for | + %| | | | Chen-Goldfarb | + %| | | | line search). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| penalty_update_ | OT_REAL | 10 | LIFENG WRITES | + %| compl_tol | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| penalty_update_ | OT_REAL | 0.000 | Threshold for | + %| infeasibility_t | | | infeasibility | + %| ol | | | in penalty | + %| | | | parameter | + %| | | | update test. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| perturb_always_ | OT_STRING | no | Active | + %| cd | | | permanent | + %| | | | perturbation of | + %| | | | constraint | + %| | | | linearization. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| perturb_dec_fac | OT_REAL | 0.333 | Decrease factor | + %| t | | | for x-s | + %| | | | perturbation. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| perturb_inc_fac | OT_REAL | 8 | Increase factor | + %| t | | | for x-s | + %| | | | perturbation. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| perturb_inc_fac | OT_REAL | 100 | Increase factor | + %| t_first | | | for x-s | + %| | | | perturbation | + %| | | | for very first | + %| | | | perturbation. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| piecewisepenalt | OT_REAL | 0.000 | LIFENG WRITES | + %| y_gamma_infeasi | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| piecewisepenalt | OT_REAL | 0.000 | LIFENG WRITES | + %| y_gamma_obj | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| point_perturbat | OT_REAL | 10 | Maximal | + %| ion_radius | | | perturbation of | + %| | | | an evaluation | + %| | | | point. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_info_stri | OT_STRING | no | Enables | + %| ng | | | printing of | + %| | | | additional info | + %| | | | string at end | + %| | | | of iteration | + %| | | | output. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_level | OT_INTEGER | 5 | Output | + %| | | | verbosity | + %| | | | level. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_options_d | OT_STRING | no | Switch to print | + %| ocumentation | | | all algorithmic | + %| | | | options. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_options_l | OT_STRING | no | Undocumented | + %| atex_mode | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_time | OT_BOOLEAN | True | print | + %| | | | information | + %| | | | about execution | + %| | | | time | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_timing_st | OT_STRING | no | Switch to print | + %| atistics | | | timing | + %| | | | statistics. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_user_opti | OT_STRING | no | Print all | + %| ons | | | options set by | + %| | | | the user. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| quality_functio | OT_STRING | none | The balancing | + %| n_balancing_ter | | | term included | + %| m | | | in the quality | + %| | | | function for | + %| | | | centrality. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| quality_functio | OT_STRING | none | The penalty | + %| n_centrality | | | term for | + %| | | | centrality that | + %| | | | is included in | + %| | | | quality | + %| | | | function. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| quality_functio | OT_INTEGER | 8 | Maximum number | + %| n_max_section_s | | | of search steps | + %| teps | | | during direct | + %| | | | search | + %| | | | procedure | + %| | | | determining the | + %| | | | optimal | + %| | | | centering | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| quality_functio | OT_STRING | 2-norm-squared | Norm used for | + %| n_norm_type | | | components of | + %| | | | the quality | + %| | | | function. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| quality_functio | OT_REAL | 0 | Tolerance for | + %| n_section_qf_to | | | the golden | + %| l | | | section search | + %| | | | procedure | + %| | | | determining the | + %| | | | optimal | + %| | | | centering | + %| | | | parameter (in | + %| | | | the function | + %| | | | value space). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| quality_functio | OT_REAL | 0.010 | Tolerance for | + %| n_section_sigma | | | the section | + %| _tol | | | search | + %| | | | procedure | + %| | | | determining the | + %| | | | optimal | + %| | | | centering | + %| | | | parameter (in | + %| | | | sigma space). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| recalc_y | OT_STRING | no | Tells the | + %| | | | algorithm to | + %| | | | recalculate the | + %| | | | equality and | + %| | | | inequality | + %| | | | multipliers as | + %| | | | least square | + %| | | | estimates. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| recalc_y_feas_t | OT_REAL | 0.000 | Feasibility | + %| ol | | | threshold for | + %| | | | recomputation | + %| | | | of multipliers. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| replace_bounds | OT_STRING | no | Indicates if | + %| | | | all variable | + %| | | | bounds should | + %| | | | be replaced by | + %| | | | inequality | + %| | | | constraints | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| required_infeas | OT_REAL | 0.900 | Required | + %| ibility_reducti | | | reduction of | + %| on | | | infeasibility | + %| | | | before leaving | + %| | | | restoration | + %| | | | phase. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| residual_improv | OT_REAL | 1.000 | Minimal | + %| ement_factor | | | required | + %| | | | reduction of | + %| | | | residual test | + %| | | | ratio in | + %| | | | iterative | + %| | | | refinement. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| residual_ratio_ | OT_REAL | 0.000 | Iterative | + %| max | | | refinement | + %| | | | tolerance (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| residual_ratio_ | OT_REAL | 0.000 | Threshold for | + %| singular | | | declaring | + %| | | | linear system | + %| | | | singular after | + %| | | | failed | + %| | | | iterative | + %| | | | refinement. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| resto_failure_f | OT_REAL | 0 | Threshold for | + %| easibility_thre | | | primal | + %| shold | | | infeasibility | + %| | | | to declare | + %| | | | failure of | + %| | | | restoration | + %| | | | phase. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| resto_penalty_p | OT_REAL | 1000 | Penalty | + %| arameter | | | parameter in | + %| | | | the restoration | + %| | | | phase objective | + %| | | | function. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| resto_proximity | OT_REAL | 1 | Weighting | + %| _weight | | | factor for the | + %| | | | proximity term | + %| | | | in restoration | + %| | | | phase | + %| | | | objective. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| rho | OT_REAL | 0.100 | Value in | + %| | | | penalty | + %| | | | parameter | + %| | | | update formula. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| s_max | OT_REAL | 100 | Scaling | + %| | | | threshold for | + %| | | | the NLP error. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| s_phi | OT_REAL | 2.300 | Exponent for | + %| | | | linear barrier | + %| | | | function model | + %| | | | in the | + %| | | | switching rule. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| s_theta | OT_REAL | 1.100 | Exponent for | + %| | | | current | + %| | | | constraint | + %| | | | violation in | + %| | | | the switching | + %| | | | rule. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| sb | OT_STRING | no | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| sigma_max | OT_REAL | 100 | Maximum value | + %| | | | of the | + %| | | | centering | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| sigma_min | OT_REAL | 0.000 | Minimum value | + %| | | | of the | + %| | | | centering | + %| | | | parameter. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| skip_corr_if_ne | OT_STRING | yes | Skip the | + %| g_curv | | | corrector step | + %| | | | in negative | + %| | | | curvature | + %| | | | iteration | + %| | | | (unsupported!). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| skip_corr_in_mo | OT_STRING | yes | Skip the | + %| notone_mode | | | corrector step | + %| | | | during monotone | + %| | | | barrier | + %| | | | parameter mode | + %| | | | (unsupported!). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| skip_finalize_s | OT_STRING | no | Indicates if | + %| olution_call | | | call to NLP::Fi | + %| | | | nalizeSolution | + %| | | | after | + %| | | | optimization | + %| | | | should be | + %| | | | suppressed (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| slack_bound_fra | OT_REAL | 0.010 | Desired minimum | + %| c | | | relative | + %| | | | distance from | + %| | | | the initial | + %| | | | slack to bound. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| slack_bound_pus | OT_REAL | 0.010 | Desired minimum | + %| h | | | absolute | + %| | | | distance from | + %| | | | the initial | + %| | | | slack to bound. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| slack_move | OT_REAL | 0.000 | Correction size | + %| | | | for very small | + %| | | | slacks. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| soft_resto_pder | OT_REAL | 1.000 | Required | + %| ror_reduction_f | | | reduction in | + %| actor | | | primal-dual | + %| | | | error in the | + %| | | | soft | + %| | | | restoration | + %| | | | phase. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| start_with_rest | OT_STRING | no | Tells algorithm | + %| o | | | to switch to | + %| | | | restoration | + %| | | | phase in first | + %| | | | iteration. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| suppress_all_ou | OT_STRING | no | Undocumented | + %| tput | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| tau_min | OT_REAL | 0.990 | Lower bound on | + %| | | | fraction-to- | + %| | | | the-boundary | + %| | | | parameter tau. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| theta_max_fact | OT_REAL | 10000 | Determines | + %| | | | upper bound for | + %| | | | constraint | + %| | | | violation in | + %| | | | the filter. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| theta_min | OT_REAL | 0.000 | LIFENG WRITES | + %| | | | THIS. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| theta_min_fact | OT_REAL | 0.000 | Determines | + %| | | | constraint | + %| | | | violation | + %| | | | threshold in | + %| | | | the switching | + %| | | | rule. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| tiny_step_tol | OT_REAL | 0.000 | Tolerance for | + %| | | | detecting | + %| | | | numerically | + %| | | | insignificant | + %| | | | steps. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| tiny_step_y_tol | OT_REAL | 0.010 | Tolerance for | + %| | | | quitting | + %| | | | because of | + %| | | | numerically | + %| | | | insignificant | + %| | | | steps. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| tol | OT_REAL | 0.000 | Desired | + %| | | | convergence | + %| | | | tolerance | + %| | | | (relative). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| var_integer_md | OT_DICT | None | Integer | + %| | | | metadata (a | + %| | | | dictionary with | + %| | | | lists of | + %| | | | integers) about | + %| | | | variables to be | + %| | | | passed to IPOPT | + %+-----------------+-----------------+-----------------+-----------------+ + %| var_numeric_md | OT_DICT | None | Numeric | + %| | | | metadata (a | + %| | | | dictionary with | + %| | | | lists of reals) | + %| | | | about variables | + %| | | | to be passed to | + %| | | | IPOPT | + %+-----------------+-----------------+-----------------+-----------------+ + %| var_string_md | OT_DICT | None | String metadata | + %| | | | (a dictionary | + %| | | | with lists of | + %| | | | strings) about | + %| | | | variables to be | + %| | | | passed to IPOPT | + %+-----------------+-----------------+-----------------+-----------------+ + %| vartheta | OT_REAL | 0.500 | a parameter | + %| | | | used to check | + %| | | | if the fast | + %| | | | direction can | + %| | | | be used asthe | + %| | | | line search | + %| | | | direction (for | + %| | | | Chen-Goldfarb | + %| | | | line search). | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| warm_start_boun | OT_REAL | 0.001 | same as | + %| d_frac | | | bound_frac for | + %| | | | the regular | + %| | | | initializer. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| warm_start_boun | OT_REAL | 0.001 | same as | + %| d_push | | | bound_push for | + %| | | | the regular | + %| | | | initializer. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| warm_start_enti | OT_STRING | no | Tells algorithm | + %| re_iterate | | | whether to use | + %| | | | the GetWarmStar | + %| | | | tIterate method | + %| | | | in the NLP. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| warm_start_init | OT_STRING | no | Warm-start for | + %| _point | | | initial point | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| warm_start_mult | OT_REAL | 0.001 | same as | + %| _bound_push | | | mult_bound_push | + %| | | | for the regular | + %| | | | initializer. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| warm_start_mult | OT_REAL | 1000000 | Maximum initial | + %| _init_max | | | value for the | + %| | | | equality | + %| | | | multipliers. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| warm_start_same | OT_STRING | no | Indicates | + %| _structure | | | whether a | + %| | | | problem with a | + %| | | | structure | + %| | | | identical to | + %| | | | the previous | + %| | | | one is to be | + %| | | | solved. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| warm_start_slac | OT_REAL | 0.001 | same as slack_b | + %| k_bound_frac | | | ound_frac for | + %| | | | the regular | + %| | | | initializer. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| warm_start_slac | OT_REAL | 0.001 | same as slack_b | + %| k_bound_push | | | ound_push for | + %| | | | the regular | + %| | | | initializer. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| warm_start_targ | OT_REAL | 0 | Unsupported! | + %| et_mu | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| watchdog_shorte | OT_INTEGER | 10 | Number of | + %| ned_iter_trigge | | | shortened | + %| r | | | iterations that | + %| | | | trigger the | + %| | | | watchdog. (see | + %| | | | IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| watchdog_trial_ | OT_INTEGER | 3 | Maximum number | + %| iter_max | | | of watchdog | + %| | | | iterations. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + %| wsmp_iterative | OT_STRING | no | Switches to | + %| | | | iterative | + %| | | | solver in WSMP. | + %| | | | (see IPOPT | + %| | | | documentation) | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available monitors + % + %+-------------+ + %| Id | + %+=============+ + %| eval_f | + %+-------------+ + %| eval_g | + %+-------------+ + %| eval_grad_f | + %+-------------+ + %| eval_h | + %+-------------+ + %| eval_jac_g | + %+-------------+ + % + %>List of available stats + % + %+-------------------------+ + %| Id | + %+=========================+ + %| con_integer_md | + %+-------------------------+ + %| con_numeric_md | + %+-------------------------+ + %| con_string_md | + %+-------------------------+ + %| iter_count | + %+-------------------------+ + %| iteration | + %+-------------------------+ + %| iterations | + %+-------------------------+ + %| n_eval_callback | + %+-------------------------+ + %| n_eval_f | + %+-------------------------+ + %| n_eval_g | + %+-------------------------+ + %| n_eval_grad_f | + %+-------------------------+ + %| n_eval_h | + %+-------------------------+ + %| n_eval_jac_g | + %+-------------------------+ + %| return_status | + %+-------------------------+ + %| t_callback_fun.proc | + %+-------------------------+ + %| t_callback_fun.wall | + %+-------------------------+ + %| t_callback_prepare.proc | + %+-------------------------+ + %| t_callback_prepare.wall | + %+-------------------------+ + %| t_eval_f.proc | + %+-------------------------+ + %| t_eval_f.wall | + %+-------------------------+ + %| t_eval_g.proc | + %+-------------------------+ + %| t_eval_g.wall | + %+-------------------------+ + %| t_eval_grad_f.proc | + %+-------------------------+ + %| t_eval_grad_f.wall | + %+-------------------------+ + %| t_eval_h.proc | + %+-------------------------+ + %| t_eval_h.wall | + %+-------------------------+ + %| t_eval_jac_g.proc | + %+-------------------------+ + %| t_eval_jac_g.wall | + %+-------------------------+ + %| t_mainloop.proc | + %+-------------------------+ + %| t_mainloop.wall | + %+-------------------------+ + %| var_integer_md | + %+-------------------------+ + %| var_numeric_md | + %+-------------------------+ + %| var_string_md | + %+-------------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %knitro + %------ + % + % + % + %KNITRO interface + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| BarRule | OT_INTEGER | 0 | Barrier Rule | + %+-----------------+-----------------+-----------------+-----------------+ + %| Debug | OT_INTEGER | 0 | Debug level | + %+-----------------+-----------------+-----------------+-----------------+ + %| Delta | OT_REAL | 1 | Initial region | + %| | | | scaling factor | + %+-----------------+-----------------+-----------------+-----------------+ + %| FeasModeTol | OT_REAL | 0.000 | Feasible mode | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| FeasTol | OT_REAL | 0.000 | Feasible | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| FeasTolAbs | OT_REAL | 0 | Absolute | + %| | | | feasible | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| Feasible | OT_BOOLEAN | 1 | Allow | + %| | | | infeasible | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| GradOpt | OT_INTEGER | 1 | Gradient | + %| | | | calculation | + %| | | | method | + %+-----------------+-----------------+-----------------+-----------------+ + %| HessOpt | OT_INTEGER | 1 | Hessian | + %| | | | calculation | + %| | | | method | + %+-----------------+-----------------+-----------------+-----------------+ + %| HonorBnds | OT_BOOLEAN | 0 | Enforce bounds | + %+-----------------+-----------------+-----------------+-----------------+ + %| InitPt | OT_BOOLEAN | 0 | Use initial | + %| | | | point strategy | + %+-----------------+-----------------+-----------------+-----------------+ + %| LmSize | OT_INTEGER | 10 | Memory pairsize | + %| | | | limit | + %+-----------------+-----------------+-----------------+-----------------+ + %| LpSolver | OT_BOOLEAN | 0 | Use LpSolver | + %+-----------------+-----------------+-----------------+-----------------+ + %| MaxCgIt | OT_INTEGER | 0 | Maximum | + %| | | | conjugate | + %| | | | gradient | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| MaxIt | OT_INTEGER | 10000 | Iteration limit | + %+-----------------+-----------------+-----------------+-----------------+ + %| Mu | OT_REAL | 0.100 | Initial barrier | + %| | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| Multistart | OT_BOOLEAN | 0 | Use multistart | + %+-----------------+-----------------+-----------------+-----------------+ + %| NewPoint | OT_BOOLEAN | 0 | Select new- | + %| | | | point feature | + %+-----------------+-----------------+-----------------+-----------------+ + %| ObjRange | OT_REAL | 1.000e+20 | Maximum | + %| | | | objective value | + %+-----------------+-----------------+-----------------+-----------------+ + %| OptTol | OT_REAL | 0.000 | Relative | + %| | | | optimality | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| OptTolAbs | OT_REAL | 0 | Absolute | + %| | | | optimality | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| OutLev | OT_INTEGER | 2 | Log output | + %| | | | level | + %+-----------------+-----------------+-----------------+-----------------+ + %| Pivot | OT_REAL | 0.000 | Initial pivot | + %| | | | threshold | + %+-----------------+-----------------+-----------------+-----------------+ + %| Scale | OT_BOOLEAN | 1 | Perform scaling | + %+-----------------+-----------------+-----------------+-----------------+ + %| ShiftInit | OT_BOOLEAN | 1 | Interior-point | + %| | | | shifting | + %| | | | initial point | + %+-----------------+-----------------+-----------------+-----------------+ + %| Soc | OT_INTEGER | 1 | Second order | + %| | | | correction | + %+-----------------+-----------------+-----------------+-----------------+ + %| XTol | OT_REAL | 0.000 | Relative | + %| | | | solution change | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| contype | OT_INTEGERVECTO | | | + %| | R | | | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available monitors + % + %+-------------+ + %| Id | + %+=============+ + %| eval_f | + %+-------------+ + %| eval_g | + %+-------------+ + %| eval_grad_f | + %+-------------+ + %| eval_h | + %+-------------+ + %| eval_jac_g | + %+-------------+ + % + %>List of available stats + % + %+---------------+ + %| Id | + %+===============+ + %| return_status | + %+---------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %snopt + %----- + % + % + % + %SNOPT interface + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| Backup basis | OT_INTEGER | None | 0 * output | + %| file | | | extra basis map | + %+-----------------+-----------------+-----------------+-----------------+ + %| Central | OT_REAL | None | 6.7e-5 * ( | + %| difference | | | Function | + %| interval | | | precision)^1/3 | + %+-----------------+-----------------+-----------------+-----------------+ + %| Check frequency | OT_INTEGER | None | 60 * test row | + %| | | | residuals kAx - | + %| | | | sk | + %+-----------------+-----------------+-----------------+-----------------+ + %| Crash option | OT_INTEGER | None | 3 * first basis | + %| | | | is essentially | + %| | | | triangular | + %+-----------------+-----------------+-----------------+-----------------+ + %| Crash tolerance | OT_REAL | None | 0.100 | + %+-----------------+-----------------+-----------------+-----------------+ + %| Debug level | OT_INTEGER | None | 0 * for | + %| | | | developers | + %+-----------------+-----------------+-----------------+-----------------+ + %| Derivative | OT_INTEGER | None | 3 | + %| level | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| Difference | OT_REAL | None | 5.5e-7 * ( | + %| interval | | | Function | + %| | | | precision)^1/2 | + %+-----------------+-----------------+-----------------+-----------------+ + %| Dump file | OT_INTEGER | None | 0 * output Load | + %| | | | data | + %+-----------------+-----------------+-----------------+-----------------+ + %| Elastic weight | OT_REAL | None | 1.0e+4 * used | + %| | | | only during | + %| | | | elastic mode | + %+-----------------+-----------------+-----------------+-----------------+ + %| Expand | OT_INTEGER | None | 10000 * for | + %| frequency | | | anti-cycling | + %| | | | procedure | + %+-----------------+-----------------+-----------------+-----------------+ + %| Factorization | OT_INTEGER | None | 50 * 100 for | + %| frequency | | | LPs | + %+-----------------+-----------------+-----------------+-----------------+ + %| Function | OT_REAL | None | 3.0e-13 * e^0.8 | + %| precision | | | (almost full | + %| | | | accuracy) | + %+-----------------+-----------------+-----------------+-----------------+ + %| Hessian | OT_STRING | None | full memory * | + %| | | | default if n1 | + %| | | | 75 limited | + %| | | | memory * | + %| | | | default if n1 > | + %| | | | 75 | + %+-----------------+-----------------+-----------------+-----------------+ + %| Hessian flush | OT_INTEGER | None | 999999 * no | + %| | | | flushing | + %+-----------------+-----------------+-----------------+-----------------+ + %| Hessian | OT_INTEGER | None | 999999 * for | + %| frequency | | | full Hessian | + %| | | | (never reset) | + %+-----------------+-----------------+-----------------+-----------------+ + %| Hessian updates | OT_INTEGER | None | 10 * for | + %| | | | limited memory | + %| | | | Hessian | + %+-----------------+-----------------+-----------------+-----------------+ + %| Insert file | OT_INTEGER | None | 0 * input in | + %| | | | industry format | + %+-----------------+-----------------+-----------------+-----------------+ + %| Iterations | OT_INTEGER | None | 10000 * or 20m | + %| limit | | | if that is more | + %+-----------------+-----------------+-----------------+-----------------+ + %| LU | OT_STRING | None | LU partial | + %| | | | pivoting * | + %| | | | default | + %| | | | threshold | + %| | | | pivoting | + %| | | | strategy LU | + %| | | | rook pivoting * | + %| | | | threshold rook | + %| | | | pivoting LU | + %| | | | complete | + %| | | | pivoting * | + %| | | | threshold | + %| | | | complete | + %| | | | pivoting | + %+-----------------+-----------------+-----------------+-----------------+ + %| LU factor | OT_REAL | None | 3.99 * for NP | + %| tolerance | | | (100.0 for LP) | + %+-----------------+-----------------+-----------------+-----------------+ + %| LU singularity | OT_REAL | None | 0.000 | + %| tolerance | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| LU update | OT_REAL | None | 3.99 * for NP ( | + %| tolerance | | | 10.0 for LP) | + %+-----------------+-----------------+-----------------+-----------------+ + %| Linesearch | OT_REAL | None | 0.9 * smaller | + %| tolerance | | | for more | + %| | | | accurate search | + %+-----------------+-----------------+-----------------+-----------------+ + %| Load file | OT_INTEGER | None | 0 * input names | + %| | | | and values | + %+-----------------+-----------------+-----------------+-----------------+ + %| Major | OT_REAL | None | 1.0e-6 * target | + %| feasibility | | | nonlinear | + %| tolerance | | | constraint | + %| | | | violation | + %+-----------------+-----------------+-----------------+-----------------+ + %| Major | OT_INTEGER | None | 1000 * or m if | + %| iterations | | | that is more | + %| limit | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| Major | OT_REAL | None | 1.0e-6 * target | + %| optimality | | | complementarity | + %| tolerance | | | gap | + %+-----------------+-----------------+-----------------+-----------------+ + %| Major print | OT_INTEGER | None | 1 * 1-line | + %| level | | | major iteration | + %| | | | log | + %+-----------------+-----------------+-----------------+-----------------+ + %| Major step | OT_REAL | None | 2 | + %| limit | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| Minor | OT_REAL | None | 1.0e-6 * for | + %| feasibility | | | satisfying the | + %| tolerance | | | QP bounds | + %+-----------------+-----------------+-----------------+-----------------+ + %| Minor | OT_INTEGER | None | 500 * or 3m if | + %| iterations | | | that is more | + %| limit | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| Minor print | OT_INTEGER | None | 1 * 1-line | + %| level | | | minor iteration | + %| | | | log | + %+-----------------+-----------------+-----------------+-----------------+ + %| New basis file | OT_INTEGER | None | 0 * output | + %| | | | basis map | + %+-----------------+-----------------+-----------------+-----------------+ + %| New superbasics | OT_INTEGER | None | 99 * controls | + %| limit | | | early | + %| | | | termination of | + %| | | | QPs | + %+-----------------+-----------------+-----------------+-----------------+ + %| Old basis file | OT_INTEGER | None | 0 * input basis | + %| | | | map | + %+-----------------+-----------------+-----------------+-----------------+ + %| Partial price | OT_INTEGER | None | 1 * 10 for | + %| | | | large LPs | + %+-----------------+-----------------+-----------------+-----------------+ + %| Penalty | OT_REAL | None | 0.0 * initial | + %| parameter | | | penalty | + %| | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| Pivot tolerance | OT_REAL | None | 3.7e-11 * e^2/3 | + %+-----------------+-----------------+-----------------+-----------------+ + %| Print frequency | OT_INTEGER | None | 100 * minor | + %| | | | iterations log | + %| | | | on Print file | + %+-----------------+-----------------+-----------------+-----------------+ + %| Proximal point | OT_INTEGER | None | 1 * satisfies | + %| method | | | linear | + %| | | | constraints | + %| | | | near x0 | + %+-----------------+-----------------+-----------------+-----------------+ + %| Punch file | OT_INTEGER | None | 0 * output | + %| | | | Insert data | + %+-----------------+-----------------+-----------------+-----------------+ + %| QPSolver | OT_STRING | None | Cholesky * | + %| | | | default | + %+-----------------+-----------------+-----------------+-----------------+ + %| Reduced Hessian | OT_INTEGER | None | 2000 * or | + %| dimension | | | Superbasics | + %| | | | limit if that | + %| | | | is less | + %+-----------------+-----------------+-----------------+-----------------+ + %| Save frequency | OT_INTEGER | None | 100 * save | + %| | | | basis map | + %+-----------------+-----------------+-----------------+-----------------+ + %| Scale option | OT_INTEGER | None | 1 * linear | + %| | | | constraints and | + %| | | | variables | + %+-----------------+-----------------+-----------------+-----------------+ + %| Scale tolerance | OT_REAL | None | 0.900 | + %+-----------------+-----------------+-----------------+-----------------+ + %| Solution | OT_STRING | None | Yes * on the | + %| | | | Print file | + %+-----------------+-----------------+-----------------+-----------------+ + %| Solution file | OT_INTEGER | None | 0 * different | + %| | | | from printed | + %| | | | solution | + %+-----------------+-----------------+-----------------+-----------------+ + %| Sticky | OT_STRING | None | No * Yes makes | + %| parameters | | | parameter | + %| | | | values persist | + %+-----------------+-----------------+-----------------+-----------------+ + %| Summary | OT_INTEGER | None | 100 * minor | + %| frequency | | | iterations log | + %| | | | on Summary file | + %+-----------------+-----------------+-----------------+-----------------+ + %| Superbasics | OT_INTEGER | None | n1 + 1 * n1 = | + %| limit | | | number of | + %| | | | nonlinear | + %| | | | variables | + %+-----------------+-----------------+-----------------+-----------------+ + %| System | OT_STRING | None | No * Yes prints | + %| information | | | more system | + %| | | | information | + %+-----------------+-----------------+-----------------+-----------------+ + %| Timing level | OT_INTEGER | None | 3 * print cpu | + %| | | | times | + %+-----------------+-----------------+-----------------+-----------------+ + %| Unbounded | OT_REAL | None | 1.000e+15 | + %| objective | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| Unbounded step | OT_REAL | None | 1.000e+18 | + %| size | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| Verify level | OT_INTEGER | None | 0 * cheap check | + %| | | | on gradients | + %+-----------------+-----------------+-----------------+-----------------+ + %| Violation limit | OT_REAL | None | 10.0 * unscaled | + %| | | | constraint | + %| | | | violation limit | + %+-----------------+-----------------+-----------------+-----------------+ + %| detect_linear | OT_BOOLEAN | True | Make an effort | + %| | | | to treat linear | + %| | | | constraints and | + %| | | | linear | + %| | | | variables | + %| | | | specially. | + %+-----------------+-----------------+-----------------+-----------------+ + %| print file | OT_STRING | None | n/a | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_time | OT_BOOLEAN | True | print | + %| | | | information | + %| | | | about execution | + %| | | | time | + %+-----------------+-----------------+-----------------+-----------------+ + %| specs file | OT_STRING | None | n/a | + %+-----------------+-----------------+-----------------+-----------------+ + %| start | OT_STRING | Cold | | + %+-----------------+-----------------+-----------------+-----------------+ + %| summary | OT_BOOLEAN | True | n/a | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available monitors + % + %+-----------+ + %| Id | + %+===========+ + %| eval_nlp | + %+-----------+ + %| setup_nlp | + %+-----------+ + % + %>List of available stats + % + %+----------------+ + %| Id | + %+================+ + %| iter_count | + %+----------------+ + %| iterations | + %+----------------+ + %| n_callback_fun | + %+----------------+ + %| n_eval_grad_f | + %+----------------+ + %| n_eval_jac_g | + %+----------------+ + %| return_status | + %+----------------+ + %| t_callback_fun | + %+----------------+ + %| t_eval_grad_f | + %+----------------+ + %| t_eval_jac_g | + %+----------------+ + %| t_mainloop | + %+----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %worhp + %----- + % + % + % + %WORHP interface + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| AcceptTolFeas | OT_REAL | 0.001 | Tolerance for | + %| | | | acceptable | + %| | | | feasibility | + %+-----------------+-----------------+-----------------+-----------------+ + %| AcceptTolOpti | OT_REAL | 0.001 | Tolerance for | + %| | | | acceptable | + %| | | | optimality | + %+-----------------+-----------------+-----------------+-----------------+ + %| AlphaMinConst | OT_BOOLEAN | False | Use a constant | + %| | | | lower bound on | + %| | | | Armijo stepsize | + %| | | | in Filter | + %+-----------------+-----------------+-----------------+-----------------+ + %| Ares | OT_INTEGERVECTO | [42, 41, 42, | Armijo recovery | + %| | R | 43, 44, 41, 50] | strategies. | + %| | | | Vector of size | + %| | | | 7 | + %+-----------------+-----------------+-----------------+-----------------+ + %| ArmijoBeta | OT_REAL | 0.712 | Trial stepsize | + %| | | | decrease factor | + %| | | | for Armijo rule | + %+-----------------+-----------------+-----------------+-----------------+ + %| ArmijoMaxAlpha | OT_REAL | 1 | Initial alpha | + %| | | | for Armijo rule | + %+-----------------+-----------------+-----------------+-----------------+ + %| ArmijoMinAlpha | OT_REAL | 0.000 | Lower bound on | + %| | | | alpha for | + %| | | | Armijo rule | + %+-----------------+-----------------+-----------------+-----------------+ + %| ArmijoMinAlphaR | OT_REAL | 0.000 | Lower bound on | + %| ec | | | alpha for | + %| | | | Armijo rule | + %| | | | during recovery | + %+-----------------+-----------------+-----------------+-----------------+ + %| ArmijoSigma | OT_REAL | 0.005 | Scale factor | + %| | | | for linearised | + %| | | | descent check | + %| | | | in Armijo rule | + %+-----------------+-----------------+-----------------+-----------------+ + %| AutoQPRecovery | OT_BOOLEAN | True | Enable | + %| | | | automatic QP | + %| | | | recovery | + %+-----------------+-----------------+-----------------+-----------------+ + %| BFGSmaxblockSiz | OT_INTEGER | 300 | Block size | + %| e | | | parameter used | + %| | | | by certain BFGS | + %| | | | methods | + %+-----------------+-----------------+-----------------+-----------------+ + %| BFGSmethod | OT_INTEGER | 0 | Choose BFGS | + %| | | | method (0: | + %| | | | dense, 1-3: | + %| | | | block, 100+: | + %| | | | sparse) | + %+-----------------+-----------------+-----------------+-----------------+ + %| BFGSminblockSiz | OT_INTEGER | 300 | Block size | + %| e | | | parameter used | + %| | | | by certain BFGS | + %| | | | methods | + %+-----------------+-----------------+-----------------+-----------------+ + %| BFGSrestart | OT_INTEGER | 50 | Restart BFGS | + %| | | | update after | + %| | | | this many | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| BettsFactor | OT_REAL | 2.100 | Update factor | + %| | | | for Betts' | + %| | | | Hessian | + %| | | | regularisation | + %+-----------------+-----------------+-----------------+-----------------+ + %| BettsPoint | OT_REAL | 1 | Smallest | + %| | | | eigenvalue of | + %| | | | the regularised | + %| | | | Hessian | + %+-----------------+-----------------+-----------------+-----------------+ + %| BoundTolFac | OT_REAL | 1000 | Factor in | + %| | | | determining | + %| | | | active | + %| | | | constraints by | + %| | | | KKT | + %+-----------------+-----------------+-----------------+-----------------+ + %| CheckFJ | OT_REAL | 1.000e+12 | Upper bound | + %| | | | used by Fritz- | + %| | | | John heuristic | + %+-----------------+-----------------+-----------------+-----------------+ + %| CheckStructureD | OT_BOOLEAN | True | Enable | + %| F | | | structural | + %| | | | checking of DF | + %+-----------------+-----------------+-----------------+-----------------+ + %| CheckStructureD | OT_BOOLEAN | True | Enable | + %| G | | | structural | + %| | | | checking of DG | + %+-----------------+-----------------+-----------------+-----------------+ + %| CheckStructureH | OT_BOOLEAN | True | Enable | + %| M | | | structural | + %| | | | checking of HM | + %+-----------------+-----------------+-----------------+-----------------+ + %| CorStepBettsSum | OT_REAL | 0.500 | (experimental) | + %+-----------------+-----------------+-----------------+-----------------+ + %| CorStepConStop | OT_REAL | 0.000 | (experimental) | + %+-----------------+-----------------+-----------------+-----------------+ + %| CorStepConvio | OT_REAL | 1 | (experimental) | + %+-----------------+-----------------+-----------------+-----------------+ + %| CorStepMaxIter | OT_INTEGER | 50 | (experimental) | + %+-----------------+-----------------+-----------------+-----------------+ + %| CorStepMethod | OT_INTEGER | 0 | (experimental) | + %+-----------------+-----------------+-----------------+-----------------+ + %| CorStepMode | OT_INTEGER | 1 | (experimental) | + %+-----------------+-----------------+-----------------+-----------------+ + %| CorStepPFactor | OT_REAL | 1 | (experimental) | + %+-----------------+-----------------+-----------------+-----------------+ + %| CorStepPMax | OT_REAL | 1000000 | (experimental) | + %+-----------------+-----------------+-----------------+-----------------+ + %| CorStepRecovery | OT_BOOLEAN | False | (experimental) | + %| DX | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| CurvBCond | OT_REAL | 0.020 | Block BFGS | + %| | | | curvature | + %| | | | condition bound | + %+-----------------+-----------------+-----------------+-----------------+ + %| CurvBFac | OT_REAL | 0.300 | Block BFGS | + %| | | | curvature | + %| | | | condition | + %| | | | regularisation | + %| | | | factor | + %+-----------------+-----------------+-----------------+-----------------+ + %| CurvCond | OT_REAL | 0.020 | BFGS Curvature | + %| | | | condition bound | + %+-----------------+-----------------+-----------------+-----------------+ + %| CurvFac | OT_REAL | 0.300 | BFGS curvature | + %| | | | condition | + %| | | | regularisation | + %| | | | factor | + %+-----------------+-----------------+-----------------+-----------------+ + %| DebugMarker05 | OT_INTEGER | 42 | Debug marker. | + %| | | | Used to find | + %| | | | memory alignmen | + %| | | | t/padding | + %| | | | issues | + %+-----------------+-----------------+-----------------+-----------------+ + %| DebugMarker06 | OT_INTEGER | 42 | Debug marker. | + %| | | | Used to find | + %| | | | memory alignmen | + %| | | | t/padding | + %| | | | issues | + %+-----------------+-----------------+-----------------+-----------------+ + %| FGtogether | OT_BOOLEAN | False | F and G cannot | + %| | | | be evaluated | + %| | | | separately | + %+-----------------+-----------------+-----------------+-----------------+ + %| FJandND | OT_BOOLEAN | False | Enable Fritz- | + %| | | | John and non- | + %| | | | differentiable | + %| | | | check | + %| | | | heuristics | + %+-----------------+-----------------+-----------------+-----------------+ + %| FeasibleDual | OT_BOOLEAN | False | Activate dual | + %| | | | feasibility | + %| | | | mode | + %+-----------------+-----------------+-----------------+-----------------+ + %| FeasibleInit | OT_BOOLEAN | False | Activate | + %| | | | initial | + %| | | | feasibility | + %| | | | mode | + %+-----------------+-----------------+-----------------+-----------------+ + %| FeasibleInitTol | OT_REAL | 0.001 | Feasibility | + %| | | | tolerance for | + %| | | | no-objective | + %| | | | feasible mode | + %+-----------------+-----------------+-----------------+-----------------+ + %| FeasibleOnly | OT_BOOLEAN | False | Activate | + %| | | | feasible-only | + %| | | | mode | + %+-----------------+-----------------+-----------------+-----------------+ + %| FidifEps | OT_REAL | 0.000 | Finite | + %| | | | difference | + %| | | | perturbation | + %+-----------------+-----------------+-----------------+-----------------+ + %| FidifHM | OT_BOOLEAN | False | Approximate | + %| | | | Hessian by | + %| | | | finite | + %| | | | differences | + %| | | | (otherwise | + %| | | | BFGS) | + %+-----------------+-----------------+-----------------+-----------------+ + %| FilterBisecAlph | OT_BOOLEAN | True | Filter | + %| a | | | heuristic to | + %| | | | save Armijo | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| FilterGammaCV | OT_REAL | 0.000 | Constraint | + %| | | | violation | + %| | | | decrease factor | + %| | | | in Filter | + %| | | | acceptance | + %| | | | check | + %+-----------------+-----------------+-----------------+-----------------+ + %| FilterGammaF | OT_REAL | 0.000 | Objective | + %| | | | decrease factor | + %| | | | in Filter | + %| | | | acceptance | + %| | | | check | + %+-----------------+-----------------+-----------------+-----------------+ + %| FilterIntersecA | OT_BOOLEAN | True | Filter | + %| lpha | | | heuristic to | + %| | | | save Armijo | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| FirstDifCentral | OT_BOOLEAN | True | Use central | + %| | | | finite | + %| | | | difference | + %| | | | quotient for | + %| | | | first | + %| | | | derivatives | + %+-----------------+-----------------+-----------------+-----------------+ + %| FocusOnFeas | OT_BOOLEAN | True | Enable Focus- | + %| | | | on-Feasibility | + %| | | | mode | + %+-----------------+-----------------+-----------------+-----------------+ + %| FocusOnFeasFact | OT_REAL | 1.360 | Factor in | + %| or | | | Focus-on- | + %| | | | Feasibility | + %| | | | mode | + %+-----------------+-----------------+-----------------+-----------------+ + %| GammaAlpha | OT_REAL | 0.050 | Safety factor | + %| | | | for alphamin | + %| | | | calculation by | + %| | | | Filter | + %+-----------------+-----------------+-----------------+-----------------+ + %| GroupMethod | OT_INTEGER | 1 | Select method | + %| | | | to determine | + %| | | | graph colouring | + %| | | | groups | + %+-----------------+-----------------+-----------------+-----------------+ + %| IgnoreFilterCri | OT_BOOLEAN | False | Activate | + %| t | | | accelerating | + %| | | | heuristics for | + %| | | | Filter | + %+-----------------+-----------------+-----------------+-----------------+ + %| IncBettsTau | OT_REAL | 2 | Increase factor | + %| | | | for Betts' | + %| | | | update | + %| | | | dampening term | + %+-----------------+-----------------+-----------------+-----------------+ + %| IncBettsTauMore | OT_REAL | 100 | Larger increase | + %| | | | factor for | + %| | | | Betts' update | + %| | | | dampening term | + %+-----------------+-----------------+-----------------+-----------------+ + %| IncreaseIWS | OT_REAL | 1 | Increase factor | + %| | | | for estimated | + %| | | | integer | + %| | | | workspace | + %| | | | requirement | + %+-----------------+-----------------+-----------------+-----------------+ + %| IncreaseRWS | OT_REAL | 1 | Increase factor | + %| | | | for estimated | + %| | | | real workspace | + %| | | | requirement | + %+-----------------+-----------------+-----------------+-----------------+ + %| Infty | OT_REAL | 1.000e+20 | Upper bound for | + %| | | | numbers to be | + %| | | | regarded as | + %| | | | finite | + %+-----------------+-----------------+-----------------+-----------------+ + %| InftyUnbounded | OT_REAL | 1.000e+20 | Tolerance for | + %| | | | unboundedness | + %| | | | detection | + %| | | | heuristic | + %+-----------------+-----------------+-----------------+-----------------+ + %| InitialLMest | OT_BOOLEAN | True | Enable initial | + %| | | | Lagrange | + %| | | | multiplier | + %| | | | estimate | + %+-----------------+-----------------+-----------------+-----------------+ + %| KeepAcceptableS | OT_BOOLEAN | True | Save acceptable | + %| ol | | | solutions as | + %| | | | fallback | + %+-----------------+-----------------+-----------------+-----------------+ + %| LMestQPipComTol | OT_REAL | 0.003 | IP | + %| | | | complementarity | + %| | | | tolerance in | + %| | | | initial | + %| | | | multiplier | + %| | | | estimate | + %+-----------------+-----------------+-----------------+-----------------+ + %| LMestQPipResTol | OT_REAL | 1 | IP residual | + %| | | | tolerance in | + %| | | | initial | + %| | | | multiplier | + %| | | | estimate | + %+-----------------+-----------------+-----------------+-----------------+ + %| LinMult | OT_BOOLEAN | False | Control | + %| | | | Lagrange | + %| | | | multiplier | + %| | | | update | + %+-----------------+-----------------+-----------------+-----------------+ + %| LogLevel | OT_INTEGER | 0 | Enable XML | + %| | | | logfiles and | + %| | | | writing | + %| | | | interval | + %+-----------------+-----------------+-----------------+-----------------+ + %| LogResult | OT_INTEGER | 0 | Enable XML | + %| | | | result logging | + %| | | | and detail | + %| | | | level | + %+-----------------+-----------------+-----------------+-----------------+ + %| LowPassAlphaF | OT_REAL | 0.950 | Lowpass-filter | + %| | | | update factor | + %| | | | for objective | + %| | | | values | + %+-----------------+-----------------+-----------------+-----------------+ + %| LowPassAlphaG | OT_REAL | 0.950 | Lowpass-filter | + %| | | | update factor | + %| | | | for constraint | + %| | | | values | + %+-----------------+-----------------+-----------------+-----------------+ + %| LowPassAlphaMer | OT_REAL | 0.100 | Lowpass-filter | + %| it | | | update factor | + %| | | | for merit | + %| | | | function values | + %+-----------------+-----------------+-----------------+-----------------+ + %| LowPassFilter | OT_BOOLEAN | True | Enable lowpass- | + %| | | | filter | + %| | | | termination | + %| | | | criterion | + %+-----------------+-----------------+-----------------+-----------------+ + %| MA97blas3 | OT_BOOLEAN | False | Use BLAS level | + %| | | | 3 (dgemm) in | + %| | | | MA97 | + %+-----------------+-----------------+-----------------+-----------------+ + %| MA97mf | OT_BOOLEAN | False | Use | + %| | | | multifrontal- | + %| | | | style forward | + %| | | | solve of MA97 | + %+-----------------+-----------------+-----------------+-----------------+ + %| MA97nemin | OT_INTEGER | 8 | Node | + %| | | | amalgation, | + %| | | | controls | + %| | | | merging in | + %| | | | elimination | + %| | | | tree by MA97 | + %+-----------------+-----------------+-----------------+-----------------+ + %| MA97ordering | OT_INTEGER | 5 | Ordering used | + %| | | | by MA97 | + %+-----------------+-----------------+-----------------+-----------------+ + %| MA97print | OT_INTEGER | -1 | Print level | + %| | | | used by MA97 | + %+-----------------+-----------------+-----------------+-----------------+ + %| MA97scaling | OT_INTEGER | 0 | Scaling used by | + %| | | | MA97 | + %+-----------------+-----------------+-----------------+-----------------+ + %| MA97small | OT_REAL | 0.000 | Any pivot whose | + %| | | | modulus is less | + %| | | | than this is | + %| | | | treated as zero | + %| | | | by MA97 | + %+-----------------+-----------------+-----------------+-----------------+ + %| MA97u | OT_REAL | 0.010 | Relative pivot | + %| | | | tolerance of | + %| | | | MA97 | + %+-----------------+-----------------+-----------------+-----------------+ + %| MatrixCC | OT_BOOLEAN | False | Not to be | + %| | | | included into a | + %| | | | parameter file! | + %+-----------------+-----------------+-----------------+-----------------+ + %| MaxCalls | OT_INTEGER | 2.147e+09 | Upper bound to | + %| | | | Reverse | + %| | | | Communication | + %| | | | calls | + %+-----------------+-----------------+-----------------+-----------------+ + %| MaxForce | OT_INTEGER | 1000 | Maximum number | + %| | | | of Force | + %| | | | recovery | + %| | | | strategy steps | + %+-----------------+-----------------+-----------------+-----------------+ + %| MaxGPart | OT_INTEGER | 1 | (experimental) | + %+-----------------+-----------------+-----------------+-----------------+ + %| MaxIter | OT_INTEGER | 500 | Upper bound on | + %| | | | major | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| MaxLScounter | OT_INTEGER | 3 | Control | + %| | | | activation of | + %| | | | Filter | + %| | | | acceleration | + %| | | | heuristics | + %+-----------------+-----------------+-----------------+-----------------+ + %| MaxNorm | OT_BOOLEAN | True | Select max-norm | + %| | | | instead of | + %| | | | 1-norm in | + %| | | | Filter | + %+-----------------+-----------------+-----------------+-----------------+ + %| MeritFunction | OT_INTEGER | 4 | Select merit | + %| | | | function and | + %| | | | penalty update | + %| | | | [0, 3..5] | + %+-----------------+-----------------+-----------------+-----------------+ + %| MeritGradTol | OT_REAL | 0.000 | Threshold of | + %| | | | meritfunction | + %| | | | gradient for | + %| | | | increasing | + %| | | | Hessian | + %| | | | regularisation | + %+-----------------+-----------------+-----------------+-----------------+ + %| MinBettsTau | OT_REAL | 0.000 | Lower bound for | + %| | | | Betts' update | + %| | | | dampening term | + %+-----------------+-----------------+-----------------+-----------------+ + %| MoreRelax | OT_BOOLEAN | False | Introduce one | + %| | | | relaxation | + %| | | | variable for | + %| | | | every | + %| | | | constraint | + %+-----------------+-----------------+-----------------+-----------------+ + %| NLPmethod | OT_INTEGER | 1 | Select (1) | + %| | | | Meritfunction | + %| | | | or (3) Filter | + %| | | | globalisation | + %+-----------------+-----------------+-----------------+-----------------+ + %| NLPprint | OT_INTEGER | 2 | NLP print level | + %| | | | [-1..4] | + %+-----------------+-----------------+-----------------+-----------------+ + %| PairMethod | OT_INTEGER | 1 | Select method | + %| | | | to determine | + %| | | | graph colouring | + %| | | | pairgroups | + %+-----------------+-----------------+-----------------+-----------------+ + %| PenUpdEpsBar | OT_REAL | 0.900 | Penalty update | + %| | | | parameter | + %| | | | factor for | + %| | | | MeritFunction = | + %| | | | 3 | + %+-----------------+-----------------+-----------------+-----------------+ + %| PenUpdEpsKFac | OT_REAL | 2 | Penalty update | + %| | | | parameter | + %| | | | factor for | + %| | | | MeritFunction = | + %| | | | 4 | + %+-----------------+-----------------+-----------------+-----------------+ + %| PenUpdEpsKSeque | OT_INTEGER | 2 | Penalty update | + %| nce | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| PenUpdMaxDeltaK | OT_REAL | 11 | Max penalty for | + %| | | | MeritFunction = | + %| | | | 4 | + %+-----------------+-----------------+-----------------+-----------------+ + %| PenUpdMaxFac | OT_REAL | 100000000 | Max factor for | + %| | | | increasing | + %| | | | penalty for | + %| | | | MeritFunction = | + %| | | | 4 | + %+-----------------+-----------------+-----------------+-----------------+ + %| PenUpdRBar | OT_REAL | 2 | Penalty update | + %| | | | parameter for | + %| | | | MeritFunction = | + %| | | | 3 | + %+-----------------+-----------------+-----------------+-----------------+ + %| PrecisionF | OT_REAL | 0.000 | (currently | + %| | | | unused) | + %| | | | Relative | + %| | | | precision of | + %| | | | objective | + %+-----------------+-----------------+-----------------+-----------------+ + %| PrecisionG | OT_REAL | 0.000 | (currently | + %| | | | unused) | + %| | | | Relative | + %| | | | precision of | + %| | | | constraints | + %+-----------------+-----------------+-----------------+-----------------+ + %| QPscaleParam | OT_REAL | 0 | (currently | + %| | | | unused) Scaling | + %| | | | factor for QP | + %+-----------------+-----------------+-----------------+-----------------+ + %| QuadraticProble | OT_BOOLEAN | False | Not to be | + %| m | | | included into a | + %| | | | parameter file! | + %+-----------------+-----------------+-----------------+-----------------+ + %| ReduceBettsTau | OT_REAL | 0.300 | Decrease factor | + %| | | | for Betts' | + %| | | | update | + %| | | | dampening term | + %+-----------------+-----------------+-----------------+-----------------+ + %| RefineFeasibili | OT_INTEGER | 0 | 0 - | + %| ty | | | Deactivated, 1 | + %| | | | - After first | + %| | | | feasible | + %| | | | iterate, 2 - | + %| | | | Always on, | + %| | | | Activates | + %| | | | iterative | + %| | | | refinement due | + %| | | | to perturbation | + %| | | | in constraints | + %| | | | using | + %| | | | parametric | + %| | | | sensitivities | + %+-----------------+-----------------+-----------------+-----------------+ + %| RefineMaxHMReg | OT_REAL | 1000 | Maximum allowed | + %| | | | regularisation | + %| | | | of the hessian | + %| | | | CAUTION | + %| | | | absolute value | + %+-----------------+-----------------+-----------------+-----------------+ + %| RefineMaxRelax | OT_REAL | 0.750 | Maximum allowed | + %| | | | relaxation to | + %| | | | apply | + %| | | | feasibility | + %| | | | refinement | + %+-----------------+-----------------+-----------------+-----------------+ + %| RefineOnlyOnAlp | OT_BOOLEAN | True | Activates new | + %| ha | | | iterative | + %| | | | refinement of | + %| | | | constraints | + %| | | | only when | + %| | | | Armijo alpha | + %| | | | equals one | + %+-----------------+-----------------+-----------------+-----------------+ + %| RefineStartTol | OT_REAL | 0.000 | Start tolerance | + %| | | | for successful | + %| | | | termination of | + %| | | | iterative | + %| | | | refinement due | + %| | | | to perturbation | + %| | | | in constraints | + %+-----------------+-----------------+-----------------+-----------------+ + %| RegStrategy | OT_INTEGER | 1 | Select Hessian | + %| | | | regularisation | + %| | | | strategy in | + %| | | | Filter | + %+-----------------+-----------------+-----------------+-----------------+ + %| ReinitFilter | OT_BOOLEAN | False | Enables Filter- | + %| | | | reinitialisatio | + %| | | | n accelerating | + %| | | | heuristic | + %+-----------------+-----------------+-----------------+-----------------+ + %| RelaxMaxDelta | OT_REAL | 0.920 | Upper bound for | + %| | | | accepting the | + %| | | | constraint | + %| | | | relaxation | + %| | | | variable | + %+-----------------+-----------------+-----------------+-----------------+ + %| RelaxMaxPen | OT_REAL | 50000000 | Upper bound on | + %| | | | the constraint | + %| | | | relaxation | + %| | | | penalty | + %+-----------------+-----------------+-----------------+-----------------+ + %| RelaxRho | OT_REAL | 6 | Update factor | + %| | | | for the | + %| | | | constraint | + %| | | | relaxation | + %| | | | penalty | + %+-----------------+-----------------+-----------------+-----------------+ + %| RelaxStart | OT_REAL | 1 | Initial value | + %| | | | of the | + %| | | | constraint | + %| | | | relaxation | + %| | | | penalty | + %+-----------------+-----------------+-----------------+-----------------+ + %| RestUntilFeas | OT_BOOLEAN | False | Do restoration | + %| | | | until a | + %| | | | feasible | + %| | | | solution is | + %| | | | found | + %+-----------------+-----------------+-----------------+-----------------+ + %| ScaleConIter | OT_BOOLEAN | False | Scale | + %| | | | constraints in | + %| | | | every iteration | + %+-----------------+-----------------+-----------------+-----------------+ + %| ScaleFacObj | OT_REAL | 10 | Value to scale | + %| | | | large objective | + %| | | | functions to | + %+-----------------+-----------------+-----------------+-----------------+ + %| ScaleFacQP | OT_REAL | 10 | Upper bound on | + %| | | | resulting | + %| | | | matrix norm for | + %| | | | QP scaling | + %+-----------------+-----------------+-----------------+-----------------+ + %| ScaledFD | OT_BOOLEAN | True | Use a scaled | + %| | | | perturbation | + %| | | | for finite | + %| | | | differences | + %+-----------------+-----------------+-----------------+-----------------+ + %| ScaledKKT | OT_BOOLEAN | True | Scale KKT | + %| | | | conditions | + %+-----------------+-----------------+-----------------+-----------------+ + %| ScaledObj | OT_BOOLEAN | True | Scale the | + %| | | | objective | + %| | | | function | + %+-----------------+-----------------+-----------------+-----------------+ + %| ScaledQP | OT_BOOLEAN | True | Scale some | + %| | | | matrices handed | + %| | | | to the QP | + %+-----------------+-----------------+-----------------+-----------------+ + %| StartBettsTau | OT_REAL | 0.100 | Initial value | + %| | | | for Betts' | + %| | | | update | + %| | | | dampening term | + %+-----------------+-----------------+-----------------+-----------------+ + %| SteffensenOnRef | OT_BOOLEAN | False | Use Steffensen | + %| ine | | | Extrapolation | + %| | | | during | + %| | | | Feasibility | + %| | | | Refinement | + %+-----------------+-----------------+-----------------+-----------------+ + %| SwitchingDelta | OT_REAL | 0.010 | Filter | + %| | | | switching | + %| | | | condition | + %| | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| SwitchingSCV | OT_REAL | 1.100 | Filter | + %| | | | switching | + %| | | | condition | + %| | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| SwitchingSF | OT_REAL | 2.300 | Filter | + %| | | | switching | + %| | | | condition | + %| | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| TakeQPSol | OT_BOOLEAN | False | Evaluate QP | + %| | | | search | + %| | | | direction | + %| | | | regardless of | + %| | | | convergence | + %+-----------------+-----------------+-----------------+-----------------+ + %| Timeout | OT_REAL | 300 | Timeout in | + %| | | | seconds | + %+-----------------+-----------------+-----------------+-----------------+ + %| TolComp | OT_REAL | 0.001 | Complementarity | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| TolFeas | OT_REAL | 0.000 | Feasibility | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| TolOpti | OT_REAL | 0.000 | Optimality | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| TolWeakActive | OT_REAL | 1 | (experimental) | + %+-----------------+-----------------+-----------------+-----------------+ + %| TooBig | OT_BOOLEAN | True | Enable too-big | + %| | | | termination | + %| | | | heuristics | + %+-----------------+-----------------+-----------------+-----------------+ + %| TooBigCV | OT_REAL | 1.000e+25 | Upper bound on | + %| | | | constraint | + %| | | | violation for | + %| | | | too-big | + %| | | | heuristic | + %+-----------------+-----------------+-----------------+-----------------+ + %| TooBigKKT | OT_REAL | 1.000e+30 | Upper bound on | + %| | | | KKT values for | + %| | | | too-big | + %| | | | heuristic | + %+-----------------+-----------------+-----------------+-----------------+ + %| UpdateMu | OT_BOOLEAN | True | Activates | + %| | | | update of | + %| | | | lagrange | + %| | | | multipliers | + %| | | | during | + %| | | | correction step | + %+-----------------+-----------------+-----------------+-----------------+ + %| UseZen | OT_BOOLEAN | False | Run Zen module | + %| | | | after | + %| | | | successful | + %| | | | termination | + %+-----------------+-----------------+-----------------+-----------------+ + %| UserDF | OT_BOOLEAN | True | Objective | + %| | | | gradient values | + %| | | | supplied by | + %| | | | caller | + %+-----------------+-----------------+-----------------+-----------------+ + %| UserDG | OT_BOOLEAN | True | Jacobian values | + %| | | | supplied by | + %| | | | caller | + %+-----------------+-----------------+-----------------+-----------------+ + %| UserHM | OT_BOOLEAN | True | Hessian values | + %| | | | supplied by | + %| | | | caller | + %+-----------------+-----------------+-----------------+-----------------+ + %| UserHMstructure | OT_INTEGER | 2 | Enable | + %| | | | automatic | + %| | | | Hessian | + %| | | | structure | + %| | | | generation or | + %| | | | checking | + %+-----------------+-----------------+-----------------+-----------------+ + %| UserZenDGp | OT_BOOLEAN | False | Hessian values | + %| | | | supplied by | + %| | | | caller | + %+-----------------+-----------------+-----------------+-----------------+ + %| UserZenDLp | OT_BOOLEAN | False | Gradient values | + %| | | | supplied by | + %| | | | caller | + %+-----------------+-----------------+-----------------+-----------------+ + %| UserZenDLpp | OT_BOOLEAN | False | Hessian values | + %| | | | supplied by | + %| | | | caller | + %+-----------------+-----------------+-----------------+-----------------+ + %| UserZenDLxp | OT_BOOLEAN | False | Hessian values | + %| | | | supplied by | + %| | | | caller | + %+-----------------+-----------------+-----------------+-----------------+ + %| WeakActiveSet | OT_BOOLEAN | False | (experimental) | + %+-----------------+-----------------+-----------------+-----------------+ + %| ZenCheckMaxPert | OT_BOOLEAN | False | Check maximum | + %| | | | of secure | + %| | | | perturbation | + %| | | | when updating | + %| | | | solution | + %+-----------------+-----------------+-----------------+-----------------+ + %| ZenFDnewMethod | OT_BOOLEAN | True | | + %+-----------------+-----------------+-----------------+-----------------+ + %| ZenRenewLU | OT_BOOLEAN | False | false: use LU | + %| | | | from last QP | + %| | | | step; true: | + %| | | | renew LU | + %| | | | decomposition. | + %+-----------------+-----------------+-----------------+-----------------+ + %| eps | OT_REAL | 0.000 | Machine epsilon | + %+-----------------+-----------------+-----------------+-----------------+ + %| internalParChan | OT_INTEGER | 0 | Counter for | + %| ged | | | changed | + %| | | | parameters. | + %| | | | Internal use | + %| | | | only. | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_time | OT_BOOLEAN | True | Print | + %| | | | information | + %| | | | about execution | + %| | | | time | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_ipBarrier | OT_REAL | 7.800 | IP barrier | + %| | | | parameter. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_ipComTol | OT_REAL | 0.000 | IP | + %| | | | complementarity | + %| | | | tolerance. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_ipFracBound | OT_REAL | 0.880 | IP fraction-to- | + %| | | | the-boundary | + %| | | | parameter. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_ipLsMethod | OT_STRING | None | Select the | + %| | | | direct linear | + %| | | | solver used by | + %| | | | the IP method. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_ipMinAlpha | OT_REAL | 0.000 | IP line search | + %| | | | minimum step | + %| | | | size. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_ipRelaxDiv | OT_REAL | 2 | The relaxation | + %| | | | term is divided | + %| | | | by this value | + %| | | | if successful. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_ipRelaxMax | OT_REAL | 0.000 | Maximum | + %| | | | relaxation | + %| | | | value. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_ipRelaxMin | OT_REAL | 0.000 | Mimimum | + %| | | | relaxation | + %| | | | value. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_ipRelaxMult | OT_REAL | 10 | The relaxation | + %| | | | term is | + %| | | | multiplied by | + %| | | | this value if | + %| | | | unsuccessful. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_ipResTol | OT_REAL | 0.000 | IP residuals | + %| | | | tolerance. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_ipTryRelax | OT_BOOLEAN | True | Enable | + %| | | | relaxation | + %| | | | strategy when | + %| | | | encountering an | + %| | | | error. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_lsItMaxIter | OT_INTEGER | 1000 | Maximum number | + %| | | | of iterations | + %| | | | of the | + %| | | | iterative | + %| | | | linear solvers. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_lsItMethod | OT_STRING | None | Select the | + %| | | | iterative | + %| | | | linear solver. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_lsItPrecondM | OT_STRING | None | Select | + %| ethod | | | preconditioner | + %| | | | for the | + %| | | | iterative | + %| | | | linear solver. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_lsRefineMaxI | OT_INTEGER | 10 | Maximum number | + %| ter | | | of iterative | + %| | | | refinement | + %| | | | steps of the | + %| | | | direct linear | + %| | | | solvers. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_lsScale | OT_BOOLEAN | True | Enables scaling | + %| | | | on linear | + %| | | | solver level. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_lsTol | OT_REAL | 0.000 | Tolerance for | + %| | | | the linear | + %| | | | solver. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_lsTrySimple | OT_BOOLEAN | False | Some matrices | + %| | | | can be solved | + %| | | | without calling | + %| | | | a linear | + %| | | | equation solver | + %| | | | .Currently only | + %| | | | diagonal | + %| | | | matrices are | + %| | | | supported.Non- | + %| | | | diagonal | + %| | | | matrices will | + %| | | | besolved with | + %| | | | the chosen | + %| | | | linear equation | + %| | | | solver. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_maxIter | OT_INTEGER | 80 | Imposes an | + %| | | | upper limit on | + %| | | | the number of | + %| | | | minor solver | + %| | | | iterations, | + %| | | | i.e. for the | + %| | | | quadratic | + %| | | | subproblem | + %| | | | solver.If the | + %| | | | limit is | + %| | | | reached before | + %| | | | convergence, | + %| | | | WORHP will | + %| | | | activate QP | + %| | | | recovery | + %| | | | strategies to | + %| | | | prevent a | + %| | | | solver | + %| | | | breakdown. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_method | OT_STRING | None | Select the | + %| | | | solution method | + %| | | | used by the QP | + %| | | | solver. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_nsnBeta | OT_REAL | 0.900 | NSN stepsize | + %| | | | decrease | + %| | | | factor. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_nsnGradStep | OT_BOOLEAN | True | Enable gradient | + %| | | | steps in the | + %| | | | NSN method. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_nsnKKT | OT_REAL | 0.000 | NSN KKT | + %| | | | tolerance. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_nsnLsMethod | OT_STRING | None | Select the | + %| | | | direct linear | + %| | | | solver used by | + %| | | | the NSN method. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_nsnMinAlpha | OT_REAL | 0.000 | NSN line search | + %| | | | minimum step | + %| | | | size. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_nsnSigma | OT_REAL | 0.010 | NSN line search | + %| | | | slope | + %| | | | parameter. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_printLevel | OT_STRING | None | Controls the | + %| | | | amount of QP | + %| | | | solver output. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_scaleIntern | OT_BOOLEAN | False | Enable scaling | + %| | | | on QP level. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_strict | OT_BOOLEAN | True | Use strict | + %| | | | termination | + %| | | | criteria in IP | + %| | | | method. | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available monitors + % + %+-------------+ + %| Id | + %+=============+ + %| eval_f | + %+-------------+ + %| eval_g | + %+-------------+ + %| eval_grad_f | + %+-------------+ + %| eval_h | + %+-------------+ + %| eval_jac_g | + %+-------------+ + % + %>List of available stats + % + %+--------------------+ + %| Id | + %+====================+ + %| iter_count | + %+--------------------+ + %| iteration | + %+--------------------+ + %| iterations | + %+--------------------+ + %| n_eval_f | + %+--------------------+ + %| n_eval_g | + %+--------------------+ + %| n_eval_grad_f | + %+--------------------+ + %| n_eval_h | + %+--------------------+ + %| n_eval_jac_g | + %+--------------------+ + %| return_code | + %+--------------------+ + %| return_status | + %+--------------------+ + %| t_callback_fun | + %+--------------------+ + %| t_callback_prepare | + %+--------------------+ + %| t_eval_f | + %+--------------------+ + %| t_eval_g | + %+--------------------+ + %| t_eval_grad_f | + %+--------------------+ + %| t_eval_h | + %+--------------------+ + %| t_eval_jac_g | + %+--------------------+ + %| t_mainloop | + %+--------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %scpgen + %------ + % + % + % + %A structure-exploiting sequential quadratic programming (to be come + %sequential convex programming) method for nonlinear programming. + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| beta | OT_REAL | 0.800 | Line-search | + %| | | | parameter, | + %| | | | restoration | + %| | | | factor of | + %| | | | stepsize | + %+-----------------+-----------------+-----------------+-----------------+ + %| c1 | OT_REAL | 0.000 | Armijo | + %| | | | condition, | + %| | | | coefficient of | + %| | | | decrease in | + %| | | | merit | + %+-----------------+-----------------+-----------------+-----------------+ + %| codegen | OT_BOOLEAN | false | C-code | + %| | | | generation | + %+-----------------+-----------------+-----------------+-----------------+ + %| compiler | OT_STRING | "gcc -fPIC -O2" | Compiler | + %| | | | command to be | + %| | | | used for | + %| | | | compiling | + %| | | | generated code | + %+-----------------+-----------------+-----------------+-----------------+ + %| hessian_approxi | OT_STRING | "exact" | gauss- | + %| mation | | | newton|exact | + %+-----------------+-----------------+-----------------+-----------------+ + %| lbfgs_memory | OT_INTEGER | 10 | Size of L-BFGS | + %| | | | memory. | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_iter | OT_INTEGER | 50 | Maximum number | + %| | | | of SQP | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_iter_ls | OT_INTEGER | 1 | Maximum number | + %| | | | of linesearch | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| merit_memsize | OT_INTEGER | 4 | Size of memory | + %| | | | to store | + %| | | | history of | + %| | | | merit function | + %| | | | values | + %+-----------------+-----------------+-----------------+-----------------+ + %| merit_start | OT_REAL | 0.000 | Lower bound for | + %| | | | the merit | + %| | | | function | + %| | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| name_x | OT_STRINGVECTOR | GenericType() | Names of the | + %| | | | variables. | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_header | OT_BOOLEAN | true | Print the | + %| | | | header with | + %| | | | problem | + %| | | | statistics | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_time | OT_BOOLEAN | true | Print | + %| | | | information | + %| | | | about execution | + %| | | | time | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_x | OT_INTEGERVECTO | GenericType() | Which variables | + %| | R | | to print. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_solver | OT_STRING | GenericType() | The QP solver | + %| | | | to be used by | + %| | | | the SQP method | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_solver_optio | OT_DICT | GenericType() | Options to be | + %| ns | | | passed to the | + %| | | | QP solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| reg_threshold | OT_REAL | 0.000 | Threshold for | + %| | | | the | + %| | | | regularization. | + %+-----------------+-----------------+-----------------+-----------------+ + %| regularize | OT_BOOLEAN | false | Automatic | + %| | | | regularization | + %| | | | of Lagrange | + %| | | | Hessian. | + %+-----------------+-----------------+-----------------+-----------------+ + %| tol_du | OT_REAL | 0.000 | Stopping | + %| | | | criterion for | + %| | | | dual | + %| | | | infeasability | + %+-----------------+-----------------+-----------------+-----------------+ + %| tol_pr | OT_REAL | 0.000 | Stopping | + %| | | | criterion for | + %| | | | primal | + %| | | | infeasibility | + %+-----------------+-----------------+-----------------+-----------------+ + %| tol_pr_step | OT_REAL | 0.000 | Stopping | + %| | | | criterion for | + %| | | | the step size | + %+-----------------+-----------------+-----------------+-----------------+ + %| tol_reg | OT_REAL | 0.000 | Stopping | + %| | | | criterion for | + %| | | | regularization | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available monitors + % + %+-------------+ + %| Id | + %+=============+ + %| dx | + %+-------------+ + %| eval_f | + %+-------------+ + %| eval_g | + %+-------------+ + %| eval_grad_f | + %+-------------+ + %| eval_h | + %+-------------+ + %| eval_jac_g | + %+-------------+ + %| qp | + %+-------------+ + % + %>List of available stats + % + %+------------+ + %| Id | + %+============+ + %| iter_count | + %+------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %sqpmethod + %--------- + % + % + % + %A textbook SQPMethod + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| beta | OT_REAL | 0.800 | Line-search | + %| | | | parameter, | + %| | | | restoration | + %| | | | factor of | + %| | | | stepsize | + %+-----------------+-----------------+-----------------+-----------------+ + %| c1 | OT_REAL | 0.000 | Armijo | + %| | | | condition, | + %| | | | coefficient of | + %| | | | decrease in | + %| | | | merit | + %+-----------------+-----------------+-----------------+-----------------+ + %| hessian_approxi | OT_STRING | "exact" | limited- | + %| mation | | | memory|exact | + %+-----------------+-----------------+-----------------+-----------------+ + %| lbfgs_memory | OT_INTEGER | 10 | Size of L-BFGS | + %| | | | memory. | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_iter | OT_INTEGER | 50 | Maximum number | + %| | | | of SQP | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_iter_ls | OT_INTEGER | 3 | Maximum number | + %| | | | of linesearch | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| merit_memory | OT_INTEGER | 4 | Size of memory | + %| | | | to store | + %| | | | history of | + %| | | | merit function | + %| | | | values | + %+-----------------+-----------------+-----------------+-----------------+ + %| min_step_size | OT_REAL | 0.000 | The size (inf- | + %| | | | norm) of the | + %| | | | step size | + %| | | | should not | + %| | | | become smaller | + %| | | | than this. | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_header | OT_BOOLEAN | true | Print the | + %| | | | header with | + %| | | | problem | + %| | | | statistics | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_time | OT_BOOLEAN | true | Print | + %| | | | information | + %| | | | about execution | + %| | | | time | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_solver | OT_STRING | GenericType() | The QP solver | + %| | | | to be used by | + %| | | | the SQP method | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_solver_optio | OT_DICT | GenericType() | Options to be | + %| ns | | | passed to the | + %| | | | QP solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| regularize | OT_BOOLEAN | false | Automatic | + %| | | | regularization | + %| | | | of Lagrange | + %| | | | Hessian. | + %+-----------------+-----------------+-----------------+-----------------+ + %| tol_du | OT_REAL | 0.000 | Stopping | + %| | | | criterion for | + %| | | | dual | + %| | | | infeasability | + %+-----------------+-----------------+-----------------+-----------------+ + %| tol_pr | OT_REAL | 0.000 | Stopping | + %| | | | criterion for | + %| | | | primal | + %| | | | infeasibility | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available monitors + % + %+-------------+ + %| Id | + %+=============+ + %| bfgs | + %+-------------+ + %| dx | + %+-------------+ + %| eval_f | + %+-------------+ + %| eval_g | + %+-------------+ + %| eval_grad_f | + %+-------------+ + %| eval_h | + %+-------------+ + %| eval_jac_g | + %+-------------+ + %| qp | + %+-------------+ + % + %>List of available stats + % + %+--------------------+ + %| Id | + %+====================+ + %| iter_count | + %+--------------------+ + %| iteration | + %+--------------------+ + %| iterations | + %+--------------------+ + %| n_eval_f | + %+--------------------+ + %| n_eval_g | + %+--------------------+ + %| n_eval_grad_f | + %+--------------------+ + %| n_eval_h | + %+--------------------+ + %| n_eval_jac_g | + %+--------------------+ + %| return_status | + %+--------------------+ + %| t_callback_fun | + %+--------------------+ + %| t_callback_prepare | + %+--------------------+ + %| t_eval_f | + %+--------------------+ + %| t_eval_g | + %+--------------------+ + %| t_eval_grad_f | + %+--------------------+ + %| t_eval_h | + %+--------------------+ + %| t_eval_jac_g | + %+--------------------+ + %| t_mainloop | + %+--------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %stabilizedsqp + %------------- + % + % + % + %Stabilized Sequential Quadratic Programming method. + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| TReta1 | OT_REAL | 0.800 | Required | + %| | | | predicted / | + %| | | | actual decrease | + %| | | | for TR increase | + %+-----------------+-----------------+-----------------+-----------------+ + %| TReta2 | OT_REAL | 0.200 | Required | + %| | | | predicted / | + %| | | | actual decrease | + %| | | | for TR decrease | + %+-----------------+-----------------+-----------------+-----------------+ + %| alphaMin | OT_REAL | 0.001 | Used to check | + %| | | | whether to | + %| | | | increase rho. | + %+-----------------+-----------------+-----------------+-----------------+ + %| beta | OT_REAL | 0.500 | Line-search | + %| | | | parameter, | + %| | | | restoration | + %| | | | factor of | + %| | | | stepsize | + %+-----------------+-----------------+-----------------+-----------------+ + %| c1 | OT_REAL | 0.001 | Armijo | + %| | | | condition, | + %| | | | coefficient of | + %| | | | decrease in | + %| | | | merit | + %+-----------------+-----------------+-----------------+-----------------+ + %| dvMax0 | OT_REAL | 100 | Parameter used | + %| | | | to defined the | + %| | | | max step | + %| | | | length. | + %+-----------------+-----------------+-----------------+-----------------+ + %| eps_active | OT_REAL | 0.000 | Threshold for | + %| | | | the epsilon- | + %| | | | active set. | + %+-----------------+-----------------+-----------------+-----------------+ + %| gamma1 | OT_REAL | 2 | Trust region | + %| | | | increase | + %| | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| gamma2 | OT_REAL | 1 | Trust region | + %| | | | update | + %| | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| gamma3 | OT_REAL | 1 | Trust region | + %| | | | decrease | + %| | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| hessian_approxi | OT_STRING | "exact" | limited- | + %| mation | | | memory|exact | + %+-----------------+-----------------+-----------------+-----------------+ + %| lbfgs_memory | OT_INTEGER | 10 | Size of L-BFGS | + %| | | | memory. | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_iter | OT_INTEGER | 100 | Maximum number | + %| | | | of SQP | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_iter_ls | OT_INTEGER | 20 | Maximum number | + %| | | | of linesearch | + %| | | | iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| max_time | OT_REAL | 1.000e+12 | Timeout | + %+-----------------+-----------------+-----------------+-----------------+ + %| merit_memory | OT_INTEGER | 4 | Size of memory | + %| | | | to store | + %| | | | history of | + %| | | | merit function | + %| | | | values | + %+-----------------+-----------------+-----------------+-----------------+ + %| min_step_size | OT_REAL | 0.000 | The size (inf- | + %| | | | norm) of the | + %| | | | step size | + %| | | | should not | + %| | | | become smaller | + %| | | | than this. | + %+-----------------+-----------------+-----------------+-----------------+ + %| muR0 | OT_REAL | 0.000 | Initial choice | + %| | | | of | + %| | | | regularization | + %| | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| nu | OT_REAL | 1 | Parameter for | + %| | | | primal-dual | + %| | | | augmented | + %| | | | Lagrangian. | + %+-----------------+-----------------+-----------------+-----------------+ + %| phiWeight | OT_REAL | 0.000 | Weight used in | + %| | | | pseudo-filter. | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_header | OT_BOOLEAN | true | Print the | + %| | | | header with | + %| | | | problem | + %| | | | statistics | + %+-----------------+-----------------+-----------------+-----------------+ + %| regularize | OT_BOOLEAN | false | Automatic | + %| | | | regularization | + %| | | | of Lagrange | + %| | | | Hessian. | + %+-----------------+-----------------+-----------------+-----------------+ + %| stabilized_qp_s | OT_STRING | GenericType() | The Stabilized | + %| olver | | | QP solver to be | + %| | | | used by the SQP | + %| | | | method | + %+-----------------+-----------------+-----------------+-----------------+ + %| stabilized_qp_s | OT_DICT | GenericType() | Options to be | + %| olver_options | | | passed to the | + %| | | | Stabilized QP | + %| | | | solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| tau0 | OT_REAL | 0.010 | Initial | + %| | | | parameter for | + %| | | | the merit | + %| | | | function | + %| | | | optimality | + %| | | | threshold. | + %+-----------------+-----------------+-----------------+-----------------+ + %| tol_du | OT_REAL | 0.000 | Stopping | + %| | | | criterion for | + %| | | | dual | + %| | | | infeasability | + %+-----------------+-----------------+-----------------+-----------------+ + %| tol_pr | OT_REAL | 0.000 | Stopping | + %| | | | criterion for | + %| | | | primal | + %| | | | infeasibility | + %+-----------------+-----------------+-----------------+-----------------+ + %| yEinitial | OT_STRING | "simple" | Initial | + %| | | | multiplier. | + %| | | | Simple (all | + %| | | | zero) or least | + %| | | | (LSQ). | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available monitors + % + %+-------------+ + %| Id | + %+=============+ + %| dx | + %+-------------+ + %| eval_f | + %+-------------+ + %| eval_g | + %+-------------+ + %| eval_grad_f | + %+-------------+ + %| eval_h | + %+-------------+ + %| eval_jac_g | + %+-------------+ + %| qp | + %+-------------+ + % + %>List of available stats + % + %+---------------+ + %| Id | + %+===============+ + %| iter_count | + %+---------------+ + %| return_status | + %+---------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joel Andersson + %Diagrams + %-------- + % + % + % + %C++ includes: nlp_solver.hpp + %Usage: NlpSolver () + % + methods + function varargout = reportConstraints(self,varargin) + %Prints out a human readable report about possible constraint violations, + %after solving. + % + % + %Usage: reportConstraints () + % + + try + + [varargout{1:nargout}] = casadiMEX(989, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getReportConstraints(self,varargin) + %Usage: retval = getReportConstraints () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(990, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nlp(self,varargin) + %Access the NLP. + % + %>Input scheme: casadi::NlpSolverInput (NLP_SOLVER_NUM_IN = 8) [nlpSolverIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| NLP_SOLVER_X0 | x0 | Decision variables, | + %| | | initial guess (nx x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_P | p | Value of fixed | + %| | | parameters (np x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LBX | lbx | Decision variables | + %| | | lower bound (nx x 1), | + %| | | default -inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_UBX | ubx | Decision variables | + %| | | upper bound (nx x 1), | + %| | | default +inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LBG | lbg | Constraints lower | + %| | | bound (ng x 1), | + %| | | default -inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_UBG | ubg | Constraints upper | + %| | | bound (ng x 1), | + %| | | default +inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_X0 | lam_x0 | Lagrange multipliers | + %| | | for bounds on X, | + %| | | initial guess (nx x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_G0 | lam_g0 | Lagrange multipliers | + %| | | for bounds on G, | + %| | | initial guess (ng x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::NlpSolverOutput (NLP_SOLVER_NUM_OUT = 6) [nlpSolverOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| NLP_SOLVER_X | x | Decision variables at | + %| | | the optimal solution | + %| | | (nx x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_F | f | Cost function value at | + %| | | the optimal solution | + %| | | (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_G | g | Constraints function | + %| | | at the optimal | + %| | | solution (ng x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_X | lam_x | Lagrange multipliers | + %| | | for bounds on X at the | + %| | | solution (nx x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_G | lam_g | Lagrange multipliers | + %| | | for bounds on G at the | + %| | | solution (ng x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_P | lam_p | Lagrange multipliers | + %| | | for bounds on P at the | + %| | | solution (np x 1) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = nlp () + % + %retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(991, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = gradF(self,varargin) + %Access the objective gradient function>Input scheme: casadi::GradFInput + %(GRADF_NUM_IN = 2) [gradFIn] + % + %+-----------+-------+---------------------+ + %| Full name | Short | Description | + %+===========+=======+=====================+ + %| GRADF_X | x | Decision variable . | + %+-----------+-------+---------------------+ + %| GRADF_P | p | Fixed parameter . | + %+-----------+-------+---------------------+ + % + % + %Usage: retval = gradF () + % + %retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(992, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = jacG(self,varargin) + %Access the Hessian of the Lagrangian function. + % + %>Input scheme: casadi::JacGInput (JACG_NUM_IN = 2) [jacGIn] + % + %+-----------+-------+---------------------+ + %| Full name | Short | Description | + %+===========+=======+=====================+ + %| JACG_X | x | Decision variable . | + %+-----------+-------+---------------------+ + %| JACG_P | p | Fixed parameter . | + %+-----------+-------+---------------------+ + % + %>Output scheme: casadi::JacGOutput (JACG_NUM_OUT = 3) [jacGOut] + % + %+-----------+-------+-------------------------------+ + %| Full name | Short | Description | + %+===========+=======+===============================+ + %| JACG_JAC | jac | Jacobian of the constraints . | + %+-----------+-------+-------------------------------+ + %| JACG_F | f | Objective function . | + %+-----------+-------+-------------------------------+ + %| JACG_G | g | Constraint function . | + %+-----------+-------+-------------------------------+ + % + % + %Usage: retval = jacG () + % + %retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(993, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hessLag(self,varargin) + %Access the Jacobian of the constraint function. + % + %>Input scheme: casadi::HessLagInput (HESSLAG_NUM_IN = 4) [hessLagIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| HESSLAG_X | x | Decision variable . | + %+------------------------+------------------------+------------------------+ + %| HESSLAG_P | p | Fixed parameter . | + %+------------------------+------------------------+------------------------+ + %| HESSLAG_LAM_F | lam_f | Multiplier for f. Just | + %| | | a scalar factor for | + %| | | the objective that the | + %| | | NLP solver might use | + %| | | to scale the | + %| | | objective. | + %+------------------------+------------------------+------------------------+ + %| HESSLAG_LAM_G | lam_g | Multiplier for g . | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::HessLagOutput (HESSLAG_NUM_OUT = 5) [hessLagOut] + % + %+----------------+--------+------------------------------------------------+ + %| Full name | Short | Description | + %+================+========+================================================+ + %| HESSLAG_HESS | hess | Hessian of the Lagrangian . | + %+----------------+--------+------------------------------------------------+ + %| HESSLAG_F | f | Objective function . | + %+----------------+--------+------------------------------------------------+ + %| HESSLAG_G | g | Constraint function . | + %+----------------+--------+------------------------------------------------+ + %| HESSLAG_GRAD_X | grad_x | Gradient of the Lagrangian with respect to x . | + %+----------------+--------+------------------------------------------------+ + %| HESSLAG_GRAD_P | grad_p | Gradient of the Lagrangian with respect to p . | + %+----------------+--------+------------------------------------------------+ + % + % + %Usage: retval = hessLag () + % + %retval is of type Function. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(994, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getReducedHessian(self,varargin) + %Get the reduced Hessian. Requires a patched sIPOPT installation, see CasADi + %documentation. + % + % + %Usage: retval = getReducedHessian () + % + %retval is of type DMatrix. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(995, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setOptionsFromFile(self,varargin) + %Read options from parameter xml. + % + % + %Usage: setOptionsFromFile (file) + % + %file is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(996, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = NlpSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(997, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(998, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(985, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(986, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(987, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(988, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Nullspace.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Nullspace.m new file mode 100755 index 0000000..8ee8438 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Nullspace.m @@ -0,0 +1,308 @@ +classdef Nullspace < casadi.Function + %Base class for nullspace construction. + % + %Constructs a basis for the null-space of a fat matrix A. i.e. finds Z such + %that AZ = 0 holds. + % + %The nullspace is also known as the orthogonal complement of the rowspace of + %a matrix. + % + %It is assumed that the matrix A is of full rank. + % + %Implementations are not required to construct an orthogonal or orthonormal + %basis Joris Gillis + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| dense | OT_BOOLEAN | true | Indicates | casadi::Null | + %| | | | that dense | spaceInterna | + %| | | | matrices can | l | + %| | | | be assumed | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: nullspace.hpp + %Usage: Nullspace () + % + methods + function self = Nullspace(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1090, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1091, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1089, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ACOS.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ACOS.m new file mode 100755 index 0000000..578a3a1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ACOS.m @@ -0,0 +1,7 @@ +function v = OP_ACOS() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 80); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ACOSH.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ACOSH.m new file mode 100755 index 0000000..b1f7aeb --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ACOSH.m @@ -0,0 +1,7 @@ +function v = OP_ACOSH() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 104); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ADD.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ADD.m new file mode 100755 index 0000000..b8403d5 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ADD.m @@ -0,0 +1,7 @@ +function v = OP_ADD() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 64); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ADDNONZEROS.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ADDNONZEROS.m new file mode 100755 index 0000000..8821434 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ADDNONZEROS.m @@ -0,0 +1,7 @@ +function v = OP_ADDNONZEROS() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 130); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_AND.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_AND.m new file mode 100755 index 0000000..996273c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_AND.m @@ -0,0 +1,7 @@ +function v = OP_AND() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 87); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASIN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASIN.m new file mode 100755 index 0000000..9d9d34d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASIN.m @@ -0,0 +1,7 @@ +function v = OP_ASIN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 79); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASINH.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASINH.m new file mode 100755 index 0000000..4b22716 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASINH.m @@ -0,0 +1,7 @@ +function v = OP_ASINH() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 103); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASSERTION.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASSERTION.m new file mode 100755 index 0000000..a246f62 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASSERTION.m @@ -0,0 +1,7 @@ +function v = OP_ASSERTION() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 133); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASSIGN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASSIGN.m new file mode 100755 index 0000000..be0b8a0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ASSIGN.m @@ -0,0 +1,7 @@ +function v = OP_ASSIGN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 63); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ATAN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ATAN.m new file mode 100755 index 0000000..728d83e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ATAN.m @@ -0,0 +1,7 @@ +function v = OP_ATAN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 81); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ATAN2.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ATAN2.m new file mode 100755 index 0000000..e65dcbf --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ATAN2.m @@ -0,0 +1,7 @@ +function v = OP_ATAN2() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 106); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ATANH.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ATANH.m new file mode 100755 index 0000000..9ca8e39 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ATANH.m @@ -0,0 +1,7 @@ +function v = OP_ATANH() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 105); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CALL.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CALL.m new file mode 100755 index 0000000..a0bc0a8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CALL.m @@ -0,0 +1,7 @@ +function v = OP_CALL() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 111); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CEIL.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CEIL.m new file mode 100755 index 0000000..8857436 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CEIL.m @@ -0,0 +1,7 @@ +function v = OP_CEIL() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 90); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CONST.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CONST.m new file mode 100755 index 0000000..f725668 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CONST.m @@ -0,0 +1,7 @@ +function v = OP_CONST() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 107); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CONSTPOW.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CONSTPOW.m new file mode 100755 index 0000000..e15fcf0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_CONSTPOW.m @@ -0,0 +1,7 @@ +function v = OP_CONSTPOW() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 72); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_COPYSIGN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_COPYSIGN.m new file mode 100755 index 0000000..93d8165 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_COPYSIGN.m @@ -0,0 +1,7 @@ +function v = OP_COPYSIGN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 94); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_COS.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_COS.m new file mode 100755 index 0000000..5bccabc --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_COS.m @@ -0,0 +1,7 @@ +function v = OP_COS() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 77); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_COSH.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_COSH.m new file mode 100755 index 0000000..beea4bf --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_COSH.m @@ -0,0 +1,7 @@ +function v = OP_COSH() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 101); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DETERMINANT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DETERMINANT.m new file mode 100755 index 0000000..3379ae1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DETERMINANT.m @@ -0,0 +1,7 @@ +function v = OP_DETERMINANT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 117); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DIAGCAT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DIAGCAT.m new file mode 100755 index 0000000..ef5059f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DIAGCAT.m @@ -0,0 +1,7 @@ +function v = OP_DIAGCAT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 122); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DIAGSPLIT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DIAGSPLIT.m new file mode 100755 index 0000000..964873b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DIAGSPLIT.m @@ -0,0 +1,7 @@ +function v = OP_DIAGSPLIT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 125); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DIV.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DIV.m new file mode 100755 index 0000000..70267f8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_DIV.m @@ -0,0 +1,7 @@ +function v = OP_DIV() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 67); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_EQ.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_EQ.m new file mode 100755 index 0000000..9ab54c8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_EQ.m @@ -0,0 +1,7 @@ +function v = OP_EQ() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 84); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ERF.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ERF.m new file mode 100755 index 0000000..eb37339 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ERF.m @@ -0,0 +1,7 @@ +function v = OP_ERF() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 96); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ERFINV.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ERFINV.m new file mode 100755 index 0000000..92e5b69 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_ERFINV.m @@ -0,0 +1,7 @@ +function v = OP_ERFINV() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 141); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_EXP.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_EXP.m new file mode 100755 index 0000000..a8dfcc5 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_EXP.m @@ -0,0 +1,7 @@ +function v = OP_EXP() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 69); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FABS.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FABS.m new file mode 100755 index 0000000..24aac04 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FABS.m @@ -0,0 +1,7 @@ +function v = OP_FABS() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 92); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FIND.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FIND.m new file mode 100755 index 0000000..648e061 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FIND.m @@ -0,0 +1,7 @@ +function v = OP_FIND() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 112); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FLOOR.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FLOOR.m new file mode 100755 index 0000000..8a36f6e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FLOOR.m @@ -0,0 +1,7 @@ +function v = OP_FLOOR() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 89); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FMAX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FMAX.m new file mode 100755 index 0000000..564cc9d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FMAX.m @@ -0,0 +1,7 @@ +function v = OP_FMAX() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 98); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FMIN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FMIN.m new file mode 100755 index 0000000..ace1d4d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FMIN.m @@ -0,0 +1,7 @@ +function v = OP_FMIN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 97); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FMOD.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FMOD.m new file mode 100755 index 0000000..36bdd35 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_FMOD.m @@ -0,0 +1,7 @@ +function v = OP_FMOD() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 91); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_GETNONZEROS.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_GETNONZEROS.m new file mode 100755 index 0000000..7267956 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_GETNONZEROS.m @@ -0,0 +1,7 @@ +function v = OP_GETNONZEROS() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 129); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZCAT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZCAT.m new file mode 100755 index 0000000..2c01bea --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZCAT.m @@ -0,0 +1,7 @@ +function v = OP_HORZCAT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 120); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZREPMAT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZREPMAT.m new file mode 100755 index 0000000..9fedbd1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZREPMAT.m @@ -0,0 +1,7 @@ +function v = OP_HORZREPMAT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 139); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZREPSUM.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZREPSUM.m new file mode 100755 index 0000000..6ef30c5 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZREPSUM.m @@ -0,0 +1,7 @@ +function v = OP_HORZREPSUM() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 140); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZSPLIT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZSPLIT.m new file mode 100755 index 0000000..eeb4615 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_HORZSPLIT.m @@ -0,0 +1,7 @@ +function v = OP_HORZSPLIT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 123); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_IF_ELSE_ZERO.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_IF_ELSE_ZERO.m new file mode 100755 index 0000000..e194b6e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_IF_ELSE_ZERO.m @@ -0,0 +1,7 @@ +function v = OP_IF_ELSE_ZERO() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 95); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INNER_PROD.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INNER_PROD.m new file mode 100755 index 0000000..358130b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INNER_PROD.m @@ -0,0 +1,7 @@ +function v = OP_INNER_PROD() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 119); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INPUT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INPUT.m new file mode 100755 index 0000000..bff6bb4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INPUT.m @@ -0,0 +1,7 @@ +function v = OP_INPUT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 108); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INV.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INV.m new file mode 100755 index 0000000..6f00152 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INV.m @@ -0,0 +1,7 @@ +function v = OP_INV() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 99); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INVERSE.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INVERSE.m new file mode 100755 index 0000000..2066da7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_INVERSE.m @@ -0,0 +1,7 @@ +function v = OP_INVERSE() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 118); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LE.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LE.m new file mode 100755 index 0000000..ca35439 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LE.m @@ -0,0 +1,7 @@ +function v = OP_LE() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 83); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LIFT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LIFT.m new file mode 100755 index 0000000..8ab5a11 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LIFT.m @@ -0,0 +1,7 @@ +function v = OP_LIFT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 143); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LOG.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LOG.m new file mode 100755 index 0000000..1326c60 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LOG.m @@ -0,0 +1,7 @@ +function v = OP_LOG() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 70); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LT.m new file mode 100755 index 0000000..a754f14 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_LT.m @@ -0,0 +1,7 @@ +function v = OP_LT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 82); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MAP.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MAP.m new file mode 100755 index 0000000..76aa9f5 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MAP.m @@ -0,0 +1,7 @@ +function v = OP_MAP() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 113); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MATMUL.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MATMUL.m new file mode 100755 index 0000000..d878fe0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MATMUL.m @@ -0,0 +1,7 @@ +function v = OP_MATMUL() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 114); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MONITOR.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MONITOR.m new file mode 100755 index 0000000..54f96d1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MONITOR.m @@ -0,0 +1,7 @@ +function v = OP_MONITOR() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 134); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MUL.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MUL.m new file mode 100755 index 0000000..22c66e2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_MUL.m @@ -0,0 +1,7 @@ +function v = OP_MUL() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 66); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NE.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NE.m new file mode 100755 index 0000000..3e008d3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NE.m @@ -0,0 +1,7 @@ +function v = OP_NE() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 85); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NEG.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NEG.m new file mode 100755 index 0000000..49afbe7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NEG.m @@ -0,0 +1,7 @@ +function v = OP_NEG() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 68); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORM1.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORM1.m new file mode 100755 index 0000000..53d85c4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORM1.m @@ -0,0 +1,7 @@ +function v = OP_NORM1() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 136); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORM2.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORM2.m new file mode 100755 index 0000000..7a882e3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORM2.m @@ -0,0 +1,7 @@ +function v = OP_NORM2() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 135); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORMF.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORMF.m new file mode 100755 index 0000000..3e3e85f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORMF.m @@ -0,0 +1,7 @@ +function v = OP_NORMF() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 138); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORMINF.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORMINF.m new file mode 100755 index 0000000..8ccd157 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NORMINF.m @@ -0,0 +1,7 @@ +function v = OP_NORMINF() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 137); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NOT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NOT.m new file mode 100755 index 0000000..f8898c6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_NOT.m @@ -0,0 +1,7 @@ +function v = OP_NOT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 86); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_OR.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_OR.m new file mode 100755 index 0000000..3762523 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_OR.m @@ -0,0 +1,7 @@ +function v = OP_OR() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 88); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_OUTPUT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_OUTPUT.m new file mode 100755 index 0000000..7908848 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_OUTPUT.m @@ -0,0 +1,7 @@ +function v = OP_OUTPUT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 109); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_PARAMETER.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_PARAMETER.m new file mode 100755 index 0000000..d11f4a1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_PARAMETER.m @@ -0,0 +1,7 @@ +function v = OP_PARAMETER() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 110); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_POW.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_POW.m new file mode 100755 index 0000000..c71c3bb --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_POW.m @@ -0,0 +1,7 @@ +function v = OP_POW() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 71); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_PRINTME.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_PRINTME.m new file mode 100755 index 0000000..e174b2b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_PRINTME.m @@ -0,0 +1,7 @@ +function v = OP_PRINTME() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 142); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_PROJECT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_PROJECT.m new file mode 100755 index 0000000..9470807 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_PROJECT.m @@ -0,0 +1,7 @@ +function v = OP_PROJECT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 132); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_RESHAPE.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_RESHAPE.m new file mode 100755 index 0000000..8f96c79 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_RESHAPE.m @@ -0,0 +1,7 @@ +function v = OP_RESHAPE() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 126); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SETNONZEROS.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SETNONZEROS.m new file mode 100755 index 0000000..1049984 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SETNONZEROS.m @@ -0,0 +1,7 @@ +function v = OP_SETNONZEROS() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 131); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SIGN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SIGN.m new file mode 100755 index 0000000..8114789 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SIGN.m @@ -0,0 +1,7 @@ +function v = OP_SIGN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 93); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SIN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SIN.m new file mode 100755 index 0000000..25a8bc3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SIN.m @@ -0,0 +1,7 @@ +function v = OP_SIN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 76); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SINH.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SINH.m new file mode 100755 index 0000000..98097a4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SINH.m @@ -0,0 +1,7 @@ +function v = OP_SINH() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 100); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SOLVE.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SOLVE.m new file mode 100755 index 0000000..885f8fd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SOLVE.m @@ -0,0 +1,7 @@ +function v = OP_SOLVE() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 115); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SQ.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SQ.m new file mode 100755 index 0000000..ed69798 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SQ.m @@ -0,0 +1,7 @@ +function v = OP_SQ() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 74); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SQRT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SQRT.m new file mode 100755 index 0000000..e431fae --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SQRT.m @@ -0,0 +1,7 @@ +function v = OP_SQRT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 73); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SUB.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SUB.m new file mode 100755 index 0000000..6040fa4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SUB.m @@ -0,0 +1,7 @@ +function v = OP_SUB() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 65); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SUBASSIGN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SUBASSIGN.m new file mode 100755 index 0000000..3eff7a4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SUBASSIGN.m @@ -0,0 +1,7 @@ +function v = OP_SUBASSIGN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 128); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SUBREF.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SUBREF.m new file mode 100755 index 0000000..8ebe8ad --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_SUBREF.m @@ -0,0 +1,7 @@ +function v = OP_SUBREF() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 127); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TAN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TAN.m new file mode 100755 index 0000000..94e801c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TAN.m @@ -0,0 +1,7 @@ +function v = OP_TAN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 78); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TANH.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TANH.m new file mode 100755 index 0000000..9043112 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TANH.m @@ -0,0 +1,7 @@ +function v = OP_TANH() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 102); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TRANSPOSE.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TRANSPOSE.m new file mode 100755 index 0000000..c00dbdb --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TRANSPOSE.m @@ -0,0 +1,7 @@ +function v = OP_TRANSPOSE() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 116); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TWICE.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TWICE.m new file mode 100755 index 0000000..e71a4ea --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_TWICE.m @@ -0,0 +1,7 @@ +function v = OP_TWICE() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 75); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_VERTCAT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_VERTCAT.m new file mode 100755 index 0000000..09debc2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_VERTCAT.m @@ -0,0 +1,7 @@ +function v = OP_VERTCAT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 121); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_VERTSPLIT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_VERTSPLIT.m new file mode 100755 index 0000000..ec1f3f2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OP_VERTSPLIT.m @@ -0,0 +1,7 @@ +function v = OP_VERTSPLIT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 124); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_BOOLEAN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_BOOLEAN.m new file mode 100755 index 0000000..a582128 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_BOOLEAN.m @@ -0,0 +1,7 @@ +function v = OT_BOOLEAN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 47); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_BOOLVECTOR.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_BOOLVECTOR.m new file mode 100755 index 0000000..b545890 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_BOOLVECTOR.m @@ -0,0 +1,7 @@ +function v = OT_BOOLVECTOR() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 53); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_CALLBACK.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_CALLBACK.m new file mode 100755 index 0000000..31f6329 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_CALLBACK.m @@ -0,0 +1,7 @@ +function v = OT_CALLBACK() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 59); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_DERIVATIVEGENERATOR.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_DERIVATIVEGENERATOR.m new file mode 100755 index 0000000..bbe3267 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_DERIVATIVEGENERATOR.m @@ -0,0 +1,7 @@ +function v = OT_DERIVATIVEGENERATOR() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 57); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_DICT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_DICT.m new file mode 100755 index 0000000..e097ded --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_DICT.m @@ -0,0 +1,7 @@ +function v = OT_DICT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 56); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_FUNCTION.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_FUNCTION.m new file mode 100755 index 0000000..9255237 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_FUNCTION.m @@ -0,0 +1,7 @@ +function v = OT_FUNCTION() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 58); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_INTEGER.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_INTEGER.m new file mode 100755 index 0000000..4119c4c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_INTEGER.m @@ -0,0 +1,7 @@ +function v = OT_INTEGER() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 48); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_INTEGERVECTOR.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_INTEGERVECTOR.m new file mode 100755 index 0000000..6dca63f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_INTEGERVECTOR.m @@ -0,0 +1,7 @@ +function v = OT_INTEGERVECTOR() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 51); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_INTEGERVECTORVECTOR.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_INTEGERVECTORVECTOR.m new file mode 100755 index 0000000..3229564 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_INTEGERVECTORVECTOR.m @@ -0,0 +1,7 @@ +function v = OT_INTEGERVECTORVECTOR() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 52); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_NULL.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_NULL.m new file mode 100755 index 0000000..f82d693 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_NULL.m @@ -0,0 +1,7 @@ +function v = OT_NULL() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 46); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_REAL.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_REAL.m new file mode 100755 index 0000000..df29d2d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_REAL.m @@ -0,0 +1,7 @@ +function v = OT_REAL() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 49); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_REALVECTOR.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_REALVECTOR.m new file mode 100755 index 0000000..eb7b8f3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_REALVECTOR.m @@ -0,0 +1,7 @@ +function v = OT_REALVECTOR() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 54); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_STRING.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_STRING.m new file mode 100755 index 0000000..e74c041 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_STRING.m @@ -0,0 +1,7 @@ +function v = OT_STRING() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 50); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_STRINGVECTOR.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_STRINGVECTOR.m new file mode 100755 index 0000000..960ebb2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_STRINGVECTOR.m @@ -0,0 +1,7 @@ +function v = OT_STRINGVECTOR() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 55); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_UNKNOWN.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_UNKNOWN.m new file mode 100755 index 0000000..98dd4fa --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_UNKNOWN.m @@ -0,0 +1,7 @@ +function v = OT_UNKNOWN() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 61); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_VOIDPTR.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_VOIDPTR.m new file mode 100755 index 0000000..931bd4e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OT_VOIDPTR.m @@ -0,0 +1,7 @@ +function v = OT_VOIDPTR() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 60); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OUTPUT.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OUTPUT.m new file mode 100755 index 0000000..142cf4d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OUTPUT.m @@ -0,0 +1,7 @@ +function v = OUTPUT() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 160); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OptionsFunctionality.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OptionsFunctionality.m new file mode 100755 index 0000000..c0cd53d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/OptionsFunctionality.m @@ -0,0 +1,541 @@ +classdef OptionsFunctionality < casadi.SharedObject + %Provides options setting/getting functionality. + % + %Gives a derived class the ability to set and retrieve options in a + %convenient way. It also contains error checking, making sure that the option + %exists and that the value type is correct. + % + %A derived class should add option names, types and default values to the + %corresponding vectors. + % + %Joel Andersson + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: options_functionality.hpp + %Usage: OptionsFunctionality () + % + methods + function delete(self) + if self.swigPtr + casadiMEX(107, self); + self.swigPtr=[]; + end + end + function varargout = getOption(self,varargin) + %get an option value + % + % + %Usage: retval = getOption (str) + % + %str is of type std::string const &. str is of type std::string const &. retval is of type GenericType. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(108, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasOption(self,varargin) + %check if there is an option str + % + % + %Usage: retval = hasOption (str) + % + %str is of type std::string const &. str is of type std::string const &. retval is of type bool. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(109, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasSetOption(self,varargin) + %check if the user has there is an option str + % + % + %Usage: retval = hasSetOption (str) + % + %str is of type std::string const &. str is of type std::string const &. retval is of type bool. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(110, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printOptions(self,varargin) + %Print options to a stream. + % + % + %Usage: printOptions () + % + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:nargout}] = casadiMEX(111, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = copyOptions(self,varargin) + %Copy all options from another object. + % + % + %Usage: copyOptions (obj, skipUnknown = false) + % + %obj is of type OptionsFunctionality. skipUnknown is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(112, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = dictionary(self,varargin) + %Get the dictionary. + % + % + %Usage: retval = dictionary () + % + %retval is of type casadi::Dict const &. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(113, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOptionNames(self,varargin) + %Get a list of all option names. + % + % + %Usage: retval = getOptionNames () + % + %retval is of type std::vector< std::string,std::allocator< std::string > >. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(114, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOptionDescription(self,varargin) + %Get the description of a certain option. + % + % + %Usage: retval = getOptionDescription (str) + % + %str is of type std::string const &. str is of type std::string const &. retval is of type std::string. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(115, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOptionType(self,varargin) + %Get the type of a certain option. + % + % + %Usage: retval = getOptionType (str) + % + %str is of type std::string const &. str is of type std::string const &. retval is of type casadi::TypeID. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(116, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOptionTypeName(self,varargin) + %Get the type name of a certain option. + % + % + %Usage: retval = getOptionTypeName (str) + % + %str is of type std::string const &. str is of type std::string const &. retval is of type std::string. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(117, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOptionAllowed(self,varargin) + %Get the allowed values of a certain option. + % + % + %Usage: retval = getOptionAllowed (str) + % + %str is of type std::string const &. str is of type std::string const &. retval is of type std::vector< casadi::GenericType,std::allocator< casadi::GenericType > >. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(118, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOptionAllowedIndex(self,varargin) + %[INTERNAL] Get the index into allowed options of a certain option. + % + % + %Usage: retval = getOptionAllowedIndex (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type int. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(119, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setOptionByAllowedIndex(self,varargin) + %[INTERNAL] Set a certain option by giving its index into the allowed + %values. + % + % + %Usage: setOptionByAllowedIndex (name, i) + % + %name is of type std::string const &. i is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(120, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOptionEnumValue(self,varargin) + %[INTERNAL] Get the enum value corresponding to th certain option. + % + % + %Usage: retval = getOptionEnumValue (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type int. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(121, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setOptionByEnumValue(self,varargin) + %[INTERNAL] Set a certain option by giving an enum value. + % + % + %Usage: setOptionByEnumValue (name, v) + % + %name is of type std::string const &. v is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(122, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getOptionDefault(self,varargin) + %Get the default of a certain option. + % + % + %Usage: retval = getOptionDefault (str) + % + %str is of type std::string const &. str is of type std::string const &. retval is of type GenericType. + + try + + if ~isa(self,'casadi.OptionsFunctionality') + self = casadi.OptionsFunctionality(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(123, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setOption(self,varargin) + %> void OptionsFunctionality.setOption(str str, GenericType val) + %------------------------------------------------------------------------ + % + %[DEPRECATED: pass option dictionary to function constructor] Set an option. + %For a list of options, check the class documentation of this class. + % + %The setOptions are only considered before the init function. If properties + %changes, the init function should be called again. + % + %> void OptionsFunctionality.setOption(Dict dict, bool skipUnknown=false) + %------------------------------------------------------------------------ + % + %[DEPRECATED: pass option dictionary to function constructor] Set a set of + %options. For a list of options, check the class documentation of this class. + % + %The setOptions are only considered before the init function. If properties + %changes, the init function should be called again. + % + % + %Usage: setOption (name, val) + % + %name is of type std::string const &. val is of type std::vector< std::vector< int,std::allocator< int > >,std::allocator< std::vector< int,std::allocator< int > > > > const &. + + try + + [varargout{1:nargout}] = casadiMEX(126, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = OptionsFunctionality(varargin) + self@casadi.SharedObject(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(127, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(124, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = addOptionRecipe(varargin) + %Usage: retval = addOptionRecipe (dict, recipe) + % + %dict is of type casadi::Dict const &. recipe is of type std::string const &. dict is of type casadi::Dict const &. recipe is of type std::string const &. retval is of type casadi::Dict. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(125, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PARAMETER.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PARAMETER.m new file mode 100755 index 0000000..c03f6cf --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PARAMETER.m @@ -0,0 +1,7 @@ +function v = PARAMETER() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 156); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintDMatrix.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintDMatrix.m new file mode 100755 index 0000000..48f2f61 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintDMatrix.m @@ -0,0 +1,96 @@ +classdef PrintDMatrix < SwigRef + %Base class for objects that have a natural string representation. + % + %Joel Andersson + % + %C++ includes: printable_object.hpp + %Usage: PrintDMatrix () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = getDescription(self,varargin) + %Return a string with a description (for SWIG) + % + % + %Usage: retval = getDescription () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintDMatrix') + self = casadi.PrintDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(40, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getRepresentation(self,varargin) + %Return a string with a representation (for SWIG) + % + % + %Usage: retval = getRepresentation () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintDMatrix') + self = casadi.PrintDMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(41, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = PrintDMatrix(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(42, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(43, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintDaeBuilder.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintDaeBuilder.m new file mode 100755 index 0000000..b1fbad7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintDaeBuilder.m @@ -0,0 +1,96 @@ +classdef PrintDaeBuilder < SwigRef + %Base class for objects that have a natural string representation. + % + %Joel Andersson + % + %C++ includes: printable_object.hpp + %Usage: PrintDaeBuilder () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = getDescription(self,varargin) + %Return a string with a description (for SWIG) + % + % + %Usage: retval = getDescription () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintDaeBuilder') + self = casadi.PrintDaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(52, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getRepresentation(self,varargin) + %Return a string with a representation (for SWIG) + % + % + %Usage: retval = getRepresentation () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintDaeBuilder') + self = casadi.PrintDaeBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(53, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = PrintDaeBuilder(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(54, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(55, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintIMatrix.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintIMatrix.m new file mode 100755 index 0000000..c1cf0df --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintIMatrix.m @@ -0,0 +1,96 @@ +classdef PrintIMatrix < SwigRef + %Base class for objects that have a natural string representation. + % + %Joel Andersson + % + %C++ includes: printable_object.hpp + %Usage: PrintIMatrix () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = getDescription(self,varargin) + %Return a string with a description (for SWIG) + % + % + %Usage: retval = getDescription () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintIMatrix') + self = casadi.PrintIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(36, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getRepresentation(self,varargin) + %Return a string with a representation (for SWIG) + % + % + %Usage: retval = getRepresentation () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintIMatrix') + self = casadi.PrintIMatrix(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(37, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = PrintIMatrix(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(38, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(39, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintNlpBuilder.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintNlpBuilder.m new file mode 100755 index 0000000..e12c6a6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintNlpBuilder.m @@ -0,0 +1,96 @@ +classdef PrintNlpBuilder < SwigRef + %Base class for objects that have a natural string representation. + % + %Joel Andersson + % + %C++ includes: printable_object.hpp + %Usage: PrintNlpBuilder () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = getDescription(self,varargin) + %Return a string with a description (for SWIG) + % + % + %Usage: retval = getDescription () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintNlpBuilder') + self = casadi.PrintNlpBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(44, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getRepresentation(self,varargin) + %Return a string with a representation (for SWIG) + % + % + %Usage: retval = getRepresentation () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintNlpBuilder') + self = casadi.PrintNlpBuilder(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(45, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = PrintNlpBuilder(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(46, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(47, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintSX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintSX.m new file mode 100755 index 0000000..bf0c556 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintSX.m @@ -0,0 +1,96 @@ +classdef PrintSX < SwigRef + %Base class for objects that have a natural string representation. + % + %Joel Andersson + % + %C++ includes: printable_object.hpp + %Usage: PrintSX () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = getDescription(self,varargin) + %Return a string with a description (for SWIG) + % + % + %Usage: retval = getDescription () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintSX') + self = casadi.PrintSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(477, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getRepresentation(self,varargin) + %Return a string with a representation (for SWIG) + % + % + %Usage: retval = getRepresentation () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintSX') + self = casadi.PrintSX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(478, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = PrintSX(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(479, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(480, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintSharedObject.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintSharedObject.m new file mode 100755 index 0000000..ce569e5 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintSharedObject.m @@ -0,0 +1,96 @@ +classdef PrintSharedObject < SwigRef + %Base class for objects that have a natural string representation. + % + %Joel Andersson + % + %C++ includes: printable_object.hpp + %Usage: PrintSharedObject () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = getDescription(self,varargin) + %Return a string with a description (for SWIG) + % + % + %Usage: retval = getDescription () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintSharedObject') + self = casadi.PrintSharedObject(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(28, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getRepresentation(self,varargin) + %Return a string with a representation (for SWIG) + % + % + %Usage: retval = getRepresentation () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintSharedObject') + self = casadi.PrintSharedObject(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(29, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = PrintSharedObject(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(30, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(31, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintSlice.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintSlice.m new file mode 100755 index 0000000..093a1d7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintSlice.m @@ -0,0 +1,96 @@ +classdef PrintSlice < SwigRef + %Base class for objects that have a natural string representation. + % + %Joel Andersson + % + %C++ includes: printable_object.hpp + %Usage: PrintSlice () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = getDescription(self,varargin) + %Return a string with a description (for SWIG) + % + % + %Usage: retval = getDescription () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintSlice') + self = casadi.PrintSlice(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(32, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getRepresentation(self,varargin) + %Return a string with a representation (for SWIG) + % + % + %Usage: retval = getRepresentation () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintSlice') + self = casadi.PrintSlice(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(33, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = PrintSlice(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(34, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(35, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintVariable.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintVariable.m new file mode 100755 index 0000000..bedc326 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/PrintVariable.m @@ -0,0 +1,96 @@ +classdef PrintVariable < SwigRef + %Base class for objects that have a natural string representation. + % + %Joel Andersson + % + %C++ includes: printable_object.hpp + %Usage: PrintVariable () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = getDescription(self,varargin) + %Return a string with a description (for SWIG) + % + % + %Usage: retval = getDescription () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintVariable') + self = casadi.PrintVariable(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(48, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getRepresentation(self,varargin) + %Return a string with a representation (for SWIG) + % + % + %Usage: retval = getRepresentation () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.PrintVariable') + self = casadi.PrintVariable(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(49, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = PrintVariable(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(50, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(51, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/QcqpSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/QcqpSolver.m new file mode 100755 index 0000000..e018c98 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/QcqpSolver.m @@ -0,0 +1,523 @@ +classdef QcqpSolver < casadi.Function + %QcqpSolver. + % + %Solves the following strictly convex problem: + % + % + % + %:: + % + % min 1/2 x' H x + g' x + % x + % + % subject to + % 1/2 x' Pi x + qi' x + ri <= 0 for i=0..nq-1 + % LBA <= A x <= UBA + % LBX <= x <= UBX + % + % with : + % H, Pi sparse (n x n) positive definite + % g, qi dense (n x 1) + % ri scalar + % + % n: number of decision variables (x) + % nc: number of linear constraints (A) + % nq: number of quadratic constraints + % + % + % + %If H, Pi is not positive-definite, the solver should throw an error. + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::QcqpSolverInput (QCQP_SOLVER_NUM_IN = 12) [qcqpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| QCQP_SOLVER_H | h | The square matrix H: | + %| | | sparse, (n x n). Only | + %| | | the lower triangular | + %| | | part is actually used. | + %| | | The matrix is assumed | + %| | | to be symmetrical. | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_G | g | The vector g: dense, | + %| | | (n x 1) . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_P | p | The horizontal stack | + %| | | of all Pi. Each Pi is | + %| | | sparse (n x n). Only | + %| | | the lower triangular | + %| | | part is actually used. | + %| | | The matrix is assumed | + %| | | to be symmetrical. | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_Q | q | The vertical stack of | + %| | | all qi: dense, (nq n x | + %| | | 1) . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_R | r | The vertical stack of | + %| | | all scalars ri (nq x | + %| | | 1) . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_A | a | The matrix A: sparse, | + %| | | (nc x n) - product | + %| | | with x must be dense. | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_LBA | lba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_UBA | uba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_LBX | lbx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_UBX | ubx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_X0 | x0 | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_LAM_X0 | lam_x0 | dense | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::QcqpSolverOutput (QCQP_SOLVER_NUM_OUT = 4) [qcqpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| QCQP_SOLVER_X | x | The primal solution . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_COST | cost | The optimal cost . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to | + %| | | linear bounds . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode c | + %| | | | according to | asadi::QcqpS | + %| | | | a given | olverInterna | + %| | | | recipe (low- | l | + %| | | | level) (qp) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- socp + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %QcqpSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %socp + %---- + % + % + % + %Solve a QCQP with an SocpSolver + % + %Note: this implementation relies on Cholesky decomposition: Chol(H) = L -> H + %= LL' with L lower triangular This requires Pi, H to be positive definite. + %Positive semi-definite is not sufficient. Notably, H==0 will not work. + % + %A better implementation would rely on matrix square root, but we need + %singular value decomposition to implement that. + % + %This implementation makes use of the epigraph reformulation: + % + %:: + % + % * min f(x) + % * x + % * + % * min t + % * x, t f(x) <= t + % * + % + % + % + %This implementation makes use of the following identity: + % + %:: + % + % * || Gx+h||_2 <= e'x + f + % * + % * x'(G'G - ee')x + (2 h'G - 2 f e') x + h'h - f <= 0 + % * + % + %where we put e = [0 0 ... 1] for the quadratic constraint arising from the + %epigraph reformulation and e==0 for all other quadratic constraints. + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %>List of available stats + % + %+-------------------+ + %| Id | + %+===================+ + %| socp_solver_stats | + %+-------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joris Gillis + %Diagrams + %-------- + % + % + % + %C++ includes: qcqp_solver.hpp + %Usage: QcqpSolver () + % + methods + function self = QcqpSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1041, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1042, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1037, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1038, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1039, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1040, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/QpSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/QpSolver.m new file mode 100755 index 0000000..8f59c25 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/QpSolver.m @@ -0,0 +1,863 @@ +classdef QpSolver < casadi.Function + %QpSolver. + % + %Solves the following strictly convex problem: + % + % + % + %:: + % + % min 1/2 x' H x + g' x + % x + % + % subject to + % LBA <= A x <= UBA + % LBX <= x <= UBX + % + % with : + % H sparse (n x n) positive definite + % g dense (n x 1) + % + % n: number of decision variables (x) + % nc: number of constraints (A) + % + % + % + %If H is not positive-definite, the solver should throw an error. + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::QpSolverInput (QP_SOLVER_NUM_IN = 9) [qpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| QP_SOLVER_H | h | The square matrix H: | + %| | | sparse, (n x n). Only | + %| | | the lower triangular | + %| | | part is actually used. | + %| | | The matrix is assumed | + %| | | to be symmetrical. | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_G | g | The vector g: dense, | + %| | | (n x 1) . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_A | a | The matrix A: sparse, | + %| | | (nc x n) - product | + %| | | with x must be dense. | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LBA | lba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_UBA | uba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LBX | lbx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_UBX | ubx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_X0 | x0 | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LAM_X0 | lam_x0 | dense | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::QpSolverOutput (QP_SOLVER_NUM_OUT = 4) [qpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| QP_SOLVER_X | x | The primal solution . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_COST | cost | The optimal cost . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to | + %| | | linear bounds . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode c | + %| | | | according to | asadi::QpSol | + %| | | | a given | verInternal | + %| | | | recipe (low- | | + %| | | | level) (lp) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- cplex + % + %- ooqp + % + %- qpoases + % + %- sqic + % + %- nlp + % + %- qcqp + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %QpSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %cplex + %----- + % + % + % + %Interface to Cplex solver for sparse Quadratic Programs + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| barrier_maxiter | OT_INTEGER | 2.100e+09 | Maximum number | + %| | | | of barrier | + %| | | | iterations. | + %+-----------------+-----------------+-----------------+-----------------+ + %| convex | OT_BOOLEAN | true | Indicates if | + %| | | | the QP is | + %| | | | convex or not | + %| | | | (affects only | + %| | | | the barrier | + %| | | | method). | + %+-----------------+-----------------+-----------------+-----------------+ + %| dep_check | OT_STRING | "off" | Detect | + %| | | | redundant | + %| | | | constraints. (a | + %| | | | utomatic:-1|off | + %| | | | :0|begin:1|end: | + %| | | | 2|both:3) | + %+-----------------+-----------------+-----------------+-----------------+ + %| dump_filename | OT_STRING | "qp.dat" | The filename to | + %| | | | dump to. | + %+-----------------+-----------------+-----------------+-----------------+ + %| dump_to_file | OT_BOOLEAN | false | Dumps QP to | + %| | | | file in CPLEX | + %| | | | format. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_method | OT_STRING | "automatic" | Determines | + %| | | | which CPLEX | + %| | | | algorithm to | + %| | | | use. (automatic | + %| | | | |primal_simplex | + %| | | | |dual_simplex|n | + %| | | | etwork|barrier| | + %| | | | sifting|concurr | + %| | | | ent|crossover) | + %+-----------------+-----------------+-----------------+-----------------+ + %| simplex_maxiter | OT_INTEGER | 2.100e+09 | Maximum number | + %| | | | of simplex | + %| | | | iterations. | + %+-----------------+-----------------+-----------------+-----------------+ + %| tol | OT_REAL | 0.000 | Tolerance of | + %| | | | solver | + %+-----------------+-----------------+-----------------+-----------------+ + %| warm_start | OT_BOOLEAN | false | Use warm start | + %| | | | with simplex | + %| | | | methods | + %| | | | (affects only | + %| | | | the simplex | + %| | | | methods). | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %ooqp + %---- + % + % + % + %Interface to the OOQP Solver for quadratic programming The current + %implementation assumes that OOQP is configured with the MA27 sparse linear + %solver. + % + %NOTE: when doing multiple calls to evaluate(), check if you need to + %reInit(); + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| artol | OT_REAL | 0.000 | tolerance as | + %| | | | provided with | + %| | | | setArTol to | + %| | | | OOQP | + %+-----------------+-----------------+-----------------+-----------------+ + %| mutol | OT_REAL | 0.000 | tolerance as | + %| | | | provided with | + %| | | | setMuTol to | + %| | | | OOQP | + %+-----------------+-----------------+-----------------+-----------------+ + %| print_level | OT_INTEGER | 0 | Print level. | + %| | | | OOQP listens to | + %| | | | print_level 0, | + %| | | | 10 and 100 | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %qpoases + %------- + % + % + % + %Interface to QPOases Solver for quadratic programming + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| CPUtime | OT_REAL | None | The maximum | + %| | | | allowed CPU | + %| | | | time in seconds | + %| | | | for the whole | + %| | | | initialisation | + %| | | | (and the | + %| | | | actually | + %| | | | required one on | + %| | | | output). | + %| | | | Disabled if | + %| | | | unset. | + %+-----------------+-----------------+-----------------+-----------------+ + %| boundRelaxation | OT_REAL | 10000 | Initial | + %| | | | relaxation of | + %| | | | bounds to start | + %| | | | homotopy and | + %| | | | initial value | + %| | | | for far bounds. | + %+-----------------+-----------------+-----------------+-----------------+ + %| boundTolerance | OT_REAL | 0.000 | If upper and | + %| | | | lower bounds | + %| | | | differ less | + %| | | | than this | + %| | | | tolerance, they | + %| | | | are regarded | + %| | | | equal, i.e. as | + %| | | | equality | + %| | | | constraint. | + %+-----------------+-----------------+-----------------+-----------------+ + %| enableCholeskyR | OT_INTEGER | 0 | Specifies the | + %| efactorisation | | | frequency of a | + %| | | | full re- | + %| | | | factorisation | + %| | | | of projected | + %| | | | Hessian matrix: | + %| | | | 0: turns them | + %| | | | off, 1: uses | + %| | | | them at each | + %| | | | iteration etc. | + %+-----------------+-----------------+-----------------+-----------------+ + %| enableDriftCorr | OT_INTEGER | 1 | Specifies the | + %| ection | | | frequency of | + %| | | | drift | + %| | | | corrections: 0: | + %| | | | turns them off. | + %+-----------------+-----------------+-----------------+-----------------+ + %| enableEqualitie | OT_BOOLEAN | False | Specifies | + %| s | | | whether | + %| | | | equalities | + %| | | | should be | + %| | | | treated as | + %| | | | always active | + %| | | | (True) or not | + %| | | | (False) | + %+-----------------+-----------------+-----------------+-----------------+ + %| enableFarBounds | OT_BOOLEAN | True | Enables the use | + %| | | | of far bounds. | + %+-----------------+-----------------+-----------------+-----------------+ + %| enableFlippingB | OT_BOOLEAN | True | Enables the use | + %| ounds | | | of flipping | + %| | | | bounds. | + %+-----------------+-----------------+-----------------+-----------------+ + %| enableFullLITes | OT_BOOLEAN | False | Enables | + %| ts | | | condition- | + %| | | | hardened (but | + %| | | | more expensive) | + %| | | | LI test. | + %+-----------------+-----------------+-----------------+-----------------+ + %| enableNZCTests | OT_BOOLEAN | True | Enables nonzero | + %| | | | curvature | + %| | | | tests. | + %+-----------------+-----------------+-----------------+-----------------+ + %| enableRamping | OT_BOOLEAN | True | Enables | + %| | | | ramping. | + %+-----------------+-----------------+-----------------+-----------------+ + %| enableRegularis | OT_BOOLEAN | False | Enables | + %| ation | | | automatic | + %| | | | Hessian | + %| | | | regularisation. | + %+-----------------+-----------------+-----------------+-----------------+ + %| epsDen | OT_REAL | 0.000 | Denominator | + %| | | | tolerance for | + %| | | | ratio tests. | + %+-----------------+-----------------+-----------------+-----------------+ + %| epsFlipping | OT_REAL | 0.000 | Tolerance of | + %| | | | squared | + %| | | | Cholesky | + %| | | | diagonal factor | + %| | | | which triggers | + %| | | | flipping bound. | + %+-----------------+-----------------+-----------------+-----------------+ + %| epsIterRef | OT_REAL | 0.000 | Early | + %| | | | termination | + %| | | | tolerance for | + %| | | | iterative | + %| | | | refinement. | + %+-----------------+-----------------+-----------------+-----------------+ + %| epsLITests | OT_REAL | 0.000 | Tolerance for | + %| | | | linear | + %| | | | independence | + %| | | | tests. | + %+-----------------+-----------------+-----------------+-----------------+ + %| epsNZCTests | OT_REAL | 0.000 | Tolerance for | + %| | | | nonzero | + %| | | | curvature | + %| | | | tests. | + %+-----------------+-----------------+-----------------+-----------------+ + %| epsNum | OT_REAL | -0.000 | Numerator | + %| | | | tolerance for | + %| | | | ratio tests. | + %+-----------------+-----------------+-----------------+-----------------+ + %| epsRegularisati | OT_REAL | 0.000 | Scaling factor | + %| on | | | of identity | + %| | | | matrix used for | + %| | | | Hessian | + %| | | | regularisation. | + %+-----------------+-----------------+-----------------+-----------------+ + %| finalRamping | OT_REAL | 1 | Final value for | + %| | | | ramping | + %| | | | strategy. | + %+-----------------+-----------------+-----------------+-----------------+ + %| growFarBounds | OT_REAL | 1000 | Factor to grow | + %| | | | far bounds. | + %+-----------------+-----------------+-----------------+-----------------+ + %| initialFarBound | OT_REAL | 1000000 | Initial size | + %| s | | | for far bounds. | + %+-----------------+-----------------+-----------------+-----------------+ + %| initialRamping | OT_REAL | 0.500 | Start value for | + %| | | | ramping | + %| | | | strategy. | + %+-----------------+-----------------+-----------------+-----------------+ + %| initialStatusBo | OT_STRING | lower | Initial status | + %| unds | | | of bounds at | + %| | | | first | + %| | | | iteration. | + %+-----------------+-----------------+-----------------+-----------------+ + %| maxDualJump | OT_REAL | 100000000 | Maximum allowed | + %| | | | jump in dual | + %| | | | variables in | + %| | | | linear | + %| | | | independence | + %| | | | tests. | + %+-----------------+-----------------+-----------------+-----------------+ + %| maxPrimalJump | OT_REAL | 100000000 | Maximum allowed | + %| | | | jump in primal | + %| | | | variables in | + %| | | | nonzero | + %| | | | curvature | + %| | | | tests. | + %+-----------------+-----------------+-----------------+-----------------+ + %| nWSR | OT_INTEGER | None | The maximum | + %| | | | number of | + %| | | | working set | + %| | | | recalculations | + %| | | | to be performed | + %| | | | during the | + %| | | | initial | + %| | | | homotopy. | + %| | | | Default is 5(nx | + %| | | | + nc) | + %+-----------------+-----------------+-----------------+-----------------+ + %| numRefinementSt | OT_INTEGER | 1 | Maximum number | + %| eps | | | of iterative | + %| | | | refinement | + %| | | | steps. | + %+-----------------+-----------------+-----------------+-----------------+ + %| numRegularisati | OT_INTEGER | 0 | Maximum number | + %| onSteps | | | of successive | + %| | | | regularisation | + %| | | | steps. | + %+-----------------+-----------------+-----------------+-----------------+ + %| printLevel | OT_STRING | medium | Defines the | + %| | | | amount of text | + %| | | | output during | + %| | | | QP solution, | + %| | | | see Section 5.7 | + %+-----------------+-----------------+-----------------+-----------------+ + %| terminationTole | OT_REAL | 0.000 | Relative | + %| rance | | | termination | + %| | | | tolerance to | + %| | | | stop homotopy. | + %+-----------------+-----------------+-----------------+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %sqic + %---- + % + % + % + %Interface to the SQIC solver for quadratic programming + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %nlp + %--- + % + % + % + %Solve QPs using an NlpSolver + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %>List of available stats + % + %+------------------+ + %| Id | + %+==================+ + %| nlp_solver_stats | + %+------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %qcqp + %---- + % + % + % + %Solve QP using a QcqpSolver + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %>List of available stats + % + %+-------------------+ + %| Id | + %+===================+ + %| qcqp_solver_stats | + %+-------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joel Andersson + %Diagrams + %-------- + % + % + % + %C++ includes: qp_solver.hpp + %Usage: QpSolver () + % + methods + function varargout = generateNativeCode(self,varargin) + %Generate native code in the interfaced language for debugging + % + % + %Usage: generateNativeCode (file) + % + %file is of type std::ostream &. + + try + + if ~isa(self,'casadi.QpSolver') + self = casadi.QpSolver(self); + end + [varargout{1:nargout}] = casadiMEX(1009, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = QpSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1010, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1011, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1005, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1006, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1007, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1008, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/RADAU.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/RADAU.m new file mode 100755 index 0000000..1ae9646 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/RADAU.m @@ -0,0 +1,7 @@ +function v = RADAU() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 154); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_CLEInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_CLEInput.m new file mode 100755 index 0000000..4f7f8db --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_CLEInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_CLEInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 0); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_CLEOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_CLEOutput.m new file mode 100755 index 0000000..ab1658f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_CLEOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_CLEOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 1); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_ControlSimulatorInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_ControlSimulatorInput.m new file mode 100755 index 0000000..9890d39 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_ControlSimulatorInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_ControlSimulatorInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 3); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_ControlledDAEInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_ControlledDAEInput.m new file mode 100755 index 0000000..2aaf847 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_ControlledDAEInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_ControlledDAEInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 2); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DAEInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DAEInput.m new file mode 100755 index 0000000..cdbb614 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DAEInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_DAEInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 9); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DAEOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DAEOutput.m new file mode 100755 index 0000000..686f3ac --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DAEOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_DAEOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 10); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DLEInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DLEInput.m new file mode 100755 index 0000000..070f5f6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DLEInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_DLEInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 4); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DLEOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DLEOutput.m new file mode 100755 index 0000000..94e59ae --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DLEOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_DLEOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 5); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DPLEInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DPLEInput.m new file mode 100755 index 0000000..dc65f1b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DPLEInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_DPLEInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 6); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DPLEOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DPLEOutput.m new file mode 100755 index 0000000..cb8467c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_DPLEOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_DPLEOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 7); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_GradFInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_GradFInput.m new file mode 100755 index 0000000..d816c8e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_GradFInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_GradFInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 25); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_GradFOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_GradFOutput.m new file mode 100755 index 0000000..9e5f384 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_GradFOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_GradFOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 26); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_HNLPInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_HNLPInput.m new file mode 100755 index 0000000..2ecc310 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_HNLPInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_HNLPInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 8); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_HessLagInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_HessLagInput.m new file mode 100755 index 0000000..7611264 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_HessLagInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_HessLagInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 29); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_HessLagOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_HessLagOutput.m new file mode 100755 index 0000000..fe1c50b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_HessLagOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_HessLagOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 30); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_IntegratorInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_IntegratorInput.m new file mode 100755 index 0000000..6e03639 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_IntegratorInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_IntegratorInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 13); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_IntegratorOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_IntegratorOutput.m new file mode 100755 index 0000000..cbef52f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_IntegratorOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_IntegratorOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 14); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_JacGInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_JacGInput.m new file mode 100755 index 0000000..b55a656 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_JacGInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_JacGInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 27); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_JacGOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_JacGOutput.m new file mode 100755 index 0000000..1645c5b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_JacGOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_JacGOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 28); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DLEInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DLEInput.m new file mode 100755 index 0000000..691318f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DLEInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_LR_DLEInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 19); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DLEOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DLEOutput.m new file mode 100755 index 0000000..dae1284 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DLEOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_LR_DLEOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 20); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DPLEInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DPLEInput.m new file mode 100755 index 0000000..1be2baf --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DPLEInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_LR_DPLEInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 21); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DPLEOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DPLEOutput.m new file mode 100755 index 0000000..1f9f148 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LR_DPLEOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_LR_DPLEOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 22); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LinsolInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LinsolInput.m new file mode 100755 index 0000000..cbb273c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LinsolInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_LinsolInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 15); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LinsolOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LinsolOutput.m new file mode 100755 index 0000000..3b4f027 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LinsolOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_LinsolOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 16); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LpSolverInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LpSolverInput.m new file mode 100755 index 0000000..3db6fd6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LpSolverInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_LpSolverInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 17); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LpSolverOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LpSolverOutput.m new file mode 100755 index 0000000..44ff644 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_LpSolverOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_LpSolverOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 18); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NLPInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NLPInput.m new file mode 100755 index 0000000..3a5903e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NLPInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_NLPInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 23); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NLPOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NLPOutput.m new file mode 100755 index 0000000..da59351 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NLPOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_NLPOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 24); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NlpSolverInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NlpSolverInput.m new file mode 100755 index 0000000..04d4ede --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NlpSolverInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_NlpSolverInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 31); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NlpSolverOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NlpSolverOutput.m new file mode 100755 index 0000000..7f5f6f9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_NlpSolverOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_NlpSolverOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 32); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QcqpSolverInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QcqpSolverInput.m new file mode 100755 index 0000000..eaba359 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QcqpSolverInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_QcqpSolverInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 33); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QcqpSolverOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QcqpSolverOutput.m new file mode 100755 index 0000000..8967455 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QcqpSolverOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_QcqpSolverOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 34); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QpSolverInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QpSolverInput.m new file mode 100755 index 0000000..bdbe204 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QpSolverInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_QpSolverInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 35); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QpSolverOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QpSolverOutput.m new file mode 100755 index 0000000..a4d4a05 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_QpSolverOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_QpSolverOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 36); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_RDAEInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_RDAEInput.m new file mode 100755 index 0000000..421f40d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_RDAEInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_RDAEInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 11); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_RDAEOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_RDAEOutput.m new file mode 100755 index 0000000..9dcf40f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_RDAEOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_RDAEOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 12); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDPInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDPInput.m new file mode 100755 index 0000000..2dc81a0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDPInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_SDPInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 37); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDPOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDPOutput.m new file mode 100755 index 0000000..2d6402e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDPOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_SDPOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 38); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDQPInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDQPInput.m new file mode 100755 index 0000000..609e172 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDQPInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_SDQPInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 39); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDQPOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDQPOutput.m new file mode 100755 index 0000000..bbed496 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SDQPOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_SDQPOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 40); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SOCPInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SOCPInput.m new file mode 100755 index 0000000..e141349 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SOCPInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_SOCPInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 41); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SOCPOutput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SOCPOutput.m new file mode 100755 index 0000000..c8a4381 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SOCPOutput.m @@ -0,0 +1,7 @@ +function v = SCHEME_SOCPOutput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 42); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SOCPStruct.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SOCPStruct.m new file mode 100755 index 0000000..877067a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_SOCPStruct.m @@ -0,0 +1,7 @@ +function v = SCHEME_SOCPStruct() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 43); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_StabilizedQpSolverInput.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_StabilizedQpSolverInput.m new file mode 100755 index 0000000..e673543 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SCHEME_StabilizedQpSolverInput.m @@ -0,0 +1,7 @@ +function v = SCHEME_StabilizedQpSolverInput() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 44); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SWIG_IND1.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SWIG_IND1.m new file mode 100755 index 0000000..c05d01d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SWIG_IND1.m @@ -0,0 +1,7 @@ +function v = SWIG_IND1() + persistent vInitialized; + if isempty(vInitialized) + vInitialized = casadiMEX(0, 45); + end + v = vInitialized; +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SX.m new file mode 100755 index 0000000..db6bfdb --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SX.m @@ -0,0 +1,1998 @@ +classdef SX < casadi.MatrixCommon & casadi.ExpSX & casadi.GenSX & casadi.PrintSX + %Sparse matrix class. SX and DMatrix are specializations. + % + %General sparse matrix class that is designed with the idea that "everything + %is a matrix", that is, also scalars and vectors. This philosophy makes it + %easy to use and to interface in particularly with Python and Matlab/Octave. + %Index starts with 0. Index vec happens as follows: (rr, cc) -> k = + %rr+cc*size1() Vectors are column vectors. The storage format is Compressed + %Column Storage (CCS), similar to that used for sparse matrices in Matlab, + %but unlike this format, we do allow for elements to be structurally non-zero + %but numerically zero. Matrix is polymorphic with a + %std::vector that contain all non-identical-zero elements. The + %sparsity can be accessed with Sparsity& sparsity() Joel Andersson + % + %C++ includes: casadi_types.hpp + %Usage: SX () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = sanityCheck(self,varargin) + %Check if the dimensions and colind, row vectors are compatible. + % + %Parameters: + %----------- + % + %complete: set to true to also check elementwise throws an error as possible + %result + % + % + %Usage: sanityCheck (complete = false) + % + %complete is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:nargout}] = casadiMEX(672, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasNZ(self,varargin) + %Returns true if the matrix has a non-zero at location rr, cc. + % + % + %Usage: retval = hasNZ (rr, cc) + % + %rr is of type int. cc is of type int. rr is of type int. cc is of type int. retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(673, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nonzero(self,varargin) + %Returns the truth value of a Matrix. + % + % + %Usage: retval = nonzero () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(674, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isSlice(self,varargin) + %> bool array(DataType) .isSlice(bool ind1=false) const + %------------------------------------------------------------------------ + % + %Is the Matrix a Slice (only for IMatrix) + % + % + %Usage: retval = isSlice (ind1 = false) + % + %ind1 is of type bool. ind1 is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(675, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toSlice(self,varargin) + %> Slice array(DataType) .toSlice(bool ind1=false) const + %------------------------------------------------------------------------ + % + %Convert to Slice (only for IMatrix) + % + % + %Usage: retval = toSlice (ind1 = false) + % + %ind1 is of type bool. ind1 is of type bool. retval is of type Slice. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(676, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = get(self,varargin) + %> void array(DataType) .get([double ] output_m) const + %------------------------------------------------------------------------ + % + %Get the elements numerically. + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Slice rr) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, IMatrix rr) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Sparsity sp) const + %------------------------------------------------------------------------ + % + %Get a submatrix, single argument + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Slice rr, Slice cc) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, Slice rr, IMatrix cc) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, IMatrix rr, Slice cc) const + % + %> void array(DataType) .get(array(DataType) output_m, bool ind1, IMatrix rr, IMatrix cc) const + %------------------------------------------------------------------------ + % + %Get a submatrix, two arguments + % + % + %Usage: get (ind1, rr, cc) + % + %ind1 is of type bool. rr is of type IMatrix. cc is of type IMatrix. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(677, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = set(self,varargin) + %> void array(DataType) .set(double val) + % + %> void array(DataType) .set(const double *val, bool tr=false) + % + %> void array(DataType) .set([double ] val, bool tr=false) + %------------------------------------------------------------------------ + % + %Get the elements numerically. + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Slice rr) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, IMatrix rr) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Sparsity sp) + %------------------------------------------------------------------------ + % + %Set a submatrix, single argument + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Slice rr, Slice cc) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, Slice rr, IMatrix cc) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, IMatrix rr, Slice cc) + % + %> void array(DataType) .set(array(DataType) m, bool ind1, IMatrix rr, IMatrix cc) + %------------------------------------------------------------------------ + % + %Set a submatrix, two arguments + % + %> void array(DataType) .set(array(DataType) val) + %------------------------------------------------------------------------ + % + %Set all the entries without changing sparsity pattern. + % + % + %Usage: set (m, ind1, rr, cc) + % + %m is of type SX. ind1 is of type bool. rr is of type IMatrix. cc is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(678, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setSym(self,varargin) + %Set upper triangular elements. + % + % + %Usage: setSym (val) + % + %val is of type std::vector< double,std::allocator< double > > const &. + + try + + [varargout{1:nargout}] = casadiMEX(679, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getSym(self,varargin) + %Get upper triangular elements. + % + % + %Usage: getSym () + % + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(680, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getNZ(self,varargin) + %> void array(DataType) .getNZ([double ] output_m) const + %------------------------------------------------------------------------ + % + %Get the elements numerically. + % + %> void array(DataType) .getNZ(array(DataType) output_m, bool ind1, Slice k) const + % + %> void array(DataType) .getNZ(array(DataType) output_m, bool ind1, IMatrix k) const + %------------------------------------------------------------------------ + % + %Get a set of nonzeros + % + % + %Usage: getNZ (ind1, k) + % + %ind1 is of type bool. k is of type IMatrix. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(681, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setNZ(self,varargin) + %> void array(DataType) .setNZ(double val) + % + %> void array(DataType) .setNZ(const double *val) + % + %> void array(DataType) .setNZ([double ] val) + %------------------------------------------------------------------------ + % + %Set the elements numerically. + % + %> void array(DataType) .setNZ(array(DataType) m, bool ind1, Slice k) + % + %> void array(DataType) .setNZ(array(DataType) m, bool ind1, IMatrix k) + %------------------------------------------------------------------------ + % + %Set a set of nonzeros + % + % + %Usage: setNZ (m, ind1, k) + % + %m is of type SX. ind1 is of type bool. k is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(682, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = append(self,varargin) + %[DEPRECATED] Append a matrix vertically (NOTE: only efficient if vector) + % + % + %Usage: append (y) + % + %y is of type SX. + + try + + [varargout{1:nargout}] = casadiMEX(683, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = appendColumns(self,varargin) + %[DEPRECATED] Append a matrix horizontally + % + % + %Usage: appendColumns (y) + % + %y is of type SX. + + try + + [varargout{1:nargout}] = casadiMEX(684, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setZero(self,varargin) + %[DEPRECATED] Set all elements to zero + % + % + %Usage: setZero () + % + + try + + [varargout{1:nargout}] = casadiMEX(685, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = makeSparse(self,varargin) + %[DEPRECATED: use sparsify instead] Make a matrix sparse by removing + %numerical zeros smaller in absolute value than a specified tolerance + % + % + %Usage: makeSparse (tol = 0) + % + %tol is of type double. + + try + + [varargout{1:nargout}] = casadiMEX(686, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = uplus(self,varargin) + %Usage: retval = uplus () + % + %retval is of type SX. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(687, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = uminus(self,varargin) + %Usage: retval = uminus () + % + %retval is of type SX. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(688, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printme(self,varargin) + %Usage: retval = printme (y) + % + %y is of type SX. y is of type SX. retval is of type SX. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(694, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = T(self,varargin) + %Transpose the matrix. + % + % + %Usage: retval = T () + % + %retval is of type SX. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(695, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = print(self,varargin) + %Print a description of the object. + % + % + %Usage: print (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:nargout}] = casadiMEX(699, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printSplit(self,varargin) + %Get strings corresponding to the nonzeros and the interdependencies. + % + % + %Usage: printSplit () + % + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(700, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = disp(self,varargin) + %Print a representation of the object. + % + % + %Usage: disp (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:nargout}] = casadiMEX(701, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printScalar(self,varargin) + %Print scalar. + % + % + %Usage: printScalar (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:nargout}] = casadiMEX(702, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printVector(self,varargin) + %Print vector-style. + % + % + %Usage: printVector (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:nargout}] = casadiMEX(703, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printDense(self,varargin) + %Print dense matrix-stype. + % + % + %Usage: printDense (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:nargout}] = casadiMEX(704, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printSparse(self,varargin) + %Print sparse matrix style. + % + % + %Usage: printSparse (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:nargout}] = casadiMEX(705, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = clear(self,varargin) + %Usage: clear () + % + + try + + [varargout{1:nargout}] = casadiMEX(706, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = resize(self,varargin) + %Usage: resize (nrow, ncol) + % + %nrow is of type int. ncol is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(707, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = reserve(self,varargin) + %Usage: reserve (nnz, ncol) + % + %nnz is of type int. ncol is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(708, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = erase(self,varargin) + %> void array(DataType) .erase([int ] rr, [int ] cc, bool ind1=false) + %------------------------------------------------------------------------ + % + %Erase a submatrix (leaving structural zeros in its place) Erase rows and/or + %columns of a matrix. + % + %> void array(DataType) .erase([int ] rr, bool ind1=false) + %------------------------------------------------------------------------ + % + %Erase a submatrix (leaving structural zeros in its place) Erase elements of + %a matrix. + % + % + %Usage: erase (rr, ind1 = false) + % + %rr is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(709, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = remove(self,varargin) + %Remove columns and rows Remove/delete rows and/or columns of a matrix. + % + % + %Usage: remove (rr, cc) + % + %rr is of type std::vector< int,std::allocator< int > > const &. cc is of type std::vector< int,std::allocator< int > > const &. + + try + + [varargout{1:nargout}] = casadiMEX(710, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = enlarge(self,varargin) + %Enlarge matrix Make the matrix larger by inserting empty rows and columns, + %keeping the existing non-zeros. + % + % + %Usage: enlarge (nrow, ncol, rr, cc, ind1 = false) + % + %nrow is of type int. ncol is of type int. rr is of type std::vector< int,std::allocator< int > > const &. cc is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(711, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sparsity(self,varargin) + %Get an owning reference to the sparsity pattern. + % + % + %Usage: retval = sparsity () + % + %retval is of type Sparsity. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(712, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getElementHash(self,varargin) + %Returns a number that is unique for a given symbolic scalar. + % + %Only defined if symbolic scalar. + % + % + %Usage: retval = getElementHash () + % + %retval is of type size_t. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(717, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isRegular(self,varargin) + %Checks if expression does not contain NaN or Inf. + % + % + %Usage: retval = isRegular () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(718, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isSmooth(self,varargin) + %Check if smooth. + % + % + %Usage: retval = isSmooth () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(719, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isLeaf(self,varargin) + %Check if SX is a leaf of the SX graph. + % + %Only defined if symbolic scalar. + % + % + %Usage: retval = isLeaf () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(720, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isCommutative(self,varargin) + %Check whether a binary SX is commutative. + % + %Only defined if symbolic scalar. + % + % + %Usage: retval = isCommutative () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(721, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isSymbolic(self,varargin) + %Check if symbolic (Dense) Sparse matrices invariable return false. + % + % + %Usage: retval = isSymbolic () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(722, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isValidInput(self,varargin) + %Check if matrix can be used to define function inputs. Sparse matrices can + %return true if all non-zero elements are symbolic. + % + % + %Usage: retval = isValidInput () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(723, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasDuplicates(self,varargin) + %[INTERNAL] Detect + %duplicate symbolic expressions If there are symbolic primitives appearing + %more than once, the function will return true and the names of the duplicate + %expressions will be printed to userOut(). Note: Will mark the + %node using SXElement::setTemp. Make sure to call resetInput() after usage. + % + % + %Usage: retval = hasDuplicates () + % + %retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(724, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = resetInput(self,varargin) + %[INTERNAL] Reset the + %marker for an input expression. + % + % + %Usage: resetInput () + % + + try + + [varargout{1:nargout}] = casadiMEX(725, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isConstant(self,varargin) + %Check if the matrix is constant (note that false negative answers are + %possible) + % + % + %Usage: retval = isConstant () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(726, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isInteger(self,varargin) + %Check if the matrix is integer-valued (note that false negative answers are + %possible) + % + % + %Usage: retval = isInteger () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(727, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isZero(self,varargin) + %check if the matrix is 0 (note that false negative answers are possible) + % + % + %Usage: retval = isZero () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(728, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isOne(self,varargin) + %check if the matrix is 1 (note that false negative answers are possible) + % + % + %Usage: retval = isOne () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(729, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isMinusOne(self,varargin) + %check if the matrix is -1 (note that false negative answers are possible) + % + % + %Usage: retval = isMinusOne () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(730, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isIdentity(self,varargin) + %check if the matrix is an identity matrix (note that false negative answers + %are possible) + % + % + %Usage: retval = isIdentity () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(731, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasNonStructuralZeros(self,varargin) + %Check if the matrix has any zero entries which are not structural zeros. + % + % + %Usage: retval = hasNonStructuralZeros () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(732, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getValue(self,varargin) + %> double array(DataType) .getValue() const + %------------------------------------------------------------------------ + % + %Get double value (only if constant) + % + %> double array(DataType) .getValue(int k) const + %------------------------------------------------------------------------ + % + %Get double value (particular nonzero) + % + % + %Usage: retval = getValue (k) + % + %k is of type int. k is of type int. retval is of type double. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(733, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setValue(self,varargin) + %> void array(DataType) .setValue(double m) + %------------------------------------------------------------------------ + % + %Set double value (only if constant) + % + %> void array(DataType) .setValue(double m, int k) + %------------------------------------------------------------------------ + % + %Set double value (particular nonzero) + % + % + %Usage: setValue (m, k) + % + %m is of type double. k is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(734, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getIntValue(self,varargin) + %Get double value (only if integer constant) + % + % + %Usage: retval = getIntValue () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(735, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nonzeros(self,varargin) + %Get all nonzeros. + % + % + %Usage: retval = nonzeros () + % + %retval is of type std::vector< double,std::allocator< double > >. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(736, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nonzeros_int(self,varargin) + %Get all nonzeros. + % + % + %Usage: retval = nonzeros_int () + % + %retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(737, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getName(self,varargin) + %Get name (only if symbolic scalar) + % + % + %Usage: retval = getName () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(738, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getDep(self,varargin) + %Get expressions of the children of the expression Only defined if symbolic + %scalar. Wraps SXElement SXElement::getDep(int ch=0) const. + % + % + %Usage: retval = getDep (ch = 0) + % + %ch is of type int. ch is of type int. retval is of type SX. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(739, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getNdeps(self,varargin) + %Get the number of dependencies of a binary SXElement Only defined if + %symbolic scalar. + % + % + %Usage: retval = getNdeps () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(740, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = paren(self,varargin) + %Usage: retval = paren (rr, cc) + % + %rr is of type IMatrix. cc is of type IMatrix. rr is of type IMatrix. cc is of type IMatrix. retval is of type SX. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(744, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = paren_asgn(self,varargin) + %Usage: paren_asgn (m, rr, cc) + % + %m is of type SX. rr is of type IMatrix. cc is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(745, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = brace(self,varargin) + %Usage: retval = brace (rr) + % + %rr is of type IMatrix. rr is of type IMatrix. retval is of type SX. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(746, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setbrace(self,varargin) + %Usage: setbrace (m, rr) + % + %m is of type SX. rr is of type IMatrix. + + try + + [varargout{1:nargout}] = casadiMEX(747, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = end(self,varargin) + %Usage: retval = end (i, n) + % + %i is of type int. n is of type int. i is of type int. n is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(748, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ctranspose(self,varargin) + %Usage: retval = ctranspose () + % + %retval is of type SX. + + try + + if ~isa(self,'casadi.SX') + self = casadi.SX(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(749, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = SX(varargin) + self@casadi.MatrixCommon(SwigRef.Null); + self@casadi.ExpSX(SwigRef.Null); + self@casadi.GenSX(SwigRef.Null); + self@casadi.PrintSX(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(750, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(751, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = binary(varargin) + %[INTERNAL] Create nodes by + %their ID. + % + % + %Usage: retval = binary (op, x, y) + % + %op is of type int. x is of type SX. y is of type SX. op is of type int. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(689, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = unary(varargin) + %[INTERNAL] Create nodes by + %their ID. + % + % + %Usage: retval = unary (op, x) + % + %op is of type int. x is of type SX. op is of type int. x is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(690, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = scalar_matrix(varargin) + %[INTERNAL] Create + %nodes by their ID. + % + % + %Usage: retval = scalar_matrix (op, x, y) + % + %op is of type int. x is of type SX. y is of type SX. op is of type int. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(691, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = matrix_scalar(varargin) + %[INTERNAL] Create + %nodes by their ID. + % + % + %Usage: retval = matrix_scalar (op, x, y) + % + %op is of type int. x is of type SX. y is of type SX. op is of type int. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(692, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = matrix_matrix(varargin) + %[INTERNAL] Create + %nodes by their ID. + % + % + %Usage: retval = matrix_matrix (op, x, y) + % + %op is of type int. x is of type SX. y is of type SX. op is of type int. x is of type SX. y is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(693, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setEqualityCheckingDepth(varargin) + %Usage: setEqualityCheckingDepth (eq_depth = 1) + % + %eq_depth is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(696, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getEqualityCheckingDepth(varargin) + %Usage: retval = getEqualityCheckingDepth () + % + %retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(697, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = className(varargin) + %Usage: retval = className () + % + %retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(698, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = triplet(varargin) + %Usage: retval = triplet (row, col, d, rc) + % + %row is of type std::vector< int,std::allocator< int > > const &. col is of type std::vector< int,std::allocator< int > > const &. d is of type SX. rc is of type std::pair< int,int > const &. row is of type std::vector< int,std::allocator< int > > const &. col is of type std::vector< int,std::allocator< int > > const &. d is of type SX. rc is of type std::pair< int,int > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(713, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inf(varargin) + %create a matrix with all inf + % + % + %Usage: retval = inf (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(714, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nan(varargin) + %create a matrix with all nan + % + % + %Usage: retval = nan (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(715, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eye(varargin) + %Usage: retval = eye (ncol) + % + %ncol is of type int. ncol is of type int. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(716, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setPrecision(varargin) + %Set the 'precision, width & scientific' used in printing and serializing to + %streams. + % + % + %Usage: setPrecision (precision) + % + %precision is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(741, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setWidth(varargin) + %Set the 'precision, width & scientific' used in printing and serializing to + %streams. + % + % + %Usage: setWidth (width) + % + %width is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(742, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = setScientific(varargin) + %Set the 'precision, width & scientific' used in printing and serializing to + %streams. + % + % + %Usage: setScientific (scientific) + % + %scientific is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(743, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SXElement.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SXElement.m new file mode 100755 index 0000000..14e85a4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SXElement.m @@ -0,0 +1,41 @@ +classdef SXElement < SwigRef + %Usage: SXElement () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function self = SXElement(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(670, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(671, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SXFunction.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SXFunction.m new file mode 100755 index 0000000..0dddf10 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SXFunction.m @@ -0,0 +1,691 @@ +classdef SXFunction < casadi.Function + %Dynamically created function that can be expanded into a series of scalar + %operations. + % + %Joel Andersson + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| just_in_time | OT_BOOLEAN | false | Just-in-time | casadi::SXFu | + %| _opencl | | | compilation | nctionIntern | + %| | | | for numeric | al | + %| | | | evaluation | | + %| | | | using OpenCL | | + %| | | | (experimenta | | + %| | | | l) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| just_in_time | OT_BOOLEAN | false | Propagate | casadi::SXFu | + %| _sparsity | | | sparsity | nctionIntern | + %| | | | patterns | al | + %| | | | using just- | | + %| | | | in-time | | + %| | | | compilation | | + %| | | | to a CPU or | | + %| | | | GPU using | | + %| | | | OpenCL | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: sx_function.hpp + %Usage: SXFunction () + % + methods + function varargout = jac(self,varargin) + %Jacobian via source code transformation. + % + %See: casadi::Jacobian for an AD approach + % + % + %Usage: retval = jac (iname, oname, compact = false, symmetric = false) + % + %iname is of type std::string const &. oname is of type std::string const &. compact is of type bool. symmetric is of type bool. iname is of type std::string const &. oname is of type std::string const &. compact is of type bool. symmetric is of type bool. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(905, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = grad(self,varargin) + %Gradient via source code transformation + % + % + %Usage: retval = grad (iname, oname) + % + %iname is of type std::string const &. oname is of type std::string const &. iname is of type std::string const &. oname is of type std::string const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(906, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = tang(self,varargin) + %Tangent via source code transformation + % + % + %Usage: retval = tang (iname, oname) + % + %iname is of type std::string const &. oname is of type std::string const &. iname is of type std::string const &. oname is of type std::string const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(907, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hess(self,varargin) + %Hessian (forward over adjoint) via source code transformation + % + % + %Usage: retval = hess (iname, oname) + % + %iname is of type std::string const &. oname is of type std::string const &. iname is of type std::string const &. oname is of type std::string const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(908, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = inputExpr(self,varargin) + %> const SX SXFunction.inputExpr(int iind) const + %------------------------------------------------------------------------ + % + %Get function input. + % + %> [SX] SXFunction.inputExpr() const + %------------------------------------------------------------------------ + % + %Get all function inputs. + % + % + %Usage: retval = inputExpr () + % + %retval is of type std::vector< casadi::SX,std::allocator< casadi::SX > > const. + + try + + if ~isa(self,'casadi.SXFunction') + self = casadi.SXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(909, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = outputExpr(self,varargin) + %> const SX SXFunction.outputExpr(int oind) const + %------------------------------------------------------------------------ + % + %Get function output. + % + %> [SX] SXFunction.outputExpr() const + %------------------------------------------------------------------------ + % + %Get all function outputs. + % + % + %Usage: retval = outputExpr () + % + %retval is of type std::vector< casadi::SX,std::allocator< casadi::SX > > const. + + try + + if ~isa(self,'casadi.SXFunction') + self = casadi.SXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(910, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getAlgorithmSize(self,varargin) + %Get the number of atomic operations. + % + % + %Usage: retval = getAlgorithmSize () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.SXFunction') + self = casadi.SXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(911, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getWorkSize(self,varargin) + %Get the length of the work vector. + % + % + %Usage: retval = getWorkSize () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.SXFunction') + self = casadi.SXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(912, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getAtomicOperation(self,varargin) + %Get an atomic operation operator index. + % + % + %Usage: retval = getAtomicOperation (k) + % + %k is of type int. k is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.SXFunction') + self = casadi.SXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(913, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getAtomicInput(self,varargin) + %Get the (integer) input arguments of an atomic operation. + % + % + %Usage: retval = getAtomicInput (k) + % + %k is of type int. k is of type int. retval is of type std::pair< int,int >. + + try + + if ~isa(self,'casadi.SXFunction') + self = casadi.SXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(914, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getAtomicInputReal(self,varargin) + %Get the floating point output argument of an atomic operation. + % + % + %Usage: retval = getAtomicInputReal (k) + % + %k is of type int. k is of type int. retval is of type double. + + try + + if ~isa(self,'casadi.SXFunction') + self = casadi.SXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(915, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getAtomicOutput(self,varargin) + %Get the (integer) output argument of an atomic operation. + % + % + %Usage: retval = getAtomicOutput (k) + % + %k is of type int. k is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.SXFunction') + self = casadi.SXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(916, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = countNodes(self,varargin) + %Number of nodes in the algorithm. + % + % + %Usage: retval = countNodes () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.SXFunction') + self = casadi.SXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(917, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = clearSymbolic(self,varargin) + %Clear the function from its symbolic representation, to free up memory, no + %symbolic evaluations are possible after this. + % + % + %Usage: clearSymbolic () + % + + try + + [varargout{1:nargout}] = casadiMEX(918, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getFree(self,varargin) + %Get all the free variables of the function. + % + % + %Usage: retval = getFree () + % + %retval is of type SX. + + try + + if ~isa(self,'casadi.SXFunction') + self = casadi.SXFunction(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(919, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = SXFunction(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(921, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(922, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(920, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SdpSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SdpSolver.m new file mode 100755 index 0000000..63205f7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SdpSolver.m @@ -0,0 +1,690 @@ +classdef SdpSolver < casadi.Function + %SdpSolver. + % + %Solves an SDP problem in standard form. + %Seehttp://sdpa.indsys.chuo-u.ac.jp/sdpa/files/sdpa-c.6.2.0.manual.pdf + % + %Primal: + % + % + % + %:: + % + % min c' x + % x + % subject to + % P = Sum_i^m F_i x_i - G + % P negative semidefinite + % + % LBA <= A x <= UBA + % LBX <= x <= UBX + % + % with x ( n x 1) + % c ( n x 1 ) + % G, F_i sparse symmetric (m x m) + % X dense symmetric ( m x m ) + % A sparse matrix ( nc x n) + % LBA, UBA dense vector (nc x 1) + % LBX, UBX dense vector (n x 1) + % + % + % + %This formulation is chosen as primal, because it does not call for a large + %decision variable space. + % + %Dual: + % + % + % + %:: + % + % max trace(G Y) + % Y + % + % subject to + % trace(F_i Y) = c_i + % Y positive semidefinite + % + % with Y dense symmetric ( m x m) + % + % + % + %On generality: you might have formulation with block partitioning: + % + %Primal: + % + % + % + %:: + % + % min c' x + % x + % subject to + % Pj = Sum_i^m F_ij x_i - gj for all j + % Pj negative semidefinite for all j + % + % with x ( n x 1) + % c ( n x 1 ) + % G, F_i sparse symmetric (m x m) + % X dense symmetric ( m x m ) + % + % + % + %Dual: + % + %:: + % + % max Sum_j trace(Gj Yj) + % Yj + % + % subject to + % Sum_j trace(F_ij Yj) = c_i for all j + % Yj positive semidefinite for all j + % + % with Y dense symmetric ( m x m) + % + % + % + %You can cast this into the standard form with: G = diagcat(Gj for all j) Fi + %= diagcat(F_ij for all j) + % + %Implementations of SdpSolver are encouraged to exploit this block structure. + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::SDPInput (SDP_SOLVER_NUM_IN = 8) [sdpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SDP_SOLVER_F | f | The horizontal stack | + %| | | of all matrices F_i: ( | + %| | | m x nm) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_C | c | The vector c: ( n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_G | g | The matrix G: ( m x m) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_A | a | The matrix A: ( nc x | + %| | | n) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_LBA | lba | Lower bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_UBA | uba | Upper bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_LBX | lbx | Lower bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_UBX | ubx | Upper bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::SDPOutput (SDP_SOLVER_NUM_OUT = 7) [sdpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SDP_SOLVER_X | x | The primal solution (n | + %| | | x 1) - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_P | p | The solution P (m x m) | + %| | | - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_DUAL | dual | The dual solution (m x | + %| | | m) - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_COST | cost | The primal optimal | + %| | | cost (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_DUAL_COST | dual_cost | The dual optimal cost | + %| | | (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to the | + %| | | linear constraints (nc | + %| | | x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds (n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| calc_dual | OT_BOOLEAN | true | Indicate if | casadi::SdpS | + %| | | | dual should | olverInterna | + %| | | | be allocated | l | + %| | | | and | | + %| | | | calculated. | | + %| | | | You may want | | + %| | | | to avoid | | + %| | | | calculating | | + %| | | | this | | + %| | | | variable for | | + %| | | | problems | | + %| | | | with n | | + %| | | | large, as is | | + %| | | | always dense | | + %| | | | (m x m). | | + %+--------------+--------------+--------------+--------------+--------------+ + %| calc_p | OT_BOOLEAN | true | Indicate if | casadi::SdpS | + %| | | | the P-part | olverInterna | + %| | | | of primal | l | + %| | | | solution | | + %| | | | should be | | + %| | | | allocated | | + %| | | | and | | + %| | | | calculated. | | + %| | | | You may want | | + %| | | | to avoid | | + %| | | | calculating | | + %| | | | this | | + %| | | | variable for | | + %| | | | problems | | + %| | | | with n | | + %| | | | large, as is | | + %| | | | always dense | | + %| | | | (m x m). | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode c | + %| | | | according to | asadi::SdpSo | + %| | | | a given | lverInternal | + %| | | | recipe (low- | | + %| | | | level) | | + %| | | | (socp) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| print_proble | OT_BOOLEAN | false | Print out | casadi::SdpS | + %| m | | | problem | olverInterna | + %| | | | statement | l | + %| | | | for | | + %| | | | debugging. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- dsdp + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %SdpSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %dsdp + %---- + % + % + % + %Interface to the SDP solver DSDP Warning: The solver DSDP is not good at + %handling linear equalities. There are several options if you notice + %difficulties: play around with the parameter "_penalty" leave a gap + %manually switch to another SDP Solver + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| _loglevel | OT_INTEGER | 0 | An integer that | + %| | | | specifies how | + %| | | | much logging is | + %| | | | done on stdout. | + %+-----------------+-----------------+-----------------+-----------------+ + %| _penalty | OT_REAL | 100000 | Penality | + %| | | | parameter | + %| | | | lambda. Must | + %| | | | exceed the | + %| | | | trace of Y. | + %| | | | This parameter | + %| | | | heavily | + %| | | | influences the | + %| | | | ability of DSDP | + %| | | | to treat linear | + %| | | | equalities. The | + %| | | | DSDP standard | + %| | | | default (1e8) | + %| | | | will make a | + %| | | | problem with | + %| | | | linear equality | + %| | | | return unusable | + %| | | | solutions. | + %+-----------------+-----------------+-----------------+-----------------+ + %| _printlevel | OT_INTEGER | 1 | A printlevel of | + %| | | | zero will | + %| | | | disable all | + %| | | | output. Another | + %| | | | number | + %| | | | indicates how | + %| | | | often a line is | + %| | | | printed. | + %+-----------------+-----------------+-----------------+-----------------+ + %| _reuse | OT_INTEGER | 4 | Maximum on the | + %| | | | number of times | + %| | | | the Schur | + %| | | | complement | + %| | | | matrix is | + %| | | | reused | + %+-----------------+-----------------+-----------------+-----------------+ + %| _rho | OT_REAL | 4 | Potential | + %| | | | parameter. Must | + %| | | | be >=1 | + %+-----------------+-----------------+-----------------+-----------------+ + %| _use_penalty | OT_BOOLEAN | true | Modifies the | + %| | | | algorithm to | + %| | | | use a penality | + %| | | | gamma on r. | + %+-----------------+-----------------+-----------------+-----------------+ + %| _zbar | OT_REAL | 1.000e+10 | Initial upper | + %| | | | bound on the | + %| | | | objective of | + %| | | | the dual | + %| | | | problem. | + %+-----------------+-----------------+-----------------+-----------------+ + %| dualTol | OT_REAL | 0.000 | Tolerance for | + %| | | | dual | + %| | | | infeasibility | + %| | | | (translates to | + %| | | | primal | + %| | | | infeasibility | + %| | | | in dsdp terms) | + %+-----------------+-----------------+-----------------+-----------------+ + %| gapTol | OT_REAL | 0.000 | Convergence | + %| | | | criterion based | + %| | | | on distance | + %| | | | between primal | + %| | | | and dual | + %| | | | objective | + %+-----------------+-----------------+-----------------+-----------------+ + %| inf | OT_REAL | 1.000e+30 | Treat numbers | + %| | | | higher than | + %| | | | this as | + %| | | | infinity | + %+-----------------+-----------------+-----------------+-----------------+ + %| maxIter | OT_INTEGER | 500 | Maximum number | + %| | | | of iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| primalTol | OT_REAL | 0.000 | Tolerance for | + %| | | | primal | + %| | | | infeasibility | + %| | | | (translates to | + %| | | | dual | + %| | | | infeasibility | + %| | | | in dsdp terms) | + %+-----------------+-----------------+-----------------+-----------------+ + %| stepTol | OT_REAL | 0.050 | Terminate the | + %| | | | solver if the | + %| | | | step length in | + %| | | | the primal is | + %| | | | below this | + %| | | | tolerance. | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available stats + % + %+--------------------+ + %| Id | + %+====================+ + %| solution_type | + %+--------------------+ + %| termination_reason | + %+--------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joel Andersson + %Diagrams + %-------- + % + % + % + %C++ includes: sdp_solver.hpp + %Usage: SdpSolver () + % + methods + function self = SdpSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1029, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1030, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1025, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1026, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1027, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1028, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SdqpSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SdqpSolver.m new file mode 100755 index 0000000..72d2d8f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SdqpSolver.m @@ -0,0 +1,485 @@ +classdef SdqpSolver < casadi.Function + %SdqpSolver. + % + %Same as an SdpSolver, but with a quadratic objective 1/2 x' H x + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::SDQPInput (SDQP_SOLVER_NUM_IN = 9) [sdqpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SDQP_SOLVER_H | h | The matrix H: sparse ( | + %| | | n x n) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_C | c | The vector c: ( n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_F | f | The horizontal stack | + %| | | of all matrices F_i: ( | + %| | | m x nm) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_G | g | The matrix G: ( m x m) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_A | a | The matrix A: ( nc x | + %| | | n) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_LBA | lba | Lower bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_UBA | uba | Upper bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_LBX | lbx | Lower bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_UBX | ubx | Upper bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::SDQPOutput (SDQP_SOLVER_NUM_OUT = 7) [sdqpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SDQP_SOLVER_X | x | The primal solution (n | + %| | | x 1) - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_P | p | The solution P (m x m) | + %| | | - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_DUAL | dual | The dual solution (m x | + %| | | m) - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_COST | cost | The primal optimal | + %| | | cost (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_DUAL_COST | dual_cost | The dual optimal cost | + %| | | (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to the | + %| | | linear constraints (nc | + %| | | x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds (n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode c | + %| | | | according to | asadi::SdqpS | + %| | | | a given | olverInterna | + %| | | | recipe (low- | l | + %| | | | level) | | + %| | | | (socqp) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| sdp_solver | OT_STRING | GenericType( | The | casadi::Sdqp | + %| | | ) | SdqpSolver | SolverIntern | + %| | | | used to | al | + %| | | | solve the | | + %| | | | SDPs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| sdp_solver_o | OT_DICT | GenericType( | Options to | casadi::Sdqp | + %| ptions | | ) | be passed to | SolverIntern | + %| | | | the | al | + %| | | | SDPSOlver | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- sdp + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %SdqpSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %sdp + %--- + % + % + % + %Solve an SQDP using an SdpSolver Note: this implementation relies on + %Cholesky decomposition: Chol(H) = L -> H = LL' with L lower triangular This + %requires Pi, H to be positive definite. Positive semi-definite is not + %sufficient. Notably, H==0 will not work. + % + %A better implementation would rely on matrix square root, but we need + %singular value decomposition to implement that. + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %>List of available stats + % + %+------------------+ + %| Id | + %+==================+ + %| sdp_solver_stats | + %+------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joel Andersson + %Diagrams + %-------- + % + % + % + %C++ includes: sdqp_solver.hpp + %Usage: SdqpSolver () + % + methods + function self = SdqpSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1047, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1048, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1043, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1044, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1045, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1046, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SharedObject.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SharedObject.m new file mode 100755 index 0000000..29e0e25 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SharedObject.m @@ -0,0 +1,300 @@ +classdef SharedObject < casadi.PrintSharedObject + %SharedObject implements a reference counting framework similar for efficient + %and easily-maintained memory management. + % + %To use the class, both the SharedObject class (the public class), and the + %SharedObjectNode class (the internal class) must be inherited from. It can + %be done in two different files and together with memory management, this + %approach provides a clear distinction of which methods of the class are to + %be considered "public", i.e. methods for public use that can be considered + %to remain over time with small changes, and the internal memory. + % + %When interfacing a software, which typically includes including some header + %file, this is best done only in the file where the internal class is + %defined, to avoid polluting the global namespace and other side effects. + % + %The default constructor always means creating a null pointer to an internal + %class only. To allocate an internal class (this works only when the internal + %class isn't abstract), use the constructor with arguments. + % + %The copy constructor and the assignment operator perform shallow copies + %only, to make a deep copy you must use the clone method explicitly. This + %will give a shared pointer instance. + % + %In an inheritance hierarchy, you can cast down automatically, e.g. ( + %SXFunction is a child class of Function): SXFunction derived(...); Function + %base = derived; + % + %To cast up, use the shared_cast template function, which works analogously + %to dynamic_cast, static_cast, const_cast etc, e.g.: SXFunction derived(...); + %Function base = derived; SXFunction derived_from_base = + %shared_cast(base); + % + %A failed shared_cast will result in a null pointer (cf. dynamic_cast) + % + %Joel Andersson + % + %C++ includes: shared_object.hpp + %Usage: SharedObject () + % + methods + function varargout = disp(self,varargin) + %Print a representation of the object. + % + % + %Usage: disp (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.SharedObject') + self = casadi.SharedObject(self); + end + [varargout{1:nargout}] = casadiMEX(56, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = print(self,varargin) + %Print a description of the object. + % + % + %Usage: print (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.SharedObject') + self = casadi.SharedObject(self); + end + [varargout{1:nargout}] = casadiMEX(57, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printPtr(self,varargin) + %[INTERNAL] Print the + %pointer to the internal class + % + % + %Usage: printPtr () + % + + try + + if ~isa(self,'casadi.SharedObject') + self = casadi.SharedObject(self); + end + [varargout{1:nargout}] = casadiMEX(58, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = init(self,varargin) + %[DEPRECATED] Initialize or re-initialize the object: + % + %more documentation in the node class (SharedObjectNode and derived classes) + % + % + %Usage: init (allow_reinit = true) + % + %allow_reinit is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(59, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isInit(self,varargin) + %Is initialized? + % + % + %Usage: retval = isInit () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SharedObject') + self = casadi.SharedObject(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(60, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = assertInit(self,varargin) + %[INTERNAL] Assert + %that it is initialized + % + % + %Usage: assertInit () + % + + try + + if ~isa(self,'casadi.SharedObject') + self = casadi.SharedObject(self); + end + [varargout{1:nargout}] = casadiMEX(61, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isNull(self,varargin) + %Is a null pointer? + % + % + %Usage: retval = isNull () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.SharedObject') + self = casadi.SharedObject(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(62, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = makeUnique(self,varargin) + %Make unique. + % + %If there are other references to the object, then make a deep copy of it and + %point to this new object + % + % + %Usage: makeUnique (clone_members = true) + % + %clone_members is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(63, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hash(self,varargin) + %Returns a number that is unique for a given Node. If the Object does not + %point to any node, "0" is returned. + % + % + %Usage: retval = hash () + % + %retval is of type size_t. + + try + + if ~isa(self,'casadi.SharedObject') + self = casadi.SharedObject(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(64, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = SharedObject(varargin) + self@casadi.PrintSharedObject(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(65, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(66, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Simulator.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Simulator.m new file mode 100755 index 0000000..907a29c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Simulator.m @@ -0,0 +1,345 @@ +classdef Simulator < casadi.Function + %Integrator class. + % + %An "simulator" integrates an IVP, stopping at a (fixed) number of grid + %points and evaluates a set of output functions at these points. The internal + %stepsizes of the integrator need not coincide with the gridpoints. + % + %Simulator is an casadi::Function mapping from casadi::IntegratorInput to n. + %\\ + % + %The output function needs to be a mapping from casadi::DAEInput to n. The + %default output has n=1 and the output is the (vectorized) differential state + %for each time step. + % + %Joel Andersson + % + %>Input scheme: casadi::IntegratorInput (INTEGRATOR_NUM_IN = 6) [integratorIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| INTEGRATOR_X0 | x0 | Differential state at | + %| | | the initial time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_P | p | Parameters . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_Z0 | z0 | Initial guess for the | + %| | | algebraic variable . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RX0 | rx0 | Backward differential | + %| | | state at the final | + %| | | time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RP | rp | Backward parameter | + %| | | vector . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RZ0 | rz0 | Initial guess for the | + %| | | backwards algebraic | + %| | | variable . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | casadi::Simu | + %| | | | uts) (initi | latorInterna | + %| | | | al|step) | l | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %>List of available monitors + % + %+---------+---------------------------+ + %| Id | Used in | + %+=========+===========================+ + %| initial | casadi::SimulatorInternal | + %+---------+---------------------------+ + %| inputs | casadi::FunctionInternal | + %+---------+---------------------------+ + %| outputs | casadi::FunctionInternal | + %+---------+---------------------------+ + %| step | casadi::SimulatorInternal | + %+---------+---------------------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: simulator.hpp + %Usage: Simulator () + % + methods + function self = Simulator(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(977, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(978, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(976, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Slice.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Slice.m new file mode 100755 index 0000000..5a9e86a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Slice.m @@ -0,0 +1,269 @@ +classdef Slice < casadi.PrintSlice + %Class representing a Slice. + % + %Note that Python or Octave do not need to use this class. They can just use + %slicing utility from the host language ( M[0:6] in Python, M(1:7) ) + % + %C++ includes: slice.hpp + %Usage: Slice () + % + methods + function varargout = getAll(self,varargin) + %> [int] Slice.getAll(int len, bool ind1=false) const + %------------------------------------------------------------------------ + % + %Get a vector of indices. + % + %> [int] Slice.getAll(Slice outer, int len) const + %------------------------------------------------------------------------ + % + %Get a vector of indices (nested slice) + % + % + %Usage: retval = getAll (outer, len) + % + %outer is of type Slice. len is of type int. outer is of type Slice. len is of type int. retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.Slice') + self = casadi.Slice(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(252, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isscalar(self,varargin) + %Is the slice a scalar. + % + % + %Usage: retval = isscalar (len) + % + %len is of type int. len is of type int. retval is of type bool. + + try + + if ~isa(self,'casadi.Slice') + self = casadi.Slice(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(253, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = toScalar(self,varargin) + %Get scalar (if isscalar) + % + % + %Usage: retval = toScalar (len) + % + %len is of type int. len is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.Slice') + self = casadi.Slice(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(254, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eq(self,varargin) + %Usage: retval = eq (other) + % + %other is of type Slice. other is of type Slice. retval is of type bool. + + try + + if ~isa(self,'casadi.Slice') + self = casadi.Slice(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(255, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ne(self,varargin) + %Usage: retval = ne (other) + % + %other is of type Slice. other is of type Slice. retval is of type bool. + + try + + if ~isa(self,'casadi.Slice') + self = casadi.Slice(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(256, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = disp(self,varargin) + %Print a representation of the object. + % + % + %Usage: disp (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.Slice') + self = casadi.Slice(self); + end + [varargout{1:nargout}] = casadiMEX(257, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = print(self,varargin) + %Print a description of the object. + % + % + %Usage: print (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.Slice') + self = casadi.Slice(self); + end + [varargout{1:nargout}] = casadiMEX(258, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function v = start_(self) + v = casadiMEX(259, self); + end + function v = stop_(self) + v = casadiMEX(260, self); + end + function v = step_(self) + v = casadiMEX(261, self); + end + function self = Slice(varargin) + self@casadi.PrintSlice(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(262, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(263, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = isSlice(varargin) + %Usage: retval = isSlice (v, ind1 = false) + % + %v is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. v is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(250, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isSlice2(varargin) + %Usage: retval = isSlice2 (v) + % + %v is of type std::vector< int,std::allocator< int > > const &. v is of type std::vector< int,std::allocator< int > > const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(251, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SocpSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SocpSolver.m new file mode 100755 index 0000000..c8a7ab0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SocpSolver.m @@ -0,0 +1,1639 @@ +classdef SocpSolver < casadi.Function + %SocpSolver. + % + %Solves an Second Order Cone Programming (SOCP) problem in standard form. + % + %Primal: + % + % + % + %:: + % + % min c' x + % x + % subject to + % || Gi' x + hi ||_2 <= ei' x + fi i = 1..m + % + % LBA <= A x <= UBA + % LBX <= x <= UBX + % + % with x ( n x 1) + % c dense ( n x 1 ) + % Gi sparse (n x ni) + % hi dense (ni x 1) + % ei sparse (n x 1) + % fi dense (1 x 1) + % N = Sum_i^m ni + % A sparse (nc x n) + % LBA, UBA dense vector (nc x 1) + % LBX, UBX dense vector (n x 1) + % + % + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::SOCPInput (SOCP_SOLVER_NUM_IN = 10) [socpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SOCP_SOLVER_G | g | The horizontal stack | + %| | | of all matrices Gi: ( | + %| | | n x N) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_H | h | The vertical stack of | + %| | | all vectors hi: ( N x | + %| | | 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_E | e | The horizontal stack | + %| | | of all vectors ei: ( n | + %| | | x m) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_F | f | The vertical stack of | + %| | | all scalars fi: ( m x | + %| | | 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_C | c | The vector c: ( n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_A | a | The matrix A: ( nc x | + %| | | n) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_LBA | lba | Lower bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_UBA | uba | Upper bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_LBX | lbx | Lower bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_UBX | ubx | Upper bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::SOCPOutput (SOCP_SOLVER_NUM_OUT = 6) [socpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SOCP_SOLVER_X | x | The primal solution (n | + %| | | x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_COST | cost | The primal optimal | + %| | | cost (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_DUAL_COST | dual_cost | The dual optimal cost | + %| | | (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to the | + %| | | linear constraints (nc | + %| | | x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds (n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_LAM_CONE | lam_cone | The dual solution | + %| | | correspoding to cone | + %| | | (2-norm) constraints | + %| | | (m x 1) . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRING | GenericType( | Changes | casadi::Socp | + %| ipe | | ) | default | SolverIntern | + %| | | | options in a | al | + %| | | | given way | | + %| | | | (qcqp) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| ni | OT_INTEGERVE | GenericType( | Provide the | casadi::Socp | + %| | CTOR | ) | size of each | SolverIntern | + %| | | | SOC | al | + %| | | | constraint. | | + %| | | | Must sum up | | + %| | | | to N. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| print_proble | OT_BOOLEAN | false | Print out | casadi::Socp | + %| m | | | problem | SolverIntern | + %| | | | statement | al | + %| | | | for | | + %| | | | debugging. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- ecos + % + %- mosek + % + %- sdp + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %SocpSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %ecos + %---- + % + % + % + %Interface to the SOCP solver ECOS + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| abstol | OT_REAL | ABSTOL | Absolute | + %| | | | tolerance on | + %| | | | duality gap | + %+-----------------+-----------------+-----------------+-----------------+ + %| abstol_inacc | OT_REAL | ATOL_INACC | Absolute | + %| | | | relaxed | + %| | | | tolerance on | + %| | | | duality gap | + %+-----------------+-----------------+-----------------+-----------------+ + %| delta | OT_REAL | DELTA | Regularization | + %| | | | parameter | + %+-----------------+-----------------+-----------------+-----------------+ + %| eps | OT_REAL | EPS | Regularization | + %| | | | threshold | + %+-----------------+-----------------+-----------------+-----------------+ + %| feastol | OT_REAL | FEASTOL | Primal/dual | + %| | | | infeasibility | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| feastol_inacc | OT_REAL | FTOL_INACC | Primal/dual | + %| | | | infeasibility | + %| | | | relaxed | + %| | | | tolerance | + %+-----------------+-----------------+-----------------+-----------------+ + %| gamma | OT_REAL | GAMMA | Scaling the | + %| | | | final step | + %| | | | length | + %+-----------------+-----------------+-----------------+-----------------+ + %| maxit | OT_INTEGER | MAXIT | Maximum number | + %| | | | of iterations | + %+-----------------+-----------------+-----------------+-----------------+ + %| nitref | OT_INTEGER | NITREF | Number of | + %| | | | iterative | + %| | | | refinement | + %| | | | steps | + %+-----------------+-----------------+-----------------+-----------------+ + %| reltol | OT_REAL | RELTOL | Relative | + %| | | | tolerance on | + %| | | | duality gap | + %+-----------------+-----------------+-----------------+-----------------+ + %| reltol_inacc | OT_REAL | RTOL_INACC | Relative | + %| | | | relaxed | + %| | | | tolerance on | + %| | | | duality gap | + %+-----------------+-----------------+-----------------+-----------------+ + %| verbose | OT_INTEGER | VERBOSE | Verbosity bool | + %| | | | for PRINTLEVEL | + %| | | | < 3 | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available stats + % + %+-----------------------+ + %| Id | + %+=======================+ + %| dcost | + %+-----------------------+ + %| dinf | + %+-----------------------+ + %| dinfres | + %+-----------------------+ + %| dres | + %+-----------------------+ + %| exit_code | + %+-----------------------+ + %| exit_code_explanation | + %+-----------------------+ + %| gap | + %+-----------------------+ + %| iter | + %+-----------------------+ + %| kapovert | + %+-----------------------+ + %| mu | + %+-----------------------+ + %| nitref1 | + %+-----------------------+ + %| nitref2 | + %+-----------------------+ + %| nitref3 | + %+-----------------------+ + %| pcost | + %+-----------------------+ + %| pinf | + %+-----------------------+ + %| pinfres | + %+-----------------------+ + %| pres | + %+-----------------------+ + %| relgap | + %+-----------------------+ + %| sigma | + %+-----------------------+ + %| step | + %+-----------------------+ + %| step_aff | + %+-----------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %mosek + %----- + % + % + % + %Interface to the SOCP solver MOSEK + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| MSK_DPAR_ANA_SO | OT_REAL | 0.000 | Consult MOSEK | + %| L_INFEAS_TOL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_BASIS_ | OT_REAL | 0.000 | Consult MOSEK | + %| REL_TOL_S | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_BASIS_ | OT_REAL | 0.000 | Consult MOSEK | + %| TOL_S | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_BASIS_ | OT_REAL | 0.000 | Consult MOSEK | + %| TOL_X | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_CHECK_ | OT_REAL | 0.000 | Consult MOSEK | + %| CONVEXITY_REL_T | | | manual. | + %| OL | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_DATA_T | OT_REAL | 0.000 | Consult MOSEK | + %| OL_AIJ | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_DATA_T | OT_REAL | 1.000e+20 | Consult MOSEK | + %| OL_AIJ_HUGE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_DATA_T | OT_REAL | 1.000e+10 | Consult MOSEK | + %| OL_AIJ_LARGE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_DATA_T | OT_REAL | 1.000e+16 | Consult MOSEK | + %| OL_BOUND_INF | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_DATA_T | OT_REAL | 100000000 | Consult MOSEK | + %| OL_BOUND_WRN | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_DATA_T | OT_REAL | 100000000 | Consult MOSEK | + %| OL_CJ_LARGE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_DATA_T | OT_REAL | 1.000e+16 | Consult MOSEK | + %| OL_C_HUGE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_DATA_T | OT_REAL | 0.000 | Consult MOSEK | + %| OL_QIJ | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_DATA_T | OT_REAL | 0.000 | Consult MOSEK | + %| OL_X | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_FEASRE | OT_REAL | 0.000 | Consult MOSEK | + %| PAIR_TOL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _CO_TOL_DFEAS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _CO_TOL_INFEAS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _CO_TOL_MU_RED | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 1000 | Consult MOSEK | + %| _CO_TOL_NEAR_RE | | | manual. | + %| L | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _CO_TOL_PFEAS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _CO_TOL_REL_GAP | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _NL_MERIT_BAL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _NL_TOL_DFEAS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _NL_TOL_MU_RED | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 1000 | Consult MOSEK | + %| _NL_TOL_NEAR_RE | | | manual. | + %| L | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _NL_TOL_PFEAS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _NL_TOL_REL_GAP | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.995 | Consult MOSEK | + %| _NL_TOL_REL_STE | | | manual. | + %| P | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _TOL_DFEAS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 1 | Consult MOSEK | + %| _TOL_DSAFE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _TOL_INFEAS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _TOL_MU_RED | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _TOL_PATH | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _TOL_PFEAS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 1 | Consult MOSEK | + %| _TOL_PSAFE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _TOL_REL_GAP | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 1.000 | Consult MOSEK | + %| _TOL_REL_STEP | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_INTPNT | OT_REAL | 0.000 | Consult MOSEK | + %| _TOL_STEP_SIZE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_LOWER_ | OT_REAL | -1.000e+30 | Consult MOSEK | + %| OBJ_CUT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_LOWER_ | OT_REAL | -5.000e+29 | Consult MOSEK | + %| OBJ_CUT_FINITE_ | | | manual. | + %| TRH | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_DI | OT_REAL | -1 | Consult MOSEK | + %| SABLE_TERM_TIME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_HE | OT_REAL | -1 | Consult MOSEK | + %| URISTIC_TIME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_MA | OT_REAL | -1 | Consult MOSEK | + %| X_TIME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_MA | OT_REAL | 60 | Consult MOSEK | + %| X_TIME_APRX_OPT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_NE | OT_REAL | 0 | Consult MOSEK | + %| AR_TOL_ABS_GAP | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_NE | OT_REAL | 0.001 | Consult MOSEK | + %| AR_TOL_REL_GAP | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_RE | OT_REAL | 0.750 | Consult MOSEK | + %| L_ADD_CUT_LIMIT | | | manual. | + %| ED | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_RE | OT_REAL | 0.000 | Consult MOSEK | + %| L_GAP_CONST | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_TO | OT_REAL | 0 | Consult MOSEK | + %| L_ABS_GAP | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_TO | OT_REAL | 0.000 | Consult MOSEK | + %| L_ABS_RELAX_INT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_TO | OT_REAL | 0.000 | Consult MOSEK | + %| L_FEAS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_TO | OT_REAL | 0 | Consult MOSEK | + %| L_MAX_CUT_FRAC_ | | | manual. | + %| RHS | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_TO | OT_REAL | 0 | Consult MOSEK | + %| L_MIN_CUT_FRAC_ | | | manual. | + %| RHS | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_TO | OT_REAL | 0 | Consult MOSEK | + %| L_REL_DUAL_BOUN | | | manual. | + %| D_IMPROVEMENT | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_TO | OT_REAL | 0.000 | Consult MOSEK | + %| L_REL_GAP | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_TO | OT_REAL | 0.000 | Consult MOSEK | + %| L_REL_RELAX_INT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_MIO_TO | OT_REAL | 0.000 | Consult MOSEK | + %| L_X | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_NONCON | OT_REAL | 0.000 | Consult MOSEK | + %| VEX_TOL_FEAS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_NONCON | OT_REAL | 0.000 | Consult MOSEK | + %| VEX_TOL_OPT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_OPTIMI | OT_REAL | -1 | Consult MOSEK | + %| ZER_MAX_TIME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_PRESOL | OT_REAL | 0.000 | Consult MOSEK | + %| VE_TOL_ABS_LIND | | | manual. | + %| EP | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_PRESOL | OT_REAL | 0.000 | Consult MOSEK | + %| VE_TOL_AIJ | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_PRESOL | OT_REAL | 0.000 | Consult MOSEK | + %| VE_TOL_REL_LIND | | | manual. | + %| EP | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_PRESOL | OT_REAL | 0.000 | Consult MOSEK | + %| VE_TOL_S | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_PRESOL | OT_REAL | 0.000 | Consult MOSEK | + %| VE_TOL_X | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_QCQO_R | OT_REAL | 0.000 | Consult MOSEK | + %| EFORMULATE_REL_ | | | manual. | + %| DROP_TOL | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_SIMPLE | OT_REAL | 0.000 | Consult MOSEK | + %| X_ABS_TOL_PIV | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_SIM_LU | OT_REAL | 0.010 | Consult MOSEK | + %| _TOL_REL_PIV | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_UPPER_ | OT_REAL | 1.000e+30 | Consult MOSEK | + %| OBJ_CUT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_DPAR_UPPER_ | OT_REAL | 5.000e+29 | Consult MOSEK | + %| OBJ_CUT_FINITE_ | | | manual. | + %| TRH | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_ALLOC_ | OT_STRING | 5000 | Consult MOSEK | + %| ADD_QNZ | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_ANA_SO | OT_STRING | 1 | Consult MOSEK | + %| L_BASIS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_ANA_SO | OT_STRING | 0 | Consult MOSEK | + %| L_PRINT_VIOLATE | | | manual. | + %| D | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_AUTO_S | OT_STRING | 0 | Consult MOSEK | + %| ORT_A_BEFORE_OP | | | manual. | + %| T | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_AUTO_U | OT_STRING | 0 | Consult MOSEK | + %| PDATE_SOL_INFO | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_BASIS_ | OT_STRING | 0 | Consult MOSEK | + %| SOLVE_USE_PLUS_ | | | manual. | + %| ONE | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_BI_CLE | OT_STRING | 0 | Consult MOSEK | + %| AN_OPTIMIZER | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_BI_IGN | OT_STRING | 0 | Consult MOSEK | + %| ORE_MAX_ITER | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_BI_IGN | OT_STRING | 0 | Consult MOSEK | + %| ORE_NUM_ERROR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_BI_MAX | OT_STRING | 1000000 | Consult MOSEK | + %| _ITERATIONS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_CACHE_ | OT_STRING | 1 | Consult MOSEK | + %| LICENSE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_CHECK_ | OT_STRING | 2 | Consult MOSEK | + %| CONVEXITY | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_COMPRE | OT_STRING | 1 | Consult MOSEK | + %| SS_STATFILE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_CONCUR | OT_STRING | 2 | Consult MOSEK | + %| RENT_NUM_OPTIMI | | | manual. | + %| ZERS | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_CONCUR | OT_STRING | 2 | Consult MOSEK | + %| RENT_PRIORITY_D | | | manual. | + %| UAL_SIMPLEX | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_CONCUR | OT_STRING | 3 | Consult MOSEK | + %| RENT_PRIORITY_F | | | manual. | + %| REE_SIMPLEX | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_CONCUR | OT_STRING | 4 | Consult MOSEK | + %| RENT_PRIORITY_I | | | manual. | + %| NTPNT | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_CONCUR | OT_STRING | 1 | Consult MOSEK | + %| RENT_PRIORITY_P | | | manual. | + %| RIMAL_SIMPLEX | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_FEASRE | OT_STRING | 0 | Consult MOSEK | + %| PAIR_OPTIMIZE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INFEAS | OT_STRING | 0 | Consult MOSEK | + %| _GENERIC_NAMES | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INFEAS | OT_STRING | 1 | Consult MOSEK | + %| _PREFER_PRIMAL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INFEAS | OT_STRING | 0 | Consult MOSEK | + %| _REPORT_AUTO | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INFEAS | OT_STRING | 1 | Consult MOSEK | + %| _REPORT_LEVEL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 1 | Consult MOSEK | + %| _BASIS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 1 | Consult MOSEK | + %| _DIFF_STEP | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 0 | Consult MOSEK | + %| _FACTOR_DEBUG_L | | | manual. | + %| VL | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 0 | Consult MOSEK | + %| _FACTOR_METHOD | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 0 | Consult MOSEK | + %| _HOTSTART | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 400 | Consult MOSEK | + %| _MAX_ITERATIONS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | -1 | Consult MOSEK | + %| _MAX_NUM_COR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | -1 | Consult MOSEK | + %| _MAX_NUM_REFINE | | | manual. | + %| MENT_STEPS | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 40 | Consult MOSEK | + %| _OFF_COL_TRH | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 0 | Consult MOSEK | + %| _ORDER_METHOD | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 1 | Consult MOSEK | + %| _REGULARIZATION | | | manual. | + %| _USE | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 0 | Consult MOSEK | + %| _SCALING | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 0 | Consult MOSEK | + %| _SOLVE_FORM | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_INTPNT | OT_STRING | 0 | Consult MOSEK | + %| _STARTING_POINT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LICENS | OT_STRING | 0 | Consult MOSEK | + %| E_DEBUG | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LICENS | OT_STRING | 100 | Consult MOSEK | + %| E_PAUSE_TIME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LICENS | OT_STRING | 0 | Consult MOSEK | + %| E_SUPPRESS_EXPI | | | manual. | + %| RE_WRNS | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LICENS | OT_STRING | 0 | Consult MOSEK | + %| E_WAIT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LIC_TR | OT_STRING | 7 | Consult MOSEK | + %| H_EXPIRY_WRN | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG | OT_STRING | 10 | Consult MOSEK | + %| | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_BI | OT_STRING | 4 | Consult MOSEK | + %| | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_BI | OT_STRING | 2500 | Consult MOSEK | + %| _FREQ | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_CH | OT_STRING | 0 | Consult MOSEK | + %| ECK_CONVEXITY | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_CO | OT_STRING | 1 | Consult MOSEK | + %| NCURRENT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_CU | OT_STRING | 1 | Consult MOSEK | + %| T_SECOND_OPT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_EX | OT_STRING | 0 | Consult MOSEK | + %| PAND | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_FA | OT_STRING | 1 | Consult MOSEK | + %| CTOR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_FE | OT_STRING | 1 | Consult MOSEK | + %| AS_REPAIR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_FI | OT_STRING | 1 | Consult MOSEK | + %| LE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_HE | OT_STRING | 1 | Consult MOSEK | + %| AD | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_IN | OT_STRING | 1 | Consult MOSEK | + %| FEAS_ANA | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_IN | OT_STRING | 4 | Consult MOSEK | + %| TPNT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_MI | OT_STRING | 4 | Consult MOSEK | + %| O | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_MI | OT_STRING | 1000 | Consult MOSEK | + %| O_FREQ | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_NO | OT_STRING | 1 | Consult MOSEK | + %| NCONVEX | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_OP | OT_STRING | 1 | Consult MOSEK | + %| TIMIZER | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_OR | OT_STRING | 1 | Consult MOSEK | + %| DER | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_PA | OT_STRING | 0 | Consult MOSEK | + %| RAM | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_PR | OT_STRING | 1 | Consult MOSEK | + %| ESOLVE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_RE | OT_STRING | 0 | Consult MOSEK | + %| SPONSE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_SE | OT_STRING | 1 | Consult MOSEK | + %| NSITIVITY | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_SE | OT_STRING | 0 | Consult MOSEK | + %| NSITIVITY_OPT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_SI | OT_STRING | 4 | Consult MOSEK | + %| M | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_SI | OT_STRING | 1000 | Consult MOSEK | + %| M_FREQ | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_SI | OT_STRING | 1 | Consult MOSEK | + %| M_MINOR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_SI | OT_STRING | 1000 | Consult MOSEK | + %| M_NETWORK_FREQ | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_LOG_ST | OT_STRING | 0 | Consult MOSEK | + %| ORAGE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MAX_NU | OT_STRING | 6 | Consult MOSEK | + %| M_WARNINGS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_BR | OT_STRING | 0 | Consult MOSEK | + %| ANCH_DIR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_BR | OT_STRING | 1 | Consult MOSEK | + %| ANCH_PRIORITIES | | | manual. | + %| _USE | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_CO | OT_STRING | 0 | Consult MOSEK | + %| NSTRUCT_SOL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_CO | OT_STRING | 0 | Consult MOSEK | + %| NT_SOL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_CU | OT_STRING | 1 | Consult MOSEK | + %| T_CG | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_CU | OT_STRING | 1 | Consult MOSEK | + %| T_CMIR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_CU | OT_STRING | -1 | Consult MOSEK | + %| T_LEVEL_ROOT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_CU | OT_STRING | -1 | Consult MOSEK | + %| T_LEVEL_TREE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_FE | OT_STRING | -1 | Consult MOSEK | + %| ASPUMP_LEVEL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_HE | OT_STRING | -1 | Consult MOSEK | + %| URISTIC_LEVEL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_HO | OT_STRING | 1 | Consult MOSEK | + %| TSTART | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_KE | OT_STRING | 1 | Consult MOSEK | + %| EP_BASIS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_LO | OT_STRING | -1 | Consult MOSEK | + %| CAL_BRANCH_NUMB | | | manual. | + %| ER | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_MA | OT_STRING | -1 | Consult MOSEK | + %| X_NUM_BRANCHES | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_MA | OT_STRING | -1 | Consult MOSEK | + %| X_NUM_RELAXS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_MA | OT_STRING | -1 | Consult MOSEK | + %| X_NUM_SOLUTIONS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_MO | OT_STRING | 1 | Consult MOSEK | + %| DE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_MT | OT_STRING | 1 | Consult MOSEK | + %| _USER_CB | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_NO | OT_STRING | 0 | Consult MOSEK | + %| DE_OPTIMIZER | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_NO | OT_STRING | 0 | Consult MOSEK | + %| DE_SELECTION | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_OP | OT_STRING | 0 | Consult MOSEK | + %| TIMIZER_MODE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_PR | OT_STRING | 1 | Consult MOSEK | + %| ESOLVE_AGGREGAT | | | manual. | + %| E | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_PR | OT_STRING | 1 | Consult MOSEK | + %| ESOLVE_PROBING | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_PR | OT_STRING | 1 | Consult MOSEK | + %| ESOLVE_USE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_PR | OT_STRING | -1 | Consult MOSEK | + %| OBING_LEVEL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_RI | OT_STRING | -1 | Consult MOSEK | + %| NS_MAX_NODES | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_RO | OT_STRING | 0 | Consult MOSEK | + %| OT_OPTIMIZER | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_ST | OT_STRING | -1 | Consult MOSEK | + %| RONG_BRANCH | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MIO_US | OT_STRING | 0 | Consult MOSEK | + %| E_MULTITHREADED | | | manual. | + %| _OPTIMIZER | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_MT_SPI | OT_STRING | 0 | Consult MOSEK | + %| NCOUNT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_NONCON | OT_STRING | 100000 | Consult MOSEK | + %| VEX_MAX_ITERATI | | | manual. | + %| ONS | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_NUM_TH | OT_STRING | 0 | Consult MOSEK | + %| READS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_OPF_MA | OT_STRING | 5 | Consult MOSEK | + %| X_TERMS_PER_LIN | | | manual. | + %| E | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_OPF_WR | OT_STRING | 1 | Consult MOSEK | + %| ITE_HEADER | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_OPF_WR | OT_STRING | 1 | Consult MOSEK | + %| ITE_HINTS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_OPF_WR | OT_STRING | 0 | Consult MOSEK | + %| ITE_PARAMETERS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_OPF_WR | OT_STRING | 1 | Consult MOSEK | + %| ITE_PROBLEM | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_OPF_WR | OT_STRING | 0 | Consult MOSEK | + %| ITE_SOLUTIONS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_OPF_WR | OT_STRING | 1 | Consult MOSEK | + %| ITE_SOL_BAS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_OPF_WR | OT_STRING | 1 | Consult MOSEK | + %| ITE_SOL_ITG | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_OPF_WR | OT_STRING | 1 | Consult MOSEK | + %| ITE_SOL_ITR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_OPTIMI | OT_STRING | 0 | Consult MOSEK | + %| ZER | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PARAM_ | OT_STRING | 1 | Consult MOSEK | + %| READ_CASE_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PARAM_ | OT_STRING | 0 | Consult MOSEK | + %| READ_IGN_ERROR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PRESOL | OT_STRING | -1 | Consult MOSEK | + %| VE_ELIMINATOR_M | | | manual. | + %| AX_NUM_TRIES | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PRESOL | OT_STRING | 1 | Consult MOSEK | + %| VE_ELIMINATOR_U | | | manual. | + %| SE | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PRESOL | OT_STRING | 1 | Consult MOSEK | + %| VE_ELIM_FILL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PRESOL | OT_STRING | -1 | Consult MOSEK | + %| VE_LEVEL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PRESOL | OT_STRING | 100 | Consult MOSEK | + %| VE_LINDEP_ABS_W | | | manual. | + %| ORK_TRH | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PRESOL | OT_STRING | 100 | Consult MOSEK | + %| VE_LINDEP_REL_W | | | manual. | + %| ORK_TRH | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PRESOL | OT_STRING | 1 | Consult MOSEK | + %| VE_LINDEP_USE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PRESOL | OT_STRING | -1 | Consult MOSEK | + %| VE_MAX_NUM_REDU | | | manual. | + %| CTIONS | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PRESOL | OT_STRING | 2 | Consult MOSEK | + %| VE_USE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_PRIMAL | OT_STRING | 0 | Consult MOSEK | + %| _REPAIR_OPTIMIZ | | | manual. | + %| ER | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_QO_SEP | OT_STRING | 0 | Consult MOSEK | + %| ARABLE_REFORMUL | | | manual. | + %| ATION | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_A | OT_STRING | 100000 | Consult MOSEK | + %| NZ | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_C | OT_STRING | 10000 | Consult MOSEK | + %| ON | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_C | OT_STRING | 2500 | Consult MOSEK | + %| ONE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_D | OT_STRING | 1 | Consult MOSEK | + %| ATA_COMPRESSED | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_D | OT_STRING | 0 | Consult MOSEK | + %| ATA_FORMAT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_D | OT_STRING | 0 | Consult MOSEK | + %| EBUG | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_K | OT_STRING | 0 | Consult MOSEK | + %| EEP_FREE_CON | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_L | OT_STRING | 0 | Consult MOSEK | + %| P_DROP_NEW_VARS | | | manual. | + %| _IN_BOU | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_L | OT_STRING | 1 | Consult MOSEK | + %| P_QUOTED_NAMES | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_M | OT_STRING | 1 | Consult MOSEK | + %| PS_FORMAT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_M | OT_STRING | 1 | Consult MOSEK | + %| PS_KEEP_INT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_M | OT_STRING | 1 | Consult MOSEK | + %| PS_OBJ_SENSE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_M | OT_STRING | 1 | Consult MOSEK | + %| PS_RELAX | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_M | OT_STRING | 1024 | Consult MOSEK | + %| PS_WIDTH | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_Q | OT_STRING | 20000 | Consult MOSEK | + %| NZ | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_T | OT_STRING | 0 | Consult MOSEK | + %| ASK_IGNORE_PARA | | | manual. | + %| M | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_READ_V | OT_STRING | 10000 | Consult MOSEK | + %| AR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SENSIT | OT_STRING | 0 | Consult MOSEK | + %| IVITY_ALL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SENSIT | OT_STRING | 6 | Consult MOSEK | + %| IVITY_OPTIMIZER | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SENSIT | OT_STRING | 0 | Consult MOSEK | + %| IVITY_TYPE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_BA | OT_STRING | 1 | Consult MOSEK | + %| SIS_FACTOR_USE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_DE | OT_STRING | 1 | Consult MOSEK | + %| GEN | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_DU | OT_STRING | 90 | Consult MOSEK | + %| AL_CRASH | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_DU | OT_STRING | 0 | Consult MOSEK | + %| AL_PHASEONE_MET | | | manual. | + %| HOD | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_DU | OT_STRING | 50 | Consult MOSEK | + %| AL_RESTRICT_SEL | | | manual. | + %| ECTION | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_DU | OT_STRING | 0 | Consult MOSEK | + %| AL_SELECTION | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_EX | OT_STRING | 0 | Consult MOSEK | + %| PLOIT_DUPVEC | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_HO | OT_STRING | 1 | Consult MOSEK | + %| TSTART | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_HO | OT_STRING | 1 | Consult MOSEK | + %| TSTART_LU | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_IN | OT_STRING | 0 | Consult MOSEK | + %| TEGER | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_MA | OT_STRING | 10000000 | Consult MOSEK | + %| X_ITERATIONS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_MA | OT_STRING | 250 | Consult MOSEK | + %| X_NUM_SETBACKS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_NO | OT_STRING | 1 | Consult MOSEK | + %| N_SINGULAR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_PR | OT_STRING | 90 | Consult MOSEK | + %| IMAL_CRASH | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_PR | OT_STRING | 0 | Consult MOSEK | + %| IMAL_PHASEONE_M | | | manual. | + %| ETHOD | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_PR | OT_STRING | 50 | Consult MOSEK | + %| IMAL_RESTRICT_S | | | manual. | + %| ELECTION | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_PR | OT_STRING | 0 | Consult MOSEK | + %| IMAL_SELECTION | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_RE | OT_STRING | 0 | Consult MOSEK | + %| FACTOR_FREQ | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_RE | OT_STRING | 0 | Consult MOSEK | + %| FORMULATION | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_SA | OT_STRING | 0 | Consult MOSEK | + %| VE_LU | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_SC | OT_STRING | 0 | Consult MOSEK | + %| ALING | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_SC | OT_STRING | 0 | Consult MOSEK | + %| ALING_METHOD | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_SO | OT_STRING | 0 | Consult MOSEK | + %| LVE_FORM | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_ST | OT_STRING | 50 | Consult MOSEK | + %| ABILITY_PRIORIT | | | manual. | + %| Y | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SIM_SW | OT_STRING | 0 | Consult MOSEK | + %| ITCH_OPTIMIZER | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SOLUTI | OT_STRING | 0 | Consult MOSEK | + %| ON_CALLBACK | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SOL_FI | OT_STRING | 0 | Consult MOSEK | + %| LTER_KEEP_BASIC | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SOL_FI | OT_STRING | 0 | Consult MOSEK | + %| LTER_KEEP_RANGE | | | manual. | + %| D | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SOL_RE | OT_STRING | -1 | Consult MOSEK | + %| AD_NAME_WIDTH | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_SOL_RE | OT_STRING | 1024 | Consult MOSEK | + %| AD_WIDTH | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_TIMING | OT_STRING | 1 | Consult MOSEK | + %| _LEVEL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WARNIN | OT_STRING | 1 | Consult MOSEK | + %| G_LEVEL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| BAS_CONSTRAINTS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| BAS_HEAD | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| BAS_VARIABLES | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| DATA_COMPRESSED | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| DATA_FORMAT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| DATA_PARAM | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| FREE_CON | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| GENERIC_NAMES | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| GENERIC_NAMES_I | | | manual. | + %| O | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| IGNORE_INCOMPAT | | | manual. | + %| IBLE_CONIC_ITEM | | | | + %| S | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| IGNORE_INCOMPAT | | | manual. | + %| IBLE_ITEMS | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| IGNORE_INCOMPAT | | | manual. | + %| IBLE_NL_ITEMS | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| IGNORE_INCOMPAT | | | manual. | + %| IBLE_PSD_ITEMS | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| INT_CONSTRAINTS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| INT_HEAD | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| INT_VARIABLES | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 80 | Consult MOSEK | + %| LP_LINE_WIDTH | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| LP_QUOTED_NAMES | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| LP_STRICT_FORMA | | | manual. | + %| T | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 10 | Consult MOSEK | + %| LP_TERMS_PER_LI | | | manual. | + %| NE | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| MPS_INT | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 8 | Consult MOSEK | + %| PRECISION | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| SOL_BARVARIABLE | | | manual. | + %| S | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| SOL_CONSTRAINTS | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| SOL_HEAD | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| SOL_IGNORE_INVA | | | manual. | + %| LID_NAMES | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| SOL_VARIABLES | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 1 | Consult MOSEK | + %| TASK_INC_SOL | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_IPAR_WRITE_ | OT_STRING | 0 | Consult MOSEK | + %| XML_MODE | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_BAS_SO | OT_STRING | | Consult MOSEK | + %| L_FILE_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_DATA_F | OT_STRING | | Consult MOSEK | + %| ILE_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_DEBUG_ | OT_STRING | | Consult MOSEK | + %| FILE_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_FEASRE | OT_STRING | MSK- | Consult MOSEK | + %| PAIR_NAME_PREFI | | | manual. | + %| X | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_FEASRE | OT_STRING | - | Consult MOSEK | + %| PAIR_NAME_SEPAR | | | manual. | + %| ATOR | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_FEASRE | OT_STRING | WSUMVIOL | Consult MOSEK | + %| PAIR_NAME_WSUMV | | | manual. | + %| IOL | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_INT_SO | OT_STRING | | Consult MOSEK | + %| L_FILE_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_ITR_SO | OT_STRING | | Consult MOSEK | + %| L_FILE_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_MIO_DE | OT_STRING | | Consult MOSEK | + %| BUG_STRING | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_PARAM_ | OT_STRING | %% | Consult MOSEK | + %| COMMENT_SIGN | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_PARAM_ | OT_STRING | | Consult MOSEK | + %| READ_FILE_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_PARAM_ | OT_STRING | | Consult MOSEK | + %| WRITE_FILE_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_READ_M | OT_STRING | | Consult MOSEK | + %| PS_BOU_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_READ_M | OT_STRING | | Consult MOSEK | + %| PS_OBJ_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_READ_M | OT_STRING | | Consult MOSEK | + %| PS_RAN_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_READ_M | OT_STRING | | Consult MOSEK | + %| PS_RHS_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_SENSIT | OT_STRING | | Consult MOSEK | + %| IVITY_FILE_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_SENSIT | OT_STRING | | Consult MOSEK | + %| IVITY_RES_FILE_ | | | manual. | + %| NAME | | | | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_SOL_FI | OT_STRING | | Consult MOSEK | + %| LTER_XC_LOW | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_SOL_FI | OT_STRING | | Consult MOSEK | + %| LTER_XC_UPR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_SOL_FI | OT_STRING | | Consult MOSEK | + %| LTER_XX_LOW | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_SOL_FI | OT_STRING | | Consult MOSEK | + %| LTER_XX_UPR | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_STAT_F | OT_STRING | | Consult MOSEK | + %| ILE_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_STAT_K | OT_STRING | | Consult MOSEK | + %| EY | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_STAT_N | OT_STRING | | Consult MOSEK | + %| AME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| MSK_SPAR_WRITE_ | OT_STRING | XMSKGEN | Consult MOSEK | + %| LP_GEN_VAR_NAME | | | manual. | + %+-----------------+-----------------+-----------------+-----------------+ + %| eps_unstable | OT_REAL | 0.000 | A margin for | + %| | | | unstability | + %| | | | detection | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available stats + % + %+--------------------+ + %| Id | + %+====================+ + %| problem_status | + %+--------------------+ + %| solution_status | + %+--------------------+ + %| termination_reason | + %+--------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %sdp + %--- + % + % + % + %Solve SOCPs using an SdpSolver + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %>List of available stats + % + %+------------------+ + %| Id | + %+==================+ + %| sdp_solver_stats | + %+------------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joris Gillis + %Diagrams + %-------- + % + % + % + %C++ includes: socp_solver.hpp + %Usage: SocpSolver () + % + methods + function self = SocpSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1035, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1036, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1031, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1032, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1033, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1034, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpDMatrix.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpDMatrix.m new file mode 100755 index 0000000..4d3cf62 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpDMatrix.m @@ -0,0 +1,46 @@ +classdef SpDMatrix < casadi.SparsityInterfaceCommon + %Sparsity interface class. + % + %This is a common base class for GenericMatrix (i.e. MX and Matrix<>) and + %Sparsity, introducing a uniform syntax and implementing common functionality + %using the curiously recurring template pattern (CRTP) idiom. Joel Andersson + % + %C++ includes: sparsity_interface.hpp + %Usage: SpDMatrix () + % + methods + function self = SpDMatrix(varargin) + self@casadi.SparsityInterfaceCommon(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(266, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(267, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpIMatrix.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpIMatrix.m new file mode 100755 index 0000000..687cca7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpIMatrix.m @@ -0,0 +1,46 @@ +classdef SpIMatrix < casadi.SparsityInterfaceCommon + %Sparsity interface class. + % + %This is a common base class for GenericMatrix (i.e. MX and Matrix<>) and + %Sparsity, introducing a uniform syntax and implementing common functionality + %using the curiously recurring template pattern (CRTP) idiom. Joel Andersson + % + %C++ includes: sparsity_interface.hpp + %Usage: SpIMatrix () + % + methods + function self = SpIMatrix(varargin) + self@casadi.SparsityInterfaceCommon(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(264, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(265, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpMX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpMX.m new file mode 100755 index 0000000..339664d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpMX.m @@ -0,0 +1,46 @@ +classdef SpMX < casadi.SparsityInterfaceCommon + %Sparsity interface class. + % + %This is a common base class for GenericMatrix (i.e. MX and Matrix<>) and + %Sparsity, introducing a uniform syntax and implementing common functionality + %using the curiously recurring template pattern (CRTP) idiom. Joel Andersson + % + %C++ includes: sparsity_interface.hpp + %Usage: SpMX () + % + methods + function self = SpMX(varargin) + self@casadi.SparsityInterfaceCommon(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(270, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(271, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpSX.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpSX.m new file mode 100755 index 0000000..a88e634 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpSX.m @@ -0,0 +1,46 @@ +classdef SpSX < casadi.SparsityInterfaceCommon + %Sparsity interface class. + % + %This is a common base class for GenericMatrix (i.e. MX and Matrix<>) and + %Sparsity, introducing a uniform syntax and implementing common functionality + %using the curiously recurring template pattern (CRTP) idiom. Joel Andersson + % + %C++ includes: sparsity_interface.hpp + %Usage: SpSX () + % + methods + function self = SpSX(varargin) + self@casadi.SparsityInterfaceCommon(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(268, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(269, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpSparsity.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpSparsity.m new file mode 100755 index 0000000..3fde0df --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SpSparsity.m @@ -0,0 +1,46 @@ +classdef SpSparsity < casadi.SparsityInterfaceCommon + %Sparsity interface class. + % + %This is a common base class for GenericMatrix (i.e. MX and Matrix<>) and + %Sparsity, introducing a uniform syntax and implementing common functionality + %using the curiously recurring template pattern (CRTP) idiom. Joel Andersson + % + %C++ includes: sparsity_interface.hpp + %Usage: SpSparsity () + % + methods + function self = SpSparsity(varargin) + self@casadi.SparsityInterfaceCommon(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(153, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(154, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Sparsity.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Sparsity.m new file mode 100755 index 0000000..87a44da --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Sparsity.m @@ -0,0 +1,2392 @@ +classdef Sparsity < casadi.SharedObject & casadi.SpSparsity + %General sparsity class. + % + %The storage format is a compressed column storage (CCS) format. In this + %format, the structural non-zero elements are stored in column-major order, + %starting from the upper left corner of the matrix and ending in the lower + %right corner. + % + %In addition to the dimension ( size1(), size2()), (i.e. the number of rows + %and the number of columns respectively), there are also two vectors of + %integers: + % + %"colind" [length size2()+1], which contains the index to the first non- + %zero element on or after the corresponding column. All the non-zero elements + %of a particular i are thus the elements with index el that fulfills: + %colind[i] <= el < colind[i+1]. + % + %"row" [same length as the number of non-zero elements, nnz()] The rows for + %each of the structural non-zeros. + % + %Note that with this format, it is cheap to loop over all the non-zero + %elements of a particular column, at constant time per element, but expensive + %to jump to access a location (i, j). + % + %If the matrix is dense, i.e. length(row) == size1()*size2(), the format + %reduces to standard dense column major format, which allows access to an + %arbitrary element in constant time. + % + %Since the object is reference counted (it inherits from SharedObject), + %several matrices are allowed to share the same sparsity pattern. + % + %The implementations of some methods of this class has been taken from the + %CSparse package and modified to use C++ standard library and CasADi data + %structures. + % + %See: Matrix + % + %Joel Andersson + % + %C++ includes: sparsity.hpp + %Usage: Sparsity () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = reCache(self,varargin) + %[INTERNAL] Check if there + %is an identical copy of the sparsity pattern in the cache, and if so, make a + %shallow copy of that one. + % + % + %Usage: reCache () + % + + try + + [varargout{1:nargout}] = casadiMEX(166, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sanityCheck(self,varargin) + %Check if the dimensions and colind, row vectors are compatible. + % + %Parameters: + %----------- + % + %complete: set to true to also check elementwise throws an error as possible + %result + % + % + %Usage: sanityCheck (complete = false) + % + %complete is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:nargout}] = casadiMEX(168, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getDiag(self,varargin) + %Get the diagonal of the matrix/create a diagonal matrix (mapping will + %contain the nonzero mapping) When the input is square, the diagonal elements + %are returned. If the input is vector-like, a diagonal matrix is constructed + %with it. + % + % + %Usage: retval = getDiag () + % + %retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(169, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = compress(self,varargin) + %Compress a sparsity pattern. + % + % + %Usage: retval = compress () + % + %retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(170, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isEqual(self,varargin) + %Usage: retval = isEqual (nrow, ncol, colind, row) + % + %nrow is of type int. ncol is of type int. colind is of type std::vector< int,std::allocator< int > > const &. row is of type std::vector< int,std::allocator< int > > const &. nrow is of type int. ncol is of type int. colind is of type std::vector< int,std::allocator< int > > const &. row is of type std::vector< int,std::allocator< int > > const &. retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(171, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eq(self,varargin) + %Usage: retval = eq (y) + % + %y is of type Sparsity. y is of type Sparsity. retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(172, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = ne(self,varargin) + %Usage: retval = ne (y) + % + %y is of type Sparsity. y is of type Sparsity. retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(173, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size1(self,varargin) + %Get the number of rows. + % + % + %Usage: retval = size1 () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(174, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size2(self,varargin) + %Get the number of columns. + % + % + %Usage: retval = size2 () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(175, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = numel(self,varargin) + %The total number of elements, including structural zeros, i.e. + %size2()*size1() + % + %See: nnz() + % + % + %Usage: retval = numel () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(176, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isempty(self,varargin) + %Check if the sparsity is empty. + % + %A sparsity is considered empty if one of the dimensions is zero (or + %optionally both dimensions) + % + % + %Usage: retval = isempty (both = false) + % + %both is of type bool. both is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(177, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = nnz(self,varargin) + %Get the number of (structural) non-zeros. + % + %See: numel() + % + % + %Usage: retval = nnz () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(178, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeU(self,varargin) + %Number of non-zeros in the upper triangular half, i.e. the number of + %elements (i, j) with j>=i. + % + % + %Usage: retval = sizeU () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(179, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeL(self,varargin) + %Number of non-zeros in the lower triangular half, i.e. the number of + %elements (i, j) with j<=i. + % + % + %Usage: retval = sizeL () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(180, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sizeD(self,varargin) + %Number of non-zeros on the diagonal, i.e. the number of elements (i, j) with + %j==i. + % + % + %Usage: retval = sizeD () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(181, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = bandwidthU(self,varargin) + %Upper half-bandwidth. + % + % + %Usage: retval = bandwidthU () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(182, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = bandwidthL(self,varargin) + %Lower half-bandwidth. + % + % + %Usage: retval = bandwidthL () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(183, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = size(self,varargin) + %Get the shape. + % + % + %Usage: retval = size () + % + %retval is of type std::pair< int,int >. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + out = casadiMEX(184, self, varargin{:}); + if nargout>1 + for i=1:length(out) + varargout{i} = out(i); + end + else + varargout{1}=out; + end + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = colind(self,varargin) + %Get a reference to the colindex of column cc (see class description) + % + % + %Usage: retval = colind (cc) + % + %cc is of type int. cc is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(185, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = row(self,varargin) + %Get the row of a non-zero element. + % + % + %Usage: retval = row (el) + % + %el is of type int. el is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(186, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getCol(self,varargin) + %Get the column for each non-zero entry Together with the row-vector, this + %vector gives the sparsity of the matrix in sparse triplet format, i.e. the + %column and row for each non-zero elements. + % + % + %Usage: retval = getCol () + % + %retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(187, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = resize(self,varargin) + %Resize. + % + % + %Usage: resize (nrow, ncol) + % + %nrow is of type int. ncol is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(188, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = addNZ(self,varargin) + %Get the index of a non-zero element Add the element if it does not exist and + %copy object if it's not unique. + % + % + %Usage: retval = addNZ (rr, cc) + % + %rr is of type int. cc is of type int. rr is of type int. cc is of type int. retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(189, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hasNZ(self,varargin) + %Returns true if the pattern has a non-zero at location rr, cc. + % + % + %Usage: retval = hasNZ (rr, cc) + % + %rr is of type int. cc is of type int. rr is of type int. cc is of type int. retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(190, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getNZ(self,varargin) + %> int Sparsity.getNZ(int rr, int cc) const + %------------------------------------------------------------------------ + % + %Get the index of an existing non-zero element return -1 if the element does + %not exist. + % + %> [int] Sparsity.getNZ([int ] rr, [int ] cc) const + %------------------------------------------------------------------------ + % + %Get a set of non-zero element return -1 if the element does not exist. + % + %> void Sparsity.getNZ([int ] INOUT) const + %------------------------------------------------------------------------ + % + %Get the nonzero index for a set of elements The index vector is used both + %for input and outputs and must be sorted by increasing nonzero index, i.e. + %column-wise. Elements not found in the sparsity pattern are set to -1. + % + % + %Usage: getNZ (INOUT) + % + %INOUT is of type std::vector< int,std::allocator< int > > &. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(191, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getLowerNZ(self,varargin) + %Get nonzeros in lower triangular part. + % + % + %Usage: retval = getLowerNZ () + % + %retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(192, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getUpperNZ(self,varargin) + %Get nonzeros in upper triangular part. + % + % + %Usage: retval = getUpperNZ () + % + %retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(193, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getCCS(self,varargin) + %Get the sparsity in compressed column storage (CCS) format. + % + % + %Usage: getCCS () + % + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(194, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getCRS(self,varargin) + %Get the sparsity in compressed row storage (CRS) format. + % + % + %Usage: getCRS () + % + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(195, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = getTriplet(self,varargin) + %Get the sparsity in sparse triplet format. + % + % + %Usage: getTriplet () + % + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(196, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sub(self,varargin) + %> Sparsity Sparsity.sub([int ] rr, [int ] cc,[int ] output_mapping, bool ind1=false) const + %------------------------------------------------------------------------ + % + %Get a submatrix. + % + %Returns the sparsity of the submatrix, with a mapping such that submatrix[k] + %= originalmatrix[mapping[k]] + % + %> Sparsity Sparsity.sub([int ] rr, Sparsity sp,[int ] output_mapping, bool ind1=false) const + %------------------------------------------------------------------------ + % + %Get a set of elements. + % + %Returns the sparsity of the corresponding elements, with a mapping such that + %submatrix[k] = originalmatrix[mapping[k]] + % + % + %Usage: retval = sub (rr, sp, ind1 = false) + % + %rr is of type std::vector< int,std::allocator< int > > const &. sp is of type Sparsity. ind1 is of type bool. rr is of type std::vector< int,std::allocator< int > > const &. sp is of type Sparsity. ind1 is of type bool. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(197, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = T(self,varargin) + %Transpose the matrix. + % + % + %Usage: retval = T () + % + %retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(198, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = transpose(self,varargin) + %Transpose the matrix and get the reordering of the non-zero entries. + % + %Parameters: + %----------- + % + %mapping: the non-zeros of the original matrix for each non-zero of the new + %matrix + % + % + %Usage: retval = transpose (mapping, invert_mapping = false) + % + %mapping is of type std::vector< int,std::allocator< int > > &. invert_mapping is of type bool. mapping is of type std::vector< int,std::allocator< int > > &. invert_mapping is of type bool. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(199, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isTranspose(self,varargin) + %Check if the sparsity is the transpose of another. + % + % + %Usage: retval = isTranspose (y) + % + %y is of type Sparsity. y is of type Sparsity. retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(200, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isReshape(self,varargin) + %Check if the sparsity is a reshape of another. + % + % + %Usage: retval = isReshape (y) + % + %y is of type Sparsity. y is of type Sparsity. retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(201, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = patternCombine(self,varargin) + %Combine two sparsity patterns Returns the new sparsity pattern as well as a + %mapping with the same length as the number of non-zero elements The mapping + %matrix contains the arguments for each nonzero, the first bit indicates if + %the first argument is nonzero, the second bit indicates if the second + %argument is nonzero (note that none of, one of or both of the arguments can + %be nonzero) + % + % + %Usage: retval = patternCombine (y, f0x_is_zero, fx0_is_zero) + % + %y is of type Sparsity. f0x_is_zero is of type bool. fx0_is_zero is of type bool. y is of type Sparsity. f0x_is_zero is of type bool. fx0_is_zero is of type bool. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(202, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = patternUnion(self,varargin) + %Union of two sparsity patterns. + % + % + %Usage: retval = patternUnion (y) + % + %y is of type Sparsity. y is of type Sparsity. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(203, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = plus(self,varargin) + %Usage: retval = plus (b) + % + %b is of type Sparsity. b is of type Sparsity. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(204, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = patternIntersection(self,varargin) + %Intersection of two sparsity patterns Returns the new sparsity pattern as + %well as a mapping with the same length as the number of non-zero elements + %The value is 1 if the non-zero comes from the first (i.e. this) object, 2 if + %it is from the second and 3 (i.e. 1 | 2) if from both. + % + % + %Usage: retval = patternIntersection (y) + % + %y is of type Sparsity. y is of type Sparsity. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(205, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = mtimes(self,varargin) + %Usage: retval = mtimes (b) + % + %b is of type Sparsity. b is of type Sparsity. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(206, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = patternProduct(self,varargin) + %Sparsity pattern for a matrix-matrix product Returns the sparsity pattern + %resulting from multiplying the pattern with another pattern y from the + %right. + % + % + %Usage: retval = patternProduct (y) + % + %y is of type Sparsity. y is of type Sparsity. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(207, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = patternInverse(self,varargin) + %Take the inverse of a sparsity pattern; flip zeros and non-zeros. + % + % + %Usage: retval = patternInverse () + % + %retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(208, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = enlarge(self,varargin) + %Enlarge matrix Make the matrix larger by inserting empty rows and columns, + %keeping the existing non-zeros. + % + %For the matrices A to B A(m, n) length(jj)=m , length(ii)=n B(nrow, ncol) + % + %A=enlarge(m, n, ii, jj) makes sure that + % + %B[jj, ii] == A + % + % + %Usage: enlarge (nrow, ncol, rr, cc, ind1 = false) + % + %nrow is of type int. ncol is of type int. rr is of type std::vector< int,std::allocator< int > > const &. cc is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(209, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = enlargeRows(self,varargin) + %Enlarge the matrix along the first dimension (i.e. insert rows) + % + % + %Usage: enlargeRows (nrow, rr, ind1 = false) + % + %nrow is of type int. rr is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(210, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = enlargeColumns(self,varargin) + %Enlarge the matrix along the second dimension (i.e. insert columns) + % + % + %Usage: enlargeColumns (ncol, cc, ind1 = false) + % + %ncol is of type int. cc is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. + + try + + [varargout{1:nargout}] = casadiMEX(211, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = makeDense(self,varargin) + %Make a patten dense. + % + % + %Usage: retval = makeDense (mapping) + % + %mapping is of type std::vector< int,std::allocator< int > > &. mapping is of type std::vector< int,std::allocator< int > > &. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(212, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = erase(self,varargin) + %> [int] Sparsity.erase([int ] rr, [int ] cc, bool ind1=false) + %------------------------------------------------------------------------ + % + %Erase rows and/or columns of a matrix. + % + %> [int] Sparsity.erase([int ] rr, bool ind1=false) + %------------------------------------------------------------------------ + % + %Erase elements of a matrix. + % + % + %Usage: retval = erase (rr, ind1 = false) + % + %rr is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. rr is of type std::vector< int,std::allocator< int > > const &. ind1 is of type bool. retval is of type std::vector< int,std::allocator< int > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(213, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = append(self,varargin) + %Append another sparsity patten vertically (NOTE: only efficient if vector) + % + % + %Usage: append (sp) + % + %sp is of type Sparsity. + + try + + [varargout{1:nargout}] = casadiMEX(214, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = appendColumns(self,varargin) + %Append another sparsity patten horizontally. + % + % + %Usage: appendColumns (sp) + % + %sp is of type Sparsity. + + try + + [varargout{1:nargout}] = casadiMEX(215, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = reserve(self,varargin) + %[DEPRECATED]: Reserve space + % + % + %Usage: reserve (nnz, ncol) + % + %nnz is of type int. ncol is of type int. + + try + + [varargout{1:nargout}] = casadiMEX(216, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isscalar(self,varargin) + %Is scalar? + % + % + %Usage: retval = isscalar (scalar_and_dense = false) + % + %scalar_and_dense is of type bool. scalar_and_dense is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(217, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isdense(self,varargin) + %Is dense? + % + % + %Usage: retval = isdense () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(218, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isrow(self,varargin) + %Check if the pattern is a row vector (i.e. size1()==1) + % + % + %Usage: retval = isrow () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(219, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = iscolumn(self,varargin) + %Check if the pattern is a column vector (i.e. size2()==1) + % + % + %Usage: retval = iscolumn () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(220, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isvector(self,varargin) + %Check if the pattern is a row or column vector. + % + % + %Usage: retval = isvector () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(221, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = isdiag(self,varargin) + %Is diagonal? + % + % + %Usage: retval = isdiag () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(222, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = issquare(self,varargin) + %Is square? + % + % + %Usage: retval = issquare () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(223, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = issymmetric(self,varargin) + %Is symmetric? + % + % + %Usage: retval = issymmetric () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(224, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = istriu(self,varargin) + %Is upper triangular? + % + % + %Usage: retval = istriu () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(225, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = istril(self,varargin) + %Is lower triangular? + % + % + %Usage: retval = istril () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(226, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = issingular(self,varargin) + %Check whether the sparsity-pattern indicates structural singularity. + % + % + %Usage: retval = issingular () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(227, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = rowsSequential(self,varargin) + %Do the rows appear sequentially on each column. + % + %Parameters: + %----------- + % + %strictly: if true, then do not allow multiple entries + % + % + %Usage: retval = rowsSequential (strictly = true) + % + %strictly is of type bool. strictly is of type bool. retval is of type bool. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(228, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = removeDuplicates(self,varargin) + %Remove duplicate entries. + % + %The same indices will be removed from the mapping vector, which must have + %the same length as the number of nonzeros + % + % + %Usage: removeDuplicates (mapping) + % + %mapping is of type std::vector< int,std::allocator< int > > &. + + try + + [varargout{1:nargout}] = casadiMEX(229, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = eliminationTree(self,varargin) + %Calculate the elimination tree See Direct Methods for Sparse Linear Systems + %by Davis (2006). If the parameter ata is false, the algorithm is equivalent + %to Matlab's etree(A), except that the indices are zero- based. If ata is + %true, the algorithm is equivalent to Matlab's etree(A, 'row'). + % + % + %Usage: retval = eliminationTree (ata = false) + % + %ata is of type bool. ata is of type bool. retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(230, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = depthFirstSearch(self,varargin) + %Depth-first search on the adjacency graph of the sparsity See Direct Methods + %for Sparse Linear Systems by Davis (2006). + % + % + %Usage: retval = depthFirstSearch (j, top, xi, pstack, pinv, marked) + % + %j is of type int. top is of type int. xi is of type std::vector< int,std::allocator< int > > &. pstack is of type std::vector< int,std::allocator< int > > &. pinv is of type std::vector< int,std::allocator< int > > const &. marked is of type std::vector< bool,std::allocator< bool > > &. j is of type int. top is of type int. xi is of type std::vector< int,std::allocator< int > > &. pstack is of type std::vector< int,std::allocator< int > > &. pinv is of type std::vector< int,std::allocator< int > > const &. marked is of type std::vector< bool,std::allocator< bool > > &. retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(231, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = stronglyConnectedComponents(self,varargin) + %Find the strongly connected components of the bigraph defined by the + %sparsity pattern of a square matrix. + % + %See Direct Methods for Sparse Linear Systems by Davis (2006). Returns: + %Number of components + % + %Offset for each components (length: 1 + number of components) + % + %Indices for each components, component i has indices index[offset[i]], ..., + %index[offset[i+1]] + % + %In the case that the matrix is symmetric, the result has a particular + %interpretation: Given a symmetric matrix A and n = + %A.stronglyConnectedComponents(p, r) + % + %=> A[p, p] will appear block-diagonal with n blocks and with the indices of + %the block boundaries to be found in r. + % + % + %Usage: retval = stronglyConnectedComponents () + % + %retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(232, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = dulmageMendelsohn(self,varargin) + %Compute the Dulmage-Mendelsohn decomposition See Direct Methods for Sparse + %Linear Systems by Davis (2006). + % + %Dulmage-Mendelsohn will try to bring your matrix into lower block- + %triangular (LBT) form. It will not care about the distance of off- diagonal + %elements to the diagonal: there is no guarantee you will get a block- + %diagonal matrix if you supply a randomly permuted block- diagonal matrix. + % + %If your matrix is symmetrical, this method is of limited use; permutation + %can make it non-symmetric. + % + %See: stronglyConnectedComponents + % + % + %Usage: retval = dulmageMendelsohn (seed = 0) + % + %seed is of type int. seed is of type int. retval is of type int. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(233, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = find(self,varargin) + %Get the location of all non-zero elements as they would appear in a Dense + %matrix A : DenseMatrix 4 x 3 B : SparseMatrix 4 x 3 , 5 structural non- + %zeros. + % + %k = A.find() A[k] will contain the elements of A that are non-zero in B + % + % + %Usage: retval = find (ind1 = true) + % + %ind1 is of type bool. ind1 is of type bool. retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(234, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = unidirectionalColoring(self,varargin) + %Perform a unidirectional coloring: A greedy distance-2 coloring algorithm + %(Algorithm 3.1 in A. H. GEBREMEDHIN, F. MANNE, A. POTHEN) + % + % + %Usage: retval = unidirectionalColoring (AT = casadi::Sparsity(), cutoff = std::numeric_limits< int >::max()) + % + %AT is of type Sparsity. cutoff is of type int. AT is of type Sparsity. cutoff is of type int. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(235, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = starColoring(self,varargin) + %Perform a star coloring of a symmetric matrix: A greedy distance-2 coloring + %algorithm Algorithm 4.1 in What Color Is Your Jacobian? Graph Coloring for + %Computing Derivatives A. H. GEBREMEDHIN, F. MANNE, A. POTHEN SIAM Rev., + %47(4), 629705 (2006) + % + %Ordering options: None (0), largest first (1) + % + % + %Usage: retval = starColoring (ordering = 1, cutoff = std::numeric_limits< int >::max()) + % + %ordering is of type int. cutoff is of type int. ordering is of type int. cutoff is of type int. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(236, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = starColoring2(self,varargin) + %Perform a star coloring of a symmetric matrix: A new greedy distance-2 + %coloring algorithm Algorithm 4.1 in NEW ACYCLIC AND STAR COLORING ALGORITHMS + %WITH APPLICATION TO COMPUTING HESSIANS A. H. GEBREMEDHIN, A. TARAFDAR, F. + %MANNE, A. POTHEN SIAM J. SCI. COMPUT. Vol. 29, No. 3, pp. 10421072 (2007) + % + %Ordering options: None (0), largest first (1) + % + % + %Usage: retval = starColoring2 (ordering = 1, cutoff = std::numeric_limits< int >::max()) + % + %ordering is of type int. cutoff is of type int. ordering is of type int. cutoff is of type int. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(237, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = largestFirstOrdering(self,varargin) + %Order the cols by decreasing degree. + % + % + %Usage: retval = largestFirstOrdering () + % + %retval is of type std::vector< int,std::allocator< int > >. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(238, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = pmult(self,varargin) + %Permute rows and/or columns Multiply the sparsity with a permutation matrix + %from the left and/or from the right P * A * trans(P), A * trans(P) or A * + %trans(P) with P defined by an index vector containing the row for each col. + %As an alternative, P can be transposed (inverted). + % + % + %Usage: retval = pmult (p, permute_rows = true, permute_cols = true, invert_permutation = false) + % + %p is of type std::vector< int,std::allocator< int > > const &. permute_rows is of type bool. permute_cols is of type bool. invert_permutation is of type bool. p is of type std::vector< int,std::allocator< int > > const &. permute_rows is of type bool. permute_cols is of type bool. invert_permutation is of type bool. retval is of type Sparsity. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(239, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = dimString(self,varargin) + %Get the dimension as a string. + % + % + %Usage: retval = dimString () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(240, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = spy(self,varargin) + %Print a textual representation of sparsity. + % + % + %Usage: spy () + % + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:nargout}] = casadiMEX(241, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = spyMatlab(self,varargin) + %Generate a script for Matlab or Octave which visualizes the sparsity using + %the spy command. + % + % + %Usage: spyMatlab (mfile) + % + %mfile is of type std::string const &. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:nargout}] = casadiMEX(242, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = printCompact(self,varargin) + %Print a compact description of the sparsity pattern. + % + % + %Usage: printCompact () + % + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:nargout}] = casadiMEX(243, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = hash(self,varargin) + %Usage: retval = hash () + % + %retval is of type std::size_t. + + try + + if ~isa(self,'casadi.Sparsity') + self = casadi.Sparsity(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(244, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = Sparsity(varargin) + self@casadi.SharedObject(SwigRef.Null); + self@casadi.SpSparsity(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(246, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(247, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = scalar(varargin) + %Create a scalar sparsity pattern. + % + % + %Usage: retval = scalar (dense_scalar = true) + % + %dense_scalar is of type bool. dense_scalar is of type bool. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(155, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = dense(varargin) + %Create a dense rectangular sparsity pattern. + % + % + %Usage: retval = dense (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(156, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = unit(varargin) + %Create the sparsity pattern for a unit vector of length n and a nonzero on + %position el. + % + % + %Usage: retval = unit (n, el) + % + %n is of type int. el is of type int. n is of type int. el is of type int. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(157, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = upper(varargin) + %Usage: retval = upper (n) + % + %n is of type int. n is of type int. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(158, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = lower(varargin) + %Usage: retval = lower (n) + % + %n is of type int. n is of type int. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(159, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = diag(varargin) + %Create diagonal sparsity pattern. + % + % + %Usage: retval = diag (rc) + % + %rc is of type std::pair< int,int > const &. rc is of type std::pair< int,int > const &. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(160, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = band(varargin) + %Usage: retval = band (n, p) + % + %n is of type int. p is of type int. n is of type int. p is of type int. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(161, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = banded(varargin) + %Usage: retval = banded (n, p) + % + %n is of type int. p is of type int. n is of type int. p is of type int. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(162, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = rowcol(varargin) + %Usage: retval = rowcol (row, col, nrow, ncol) + % + %row is of type std::vector< int,std::allocator< int > > const &. col is of type std::vector< int,std::allocator< int > > const &. nrow is of type int. ncol is of type int. row is of type std::vector< int,std::allocator< int > > const &. col is of type std::vector< int,std::allocator< int > > const &. nrow is of type int. ncol is of type int. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(163, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = triplet(varargin) + %Usage: retval = triplet (nrow, ncol, row, col) + % + %nrow is of type int. ncol is of type int. row is of type std::vector< int,std::allocator< int > > const &. col is of type std::vector< int,std::allocator< int > > const &. nrow is of type int. ncol is of type int. row is of type std::vector< int,std::allocator< int > > const &. col is of type std::vector< int,std::allocator< int > > const &. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(164, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = compressed(varargin) + %Create from a single vector containing the pattern in compressed column + %storage format: The format: The first two entries are the number of rows + %(nrow) and columns (ncol) The next ncol+1 entries are the column offsets + %(colind). Note that the last element, colind[ncol], gives the number of + %nonzeros The last colind[ncol] entries are the row indices + % + % + %Usage: retval = compressed (v) + % + %v is of type std::vector< int,std::allocator< int > > const &. v is of type std::vector< int,std::allocator< int > > const &. retval is of type Sparsity. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(165, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = clearCache(varargin) + %Usage: clearCache () + % + + try + + [varargout{1:nargout}] = casadiMEX(167, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(245, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SparsityInterfaceCommon.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SparsityInterfaceCommon.m new file mode 100755 index 0000000..a5919aa --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/SparsityInterfaceCommon.m @@ -0,0 +1,804 @@ +classdef SparsityInterfaceCommon < SwigRef + %Usage: SparsityInterfaceCommon () + % + methods + function this = swig_this(self) + this = casadiMEX(3, self); + end + function varargout = horzcat(varargin) + %> MatType horzcat([MatType ] v) + %------------------------------------------------------------------------ + % + %Concatenate a list of matrices horizontally Alternative terminology: + %horizontal stack, hstack, horizontal append, [a b]. + % + %horzcat(horzsplit(x, ...)) = x + % + %> MatType horzcat(MatType x, MatType y) + %------------------------------------------------------------------------ + % + %Concatenate horizontally, two matrices. + % + %> MatType horzcat(MatType x, MatType y, MatType z) + %------------------------------------------------------------------------ + % + %Concatenate horizontally, three matrices. + % + %> MatType horzcat(MatType x, MatType y, MatType z, MatType w) + %------------------------------------------------------------------------ + % + %Concatenate horizontally, four matrices. + % + % + %Usage: retval = horzcat (v) + % + %v is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. v is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(128, varargin); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = vertcat(varargin) + %> MatType vertcat([MatType ] v) + %------------------------------------------------------------------------ + % + %Concatenate a list of matrices vertically Alternative terminology: vertical + %stack, vstack, vertical append, [a;b]. + % + %vertcat(vertsplit(x, ...)) = x + % + %> MatType vertcat(MatType x, MatType y) + %------------------------------------------------------------------------ + % + %Concatenate vertically, two matrices. + % + %> MatType vertcat(MatType x, MatType y, MatType z) + %------------------------------------------------------------------------ + % + %Concatenate vertically, three matrices. + % + %> MatType vertcat(MatType x, MatType y, MatType z, MatType w) + %------------------------------------------------------------------------ + % + %Concatenate vertically, four matrices. + % + % + %Usage: retval = vertcat (v) + % + %v is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. v is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(129, varargin); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = horzsplit(varargin) + %> [MatType ] horzsplit(MatType v, [int ] offset) + %------------------------------------------------------------------------ + % + %split horizontally, retaining groups of columns + % + %Parameters: + %----------- + % + %offset: List of all start columns for each group the last column group will + %run to the end. + % + %horzcat(horzsplit(x, ...)) = x + % + %> [MatType ] horzsplit(MatType v, int incr=1) + %------------------------------------------------------------------------ + % + %split horizontally, retaining fixed-sized groups of columns + % + %Parameters: + %----------- + % + %incr: Size of each group of columns + % + %horzcat(horzsplit(x, ...)) = x + % + % + %Usage: retval = horzsplit (v, incr = 1) + % + %v is of type SX. incr is of type int. v is of type SX. incr is of type int. retval is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(130, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = offset(varargin) + %Helper function, get offsets corresponding to a vector of matrices. + % + % + %Usage: retval = offset (v, vert = true) + % + %v is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. vert is of type bool. v is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. vert is of type bool. retval is of type std::vector< int,std::allocator< int > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(131, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = vertsplit(varargin) + %> [MatType ] vertsplit(MatType v, [int ] offset) + %------------------------------------------------------------------------ + % + %split vertically, retaining groups of rows + % + %* + % + %Parameters: + %----------- + % + %output_offset: List of all start rows for each group the last row group + %will run to the end. + % + %vertcat(vertsplit(x, ...)) = x + % + %> [MatType ] vertsplit(MatType v, int incr=1) + %------------------------------------------------------------------------ + % + %split vertically, retaining fixed-sized groups of rows + % + %Parameters: + %----------- + % + %incr: Size of each group of rows + % + %vertcat(vertsplit(x, ...)) = x + % + % + % + %:: + % + % >>> print vertsplit(SX.sym("a",4)) + % [SX(a_0), SX(a_1), SX(a_2), SX(a_3)] + % + % + % + % + % + % + %:: + % + % >>> print vertsplit(SX.sym("a",4),2) + % [SX([a_0, a_1]), SX([a_2, a_3])] + % + % + % + % + %If the number of rows is not a multiple of incr, the last entry returned + %will have a size smaller than incr. + % + % + % + %:: + % + % >>> print vertsplit(DMatrix([0,1,2,3,4]),2) + % [DMatrix([0, 1]), DMatrix([2, 3]), DMatrix(4)] + % + % + % + % + % + %Usage: retval = vertsplit (v, incr = 1) + % + %v is of type SX. incr is of type int. v is of type SX. incr is of type int. retval is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(132, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = blockcat(varargin) + %> MatType blockcat([[MatType ] ] v) + %------------------------------------------------------------------------ + % + %Construct a matrix from a list of list of blocks. + % + %> MatType blockcat(MatType A, MatType B, MatType C, MatType D) + %------------------------------------------------------------------------ + % + %Construct a matrix from 4 blocks. + % + % + %Usage: retval = blockcat (A, B, C, D) + % + %A is of type SX. B is of type SX. C is of type SX. D is of type SX. A is of type SX. B is of type SX. C is of type SX. D is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(133, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = blocksplit(varargin) + %> [[MatType ] ] blocksplit(MatType x, [int ] vert_offset, [int ] horz_offset) + %------------------------------------------------------------------------ + % + %chop up into blocks + % + %Parameters: + %----------- + % + %vert_offset: Defines the boundaries of the block rows + % + %horz_offset: Defines the boundaries of the block columns + % + %blockcat(blocksplit(x,..., ...)) = x + % + %> [[MatType ] ] blocksplit(MatType x, int vert_incr=1, int horz_incr=1) + %------------------------------------------------------------------------ + % + %chop up into blocks + % + %Parameters: + %----------- + % + %vert_incr: Defines the increment for block boundaries in row dimension + % + %horz_incr: Defines the increment for block boundaries in column dimension + % + %blockcat(blocksplit(x,..., ...)) = x + % + % + %Usage: retval = blocksplit (x, vert_incr = 1, horz_incr = 1) + % + %x is of type SX. vert_incr is of type int. horz_incr is of type int. x is of type SX. vert_incr is of type int. horz_incr is of type int. retval is of type std::vector< std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > >,std::allocator< std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(134, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = diagcat(varargin) + %> MatType diagcat([MatType ] A) + %------------------------------------------------------------------------ + % + %Construct a matrix with given block on the diagonal. + % + %> MatType diagcat(MatType x, MatType y) + %------------------------------------------------------------------------ + % + %Concatenate along diagonal, two matrices. + % + %> MatType diagcat(MatType x, MatType y, MatType z) + %------------------------------------------------------------------------ + % + %Concatenate along diagonal, three matrices. + % + %> MatType diagcat(MatType x, MatType y, MatType z, MatType w) + %------------------------------------------------------------------------ + % + %Concatenate along diagonal, four matrices. + % + % + %Usage: retval = diagcat (A) + % + %A is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. A is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(135, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = diagsplit(varargin) + %> [MatType ] diagsplit(MatType x, [int ] output_offset1, [int ] output_offset2) + %------------------------------------------------------------------------ + % + %split diagonally, retaining square matrices + % + %Parameters: + %----------- + % + %output_offset1: List of all start locations (row) for each group the last + %matrix will run to the end. + % + %output_offset2: List of all start locations (row) for each group the last + %matrix will run to the end. + % + %diagcat(diagsplit(x, ...)) = x + % + %> [MatType ] diagsplit(MatType x, [int ] output_offset) + %------------------------------------------------------------------------ + % + %split diagonally, retaining square matrices + % + %Parameters: + %----------- + % + %output_offset: List of all start locations for each group the last matrix + %will run to the end. + % + %diagcat(diagsplit(x, ...)) = x + % + %> [MatType ] diagsplit(MatType x, int incr=1) + %------------------------------------------------------------------------ + % + %split diagonally, retaining groups of square matrices + % + %Parameters: + %----------- + % + %incr: Size of each matrix + % + %diagsplit(diagsplit(x, ...)) = x + % + %> [MatType ] diagsplit(MatType x, int incr1, int incr2) + %------------------------------------------------------------------------ + % + %split diagonally, retaining fixed-sized matrices + % + %Parameters: + %----------- + % + %incr1: Row dimension of each matrix + % + %incr2: Column dimension of each matrix + % + %diagsplit(diagsplit(x, ...)) = x + % + % + %Usage: retval = diagsplit (x, incr1, incr2) + % + %x is of type SX. incr1 is of type int. incr2 is of type int. x is of type SX. incr1 is of type int. incr2 is of type int. retval is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(136, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = veccat(varargin) + %concatenate vertically while vectorizing all arguments with vec + % + % + %Usage: retval = veccat (x) + % + %x is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. x is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(137, varargin); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = mtimes(varargin) + %> MatType mul(MatType X, MatType Y) + %------------------------------------------------------------------------ + % + %Matrix product of two matrices. + % + %> MatType mul([MatType ] args) + %------------------------------------------------------------------------ + % + %Matrix product of n matrices. + % + % + %Usage: retval = mtimes (args) + % + %args is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. args is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(138, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = mac(varargin) + %Multiply-accumulate operation Matrix product of two matrices (X and Y), + %adding the result to a third matrix Z. The result has the same sparsity + %pattern as C meaning that other entries of (X*Y) are ignored. The operation + %is equivalent to: Z+mul(X,Y).project(Z.sparsity()). + % + % + %Usage: retval = mac (X, Y, Z) + % + %X is of type SX. Y is of type SX. Z is of type SX. X is of type SX. Y is of type SX. Z is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(139, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = transpose(varargin) + %Transpose. + % + % + %Usage: retval = transpose (X) + % + %X is of type SX. X is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(140, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = vec(varargin) + %make a vector Reshapes/vectorizes the matrix such that the shape becomes + %(expr.numel(), 1). Columns are stacked on top of each other. Same as + %reshape(expr, expr.numel(), 1) + % + %a c b d turns into + % + %a b c d + % + % + %Usage: retval = vec (a) + % + %a is of type SX. a is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(141, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = vecNZ(varargin) + %Returns a flattened version of the matrix, preserving only nonzeros. + % + % + %Usage: retval = vecNZ (a) + % + %a is of type SX. a is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(142, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = reshape(varargin) + %> MatType reshape(MatType a, int nrow, int ncol) + %------------------------------------------------------------------------ + % + %Returns a reshaped version of the matrix. + % + %> MatType reshape(MatType a,(int,int) rc) + %------------------------------------------------------------------------ + % + %Returns a reshaped version of the matrix, dimensions as a vector. + % + %> MatType reshape(MatType a, Sparsity sp) + %------------------------------------------------------------------------ + % + %Reshape the matrix. + % + % + %Usage: retval = reshape (a, sp) + % + %a is of type SX. sp is of type Sparsity. a is of type SX. sp is of type Sparsity. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(143, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = sprank(varargin) + %Obtain the structural rank of a sparsity-pattern. + % + % + %Usage: retval = sprank (A) + % + %A is of type SX. A is of type SX. retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(144, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = norm_0_mul(varargin) + %0-norm (nonzero count) of a Matrix-matrix product + % + % + %Usage: retval = norm_0_mul (x, y) + % + %x is of type SX. y is of type SX. x is of type SX. y is of type SX. retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(145, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = triu(varargin) + %Get the upper triangular part of a matrix. + % + % + %Usage: retval = triu (a, includeDiagonal = true) + % + %a is of type SX. includeDiagonal is of type bool. a is of type SX. includeDiagonal is of type bool. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(146, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = tril(varargin) + %Get the lower triangular part of a matrix. + % + % + %Usage: retval = tril (a, includeDiagonal = true) + % + %a is of type SX. includeDiagonal is of type bool. a is of type SX. includeDiagonal is of type bool. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(147, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = kron(varargin) + %Kronecker tensor product. + % + %Creates a block matrix in which each element (i, j) is a_ij*b + % + % + %Usage: retval = kron (a, b) + % + %a is of type SX. b is of type SX. a is of type SX. b is of type SX. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(148, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = repmat(varargin) + %Repeat matrix A n times vertically and m times horizontally. + % + % + %Usage: retval = repmat (A, rc) + % + %A is of type SX. rc is of type std::pair< int,int > const &. A is of type SX. rc is of type std::pair< int,int > const &. retval is of type SX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(149, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = length(varargin) + %Usage: retval = length (v) + % + %v is of type SX. v is of type SX. retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(150, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = SparsityInterfaceCommon(varargin) + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(151, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(152, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/StabilizedQpSolver.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/StabilizedQpSolver.m new file mode 100755 index 0000000..6a83f8a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/StabilizedQpSolver.m @@ -0,0 +1,542 @@ +classdef StabilizedQpSolver < casadi.Function + %StabilizedQpSolver. + % + %Solves the following strictly convex problem: + % + % + % + %:: + % + % min 1/2 x' H x + g' x + % x + % + % subject to + % LBA <= A x <= UBA + % LBX <= x <= UBX + % + % with : + % H sparse (n x n) positive definite + % g dense (n x 1) + % + % n: number of decision variables (x) + % nc: number of constraints (A) + % + % + % + %If H is not positive-definite, the solver should throw an error. + % + %General information + %=================== + % + % + % + %>Input scheme: casadi::StabilizedQpSolverInput (STABILIZED_QP_SOLVER_NUM_IN = 12) [stabilizedQpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| STABILIZED_QP_SOLVER_H | h | The square matrix H: | + %| | | sparse, (n x n). Only | + %| | | the lower triangular | + %| | | part is actually used. | + %| | | The matrix is assumed | + %| | | to be symmetrical. | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_G | g | The vector g: dense, | + %| | | (n x 1) . | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_A | a | The matrix A: sparse, | + %| | | (nc x n) - product | + %| | | with x must be dense. | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_L | lba | dense, (nc x 1) | + %| BA | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_U | uba | dense, (nc x 1) | + %| BA | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_L | lbx | dense, (n x 1) | + %| BX | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_U | ubx | dense, (n x 1) | + %| BX | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_X | x0 | dense, (n x 1) | + %| 0 | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_L | lam_x0 | dense | + %| AM_X0 | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_M | muR | dense (1 x 1) | + %| UR | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_M | muE | dense (nc x 1) | + %| UE | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_M | mu | dense (nc x 1) | + %| U | | | + %+------------------------+------------------------+------------------------+ + % + %>Output scheme: casadi::QpSolverOutput (QP_SOLVER_NUM_OUT = 4) [qpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| QP_SOLVER_X | x | The primal solution . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_COST | cost | The optimal cost . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to | + %| | | linear bounds . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds . | + %+------------------------+------------------------+------------------------+ + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode c | + %| | | | according to | asadi::Stabi | + %| | | | a given | lizedQpSolve | + %| | | | recipe (low- | rInternal | + %| | | | level) (qp) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %List of plugins + %=============== + % + % + % + %- sqic + % + %- qp + % + %Note: some of the plugins in this list might not be available on your + %system. Also, there might be extra plugins available to you that are not + %listed here. You can obtain their documentation with + %StabilizedQpSolver.doc("myextraplugin") + % + % + % + %-------------------------------------------------------------------------------- + % + %sqic + %---- + % + % + % + %Interface to SQIC + % + %>List of available options + % + %+----+------+---------+-------------+ + %| Id | Type | Default | Description | + %+====+======+=========+=============+ + %+----+------+---------+-------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %-------------------------------------------------------------------------------- + % + %qp -- + % + % + % + %Solved a stabilized QP using a standard QP solver + % + %>List of available options + % + %+-----------------+-----------------+-----------------+-----------------+ + %| Id | Type | Default | Description | + %+=================+=================+=================+=================+ + %| qp_solver | OT_STRING | GenericType() | The QP solver | + %| | | | used to solve | + %| | | | the stabilized | + %| | | | QPs. | + %+-----------------+-----------------+-----------------+-----------------+ + %| qp_solver_optio | OT_DICT | GenericType() | Options to be | + %| ns | | | passed to the | + %| | | | QP solver | + %| | | | instance | + %+-----------------+-----------------+-----------------+-----------------+ + % + %>List of available stats + % + %+-----------------+ + %| Id | + %+=================+ + %| qp_solver_stats | + %+-----------------+ + % + %-------------------------------------------------------------------------------- + % + % + % + %Joel Andersson + %Diagrams + %-------- + % + % + % + %C++ includes: stabilized_qp_solver.hpp + %Usage: StabilizedQpSolver () + % + methods + function varargout = generateNativeCode(self,varargin) + %Generate native code in the interfaced language for debugging + % + % + %Usage: generateNativeCode (filename) + % + %filename is of type std::string const &. + + try + + if ~isa(self,'casadi.StabilizedQpSolver') + self = casadi.StabilizedQpSolver(self); + end + [varargout{1:nargout}] = casadiMEX(1015, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = StabilizedQpSolver(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1017, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1018, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = hasPlugin(varargin) + %Usage: retval = hasPlugin (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1012, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1013, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1014, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1016, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Switch.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Switch.m new file mode 100755 index 0000000..5ae0c40 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Switch.m @@ -0,0 +1,292 @@ +classdef Switch < casadi.Function + %Switch statement Joel Andersson + % + %>List of available options + % + %+--------------+--------------+--------------+--------------+--------------+ + %| Id | Type | Default | Description | Used in | + %+==============+==============+==============+==============+==============+ + %| ad_weight | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | derivative c | | + %| | | | alculation.W | | + %| | | | hen there is | | + %| | | | an option of | | + %| | | | either using | | + %| | | | forward or | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives, | | + %| | | | the | | + %| | | | condition ad | | + %| | | | _weight*nf<= | | + %| | | | (1-ad_weight | | + %| | | | )*na is used | | + %| | | | where nf and | | + %| | | | na are | | + %| | | | estimates of | | + %| | | | the number | | + %| | | | of forward/r | | + %| | | | everse mode | | + %| | | | directional | | + %| | | | derivatives | | + %| | | | needed. By | | + %| | | | default, | | + %| | | | ad_weight is | | + %| | | | calculated a | | + %| | | | utomatically | | + %| | | | , but this | | + %| | | | can be | | + %| | | | overridden | | + %| | | | by setting | | + %| | | | this option. | | + %| | | | In | | + %| | | | particular, | | + %| | | | 0 means | | + %| | | | forcing | | + %| | | | forward mode | | + %| | | | and 1 | | + %| | | | forcing | | + %| | | | reverse | | + %| | | | mode. Leave | | + %| | | | unset for | | + %| | | | (class | | + %| | | | specific) | | + %| | | | heuristics. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| ad_weight_sp | OT_REAL | GenericType( | Weighting | casadi::Func | + %| | | ) | factor for | tionInternal | + %| | | | sparsity | | + %| | | | pattern | | + %| | | | calculation | | + %| | | | calculation. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | behavior. | | + %| | | | Set to 0 and | | + %| | | | 1 to force | | + %| | | | forward and | | + %| | | | reverse mode | | + %| | | | respectively | | + %| | | | . Cf. option | | + %| | | | "ad_weight". | | + %+--------------+--------------+--------------+--------------+--------------+ + %| compiler | OT_STRING | "clang" | Just-in-time | casadi::Func | + %| | | | compiler | tionInternal | + %| | | | plugin to be | | + %| | | | used. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_forwa | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| rd | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | forward mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| custom_rever | OT_DERIVATIV | GenericType( | Function | casadi::Func | + %| se | EGENERATOR | ) | that returns | tionInternal | + %| | | | a derivative | | + %| | | | function | | + %| | | | given a | | + %| | | | number of | | + %| | | | reverse mode | | + %| | | | directional | | + %| | | | derivatives. | | + %| | | | Overrides | | + %| | | | default | | + %| | | | routines. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| defaults_rec | OT_STRINGVEC | GenericType( | Changes | casadi::Opti | + %| ipes | TOR | ) | default | onsFunctiona | + %| | | | options | lityNode | + %| | | | according to | | + %| | | | a given | | + %| | | | recipe (low- | | + %| | | | level) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| full_jacobia | OT_FUNCTION | GenericType( | The Jacobian | casadi::Func | + %| n | | ) | of all | tionInternal | + %| | | | outputs with | | + %| | | | respect to | | + %| | | | all inputs. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| gather_stats | OT_BOOLEAN | false | Flag to | casadi::Func | + %| | | | indicate | tionInternal | + %| | | | whether | | + %| | | | statistics | | + %| | | | must be | | + %| | | | gathered | | + %+--------------+--------------+--------------+--------------+--------------+ + %| input_scheme | OT_STRINGVEC | GenericType( | Custom input | casadi::Func | + %| | TOR | ) | scheme | tionInternal | + %+--------------+--------------+--------------+--------------+--------------+ + %| inputs_check | OT_BOOLEAN | true | Throw | casadi::Func | + %| | | | exceptions | tionInternal | + %| | | | when the | | + %| | | | numerical | | + %| | | | values of | | + %| | | | the inputs | | + %| | | | don't make | | + %| | | | sense | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jac_penalty | OT_REAL | 2 | When | casadi::Func | + %| | | | requested | tionInternal | + %| | | | for a number | | + %| | | | of forward/r | | + %| | | | everse | | + %| | | | directions, | | + %| | | | it may be | | + %| | | | cheaper to | | + %| | | | compute | | + %| | | | first the | | + %| | | | full | | + %| | | | jacobian and | | + %| | | | then | | + %| | | | multiply | | + %| | | | with seeds, | | + %| | | | rather than | | + %| | | | obtain the | | + %| | | | requested | | + %| | | | directions | | + %| | | | in a straigh | | + %| | | | tforward | | + %| | | | manner. | | + %| | | | Casadi uses | | + %| | | | a heuristic | | + %| | | | to decide | | + %| | | | which is | | + %| | | | cheaper. A | | + %| | | | high value | | + %| | | | of 'jac_pena | | + %| | | | lty' makes | | + %| | | | it less | | + %| | | | likely for | | + %| | | | the heurstic | | + %| | | | to chose the | | + %| | | | full | | + %| | | | Jacobian | | + %| | | | strategy. | | + %| | | | The special | | + %| | | | value -1 | | + %| | | | indicates | | + %| | | | never to use | | + %| | | | the full | | + %| | | | Jacobian | | + %| | | | strategy | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit | OT_BOOLEAN | false | Use just-in- | casadi::Func | + %| | | | time | tionInternal | + %| | | | compiler to | | + %| | | | speed up the | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| jit_options | OT_DICT | GenericType( | Options to | casadi::Func | + %| | | ) | be passed to | tionInternal | + %| | | | the jit | | + %| | | | compiler. | | + %+--------------+--------------+--------------+--------------+--------------+ + %| monitor | OT_STRINGVEC | GenericType( | Monitors to | casadi::Func | + %| | TOR | ) | be activated | tionInternal | + %| | | | (inputs|outp | | + %| | | | uts) | | + %+--------------+--------------+--------------+--------------+--------------+ + %| name | OT_STRING | "unnamed_sha | name of the | casadi::Opti | + %| | | red_object" | object | onsFunctiona | + %| | | | | lityNode | + %+--------------+--------------+--------------+--------------+--------------+ + %| output_schem | OT_STRINGVEC | GenericType( | Custom | casadi::Func | + %| e | TOR | ) | output | tionInternal | + %| | | | scheme | | + %+--------------+--------------+--------------+--------------+--------------+ + %| regularity_c | OT_BOOLEAN | true | Throw | casadi::Func | + %| heck | | | exceptions | tionInternal | + %| | | | when NaN or | | + %| | | | Inf appears | | + %| | | | during | | + %| | | | evaluation | | + %+--------------+--------------+--------------+--------------+--------------+ + %| user_data | OT_VOIDPTR | GenericType( | A user- | casadi::Func | + %| | | ) | defined | tionInternal | + %| | | | field that | | + %| | | | can be used | | + %| | | | to identify | | + %| | | | the function | | + %| | | | or pass | | + %| | | | additional | | + %| | | | information | | + %+--------------+--------------+--------------+--------------+--------------+ + %| verbose | OT_BOOLEAN | false | Verbose | casadi::Func | + %| | | | evaluation | tionInternal | + %| | | | for | | + %| | | | debugging | | + %+--------------+--------------+--------------+--------------+--------------+ + % + %Diagrams + %-------- + % + % + % + %C++ includes: switch.hpp + %Usage: Switch () + % + methods + function self = Switch(varargin) + self@casadi.Function(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1053, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1054, self); + self.swigPtr=[]; + end + end + end + methods(Static) + function varargout = testCast(varargin) + %Usage: retval = testCast (ptr) + % + %ptr is of type casadi::SharedObjectNode const *. ptr is of type casadi::SharedObjectNode const *. retval is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1052, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Variable.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Variable.m new file mode 100755 index 0000000..7652ead --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/Variable.m @@ -0,0 +1,156 @@ +classdef Variable < casadi.PrintVariable + %Usage: Variable () + % + methods + function varargout = name(self,varargin) + %Usage: retval = name () + % + %retval is of type std::string. + + try + + if ~isa(self,'casadi.Variable') + self = casadi.Variable(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(1238, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function v = v(self) + v = casadiMEX(1239, self); + end + function v = d(self) + v = casadiMEX(1240, self); + end + function v = nominal(self) + v = casadiMEX(1241, self); + end + function v = start(self) + v = casadiMEX(1242, self); + end + function v = min(self) + v = casadiMEX(1243, self); + end + function v = max(self) + v = casadiMEX(1244, self); + end + function v = initialGuess(self) + v = casadiMEX(1245, self); + end + function v = derivativeStart(self) + v = casadiMEX(1246, self); + end + function v = variability(self) + v = casadiMEX(1247, self); + end + function v = causality(self) + v = casadiMEX(1248, self); + end + function v = category(self) + v = casadiMEX(1249, self); + end + function v = alias(self) + v = casadiMEX(1250, self); + end + function v = description(self) + v = casadiMEX(1251, self); + end + function v = valueReference(self) + v = casadiMEX(1252, self); + end + function v = unit(self) + v = casadiMEX(1253, self); + end + function v = displayUnit(self) + v = casadiMEX(1254, self); + end + function v = free(self) + v = casadiMEX(1255, self); + end + function varargout = print(self,varargin) + %Usage: print (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.Variable') + self = casadi.Variable(self); + end + [varargout{1:nargout}] = casadiMEX(1256, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = disp(self,varargin) + %Usage: disp (trailing_newline = true) + % + %trailing_newline is of type bool. + + try + + if ~isa(self,'casadi.Variable') + self = casadi.Variable(self); + end + [varargout{1:nargout}] = casadiMEX(1257, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = Variable(varargin) + self@casadi.PrintVariable(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1258, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(1259, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/WeakRef.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/WeakRef.m new file mode 100755 index 0000000..c5510ad --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/WeakRef.m @@ -0,0 +1,93 @@ +classdef WeakRef < casadi.SharedObject + %[INTERNAL] Weak reference type A + %weak reference to a SharedObject. + % + %Joel Andersson + % + %C++ includes: weak_ref.hpp + %Usage: WeakRef () + % + methods + function varargout = shared(self,varargin) + %[INTERNAL] Get a shared + %(owning) reference. + % + % + %Usage: retval = shared () + % + %retval is of type SharedObject. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(69, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = alive(self,varargin) + %[INTERNAL] Check if alive. + % + % + %Usage: retval = alive () + % + %retval is of type bool. + + try + + if ~isa(self,'casadi.WeakRef') + self = casadi.WeakRef(self); + end + [varargout{1:max(1,nargout)}] = casadiMEX(70, self, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function self = WeakRef(varargin) + self@casadi.SharedObject(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(71, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + function delete(self) + if self.swigPtr + casadiMEX(72, self); + self.swigPtr=[]; + end + end + end + methods(Static) + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/XmlFile.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/XmlFile.m new file mode 100755 index 0000000..b2c3bc0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/XmlFile.m @@ -0,0 +1,86 @@ +classdef XmlFile < casadi.OptionsFunctionality + %XML parser Can be used for parsing XML files into CasADi data structures. + % + %Joel Andersson + %Diagrams + %-------- + % + % + % + %C++ includes: xml_file.hpp + %Usage: XmlFile () + % + methods + function delete(self) + if self.swigPtr + casadiMEX(1338, self); + self.swigPtr=[]; + end + end + function self = XmlFile(varargin) + self@casadi.OptionsFunctionality(SwigRef.Null); + if nargin==1 && strcmp(class(varargin{1}),'SwigRef') + if varargin{1}~=SwigRef.Null + self.swigPtr = varargin{1}.swigPtr; + end + else + + try + + tmp = casadiMEX(1341, varargin{:}); + self.swigPtr = tmp.swigPtr; + tmp.swigPtr = []; + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end + end + methods(Static) + function varargout = loadPlugin(varargin) + %Usage: loadPlugin (name) + % + %name is of type std::string const &. + + try + + [varargout{1:nargout}] = casadiMEX(1339, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + function varargout = doc(varargin) + %Usage: retval = doc (name) + % + %name is of type std::string const &. name is of type std::string const &. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1340, varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/cleIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/cleIn.m new file mode 100755 index 0000000..2d5ed39 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/cleIn.m @@ -0,0 +1,32 @@ +function varargout = cleIn(varargin) + %Input arguments of a cle solver + % + %>Input scheme: casadi::CLEInput (CLE_NUM_IN = 2) [cleIn] + % + %+-----------+-------+-------------+ + %| Full name | Short | Description | + %+===========+=======+=============+ + %| CLE_A | a | A matrix . | + %+-----------+-------+-------------+ + %| CLE_V | v | V matrix . | + %+-----------+-------+-------------+ + % + % + %Usage: retval = cleIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1144,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/cleOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/cleOut.m new file mode 100755 index 0000000..83ac487 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/cleOut.m @@ -0,0 +1,30 @@ +function varargout = cleOut(varargin) + %Output arguments of a cle solver + % + %>Output scheme: casadi::CLEOutput (CLE_NUM_OUT = 1) [cleOut] + % + %+-----------+-------+-------------------+ + %| Full name | Short | Description | + %+===========+=======+===================+ + %| CLE_P | p | Lyapunov matrix . | + %+-----------+-------+-------------------+ + % + % + %Usage: retval = cleOut (n0 = "", x0 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1145,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/collocationInterpolators.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/collocationInterpolators.m new file mode 100755 index 0000000..69a1d60 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/collocationInterpolators.m @@ -0,0 +1,44 @@ +function varargout = collocationInterpolators(varargin) + %Obtain collocation interpolating matrices. + % + %Parameters: + %----------- + % + %tau_root: location of collocation points, as obtained from + %collocationPoints + % + %C: interpolating coefficients to obtain derivatives Length: order+1, order + %+ 1 + % + % + % + %:: + % + %dX/dt @collPoint(j) ~ Sum_i C[j][i]*X@collPoint(i) + % + % + % + %Parameters: + %----------- + % + %D: interpolating coefficients to obtain end state Length: order+1 + % + % + %Usage: collocationInterpolators (tau_root) + % + %tau_root is of type std::vector< double,std::allocator< double > > const &. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1220,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/collocationPoints.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/collocationPoints.m new file mode 100755 index 0000000..305ca5f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/collocationPoints.m @@ -0,0 +1,27 @@ +function varargout = collocationPoints(varargin) + %Obtain collocation points of specific order and scheme. + % + %Parameters: + %----------- + % + %scheme: 'radau' or 'legendre' + % + % + %Usage: retval = collocationPoints (order, scheme = "radau") + % + %order is of type int. scheme is of type std::string const &. order is of type int. scheme is of type std::string const &. retval is of type std::vector< double,std::allocator< double > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1219,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/complement.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/complement.m new file mode 100755 index 0000000..44df4d8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/complement.m @@ -0,0 +1,26 @@ +function varargout = complement(varargin) + %Returns the list of all i in [0, size[ not found in supplied list. + % + %The supplied vector may contain duplicates and may be non-monotonous The + %supplied vector will be checked for bounds The result vector is guaranteed + %to be monotonously increasing + % + % + %Usage: retval = complement (v, $ignore) + % + %v is of type std::vector< int,std::allocator< int > > const &. $ignore is of type int. v is of type std::vector< int,std::allocator< int > > const &. $ignore is of type int. retval is of type std::vector< int,std::allocator< int > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(67,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/controldaeIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/controldaeIn.m new file mode 100755 index 0000000..1de92ec --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/controldaeIn.m @@ -0,0 +1,62 @@ +function varargout = controldaeIn(varargin) + %Input arguments of an ODE/DAE function + % + %>Input scheme: casadi::ControlledDAEInput (CONTROL_DAE_NUM_IN = 9) [controldaeIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| CONTROL_DAE_T | t | Global physical time. | + %| | | (1-by-1) . | + %+------------------------+------------------------+------------------------+ + %| CONTROL_DAE_X | x | State vector | + %| | | (dimension nx-by-1). | + %| | | Should have the same | + %| | | amount of non-zeros as | + %| | | DAEOutput:DAE_RES | + %+------------------------+------------------------+------------------------+ + %| CONTROL_DAE_Z | z | Algebraic state vector | + %| | | (dimension np-by-1). . | + %+------------------------+------------------------+------------------------+ + %| CONTROL_DAE_P | p | Parameter vector | + %| | | (dimension np-by-1). . | + %+------------------------+------------------------+------------------------+ + %| CONTROL_DAE_U | u | Control vector | + %| | | (dimension nu-by-1). . | + %+------------------------+------------------------+------------------------+ + %| CONTROL_DAE_U_INTERP | u_interp | Control vector, | + %| | | linearly interpolated | + %| | | (dimension nu-by-1). . | + %+------------------------+------------------------+------------------------+ + %| CONTROL_DAE_X_MAJOR | x_major | State vector | + %| | | (dimension nx-by-1) at | + %| | | the last major time- | + %| | | step . | + %+------------------------+------------------------+------------------------+ + %| CONTROL_DAE_T0 | t0 | Time at start of | + %| | | control interval | + %| | | (1-by-1) . | + %+------------------------+------------------------+------------------------+ + %| CONTROL_DAE_TF | tf | Time at end of control | + %| | | interval (1-by-1) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = controldaeIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity(), n6 = "", x6 = casadi::Sparsity(), n7 = "", x7 = casadi::Sparsity(), n8 = "", x8 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1146,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/controlsimulatorIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/controlsimulatorIn.m new file mode 100755 index 0000000..3285c82 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/controlsimulatorIn.m @@ -0,0 +1,42 @@ +function varargout = controlsimulatorIn(varargin) + %Input arguments of a control simulator + % + %>Input scheme: casadi::ControlSimulatorInput (CONTROLSIMULATOR_NUM_IN = 3) [controlsimulatorIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| CONTROLSIMULATOR_X0 | x0 | Differential or | + %| | | algebraic state at t0 | + %| | | (dimension nx-by-1) . | + %+------------------------+------------------------+------------------------+ + %| CONTROLSIMULATOR_P | p | Parameters that are | + %| | | fixed over the entire | + %| | | horizon (dimension np- | + %| | | by-1) . | + %+------------------------+------------------------+------------------------+ + %| CONTROLSIMULATOR_U | u | Parameters that change | + %| | | over the integration | + %| | | intervals (dimension | + %| | | nu-by-(ns-1)) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = controlsimulatorIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1147,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/daeIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/daeIn.m new file mode 100755 index 0000000..f743883 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/daeIn.m @@ -0,0 +1,36 @@ +function varargout = daeIn(varargin) + %Input arguments of an ODE/DAE function + % + %>Input scheme: casadi::DAEInput (DAE_NUM_IN = 4) [daeIn] + % + %+-----------+-------+----------------------------+ + %| Full name | Short | Description | + %+===========+=======+============================+ + %| DAE_X | x | Differential state . | + %+-----------+-------+----------------------------+ + %| DAE_Z | z | Algebraic state . | + %+-----------+-------+----------------------------+ + %| DAE_P | p | Parameter . | + %+-----------+-------+----------------------------+ + %| DAE_T | t | Explicit time dependence . | + %+-----------+-------+----------------------------+ + % + % + %Usage: retval = daeIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1153,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/daeOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/daeOut.m new file mode 100755 index 0000000..fc7aaf6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/daeOut.m @@ -0,0 +1,34 @@ +function varargout = daeOut(varargin) + %Output arguments of an DAE function + % + %>Output scheme: casadi::DAEOutput (DAE_NUM_OUT = 3) [daeOut] + % + %+-----------+-------+--------------------------------------------+ + %| Full name | Short | Description | + %+===========+=======+============================================+ + %| DAE_ODE | ode | Right hand side of the implicit ODE . | + %+-----------+-------+--------------------------------------------+ + %| DAE_ALG | alg | Right hand side of algebraic equations . | + %+-----------+-------+--------------------------------------------+ + %| DAE_QUAD | quad | Right hand side of quadratures equations . | + %+-----------+-------+--------------------------------------------+ + % + % + %Usage: retval = daeOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1154,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dleIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dleIn.m new file mode 100755 index 0000000..841aefb --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dleIn.m @@ -0,0 +1,32 @@ +function varargout = dleIn(varargin) + %Input arguments of a dle solver + % + %>Input scheme: casadi::DLEInput (DLE_NUM_IN = 2) [dleIn] + % + %+-----------+-------+-------------+ + %| Full name | Short | Description | + %+===========+=======+=============+ + %| DLE_A | a | A matrix . | + %+-----------+-------+-------------+ + %| DLE_V | v | V matrix . | + %+-----------+-------+-------------+ + % + % + %Usage: retval = dleIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1148,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dleOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dleOut.m new file mode 100755 index 0000000..da5a151 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dleOut.m @@ -0,0 +1,30 @@ +function varargout = dleOut(varargin) + %Output arguments of a dle solver + % + %>Output scheme: casadi::DLEOutput (DLE_NUM_OUT = 1) [dleOut] + % + %+-----------+-------+-------------+ + %| Full name | Short | Description | + %+===========+=======+=============+ + %| DLE_P | p | P matrix . | + %+-----------+-------+-------------+ + % + % + %Usage: retval = dleOut (n0 = "", x0 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1149,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dpleIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dpleIn.m new file mode 100755 index 0000000..a3b26d2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dpleIn.m @@ -0,0 +1,36 @@ +function varargout = dpleIn(varargin) + %Input arguments of a dple solver + % + %>Input scheme: casadi::DPLEInput (DPLE_NUM_IN = 2) [dpleIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| DPLE_A | a | A matrices (horzcat | + %| | | when const_dim, | + %| | | diagcat otherwise) . | + %+------------------------+------------------------+------------------------+ + %| DPLE_V | v | V matrices (horzcat | + %| | | when const_dim, | + %| | | diagcat otherwise) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = dpleIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1150,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dpleOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dpleOut.m new file mode 100755 index 0000000..6755c9f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/dpleOut.m @@ -0,0 +1,34 @@ +function varargout = dpleOut(varargin) + %Output arguments of a dple solver + % + %>Output scheme: casadi::DPLEOutput (DPLE_NUM_OUT = 1) [dpleOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| DPLE_P | p | Lyapunov matrix | + %| | | (horzcat when | + %| | | const_dim, diagcat | + %| | | otherwise) (Cholesky | + %| | | of P if pos_def) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = dpleOut (n0 = "", x0 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1151,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/extractShared.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/extractShared.m new file mode 100755 index 0000000..3035ad6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/extractShared.m @@ -0,0 +1,22 @@ +function varargout = extractShared(varargin) + %Extract shared subexpressions from an set of expressions. + % + % + %Usage: extractShared (ex, v_prefix = "v_", v_suffix = "") + % + %ex is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. v_prefix is of type std::string const &. v_suffix is of type std::string const &. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(902,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryDoc.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryDoc.m new file mode 100755 index 0000000..ac6b155 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryDoc.m @@ -0,0 +1,19 @@ +function varargout = getSchemeEntryDoc(varargin) + %Usage: retval = getSchemeEntryDoc (scheme, i) + % + %scheme is of type casadi::InputOutputScheme. i is of type int. scheme is of type casadi::InputOutputScheme. i is of type int. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(22,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryEnum.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryEnum.m new file mode 100755 index 0000000..63c04de --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryEnum.m @@ -0,0 +1,19 @@ +function varargout = getSchemeEntryEnum(varargin) + %Usage: retval = getSchemeEntryEnum (scheme, name) + % + %scheme is of type casadi::InputOutputScheme. name is of type std::string const &. scheme is of type casadi::InputOutputScheme. name is of type std::string const &. retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(24,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryEnumName.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryEnumName.m new file mode 100755 index 0000000..4059869 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryEnumName.m @@ -0,0 +1,19 @@ +function varargout = getSchemeEntryEnumName(varargin) + %Usage: retval = getSchemeEntryEnumName (scheme, i) + % + %scheme is of type casadi::InputOutputScheme. i is of type int. scheme is of type casadi::InputOutputScheme. i is of type int. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(23,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryName.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryName.m new file mode 100755 index 0000000..bec5f76 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryName.m @@ -0,0 +1,19 @@ +function varargout = getSchemeEntryName(varargin) + %Usage: retval = getSchemeEntryName (scheme, i) + % + %scheme is of type casadi::InputOutputScheme. i is of type int. scheme is of type casadi::InputOutputScheme. i is of type int. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(21,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryNames.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryNames.m new file mode 100755 index 0000000..51dbf43 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeEntryNames.m @@ -0,0 +1,19 @@ +function varargout = getSchemeEntryNames(varargin) + %Usage: retval = getSchemeEntryNames (scheme) + % + %scheme is of type casadi::InputOutputScheme. scheme is of type casadi::InputOutputScheme. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(27,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeName.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeName.m new file mode 100755 index 0000000..cca0e50 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeName.m @@ -0,0 +1,19 @@ +function varargout = getSchemeName(varargin) + %Usage: retval = getSchemeName (scheme) + % + %scheme is of type casadi::InputOutputScheme. scheme is of type casadi::InputOutputScheme. retval is of type std::string. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(26,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeSize.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeSize.m new file mode 100755 index 0000000..b9d9c4a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/getSchemeSize.m @@ -0,0 +1,19 @@ +function varargout = getSchemeSize(varargin) + %Usage: retval = getSchemeSize (scheme) + % + %scheme is of type casadi::InputOutputScheme. scheme is of type casadi::InputOutputScheme. retval is of type int. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(25,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/gradFIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/gradFIn.m new file mode 100755 index 0000000..9a2f46c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/gradFIn.m @@ -0,0 +1,32 @@ +function varargout = gradFIn(varargin) + %Input arguments of an NLP objective gradient function + % + %>Input scheme: casadi::GradFInput (GRADF_NUM_IN = 2) [gradFIn] + % + %+-----------+-------+---------------------+ + %| Full name | Short | Description | + %+===========+=======+=====================+ + %| GRADF_X | x | Decision variable . | + %+-----------+-------+---------------------+ + %| GRADF_P | p | Fixed parameter . | + %+-----------+-------+---------------------+ + % + % + %Usage: retval = gradFIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1169,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/gradFOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/gradFOut.m new file mode 100755 index 0000000..4911ace --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/gradFOut.m @@ -0,0 +1,34 @@ +function varargout = gradFOut(varargin) + %Output arguments of an NLP objective gradient function + % + %>Output scheme: casadi::GradFOutput (GRADF_NUM_OUT = 3) [gradFOut] + % + %+------------+-------+-------------------------------+ + %| Full name | Short | Description | + %+============+=======+===============================+ + %| GRADF_GRAD | grad | Jacobian of the constraints . | + %+------------+-------+-------------------------------+ + %| GRADF_F | f | Objective function . | + %+------------+-------+-------------------------------+ + %| GRADF_G | g | Constraint function . | + %+------------+-------+-------------------------------+ + % + % + %Usage: retval = gradFOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1170,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/graph_substitute.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/graph_substitute.m new file mode 100755 index 0000000..a48509c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/graph_substitute.m @@ -0,0 +1,32 @@ +function varargout = graph_substitute(varargin) + %> MX graph_substitute(MX ex, [MX ] v, [MX ] vdef) + %------------------------------------------------------------------------ + % + %Substitute single expression in graph Substitute variable v with expression + %vdef in an expression ex, preserving nodes. + % + %> [MX] graph_substitute([MX ] ex, [MX ] v, [MX ] vdef) + %------------------------------------------------------------------------ + % + %Substitute multiple expressions in graph Substitute variable var with + %expression expr in multiple expressions, preserving nodes. + % + % + %Usage: retval = graph_substitute (ex, v, vdef) + % + %ex is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const &. v is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const &. vdef is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const &. ex is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const &. v is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const &. vdef is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const &. retval is of type std::vector< casadi::MX,std::allocator< casadi::MX > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(904,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hash_combine.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hash_combine.m new file mode 100755 index 0000000..2ef66a3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hash_combine.m @@ -0,0 +1,32 @@ +function varargout = hash_combine(varargin) + %> void hash_combine(std.size_t &seed, T v) + % + %> void hash_combine(std.size_t &seed, [int ] v) + %------------------------------------------------------------------------ + %[INTERNAL] + %Generate a hash value incrementally (function taken from boost) + % + %> void hash_combine(std.size_t &seed, const int *v, int sz) + %------------------------------------------------------------------------ + %[INTERNAL] + %Generate a hash value incrementally, array. + % + % + %Usage: hash_combine (seed, v) + % + %seed is of type std::size_t &. v is of type std::vector< int,std::allocator< int > > const &. + + try + + [varargout{1:nargout}] = casadiMEX(248,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hash_sparsity.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hash_sparsity.m new file mode 100755 index 0000000..3c706c4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hash_sparsity.m @@ -0,0 +1,28 @@ +function varargout = hash_sparsity(varargin) + %> std.size_t hash_sparsity(int nrow, int ncol, [int ] colind, [int ] row) + %------------------------------------------------------------------------ + %[INTERNAL] + %Hash a sparsity pattern. + % + %> std.size_t hash_sparsity(int nrow, int ncol, const int *colind, const int *row) + %------------------------------------------------------------------------ + %[INTERNAL] + % + %Usage: retval = hash_sparsity (nrow, ncol, colind, row) + % + %nrow is of type int. ncol is of type int. colind is of type int const *. row is of type int const *. nrow is of type int. ncol is of type int. colind is of type int const *. row is of type int const *. retval is of type std::size_t. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(249,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hessLagIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hessLagIn.m new file mode 100755 index 0000000..f83274b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hessLagIn.m @@ -0,0 +1,41 @@ +function varargout = hessLagIn(varargin) + %Input arguments of an NLP Hessian function + % + %>Input scheme: casadi::HessLagInput (HESSLAG_NUM_IN = 4) [hessLagIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| HESSLAG_X | x | Decision variable . | + %+------------------------+------------------------+------------------------+ + %| HESSLAG_P | p | Fixed parameter . | + %+------------------------+------------------------+------------------------+ + %| HESSLAG_LAM_F | lam_f | Multiplier for f. Just | + %| | | a scalar factor for | + %| | | the objective that the | + %| | | NLP solver might use | + %| | | to scale the | + %| | | objective. | + %+------------------------+------------------------+------------------------+ + %| HESSLAG_LAM_G | lam_g | Multiplier for g . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = hessLagIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1173,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hessLagOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hessLagOut.m new file mode 100755 index 0000000..60bef82 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hessLagOut.m @@ -0,0 +1,38 @@ +function varargout = hessLagOut(varargin) + %Output arguments of an NLP Hessian function + % + %>Output scheme: casadi::HessLagOutput (HESSLAG_NUM_OUT = 5) [hessLagOut] + % + %+----------------+--------+------------------------------------------------+ + %| Full name | Short | Description | + %+================+========+================================================+ + %| HESSLAG_HESS | hess | Hessian of the Lagrangian . | + %+----------------+--------+------------------------------------------------+ + %| HESSLAG_F | f | Objective function . | + %+----------------+--------+------------------------------------------------+ + %| HESSLAG_G | g | Constraint function . | + %+----------------+--------+------------------------------------------------+ + %| HESSLAG_GRAD_X | grad_x | Gradient of the Lagrangian with respect to x . | + %+----------------+--------+------------------------------------------------+ + %| HESSLAG_GRAD_P | grad_p | Gradient of the Lagrangian with respect to p . | + %+----------------+--------+------------------------------------------------+ + % + % + %Usage: retval = hessLagOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1174,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hnlpIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hnlpIn.m new file mode 100755 index 0000000..33e9fa5 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/hnlpIn.m @@ -0,0 +1,34 @@ +function varargout = hnlpIn(varargin) + %Input arguments of an Homotopy NLP function + % + %>Input scheme: casadi::HNLPInput (HNL_NUM_IN = 3) [hnlpIn] + % + %+-----------+-------+----------------------+ + %| Full name | Short | Description | + %+===========+=======+======================+ + %| HNL_X | x | Decision variable . | + %+-----------+-------+----------------------+ + %| HNL_P | p | Fixed parameter . | + %+-----------+-------+----------------------+ + %| HNL_TAU | tau | Homotopy parameter . | + %+-----------+-------+----------------------+ + % + % + %Usage: retval = hnlpIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1152,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/integratorIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/integratorIn.m new file mode 100755 index 0000000..4c237dd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/integratorIn.m @@ -0,0 +1,47 @@ +function varargout = integratorIn(varargin) + %Input arguments of an integrator + % + %>Input scheme: casadi::IntegratorInput (INTEGRATOR_NUM_IN = 6) [integratorIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| INTEGRATOR_X0 | x0 | Differential state at | + %| | | the initial time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_P | p | Parameters . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_Z0 | z0 | Initial guess for the | + %| | | algebraic variable . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RX0 | rx0 | Backward differential | + %| | | state at the final | + %| | | time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RP | rp | Backward parameter | + %| | | vector . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RZ0 | rz0 | Initial guess for the | + %| | | backwards algebraic | + %| | | variable . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = integratorIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1157,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/integratorOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/integratorOut.m new file mode 100755 index 0000000..6418d59 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/integratorOut.m @@ -0,0 +1,49 @@ +function varargout = integratorOut(varargin) + %Output arguments of an integrator + % + %>Output scheme: casadi::IntegratorOutput (INTEGRATOR_NUM_OUT = 6) [integratorOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| INTEGRATOR_XF | xf | Differential state at | + %| | | the final time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_QF | qf | Quadrature state at | + %| | | the final time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_ZF | zf | Algebraic variable at | + %| | | the final time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RXF | rxf | Backward differential | + %| | | state at the initial | + %| | | time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RQF | rqf | Backward quadrature | + %| | | state at the initial | + %| | | time . | + %+------------------------+------------------------+------------------------+ + %| INTEGRATOR_RZF | rzf | Backward algebraic | + %| | | variable at the | + %| | | initial time . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = integratorOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1158,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/jacGIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/jacGIn.m new file mode 100755 index 0000000..4800740 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/jacGIn.m @@ -0,0 +1,32 @@ +function varargout = jacGIn(varargin) + %Input arguments of an NLP Jacobian function + % + %>Input scheme: casadi::JacGInput (JACG_NUM_IN = 2) [jacGIn] + % + %+-----------+-------+---------------------+ + %| Full name | Short | Description | + %+===========+=======+=====================+ + %| JACG_X | x | Decision variable . | + %+-----------+-------+---------------------+ + %| JACG_P | p | Fixed parameter . | + %+-----------+-------+---------------------+ + % + % + %Usage: retval = jacGIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1171,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/jacGOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/jacGOut.m new file mode 100755 index 0000000..48cc5b6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/jacGOut.m @@ -0,0 +1,34 @@ +function varargout = jacGOut(varargin) + %Output arguments of an NLP Jacobian function + % + %>Output scheme: casadi::JacGOutput (JACG_NUM_OUT = 3) [jacGOut] + % + %+-----------+-------+-------------------------------+ + %| Full name | Short | Description | + %+===========+=======+===============================+ + %| JACG_JAC | jac | Jacobian of the constraints . | + %+-----------+-------+-------------------------------+ + %| JACG_F | f | Objective function . | + %+-----------+-------+-------------------------------+ + %| JACG_G | g | Constraint function . | + %+-----------+-------+-------------------------------+ + % + % + %Usage: retval = jacGOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1172,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/linsolIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/linsolIn.m new file mode 100755 index 0000000..144b473 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/linsolIn.m @@ -0,0 +1,32 @@ +function varargout = linsolIn(varargin) + %Input arguments of a linear solver + % + %>Input scheme: casadi::LinsolInput (LINSOL_NUM_IN = 2) [linsolIn] + % + %+-----------+-------+------------------------------------------------+ + %| Full name | Short | Description | + %+===========+=======+================================================+ + %| LINSOL_A | A | The square matrix A: sparse, (n x n). . | + %+-----------+-------+------------------------------------------------+ + %| LINSOL_B | B | The right-hand-side matrix b: dense, (n x m) . | + %+-----------+-------+------------------------------------------------+ + % + % + %Usage: retval = linsolIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1159,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/linsolOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/linsolOut.m new file mode 100755 index 0000000..2963c40 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/linsolOut.m @@ -0,0 +1,30 @@ +function varargout = linsolOut(varargin) + %Output arguments of a linear solver + % + %>Output scheme: casadi::LinsolOutput (LINSOL_NUM_OUT = 1) [linsolOut] + % + %+-----------+-------+----------------------------------------------+ + %| Full name | Short | Description | + %+===========+=======+==============================================+ + %| LINSOL_X | X | Solution to the linear system of equations . | + %+-----------+-------+----------------------------------------------+ + % + % + %Usage: retval = linsolOut (n0 = "", x0 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1160,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lookupvector.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lookupvector.m new file mode 100755 index 0000000..744fbd4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lookupvector.m @@ -0,0 +1,27 @@ +function varargout = lookupvector(varargin) + %Returns a vector for quickly looking up entries of supplied list. + % + %lookupvector[i]!=-1 <=> v contains i v[lookupvector[i]] == i <=> v contains + %i + % + %Duplicates are treated by looking up last occurrence + % + % + %Usage: retval = lookupvector (v, $ignore) + % + %v is of type std::vector< int,std::allocator< int > > const &. $ignore is of type int. v is of type std::vector< int,std::allocator< int > > const &. $ignore is of type int. retval is of type std::vector< int,std::allocator< int > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(68,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lpIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lpIn.m new file mode 100755 index 0000000..8e6b8be --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lpIn.m @@ -0,0 +1,44 @@ +function varargout = lpIn(varargin) + %Input arguments of a LP problem + % + %>Input scheme: casadi::LpSolverInput (LP_SOLVER_NUM_IN = 6) [lpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| LP_SOLVER_C | c | The vector c: dense (n | + %| | | x 1) . | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_A | a | The matrix A: sparse, | + %| | | (nc x n) - product | + %| | | with x must be dense. | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_LBA | lba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_UBA | uba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_LBX | lbx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_UBX | ubx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = lpIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1161,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lpOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lpOut.m new file mode 100755 index 0000000..f9f2fc4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lpOut.m @@ -0,0 +1,40 @@ +function varargout = lpOut(varargin) + %Output arguments of an LP Solver + % + %>Output scheme: casadi::LpSolverOutput (LP_SOLVER_NUM_OUT = 4) [lpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| LP_SOLVER_X | x | The primal solution . | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_COST | cost | The optimal cost . | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to | + %| | | linear bounds . | + %+------------------------+------------------------+------------------------+ + %| LP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = lpOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1162,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdleIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdleIn.m new file mode 100755 index 0000000..f763610 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdleIn.m @@ -0,0 +1,36 @@ +function varargout = lrdleIn(varargin) + %Input arguments of a dle solver + % + %>Input scheme: casadi::LR_DLEInput (LR_DLE_NUM_IN = 4) [lrdleIn] + % + %+-----------+-------+----------------------------------------+ + %| Full name | Short | Description | + %+===========+=======+========================================+ + %| LR_DLE_A | a | A matrix . | + %+-----------+-------+----------------------------------------+ + %| LR_DLE_V | v | V matrix . | + %+-----------+-------+----------------------------------------+ + %| LR_DLE_C | c | C matrix . | + %+-----------+-------+----------------------------------------+ + %| LR_DLE_H | h | H matrix: horizontal stack of all Hi . | + %+-----------+-------+----------------------------------------+ + % + % + %Usage: retval = lrdleIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1163,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdleOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdleOut.m new file mode 100755 index 0000000..72d19c8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdleOut.m @@ -0,0 +1,30 @@ +function varargout = lrdleOut(varargin) + %Output arguments of a dle solver + % + %>Output scheme: casadi::LR_DLEOutput (LR_DLE_NUM_OUT = 1) [lrdleOut] + % + %+-----------+-------+---------------------------------+ + %| Full name | Short | Description | + %+===========+=======+=================================+ + %| LR_DLE_Y | y | Y matrix, block diagonal form . | + %+-----------+-------+---------------------------------+ + % + % + %Usage: retval = lrdleOut (n0 = "", x0 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1164,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdpleIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdpleIn.m new file mode 100755 index 0000000..26f5d56 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdpleIn.m @@ -0,0 +1,41 @@ +function varargout = lrdpleIn(varargin) + %Input arguments of a dple solver + % + %>Input scheme: casadi::LR_DPLEInput (LR_DPLE_NUM_IN = 4) [lrdpleIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| LR_DPLE_A | a | A matrices (horzcat | + %| | | when const_dim, | + %| | | diagcat otherwise) . | + %+------------------------+------------------------+------------------------+ + %| LR_DPLE_V | v | V matrices (horzcat | + %| | | when const_dim, | + %| | | diagcat otherwise) . | + %+------------------------+------------------------+------------------------+ + %| LR_DPLE_C | c | C matrix . | + %+------------------------+------------------------+------------------------+ + %| LR_DPLE_H | h | H matrix: horizontal | + %| | | stack of all Hi . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = lrdpleIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1165,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdpleOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdpleOut.m new file mode 100755 index 0000000..982fe9a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/lrdpleOut.m @@ -0,0 +1,34 @@ +function varargout = lrdpleOut(varargin) + %Output arguments of a dple solver + % + %>Output scheme: casadi::LR_DPLEOutput (LR_DPLE_NUM_OUT = 1) [lrdpleOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| LR_DPLE_Y | y | Lyapunov matrix | + %| | | (horzcat when | + %| | | const_dim, diagcat | + %| | | otherwise) (Cholesky | + %| | | of P if pos_def) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = lrdpleOut (n0 = "", x0 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1166,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/matrix_expand.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/matrix_expand.m new file mode 100755 index 0000000..22ec41a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/matrix_expand.m @@ -0,0 +1,25 @@ +function varargout = matrix_expand(varargin) + %Expand MX graph to SXFunction call. + % + %Expand the given expression e, optionally supplying expressions contained in + %it at which expansion should stop. + % + % + %Usage: retval = matrix_expand (e, boundary = std::vector< casadi::MX >(), options = casadi::Dict()) + % + %e is of type MX. boundary is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const &. options is of type casadi::Dict const &. e is of type MX. boundary is of type std::vector< casadi::MX,std::allocator< casadi::MX > > const &. options is of type casadi::Dict const &. retval is of type MX. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(903,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpIn.m new file mode 100755 index 0000000..64e079e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpIn.m @@ -0,0 +1,32 @@ +function varargout = nlpIn(varargin) + %Input arguments of an NLP function + % + %>Input scheme: casadi::NLPInput (NL_NUM_IN = 2) [nlpIn] + % + %+-----------+-------+---------------------+ + %| Full name | Short | Description | + %+===========+=======+=====================+ + %| NL_X | x | Decision variable . | + %+-----------+-------+---------------------+ + %| NL_P | p | Fixed parameter . | + %+-----------+-------+---------------------+ + % + % + %Usage: retval = nlpIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1167,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpOut.m new file mode 100755 index 0000000..d7cbb2f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpOut.m @@ -0,0 +1,32 @@ +function varargout = nlpOut(varargin) + %Output arguments of an NLP function + % + %>Output scheme: casadi::NLPOutput (NL_NUM_OUT = 2) [nlpOut] + % + %+-----------+-------+-----------------------+ + %| Full name | Short | Description | + %+===========+=======+=======================+ + %| NL_F | f | Objective function . | + %+-----------+-------+-----------------------+ + %| NL_G | g | Constraint function . | + %+-----------+-------+-----------------------+ + % + % + %Usage: retval = nlpOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1168,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpSolverIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpSolverIn.m new file mode 100755 index 0000000..ef1f5de --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpSolverIn.m @@ -0,0 +1,61 @@ +function varargout = nlpSolverIn(varargin) + %Input arguments of an NLP Solver + % + %>Input scheme: casadi::NlpSolverInput (NLP_SOLVER_NUM_IN = 8) [nlpSolverIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| NLP_SOLVER_X0 | x0 | Decision variables, | + %| | | initial guess (nx x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_P | p | Value of fixed | + %| | | parameters (np x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LBX | lbx | Decision variables | + %| | | lower bound (nx x 1), | + %| | | default -inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_UBX | ubx | Decision variables | + %| | | upper bound (nx x 1), | + %| | | default +inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LBG | lbg | Constraints lower | + %| | | bound (ng x 1), | + %| | | default -inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_UBG | ubg | Constraints upper | + %| | | bound (ng x 1), | + %| | | default +inf . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_X0 | lam_x0 | Lagrange multipliers | + %| | | for bounds on X, | + %| | | initial guess (nx x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_G0 | lam_g0 | Lagrange multipliers | + %| | | for bounds on G, | + %| | | initial guess (ng x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = nlpSolverIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity(), n6 = "", x6 = casadi::Sparsity(), n7 = "", x7 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1175,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpSolverOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpSolverOut.m new file mode 100755 index 0000000..0b445aa --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/nlpSolverOut.m @@ -0,0 +1,52 @@ +function varargout = nlpSolverOut(varargin) + %Output arguments of an NLP Solver + % + %>Output scheme: casadi::NlpSolverOutput (NLP_SOLVER_NUM_OUT = 6) [nlpSolverOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| NLP_SOLVER_X | x | Decision variables at | + %| | | the optimal solution | + %| | | (nx x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_F | f | Cost function value at | + %| | | the optimal solution | + %| | | (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_G | g | Constraints function | + %| | | at the optimal | + %| | | solution (ng x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_X | lam_x | Lagrange multipliers | + %| | | for bounds on X at the | + %| | | solution (nx x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_G | lam_g | Lagrange multipliers | + %| | | for bounds on G at the | + %| | | solution (ng x 1) . | + %+------------------------+------------------------+------------------------+ + %| NLP_SOLVER_LAM_P | lam_p | Lagrange multipliers | + %| | | for bounds on P at the | + %| | | solution (np x 1) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = nlpSolverOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1176,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qcqpIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qcqpIn.m new file mode 100755 index 0000000..56c32be --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qcqpIn.m @@ -0,0 +1,71 @@ +function varargout = qcqpIn(varargin) + %Input arguments of a QP problem + % + %>Input scheme: casadi::QcqpSolverInput (QCQP_SOLVER_NUM_IN = 12) [qcqpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| QCQP_SOLVER_H | h | The square matrix H: | + %| | | sparse, (n x n). Only | + %| | | the lower triangular | + %| | | part is actually used. | + %| | | The matrix is assumed | + %| | | to be symmetrical. | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_G | g | The vector g: dense, | + %| | | (n x 1) . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_P | p | The horizontal stack | + %| | | of all Pi. Each Pi is | + %| | | sparse (n x n). Only | + %| | | the lower triangular | + %| | | part is actually used. | + %| | | The matrix is assumed | + %| | | to be symmetrical. | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_Q | q | The vertical stack of | + %| | | all qi: dense, (nq n x | + %| | | 1) . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_R | r | The vertical stack of | + %| | | all scalars ri (nq x | + %| | | 1) . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_A | a | The matrix A: sparse, | + %| | | (nc x n) - product | + %| | | with x must be dense. | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_LBA | lba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_UBA | uba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_LBX | lbx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_UBX | ubx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_X0 | x0 | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_LAM_X0 | lam_x0 | dense | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = qcqpIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity(), n6 = "", x6 = casadi::Sparsity(), n7 = "", x7 = casadi::Sparsity(), n8 = "", x8 = casadi::Sparsity(), n9 = "", x9 = casadi::Sparsity(), n10 = "", x10 = casadi::Sparsity(), n11 = "", x11 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. n9 is of type std::string const &. x9 is of type Sparsity. n10 is of type std::string const &. x10 is of type Sparsity. n11 is of type std::string const &. x11 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. n9 is of type std::string const &. x9 is of type Sparsity. n10 is of type std::string const &. x10 is of type Sparsity. n11 is of type std::string const &. x11 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1177,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qcqpOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qcqpOut.m new file mode 100755 index 0000000..da68607 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qcqpOut.m @@ -0,0 +1,40 @@ +function varargout = qcqpOut(varargin) + %Output arguments of an QP Solver + % + %>Output scheme: casadi::QcqpSolverOutput (QCQP_SOLVER_NUM_OUT = 4) [qcqpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| QCQP_SOLVER_X | x | The primal solution . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_COST | cost | The optimal cost . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to | + %| | | linear bounds . | + %+------------------------+------------------------+------------------------+ + %| QCQP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = qcqpOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1178,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qpIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qpIn.m new file mode 100755 index 0000000..fb0a014 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qpIn.m @@ -0,0 +1,55 @@ +function varargout = qpIn(varargin) + %Input arguments of a QP problem + % + %>Input scheme: casadi::QpSolverInput (QP_SOLVER_NUM_IN = 9) [qpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| QP_SOLVER_H | h | The square matrix H: | + %| | | sparse, (n x n). Only | + %| | | the lower triangular | + %| | | part is actually used. | + %| | | The matrix is assumed | + %| | | to be symmetrical. | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_G | g | The vector g: dense, | + %| | | (n x 1) . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_A | a | The matrix A: sparse, | + %| | | (nc x n) - product | + %| | | with x must be dense. | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LBA | lba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_UBA | uba | dense, (nc x 1) | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LBX | lbx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_UBX | ubx | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_X0 | x0 | dense, (n x 1) | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LAM_X0 | lam_x0 | dense | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = qpIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity(), n6 = "", x6 = casadi::Sparsity(), n7 = "", x7 = casadi::Sparsity(), n8 = "", x8 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1179,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qpOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qpOut.m new file mode 100755 index 0000000..b23d151 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/qpOut.m @@ -0,0 +1,40 @@ +function varargout = qpOut(varargin) + %Output arguments of an QP Solver + % + %>Output scheme: casadi::QpSolverOutput (QP_SOLVER_NUM_OUT = 4) [qpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| QP_SOLVER_X | x | The primal solution . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_COST | cost | The optimal cost . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to | + %| | | linear bounds . | + %+------------------------+------------------------+------------------------+ + %| QP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = qpOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1180,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/rdaeIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/rdaeIn.m new file mode 100755 index 0000000..696b350 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/rdaeIn.m @@ -0,0 +1,42 @@ +function varargout = rdaeIn(varargin) + %Input arguments of an ODE/DAE backward integration function + % + %>Input scheme: casadi::RDAEInput (RDAE_NUM_IN = 7) [rdaeIn] + % + %+-----------+-------+-------------------------------+ + %| Full name | Short | Description | + %+===========+=======+===============================+ + %| RDAE_RX | rx | Backward differential state . | + %+-----------+-------+-------------------------------+ + %| RDAE_RZ | rz | Backward algebraic state . | + %+-----------+-------+-------------------------------+ + %| RDAE_RP | rp | Backward parameter vector . | + %+-----------+-------+-------------------------------+ + %| RDAE_X | x | Forward differential state . | + %+-----------+-------+-------------------------------+ + %| RDAE_Z | z | Forward algebraic state . | + %+-----------+-------+-------------------------------+ + %| RDAE_P | p | Parameter vector . | + %+-----------+-------+-------------------------------+ + %| RDAE_T | t | Explicit time dependence . | + %+-----------+-------+-------------------------------+ + % + % + %Usage: retval = rdaeIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity(), n6 = "", x6 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1155,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/rdaeOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/rdaeOut.m new file mode 100755 index 0000000..8db1049 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/rdaeOut.m @@ -0,0 +1,34 @@ +function varargout = rdaeOut(varargin) + %Output arguments of an ODE/DAE backward integration function + % + %>Output scheme: casadi::RDAEOutput (RDAE_NUM_OUT = 3) [rdaeOut] + % + %+-----------+-------+-------------------------------------------+ + %| Full name | Short | Description | + %+===========+=======+===========================================+ + %| RDAE_ODE | ode | Right hand side of ODE. . | + %+-----------+-------+-------------------------------------------+ + %| RDAE_ALG | alg | Right hand side of algebraic equations. . | + %+-----------+-------+-------------------------------------------+ + %| RDAE_QUAD | quad | Right hand side of quadratures. . | + %+-----------+-------+-------------------------------------------+ + % + % + %Usage: retval = rdaeOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1156,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdpIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdpIn.m new file mode 100755 index 0000000..e778db1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdpIn.m @@ -0,0 +1,53 @@ +function varargout = sdpIn(varargin) + %Input arguments of a SDP problem + % + %>Input scheme: casadi::SDPInput (SDP_SOLVER_NUM_IN = 8) [sdpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SDP_SOLVER_F | f | The horizontal stack | + %| | | of all matrices F_i: ( | + %| | | m x nm) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_C | c | The vector c: ( n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_G | g | The matrix G: ( m x m) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_A | a | The matrix A: ( nc x | + %| | | n) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_LBA | lba | Lower bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_UBA | uba | Upper bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_LBX | lbx | Lower bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_UBX | ubx | Upper bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = sdpIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity(), n6 = "", x6 = casadi::Sparsity(), n7 = "", x7 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1181,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdpOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdpOut.m new file mode 100755 index 0000000..eb5ec02 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdpOut.m @@ -0,0 +1,56 @@ +function varargout = sdpOut(varargin) + %Output arguments of an SDP Solver + % + %>Output scheme: casadi::SDPOutput (SDP_SOLVER_NUM_OUT = 7) [sdpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SDP_SOLVER_X | x | The primal solution (n | + %| | | x 1) - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_P | p | The solution P (m x m) | + %| | | - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_DUAL | dual | The dual solution (m x | + %| | | m) - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_COST | cost | The primal optimal | + %| | | cost (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_DUAL_COST | dual_cost | The dual optimal cost | + %| | | (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to the | + %| | | linear constraints (nc | + %| | | x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds (n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = sdpOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity(), n6 = "", x6 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1182,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdqpIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdqpIn.m new file mode 100755 index 0000000..5697e34 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdqpIn.m @@ -0,0 +1,56 @@ +function varargout = sdqpIn(varargin) + %Input arguments of a SDQP problem + % + %>Input scheme: casadi::SDQPInput (SDQP_SOLVER_NUM_IN = 9) [sdqpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SDQP_SOLVER_H | h | The matrix H: sparse ( | + %| | | n x n) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_C | c | The vector c: ( n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_F | f | The horizontal stack | + %| | | of all matrices F_i: ( | + %| | | m x nm) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_G | g | The matrix G: ( m x m) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_A | a | The matrix A: ( nc x | + %| | | n) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_LBA | lba | Lower bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_UBA | uba | Upper bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_LBX | lbx | Lower bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_UBX | ubx | Upper bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = sdqpIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity(), n6 = "", x6 = casadi::Sparsity(), n7 = "", x7 = casadi::Sparsity(), n8 = "", x8 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1183,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdqpOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdqpOut.m new file mode 100755 index 0000000..94ab5a4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/sdqpOut.m @@ -0,0 +1,56 @@ +function varargout = sdqpOut(varargin) + %Output arguments of an SDQP Solver + % + %>Output scheme: casadi::SDQPOutput (SDQP_SOLVER_NUM_OUT = 7) [sdqpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SDQP_SOLVER_X | x | The primal solution (n | + %| | | x 1) - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_P | p | The solution P (m x m) | + %| | | - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_DUAL | dual | The dual solution (m x | + %| | | m) - may be used as | + %| | | initial guess . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_COST | cost | The primal optimal | + %| | | cost (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_DUAL_COST | dual_cost | The dual optimal cost | + %| | | (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to the | + %| | | linear constraints (nc | + %| | | x 1) . | + %+------------------------+------------------------+------------------------+ + %| SDQP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds (n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = sdqpOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity(), n6 = "", x6 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1184,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/simpleIRK.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/simpleIRK.m new file mode 100755 index 0000000..8fbee9b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/simpleIRK.m @@ -0,0 +1,36 @@ +function varargout = simpleIRK(varargin) + %Construct an implicit Runge-Kutta integrator using a collocation scheme The + %constructed function (which is of type MXFunction), has three inputs, + %corresponding to initial state (x0), parameter (p) and integration time (h) + %and one output, corresponding to final state (xf). + % + %Parameters: + %----------- + % + %f: ODE function with two inputs (x and p) and one output (xdot) + % + %N: Number of integrator steps + % + %order: Order of interpolating polynomials + % + %scheme: Collocation scheme, as excepted by collocationPoints function. + % + % + %Usage: retval = simpleIRK (f, N = 10, order = 4, scheme = "radau", solver = "newton", solver_options = casadi::Dict()) + % + %f is of type Function. N is of type int. order is of type int. scheme is of type std::string const &. solver is of type std::string const &. solver_options is of type casadi::Dict const &. f is of type Function. N is of type int. order is of type int. scheme is of type std::string const &. solver is of type std::string const &. solver_options is of type casadi::Dict const &. retval is of type MXFunction. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1222,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/simpleIntegrator.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/simpleIntegrator.m new file mode 100755 index 0000000..42380eb --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/simpleIntegrator.m @@ -0,0 +1,37 @@ +function varargout = simpleIntegrator(varargin) + %Simplified wrapper for the Integrator class Constructs an integrator using + %the same syntax as simpleRK and simpleIRK. The constructed function (which + %is of type MXFunction), has three inputs, corresponding to initial state + %(x0), parameter (p) and integration time (h) and one output, corresponding + %to final state (xf). + % + %Parameters: + %----------- + % + %f: ODE function with two inputs (x and p) and one output (xdot) + % + %N: Number of integrator steps + % + %order: Order of interpolating polynomials + % + %scheme: Collocation scheme, as excepted by collocationPoints function. + % + % + %Usage: retval = simpleIntegrator (f, integrator = "cvodes", integrator_options = casadi::Dict()) + % + %f is of type Function. integrator is of type std::string const &. integrator_options is of type casadi::Dict const &. f is of type Function. integrator is of type std::string const &. integrator_options is of type casadi::Dict const &. retval is of type MXFunction. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1223,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/simpleRK.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/simpleRK.m new file mode 100755 index 0000000..82e377e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/simpleRK.m @@ -0,0 +1,34 @@ +function varargout = simpleRK(varargin) + %Construct an explicit Runge-Kutta integrator The constructed function (which + %is of type MXFunction), has three inputs, corresponding to initial state + %(x0), parameter (p) and integration time (h) and one output, corresponding + %to final state (xf). + % + %Parameters: + %----------- + % + %f: ODE function with two inputs (x and p) and one output (xdot) + % + %N: Number of integrator steps + % + %order: Order of interpolating polynomials + % + % + %Usage: retval = simpleRK (f, N = 10, order = 4) + % + %f is of type Function. N is of type int. order is of type int. f is of type Function. N is of type int. order is of type int. retval is of type MXFunction. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1221,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/socpIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/socpIn.m new file mode 100755 index 0000000..364d7c6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/socpIn.m @@ -0,0 +1,62 @@ +function varargout = socpIn(varargin) + %Input arguments of a SOCP problem + % + %>Input scheme: casadi::SOCPInput (SOCP_SOLVER_NUM_IN = 10) [socpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SOCP_SOLVER_G | g | The horizontal stack | + %| | | of all matrices Gi: ( | + %| | | n x N) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_H | h | The vertical stack of | + %| | | all vectors hi: ( N x | + %| | | 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_E | e | The horizontal stack | + %| | | of all vectors ei: ( n | + %| | | x m) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_F | f | The vertical stack of | + %| | | all scalars fi: ( m x | + %| | | 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_C | c | The vector c: ( n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_A | a | The matrix A: ( nc x | + %| | | n) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_LBA | lba | Lower bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_UBA | uba | Upper bounds on Ax ( | + %| | | nc x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_LBX | lbx | Lower bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_UBX | ubx | Upper bounds on x ( n | + %| | | x 1 ) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = socpIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity(), n6 = "", x6 = casadi::Sparsity(), n7 = "", x7 = casadi::Sparsity(), n8 = "", x8 = casadi::Sparsity(), n9 = "", x9 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. n9 is of type std::string const &. x9 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. n9 is of type std::string const &. x9 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1185,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/socpOut.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/socpOut.m new file mode 100755 index 0000000..30fae4a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/socpOut.m @@ -0,0 +1,52 @@ +function varargout = socpOut(varargin) + %Output arguments of an SOCP Solver + % + %>Output scheme: casadi::SOCPOutput (SOCP_SOLVER_NUM_OUT = 6) [socpOut] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SOCP_SOLVER_X | x | The primal solution (n | + %| | | x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_COST | cost | The primal optimal | + %| | | cost (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_DUAL_COST | dual_cost | The dual optimal cost | + %| | | (1 x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_LAM_A | lam_a | The dual solution | + %| | | corresponding to the | + %| | | linear constraints (nc | + %| | | x 1) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_LAM_X | lam_x | The dual solution | + %| | | corresponding to | + %| | | simple bounds (n x 1) | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| SOCP_SOLVER_LAM_CONE | lam_cone | The dual solution | + %| | | correspoding to cone | + %| | | (2-norm) constraints | + %| | | (m x 1) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = socpOut (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1186,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/socpStruct.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/socpStruct.m new file mode 100755 index 0000000..6c4f5d2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/socpStruct.m @@ -0,0 +1,39 @@ +function varargout = socpStruct(varargin) + %Structure specification of an SOCP + % + %>Struct scheme: casadi::SOCPStruct ( = 3) [socpStruct] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| SOCP_STRUCT_G | g | The horizontal stack | + %| | | of all matrices Gi: ( | + %| | | n x N) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_STRUCT_E | e | The horizontal stack | + %| | | of all vectors ei: ( n | + %| | | x m) . | + %+------------------------+------------------------+------------------------+ + %| SOCP_STRUCT_A | a | The matrix A: ( nc x | + %| | | n) . | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = socpStruct (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1187,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/stabilizedQpIn.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/stabilizedQpIn.m new file mode 100755 index 0000000..6747fbd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/stabilizedQpIn.m @@ -0,0 +1,70 @@ +function varargout = stabilizedQpIn(varargin) + %Input arguments of a QP problem + % + %>Input scheme: casadi::StabilizedQpSolverInput (STABILIZED_QP_SOLVER_NUM_IN = 12) [stabilizedQpIn] + % + %+------------------------+------------------------+------------------------+ + %| Full name | Short | Description | + %+========================+========================+========================+ + %| STABILIZED_QP_SOLVER_H | h | The square matrix H: | + %| | | sparse, (n x n). Only | + %| | | the lower triangular | + %| | | part is actually used. | + %| | | The matrix is assumed | + %| | | to be symmetrical. | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_G | g | The vector g: dense, | + %| | | (n x 1) . | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_A | a | The matrix A: sparse, | + %| | | (nc x n) - product | + %| | | with x must be dense. | + %| | | . | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_L | lba | dense, (nc x 1) | + %| BA | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_U | uba | dense, (nc x 1) | + %| BA | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_L | lbx | dense, (n x 1) | + %| BX | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_U | ubx | dense, (n x 1) | + %| BX | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_X | x0 | dense, (n x 1) | + %| 0 | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_L | lam_x0 | dense | + %| AM_X0 | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_M | muR | dense (1 x 1) | + %| UR | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_M | muE | dense (nc x 1) | + %| UE | | | + %+------------------------+------------------------+------------------------+ + %| STABILIZED_QP_SOLVER_M | mu | dense (nc x 1) | + %| U | | | + %+------------------------+------------------------+------------------------+ + % + % + %Usage: retval = stabilizedQpIn (n0 = "", x0 = casadi::Sparsity(), n1 = "", x1 = casadi::Sparsity(), n2 = "", x2 = casadi::Sparsity(), n3 = "", x3 = casadi::Sparsity(), n4 = "", x4 = casadi::Sparsity(), n5 = "", x5 = casadi::Sparsity(), n6 = "", x6 = casadi::Sparsity(), n7 = "", x7 = casadi::Sparsity(), n8 = "", x8 = casadi::Sparsity(), n9 = "", x9 = casadi::Sparsity(), n10 = "", x10 = casadi::Sparsity(), n11 = "", x11 = casadi::Sparsity()) + % + %n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. n9 is of type std::string const &. x9 is of type Sparsity. n10 is of type std::string const &. x10 is of type Sparsity. n11 is of type std::string const &. x11 is of type Sparsity. n0 is of type std::string const &. x0 is of type Sparsity. n1 is of type std::string const &. x1 is of type Sparsity. n2 is of type std::string const &. x2 is of type Sparsity. n3 is of type std::string const &. x3 is of type Sparsity. n4 is of type std::string const &. x4 is of type Sparsity. n5 is of type std::string const &. x5 is of type Sparsity. n6 is of type std::string const &. x6 is of type Sparsity. n7 is of type std::string const &. x7 is of type Sparsity. n8 is of type std::string const &. x8 is of type Sparsity. n9 is of type std::string const &. x9 is of type Sparsity. n10 is of type std::string const &. x10 is of type Sparsity. n11 is of type std::string const &. x11 is of type Sparsity. retval is of type std::pair< std::map< std::string,casadi::Sparsity,std::less< std::string >,std::allocator< std::pair< std::string const,casadi::Sparsity > > >,std::vector< std::string,std::allocator< std::string > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(1188,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/substitute.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/substitute.m new file mode 100755 index 0000000..9289f03 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/substitute.m @@ -0,0 +1,30 @@ +function varargout = substitute(varargin) + %> MatType substitute(MatType ex, MatType v, MatType vdef) + %------------------------------------------------------------------------ + % + %Substitute variable v with expression vdef in an expression ex. + % + %> [MatType] substitute([MatType ] ex, [MatType ] v, [MatType ] vdef) + %------------------------------------------------------------------------ + % + %Substitute variable var with expression expr in multiple expressions. + % + % + %Usage: retval = substitute (ex, v, vdef) + % + %ex is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. v is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. vdef is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. ex is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. v is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. vdef is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. retval is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > >. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(900,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/substituteInPlace.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/substituteInPlace.m new file mode 100755 index 0000000..308b889 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/+casadi/substituteInPlace.m @@ -0,0 +1,24 @@ +function varargout = substituteInPlace(varargin) + %Inplace substitution with piggyback expressions Substitute variables v out + %of the expressions vdef sequentially, as well as out of a number of other + %expressions piggyback. + % + % + %Usage: substituteInPlace (v, inout_vdef, inout_ex, reverse = false) + % + %v is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > const &. inout_vdef is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > &. inout_ex is of type std::vector< casadi::Matrix< casadi::SXElement >,std::allocator< casadi::Matrix< casadi::SXElement > > > &. reverse is of type bool. + + try + + [varargout{1:max(1,nargout)}] = casadiMEX(901,varargin{:}); + + catch err + if (strcmp(err.identifier,'SWIG:OverloadError')) + msg = [swig_typename_convertor_cpp2matlab(err.message) 'You have: ' strjoin(cellfun(@swig_typename_convertor_matlab2cpp,varargin,'UniformOutput',false),', ')]; + throwAsCaller(MException(err.identifier,msg)); + else + rethrow(err); + end + end + +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/SwigMem.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/SwigMem.m new file mode 100755 index 0000000..c467bb0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/SwigMem.m @@ -0,0 +1,12 @@ +function varargout = SwigMem(varargin) + persistent mem + mlock + narginchk(0,1) + if nargin==0 + nargoutchk(0,1) + varargout{1} = mem; + else + nargoutchk(0,0) + mem = varargin{1}; + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/SwigRef.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/SwigRef.m new file mode 100755 index 0000000..1bf9b69 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/SwigRef.m @@ -0,0 +1,47 @@ +classdef SwigRef < handle + properties + swigPtr + end + methods(Static = true, Access = protected) + function obj = Null() + persistent obj_null + if isempty(obj_null) + obj_null = SwigRef(); + end + obj = obj_null; + end + end + methods + function disp(self) + disp(sprintf('',self.swigPtr)) + end + function varargout = subsref(self,s) + if numel(s)==1 + switch s.type + case '.' + [varargout{1}] = builtin('subsref',self,substruct('.',s.subs,'()',{})); + case '()' + [varargout{1:nargout}] = builtin('subsref',self,substruct('.','paren','()',s.subs)); + case '{}' + [varargout{1:nargout}] = builtin('subsref',self,substruct('.','brace','()',s.subs)); + end + else + [varargout{1:nargout}] = builtin('subsref',self,s); + end + end + function self = subsasgn(self,s,v) + if numel(s)==1 + switch s.type + case '.' + builtin('subsref',self,substruct('.',s.subs,'()',{v})); + case '()' + builtin('subsref',self,substruct('.','paren_asgn','()',{v, s.subs{:}})); + case '{}' + builtin('subsref',self,substruct('.','setbrace','()',{v, s.subs{:}})); + end + else + self = builtin('subsasgn',self,s,v); + end + end + end +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/Intrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/Intrin.h new file mode 100755 index 0000000..4376464 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/Intrin.h @@ -0,0 +1,784 @@ +/* ===-------- Intrin.h ---------------------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +/* Only include this if we're compiling for the windows platform. */ +#ifndef _MSC_VER +#include_next +#else + +#ifndef __INTRIN_H +#define __INTRIN_H + +/* First include the standard intrinsics. */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* And the random ones that aren't in those files. */ +__m64 _m_from_float(float); +__m64 _m_from_int(int _l); +void _m_prefetch(void *); +float _m_to_float(__m64); +int _m_to_int(__m64 _M); + +/* Other assorted instruction intrinsics. */ +void __addfsbyte(unsigned long, unsigned char); +void __addfsdword(unsigned long, unsigned long); +void __addfsword(unsigned long, unsigned short); +void __code_seg(const char *); +void __cpuid(int[4], int); +void __cpuidex(int[4], int, int); +void __debugbreak(void); +__int64 __emul(int, int); +unsigned __int64 __emulu(unsigned int, unsigned int); +void __cdecl __fastfail(unsigned int); +unsigned int __getcallerseflags(void); +void __halt(void); +unsigned char __inbyte(unsigned short); +void __inbytestring(unsigned short, unsigned char *, unsigned long); +void __incfsbyte(unsigned long); +void __incfsdword(unsigned long); +void __incfsword(unsigned long); +unsigned long __indword(unsigned short); +void __indwordstring(unsigned short, unsigned long *, unsigned long); +void __int2c(void); +void __invlpg(void *); +unsigned short __inword(unsigned short); +void __inwordstring(unsigned short, unsigned short *, unsigned long); +void __lidt(void *); +unsigned __int64 __ll_lshift(unsigned __int64, int); +__int64 __ll_rshift(__int64, int); +void __llwpcb(void *); +unsigned char __lwpins32(unsigned int, unsigned int, unsigned int); +void __lwpval32(unsigned int, unsigned int, unsigned int); +unsigned int __lzcnt(unsigned int); +unsigned short __lzcnt16(unsigned short); +void __movsb(unsigned char *, unsigned char const *, size_t); +void __movsd(unsigned long *, unsigned long const *, size_t); +void __movsw(unsigned short *, unsigned short const *, size_t); +void __nop(void); +void __nvreg_restore_fence(void); +void __nvreg_save_fence(void); +void __outbyte(unsigned short, unsigned char); +void __outbytestring(unsigned short, unsigned char *, unsigned long); +void __outdword(unsigned short, unsigned long); +void __outdwordstring(unsigned short, unsigned long *, unsigned long); +void __outword(unsigned short, unsigned short); +void __outwordstring(unsigned short, unsigned short *, unsigned long); +static __inline__ +unsigned int __popcnt(unsigned int); +static __inline__ +unsigned short __popcnt16(unsigned short); +unsigned __int64 __rdtsc(void); +unsigned __int64 __rdtscp(unsigned int *); +unsigned long __readcr0(void); +unsigned long __readcr2(void); +unsigned long __readcr3(void); +unsigned long __readcr5(void); +unsigned long __readcr8(void); +unsigned int __readdr(unsigned int); +unsigned int __readeflags(void); +unsigned char __readfsbyte(unsigned long); +unsigned long __readfsdword(unsigned long); +unsigned __int64 __readfsqword(unsigned long); +unsigned short __readfsword(unsigned long); +unsigned __int64 __readmsr(unsigned long); +unsigned __int64 __readpmc(unsigned long); +unsigned long __segmentlimit(unsigned long); +void __sidt(void *); +void *__slwpcb(void); +void __stosb(unsigned char *, unsigned char, size_t); +void __stosd(unsigned long *, unsigned long, size_t); +void __stosw(unsigned short *, unsigned short, size_t); +void __svm_clgi(void); +void __svm_invlpga(void *, int); +void __svm_skinit(int); +void __svm_stgi(void); +void __svm_vmload(size_t); +void __svm_vmrun(size_t); +void __svm_vmsave(size_t); +void __ud2(void); +unsigned __int64 __ull_rshift(unsigned __int64, int); +void __vmx_off(void); +void __vmx_vmptrst(unsigned __int64 *); +void __wbinvd(void); +void __writecr0(unsigned int); +void __writecr3(unsigned int); +void __writecr4(unsigned int); +void __writecr8(unsigned int); +void __writedr(unsigned int, unsigned int); +void __writeeflags(unsigned int); +void __writefsbyte(unsigned long, unsigned char); +void __writefsdword(unsigned long, unsigned long); +void __writefsqword(unsigned long, unsigned __int64); +void __writefsword(unsigned long, unsigned short); +void __writemsr(unsigned long, unsigned __int64); +static __inline__ +void *_AddressOfReturnAddress(void); +unsigned int _andn_u32(unsigned int, unsigned int); +unsigned int _bextr_u32(unsigned int, unsigned int, unsigned int); +unsigned int _bextr_u32(unsigned int, unsigned int, unsigned int); +unsigned int _bextri_u32(unsigned int, unsigned int); +static __inline__ +unsigned char _BitScanForward(unsigned long *_Index, unsigned long _Mask); +static __inline__ +unsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask); +static __inline__ +unsigned char _bittest(long const *, long); +static __inline__ +unsigned char _bittestandcomplement(long *, long); +static __inline__ +unsigned char _bittestandreset(long *, long); +static __inline__ +unsigned char _bittestandset(long *, long); +unsigned int _blcfill_u32(unsigned int); +unsigned int _blci_u32(unsigned int); +unsigned int _blcic_u32(unsigned int); +unsigned int _blcmsk_u32(unsigned int); +unsigned int _blcs_u32(unsigned int); +unsigned int _blsfill_u32(unsigned int); +unsigned int _blsi_u32(unsigned int); +unsigned int _blsic_u32(unsigned int); +unsigned int _blsmsk_u32(unsigned int); +unsigned int _blsmsk_u32(unsigned int); +unsigned int _blsr_u32(unsigned int); +unsigned int _blsr_u32(unsigned int); +unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64); +unsigned long __cdecl _byteswap_ulong(unsigned long); +unsigned short __cdecl _byteswap_ushort(unsigned short); +unsigned _bzhi_u32(unsigned int, unsigned int); +void __cdecl _disable(void); +void __cdecl _enable(void); +void __cdecl _fxrstor(void const *); +void __cdecl _fxsave(void *); +long _InterlockedAddLargeStatistic(__int64 volatile *_Addend, long _Value); +static __inline__ +long _InterlockedAnd(long volatile *_Value, long _Mask); +static __inline__ +short _InterlockedAnd16(short volatile *_Value, short _Mask); +static __inline__ +char _InterlockedAnd8(char volatile *_Value, char _Mask); +unsigned char _interlockedbittestandreset(long volatile *, long); +unsigned char _interlockedbittestandset(long volatile *, long); +static __inline__ +long __cdecl _InterlockedCompareExchange(long volatile *_Destination, + long _Exchange, long _Comparand); +long _InterlockedCompareExchange_HLEAcquire(long volatile *, long, long); +long _InterlockedCompareExchange_HLERelease(long volatile *, long, long); +static __inline__ +short _InterlockedCompareExchange16(short volatile *_Destination, + short _Exchange, short _Comparand); +static __inline__ +__int64 _InterlockedCompareExchange64(__int64 volatile *_Destination, + __int64 _Exchange, __int64 _Comparand); +__int64 _InterlockedcompareExchange64_HLEAcquire(__int64 volatile *, __int64, + __int64); +__int64 _InterlockedCompareExchange64_HLERelease(__int64 volatile *, __int64, + __int64); +static __inline__ +char _InterlockedCompareExchange8(char volatile *_Destination, char _Exchange, + char _Comparand); +void *_InterlockedCompareExchangePointer_HLEAcquire(void *volatile *, void *, + void *); +void *_InterlockedCompareExchangePointer_HLERelease(void *volatile *, void *, + void *); +static __inline__ +long __cdecl _InterlockedDecrement(long volatile *_Addend); +static __inline__ +short _InterlockedDecrement16(short volatile *_Addend); +static __inline__ +long __cdecl _InterlockedExchange(long volatile *_Target, long _Value); +static __inline__ +short _InterlockedExchange16(short volatile *_Target, short _Value); +static __inline__ +char _InterlockedExchange8(char volatile *_Target, char _Value); +static __inline__ +long __cdecl _InterlockedExchangeAdd(long volatile *_Addend, long _Value); +long _InterlockedExchangeAdd_HLEAcquire(long volatile *, long); +long _InterlockedExchangeAdd_HLERelease(long volatile *, long); +static __inline__ +char _InterlockedExchangeAdd8(char volatile *_Addend, char _Value); +static __inline__ +long __cdecl _InterlockedIncrement(long volatile *_Addend); +static __inline__ +short _InterlockedIncrement16(short volatile *_Addend); +static __inline__ +long _InterlockedOr(long volatile *_Value, long _Mask); +static __inline__ +short _InterlockedOr16(short volatile *_Value, short _Mask); +static __inline__ +char _InterlockedOr8(char volatile *_Value, char _Mask); +static __inline__ +long _InterlockedXor(long volatile *_Value, long _Mask); +static __inline__ +short _InterlockedXor16(short volatile *_Value, short _Mask); +static __inline__ +char _InterlockedXor8(char volatile *_Value, char _Mask); +void __cdecl _invpcid(unsigned int, void *); +static __inline__ +unsigned long __cdecl _lrotl(unsigned long, int); +static __inline__ +unsigned long __cdecl _lrotr(unsigned long, int); +static __inline__ +unsigned int _lzcnt_u32(unsigned int); +static __inline__ +void _ReadBarrier(void); +static __inline__ +void _ReadWriteBarrier(void); +static __inline__ +void *_ReturnAddress(void); +unsigned int _rorx_u32(unsigned int, const unsigned int); +int __cdecl _rdrand16_step(unsigned short *); +int __cdecl _rdrand32_step(unsigned int *); +static __inline__ +unsigned int __cdecl _rotl(unsigned int _Value, int _Shift); +static __inline__ +unsigned short _rotl16(unsigned short _Value, unsigned char _Shift); +static __inline__ +unsigned __int64 __cdecl _rotl64(unsigned __int64 _Value, int _Shift); +static __inline__ +unsigned char _rotl8(unsigned char _Value, unsigned char _Shift); +static __inline__ +unsigned int __cdecl _rotr(unsigned int _Value, int _Shift); +static __inline__ +unsigned short _rotr16(unsigned short _Value, unsigned char _Shift); +static __inline__ +unsigned __int64 __cdecl _rotr64(unsigned __int64 _Value, int _Shift); +static __inline__ +unsigned char _rotr8(unsigned char _Value, unsigned char _Shift); +int _sarx_i32(int, unsigned int); + +/* FIXME: Need definition for jmp_buf. + int __cdecl _setjmp(jmp_buf); */ + +unsigned int _shlx_u32(unsigned int, unsigned int); +unsigned int _shrx_u32(unsigned int, unsigned int); +void _Store_HLERelease(long volatile *, long); +void _Store64_HLERelease(__int64 volatile *, __int64); +void _StorePointer_HLERelease(void *volatile *, void *); +unsigned int _t1mskc_u32(unsigned int); +unsigned int _tzcnt_u32(unsigned int); +unsigned int _tzcnt_u32(unsigned int); +unsigned int _tzmsk_u32(unsigned int); +static __inline__ +void _WriteBarrier(void); +void _xabort(const unsigned int imm); +unsigned __int32 xbegin(void); +void _xend(void); +unsigned __int64 __cdecl _xgetbv(unsigned int); +void __cdecl _xrstor(void const *, unsigned __int64); +void __cdecl _xsave(void *, unsigned __int64); +void __cdecl _xsaveopt(void *, unsigned __int64); +void __cdecl _xsetbv(unsigned int, unsigned __int64); +unsigned char _xtest(void); + +/* These additional intrinsics are turned on in x64/amd64/x86_64 mode. */ +#ifdef __x86_64__ +void __addgsbyte(unsigned long, unsigned char); +void __addgsdword(unsigned long, unsigned long); +void __addgsqword(unsigned long, unsigned __int64); +void __addgsword(unsigned long, unsigned short); +void __faststorefence(void); +void __incgsbyte(unsigned long); +void __incgsdword(unsigned long); +void __incgsqword(unsigned long); +void __incgsword(unsigned long); +unsigned __int64 __popcnt64(unsigned __int64); +unsigned __int64 __shiftleft128(unsigned __int64 _LowPart, + unsigned __int64 _HighPart, + unsigned char _Shift); +unsigned __int64 __shiftright128(unsigned __int64 _LowPart, + unsigned __int64 _HighPart, + unsigned char _Shift); +void __stosq(unsigned __int64 *, unsigned __int64, size_t); +unsigned __int64 _andn_u64(unsigned __int64, unsigned __int64); +unsigned __int64 _bextr_u64(unsigned __int64, unsigned int, unsigned int); +unsigned __int64 _bextri_u64(unsigned __int64, unsigned int); +static __inline__ +unsigned char _BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask); +static __inline__ +unsigned char _BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask); +static __inline__ +unsigned char _bittest64(__int64 const *, __int64); +static __inline__ +unsigned char _bittestandcomplement64(__int64 *, __int64); +static __inline__ +unsigned char _bittestandreset64(__int64 *, __int64); +static __inline__ +unsigned char _bittestandset64(__int64 *, __int64); +unsigned __int64 _blcfill_u64(unsigned __int64); +unsigned __int64 _blci_u64(unsigned __int64); +unsigned __int64 _blcic_u64(unsigned __int64); +unsigned __int64 _blcmsk_u64(unsigned __int64); +unsigned __int64 _blcs_u64(unsigned __int64); +unsigned __int64 _blsfill_u64(unsigned __int64); +unsigned __int64 _blsi_u64(unsigned __int64); +unsigned __int64 _blsic_u64(unsigned __int64); +unsigned __int64 _blmsk_u64(unsigned __int64); +unsigned __int64 _blsr_u64(unsigned __int64); +unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64); +unsigned __int64 _bzhi_u64(unsigned __int64, unsigned int); +void __cdecl _fxrstor64(void const *); +void __cdecl _fxsave64(void *); +long _InterlockedAnd_np(long volatile *_Value, long _Mask); +short _InterlockedAnd16_np(short volatile *_Value, short _Mask); +__int64 _InterlockedAnd64_np(__int64 volatile *_Value, __int64 _Mask); +char _InterlockedAnd8_np(char volatile *_Value, char _Mask); +unsigned char _interlockedbittestandreset64(__int64 volatile *, __int64); +unsigned char _interlockedbittestandset64(__int64 volatile *, __int64); +long _InterlockedCompareExchange_np(long volatile *_Destination, long _Exchange, + long _Comparand); +unsigned char _InterlockedCompareExchange128(__int64 volatile *_Destination, + __int64 _ExchangeHigh, + __int64 _ExchangeLow, + __int64 *_CompareandResult); +unsigned char _InterlockedCompareExchange128_np(__int64 volatile *_Destination, + __int64 _ExchangeHigh, + __int64 _ExchangeLow, + __int64 *_ComparandResult); +short _InterlockedCompareExchange16_np(short volatile *_Destination, + short _Exchange, short _Comparand); +__int64 _InterlockedCompareExchange64_np(__int64 volatile *_Destination, + __int64 _Exchange, __int64 _Comparand); +void *_InterlockedCompareExchangePointer_np(void *volatile *_Destination, + void *_Exchange, void *_Comparand); +long _InterlockedOr_np(long volatile *_Value, long _Mask); +short _InterlockedOr16_np(short volatile *_Value, short _Mask); +__int64 _InterlockedOr64_np(__int64 volatile *_Value, __int64 _Mask); +char _InterlockedOr8_np(char volatile *_Value, char _Mask); +long _InterlockedXor_np(long volatile *_Value, long _Mask); +short _InterlockedXor16_np(short volatile *_Value, short _Mask); +__int64 _InterlockedXor64_np(__int64 volatile *_Value, __int64 _Mask); +char _InterlockedXor8_np(char volatile *_Value, char _Mask); +unsigned __int64 _lzcnt_u64(unsigned __int64); +__int64 _mul128(__int64 _Multiplier, __int64 _Multiplicand, + __int64 *_HighProduct); +unsigned int __cdecl _readfsbase_u32(void); +unsigned __int64 __cdecl _readfsbase_u64(void); +unsigned int __cdecl _readgsbase_u32(void); +unsigned __int64 __cdecl _readgsbase_u64(void); +unsigned __int64 _rorx_u64(unsigned __int64, const unsigned int); +unsigned __int64 _tzcnt_u64(unsigned __int64); +unsigned __int64 _tzmsk_u64(unsigned __int64); +unsigned __int64 _umul128(unsigned __int64 _Multiplier, + unsigned __int64 _Multiplicand, + unsigned __int64 *_HighProduct); +void __cdecl _writefsbase_u32(unsigned int); +void _cdecl _writefsbase_u64(unsigned __int64); +void __cdecl _writegsbase_u32(unsigned int); +void __cdecl _writegsbase_u64(unsigned __int64); +void __cdecl _xrstor64(void const *, unsigned __int64); +void __cdecl _xsave64(void *, unsigned __int64); +void __cdecl _xsaveopt64(void *, unsigned __int64); + +#endif /* __x86_64__ */ + +/*----------------------------------------------------------------------------*\ +|* Bit Twiddling +\*----------------------------------------------------------------------------*/ +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_rotl8(unsigned char _Value, unsigned char _Shift) { + _Shift &= 0x7; + return _Shift ? (_Value << _Shift) | (_Value >> (8 - _Shift)) : _Value; +} +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_rotr8(unsigned char _Value, unsigned char _Shift) { + _Shift &= 0x7; + return _Shift ? (_Value >> _Shift) | (_Value << (8 - _Shift)) : _Value; +} +static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__)) +_rotl16(unsigned short _Value, unsigned char _Shift) { + _Shift &= 0xf; + return _Shift ? (_Value << _Shift) | (_Value >> (16 - _Shift)) : _Value; +} +static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__)) +_rotr16(unsigned short _Value, unsigned char _Shift) { + _Shift &= 0xf; + return _Shift ? (_Value >> _Shift) | (_Value << (16 - _Shift)) : _Value; +} +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_rotl(unsigned int _Value, int _Shift) { + _Shift &= 0x1f; + return _Shift ? (_Value << _Shift) | (_Value >> (32 - _Shift)) : _Value; +} +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_rotr(unsigned int _Value, int _Shift) { + _Shift &= 0x1f; + return _Shift ? (_Value >> _Shift) | (_Value << (32 - _Shift)) : _Value; +} +static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) +_lrotl(unsigned long _Value, int _Shift) { + _Shift &= 0x1f; + return _Shift ? (_Value << _Shift) | (_Value >> (32 - _Shift)) : _Value; +} +static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__)) +_lrotr(unsigned long _Value, int _Shift) { + _Shift &= 0x1f; + return _Shift ? (_Value >> _Shift) | (_Value << (32 - _Shift)) : _Value; +} +static +__inline__ unsigned __int64 __attribute__((__always_inline__, __nodebug__)) +_rotl64(unsigned __int64 _Value, int _Shift) { + _Shift &= 0x3f; + return _Shift ? (_Value << _Shift) | (_Value >> (64 - _Shift)) : _Value; +} +static +__inline__ unsigned __int64 __attribute__((__always_inline__, __nodebug__)) +_rotr64(unsigned __int64 _Value, int _Shift) { + _Shift &= 0x3f; + return _Shift ? (_Value >> _Shift) | (_Value << (64 - _Shift)) : _Value; +} +/*----------------------------------------------------------------------------*\ +|* Bit Counting and Testing +\*----------------------------------------------------------------------------*/ +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_BitScanForward(unsigned long *_Index, unsigned long _Mask) { + if (!_Mask) + return 0; + *_Index = __builtin_ctzl(_Mask); + return 1; +} +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_BitScanReverse(unsigned long *_Index, unsigned long _Mask) { + if (!_Mask) + return 0; + *_Index = 31 - __builtin_clzl(_Mask); + return 1; +} +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_lzcnt_u32(unsigned int a) { + if (!a) + return 32; + return __builtin_clzl(a); +} +static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__)) +__popcnt16(unsigned short value) { + return __builtin_popcount((int)value); +} +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__popcnt(unsigned int value) { + return __builtin_popcount(value); +} +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_bittest(long const *a, long b) { + return (*a >> b) & 1; +} +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_bittestandcomplement(long *a, long b) { + unsigned char x = (*a >> b) & 1; + *a = *a ^ (1 << b); + return x; +} +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_bittestandreset(long *a, long b) { + unsigned char x = (*a >> b) & 1; + *a = *a & ~(1 << b); + return x; +} +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_bittestandset(long *a, long b) { + unsigned char x = (*a >> b) & 1; + *a = *a | (1 << b); + return x; +} +#ifdef __x86_64__ +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask) { + if (!_Mask) + return 0; + *_Index = __builtin_ctzll(_Mask); + return 1; +} +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask) { + if (!_Mask) + return 0; + *_Index = 63 - __builtin_clzll(_Mask); + return 1; +} +static +__inline__ unsigned __int64 __attribute__((__always_inline__, __nodebug__)) +_lzcnt_u64(unsigned __int64 a) { + if (!a) + return 64; + return __builtin_clzll(a); +} +static __inline__ +unsigned __int64 __attribute__((__always_inline__, __nodebug__)) + __popcnt64(unsigned __int64 value) { + return __builtin_popcountll(value); +} +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_bittest64(__int64 const *a, __int64 b) { + return (*a >> b) & 1; +} +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_bittestandcomplement64(__int64 *a, __int64 b) { + unsigned char x = (*a >> b) & 1; + *a = *a ^ (1ll << b); + return x; +} +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_bittestandreset64(__int64 *a, __int64 b) { + unsigned char x = (*a >> b) & 1; + *a = *a & ~(1ll << b); + return x; +} +static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__)) +_bittestandset64(__int64 *a, __int64 b) { + unsigned char x = (*a >> b) & 1; + *a = *a | (1ll << b); + return x; +} +#endif +/*----------------------------------------------------------------------------*\ +|* Interlocked Exchange Add +\*----------------------------------------------------------------------------*/ +static __inline__ char __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchangeAdd8(char volatile *_Addend, char _Value) { + return __atomic_add_fetch(_Addend, _Value, 0) - _Value; +} +static __inline__ short __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchangeAdd16(short volatile *_Addend, short _Value) { + return __atomic_add_fetch(_Addend, _Value, 0) - _Value; +} +static __inline__ long __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchangeAdd(long volatile *_Addend, long _Value) { + return __atomic_add_fetch(_Addend, _Value, 0) - _Value; +} +#ifdef __x86_64__ +static __inline__ __int64 __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchangeAdd64(__int64 volatile *_Addend, __int64 _Value) { + return __atomic_add_fetch(_Addend, _Value, 0) - _Value; +} +#endif +/*----------------------------------------------------------------------------*\ +|* Interlocked Exchange Sub +\*----------------------------------------------------------------------------*/ +static __inline__ char __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchangeSub8(char volatile *_Subend, char _Value) { + return __atomic_sub_fetch(_Subend, _Value, 0) + _Value; +} +static __inline__ short __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchangeSub16(short volatile *_Subend, short _Value) { + return __atomic_sub_fetch(_Subend, _Value, 0) + _Value; +} +static __inline__ long __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchangeSub(long volatile *_Subend, long _Value) { + return __atomic_sub_fetch(_Subend, _Value, 0) + _Value; +} +#ifdef __x86_64__ +static __inline__ __int64 __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchangeSub64(__int64 volatile *_Subend, __int64 _Value) { + return __atomic_sub_fetch(_Subend, _Value, 0) + _Value; +} +#endif +/*----------------------------------------------------------------------------*\ +|* Interlocked Increment +\*----------------------------------------------------------------------------*/ +static __inline__ char __attribute__((__always_inline__, __nodebug__)) +_InterlockedIncrement16(char volatile *_Value) { + return __atomic_add_fetch(_Value, 1, 0); +} +static __inline__ long __attribute__((__always_inline__, __nodebug__)) +_InterlockedIncrement(long volatile *_Value) { + return __atomic_add_fetch(_Value, 1, 0); +} +#ifdef __x86_64__ +static __inline__ __int64 __attribute__((__always_inline__, __nodebug__)) +_InterlockedIncrement64(__int64 volatile *_Value) { + return __atomic_add_fetch(_Value, 1, 0); +} +#endif +/*----------------------------------------------------------------------------*\ +|* Interlocked Decrement +\*----------------------------------------------------------------------------*/ +static __inline__ char __attribute__((__always_inline__, __nodebug__)) +_InterlockedDecrement16(char volatile *_Value) { + return __atomic_sub_fetch(_Value, 1, 0); +} +static __inline__ long __attribute__((__always_inline__, __nodebug__)) +_InterlockedDecrement(long volatile *_Value) { + return __atomic_sub_fetch(_Value, 1, 0); +} +#ifdef __x86_64__ +static __inline__ __int64 __attribute__((__always_inline__, __nodebug__)) +_InterlockedDecrement64(__int64 volatile *_Value) { + return __atomic_sub_fetch(_Value, 1, 0); +} +#endif +/*----------------------------------------------------------------------------*\ +|* Interlocked And +\*----------------------------------------------------------------------------*/ +static __inline__ char __attribute__((__always_inline__, __nodebug__)) +_InterlockedAnd8(char volatile *_Value, char _Mask) { + return __atomic_and_fetch(_Value, _Mask, 0); +} +static __inline__ short __attribute__((__always_inline__, __nodebug__)) +_InterlockedAnd16(short volatile *_Value, short _Mask) { + return __atomic_and_fetch(_Value, _Mask, 0); +} +static __inline__ long __attribute__((__always_inline__, __nodebug__)) +_InterlockedAnd(long volatile *_Value, long _Mask) { + return __atomic_and_fetch(_Value, _Mask, 0); +} +#ifdef __x86_64__ +static __inline__ __int64 __attribute__((__always_inline__, __nodebug__)) +_InterlockedAnd64(__int64 volatile *_Value, __int64 _Mask) { + return __atomic_and_fetch(_Value, _Mask, 0); +} +#endif +/*----------------------------------------------------------------------------*\ +|* Interlocked Or +\*----------------------------------------------------------------------------*/ +static __inline__ char __attribute__((__always_inline__, __nodebug__)) +_InterlockedOr8(char volatile *_Value, char _Mask) { + return __atomic_or_fetch(_Value, _Mask, 0); +} +static __inline__ short __attribute__((__always_inline__, __nodebug__)) +_InterlockedOr16(short volatile *_Value, short _Mask) { + return __atomic_or_fetch(_Value, _Mask, 0); +} +static __inline__ long __attribute__((__always_inline__, __nodebug__)) +_InterlockedOr(long volatile *_Value, long _Mask) { + return __atomic_or_fetch(_Value, _Mask, 0); +} +#ifdef __x86_64__ +static __inline__ __int64 __attribute__((__always_inline__, __nodebug__)) +_InterlockedOr64(__int64 volatile *_Value, __int64 _Mask) { + return __atomic_or_fetch(_Value, _Mask, 0); +} +#endif +/*----------------------------------------------------------------------------*\ +|* Interlocked Xor +\*----------------------------------------------------------------------------*/ +static __inline__ char __attribute__((__always_inline__, __nodebug__)) +_InterlockedXor8(char volatile *_Value, char _Mask) { + return __atomic_xor_fetch(_Value, _Mask, 0); +} +static __inline__ short __attribute__((__always_inline__, __nodebug__)) +_InterlockedXor16(short volatile *_Value, short _Mask) { + return __atomic_xor_fetch(_Value, _Mask, 0); +} +static __inline__ long __attribute__((__always_inline__, __nodebug__)) +_InterlockedXor(long volatile *_Value, long _Mask) { + return __atomic_xor_fetch(_Value, _Mask, 0); +} +#ifdef __x86_64__ +static __inline__ __int64 __attribute__((__always_inline__, __nodebug__)) +_InterlockedXor64(__int64 volatile *_Value, __int64 _Mask) { + return __atomic_xor_fetch(_Value, _Mask, 0); +} +#endif +/*----------------------------------------------------------------------------*\ +|* Interlocked Exchange +\*----------------------------------------------------------------------------*/ +static __inline__ char __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchange8(char volatile *_Target, char _Value) { + __atomic_exchange(_Target, &_Value, &_Value, 0); + return _Value; +} +static __inline__ short __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchange16(short volatile *_Target, short _Value) { + __atomic_exchange(_Target, &_Value, &_Value, 0); + return _Value; +} +static __inline__ long __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchange(long volatile *_Target, long _Value) { + __atomic_exchange(_Target, &_Value, &_Value, 0); + return _Value; +} +#ifdef __x86_64__ +static __inline__ __int64 __attribute__((__always_inline__, __nodebug__)) +_InterlockedExchange64(__int64 volatile *_Target, __int64 _Value) { + __atomic_exchange(_Target, &_Value, &_Value, 0); + return _Value; +} +#endif +/*----------------------------------------------------------------------------*\ +|* Interlocked Compare Exchange +\*----------------------------------------------------------------------------*/ +static __inline__ char __attribute__((__always_inline__, __nodebug__)) +_InterlockedCompareExchange8(char volatile *_Destination, + char _Exchange, char _Comparand) { + __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 0, 0); + return _Comparand; +} +static __inline__ short __attribute__((__always_inline__, __nodebug__)) +_InterlockedCompareExchange16(short volatile *_Destination, + short _Exchange, short _Comparand) { + __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 0, 0); + return _Comparand; +} +static __inline__ long __attribute__((__always_inline__, __nodebug__)) +_InterlockedCompareExchange(long volatile *_Destination, + long _Exchange, long _Comparand) { + __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 0, 0); + return _Comparand; +} +#ifdef __x86_64__ +static __inline__ __int64 __attribute__((__always_inline__, __nodebug__)) +_InterlockedCompareExchange64(__int64 volatile *_Destination, + __int64 _Exchange, __int64 _Comparand) { + __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 0, 0); + return _Comparand; +} +#endif +/*----------------------------------------------------------------------------*\ +|* Barriers +\*----------------------------------------------------------------------------*/ +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +__attribute__((deprecated("use other intrinsics or C++11 atomics instead"))) +_ReadWriteBarrier(void) { + __asm__ volatile ("" : : : "memory"); +} +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +__attribute__((deprecated("use other intrinsics or C++11 atomics instead"))) +_ReadBarrier(void) { + __asm__ volatile ("" : : : "memory"); +} +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +__attribute__((deprecated("use other intrinsics or C++11 atomics instead"))) +_WriteBarrier(void) { + __asm__ volatile ("" : : : "memory"); +} +/*----------------------------------------------------------------------------*\ +|* Misc +\*----------------------------------------------------------------------------*/ +static __inline__ void * __attribute__((__always_inline__, __nodebug__)) +_AddressOfReturnAddress(void) { + return (void*)((char*)__builtin_frame_address(0) + sizeof(void*)); +} +static __inline__ void * __attribute__((__always_inline__, __nodebug__)) +_ReturnAddress(void) { + return __builtin_return_address(0); +} + +#ifdef __cplusplus +} +#endif + +#endif /* __INTRIN_H */ +#endif /* _MSC_VER */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/__wmmintrin_aes.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/__wmmintrin_aes.h new file mode 100755 index 0000000..2bfa027 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/__wmmintrin_aes.h @@ -0,0 +1,67 @@ +/*===---- __wmmintrin_aes.h - AES intrinsics -------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ +#ifndef _WMMINTRIN_AES_H +#define _WMMINTRIN_AES_H + +#include + +#if !defined (__AES__) +# error "AES instructions not enabled" +#else + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_aesenc_si128(__m128i __V, __m128i __R) +{ + return (__m128i)__builtin_ia32_aesenc128(__V, __R); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_aesenclast_si128(__m128i __V, __m128i __R) +{ + return (__m128i)__builtin_ia32_aesenclast128(__V, __R); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_aesdec_si128(__m128i __V, __m128i __R) +{ + return (__m128i)__builtin_ia32_aesdec128(__V, __R); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_aesdeclast_si128(__m128i __V, __m128i __R) +{ + return (__m128i)__builtin_ia32_aesdeclast128(__V, __R); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_aesimc_si128(__m128i __V) +{ + return (__m128i)__builtin_ia32_aesimc128(__V); +} + +#define _mm_aeskeygenassist_si128(C, R) \ + __builtin_ia32_aeskeygenassist128((C), (R)) + +#endif + +#endif /* _WMMINTRIN_AES_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/__wmmintrin_pclmul.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/__wmmintrin_pclmul.h new file mode 100755 index 0000000..8d1f1b7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/__wmmintrin_pclmul.h @@ -0,0 +1,34 @@ +/*===---- __wmmintrin_pclmul.h - AES intrinsics ----------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ +#ifndef _WMMINTRIN_PCLMUL_H +#define _WMMINTRIN_PCLMUL_H + +#if !defined (__PCLMUL__) +# error "PCLMUL instruction is not enabled" +#else +#define _mm_clmulepi64_si128(__X, __Y, __I) \ + ((__m128i)__builtin_ia32_pclmulqdq128((__v2di)(__m128i)(__X), \ + (__v2di)(__m128i)(__Y), (char)(__I))) +#endif + +#endif /* _WMMINTRIN_PCLMUL_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/altivec.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/altivec.h new file mode 100755 index 0000000..74ce08a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/altivec.h @@ -0,0 +1,11856 @@ +/*===---- altivec.h - Standard header for type generic math ---------------===*\ + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * +\*===----------------------------------------------------------------------===*/ + +#ifndef __ALTIVEC_H +#define __ALTIVEC_H + +#ifndef __ALTIVEC__ +#error "AltiVec support not enabled" +#endif + +/* constants for mapping CR6 bits to predicate result. */ + +#define __CR6_EQ 0 +#define __CR6_EQ_REV 1 +#define __CR6_LT 2 +#define __CR6_LT_REV 3 + +#define __ATTRS_o_ai __attribute__((__overloadable__, __always_inline__)) + +static vector signed char __ATTRS_o_ai +vec_perm(vector signed char __a, vector signed char __b, vector unsigned char __c); + +static vector unsigned char __ATTRS_o_ai +vec_perm(vector unsigned char __a, + vector unsigned char __b, + vector unsigned char __c); + +static vector bool char __ATTRS_o_ai +vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c); + +static vector short __ATTRS_o_ai +vec_perm(vector short __a, vector short __b, vector unsigned char __c); + +static vector unsigned short __ATTRS_o_ai +vec_perm(vector unsigned short __a, + vector unsigned short __b, + vector unsigned char __c); + +static vector bool short __ATTRS_o_ai +vec_perm(vector bool short __a, vector bool short __b, vector unsigned char __c); + +static vector pixel __ATTRS_o_ai +vec_perm(vector pixel __a, vector pixel __b, vector unsigned char __c); + +static vector int __ATTRS_o_ai +vec_perm(vector int __a, vector int __b, vector unsigned char __c); + +static vector unsigned int __ATTRS_o_ai +vec_perm(vector unsigned int __a, vector unsigned int __b, vector unsigned char __c); + +static vector bool int __ATTRS_o_ai +vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c); + +static vector float __ATTRS_o_ai +vec_perm(vector float __a, vector float __b, vector unsigned char __c); + +/* vec_abs */ + +#define __builtin_altivec_abs_v16qi vec_abs +#define __builtin_altivec_abs_v8hi vec_abs +#define __builtin_altivec_abs_v4si vec_abs + +static vector signed char __ATTRS_o_ai +vec_abs(vector signed char __a) +{ + return __builtin_altivec_vmaxsb(__a, -__a); +} + +static vector signed short __ATTRS_o_ai +vec_abs(vector signed short __a) +{ + return __builtin_altivec_vmaxsh(__a, -__a); +} + +static vector signed int __ATTRS_o_ai +vec_abs(vector signed int __a) +{ + return __builtin_altivec_vmaxsw(__a, -__a); +} + +static vector float __ATTRS_o_ai +vec_abs(vector float __a) +{ + vector unsigned int __res = (vector unsigned int)__a + & (vector unsigned int)(0x7FFFFFFF); + return (vector float)__res; +} + +/* vec_abss */ + +#define __builtin_altivec_abss_v16qi vec_abss +#define __builtin_altivec_abss_v8hi vec_abss +#define __builtin_altivec_abss_v4si vec_abss + +static vector signed char __ATTRS_o_ai +vec_abss(vector signed char __a) +{ + return __builtin_altivec_vmaxsb + (__a, __builtin_altivec_vsubsbs((vector signed char)(0), __a)); +} + +static vector signed short __ATTRS_o_ai +vec_abss(vector signed short __a) +{ + return __builtin_altivec_vmaxsh + (__a, __builtin_altivec_vsubshs((vector signed short)(0), __a)); +} + +static vector signed int __ATTRS_o_ai +vec_abss(vector signed int __a) +{ + return __builtin_altivec_vmaxsw + (__a, __builtin_altivec_vsubsws((vector signed int)(0), __a)); +} + +/* vec_add */ + +static vector signed char __ATTRS_o_ai +vec_add(vector signed char __a, vector signed char __b) +{ + return __a + __b; +} + +static vector signed char __ATTRS_o_ai +vec_add(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a + __b; +} + +static vector signed char __ATTRS_o_ai +vec_add(vector signed char __a, vector bool char __b) +{ + return __a + (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_add(vector unsigned char __a, vector unsigned char __b) +{ + return __a + __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_add(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a + __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_add(vector unsigned char __a, vector bool char __b) +{ + return __a + (vector unsigned char)__b; +} + +static vector short __ATTRS_o_ai +vec_add(vector short __a, vector short __b) +{ + return __a + __b; +} + +static vector short __ATTRS_o_ai +vec_add(vector bool short __a, vector short __b) +{ + return (vector short)__a + __b; +} + +static vector short __ATTRS_o_ai +vec_add(vector short __a, vector bool short __b) +{ + return __a + (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_add(vector unsigned short __a, vector unsigned short __b) +{ + return __a + __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_add(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a + __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_add(vector unsigned short __a, vector bool short __b) +{ + return __a + (vector unsigned short)__b; +} + +static vector int __ATTRS_o_ai +vec_add(vector int __a, vector int __b) +{ + return __a + __b; +} + +static vector int __ATTRS_o_ai +vec_add(vector bool int __a, vector int __b) +{ + return (vector int)__a + __b; +} + +static vector int __ATTRS_o_ai +vec_add(vector int __a, vector bool int __b) +{ + return __a + (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_add(vector unsigned int __a, vector unsigned int __b) +{ + return __a + __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_add(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a + __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_add(vector unsigned int __a, vector bool int __b) +{ + return __a + (vector unsigned int)__b; +} + +static vector float __ATTRS_o_ai +vec_add(vector float __a, vector float __b) +{ + return __a + __b; +} + +/* vec_vaddubm */ + +#define __builtin_altivec_vaddubm vec_vaddubm + +static vector signed char __ATTRS_o_ai +vec_vaddubm(vector signed char __a, vector signed char __b) +{ + return __a + __b; +} + +static vector signed char __ATTRS_o_ai +vec_vaddubm(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a + __b; +} + +static vector signed char __ATTRS_o_ai +vec_vaddubm(vector signed char __a, vector bool char __b) +{ + return __a + (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vaddubm(vector unsigned char __a, vector unsigned char __b) +{ + return __a + __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vaddubm(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a + __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vaddubm(vector unsigned char __a, vector bool char __b) +{ + return __a + (vector unsigned char)__b; +} + +/* vec_vadduhm */ + +#define __builtin_altivec_vadduhm vec_vadduhm + +static vector short __ATTRS_o_ai +vec_vadduhm(vector short __a, vector short __b) +{ + return __a + __b; +} + +static vector short __ATTRS_o_ai +vec_vadduhm(vector bool short __a, vector short __b) +{ + return (vector short)__a + __b; +} + +static vector short __ATTRS_o_ai +vec_vadduhm(vector short __a, vector bool short __b) +{ + return __a + (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vadduhm(vector unsigned short __a, vector unsigned short __b) +{ + return __a + __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vadduhm(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a + __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vadduhm(vector unsigned short __a, vector bool short __b) +{ + return __a + (vector unsigned short)__b; +} + +/* vec_vadduwm */ + +#define __builtin_altivec_vadduwm vec_vadduwm + +static vector int __ATTRS_o_ai +vec_vadduwm(vector int __a, vector int __b) +{ + return __a + __b; +} + +static vector int __ATTRS_o_ai +vec_vadduwm(vector bool int __a, vector int __b) +{ + return (vector int)__a + __b; +} + +static vector int __ATTRS_o_ai +vec_vadduwm(vector int __a, vector bool int __b) +{ + return __a + (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vadduwm(vector unsigned int __a, vector unsigned int __b) +{ + return __a + __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vadduwm(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a + __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vadduwm(vector unsigned int __a, vector bool int __b) +{ + return __a + (vector unsigned int)__b; +} + +/* vec_vaddfp */ + +#define __builtin_altivec_vaddfp vec_vaddfp + +static vector float __attribute__((__always_inline__)) +vec_vaddfp(vector float __a, vector float __b) +{ + return __a + __b; +} + +/* vec_addc */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_addc(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vaddcuw(__a, __b); +} + +/* vec_vaddcuw */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_vaddcuw(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vaddcuw(__a, __b); +} + +/* vec_adds */ + +static vector signed char __ATTRS_o_ai +vec_adds(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vaddsbs(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_adds(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vaddsbs((vector signed char)__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_adds(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vaddsbs(__a, (vector signed char)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_adds(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vaddubs(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_adds(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vaddubs((vector unsigned char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_adds(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b); +} + +static vector short __ATTRS_o_ai +vec_adds(vector short __a, vector short __b) +{ + return __builtin_altivec_vaddshs(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_adds(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vaddshs((vector short)__a, __b); +} + +static vector short __ATTRS_o_ai +vec_adds(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vaddshs(__a, (vector short)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_adds(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vadduhs(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_adds(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vadduhs((vector unsigned short)__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_adds(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b); +} + +static vector int __ATTRS_o_ai +vec_adds(vector int __a, vector int __b) +{ + return __builtin_altivec_vaddsws(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_adds(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vaddsws((vector int)__a, __b); +} + +static vector int __ATTRS_o_ai +vec_adds(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vaddsws(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_adds(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vadduws(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_adds(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vadduws((vector unsigned int)__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_adds(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vadduws(__a, (vector unsigned int)__b); +} + +/* vec_vaddsbs */ + +static vector signed char __ATTRS_o_ai +vec_vaddsbs(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vaddsbs(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_vaddsbs(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vaddsbs((vector signed char)__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_vaddsbs(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vaddsbs(__a, (vector signed char)__b); +} + +/* vec_vaddubs */ + +static vector unsigned char __ATTRS_o_ai +vec_vaddubs(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vaddubs(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vaddubs(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vaddubs((vector unsigned char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vaddubs(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vaddubs(__a, (vector unsigned char)__b); +} + +/* vec_vaddshs */ + +static vector short __ATTRS_o_ai +vec_vaddshs(vector short __a, vector short __b) +{ + return __builtin_altivec_vaddshs(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_vaddshs(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vaddshs((vector short)__a, __b); +} + +static vector short __ATTRS_o_ai +vec_vaddshs(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vaddshs(__a, (vector short)__b); +} + +/* vec_vadduhs */ + +static vector unsigned short __ATTRS_o_ai +vec_vadduhs(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vadduhs(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vadduhs(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vadduhs((vector unsigned short)__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vadduhs(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vadduhs(__a, (vector unsigned short)__b); +} + +/* vec_vaddsws */ + +static vector int __ATTRS_o_ai +vec_vaddsws(vector int __a, vector int __b) +{ + return __builtin_altivec_vaddsws(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_vaddsws(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vaddsws((vector int)__a, __b); +} + +static vector int __ATTRS_o_ai +vec_vaddsws(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vaddsws(__a, (vector int)__b); +} + +/* vec_vadduws */ + +static vector unsigned int __ATTRS_o_ai +vec_vadduws(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vadduws(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vadduws(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vadduws((vector unsigned int)__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vadduws(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vadduws(__a, (vector unsigned int)__b); +} + +/* vec_and */ + +#define __builtin_altivec_vand vec_and + +static vector signed char __ATTRS_o_ai +vec_and(vector signed char __a, vector signed char __b) +{ + return __a & __b; +} + +static vector signed char __ATTRS_o_ai +vec_and(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a & __b; +} + +static vector signed char __ATTRS_o_ai +vec_and(vector signed char __a, vector bool char __b) +{ + return __a & (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_and(vector unsigned char __a, vector unsigned char __b) +{ + return __a & __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_and(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a & __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_and(vector unsigned char __a, vector bool char __b) +{ + return __a & (vector unsigned char)__b; +} + +static vector bool char __ATTRS_o_ai +vec_and(vector bool char __a, vector bool char __b) +{ + return __a & __b; +} + +static vector short __ATTRS_o_ai +vec_and(vector short __a, vector short __b) +{ + return __a & __b; +} + +static vector short __ATTRS_o_ai +vec_and(vector bool short __a, vector short __b) +{ + return (vector short)__a & __b; +} + +static vector short __ATTRS_o_ai +vec_and(vector short __a, vector bool short __b) +{ + return __a & (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_and(vector unsigned short __a, vector unsigned short __b) +{ + return __a & __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_and(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a & __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_and(vector unsigned short __a, vector bool short __b) +{ + return __a & (vector unsigned short)__b; +} + +static vector bool short __ATTRS_o_ai +vec_and(vector bool short __a, vector bool short __b) +{ + return __a & __b; +} + +static vector int __ATTRS_o_ai +vec_and(vector int __a, vector int __b) +{ + return __a & __b; +} + +static vector int __ATTRS_o_ai +vec_and(vector bool int __a, vector int __b) +{ + return (vector int)__a & __b; +} + +static vector int __ATTRS_o_ai +vec_and(vector int __a, vector bool int __b) +{ + return __a & (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_and(vector unsigned int __a, vector unsigned int __b) +{ + return __a & __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_and(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a & __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_and(vector unsigned int __a, vector bool int __b) +{ + return __a & (vector unsigned int)__b; +} + +static vector bool int __ATTRS_o_ai +vec_and(vector bool int __a, vector bool int __b) +{ + return __a & __b; +} + +static vector float __ATTRS_o_ai +vec_and(vector float __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a & (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_and(vector bool int __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a & (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_and(vector float __a, vector bool int __b) +{ + vector unsigned int __res = (vector unsigned int)__a & (vector unsigned int)__b; + return (vector float)__res; +} + +/* vec_vand */ + +static vector signed char __ATTRS_o_ai +vec_vand(vector signed char __a, vector signed char __b) +{ + return __a & __b; +} + +static vector signed char __ATTRS_o_ai +vec_vand(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a & __b; +} + +static vector signed char __ATTRS_o_ai +vec_vand(vector signed char __a, vector bool char __b) +{ + return __a & (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vand(vector unsigned char __a, vector unsigned char __b) +{ + return __a & __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vand(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a & __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vand(vector unsigned char __a, vector bool char __b) +{ + return __a & (vector unsigned char)__b; +} + +static vector bool char __ATTRS_o_ai +vec_vand(vector bool char __a, vector bool char __b) +{ + return __a & __b; +} + +static vector short __ATTRS_o_ai +vec_vand(vector short __a, vector short __b) +{ + return __a & __b; +} + +static vector short __ATTRS_o_ai +vec_vand(vector bool short __a, vector short __b) +{ + return (vector short)__a & __b; +} + +static vector short __ATTRS_o_ai +vec_vand(vector short __a, vector bool short __b) +{ + return __a & (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vand(vector unsigned short __a, vector unsigned short __b) +{ + return __a & __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vand(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a & __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vand(vector unsigned short __a, vector bool short __b) +{ + return __a & (vector unsigned short)__b; +} + +static vector bool short __ATTRS_o_ai +vec_vand(vector bool short __a, vector bool short __b) +{ + return __a & __b; +} + +static vector int __ATTRS_o_ai +vec_vand(vector int __a, vector int __b) +{ + return __a & __b; +} + +static vector int __ATTRS_o_ai +vec_vand(vector bool int __a, vector int __b) +{ + return (vector int)__a & __b; +} + +static vector int __ATTRS_o_ai +vec_vand(vector int __a, vector bool int __b) +{ + return __a & (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vand(vector unsigned int __a, vector unsigned int __b) +{ + return __a & __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vand(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a & __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vand(vector unsigned int __a, vector bool int __b) +{ + return __a & (vector unsigned int)__b; +} + +static vector bool int __ATTRS_o_ai +vec_vand(vector bool int __a, vector bool int __b) +{ + return __a & __b; +} + +static vector float __ATTRS_o_ai +vec_vand(vector float __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a & (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_vand(vector bool int __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a & (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_vand(vector float __a, vector bool int __b) +{ + vector unsigned int __res = (vector unsigned int)__a & (vector unsigned int)__b; + return (vector float)__res; +} + +/* vec_andc */ + +#define __builtin_altivec_vandc vec_andc + +static vector signed char __ATTRS_o_ai +vec_andc(vector signed char __a, vector signed char __b) +{ + return __a & ~__b; +} + +static vector signed char __ATTRS_o_ai +vec_andc(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a & ~__b; +} + +static vector signed char __ATTRS_o_ai +vec_andc(vector signed char __a, vector bool char __b) +{ + return __a & ~(vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_andc(vector unsigned char __a, vector unsigned char __b) +{ + return __a & ~__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_andc(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a & ~__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_andc(vector unsigned char __a, vector bool char __b) +{ + return __a & ~(vector unsigned char)__b; +} + +static vector bool char __ATTRS_o_ai +vec_andc(vector bool char __a, vector bool char __b) +{ + return __a & ~__b; +} + +static vector short __ATTRS_o_ai +vec_andc(vector short __a, vector short __b) +{ + return __a & ~__b; +} + +static vector short __ATTRS_o_ai +vec_andc(vector bool short __a, vector short __b) +{ + return (vector short)__a & ~__b; +} + +static vector short __ATTRS_o_ai +vec_andc(vector short __a, vector bool short __b) +{ + return __a & ~(vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_andc(vector unsigned short __a, vector unsigned short __b) +{ + return __a & ~__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_andc(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a & ~__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_andc(vector unsigned short __a, vector bool short __b) +{ + return __a & ~(vector unsigned short)__b; +} + +static vector bool short __ATTRS_o_ai +vec_andc(vector bool short __a, vector bool short __b) +{ + return __a & ~__b; +} + +static vector int __ATTRS_o_ai +vec_andc(vector int __a, vector int __b) +{ + return __a & ~__b; +} + +static vector int __ATTRS_o_ai +vec_andc(vector bool int __a, vector int __b) +{ + return (vector int)__a & ~__b; +} + +static vector int __ATTRS_o_ai +vec_andc(vector int __a, vector bool int __b) +{ + return __a & ~(vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_andc(vector unsigned int __a, vector unsigned int __b) +{ + return __a & ~__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_andc(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a & ~__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_andc(vector unsigned int __a, vector bool int __b) +{ + return __a & ~(vector unsigned int)__b; +} + +static vector bool int __ATTRS_o_ai +vec_andc(vector bool int __a, vector bool int __b) +{ + return __a & ~__b; +} + +static vector float __ATTRS_o_ai +vec_andc(vector float __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a & ~(vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_andc(vector bool int __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a & ~(vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_andc(vector float __a, vector bool int __b) +{ + vector unsigned int __res = (vector unsigned int)__a & ~(vector unsigned int)__b; + return (vector float)__res; +} + +/* vec_vandc */ + +static vector signed char __ATTRS_o_ai +vec_vandc(vector signed char __a, vector signed char __b) +{ + return __a & ~__b; +} + +static vector signed char __ATTRS_o_ai +vec_vandc(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a & ~__b; +} + +static vector signed char __ATTRS_o_ai +vec_vandc(vector signed char __a, vector bool char __b) +{ + return __a & ~(vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vandc(vector unsigned char __a, vector unsigned char __b) +{ + return __a & ~__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vandc(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a & ~__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vandc(vector unsigned char __a, vector bool char __b) +{ + return __a & ~(vector unsigned char)__b; +} + +static vector bool char __ATTRS_o_ai +vec_vandc(vector bool char __a, vector bool char __b) +{ + return __a & ~__b; +} + +static vector short __ATTRS_o_ai +vec_vandc(vector short __a, vector short __b) +{ + return __a & ~__b; +} + +static vector short __ATTRS_o_ai +vec_vandc(vector bool short __a, vector short __b) +{ + return (vector short)__a & ~__b; +} + +static vector short __ATTRS_o_ai +vec_vandc(vector short __a, vector bool short __b) +{ + return __a & ~(vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vandc(vector unsigned short __a, vector unsigned short __b) +{ + return __a & ~__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vandc(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a & ~__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vandc(vector unsigned short __a, vector bool short __b) +{ + return __a & ~(vector unsigned short)__b; +} + +static vector bool short __ATTRS_o_ai +vec_vandc(vector bool short __a, vector bool short __b) +{ + return __a & ~__b; +} + +static vector int __ATTRS_o_ai +vec_vandc(vector int __a, vector int __b) +{ + return __a & ~__b; +} + +static vector int __ATTRS_o_ai +vec_vandc(vector bool int __a, vector int __b) +{ + return (vector int)__a & ~__b; +} + +static vector int __ATTRS_o_ai +vec_vandc(vector int __a, vector bool int __b) +{ + return __a & ~(vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vandc(vector unsigned int __a, vector unsigned int __b) +{ + return __a & ~__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vandc(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a & ~__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vandc(vector unsigned int __a, vector bool int __b) +{ + return __a & ~(vector unsigned int)__b; +} + +static vector bool int __ATTRS_o_ai +vec_vandc(vector bool int __a, vector bool int __b) +{ + return __a & ~__b; +} + +static vector float __ATTRS_o_ai +vec_vandc(vector float __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a & ~(vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_vandc(vector bool int __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a & ~(vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_vandc(vector float __a, vector bool int __b) +{ + vector unsigned int __res = (vector unsigned int)__a & ~(vector unsigned int)__b; + return (vector float)__res; +} + +/* vec_avg */ + +static vector signed char __ATTRS_o_ai +vec_avg(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vavgsb(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_avg(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vavgub(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_avg(vector short __a, vector short __b) +{ + return __builtin_altivec_vavgsh(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_avg(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vavguh(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_avg(vector int __a, vector int __b) +{ + return __builtin_altivec_vavgsw(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_avg(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vavguw(__a, __b); +} + +/* vec_vavgsb */ + +static vector signed char __attribute__((__always_inline__)) +vec_vavgsb(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vavgsb(__a, __b); +} + +/* vec_vavgub */ + +static vector unsigned char __attribute__((__always_inline__)) +vec_vavgub(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vavgub(__a, __b); +} + +/* vec_vavgsh */ + +static vector short __attribute__((__always_inline__)) +vec_vavgsh(vector short __a, vector short __b) +{ + return __builtin_altivec_vavgsh(__a, __b); +} + +/* vec_vavguh */ + +static vector unsigned short __attribute__((__always_inline__)) +vec_vavguh(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vavguh(__a, __b); +} + +/* vec_vavgsw */ + +static vector int __attribute__((__always_inline__)) +vec_vavgsw(vector int __a, vector int __b) +{ + return __builtin_altivec_vavgsw(__a, __b); +} + +/* vec_vavguw */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_vavguw(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vavguw(__a, __b); +} + +/* vec_ceil */ + +static vector float __attribute__((__always_inline__)) +vec_ceil(vector float __a) +{ + return __builtin_altivec_vrfip(__a); +} + +/* vec_vrfip */ + +static vector float __attribute__((__always_inline__)) +vec_vrfip(vector float __a) +{ + return __builtin_altivec_vrfip(__a); +} + +/* vec_cmpb */ + +static vector int __attribute__((__always_inline__)) +vec_cmpb(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpbfp(__a, __b); +} + +/* vec_vcmpbfp */ + +static vector int __attribute__((__always_inline__)) +vec_vcmpbfp(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpbfp(__a, __b); +} + +/* vec_cmpeq */ + +static vector bool char __ATTRS_o_ai +vec_cmpeq(vector signed char __a, vector signed char __b) +{ + return (vector bool char) + __builtin_altivec_vcmpequb((vector char)__a, (vector char)__b); +} + +static vector bool char __ATTRS_o_ai +vec_cmpeq(vector unsigned char __a, vector unsigned char __b) +{ + return (vector bool char) + __builtin_altivec_vcmpequb((vector char)__a, (vector char)__b); +} + +static vector bool short __ATTRS_o_ai +vec_cmpeq(vector short __a, vector short __b) +{ + return (vector bool short)__builtin_altivec_vcmpequh(__a, __b); +} + +static vector bool short __ATTRS_o_ai +vec_cmpeq(vector unsigned short __a, vector unsigned short __b) +{ + return (vector bool short) + __builtin_altivec_vcmpequh((vector short)__a, (vector short)__b); +} + +static vector bool int __ATTRS_o_ai +vec_cmpeq(vector int __a, vector int __b) +{ + return (vector bool int)__builtin_altivec_vcmpequw(__a, __b); +} + +static vector bool int __ATTRS_o_ai +vec_cmpeq(vector unsigned int __a, vector unsigned int __b) +{ + return (vector bool int) + __builtin_altivec_vcmpequw((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_cmpeq(vector float __a, vector float __b) +{ + return (vector bool int)__builtin_altivec_vcmpeqfp(__a, __b); +} + +/* vec_cmpge */ + +static vector bool int __attribute__((__always_inline__)) +vec_cmpge(vector float __a, vector float __b) +{ + return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b); +} + +/* vec_vcmpgefp */ + +static vector bool int __attribute__((__always_inline__)) +vec_vcmpgefp(vector float __a, vector float __b) +{ + return (vector bool int)__builtin_altivec_vcmpgefp(__a, __b); +} + +/* vec_cmpgt */ + +static vector bool char __ATTRS_o_ai +vec_cmpgt(vector signed char __a, vector signed char __b) +{ + return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b); +} + +static vector bool char __ATTRS_o_ai +vec_cmpgt(vector unsigned char __a, vector unsigned char __b) +{ + return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b); +} + +static vector bool short __ATTRS_o_ai +vec_cmpgt(vector short __a, vector short __b) +{ + return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b); +} + +static vector bool short __ATTRS_o_ai +vec_cmpgt(vector unsigned short __a, vector unsigned short __b) +{ + return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b); +} + +static vector bool int __ATTRS_o_ai +vec_cmpgt(vector int __a, vector int __b) +{ + return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b); +} + +static vector bool int __ATTRS_o_ai +vec_cmpgt(vector unsigned int __a, vector unsigned int __b) +{ + return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b); +} + +static vector bool int __ATTRS_o_ai +vec_cmpgt(vector float __a, vector float __b) +{ + return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b); +} + +/* vec_vcmpgtsb */ + +static vector bool char __attribute__((__always_inline__)) +vec_vcmpgtsb(vector signed char __a, vector signed char __b) +{ + return (vector bool char)__builtin_altivec_vcmpgtsb(__a, __b); +} + +/* vec_vcmpgtub */ + +static vector bool char __attribute__((__always_inline__)) +vec_vcmpgtub(vector unsigned char __a, vector unsigned char __b) +{ + return (vector bool char)__builtin_altivec_vcmpgtub(__a, __b); +} + +/* vec_vcmpgtsh */ + +static vector bool short __attribute__((__always_inline__)) +vec_vcmpgtsh(vector short __a, vector short __b) +{ + return (vector bool short)__builtin_altivec_vcmpgtsh(__a, __b); +} + +/* vec_vcmpgtuh */ + +static vector bool short __attribute__((__always_inline__)) +vec_vcmpgtuh(vector unsigned short __a, vector unsigned short __b) +{ + return (vector bool short)__builtin_altivec_vcmpgtuh(__a, __b); +} + +/* vec_vcmpgtsw */ + +static vector bool int __attribute__((__always_inline__)) +vec_vcmpgtsw(vector int __a, vector int __b) +{ + return (vector bool int)__builtin_altivec_vcmpgtsw(__a, __b); +} + +/* vec_vcmpgtuw */ + +static vector bool int __attribute__((__always_inline__)) +vec_vcmpgtuw(vector unsigned int __a, vector unsigned int __b) +{ + return (vector bool int)__builtin_altivec_vcmpgtuw(__a, __b); +} + +/* vec_vcmpgtfp */ + +static vector bool int __attribute__((__always_inline__)) +vec_vcmpgtfp(vector float __a, vector float __b) +{ + return (vector bool int)__builtin_altivec_vcmpgtfp(__a, __b); +} + +/* vec_cmple */ + +static vector bool int __attribute__((__always_inline__)) +vec_cmple(vector float __a, vector float __b) +{ + return (vector bool int)__builtin_altivec_vcmpgefp(__b, __a); +} + +/* vec_cmplt */ + +static vector bool char __ATTRS_o_ai +vec_cmplt(vector signed char __a, vector signed char __b) +{ + return (vector bool char)__builtin_altivec_vcmpgtsb(__b, __a); +} + +static vector bool char __ATTRS_o_ai +vec_cmplt(vector unsigned char __a, vector unsigned char __b) +{ + return (vector bool char)__builtin_altivec_vcmpgtub(__b, __a); +} + +static vector bool short __ATTRS_o_ai +vec_cmplt(vector short __a, vector short __b) +{ + return (vector bool short)__builtin_altivec_vcmpgtsh(__b, __a); +} + +static vector bool short __ATTRS_o_ai +vec_cmplt(vector unsigned short __a, vector unsigned short __b) +{ + return (vector bool short)__builtin_altivec_vcmpgtuh(__b, __a); +} + +static vector bool int __ATTRS_o_ai +vec_cmplt(vector int __a, vector int __b) +{ + return (vector bool int)__builtin_altivec_vcmpgtsw(__b, __a); +} + +static vector bool int __ATTRS_o_ai +vec_cmplt(vector unsigned int __a, vector unsigned int __b) +{ + return (vector bool int)__builtin_altivec_vcmpgtuw(__b, __a); +} + +static vector bool int __ATTRS_o_ai +vec_cmplt(vector float __a, vector float __b) +{ + return (vector bool int)__builtin_altivec_vcmpgtfp(__b, __a); +} + +/* vec_ctf */ + +static vector float __ATTRS_o_ai +vec_ctf(vector int __a, int __b) +{ + return __builtin_altivec_vcfsx(__a, __b); +} + +static vector float __ATTRS_o_ai +vec_ctf(vector unsigned int __a, int __b) +{ + return __builtin_altivec_vcfux((vector int)__a, __b); +} + +/* vec_vcfsx */ + +static vector float __attribute__((__always_inline__)) +vec_vcfsx(vector int __a, int __b) +{ + return __builtin_altivec_vcfsx(__a, __b); +} + +/* vec_vcfux */ + +static vector float __attribute__((__always_inline__)) +vec_vcfux(vector unsigned int __a, int __b) +{ + return __builtin_altivec_vcfux((vector int)__a, __b); +} + +/* vec_cts */ + +static vector int __attribute__((__always_inline__)) +vec_cts(vector float __a, int __b) +{ + return __builtin_altivec_vctsxs(__a, __b); +} + +/* vec_vctsxs */ + +static vector int __attribute__((__always_inline__)) +vec_vctsxs(vector float __a, int __b) +{ + return __builtin_altivec_vctsxs(__a, __b); +} + +/* vec_ctu */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_ctu(vector float __a, int __b) +{ + return __builtin_altivec_vctuxs(__a, __b); +} + +/* vec_vctuxs */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_vctuxs(vector float __a, int __b) +{ + return __builtin_altivec_vctuxs(__a, __b); +} + +/* vec_dss */ + +static void __attribute__((__always_inline__)) +vec_dss(int __a) +{ + __builtin_altivec_dss(__a); +} + +/* vec_dssall */ + +static void __attribute__((__always_inline__)) +vec_dssall(void) +{ + __builtin_altivec_dssall(); +} + +/* vec_dst */ + +static void __attribute__((__always_inline__)) +vec_dst(const void *__a, int __b, int __c) +{ + __builtin_altivec_dst(__a, __b, __c); +} + +/* vec_dstst */ + +static void __attribute__((__always_inline__)) +vec_dstst(const void *__a, int __b, int __c) +{ + __builtin_altivec_dstst(__a, __b, __c); +} + +/* vec_dststt */ + +static void __attribute__((__always_inline__)) +vec_dststt(const void *__a, int __b, int __c) +{ + __builtin_altivec_dststt(__a, __b, __c); +} + +/* vec_dstt */ + +static void __attribute__((__always_inline__)) +vec_dstt(const void *__a, int __b, int __c) +{ + __builtin_altivec_dstt(__a, __b, __c); +} + +/* vec_expte */ + +static vector float __attribute__((__always_inline__)) +vec_expte(vector float __a) +{ + return __builtin_altivec_vexptefp(__a); +} + +/* vec_vexptefp */ + +static vector float __attribute__((__always_inline__)) +vec_vexptefp(vector float __a) +{ + return __builtin_altivec_vexptefp(__a); +} + +/* vec_floor */ + +static vector float __attribute__((__always_inline__)) +vec_floor(vector float __a) +{ + return __builtin_altivec_vrfim(__a); +} + +/* vec_vrfim */ + +static vector float __attribute__((__always_inline__)) +vec_vrfim(vector float __a) +{ + return __builtin_altivec_vrfim(__a); +} + +/* vec_ld */ + +static vector signed char __ATTRS_o_ai +vec_ld(int __a, const vector signed char *__b) +{ + return (vector signed char)__builtin_altivec_lvx(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_ld(int __a, const signed char *__b) +{ + return (vector signed char)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_ld(int __a, const vector unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_ld(int __a, const unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvx(__a, __b); +} + +static vector bool char __ATTRS_o_ai +vec_ld(int __a, const vector bool char *__b) +{ + return (vector bool char)__builtin_altivec_lvx(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_ld(int __a, const vector short *__b) +{ + return (vector short)__builtin_altivec_lvx(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_ld(int __a, const short *__b) +{ + return (vector short)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_ld(int __a, const vector unsigned short *__b) +{ + return (vector unsigned short)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_ld(int __a, const unsigned short *__b) +{ + return (vector unsigned short)__builtin_altivec_lvx(__a, __b); +} + +static vector bool short __ATTRS_o_ai +vec_ld(int __a, const vector bool short *__b) +{ + return (vector bool short)__builtin_altivec_lvx(__a, __b); +} + +static vector pixel __ATTRS_o_ai +vec_ld(int __a, const vector pixel *__b) +{ + return (vector pixel)__builtin_altivec_lvx(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_ld(int __a, const vector int *__b) +{ + return (vector int)__builtin_altivec_lvx(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_ld(int __a, const int *__b) +{ + return (vector int)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_ld(int __a, const vector unsigned int *__b) +{ + return (vector unsigned int)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_ld(int __a, const unsigned int *__b) +{ + return (vector unsigned int)__builtin_altivec_lvx(__a, __b); +} + +static vector bool int __ATTRS_o_ai +vec_ld(int __a, const vector bool int *__b) +{ + return (vector bool int)__builtin_altivec_lvx(__a, __b); +} + +static vector float __ATTRS_o_ai +vec_ld(int __a, const vector float *__b) +{ + return (vector float)__builtin_altivec_lvx(__a, __b); +} + +static vector float __ATTRS_o_ai +vec_ld(int __a, const float *__b) +{ + return (vector float)__builtin_altivec_lvx(__a, __b); +} + +/* vec_lvx */ + +static vector signed char __ATTRS_o_ai +vec_lvx(int __a, const vector signed char *__b) +{ + return (vector signed char)__builtin_altivec_lvx(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_lvx(int __a, const signed char *__b) +{ + return (vector signed char)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvx(int __a, const vector unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvx(int __a, const unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvx(__a, __b); +} + +static vector bool char __ATTRS_o_ai +vec_lvx(int __a, const vector bool char *__b) +{ + return (vector bool char)__builtin_altivec_lvx(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_lvx(int __a, const vector short *__b) +{ + return (vector short)__builtin_altivec_lvx(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_lvx(int __a, const short *__b) +{ + return (vector short)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvx(int __a, const vector unsigned short *__b) +{ + return (vector unsigned short)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvx(int __a, const unsigned short *__b) +{ + return (vector unsigned short)__builtin_altivec_lvx(__a, __b); +} + +static vector bool short __ATTRS_o_ai +vec_lvx(int __a, const vector bool short *__b) +{ + return (vector bool short)__builtin_altivec_lvx(__a, __b); +} + +static vector pixel __ATTRS_o_ai +vec_lvx(int __a, const vector pixel *__b) +{ + return (vector pixel)__builtin_altivec_lvx(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_lvx(int __a, const vector int *__b) +{ + return (vector int)__builtin_altivec_lvx(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_lvx(int __a, const int *__b) +{ + return (vector int)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvx(int __a, const vector unsigned int *__b) +{ + return (vector unsigned int)__builtin_altivec_lvx(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvx(int __a, const unsigned int *__b) +{ + return (vector unsigned int)__builtin_altivec_lvx(__a, __b); +} + +static vector bool int __ATTRS_o_ai +vec_lvx(int __a, const vector bool int *__b) +{ + return (vector bool int)__builtin_altivec_lvx(__a, __b); +} + +static vector float __ATTRS_o_ai +vec_lvx(int __a, const vector float *__b) +{ + return (vector float)__builtin_altivec_lvx(__a, __b); +} + +static vector float __ATTRS_o_ai +vec_lvx(int __a, const float *__b) +{ + return (vector float)__builtin_altivec_lvx(__a, __b); +} + +/* vec_lde */ + +static vector signed char __ATTRS_o_ai +vec_lde(int __a, const signed char *__b) +{ + return (vector signed char)__builtin_altivec_lvebx(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lde(int __a, const unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvebx(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_lde(int __a, const short *__b) +{ + return (vector short)__builtin_altivec_lvehx(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_lde(int __a, const unsigned short *__b) +{ + return (vector unsigned short)__builtin_altivec_lvehx(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_lde(int __a, const int *__b) +{ + return (vector int)__builtin_altivec_lvewx(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_lde(int __a, const unsigned int *__b) +{ + return (vector unsigned int)__builtin_altivec_lvewx(__a, __b); +} + +static vector float __ATTRS_o_ai +vec_lde(int __a, const float *__b) +{ + return (vector float)__builtin_altivec_lvewx(__a, __b); +} + +/* vec_lvebx */ + +static vector signed char __ATTRS_o_ai +vec_lvebx(int __a, const signed char *__b) +{ + return (vector signed char)__builtin_altivec_lvebx(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvebx(int __a, const unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvebx(__a, __b); +} + +/* vec_lvehx */ + +static vector short __ATTRS_o_ai +vec_lvehx(int __a, const short *__b) +{ + return (vector short)__builtin_altivec_lvehx(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvehx(int __a, const unsigned short *__b) +{ + return (vector unsigned short)__builtin_altivec_lvehx(__a, __b); +} + +/* vec_lvewx */ + +static vector int __ATTRS_o_ai +vec_lvewx(int __a, const int *__b) +{ + return (vector int)__builtin_altivec_lvewx(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvewx(int __a, const unsigned int *__b) +{ + return (vector unsigned int)__builtin_altivec_lvewx(__a, __b); +} + +static vector float __ATTRS_o_ai +vec_lvewx(int __a, const float *__b) +{ + return (vector float)__builtin_altivec_lvewx(__a, __b); +} + +/* vec_ldl */ + +static vector signed char __ATTRS_o_ai +vec_ldl(int __a, const vector signed char *__b) +{ + return (vector signed char)__builtin_altivec_lvxl(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_ldl(int __a, const signed char *__b) +{ + return (vector signed char)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_ldl(int __a, const vector unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_ldl(int __a, const unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); +} + +static vector bool char __ATTRS_o_ai +vec_ldl(int __a, const vector bool char *__b) +{ + return (vector bool char)__builtin_altivec_lvxl(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_ldl(int __a, const vector short *__b) +{ + return (vector short)__builtin_altivec_lvxl(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_ldl(int __a, const short *__b) +{ + return (vector short)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_ldl(int __a, const vector unsigned short *__b) +{ + return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_ldl(int __a, const unsigned short *__b) +{ + return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); +} + +static vector bool short __ATTRS_o_ai +vec_ldl(int __a, const vector bool short *__b) +{ + return (vector bool short)__builtin_altivec_lvxl(__a, __b); +} + +static vector pixel __ATTRS_o_ai +vec_ldl(int __a, const vector pixel *__b) +{ + return (vector pixel short)__builtin_altivec_lvxl(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_ldl(int __a, const vector int *__b) +{ + return (vector int)__builtin_altivec_lvxl(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_ldl(int __a, const int *__b) +{ + return (vector int)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_ldl(int __a, const vector unsigned int *__b) +{ + return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_ldl(int __a, const unsigned int *__b) +{ + return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); +} + +static vector bool int __ATTRS_o_ai +vec_ldl(int __a, const vector bool int *__b) +{ + return (vector bool int)__builtin_altivec_lvxl(__a, __b); +} + +static vector float __ATTRS_o_ai +vec_ldl(int __a, const vector float *__b) +{ + return (vector float)__builtin_altivec_lvxl(__a, __b); +} + +static vector float __ATTRS_o_ai +vec_ldl(int __a, const float *__b) +{ + return (vector float)__builtin_altivec_lvxl(__a, __b); +} + +/* vec_lvxl */ + +static vector signed char __ATTRS_o_ai +vec_lvxl(int __a, const vector signed char *__b) +{ + return (vector signed char)__builtin_altivec_lvxl(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_lvxl(int __a, const signed char *__b) +{ + return (vector signed char)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvxl(int __a, const vector unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvxl(int __a, const unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvxl(__a, __b); +} + +static vector bool char __ATTRS_o_ai +vec_lvxl(int __a, const vector bool char *__b) +{ + return (vector bool char)__builtin_altivec_lvxl(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_lvxl(int __a, const vector short *__b) +{ + return (vector short)__builtin_altivec_lvxl(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_lvxl(int __a, const short *__b) +{ + return (vector short)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvxl(int __a, const vector unsigned short *__b) +{ + return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvxl(int __a, const unsigned short *__b) +{ + return (vector unsigned short)__builtin_altivec_lvxl(__a, __b); +} + +static vector bool short __ATTRS_o_ai +vec_lvxl(int __a, const vector bool short *__b) +{ + return (vector bool short)__builtin_altivec_lvxl(__a, __b); +} + +static vector pixel __ATTRS_o_ai +vec_lvxl(int __a, const vector pixel *__b) +{ + return (vector pixel)__builtin_altivec_lvxl(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_lvxl(int __a, const vector int *__b) +{ + return (vector int)__builtin_altivec_lvxl(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_lvxl(int __a, const int *__b) +{ + return (vector int)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvxl(int __a, const vector unsigned int *__b) +{ + return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvxl(int __a, const unsigned int *__b) +{ + return (vector unsigned int)__builtin_altivec_lvxl(__a, __b); +} + +static vector bool int __ATTRS_o_ai +vec_lvxl(int __a, const vector bool int *__b) +{ + return (vector bool int)__builtin_altivec_lvxl(__a, __b); +} + +static vector float __ATTRS_o_ai +vec_lvxl(int __a, const vector float *__b) +{ + return (vector float)__builtin_altivec_lvxl(__a, __b); +} + +static vector float __ATTRS_o_ai +vec_lvxl(int __a, const float *__b) +{ + return (vector float)__builtin_altivec_lvxl(__a, __b); +} + +/* vec_loge */ + +static vector float __attribute__((__always_inline__)) +vec_loge(vector float __a) +{ + return __builtin_altivec_vlogefp(__a); +} + +/* vec_vlogefp */ + +static vector float __attribute__((__always_inline__)) +vec_vlogefp(vector float __a) +{ + return __builtin_altivec_vlogefp(__a); +} + +/* vec_lvsl */ + +static vector unsigned char __ATTRS_o_ai +vec_lvsl(int __a, const signed char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsl(int __a, const unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsl(int __a, const short *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsl(int __a, const unsigned short *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsl(int __a, const int *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsl(int __a, const unsigned int *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsl(int __a, const float *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsl(__a, __b); +} + +/* vec_lvsr */ + +static vector unsigned char __ATTRS_o_ai +vec_lvsr(int __a, const signed char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsr(int __a, const unsigned char *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsr(int __a, const short *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsr(int __a, const unsigned short *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsr(int __a, const int *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsr(int __a, const unsigned int *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvsr(int __a, const float *__b) +{ + return (vector unsigned char)__builtin_altivec_lvsr(__a, __b); +} + +/* vec_madd */ + +static vector float __attribute__((__always_inline__)) +vec_madd(vector float __a, vector float __b, vector float __c) +{ + return __builtin_altivec_vmaddfp(__a, __b, __c); +} + +/* vec_vmaddfp */ + +static vector float __attribute__((__always_inline__)) +vec_vmaddfp(vector float __a, vector float __b, vector float __c) +{ + return __builtin_altivec_vmaddfp(__a, __b, __c); +} + +/* vec_madds */ + +static vector signed short __attribute__((__always_inline__)) +vec_madds(vector signed short __a, vector signed short __b, vector signed short __c) +{ + return __builtin_altivec_vmhaddshs(__a, __b, __c); +} + +/* vec_vmhaddshs */ +static vector signed short __attribute__((__always_inline__)) +vec_vmhaddshs(vector signed short __a, + vector signed short __b, + vector signed short __c) +{ + return __builtin_altivec_vmhaddshs(__a, __b, __c); +} + +/* vec_max */ + +static vector signed char __ATTRS_o_ai +vec_max(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vmaxsb(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_max(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vmaxsb((vector signed char)__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_max(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vmaxsb(__a, (vector signed char)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_max(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vmaxub(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_max(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vmaxub((vector unsigned char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_max(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b); +} + +static vector short __ATTRS_o_ai +vec_max(vector short __a, vector short __b) +{ + return __builtin_altivec_vmaxsh(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_max(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vmaxsh((vector short)__a, __b); +} + +static vector short __ATTRS_o_ai +vec_max(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vmaxsh(__a, (vector short)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_max(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vmaxuh(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_max(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_max(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b); +} + +static vector int __ATTRS_o_ai +vec_max(vector int __a, vector int __b) +{ + return __builtin_altivec_vmaxsw(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_max(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vmaxsw((vector int)__a, __b); +} + +static vector int __ATTRS_o_ai +vec_max(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vmaxsw(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_max(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vmaxuw(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_max(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_max(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b); +} + +static vector float __ATTRS_o_ai +vec_max(vector float __a, vector float __b) +{ + return __builtin_altivec_vmaxfp(__a, __b); +} + +/* vec_vmaxsb */ + +static vector signed char __ATTRS_o_ai +vec_vmaxsb(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vmaxsb(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_vmaxsb(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vmaxsb((vector signed char)__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_vmaxsb(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vmaxsb(__a, (vector signed char)__b); +} + +/* vec_vmaxub */ + +static vector unsigned char __ATTRS_o_ai +vec_vmaxub(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vmaxub(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vmaxub(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vmaxub((vector unsigned char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vmaxub(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vmaxub(__a, (vector unsigned char)__b); +} + +/* vec_vmaxsh */ + +static vector short __ATTRS_o_ai +vec_vmaxsh(vector short __a, vector short __b) +{ + return __builtin_altivec_vmaxsh(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_vmaxsh(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vmaxsh((vector short)__a, __b); +} + +static vector short __ATTRS_o_ai +vec_vmaxsh(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vmaxsh(__a, (vector short)__b); +} + +/* vec_vmaxuh */ + +static vector unsigned short __ATTRS_o_ai +vec_vmaxuh(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vmaxuh(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vmaxuh(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vmaxuh((vector unsigned short)__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vmaxuh(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vmaxuh(__a, (vector unsigned short)__b); +} + +/* vec_vmaxsw */ + +static vector int __ATTRS_o_ai +vec_vmaxsw(vector int __a, vector int __b) +{ + return __builtin_altivec_vmaxsw(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_vmaxsw(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vmaxsw((vector int)__a, __b); +} + +static vector int __ATTRS_o_ai +vec_vmaxsw(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vmaxsw(__a, (vector int)__b); +} + +/* vec_vmaxuw */ + +static vector unsigned int __ATTRS_o_ai +vec_vmaxuw(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vmaxuw(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vmaxuw(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vmaxuw((vector unsigned int)__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vmaxuw(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vmaxuw(__a, (vector unsigned int)__b); +} + +/* vec_vmaxfp */ + +static vector float __attribute__((__always_inline__)) +vec_vmaxfp(vector float __a, vector float __b) +{ + return __builtin_altivec_vmaxfp(__a, __b); +} + +/* vec_mergeh */ + +static vector signed char __ATTRS_o_ai +vec_mergeh(vector signed char __a, vector signed char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 0x03, 0x13, + 0x04, 0x14, 0x05, 0x15, 0x06, 0x16, 0x07, 0x17)); +} + +static vector unsigned char __ATTRS_o_ai +vec_mergeh(vector unsigned char __a, vector unsigned char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 0x03, 0x13, + 0x04, 0x14, 0x05, 0x15, 0x06, 0x16, 0x07, 0x17)); +} + +static vector bool char __ATTRS_o_ai +vec_mergeh(vector bool char __a, vector bool char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 0x03, 0x13, + 0x04, 0x14, 0x05, 0x15, 0x06, 0x16, 0x07, 0x17)); +} + +static vector short __ATTRS_o_ai +vec_mergeh(vector short __a, vector short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 0x12, 0x13, + 0x04, 0x05, 0x14, 0x15, 0x06, 0x07, 0x16, 0x17)); +} + +static vector unsigned short __ATTRS_o_ai +vec_mergeh(vector unsigned short __a, vector unsigned short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 0x12, 0x13, + 0x04, 0x05, 0x14, 0x15, 0x06, 0x07, 0x16, 0x17)); +} + +static vector bool short __ATTRS_o_ai +vec_mergeh(vector bool short __a, vector bool short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 0x12, 0x13, + 0x04, 0x05, 0x14, 0x15, 0x06, 0x07, 0x16, 0x17)); +} + +static vector pixel __ATTRS_o_ai +vec_mergeh(vector pixel __a, vector pixel __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 0x12, 0x13, + 0x04, 0x05, 0x14, 0x15, 0x06, 0x07, 0x16, 0x17)); +} + +static vector int __ATTRS_o_ai +vec_mergeh(vector int __a, vector int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, + 0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17)); +} + +static vector unsigned int __ATTRS_o_ai +vec_mergeh(vector unsigned int __a, vector unsigned int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, + 0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17)); +} + +static vector bool int __ATTRS_o_ai +vec_mergeh(vector bool int __a, vector bool int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, + 0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17)); +} + +static vector float __ATTRS_o_ai +vec_mergeh(vector float __a, vector float __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, + 0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17)); +} + +/* vec_vmrghb */ + +#define __builtin_altivec_vmrghb vec_vmrghb + +static vector signed char __ATTRS_o_ai +vec_vmrghb(vector signed char __a, vector signed char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 0x03, 0x13, + 0x04, 0x14, 0x05, 0x15, 0x06, 0x16, 0x07, 0x17)); +} + +static vector unsigned char __ATTRS_o_ai +vec_vmrghb(vector unsigned char __a, vector unsigned char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 0x03, 0x13, + 0x04, 0x14, 0x05, 0x15, 0x06, 0x16, 0x07, 0x17)); +} + +static vector bool char __ATTRS_o_ai +vec_vmrghb(vector bool char __a, vector bool char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x10, 0x01, 0x11, 0x02, 0x12, 0x03, 0x13, + 0x04, 0x14, 0x05, 0x15, 0x06, 0x16, 0x07, 0x17)); +} + +/* vec_vmrghh */ + +#define __builtin_altivec_vmrghh vec_vmrghh + +static vector short __ATTRS_o_ai +vec_vmrghh(vector short __a, vector short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 0x12, 0x13, + 0x04, 0x05, 0x14, 0x15, 0x06, 0x07, 0x16, 0x17)); +} + +static vector unsigned short __ATTRS_o_ai +vec_vmrghh(vector unsigned short __a, vector unsigned short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 0x12, 0x13, + 0x04, 0x05, 0x14, 0x15, 0x06, 0x07, 0x16, 0x17)); +} + +static vector bool short __ATTRS_o_ai +vec_vmrghh(vector bool short __a, vector bool short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 0x12, 0x13, + 0x04, 0x05, 0x14, 0x15, 0x06, 0x07, 0x16, 0x17)); +} + +static vector pixel __ATTRS_o_ai +vec_vmrghh(vector pixel __a, vector pixel __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x10, 0x11, 0x02, 0x03, 0x12, 0x13, + 0x04, 0x05, 0x14, 0x15, 0x06, 0x07, 0x16, 0x17)); +} + +/* vec_vmrghw */ + +#define __builtin_altivec_vmrghw vec_vmrghw + +static vector int __ATTRS_o_ai +vec_vmrghw(vector int __a, vector int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, + 0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17)); +} + +static vector unsigned int __ATTRS_o_ai +vec_vmrghw(vector unsigned int __a, vector unsigned int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, + 0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17)); +} + +static vector bool int __ATTRS_o_ai +vec_vmrghw(vector bool int __a, vector bool int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, + 0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17)); +} + +static vector float __ATTRS_o_ai +vec_vmrghw(vector float __a, vector float __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, + 0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17)); +} + +/* vec_mergel */ + +static vector signed char __ATTRS_o_ai +vec_mergel(vector signed char __a, vector signed char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 0x0B, 0x1B, + 0x0C, 0x1C, 0x0D, 0x1D, 0x0E, 0x1E, 0x0F, 0x1F)); +} + +static vector unsigned char __ATTRS_o_ai +vec_mergel(vector unsigned char __a, vector unsigned char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 0x0B, 0x1B, + 0x0C, 0x1C, 0x0D, 0x1D, 0x0E, 0x1E, 0x0F, 0x1F)); +} + +static vector bool char __ATTRS_o_ai +vec_mergel(vector bool char __a, vector bool char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 0x0B, 0x1B, + 0x0C, 0x1C, 0x0D, 0x1D, 0x0E, 0x1E, 0x0F, 0x1F)); +} + +static vector short __ATTRS_o_ai +vec_mergel(vector short __a, vector short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 0x1A, 0x1B, + 0x0C, 0x0D, 0x1C, 0x1D, 0x0E, 0x0F, 0x1E, 0x1F)); +} + +static vector unsigned short __ATTRS_o_ai +vec_mergel(vector unsigned short __a, vector unsigned short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 0x1A, 0x1B, + 0x0C, 0x0D, 0x1C, 0x1D, 0x0E, 0x0F, 0x1E, 0x1F)); +} + +static vector bool short __ATTRS_o_ai +vec_mergel(vector bool short __a, vector bool short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 0x1A, 0x1B, + 0x0C, 0x0D, 0x1C, 0x1D, 0x0E, 0x0F, 0x1E, 0x1F)); +} + +static vector pixel __ATTRS_o_ai +vec_mergel(vector pixel __a, vector pixel __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 0x1A, 0x1B, + 0x0C, 0x0D, 0x1C, 0x1D, 0x0E, 0x0F, 0x1E, 0x1F)); +} + +static vector int __ATTRS_o_ai +vec_mergel(vector int __a, vector int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 0x1A, 0x1B, + 0x0C, 0x0D, 0x0E, 0x0F, 0x1C, 0x1D, 0x1E, 0x1F)); +} + +static vector unsigned int __ATTRS_o_ai +vec_mergel(vector unsigned int __a, vector unsigned int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 0x1A, 0x1B, + 0x0C, 0x0D, 0x0E, 0x0F, 0x1C, 0x1D, 0x1E, 0x1F)); +} + +static vector bool int __ATTRS_o_ai +vec_mergel(vector bool int __a, vector bool int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 0x1A, 0x1B, + 0x0C, 0x0D, 0x0E, 0x0F, 0x1C, 0x1D, 0x1E, 0x1F)); +} + +static vector float __ATTRS_o_ai +vec_mergel(vector float __a, vector float __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 0x1A, 0x1B, + 0x0C, 0x0D, 0x0E, 0x0F, 0x1C, 0x1D, 0x1E, 0x1F)); +} + +/* vec_vmrglb */ + +#define __builtin_altivec_vmrglb vec_vmrglb + +static vector signed char __ATTRS_o_ai +vec_vmrglb(vector signed char __a, vector signed char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 0x0B, 0x1B, + 0x0C, 0x1C, 0x0D, 0x1D, 0x0E, 0x1E, 0x0F, 0x1F)); +} + +static vector unsigned char __ATTRS_o_ai +vec_vmrglb(vector unsigned char __a, vector unsigned char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 0x0B, 0x1B, + 0x0C, 0x1C, 0x0D, 0x1D, 0x0E, 0x1E, 0x0F, 0x1F)); +} + +static vector bool char __ATTRS_o_ai +vec_vmrglb(vector bool char __a, vector bool char __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x18, 0x09, 0x19, 0x0A, 0x1A, 0x0B, 0x1B, + 0x0C, 0x1C, 0x0D, 0x1D, 0x0E, 0x1E, 0x0F, 0x1F)); +} + +/* vec_vmrglh */ + +#define __builtin_altivec_vmrglh vec_vmrglh + +static vector short __ATTRS_o_ai +vec_vmrglh(vector short __a, vector short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 0x1A, 0x1B, + 0x0C, 0x0D, 0x1C, 0x1D, 0x0E, 0x0F, 0x1E, 0x1F)); +} + +static vector unsigned short __ATTRS_o_ai +vec_vmrglh(vector unsigned short __a, vector unsigned short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 0x1A, 0x1B, + 0x0C, 0x0D, 0x1C, 0x1D, 0x0E, 0x0F, 0x1E, 0x1F)); +} + +static vector bool short __ATTRS_o_ai +vec_vmrglh(vector bool short __a, vector bool short __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 0x1A, 0x1B, + 0x0C, 0x0D, 0x1C, 0x1D, 0x0E, 0x0F, 0x1E, 0x1F)); +} + +static vector pixel __ATTRS_o_ai +vec_vmrglh(vector pixel __a, vector pixel __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x18, 0x19, 0x0A, 0x0B, 0x1A, 0x1B, + 0x0C, 0x0D, 0x1C, 0x1D, 0x0E, 0x0F, 0x1E, 0x1F)); +} + +/* vec_vmrglw */ + +#define __builtin_altivec_vmrglw vec_vmrglw + +static vector int __ATTRS_o_ai +vec_vmrglw(vector int __a, vector int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 0x1A, 0x1B, + 0x0C, 0x0D, 0x0E, 0x0F, 0x1C, 0x1D, 0x1E, 0x1F)); +} + +static vector unsigned int __ATTRS_o_ai +vec_vmrglw(vector unsigned int __a, vector unsigned int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 0x1A, 0x1B, + 0x0C, 0x0D, 0x0E, 0x0F, 0x1C, 0x1D, 0x1E, 0x1F)); +} + +static vector bool int __ATTRS_o_ai +vec_vmrglw(vector bool int __a, vector bool int __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 0x1A, 0x1B, + 0x0C, 0x0D, 0x0E, 0x0F, 0x1C, 0x1D, 0x1E, 0x1F)); +} + +static vector float __ATTRS_o_ai +vec_vmrglw(vector float __a, vector float __b) +{ + return vec_perm(__a, __b, (vector unsigned char) + (0x08, 0x09, 0x0A, 0x0B, 0x18, 0x19, 0x1A, 0x1B, + 0x0C, 0x0D, 0x0E, 0x0F, 0x1C, 0x1D, 0x1E, 0x1F)); +} + +/* vec_mfvscr */ + +static vector unsigned short __attribute__((__always_inline__)) +vec_mfvscr(void) +{ + return __builtin_altivec_mfvscr(); +} + +/* vec_min */ + +static vector signed char __ATTRS_o_ai +vec_min(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vminsb(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_min(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vminsb((vector signed char)__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_min(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vminsb(__a, (vector signed char)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_min(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vminub(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_min(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vminub((vector unsigned char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_min(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vminub(__a, (vector unsigned char)__b); +} + +static vector short __ATTRS_o_ai +vec_min(vector short __a, vector short __b) +{ + return __builtin_altivec_vminsh(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_min(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vminsh((vector short)__a, __b); +} + +static vector short __ATTRS_o_ai +vec_min(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vminsh(__a, (vector short)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_min(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vminuh(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_min(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vminuh((vector unsigned short)__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_min(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vminuh(__a, (vector unsigned short)__b); +} + +static vector int __ATTRS_o_ai +vec_min(vector int __a, vector int __b) +{ + return __builtin_altivec_vminsw(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_min(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vminsw((vector int)__a, __b); +} + +static vector int __ATTRS_o_ai +vec_min(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vminsw(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_min(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vminuw(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_min(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vminuw((vector unsigned int)__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_min(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vminuw(__a, (vector unsigned int)__b); +} + +static vector float __ATTRS_o_ai +vec_min(vector float __a, vector float __b) +{ + return __builtin_altivec_vminfp(__a, __b); +} + +/* vec_vminsb */ + +static vector signed char __ATTRS_o_ai +vec_vminsb(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vminsb(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_vminsb(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vminsb((vector signed char)__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_vminsb(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vminsb(__a, (vector signed char)__b); +} + +/* vec_vminub */ + +static vector unsigned char __ATTRS_o_ai +vec_vminub(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vminub(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vminub(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vminub((vector unsigned char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vminub(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vminub(__a, (vector unsigned char)__b); +} + +/* vec_vminsh */ + +static vector short __ATTRS_o_ai +vec_vminsh(vector short __a, vector short __b) +{ + return __builtin_altivec_vminsh(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_vminsh(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vminsh((vector short)__a, __b); +} + +static vector short __ATTRS_o_ai +vec_vminsh(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vminsh(__a, (vector short)__b); +} + +/* vec_vminuh */ + +static vector unsigned short __ATTRS_o_ai +vec_vminuh(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vminuh(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vminuh(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vminuh((vector unsigned short)__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vminuh(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vminuh(__a, (vector unsigned short)__b); +} + +/* vec_vminsw */ + +static vector int __ATTRS_o_ai +vec_vminsw(vector int __a, vector int __b) +{ + return __builtin_altivec_vminsw(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_vminsw(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vminsw((vector int)__a, __b); +} + +static vector int __ATTRS_o_ai +vec_vminsw(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vminsw(__a, (vector int)__b); +} + +/* vec_vminuw */ + +static vector unsigned int __ATTRS_o_ai +vec_vminuw(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vminuw(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vminuw(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vminuw((vector unsigned int)__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vminuw(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vminuw(__a, (vector unsigned int)__b); +} + +/* vec_vminfp */ + +static vector float __attribute__((__always_inline__)) +vec_vminfp(vector float __a, vector float __b) +{ + return __builtin_altivec_vminfp(__a, __b); +} + +/* vec_mladd */ + +#define __builtin_altivec_vmladduhm vec_mladd + +static vector short __ATTRS_o_ai +vec_mladd(vector short __a, vector short __b, vector short __c) +{ + return __a * __b + __c; +} + +static vector short __ATTRS_o_ai +vec_mladd(vector short __a, vector unsigned short __b, vector unsigned short __c) +{ + return __a * (vector short)__b + (vector short)__c; +} + +static vector short __ATTRS_o_ai +vec_mladd(vector unsigned short __a, vector short __b, vector short __c) +{ + return (vector short)__a * __b + __c; +} + +static vector unsigned short __ATTRS_o_ai +vec_mladd(vector unsigned short __a, + vector unsigned short __b, + vector unsigned short __c) +{ + return __a * __b + __c; +} + +/* vec_vmladduhm */ + +static vector short __ATTRS_o_ai +vec_vmladduhm(vector short __a, vector short __b, vector short __c) +{ + return __a * __b + __c; +} + +static vector short __ATTRS_o_ai +vec_vmladduhm(vector short __a, vector unsigned short __b, vector unsigned short __c) +{ + return __a * (vector short)__b + (vector short)__c; +} + +static vector short __ATTRS_o_ai +vec_vmladduhm(vector unsigned short __a, vector short __b, vector short __c) +{ + return (vector short)__a * __b + __c; +} + +static vector unsigned short __ATTRS_o_ai +vec_vmladduhm(vector unsigned short __a, + vector unsigned short __b, + vector unsigned short __c) +{ + return __a * __b + __c; +} + +/* vec_mradds */ + +static vector short __attribute__((__always_inline__)) +vec_mradds(vector short __a, vector short __b, vector short __c) +{ + return __builtin_altivec_vmhraddshs(__a, __b, __c); +} + +/* vec_vmhraddshs */ + +static vector short __attribute__((__always_inline__)) +vec_vmhraddshs(vector short __a, vector short __b, vector short __c) +{ + return __builtin_altivec_vmhraddshs(__a, __b, __c); +} + +/* vec_msum */ + +static vector int __ATTRS_o_ai +vec_msum(vector signed char __a, vector unsigned char __b, vector int __c) +{ + return __builtin_altivec_vmsummbm(__a, __b, __c); +} + +static vector unsigned int __ATTRS_o_ai +vec_msum(vector unsigned char __a, vector unsigned char __b, vector unsigned int __c) +{ + return __builtin_altivec_vmsumubm(__a, __b, __c); +} + +static vector int __ATTRS_o_ai +vec_msum(vector short __a, vector short __b, vector int __c) +{ + return __builtin_altivec_vmsumshm(__a, __b, __c); +} + +static vector unsigned int __ATTRS_o_ai +vec_msum(vector unsigned short __a, + vector unsigned short __b, + vector unsigned int __c) +{ + return __builtin_altivec_vmsumuhm(__a, __b, __c); +} + +/* vec_vmsummbm */ + +static vector int __attribute__((__always_inline__)) +vec_vmsummbm(vector signed char __a, vector unsigned char __b, vector int __c) +{ + return __builtin_altivec_vmsummbm(__a, __b, __c); +} + +/* vec_vmsumubm */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_vmsumubm(vector unsigned char __a, + vector unsigned char __b, + vector unsigned int __c) +{ + return __builtin_altivec_vmsumubm(__a, __b, __c); +} + +/* vec_vmsumshm */ + +static vector int __attribute__((__always_inline__)) +vec_vmsumshm(vector short __a, vector short __b, vector int __c) +{ + return __builtin_altivec_vmsumshm(__a, __b, __c); +} + +/* vec_vmsumuhm */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_vmsumuhm(vector unsigned short __a, + vector unsigned short __b, + vector unsigned int __c) +{ + return __builtin_altivec_vmsumuhm(__a, __b, __c); +} + +/* vec_msums */ + +static vector int __ATTRS_o_ai +vec_msums(vector short __a, vector short __b, vector int __c) +{ + return __builtin_altivec_vmsumshs(__a, __b, __c); +} + +static vector unsigned int __ATTRS_o_ai +vec_msums(vector unsigned short __a, + vector unsigned short __b, + vector unsigned int __c) +{ + return __builtin_altivec_vmsumuhs(__a, __b, __c); +} + +/* vec_vmsumshs */ + +static vector int __attribute__((__always_inline__)) +vec_vmsumshs(vector short __a, vector short __b, vector int __c) +{ + return __builtin_altivec_vmsumshs(__a, __b, __c); +} + +/* vec_vmsumuhs */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_vmsumuhs(vector unsigned short __a, + vector unsigned short __b, + vector unsigned int __c) +{ + return __builtin_altivec_vmsumuhs(__a, __b, __c); +} + +/* vec_mtvscr */ + +static void __ATTRS_o_ai +vec_mtvscr(vector signed char __a) +{ + __builtin_altivec_mtvscr((vector int)__a); +} + +static void __ATTRS_o_ai +vec_mtvscr(vector unsigned char __a) +{ + __builtin_altivec_mtvscr((vector int)__a); +} + +static void __ATTRS_o_ai +vec_mtvscr(vector bool char __a) +{ + __builtin_altivec_mtvscr((vector int)__a); +} + +static void __ATTRS_o_ai +vec_mtvscr(vector short __a) +{ + __builtin_altivec_mtvscr((vector int)__a); +} + +static void __ATTRS_o_ai +vec_mtvscr(vector unsigned short __a) +{ + __builtin_altivec_mtvscr((vector int)__a); +} + +static void __ATTRS_o_ai +vec_mtvscr(vector bool short __a) +{ + __builtin_altivec_mtvscr((vector int)__a); +} + +static void __ATTRS_o_ai +vec_mtvscr(vector pixel __a) +{ + __builtin_altivec_mtvscr((vector int)__a); +} + +static void __ATTRS_o_ai +vec_mtvscr(vector int __a) +{ + __builtin_altivec_mtvscr((vector int)__a); +} + +static void __ATTRS_o_ai +vec_mtvscr(vector unsigned int __a) +{ + __builtin_altivec_mtvscr((vector int)__a); +} + +static void __ATTRS_o_ai +vec_mtvscr(vector bool int __a) +{ + __builtin_altivec_mtvscr((vector int)__a); +} + +static void __ATTRS_o_ai +vec_mtvscr(vector float __a) +{ + __builtin_altivec_mtvscr((vector int)__a); +} + +/* vec_mule */ + +static vector short __ATTRS_o_ai +vec_mule(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vmulesb(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_mule(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vmuleub(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_mule(vector short __a, vector short __b) +{ + return __builtin_altivec_vmulesh(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_mule(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vmuleuh(__a, __b); +} + +/* vec_vmulesb */ + +static vector short __attribute__((__always_inline__)) +vec_vmulesb(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vmulesb(__a, __b); +} + +/* vec_vmuleub */ + +static vector unsigned short __attribute__((__always_inline__)) +vec_vmuleub(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vmuleub(__a, __b); +} + +/* vec_vmulesh */ + +static vector int __attribute__((__always_inline__)) +vec_vmulesh(vector short __a, vector short __b) +{ + return __builtin_altivec_vmulesh(__a, __b); +} + +/* vec_vmuleuh */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_vmuleuh(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vmuleuh(__a, __b); +} + +/* vec_mulo */ + +static vector short __ATTRS_o_ai +vec_mulo(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vmulosb(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_mulo(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vmuloub(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_mulo(vector short __a, vector short __b) +{ + return __builtin_altivec_vmulosh(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_mulo(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vmulouh(__a, __b); +} + +/* vec_vmulosb */ + +static vector short __attribute__((__always_inline__)) +vec_vmulosb(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vmulosb(__a, __b); +} + +/* vec_vmuloub */ + +static vector unsigned short __attribute__((__always_inline__)) +vec_vmuloub(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vmuloub(__a, __b); +} + +/* vec_vmulosh */ + +static vector int __attribute__((__always_inline__)) +vec_vmulosh(vector short __a, vector short __b) +{ + return __builtin_altivec_vmulosh(__a, __b); +} + +/* vec_vmulouh */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_vmulouh(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vmulouh(__a, __b); +} + +/* vec_nmsub */ + +static vector float __attribute__((__always_inline__)) +vec_nmsub(vector float __a, vector float __b, vector float __c) +{ + return __builtin_altivec_vnmsubfp(__a, __b, __c); +} + +/* vec_vnmsubfp */ + +static vector float __attribute__((__always_inline__)) +vec_vnmsubfp(vector float __a, vector float __b, vector float __c) +{ + return __builtin_altivec_vnmsubfp(__a, __b, __c); +} + +/* vec_nor */ + +#define __builtin_altivec_vnor vec_nor + +static vector signed char __ATTRS_o_ai +vec_nor(vector signed char __a, vector signed char __b) +{ + return ~(__a | __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_nor(vector unsigned char __a, vector unsigned char __b) +{ + return ~(__a | __b); +} + +static vector bool char __ATTRS_o_ai +vec_nor(vector bool char __a, vector bool char __b) +{ + return ~(__a | __b); +} + +static vector short __ATTRS_o_ai +vec_nor(vector short __a, vector short __b) +{ + return ~(__a | __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_nor(vector unsigned short __a, vector unsigned short __b) +{ + return ~(__a | __b); +} + +static vector bool short __ATTRS_o_ai +vec_nor(vector bool short __a, vector bool short __b) +{ + return ~(__a | __b); +} + +static vector int __ATTRS_o_ai +vec_nor(vector int __a, vector int __b) +{ + return ~(__a | __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_nor(vector unsigned int __a, vector unsigned int __b) +{ + return ~(__a | __b); +} + +static vector bool int __ATTRS_o_ai +vec_nor(vector bool int __a, vector bool int __b) +{ + return ~(__a | __b); +} + +static vector float __ATTRS_o_ai +vec_nor(vector float __a, vector float __b) +{ + vector unsigned int __res = ~((vector unsigned int)__a | (vector unsigned int)__b); + return (vector float)__res; +} + +/* vec_vnor */ + +static vector signed char __ATTRS_o_ai +vec_vnor(vector signed char __a, vector signed char __b) +{ + return ~(__a | __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vnor(vector unsigned char __a, vector unsigned char __b) +{ + return ~(__a | __b); +} + +static vector bool char __ATTRS_o_ai +vec_vnor(vector bool char __a, vector bool char __b) +{ + return ~(__a | __b); +} + +static vector short __ATTRS_o_ai +vec_vnor(vector short __a, vector short __b) +{ + return ~(__a | __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vnor(vector unsigned short __a, vector unsigned short __b) +{ + return ~(__a | __b); +} + +static vector bool short __ATTRS_o_ai +vec_vnor(vector bool short __a, vector bool short __b) +{ + return ~(__a | __b); +} + +static vector int __ATTRS_o_ai +vec_vnor(vector int __a, vector int __b) +{ + return ~(__a | __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vnor(vector unsigned int __a, vector unsigned int __b) +{ + return ~(__a | __b); +} + +static vector bool int __ATTRS_o_ai +vec_vnor(vector bool int __a, vector bool int __b) +{ + return ~(__a | __b); +} + +static vector float __ATTRS_o_ai +vec_vnor(vector float __a, vector float __b) +{ + vector unsigned int __res = ~((vector unsigned int)__a | (vector unsigned int)__b); + return (vector float)__res; +} + +/* vec_or */ + +#define __builtin_altivec_vor vec_or + +static vector signed char __ATTRS_o_ai +vec_or(vector signed char __a, vector signed char __b) +{ + return __a | __b; +} + +static vector signed char __ATTRS_o_ai +vec_or(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a | __b; +} + +static vector signed char __ATTRS_o_ai +vec_or(vector signed char __a, vector bool char __b) +{ + return __a | (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_or(vector unsigned char __a, vector unsigned char __b) +{ + return __a | __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_or(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a | __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_or(vector unsigned char __a, vector bool char __b) +{ + return __a | (vector unsigned char)__b; +} + +static vector bool char __ATTRS_o_ai +vec_or(vector bool char __a, vector bool char __b) +{ + return __a | __b; +} + +static vector short __ATTRS_o_ai +vec_or(vector short __a, vector short __b) +{ + return __a | __b; +} + +static vector short __ATTRS_o_ai +vec_or(vector bool short __a, vector short __b) +{ + return (vector short)__a | __b; +} + +static vector short __ATTRS_o_ai +vec_or(vector short __a, vector bool short __b) +{ + return __a | (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_or(vector unsigned short __a, vector unsigned short __b) +{ + return __a | __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_or(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a | __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_or(vector unsigned short __a, vector bool short __b) +{ + return __a | (vector unsigned short)__b; +} + +static vector bool short __ATTRS_o_ai +vec_or(vector bool short __a, vector bool short __b) +{ + return __a | __b; +} + +static vector int __ATTRS_o_ai +vec_or(vector int __a, vector int __b) +{ + return __a | __b; +} + +static vector int __ATTRS_o_ai +vec_or(vector bool int __a, vector int __b) +{ + return (vector int)__a | __b; +} + +static vector int __ATTRS_o_ai +vec_or(vector int __a, vector bool int __b) +{ + return __a | (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_or(vector unsigned int __a, vector unsigned int __b) +{ + return __a | __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_or(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a | __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_or(vector unsigned int __a, vector bool int __b) +{ + return __a | (vector unsigned int)__b; +} + +static vector bool int __ATTRS_o_ai +vec_or(vector bool int __a, vector bool int __b) +{ + return __a | __b; +} + +static vector float __ATTRS_o_ai +vec_or(vector float __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a | (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_or(vector bool int __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a | (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_or(vector float __a, vector bool int __b) +{ + vector unsigned int __res = (vector unsigned int)__a | (vector unsigned int)__b; + return (vector float)__res; +} + +/* vec_vor */ + +static vector signed char __ATTRS_o_ai +vec_vor(vector signed char __a, vector signed char __b) +{ + return __a | __b; +} + +static vector signed char __ATTRS_o_ai +vec_vor(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a | __b; +} + +static vector signed char __ATTRS_o_ai +vec_vor(vector signed char __a, vector bool char __b) +{ + return __a | (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vor(vector unsigned char __a, vector unsigned char __b) +{ + return __a | __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vor(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a | __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vor(vector unsigned char __a, vector bool char __b) +{ + return __a | (vector unsigned char)__b; +} + +static vector bool char __ATTRS_o_ai +vec_vor(vector bool char __a, vector bool char __b) +{ + return __a | __b; +} + +static vector short __ATTRS_o_ai +vec_vor(vector short __a, vector short __b) +{ + return __a | __b; +} + +static vector short __ATTRS_o_ai +vec_vor(vector bool short __a, vector short __b) +{ + return (vector short)__a | __b; +} + +static vector short __ATTRS_o_ai +vec_vor(vector short __a, vector bool short __b) +{ + return __a | (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vor(vector unsigned short __a, vector unsigned short __b) +{ + return __a | __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vor(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a | __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vor(vector unsigned short __a, vector bool short __b) +{ + return __a | (vector unsigned short)__b; +} + +static vector bool short __ATTRS_o_ai +vec_vor(vector bool short __a, vector bool short __b) +{ + return __a | __b; +} + +static vector int __ATTRS_o_ai +vec_vor(vector int __a, vector int __b) +{ + return __a | __b; +} + +static vector int __ATTRS_o_ai +vec_vor(vector bool int __a, vector int __b) +{ + return (vector int)__a | __b; +} + +static vector int __ATTRS_o_ai +vec_vor(vector int __a, vector bool int __b) +{ + return __a | (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vor(vector unsigned int __a, vector unsigned int __b) +{ + return __a | __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vor(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a | __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vor(vector unsigned int __a, vector bool int __b) +{ + return __a | (vector unsigned int)__b; +} + +static vector bool int __ATTRS_o_ai +vec_vor(vector bool int __a, vector bool int __b) +{ + return __a | __b; +} + +static vector float __ATTRS_o_ai +vec_vor(vector float __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a | (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_vor(vector bool int __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a | (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_vor(vector float __a, vector bool int __b) +{ + vector unsigned int __res = (vector unsigned int)__a | (vector unsigned int)__b; + return (vector float)__res; +} + +/* vec_pack */ + +static vector signed char __ATTRS_o_ai +vec_pack(vector signed short __a, vector signed short __b) +{ + return (vector signed char)vec_perm(__a, __b, (vector unsigned char) + (0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, + 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); +} + +static vector unsigned char __ATTRS_o_ai +vec_pack(vector unsigned short __a, vector unsigned short __b) +{ + return (vector unsigned char)vec_perm(__a, __b, (vector unsigned char) + (0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, + 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); +} + +static vector bool char __ATTRS_o_ai +vec_pack(vector bool short __a, vector bool short __b) +{ + return (vector bool char)vec_perm(__a, __b, (vector unsigned char) + (0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, + 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); +} + +static vector short __ATTRS_o_ai +vec_pack(vector int __a, vector int __b) +{ + return (vector short)vec_perm(__a, __b, (vector unsigned char) + (0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, + 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); +} + +static vector unsigned short __ATTRS_o_ai +vec_pack(vector unsigned int __a, vector unsigned int __b) +{ + return (vector unsigned short)vec_perm(__a, __b, (vector unsigned char) + (0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, + 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); +} + +static vector bool short __ATTRS_o_ai +vec_pack(vector bool int __a, vector bool int __b) +{ + return (vector bool short)vec_perm(__a, __b, (vector unsigned char) + (0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, + 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); +} + +/* vec_vpkuhum */ + +#define __builtin_altivec_vpkuhum vec_vpkuhum + +static vector signed char __ATTRS_o_ai +vec_vpkuhum(vector signed short __a, vector signed short __b) +{ + return (vector signed char)vec_perm(__a, __b, (vector unsigned char) + (0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, + 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); +} + +static vector unsigned char __ATTRS_o_ai +vec_vpkuhum(vector unsigned short __a, vector unsigned short __b) +{ + return (vector unsigned char)vec_perm(__a, __b, (vector unsigned char) + (0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, + 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); +} + +static vector bool char __ATTRS_o_ai +vec_vpkuhum(vector bool short __a, vector bool short __b) +{ + return (vector bool char)vec_perm(__a, __b, (vector unsigned char) + (0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, + 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F)); +} + +/* vec_vpkuwum */ + +#define __builtin_altivec_vpkuwum vec_vpkuwum + +static vector short __ATTRS_o_ai +vec_vpkuwum(vector int __a, vector int __b) +{ + return (vector short)vec_perm(__a, __b, (vector unsigned char) + (0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, + 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); +} + +static vector unsigned short __ATTRS_o_ai +vec_vpkuwum(vector unsigned int __a, vector unsigned int __b) +{ + return (vector unsigned short)vec_perm(__a, __b, (vector unsigned char) + (0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, + 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); +} + +static vector bool short __ATTRS_o_ai +vec_vpkuwum(vector bool int __a, vector bool int __b) +{ + return (vector bool short)vec_perm(__a, __b, (vector unsigned char) + (0x02, 0x03, 0x06, 0x07, 0x0A, 0x0B, 0x0E, 0x0F, + 0x12, 0x13, 0x16, 0x17, 0x1A, 0x1B, 0x1E, 0x1F)); +} + +/* vec_packpx */ + +static vector pixel __attribute__((__always_inline__)) +vec_packpx(vector unsigned int __a, vector unsigned int __b) +{ + return (vector pixel)__builtin_altivec_vpkpx(__a, __b); +} + +/* vec_vpkpx */ + +static vector pixel __attribute__((__always_inline__)) +vec_vpkpx(vector unsigned int __a, vector unsigned int __b) +{ + return (vector pixel)__builtin_altivec_vpkpx(__a, __b); +} + +/* vec_packs */ + +static vector signed char __ATTRS_o_ai +vec_packs(vector short __a, vector short __b) +{ + return __builtin_altivec_vpkshss(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_packs(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vpkuhus(__a, __b); +} + +static vector signed short __ATTRS_o_ai +vec_packs(vector int __a, vector int __b) +{ + return __builtin_altivec_vpkswss(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_packs(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vpkuwus(__a, __b); +} + +/* vec_vpkshss */ + +static vector signed char __attribute__((__always_inline__)) +vec_vpkshss(vector short __a, vector short __b) +{ + return __builtin_altivec_vpkshss(__a, __b); +} + +/* vec_vpkuhus */ + +static vector unsigned char __attribute__((__always_inline__)) +vec_vpkuhus(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vpkuhus(__a, __b); +} + +/* vec_vpkswss */ + +static vector signed short __attribute__((__always_inline__)) +vec_vpkswss(vector int __a, vector int __b) +{ + return __builtin_altivec_vpkswss(__a, __b); +} + +/* vec_vpkuwus */ + +static vector unsigned short __attribute__((__always_inline__)) +vec_vpkuwus(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vpkuwus(__a, __b); +} + +/* vec_packsu */ + +static vector unsigned char __ATTRS_o_ai +vec_packsu(vector short __a, vector short __b) +{ + return __builtin_altivec_vpkshus(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_packsu(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vpkuhus(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_packsu(vector int __a, vector int __b) +{ + return __builtin_altivec_vpkswus(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_packsu(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vpkuwus(__a, __b); +} + +/* vec_vpkshus */ + +static vector unsigned char __ATTRS_o_ai +vec_vpkshus(vector short __a, vector short __b) +{ + return __builtin_altivec_vpkshus(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vpkshus(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vpkuhus(__a, __b); +} + +/* vec_vpkswus */ + +static vector unsigned short __ATTRS_o_ai +vec_vpkswus(vector int __a, vector int __b) +{ + return __builtin_altivec_vpkswus(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vpkswus(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vpkuwus(__a, __b); +} + +/* vec_perm */ + +vector signed char __ATTRS_o_ai +vec_perm(vector signed char __a, vector signed char __b, vector unsigned char __c) +{ + return (vector signed char) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +vector unsigned char __ATTRS_o_ai +vec_perm(vector unsigned char __a, + vector unsigned char __b, + vector unsigned char __c) +{ + return (vector unsigned char) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +vector bool char __ATTRS_o_ai +vec_perm(vector bool char __a, vector bool char __b, vector unsigned char __c) +{ + return (vector bool char) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +vector short __ATTRS_o_ai +vec_perm(vector short __a, vector short __b, vector unsigned char __c) +{ + return (vector short) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +vector unsigned short __ATTRS_o_ai +vec_perm(vector unsigned short __a, + vector unsigned short __b, + vector unsigned char __c) +{ + return (vector unsigned short) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +vector bool short __ATTRS_o_ai +vec_perm(vector bool short __a, vector bool short __b, vector unsigned char __c) +{ + return (vector bool short) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +vector pixel __ATTRS_o_ai +vec_perm(vector pixel __a, vector pixel __b, vector unsigned char __c) +{ + return (vector pixel) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +vector int __ATTRS_o_ai +vec_perm(vector int __a, vector int __b, vector unsigned char __c) +{ + return (vector int)__builtin_altivec_vperm_4si(__a, __b, __c); +} + +vector unsigned int __ATTRS_o_ai +vec_perm(vector unsigned int __a, vector unsigned int __b, vector unsigned char __c) +{ + return (vector unsigned int) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +vector bool int __ATTRS_o_ai +vec_perm(vector bool int __a, vector bool int __b, vector unsigned char __c) +{ + return (vector bool int) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +vector float __ATTRS_o_ai +vec_perm(vector float __a, vector float __b, vector unsigned char __c) +{ + return (vector float) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +/* vec_vperm */ + +static vector signed char __ATTRS_o_ai +vec_vperm(vector signed char __a, vector signed char __b, vector unsigned char __c) +{ + return (vector signed char) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +static vector unsigned char __ATTRS_o_ai +vec_vperm(vector unsigned char __a, + vector unsigned char __b, + vector unsigned char __c) +{ + return (vector unsigned char) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +static vector bool char __ATTRS_o_ai +vec_vperm(vector bool char __a, vector bool char __b, vector unsigned char __c) +{ + return (vector bool char) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +static vector short __ATTRS_o_ai +vec_vperm(vector short __a, vector short __b, vector unsigned char __c) +{ + return (vector short) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +static vector unsigned short __ATTRS_o_ai +vec_vperm(vector unsigned short __a, + vector unsigned short __b, + vector unsigned char __c) +{ + return (vector unsigned short) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +static vector bool short __ATTRS_o_ai +vec_vperm(vector bool short __a, vector bool short __b, vector unsigned char __c) +{ + return (vector bool short) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +static vector pixel __ATTRS_o_ai +vec_vperm(vector pixel __a, vector pixel __b, vector unsigned char __c) +{ + return (vector pixel) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +static vector int __ATTRS_o_ai +vec_vperm(vector int __a, vector int __b, vector unsigned char __c) +{ + return (vector int)__builtin_altivec_vperm_4si(__a, __b, __c); +} + +static vector unsigned int __ATTRS_o_ai +vec_vperm(vector unsigned int __a, vector unsigned int __b, vector unsigned char __c) +{ + return (vector unsigned int) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +static vector bool int __ATTRS_o_ai +vec_vperm(vector bool int __a, vector bool int __b, vector unsigned char __c) +{ + return (vector bool int) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +static vector float __ATTRS_o_ai +vec_vperm(vector float __a, vector float __b, vector unsigned char __c) +{ + return (vector float) + __builtin_altivec_vperm_4si((vector int)__a, (vector int)__b, __c); +} + +/* vec_re */ + +static vector float __attribute__((__always_inline__)) +vec_re(vector float __a) +{ + return __builtin_altivec_vrefp(__a); +} + +/* vec_vrefp */ + +static vector float __attribute__((__always_inline__)) +vec_vrefp(vector float __a) +{ + return __builtin_altivec_vrefp(__a); +} + +/* vec_rl */ + +static vector signed char __ATTRS_o_ai +vec_rl(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_rl(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b); +} + +static vector short __ATTRS_o_ai +vec_rl(vector short __a, vector unsigned short __b) +{ + return __builtin_altivec_vrlh(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_rl(vector unsigned short __a, vector unsigned short __b) +{ + return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b); +} + +static vector int __ATTRS_o_ai +vec_rl(vector int __a, vector unsigned int __b) +{ + return __builtin_altivec_vrlw(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_rl(vector unsigned int __a, vector unsigned int __b) +{ + return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b); +} + +/* vec_vrlb */ + +static vector signed char __ATTRS_o_ai +vec_vrlb(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char)__builtin_altivec_vrlb((vector char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vrlb(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char)__builtin_altivec_vrlb((vector char)__a, __b); +} + +/* vec_vrlh */ + +static vector short __ATTRS_o_ai +vec_vrlh(vector short __a, vector unsigned short __b) +{ + return __builtin_altivec_vrlh(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vrlh(vector unsigned short __a, vector unsigned short __b) +{ + return (vector unsigned short)__builtin_altivec_vrlh((vector short)__a, __b); +} + +/* vec_vrlw */ + +static vector int __ATTRS_o_ai +vec_vrlw(vector int __a, vector unsigned int __b) +{ + return __builtin_altivec_vrlw(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vrlw(vector unsigned int __a, vector unsigned int __b) +{ + return (vector unsigned int)__builtin_altivec_vrlw((vector int)__a, __b); +} + +/* vec_round */ + +static vector float __attribute__((__always_inline__)) +vec_round(vector float __a) +{ + return __builtin_altivec_vrfin(__a); +} + +/* vec_vrfin */ + +static vector float __attribute__((__always_inline__)) +vec_vrfin(vector float __a) +{ + return __builtin_altivec_vrfin(__a); +} + +/* vec_rsqrte */ + +static __vector float __attribute__((__always_inline__)) +vec_rsqrte(vector float __a) +{ + return __builtin_altivec_vrsqrtefp(__a); +} + +/* vec_vrsqrtefp */ + +static __vector float __attribute__((__always_inline__)) +vec_vrsqrtefp(vector float __a) +{ + return __builtin_altivec_vrsqrtefp(__a); +} + +/* vec_sel */ + +#define __builtin_altivec_vsel_4si vec_sel + +static vector signed char __ATTRS_o_ai +vec_sel(vector signed char __a, vector signed char __b, vector unsigned char __c) +{ + return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); +} + +static vector signed char __ATTRS_o_ai +vec_sel(vector signed char __a, vector signed char __b, vector bool char __c) +{ + return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); +} + +static vector unsigned char __ATTRS_o_ai +vec_sel(vector unsigned char __a, vector unsigned char __b, vector unsigned char __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector unsigned char __ATTRS_o_ai +vec_sel(vector unsigned char __a, vector unsigned char __b, vector bool char __c) +{ + return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c); +} + +static vector bool char __ATTRS_o_ai +vec_sel(vector bool char __a, vector bool char __b, vector unsigned char __c) +{ + return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c); +} + +static vector bool char __ATTRS_o_ai +vec_sel(vector bool char __a, vector bool char __b, vector bool char __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector short __ATTRS_o_ai +vec_sel(vector short __a, vector short __b, vector unsigned short __c) +{ + return (__a & ~(vector short)__c) | (__b & (vector short)__c); +} + +static vector short __ATTRS_o_ai +vec_sel(vector short __a, vector short __b, vector bool short __c) +{ + return (__a & ~(vector short)__c) | (__b & (vector short)__c); +} + +static vector unsigned short __ATTRS_o_ai +vec_sel(vector unsigned short __a, + vector unsigned short __b, + vector unsigned short __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector unsigned short __ATTRS_o_ai +vec_sel(vector unsigned short __a, vector unsigned short __b, vector bool short __c) +{ + return (__a & ~(vector unsigned short)__c) | (__b & (vector unsigned short)__c); +} + +static vector bool short __ATTRS_o_ai +vec_sel(vector bool short __a, vector bool short __b, vector unsigned short __c) +{ + return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c); +} + +static vector bool short __ATTRS_o_ai +vec_sel(vector bool short __a, vector bool short __b, vector bool short __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector int __ATTRS_o_ai +vec_sel(vector int __a, vector int __b, vector unsigned int __c) +{ + return (__a & ~(vector int)__c) | (__b & (vector int)__c); +} + +static vector int __ATTRS_o_ai +vec_sel(vector int __a, vector int __b, vector bool int __c) +{ + return (__a & ~(vector int)__c) | (__b & (vector int)__c); +} + +static vector unsigned int __ATTRS_o_ai +vec_sel(vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector unsigned int __ATTRS_o_ai +vec_sel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) +{ + return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c); +} + +static vector bool int __ATTRS_o_ai +vec_sel(vector bool int __a, vector bool int __b, vector unsigned int __c) +{ + return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c); +} + +static vector bool int __ATTRS_o_ai +vec_sel(vector bool int __a, vector bool int __b, vector bool int __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector float __ATTRS_o_ai +vec_sel(vector float __a, vector float __b, vector unsigned int __c) +{ + vector int __res = ((vector int)__a & ~(vector int)__c) + | ((vector int)__b & (vector int)__c); + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_sel(vector float __a, vector float __b, vector bool int __c) +{ + vector int __res = ((vector int)__a & ~(vector int)__c) + | ((vector int)__b & (vector int)__c); + return (vector float)__res; +} + +/* vec_vsel */ + +static vector signed char __ATTRS_o_ai +vec_vsel(vector signed char __a, vector signed char __b, vector unsigned char __c) +{ + return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); +} + +static vector signed char __ATTRS_o_ai +vec_vsel(vector signed char __a, vector signed char __b, vector bool char __c) +{ + return (__a & ~(vector signed char)__c) | (__b & (vector signed char)__c); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsel(vector unsigned char __a, vector unsigned char __b, vector unsigned char __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsel(vector unsigned char __a, vector unsigned char __b, vector bool char __c) +{ + return (__a & ~(vector unsigned char)__c) | (__b & (vector unsigned char)__c); +} + +static vector bool char __ATTRS_o_ai +vec_vsel(vector bool char __a, vector bool char __b, vector unsigned char __c) +{ + return (__a & ~(vector bool char)__c) | (__b & (vector bool char)__c); +} + +static vector bool char __ATTRS_o_ai +vec_vsel(vector bool char __a, vector bool char __b, vector bool char __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector short __ATTRS_o_ai +vec_vsel(vector short __a, vector short __b, vector unsigned short __c) +{ + return (__a & ~(vector short)__c) | (__b & (vector short)__c); +} + +static vector short __ATTRS_o_ai +vec_vsel(vector short __a, vector short __b, vector bool short __c) +{ + return (__a & ~(vector short)__c) | (__b & (vector short)__c); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsel(vector unsigned short __a, + vector unsigned short __b, + vector unsigned short __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsel(vector unsigned short __a, vector unsigned short __b, vector bool short __c) +{ + return (__a & ~(vector unsigned short)__c) | (__b & (vector unsigned short)__c); +} + +static vector bool short __ATTRS_o_ai +vec_vsel(vector bool short __a, vector bool short __b, vector unsigned short __c) +{ + return (__a & ~(vector bool short)__c) | (__b & (vector bool short)__c); +} + +static vector bool short __ATTRS_o_ai +vec_vsel(vector bool short __a, vector bool short __b, vector bool short __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector int __ATTRS_o_ai +vec_vsel(vector int __a, vector int __b, vector unsigned int __c) +{ + return (__a & ~(vector int)__c) | (__b & (vector int)__c); +} + +static vector int __ATTRS_o_ai +vec_vsel(vector int __a, vector int __b, vector bool int __c) +{ + return (__a & ~(vector int)__c) | (__b & (vector int)__c); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsel(vector unsigned int __a, vector unsigned int __b, vector unsigned int __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsel(vector unsigned int __a, vector unsigned int __b, vector bool int __c) +{ + return (__a & ~(vector unsigned int)__c) | (__b & (vector unsigned int)__c); +} + +static vector bool int __ATTRS_o_ai +vec_vsel(vector bool int __a, vector bool int __b, vector unsigned int __c) +{ + return (__a & ~(vector bool int)__c) | (__b & (vector bool int)__c); +} + +static vector bool int __ATTRS_o_ai +vec_vsel(vector bool int __a, vector bool int __b, vector bool int __c) +{ + return (__a & ~__c) | (__b & __c); +} + +static vector float __ATTRS_o_ai +vec_vsel(vector float __a, vector float __b, vector unsigned int __c) +{ + vector int __res = ((vector int)__a & ~(vector int)__c) + | ((vector int)__b & (vector int)__c); + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_vsel(vector float __a, vector float __b, vector bool int __c) +{ + vector int __res = ((vector int)__a & ~(vector int)__c) + | ((vector int)__b & (vector int)__c); + return (vector float)__res; +} + +/* vec_sl */ + +static vector signed char __ATTRS_o_ai +vec_sl(vector signed char __a, vector unsigned char __b) +{ + return __a << (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_sl(vector unsigned char __a, vector unsigned char __b) +{ + return __a << __b; +} + +static vector short __ATTRS_o_ai +vec_sl(vector short __a, vector unsigned short __b) +{ + return __a << (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_sl(vector unsigned short __a, vector unsigned short __b) +{ + return __a << __b; +} + +static vector int __ATTRS_o_ai +vec_sl(vector int __a, vector unsigned int __b) +{ + return __a << (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_sl(vector unsigned int __a, vector unsigned int __b) +{ + return __a << __b; +} + +/* vec_vslb */ + +#define __builtin_altivec_vslb vec_vslb + +static vector signed char __ATTRS_o_ai +vec_vslb(vector signed char __a, vector unsigned char __b) +{ + return vec_sl(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vslb(vector unsigned char __a, vector unsigned char __b) +{ + return vec_sl(__a, __b); +} + +/* vec_vslh */ + +#define __builtin_altivec_vslh vec_vslh + +static vector short __ATTRS_o_ai +vec_vslh(vector short __a, vector unsigned short __b) +{ + return vec_sl(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vslh(vector unsigned short __a, vector unsigned short __b) +{ + return vec_sl(__a, __b); +} + +/* vec_vslw */ + +#define __builtin_altivec_vslw vec_vslw + +static vector int __ATTRS_o_ai +vec_vslw(vector int __a, vector unsigned int __b) +{ + return vec_sl(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vslw(vector unsigned int __a, vector unsigned int __b) +{ + return vec_sl(__a, __b); +} + +/* vec_sld */ + +#define __builtin_altivec_vsldoi_4si vec_sld + +static vector signed char __ATTRS_o_ai +vec_sld(vector signed char __a, vector signed char __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector unsigned char __ATTRS_o_ai +vec_sld(vector unsigned char __a, vector unsigned char __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector short __ATTRS_o_ai +vec_sld(vector short __a, vector short __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector unsigned short __ATTRS_o_ai +vec_sld(vector unsigned short __a, vector unsigned short __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector pixel __ATTRS_o_ai +vec_sld(vector pixel __a, vector pixel __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector int __ATTRS_o_ai +vec_sld(vector int __a, vector int __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector unsigned int __ATTRS_o_ai +vec_sld(vector unsigned int __a, vector unsigned int __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector float __ATTRS_o_ai +vec_sld(vector float __a, vector float __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +/* vec_vsldoi */ + +static vector signed char __ATTRS_o_ai +vec_vsldoi(vector signed char __a, vector signed char __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsldoi(vector unsigned char __a, vector unsigned char __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector short __ATTRS_o_ai +vec_vsldoi(vector short __a, vector short __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsldoi(vector unsigned short __a, vector unsigned short __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector pixel __ATTRS_o_ai +vec_vsldoi(vector pixel __a, vector pixel __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector int __ATTRS_o_ai +vec_vsldoi(vector int __a, vector int __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsldoi(vector unsigned int __a, vector unsigned int __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +static vector float __ATTRS_o_ai +vec_vsldoi(vector float __a, vector float __b, unsigned char __c) +{ + return vec_perm(__a, __b, (vector unsigned char) + (__c, __c+1, __c+2, __c+3, __c+4, __c+5, __c+6, __c+7, + __c+8, __c+9, __c+10, __c+11, __c+12, __c+13, __c+14, __c+15)); +} + +/* vec_sll */ + +static vector signed char __ATTRS_o_ai +vec_sll(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_sll(vector signed char __a, vector unsigned short __b) +{ + return (vector signed char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_sll(vector signed char __a, vector unsigned int __b) +{ + return (vector signed char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_sll(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_sll(vector unsigned char __a, vector unsigned short __b) +{ + return (vector unsigned char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_sll(vector unsigned char __a, vector unsigned int __b) +{ + return (vector unsigned char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_sll(vector bool char __a, vector unsigned char __b) +{ + return (vector bool char)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_sll(vector bool char __a, vector unsigned short __b) +{ + return (vector bool char)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_sll(vector bool char __a, vector unsigned int __b) +{ + return (vector bool char)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_sll(vector short __a, vector unsigned char __b) +{ + return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_sll(vector short __a, vector unsigned short __b) +{ + return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_sll(vector short __a, vector unsigned int __b) +{ + return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_sll(vector unsigned short __a, vector unsigned char __b) +{ + return (vector unsigned short) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_sll(vector unsigned short __a, vector unsigned short __b) +{ + return (vector unsigned short) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_sll(vector unsigned short __a, vector unsigned int __b) +{ + return (vector unsigned short) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_sll(vector bool short __a, vector unsigned char __b) +{ + return (vector bool short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_sll(vector bool short __a, vector unsigned short __b) +{ + return (vector bool short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_sll(vector bool short __a, vector unsigned int __b) +{ + return (vector bool short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_sll(vector pixel __a, vector unsigned char __b) +{ + return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_sll(vector pixel __a, vector unsigned short __b) +{ + return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_sll(vector pixel __a, vector unsigned int __b) +{ + return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_sll(vector int __a, vector unsigned char __b) +{ + return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_sll(vector int __a, vector unsigned short __b) +{ + return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_sll(vector int __a, vector unsigned int __b) +{ + return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_sll(vector unsigned int __a, vector unsigned char __b) +{ + return (vector unsigned int) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_sll(vector unsigned int __a, vector unsigned short __b) +{ + return (vector unsigned int) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_sll(vector unsigned int __a, vector unsigned int __b) +{ + return (vector unsigned int) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_sll(vector bool int __a, vector unsigned char __b) +{ + return (vector bool int)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_sll(vector bool int __a, vector unsigned short __b) +{ + return (vector bool int)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_sll(vector bool int __a, vector unsigned int __b) +{ + return (vector bool int)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +/* vec_vsl */ + +static vector signed char __ATTRS_o_ai +vec_vsl(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_vsl(vector signed char __a, vector unsigned short __b) +{ + return (vector signed char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_vsl(vector signed char __a, vector unsigned int __b) +{ + return (vector signed char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsl(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsl(vector unsigned char __a, vector unsigned short __b) +{ + return (vector unsigned char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsl(vector unsigned char __a, vector unsigned int __b) +{ + return (vector unsigned char) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_vsl(vector bool char __a, vector unsigned char __b) +{ + return (vector bool char)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_vsl(vector bool char __a, vector unsigned short __b) +{ + return (vector bool char)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_vsl(vector bool char __a, vector unsigned int __b) +{ + return (vector bool char)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_vsl(vector short __a, vector unsigned char __b) +{ + return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_vsl(vector short __a, vector unsigned short __b) +{ + return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_vsl(vector short __a, vector unsigned int __b) +{ + return (vector short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsl(vector unsigned short __a, vector unsigned char __b) +{ + return (vector unsigned short) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsl(vector unsigned short __a, vector unsigned short __b) +{ + return (vector unsigned short) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsl(vector unsigned short __a, vector unsigned int __b) +{ + return (vector unsigned short) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_vsl(vector bool short __a, vector unsigned char __b) +{ + return (vector bool short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_vsl(vector bool short __a, vector unsigned short __b) +{ + return (vector bool short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_vsl(vector bool short __a, vector unsigned int __b) +{ + return (vector bool short)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_vsl(vector pixel __a, vector unsigned char __b) +{ + return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_vsl(vector pixel __a, vector unsigned short __b) +{ + return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_vsl(vector pixel __a, vector unsigned int __b) +{ + return (vector pixel)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_vsl(vector int __a, vector unsigned char __b) +{ + return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_vsl(vector int __a, vector unsigned short __b) +{ + return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_vsl(vector int __a, vector unsigned int __b) +{ + return (vector int)__builtin_altivec_vsl(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsl(vector unsigned int __a, vector unsigned char __b) +{ + return (vector unsigned int) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsl(vector unsigned int __a, vector unsigned short __b) +{ + return (vector unsigned int) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsl(vector unsigned int __a, vector unsigned int __b) +{ + return (vector unsigned int) + __builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_vsl(vector bool int __a, vector unsigned char __b) +{ + return (vector bool int)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_vsl(vector bool int __a, vector unsigned short __b) +{ + return (vector bool int)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_vsl(vector bool int __a, vector unsigned int __b) +{ + return (vector bool int)__builtin_altivec_vsl((vector int)__a, (vector int)__b); +} + +/* vec_slo */ + +static vector signed char __ATTRS_o_ai +vec_slo(vector signed char __a, vector signed char __b) +{ + return (vector signed char) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_slo(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_slo(vector unsigned char __a, vector signed char __b) +{ + return (vector unsigned char) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_slo(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_slo(vector short __a, vector signed char __b) +{ + return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_slo(vector short __a, vector unsigned char __b) +{ + return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_slo(vector unsigned short __a, vector signed char __b) +{ + return (vector unsigned short) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_slo(vector unsigned short __a, vector unsigned char __b) +{ + return (vector unsigned short) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_slo(vector pixel __a, vector signed char __b) +{ + return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_slo(vector pixel __a, vector unsigned char __b) +{ + return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_slo(vector int __a, vector signed char __b) +{ + return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_slo(vector int __a, vector unsigned char __b) +{ + return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_slo(vector unsigned int __a, vector signed char __b) +{ + return (vector unsigned int) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_slo(vector unsigned int __a, vector unsigned char __b) +{ + return (vector unsigned int) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector float __ATTRS_o_ai +vec_slo(vector float __a, vector signed char __b) +{ + return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector float __ATTRS_o_ai +vec_slo(vector float __a, vector unsigned char __b) +{ + return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +/* vec_vslo */ + +static vector signed char __ATTRS_o_ai +vec_vslo(vector signed char __a, vector signed char __b) +{ + return (vector signed char) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_vslo(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vslo(vector unsigned char __a, vector signed char __b) +{ + return (vector unsigned char) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vslo(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_vslo(vector short __a, vector signed char __b) +{ + return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_vslo(vector short __a, vector unsigned char __b) +{ + return (vector short)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vslo(vector unsigned short __a, vector signed char __b) +{ + return (vector unsigned short) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vslo(vector unsigned short __a, vector unsigned char __b) +{ + return (vector unsigned short) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_vslo(vector pixel __a, vector signed char __b) +{ + return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_vslo(vector pixel __a, vector unsigned char __b) +{ + return (vector pixel)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_vslo(vector int __a, vector signed char __b) +{ + return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_vslo(vector int __a, vector unsigned char __b) +{ + return (vector int)__builtin_altivec_vslo(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vslo(vector unsigned int __a, vector signed char __b) +{ + return (vector unsigned int) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vslo(vector unsigned int __a, vector unsigned char __b) +{ + return (vector unsigned int) + __builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector float __ATTRS_o_ai +vec_vslo(vector float __a, vector signed char __b) +{ + return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +static vector float __ATTRS_o_ai +vec_vslo(vector float __a, vector unsigned char __b) +{ + return (vector float)__builtin_altivec_vslo((vector int)__a, (vector int)__b); +} + +/* vec_splat */ + +static vector signed char __ATTRS_o_ai +vec_splat(vector signed char __a, unsigned char __b) +{ + return vec_perm(__a, __a, (vector unsigned char)(__b)); +} + +static vector unsigned char __ATTRS_o_ai +vec_splat(vector unsigned char __a, unsigned char __b) +{ + return vec_perm(__a, __a, (vector unsigned char)(__b)); +} + +static vector bool char __ATTRS_o_ai +vec_splat(vector bool char __a, unsigned char __b) +{ + return vec_perm(__a, __a, (vector unsigned char)(__b)); +} + +static vector short __ATTRS_o_ai +vec_splat(vector short __a, unsigned char __b) +{ + __b *= 2; + unsigned char b1=__b+1; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1)); +} + +static vector unsigned short __ATTRS_o_ai +vec_splat(vector unsigned short __a, unsigned char __b) +{ + __b *= 2; + unsigned char b1=__b+1; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1)); +} + +static vector bool short __ATTRS_o_ai +vec_splat(vector bool short __a, unsigned char __b) +{ + __b *= 2; + unsigned char b1=__b+1; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1)); +} + +static vector pixel __ATTRS_o_ai +vec_splat(vector pixel __a, unsigned char __b) +{ + __b *= 2; + unsigned char b1=__b+1; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1)); +} + +static vector int __ATTRS_o_ai +vec_splat(vector int __a, unsigned char __b) +{ + __b *= 4; + unsigned char b1=__b+1, b2=__b+2, b3=__b+3; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3)); +} + +static vector unsigned int __ATTRS_o_ai +vec_splat(vector unsigned int __a, unsigned char __b) +{ + __b *= 4; + unsigned char b1=__b+1, b2=__b+2, b3=__b+3; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3)); +} + +static vector bool int __ATTRS_o_ai +vec_splat(vector bool int __a, unsigned char __b) +{ + __b *= 4; + unsigned char b1=__b+1, b2=__b+2, b3=__b+3; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3)); +} + +static vector float __ATTRS_o_ai +vec_splat(vector float __a, unsigned char __b) +{ + __b *= 4; + unsigned char b1=__b+1, b2=__b+2, b3=__b+3; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3)); +} + +/* vec_vspltb */ + +#define __builtin_altivec_vspltb vec_vspltb + +static vector signed char __ATTRS_o_ai +vec_vspltb(vector signed char __a, unsigned char __b) +{ + return vec_perm(__a, __a, (vector unsigned char)(__b)); +} + +static vector unsigned char __ATTRS_o_ai +vec_vspltb(vector unsigned char __a, unsigned char __b) +{ + return vec_perm(__a, __a, (vector unsigned char)(__b)); +} + +static vector bool char __ATTRS_o_ai +vec_vspltb(vector bool char __a, unsigned char __b) +{ + return vec_perm(__a, __a, (vector unsigned char)(__b)); +} + +/* vec_vsplth */ + +#define __builtin_altivec_vsplth vec_vsplth + +static vector short __ATTRS_o_ai +vec_vsplth(vector short __a, unsigned char __b) +{ + __b *= 2; + unsigned char b1=__b+1; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1)); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsplth(vector unsigned short __a, unsigned char __b) +{ + __b *= 2; + unsigned char b1=__b+1; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1)); +} + +static vector bool short __ATTRS_o_ai +vec_vsplth(vector bool short __a, unsigned char __b) +{ + __b *= 2; + unsigned char b1=__b+1; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1)); +} + +static vector pixel __ATTRS_o_ai +vec_vsplth(vector pixel __a, unsigned char __b) +{ + __b *= 2; + unsigned char b1=__b+1; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1, __b, b1)); +} + +/* vec_vspltw */ + +#define __builtin_altivec_vspltw vec_vspltw + +static vector int __ATTRS_o_ai +vec_vspltw(vector int __a, unsigned char __b) +{ + __b *= 4; + unsigned char b1=__b+1, b2=__b+2, b3=__b+3; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3)); +} + +static vector unsigned int __ATTRS_o_ai +vec_vspltw(vector unsigned int __a, unsigned char __b) +{ + __b *= 4; + unsigned char b1=__b+1, b2=__b+2, b3=__b+3; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3)); +} + +static vector bool int __ATTRS_o_ai +vec_vspltw(vector bool int __a, unsigned char __b) +{ + __b *= 4; + unsigned char b1=__b+1, b2=__b+2, b3=__b+3; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3)); +} + +static vector float __ATTRS_o_ai +vec_vspltw(vector float __a, unsigned char __b) +{ + __b *= 4; + unsigned char b1=__b+1, b2=__b+2, b3=__b+3; + return vec_perm(__a, __a, (vector unsigned char) + (__b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3, __b, b1, b2, b3)); +} + +/* vec_splat_s8 */ + +#define __builtin_altivec_vspltisb vec_splat_s8 + +// FIXME: parameter should be treated as 5-bit signed literal +static vector signed char __ATTRS_o_ai +vec_splat_s8(signed char __a) +{ + return (vector signed char)(__a); +} + +/* vec_vspltisb */ + +// FIXME: parameter should be treated as 5-bit signed literal +static vector signed char __ATTRS_o_ai +vec_vspltisb(signed char __a) +{ + return (vector signed char)(__a); +} + +/* vec_splat_s16 */ + +#define __builtin_altivec_vspltish vec_splat_s16 + +// FIXME: parameter should be treated as 5-bit signed literal +static vector short __ATTRS_o_ai +vec_splat_s16(signed char __a) +{ + return (vector short)(__a); +} + +/* vec_vspltish */ + +// FIXME: parameter should be treated as 5-bit signed literal +static vector short __ATTRS_o_ai +vec_vspltish(signed char __a) +{ + return (vector short)(__a); +} + +/* vec_splat_s32 */ + +#define __builtin_altivec_vspltisw vec_splat_s32 + +// FIXME: parameter should be treated as 5-bit signed literal +static vector int __ATTRS_o_ai +vec_splat_s32(signed char __a) +{ + return (vector int)(__a); +} + +/* vec_vspltisw */ + +// FIXME: parameter should be treated as 5-bit signed literal +static vector int __ATTRS_o_ai +vec_vspltisw(signed char __a) +{ + return (vector int)(__a); +} + +/* vec_splat_u8 */ + +// FIXME: parameter should be treated as 5-bit signed literal +static vector unsigned char __ATTRS_o_ai +vec_splat_u8(unsigned char __a) +{ + return (vector unsigned char)(__a); +} + +/* vec_splat_u16 */ + +// FIXME: parameter should be treated as 5-bit signed literal +static vector unsigned short __ATTRS_o_ai +vec_splat_u16(signed char __a) +{ + return (vector unsigned short)(__a); +} + +/* vec_splat_u32 */ + +// FIXME: parameter should be treated as 5-bit signed literal +static vector unsigned int __ATTRS_o_ai +vec_splat_u32(signed char __a) +{ + return (vector unsigned int)(__a); +} + +/* vec_sr */ + +static vector signed char __ATTRS_o_ai +vec_sr(vector signed char __a, vector unsigned char __b) +{ + return __a >> (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_sr(vector unsigned char __a, vector unsigned char __b) +{ + return __a >> __b; +} + +static vector short __ATTRS_o_ai +vec_sr(vector short __a, vector unsigned short __b) +{ + return __a >> (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_sr(vector unsigned short __a, vector unsigned short __b) +{ + return __a >> __b; +} + +static vector int __ATTRS_o_ai +vec_sr(vector int __a, vector unsigned int __b) +{ + return __a >> (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_sr(vector unsigned int __a, vector unsigned int __b) +{ + return __a >> __b; +} + +/* vec_vsrb */ + +#define __builtin_altivec_vsrb vec_vsrb + +static vector signed char __ATTRS_o_ai +vec_vsrb(vector signed char __a, vector unsigned char __b) +{ + return __a >> (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vsrb(vector unsigned char __a, vector unsigned char __b) +{ + return __a >> __b; +} + +/* vec_vsrh */ + +#define __builtin_altivec_vsrh vec_vsrh + +static vector short __ATTRS_o_ai +vec_vsrh(vector short __a, vector unsigned short __b) +{ + return __a >> (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vsrh(vector unsigned short __a, vector unsigned short __b) +{ + return __a >> __b; +} + +/* vec_vsrw */ + +#define __builtin_altivec_vsrw vec_vsrw + +static vector int __ATTRS_o_ai +vec_vsrw(vector int __a, vector unsigned int __b) +{ + return __a >> (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vsrw(vector unsigned int __a, vector unsigned int __b) +{ + return __a >> __b; +} + +/* vec_sra */ + +static vector signed char __ATTRS_o_ai +vec_sra(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_sra(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b); +} + +static vector short __ATTRS_o_ai +vec_sra(vector short __a, vector unsigned short __b) +{ + return __builtin_altivec_vsrah(__a, (vector unsigned short)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_sra(vector unsigned short __a, vector unsigned short __b) +{ + return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b); +} + +static vector int __ATTRS_o_ai +vec_sra(vector int __a, vector unsigned int __b) +{ + return __builtin_altivec_vsraw(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_sra(vector unsigned int __a, vector unsigned int __b) +{ + return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b); +} + +/* vec_vsrab */ + +static vector signed char __ATTRS_o_ai +vec_vsrab(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char)__builtin_altivec_vsrab((vector char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsrab(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char)__builtin_altivec_vsrab((vector char)__a, __b); +} + +/* vec_vsrah */ + +static vector short __ATTRS_o_ai +vec_vsrah(vector short __a, vector unsigned short __b) +{ + return __builtin_altivec_vsrah(__a, (vector unsigned short)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsrah(vector unsigned short __a, vector unsigned short __b) +{ + return (vector unsigned short)__builtin_altivec_vsrah((vector short)__a, __b); +} + +/* vec_vsraw */ + +static vector int __ATTRS_o_ai +vec_vsraw(vector int __a, vector unsigned int __b) +{ + return __builtin_altivec_vsraw(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsraw(vector unsigned int __a, vector unsigned int __b) +{ + return (vector unsigned int)__builtin_altivec_vsraw((vector int)__a, __b); +} + +/* vec_srl */ + +static vector signed char __ATTRS_o_ai +vec_srl(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_srl(vector signed char __a, vector unsigned short __b) +{ + return (vector signed char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_srl(vector signed char __a, vector unsigned int __b) +{ + return (vector signed char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_srl(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_srl(vector unsigned char __a, vector unsigned short __b) +{ + return (vector unsigned char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_srl(vector unsigned char __a, vector unsigned int __b) +{ + return (vector unsigned char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_srl(vector bool char __a, vector unsigned char __b) +{ + return (vector bool char)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_srl(vector bool char __a, vector unsigned short __b) +{ + return (vector bool char)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_srl(vector bool char __a, vector unsigned int __b) +{ + return (vector bool char)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_srl(vector short __a, vector unsigned char __b) +{ + return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_srl(vector short __a, vector unsigned short __b) +{ + return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_srl(vector short __a, vector unsigned int __b) +{ + return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_srl(vector unsigned short __a, vector unsigned char __b) +{ + return (vector unsigned short) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_srl(vector unsigned short __a, vector unsigned short __b) +{ + return (vector unsigned short) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_srl(vector unsigned short __a, vector unsigned int __b) +{ + return (vector unsigned short) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_srl(vector bool short __a, vector unsigned char __b) +{ + return (vector bool short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_srl(vector bool short __a, vector unsigned short __b) +{ + return (vector bool short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_srl(vector bool short __a, vector unsigned int __b) +{ + return (vector bool short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_srl(vector pixel __a, vector unsigned char __b) +{ + return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_srl(vector pixel __a, vector unsigned short __b) +{ + return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_srl(vector pixel __a, vector unsigned int __b) +{ + return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_srl(vector int __a, vector unsigned char __b) +{ + return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_srl(vector int __a, vector unsigned short __b) +{ + return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_srl(vector int __a, vector unsigned int __b) +{ + return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_srl(vector unsigned int __a, vector unsigned char __b) +{ + return (vector unsigned int) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_srl(vector unsigned int __a, vector unsigned short __b) +{ + return (vector unsigned int) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_srl(vector unsigned int __a, vector unsigned int __b) +{ + return (vector unsigned int) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_srl(vector bool int __a, vector unsigned char __b) +{ + return (vector bool int)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_srl(vector bool int __a, vector unsigned short __b) +{ + return (vector bool int)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_srl(vector bool int __a, vector unsigned int __b) +{ + return (vector bool int)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +/* vec_vsr */ + +static vector signed char __ATTRS_o_ai +vec_vsr(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_vsr(vector signed char __a, vector unsigned short __b) +{ + return (vector signed char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_vsr(vector signed char __a, vector unsigned int __b) +{ + return (vector signed char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsr(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsr(vector unsigned char __a, vector unsigned short __b) +{ + return (vector unsigned char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsr(vector unsigned char __a, vector unsigned int __b) +{ + return (vector unsigned char) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_vsr(vector bool char __a, vector unsigned char __b) +{ + return (vector bool char)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_vsr(vector bool char __a, vector unsigned short __b) +{ + return (vector bool char)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool char __ATTRS_o_ai +vec_vsr(vector bool char __a, vector unsigned int __b) +{ + return (vector bool char)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_vsr(vector short __a, vector unsigned char __b) +{ + return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_vsr(vector short __a, vector unsigned short __b) +{ + return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_vsr(vector short __a, vector unsigned int __b) +{ + return (vector short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsr(vector unsigned short __a, vector unsigned char __b) +{ + return (vector unsigned short) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsr(vector unsigned short __a, vector unsigned short __b) +{ + return (vector unsigned short) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsr(vector unsigned short __a, vector unsigned int __b) +{ + return (vector unsigned short) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_vsr(vector bool short __a, vector unsigned char __b) +{ + return (vector bool short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_vsr(vector bool short __a, vector unsigned short __b) +{ + return (vector bool short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool short __ATTRS_o_ai +vec_vsr(vector bool short __a, vector unsigned int __b) +{ + return (vector bool short)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_vsr(vector pixel __a, vector unsigned char __b) +{ + return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_vsr(vector pixel __a, vector unsigned short __b) +{ + return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_vsr(vector pixel __a, vector unsigned int __b) +{ + return (vector pixel)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_vsr(vector int __a, vector unsigned char __b) +{ + return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_vsr(vector int __a, vector unsigned short __b) +{ + return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_vsr(vector int __a, vector unsigned int __b) +{ + return (vector int)__builtin_altivec_vsr(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsr(vector unsigned int __a, vector unsigned char __b) +{ + return (vector unsigned int) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsr(vector unsigned int __a, vector unsigned short __b) +{ + return (vector unsigned int) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsr(vector unsigned int __a, vector unsigned int __b) +{ + return (vector unsigned int) + __builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_vsr(vector bool int __a, vector unsigned char __b) +{ + return (vector bool int)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_vsr(vector bool int __a, vector unsigned short __b) +{ + return (vector bool int)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +static vector bool int __ATTRS_o_ai +vec_vsr(vector bool int __a, vector unsigned int __b) +{ + return (vector bool int)__builtin_altivec_vsr((vector int)__a, (vector int)__b); +} + +/* vec_sro */ + +static vector signed char __ATTRS_o_ai +vec_sro(vector signed char __a, vector signed char __b) +{ + return (vector signed char) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_sro(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_sro(vector unsigned char __a, vector signed char __b) +{ + return (vector unsigned char) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_sro(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_sro(vector short __a, vector signed char __b) +{ + return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_sro(vector short __a, vector unsigned char __b) +{ + return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_sro(vector unsigned short __a, vector signed char __b) +{ + return (vector unsigned short) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_sro(vector unsigned short __a, vector unsigned char __b) +{ + return (vector unsigned short) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_sro(vector pixel __a, vector signed char __b) +{ + return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_sro(vector pixel __a, vector unsigned char __b) +{ + return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_sro(vector int __a, vector signed char __b) +{ + return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_sro(vector int __a, vector unsigned char __b) +{ + return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_sro(vector unsigned int __a, vector signed char __b) +{ + return (vector unsigned int) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_sro(vector unsigned int __a, vector unsigned char __b) +{ + return (vector unsigned int) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector float __ATTRS_o_ai +vec_sro(vector float __a, vector signed char __b) +{ + return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector float __ATTRS_o_ai +vec_sro(vector float __a, vector unsigned char __b) +{ + return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +/* vec_vsro */ + +static vector signed char __ATTRS_o_ai +vec_vsro(vector signed char __a, vector signed char __b) +{ + return (vector signed char) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector signed char __ATTRS_o_ai +vec_vsro(vector signed char __a, vector unsigned char __b) +{ + return (vector signed char) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsro(vector unsigned char __a, vector signed char __b) +{ + return (vector unsigned char) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsro(vector unsigned char __a, vector unsigned char __b) +{ + return (vector unsigned char) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_vsro(vector short __a, vector signed char __b) +{ + return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector short __ATTRS_o_ai +vec_vsro(vector short __a, vector unsigned char __b) +{ + return (vector short)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsro(vector unsigned short __a, vector signed char __b) +{ + return (vector unsigned short) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsro(vector unsigned short __a, vector unsigned char __b) +{ + return (vector unsigned short) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_vsro(vector pixel __a, vector signed char __b) +{ + return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector pixel __ATTRS_o_ai +vec_vsro(vector pixel __a, vector unsigned char __b) +{ + return (vector pixel)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_vsro(vector int __a, vector signed char __b) +{ + return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); +} + +static vector int __ATTRS_o_ai +vec_vsro(vector int __a, vector unsigned char __b) +{ + return (vector int)__builtin_altivec_vsro(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsro(vector unsigned int __a, vector signed char __b) +{ + return (vector unsigned int) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsro(vector unsigned int __a, vector unsigned char __b) +{ + return (vector unsigned int) + __builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector float __ATTRS_o_ai +vec_vsro(vector float __a, vector signed char __b) +{ + return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +static vector float __ATTRS_o_ai +vec_vsro(vector float __a, vector unsigned char __b) +{ + return (vector float)__builtin_altivec_vsro((vector int)__a, (vector int)__b); +} + +/* vec_st */ + +static void __ATTRS_o_ai +vec_st(vector signed char __a, int __b, vector signed char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector signed char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector unsigned char __a, int __b, vector unsigned char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector unsigned char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector bool char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector bool char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector bool char __a, int __b, vector bool char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector short __a, int __b, vector short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector short __a, int __b, short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector unsigned short __a, int __b, vector unsigned short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector unsigned short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector bool short __a, int __b, short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector bool short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector bool short __a, int __b, vector bool short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector pixel __a, int __b, short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector pixel __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector pixel __a, int __b, vector pixel *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector int __a, int __b, vector int *__c) +{ + __builtin_altivec_stvx(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector int __a, int __b, int *__c) +{ + __builtin_altivec_stvx(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector unsigned int __a, int __b, vector unsigned int *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector unsigned int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector bool int __a, int __b, int *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector bool int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector bool int __a, int __b, vector bool int *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector float __a, int __b, vector float *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_st(vector float __a, int __b, float *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +/* vec_stvx */ + +static void __ATTRS_o_ai +vec_stvx(vector signed char __a, int __b, vector signed char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector signed char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector unsigned char __a, int __b, vector unsigned char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector unsigned char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector bool char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector bool char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector bool char __a, int __b, vector bool char *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector short __a, int __b, vector short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector short __a, int __b, short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector unsigned short __a, int __b, vector unsigned short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector unsigned short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector bool short __a, int __b, short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector bool short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector bool short __a, int __b, vector bool short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector pixel __a, int __b, short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector pixel __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector pixel __a, int __b, vector pixel *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector int __a, int __b, vector int *__c) +{ + __builtin_altivec_stvx(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector int __a, int __b, int *__c) +{ + __builtin_altivec_stvx(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector unsigned int __a, int __b, vector unsigned int *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector unsigned int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector bool int __a, int __b, int *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector bool int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector bool int __a, int __b, vector bool int *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector float __a, int __b, vector float *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvx(vector float __a, int __b, float *__c) +{ + __builtin_altivec_stvx((vector int)__a, __b, __c); +} + +/* vec_ste */ + +static void __ATTRS_o_ai +vec_ste(vector signed char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvebx((vector char)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector unsigned char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvebx((vector char)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector bool char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvebx((vector char)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector bool char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvebx((vector char)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector short __a, int __b, short *__c) +{ + __builtin_altivec_stvehx(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector unsigned short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvehx((vector short)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector bool short __a, int __b, short *__c) +{ + __builtin_altivec_stvehx((vector short)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector bool short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvehx((vector short)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector pixel __a, int __b, short *__c) +{ + __builtin_altivec_stvehx((vector short)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector pixel __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvehx((vector short)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector int __a, int __b, int *__c) +{ + __builtin_altivec_stvewx(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector unsigned int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvewx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector bool int __a, int __b, int *__c) +{ + __builtin_altivec_stvewx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector bool int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvewx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_ste(vector float __a, int __b, float *__c) +{ + __builtin_altivec_stvewx((vector int)__a, __b, __c); +} + +/* vec_stvebx */ + +static void __ATTRS_o_ai +vec_stvebx(vector signed char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvebx((vector char)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvebx(vector unsigned char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvebx((vector char)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvebx(vector bool char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvebx((vector char)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvebx(vector bool char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvebx((vector char)__a, __b, __c); +} + +/* vec_stvehx */ + +static void __ATTRS_o_ai +vec_stvehx(vector short __a, int __b, short *__c) +{ + __builtin_altivec_stvehx(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvehx(vector unsigned short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvehx((vector short)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvehx(vector bool short __a, int __b, short *__c) +{ + __builtin_altivec_stvehx((vector short)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvehx(vector bool short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvehx((vector short)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvehx(vector pixel __a, int __b, short *__c) +{ + __builtin_altivec_stvehx((vector short)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvehx(vector pixel __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvehx((vector short)__a, __b, __c); +} + +/* vec_stvewx */ + +static void __ATTRS_o_ai +vec_stvewx(vector int __a, int __b, int *__c) +{ + __builtin_altivec_stvewx(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvewx(vector unsigned int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvewx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvewx(vector bool int __a, int __b, int *__c) +{ + __builtin_altivec_stvewx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvewx(vector bool int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvewx((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvewx(vector float __a, int __b, float *__c) +{ + __builtin_altivec_stvewx((vector int)__a, __b, __c); +} + +/* vec_stl */ + +static void __ATTRS_o_ai +vec_stl(vector signed char __a, int __b, vector signed char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector signed char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector unsigned char __a, int __b, vector unsigned char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector unsigned char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector bool char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector bool char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector bool char __a, int __b, vector bool char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector short __a, int __b, vector short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector short __a, int __b, short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector unsigned short __a, int __b, vector unsigned short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector unsigned short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector bool short __a, int __b, short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector bool short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector bool short __a, int __b, vector bool short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector pixel __a, int __b, short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector pixel __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector pixel __a, int __b, vector pixel *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector int __a, int __b, vector int *__c) +{ + __builtin_altivec_stvxl(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector int __a, int __b, int *__c) +{ + __builtin_altivec_stvxl(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector unsigned int __a, int __b, vector unsigned int *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector unsigned int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector bool int __a, int __b, int *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector bool int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector bool int __a, int __b, vector bool int *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector float __a, int __b, vector float *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stl(vector float __a, int __b, float *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +/* vec_stvxl */ + +static void __ATTRS_o_ai +vec_stvxl(vector signed char __a, int __b, vector signed char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector signed char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector unsigned char __a, int __b, vector unsigned char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector unsigned char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector bool char __a, int __b, signed char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector bool char __a, int __b, unsigned char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector bool char __a, int __b, vector bool char *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector short __a, int __b, vector short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector short __a, int __b, short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector unsigned short __a, int __b, vector unsigned short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector unsigned short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector bool short __a, int __b, short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector bool short __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector bool short __a, int __b, vector bool short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector pixel __a, int __b, short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector pixel __a, int __b, unsigned short *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector pixel __a, int __b, vector pixel *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector int __a, int __b, vector int *__c) +{ + __builtin_altivec_stvxl(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector int __a, int __b, int *__c) +{ + __builtin_altivec_stvxl(__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector unsigned int __a, int __b, vector unsigned int *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector unsigned int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector bool int __a, int __b, int *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector bool int __a, int __b, unsigned int *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector bool int __a, int __b, vector bool int *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector float __a, int __b, vector float *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +static void __ATTRS_o_ai +vec_stvxl(vector float __a, int __b, float *__c) +{ + __builtin_altivec_stvxl((vector int)__a, __b, __c); +} + +/* vec_sub */ + +static vector signed char __ATTRS_o_ai +vec_sub(vector signed char __a, vector signed char __b) +{ + return __a - __b; +} + +static vector signed char __ATTRS_o_ai +vec_sub(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a - __b; +} + +static vector signed char __ATTRS_o_ai +vec_sub(vector signed char __a, vector bool char __b) +{ + return __a - (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_sub(vector unsigned char __a, vector unsigned char __b) +{ + return __a - __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_sub(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a - __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_sub(vector unsigned char __a, vector bool char __b) +{ + return __a - (vector unsigned char)__b; +} + +static vector short __ATTRS_o_ai +vec_sub(vector short __a, vector short __b) +{ + return __a - __b; +} + +static vector short __ATTRS_o_ai +vec_sub(vector bool short __a, vector short __b) +{ + return (vector short)__a - __b; +} + +static vector short __ATTRS_o_ai +vec_sub(vector short __a, vector bool short __b) +{ + return __a - (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_sub(vector unsigned short __a, vector unsigned short __b) +{ + return __a - __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_sub(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a - __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_sub(vector unsigned short __a, vector bool short __b) +{ + return __a - (vector unsigned short)__b; +} + +static vector int __ATTRS_o_ai +vec_sub(vector int __a, vector int __b) +{ + return __a - __b; +} + +static vector int __ATTRS_o_ai +vec_sub(vector bool int __a, vector int __b) +{ + return (vector int)__a - __b; +} + +static vector int __ATTRS_o_ai +vec_sub(vector int __a, vector bool int __b) +{ + return __a - (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_sub(vector unsigned int __a, vector unsigned int __b) +{ + return __a - __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_sub(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a - __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_sub(vector unsigned int __a, vector bool int __b) +{ + return __a - (vector unsigned int)__b; +} + +static vector float __ATTRS_o_ai +vec_sub(vector float __a, vector float __b) +{ + return __a - __b; +} + +/* vec_vsububm */ + +#define __builtin_altivec_vsububm vec_vsububm + +static vector signed char __ATTRS_o_ai +vec_vsububm(vector signed char __a, vector signed char __b) +{ + return __a - __b; +} + +static vector signed char __ATTRS_o_ai +vec_vsububm(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a - __b; +} + +static vector signed char __ATTRS_o_ai +vec_vsububm(vector signed char __a, vector bool char __b) +{ + return __a - (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vsububm(vector unsigned char __a, vector unsigned char __b) +{ + return __a - __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vsububm(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a - __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vsububm(vector unsigned char __a, vector bool char __b) +{ + return __a - (vector unsigned char)__b; +} + +/* vec_vsubuhm */ + +#define __builtin_altivec_vsubuhm vec_vsubuhm + +static vector short __ATTRS_o_ai +vec_vsubuhm(vector short __a, vector short __b) +{ + return __a - __b; +} + +static vector short __ATTRS_o_ai +vec_vsubuhm(vector bool short __a, vector short __b) +{ + return (vector short)__a - __b; +} + +static vector short __ATTRS_o_ai +vec_vsubuhm(vector short __a, vector bool short __b) +{ + return __a - (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vsubuhm(vector unsigned short __a, vector unsigned short __b) +{ + return __a - __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vsubuhm(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a - __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vsubuhm(vector unsigned short __a, vector bool short __b) +{ + return __a - (vector unsigned short)__b; +} + +/* vec_vsubuwm */ + +#define __builtin_altivec_vsubuwm vec_vsubuwm + +static vector int __ATTRS_o_ai +vec_vsubuwm(vector int __a, vector int __b) +{ + return __a - __b; +} + +static vector int __ATTRS_o_ai +vec_vsubuwm(vector bool int __a, vector int __b) +{ + return (vector int)__a - __b; +} + +static vector int __ATTRS_o_ai +vec_vsubuwm(vector int __a, vector bool int __b) +{ + return __a - (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vsubuwm(vector unsigned int __a, vector unsigned int __b) +{ + return __a - __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vsubuwm(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a - __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vsubuwm(vector unsigned int __a, vector bool int __b) +{ + return __a - (vector unsigned int)__b; +} + +/* vec_vsubfp */ + +#define __builtin_altivec_vsubfp vec_vsubfp + +static vector float __attribute__((__always_inline__)) +vec_vsubfp(vector float __a, vector float __b) +{ + return __a - __b; +} + +/* vec_subc */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_subc(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vsubcuw(__a, __b); +} + +/* vec_vsubcuw */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_vsubcuw(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vsubcuw(__a, __b); +} + +/* vec_subs */ + +static vector signed char __ATTRS_o_ai +vec_subs(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vsubsbs(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_subs(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vsubsbs((vector signed char)__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_subs(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vsubsbs(__a, (vector signed char)__b); +} + +static vector unsigned char __ATTRS_o_ai +vec_subs(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vsububs(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_subs(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vsububs((vector unsigned char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_subs(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vsububs(__a, (vector unsigned char)__b); +} + +static vector short __ATTRS_o_ai +vec_subs(vector short __a, vector short __b) +{ + return __builtin_altivec_vsubshs(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_subs(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vsubshs((vector short)__a, __b); +} + +static vector short __ATTRS_o_ai +vec_subs(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vsubshs(__a, (vector short)__b); +} + +static vector unsigned short __ATTRS_o_ai +vec_subs(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vsubuhs(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_subs(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_subs(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b); +} + +static vector int __ATTRS_o_ai +vec_subs(vector int __a, vector int __b) +{ + return __builtin_altivec_vsubsws(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_subs(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vsubsws((vector int)__a, __b); +} + +static vector int __ATTRS_o_ai +vec_subs(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vsubsws(__a, (vector int)__b); +} + +static vector unsigned int __ATTRS_o_ai +vec_subs(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vsubuws(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_subs(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vsubuws((vector unsigned int)__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_subs(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b); +} + +/* vec_vsubsbs */ + +static vector signed char __ATTRS_o_ai +vec_vsubsbs(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vsubsbs(__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_vsubsbs(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vsubsbs((vector signed char)__a, __b); +} + +static vector signed char __ATTRS_o_ai +vec_vsubsbs(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vsubsbs(__a, (vector signed char)__b); +} + +/* vec_vsububs */ + +static vector unsigned char __ATTRS_o_ai +vec_vsububs(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vsububs(__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsububs(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vsububs((vector unsigned char)__a, __b); +} + +static vector unsigned char __ATTRS_o_ai +vec_vsububs(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vsububs(__a, (vector unsigned char)__b); +} + +/* vec_vsubshs */ + +static vector short __ATTRS_o_ai +vec_vsubshs(vector short __a, vector short __b) +{ + return __builtin_altivec_vsubshs(__a, __b); +} + +static vector short __ATTRS_o_ai +vec_vsubshs(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vsubshs((vector short)__a, __b); +} + +static vector short __ATTRS_o_ai +vec_vsubshs(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vsubshs(__a, (vector short)__b); +} + +/* vec_vsubuhs */ + +static vector unsigned short __ATTRS_o_ai +vec_vsubuhs(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vsubuhs(__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsubuhs(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vsubuhs((vector unsigned short)__a, __b); +} + +static vector unsigned short __ATTRS_o_ai +vec_vsubuhs(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vsubuhs(__a, (vector unsigned short)__b); +} + +/* vec_vsubsws */ + +static vector int __ATTRS_o_ai +vec_vsubsws(vector int __a, vector int __b) +{ + return __builtin_altivec_vsubsws(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_vsubsws(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vsubsws((vector int)__a, __b); +} + +static vector int __ATTRS_o_ai +vec_vsubsws(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vsubsws(__a, (vector int)__b); +} + +/* vec_vsubuws */ + +static vector unsigned int __ATTRS_o_ai +vec_vsubuws(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vsubuws(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsubuws(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vsubuws((vector unsigned int)__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_vsubuws(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vsubuws(__a, (vector unsigned int)__b); +} + +/* vec_sum4s */ + +static vector int __ATTRS_o_ai +vec_sum4s(vector signed char __a, vector int __b) +{ + return __builtin_altivec_vsum4sbs(__a, __b); +} + +static vector unsigned int __ATTRS_o_ai +vec_sum4s(vector unsigned char __a, vector unsigned int __b) +{ + return __builtin_altivec_vsum4ubs(__a, __b); +} + +static vector int __ATTRS_o_ai +vec_sum4s(vector signed short __a, vector int __b) +{ + return __builtin_altivec_vsum4shs(__a, __b); +} + +/* vec_vsum4sbs */ + +static vector int __attribute__((__always_inline__)) +vec_vsum4sbs(vector signed char __a, vector int __b) +{ + return __builtin_altivec_vsum4sbs(__a, __b); +} + +/* vec_vsum4ubs */ + +static vector unsigned int __attribute__((__always_inline__)) +vec_vsum4ubs(vector unsigned char __a, vector unsigned int __b) +{ + return __builtin_altivec_vsum4ubs(__a, __b); +} + +/* vec_vsum4shs */ + +static vector int __attribute__((__always_inline__)) +vec_vsum4shs(vector signed short __a, vector int __b) +{ + return __builtin_altivec_vsum4shs(__a, __b); +} + +/* vec_sum2s */ + +static vector signed int __attribute__((__always_inline__)) +vec_sum2s(vector int __a, vector int __b) +{ + return __builtin_altivec_vsum2sws(__a, __b); +} + +/* vec_vsum2sws */ + +static vector signed int __attribute__((__always_inline__)) +vec_vsum2sws(vector int __a, vector int __b) +{ + return __builtin_altivec_vsum2sws(__a, __b); +} + +/* vec_sums */ + +static vector signed int __attribute__((__always_inline__)) +vec_sums(vector signed int __a, vector signed int __b) +{ + return __builtin_altivec_vsumsws(__a, __b); +} + +/* vec_vsumsws */ + +static vector signed int __attribute__((__always_inline__)) +vec_vsumsws(vector signed int __a, vector signed int __b) +{ + return __builtin_altivec_vsumsws(__a, __b); +} + +/* vec_trunc */ + +static vector float __attribute__((__always_inline__)) +vec_trunc(vector float __a) +{ + return __builtin_altivec_vrfiz(__a); +} + +/* vec_vrfiz */ + +static vector float __attribute__((__always_inline__)) +vec_vrfiz(vector float __a) +{ + return __builtin_altivec_vrfiz(__a); +} + +/* vec_unpackh */ + +static vector short __ATTRS_o_ai +vec_unpackh(vector signed char __a) +{ + return __builtin_altivec_vupkhsb((vector char)__a); +} + +static vector bool short __ATTRS_o_ai +vec_unpackh(vector bool char __a) +{ + return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a); +} + +static vector int __ATTRS_o_ai +vec_unpackh(vector short __a) +{ + return __builtin_altivec_vupkhsh(__a); +} + +static vector bool int __ATTRS_o_ai +vec_unpackh(vector bool short __a) +{ + return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a); +} + +static vector unsigned int __ATTRS_o_ai +vec_unpackh(vector pixel __a) +{ + return (vector unsigned int)__builtin_altivec_vupkhsh((vector short)__a); +} + +/* vec_vupkhsb */ + +static vector short __ATTRS_o_ai +vec_vupkhsb(vector signed char __a) +{ + return __builtin_altivec_vupkhsb((vector char)__a); +} + +static vector bool short __ATTRS_o_ai +vec_vupkhsb(vector bool char __a) +{ + return (vector bool short)__builtin_altivec_vupkhsb((vector char)__a); +} + +/* vec_vupkhsh */ + +static vector int __ATTRS_o_ai +vec_vupkhsh(vector short __a) +{ + return __builtin_altivec_vupkhsh(__a); +} + +static vector bool int __ATTRS_o_ai +vec_vupkhsh(vector bool short __a) +{ + return (vector bool int)__builtin_altivec_vupkhsh((vector short)__a); +} + +static vector unsigned int __ATTRS_o_ai +vec_vupkhsh(vector pixel __a) +{ + return (vector unsigned int)__builtin_altivec_vupkhsh((vector short)__a); +} + +/* vec_unpackl */ + +static vector short __ATTRS_o_ai +vec_unpackl(vector signed char __a) +{ + return __builtin_altivec_vupklsb((vector char)__a); +} + +static vector bool short __ATTRS_o_ai +vec_unpackl(vector bool char __a) +{ + return (vector bool short)__builtin_altivec_vupklsb((vector char)__a); +} + +static vector int __ATTRS_o_ai +vec_unpackl(vector short __a) +{ + return __builtin_altivec_vupklsh(__a); +} + +static vector bool int __ATTRS_o_ai +vec_unpackl(vector bool short __a) +{ + return (vector bool int)__builtin_altivec_vupklsh((vector short)__a); +} + +static vector unsigned int __ATTRS_o_ai +vec_unpackl(vector pixel __a) +{ + return (vector unsigned int)__builtin_altivec_vupklsh((vector short)__a); +} + +/* vec_vupklsb */ + +static vector short __ATTRS_o_ai +vec_vupklsb(vector signed char __a) +{ + return __builtin_altivec_vupklsb((vector char)__a); +} + +static vector bool short __ATTRS_o_ai +vec_vupklsb(vector bool char __a) +{ + return (vector bool short)__builtin_altivec_vupklsb((vector char)__a); +} + +/* vec_vupklsh */ + +static vector int __ATTRS_o_ai +vec_vupklsh(vector short __a) +{ + return __builtin_altivec_vupklsh(__a); +} + +static vector bool int __ATTRS_o_ai +vec_vupklsh(vector bool short __a) +{ + return (vector bool int)__builtin_altivec_vupklsh((vector short)__a); +} + +static vector unsigned int __ATTRS_o_ai +vec_vupklsh(vector pixel __a) +{ + return (vector unsigned int)__builtin_altivec_vupklsh((vector short)__a); +} + +/* vec_xor */ + +#define __builtin_altivec_vxor vec_xor + +static vector signed char __ATTRS_o_ai +vec_xor(vector signed char __a, vector signed char __b) +{ + return __a ^ __b; +} + +static vector signed char __ATTRS_o_ai +vec_xor(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a ^ __b; +} + +static vector signed char __ATTRS_o_ai +vec_xor(vector signed char __a, vector bool char __b) +{ + return __a ^ (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_xor(vector unsigned char __a, vector unsigned char __b) +{ + return __a ^ __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_xor(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a ^ __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_xor(vector unsigned char __a, vector bool char __b) +{ + return __a ^ (vector unsigned char)__b; +} + +static vector bool char __ATTRS_o_ai +vec_xor(vector bool char __a, vector bool char __b) +{ + return __a ^ __b; +} + +static vector short __ATTRS_o_ai +vec_xor(vector short __a, vector short __b) +{ + return __a ^ __b; +} + +static vector short __ATTRS_o_ai +vec_xor(vector bool short __a, vector short __b) +{ + return (vector short)__a ^ __b; +} + +static vector short __ATTRS_o_ai +vec_xor(vector short __a, vector bool short __b) +{ + return __a ^ (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_xor(vector unsigned short __a, vector unsigned short __b) +{ + return __a ^ __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_xor(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a ^ __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_xor(vector unsigned short __a, vector bool short __b) +{ + return __a ^ (vector unsigned short)__b; +} + +static vector bool short __ATTRS_o_ai +vec_xor(vector bool short __a, vector bool short __b) +{ + return __a ^ __b; +} + +static vector int __ATTRS_o_ai +vec_xor(vector int __a, vector int __b) +{ + return __a ^ __b; +} + +static vector int __ATTRS_o_ai +vec_xor(vector bool int __a, vector int __b) +{ + return (vector int)__a ^ __b; +} + +static vector int __ATTRS_o_ai +vec_xor(vector int __a, vector bool int __b) +{ + return __a ^ (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_xor(vector unsigned int __a, vector unsigned int __b) +{ + return __a ^ __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_xor(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a ^ __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_xor(vector unsigned int __a, vector bool int __b) +{ + return __a ^ (vector unsigned int)__b; +} + +static vector bool int __ATTRS_o_ai +vec_xor(vector bool int __a, vector bool int __b) +{ + return __a ^ __b; +} + +static vector float __ATTRS_o_ai +vec_xor(vector float __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a ^ (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_xor(vector bool int __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a ^ (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_xor(vector float __a, vector bool int __b) +{ + vector unsigned int __res = (vector unsigned int)__a ^ (vector unsigned int)__b; + return (vector float)__res; +} + +/* vec_vxor */ + +static vector signed char __ATTRS_o_ai +vec_vxor(vector signed char __a, vector signed char __b) +{ + return __a ^ __b; +} + +static vector signed char __ATTRS_o_ai +vec_vxor(vector bool char __a, vector signed char __b) +{ + return (vector signed char)__a ^ __b; +} + +static vector signed char __ATTRS_o_ai +vec_vxor(vector signed char __a, vector bool char __b) +{ + return __a ^ (vector signed char)__b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vxor(vector unsigned char __a, vector unsigned char __b) +{ + return __a ^ __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vxor(vector bool char __a, vector unsigned char __b) +{ + return (vector unsigned char)__a ^ __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_vxor(vector unsigned char __a, vector bool char __b) +{ + return __a ^ (vector unsigned char)__b; +} + +static vector bool char __ATTRS_o_ai +vec_vxor(vector bool char __a, vector bool char __b) +{ + return __a ^ __b; +} + +static vector short __ATTRS_o_ai +vec_vxor(vector short __a, vector short __b) +{ + return __a ^ __b; +} + +static vector short __ATTRS_o_ai +vec_vxor(vector bool short __a, vector short __b) +{ + return (vector short)__a ^ __b; +} + +static vector short __ATTRS_o_ai +vec_vxor(vector short __a, vector bool short __b) +{ + return __a ^ (vector short)__b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vxor(vector unsigned short __a, vector unsigned short __b) +{ + return __a ^ __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vxor(vector bool short __a, vector unsigned short __b) +{ + return (vector unsigned short)__a ^ __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_vxor(vector unsigned short __a, vector bool short __b) +{ + return __a ^ (vector unsigned short)__b; +} + +static vector bool short __ATTRS_o_ai +vec_vxor(vector bool short __a, vector bool short __b) +{ + return __a ^ __b; +} + +static vector int __ATTRS_o_ai +vec_vxor(vector int __a, vector int __b) +{ + return __a ^ __b; +} + +static vector int __ATTRS_o_ai +vec_vxor(vector bool int __a, vector int __b) +{ + return (vector int)__a ^ __b; +} + +static vector int __ATTRS_o_ai +vec_vxor(vector int __a, vector bool int __b) +{ + return __a ^ (vector int)__b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vxor(vector unsigned int __a, vector unsigned int __b) +{ + return __a ^ __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vxor(vector bool int __a, vector unsigned int __b) +{ + return (vector unsigned int)__a ^ __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_vxor(vector unsigned int __a, vector bool int __b) +{ + return __a ^ (vector unsigned int)__b; +} + +static vector bool int __ATTRS_o_ai +vec_vxor(vector bool int __a, vector bool int __b) +{ + return __a ^ __b; +} + +static vector float __ATTRS_o_ai +vec_vxor(vector float __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a ^ (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_vxor(vector bool int __a, vector float __b) +{ + vector unsigned int __res = (vector unsigned int)__a ^ (vector unsigned int)__b; + return (vector float)__res; +} + +static vector float __ATTRS_o_ai +vec_vxor(vector float __a, vector bool int __b) +{ + vector unsigned int __res = (vector unsigned int)__a ^ (vector unsigned int)__b; + return (vector float)__res; +} + +/* ------------------------ extensions for CBEA ----------------------------- */ + +/* vec_extract */ + +static signed char __ATTRS_o_ai +vec_extract(vector signed char __a, int __b) +{ + return __a[__b]; +} + +static unsigned char __ATTRS_o_ai +vec_extract(vector unsigned char __a, int __b) +{ + return __a[__b]; +} + +static short __ATTRS_o_ai +vec_extract(vector short __a, int __b) +{ + return __a[__b]; +} + +static unsigned short __ATTRS_o_ai +vec_extract(vector unsigned short __a, int __b) +{ + return __a[__b]; +} + +static int __ATTRS_o_ai +vec_extract(vector int __a, int __b) +{ + return __a[__b]; +} + +static unsigned int __ATTRS_o_ai +vec_extract(vector unsigned int __a, int __b) +{ + return __a[__b]; +} + +static float __ATTRS_o_ai +vec_extract(vector float __a, int __b) +{ + return __a[__b]; +} + +/* vec_insert */ + +static vector signed char __ATTRS_o_ai +vec_insert(signed char __a, vector signed char __b, int __c) +{ + __b[__c] = __a; + return __b; +} + +static vector unsigned char __ATTRS_o_ai +vec_insert(unsigned char __a, vector unsigned char __b, int __c) +{ + __b[__c] = __a; + return __b; +} + +static vector short __ATTRS_o_ai +vec_insert(short __a, vector short __b, int __c) +{ + __b[__c] = __a; + return __b; +} + +static vector unsigned short __ATTRS_o_ai +vec_insert(unsigned short __a, vector unsigned short __b, int __c) +{ + __b[__c] = __a; + return __b; +} + +static vector int __ATTRS_o_ai +vec_insert(int __a, vector int __b, int __c) +{ + __b[__c] = __a; + return __b; +} + +static vector unsigned int __ATTRS_o_ai +vec_insert(unsigned int __a, vector unsigned int __b, int __c) +{ + __b[__c] = __a; + return __b; +} + +static vector float __ATTRS_o_ai +vec_insert(float __a, vector float __b, int __c) +{ + __b[__c] = __a; + return __b; +} + +/* vec_lvlx */ + +static vector signed char __ATTRS_o_ai +vec_lvlx(int __a, const signed char *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector signed char)(0), + vec_lvsl(__a, __b)); +} + +static vector signed char __ATTRS_o_ai +vec_lvlx(int __a, const vector signed char *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector signed char)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvlx(int __a, const unsigned char *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector unsigned char)(0), + vec_lvsl(__a, __b)); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvlx(int __a, const vector unsigned char *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector unsigned char)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool char __ATTRS_o_ai +vec_lvlx(int __a, const vector bool char *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector bool char)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector short __ATTRS_o_ai +vec_lvlx(int __a, const short *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector short)(0), + vec_lvsl(__a, __b)); +} + +static vector short __ATTRS_o_ai +vec_lvlx(int __a, const vector short *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector short)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvlx(int __a, const unsigned short *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector unsigned short)(0), + vec_lvsl(__a, __b)); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvlx(int __a, const vector unsigned short *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector unsigned short)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool short __ATTRS_o_ai +vec_lvlx(int __a, const vector bool short *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector bool short)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector pixel __ATTRS_o_ai +vec_lvlx(int __a, const vector pixel *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector pixel)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector int __ATTRS_o_ai +vec_lvlx(int __a, const int *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector int)(0), + vec_lvsl(__a, __b)); +} + +static vector int __ATTRS_o_ai +vec_lvlx(int __a, const vector int *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector int)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvlx(int __a, const unsigned int *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector unsigned int)(0), + vec_lvsl(__a, __b)); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvlx(int __a, const vector unsigned int *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector unsigned int)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool int __ATTRS_o_ai +vec_lvlx(int __a, const vector bool int *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector bool int)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector float __ATTRS_o_ai +vec_lvlx(int __a, const float *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector float)(0), + vec_lvsl(__a, __b)); +} + +static vector float __ATTRS_o_ai +vec_lvlx(int __a, const vector float *__b) +{ + return vec_perm(vec_ld(__a, __b), + (vector float)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +/* vec_lvlxl */ + +static vector signed char __ATTRS_o_ai +vec_lvlxl(int __a, const signed char *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector signed char)(0), + vec_lvsl(__a, __b)); +} + +static vector signed char __ATTRS_o_ai +vec_lvlxl(int __a, const vector signed char *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector signed char)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvlxl(int __a, const unsigned char *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector unsigned char)(0), + vec_lvsl(__a, __b)); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvlxl(int __a, const vector unsigned char *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector unsigned char)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool char __ATTRS_o_ai +vec_lvlxl(int __a, const vector bool char *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector bool char)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector short __ATTRS_o_ai +vec_lvlxl(int __a, const short *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector short)(0), + vec_lvsl(__a, __b)); +} + +static vector short __ATTRS_o_ai +vec_lvlxl(int __a, const vector short *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector short)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvlxl(int __a, const unsigned short *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector unsigned short)(0), + vec_lvsl(__a, __b)); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvlxl(int __a, const vector unsigned short *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector unsigned short)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool short __ATTRS_o_ai +vec_lvlxl(int __a, const vector bool short *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector bool short)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector pixel __ATTRS_o_ai +vec_lvlxl(int __a, const vector pixel *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector pixel)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector int __ATTRS_o_ai +vec_lvlxl(int __a, const int *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector int)(0), + vec_lvsl(__a, __b)); +} + +static vector int __ATTRS_o_ai +vec_lvlxl(int __a, const vector int *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector int)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvlxl(int __a, const unsigned int *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector unsigned int)(0), + vec_lvsl(__a, __b)); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvlxl(int __a, const vector unsigned int *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector unsigned int)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool int __ATTRS_o_ai +vec_lvlxl(int __a, const vector bool int *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector bool int)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector float __ATTRS_o_ai +vec_lvlxl(int __a, const float *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector float)(0), + vec_lvsl(__a, __b)); +} + +static vector float __ATTRS_o_ai +vec_lvlxl(int __a, vector float *__b) +{ + return vec_perm(vec_ldl(__a, __b), + (vector float)(0), + vec_lvsl(__a, (unsigned char *)__b)); +} + +/* vec_lvrx */ + +static vector signed char __ATTRS_o_ai +vec_lvrx(int __a, const signed char *__b) +{ + return vec_perm((vector signed char)(0), + vec_ld(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector signed char __ATTRS_o_ai +vec_lvrx(int __a, const vector signed char *__b) +{ + return vec_perm((vector signed char)(0), + vec_ld(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvrx(int __a, const unsigned char *__b) +{ + return vec_perm((vector unsigned char)(0), + vec_ld(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvrx(int __a, const vector unsigned char *__b) +{ + return vec_perm((vector unsigned char)(0), + vec_ld(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool char __ATTRS_o_ai +vec_lvrx(int __a, const vector bool char *__b) +{ + return vec_perm((vector bool char)(0), + vec_ld(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector short __ATTRS_o_ai +vec_lvrx(int __a, const short *__b) +{ + return vec_perm((vector short)(0), + vec_ld(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector short __ATTRS_o_ai +vec_lvrx(int __a, const vector short *__b) +{ + return vec_perm((vector short)(0), + vec_ld(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvrx(int __a, const unsigned short *__b) +{ + return vec_perm((vector unsigned short)(0), + vec_ld(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvrx(int __a, const vector unsigned short *__b) +{ + return vec_perm((vector unsigned short)(0), + vec_ld(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool short __ATTRS_o_ai +vec_lvrx(int __a, const vector bool short *__b) +{ + return vec_perm((vector bool short)(0), + vec_ld(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector pixel __ATTRS_o_ai +vec_lvrx(int __a, const vector pixel *__b) +{ + return vec_perm((vector pixel)(0), + vec_ld(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector int __ATTRS_o_ai +vec_lvrx(int __a, const int *__b) +{ + return vec_perm((vector int)(0), + vec_ld(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector int __ATTRS_o_ai +vec_lvrx(int __a, const vector int *__b) +{ + return vec_perm((vector int)(0), + vec_ld(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvrx(int __a, const unsigned int *__b) +{ + return vec_perm((vector unsigned int)(0), + vec_ld(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvrx(int __a, const vector unsigned int *__b) +{ + return vec_perm((vector unsigned int)(0), + vec_ld(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool int __ATTRS_o_ai +vec_lvrx(int __a, const vector bool int *__b) +{ + return vec_perm((vector bool int)(0), + vec_ld(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector float __ATTRS_o_ai +vec_lvrx(int __a, const float *__b) +{ + return vec_perm((vector float)(0), + vec_ld(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector float __ATTRS_o_ai +vec_lvrx(int __a, const vector float *__b) +{ + return vec_perm((vector float)(0), + vec_ld(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +/* vec_lvrxl */ + +static vector signed char __ATTRS_o_ai +vec_lvrxl(int __a, const signed char *__b) +{ + return vec_perm((vector signed char)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector signed char __ATTRS_o_ai +vec_lvrxl(int __a, const vector signed char *__b) +{ + return vec_perm((vector signed char)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvrxl(int __a, const unsigned char *__b) +{ + return vec_perm((vector unsigned char)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector unsigned char __ATTRS_o_ai +vec_lvrxl(int __a, const vector unsigned char *__b) +{ + return vec_perm((vector unsigned char)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool char __ATTRS_o_ai +vec_lvrxl(int __a, const vector bool char *__b) +{ + return vec_perm((vector bool char)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector short __ATTRS_o_ai +vec_lvrxl(int __a, const short *__b) +{ + return vec_perm((vector short)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector short __ATTRS_o_ai +vec_lvrxl(int __a, const vector short *__b) +{ + return vec_perm((vector short)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvrxl(int __a, const unsigned short *__b) +{ + return vec_perm((vector unsigned short)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector unsigned short __ATTRS_o_ai +vec_lvrxl(int __a, const vector unsigned short *__b) +{ + return vec_perm((vector unsigned short)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool short __ATTRS_o_ai +vec_lvrxl(int __a, const vector bool short *__b) +{ + return vec_perm((vector bool short)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector pixel __ATTRS_o_ai +vec_lvrxl(int __a, const vector pixel *__b) +{ + return vec_perm((vector pixel)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector int __ATTRS_o_ai +vec_lvrxl(int __a, const int *__b) +{ + return vec_perm((vector int)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector int __ATTRS_o_ai +vec_lvrxl(int __a, const vector int *__b) +{ + return vec_perm((vector int)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvrxl(int __a, const unsigned int *__b) +{ + return vec_perm((vector unsigned int)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector unsigned int __ATTRS_o_ai +vec_lvrxl(int __a, const vector unsigned int *__b) +{ + return vec_perm((vector unsigned int)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector bool int __ATTRS_o_ai +vec_lvrxl(int __a, const vector bool int *__b) +{ + return vec_perm((vector bool int)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +static vector float __ATTRS_o_ai +vec_lvrxl(int __a, const float *__b) +{ + return vec_perm((vector float)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, __b)); +} + +static vector float __ATTRS_o_ai +vec_lvrxl(int __a, const vector float *__b) +{ + return vec_perm((vector float)(0), + vec_ldl(__a, __b), + vec_lvsl(__a, (unsigned char *)__b)); +} + +/* vec_stvlx */ + +static void __ATTRS_o_ai +vec_stvlx(vector signed char __a, int __b, signed char *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector signed char __a, int __b, vector signed char *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector unsigned char __a, int __b, unsigned char *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector unsigned char __a, int __b, vector unsigned char *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector bool char __a, int __b, vector bool char *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector short __a, int __b, short *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector short __a, int __b, vector short *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector unsigned short __a, int __b, unsigned short *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector unsigned short __a, int __b, vector unsigned short *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector bool short __a, int __b, vector bool short *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector pixel __a, int __b, vector pixel *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector int __a, int __b, int *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector int __a, int __b, vector int *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector unsigned int __a, int __b, unsigned int *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector unsigned int __a, int __b, vector unsigned int *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector bool int __a, int __b, vector bool int *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlx(vector float __a, int __b, vector float *__c) +{ + return vec_st(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +/* vec_stvlxl */ + +static void __ATTRS_o_ai +vec_stvlxl(vector signed char __a, int __b, signed char *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector signed char __a, int __b, vector signed char *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector unsigned char __a, int __b, unsigned char *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector unsigned char __a, int __b, vector unsigned char *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector bool char __a, int __b, vector bool char *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector short __a, int __b, short *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector short __a, int __b, vector short *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector unsigned short __a, int __b, unsigned short *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector unsigned short __a, int __b, vector unsigned short *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector bool short __a, int __b, vector bool short *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector pixel __a, int __b, vector pixel *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector int __a, int __b, int *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector int __a, int __b, vector int *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector unsigned int __a, int __b, unsigned int *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector unsigned int __a, int __b, vector unsigned int *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector bool int __a, int __b, vector bool int *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvlxl(vector float __a, int __b, vector float *__c) +{ + return vec_stl(vec_perm(vec_lvrx(__b, __c), + __a, + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +/* vec_stvrx */ + +static void __ATTRS_o_ai +vec_stvrx(vector signed char __a, int __b, signed char *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector signed char __a, int __b, vector signed char *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector unsigned char __a, int __b, unsigned char *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector unsigned char __a, int __b, vector unsigned char *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector bool char __a, int __b, vector bool char *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector short __a, int __b, short *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector short __a, int __b, vector short *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector unsigned short __a, int __b, unsigned short *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector unsigned short __a, int __b, vector unsigned short *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector bool short __a, int __b, vector bool short *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector pixel __a, int __b, vector pixel *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector int __a, int __b, int *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector int __a, int __b, vector int *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector unsigned int __a, int __b, unsigned int *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector unsigned int __a, int __b, vector unsigned int *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector bool int __a, int __b, vector bool int *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrx(vector float __a, int __b, vector float *__c) +{ + return vec_st(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +/* vec_stvrxl */ + +static void __ATTRS_o_ai +vec_stvrxl(vector signed char __a, int __b, signed char *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector signed char __a, int __b, vector signed char *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector unsigned char __a, int __b, unsigned char *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector unsigned char __a, int __b, vector unsigned char *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector bool char __a, int __b, vector bool char *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector short __a, int __b, short *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector short __a, int __b, vector short *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector unsigned short __a, int __b, unsigned short *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector unsigned short __a, int __b, vector unsigned short *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector bool short __a, int __b, vector bool short *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector pixel __a, int __b, vector pixel *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector int __a, int __b, int *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector int __a, int __b, vector int *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector unsigned int __a, int __b, unsigned int *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, __c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector unsigned int __a, int __b, vector unsigned int *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector bool int __a, int __b, vector bool int *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +static void __ATTRS_o_ai +vec_stvrxl(vector float __a, int __b, vector float *__c) +{ + return vec_stl(vec_perm(__a, + vec_lvlx(__b, __c), + vec_lvsr(__b, (unsigned char *)__c)), + __b, __c); +} + +/* vec_promote */ + +static vector signed char __ATTRS_o_ai +vec_promote(signed char __a, int __b) +{ + vector signed char __res = (vector signed char)(0); + __res[__b] = __a; + return __res; +} + +static vector unsigned char __ATTRS_o_ai +vec_promote(unsigned char __a, int __b) +{ + vector unsigned char __res = (vector unsigned char)(0); + __res[__b] = __a; + return __res; +} + +static vector short __ATTRS_o_ai +vec_promote(short __a, int __b) +{ + vector short __res = (vector short)(0); + __res[__b] = __a; + return __res; +} + +static vector unsigned short __ATTRS_o_ai +vec_promote(unsigned short __a, int __b) +{ + vector unsigned short __res = (vector unsigned short)(0); + __res[__b] = __a; + return __res; +} + +static vector int __ATTRS_o_ai +vec_promote(int __a, int __b) +{ + vector int __res = (vector int)(0); + __res[__b] = __a; + return __res; +} + +static vector unsigned int __ATTRS_o_ai +vec_promote(unsigned int __a, int __b) +{ + vector unsigned int __res = (vector unsigned int)(0); + __res[__b] = __a; + return __res; +} + +static vector float __ATTRS_o_ai +vec_promote(float __a, int __b) +{ + vector float __res = (vector float)(0); + __res[__b] = __a; + return __res; +} + +/* vec_splats */ + +static vector signed char __ATTRS_o_ai +vec_splats(signed char __a) +{ + return (vector signed char)(__a); +} + +static vector unsigned char __ATTRS_o_ai +vec_splats(unsigned char __a) +{ + return (vector unsigned char)(__a); +} + +static vector short __ATTRS_o_ai +vec_splats(short __a) +{ + return (vector short)(__a); +} + +static vector unsigned short __ATTRS_o_ai +vec_splats(unsigned short __a) +{ + return (vector unsigned short)(__a); +} + +static vector int __ATTRS_o_ai +vec_splats(int __a) +{ + return (vector int)(__a); +} + +static vector unsigned int __ATTRS_o_ai +vec_splats(unsigned int __a) +{ + return (vector unsigned int)(__a); +} + +static vector float __ATTRS_o_ai +vec_splats(float __a) +{ + return (vector float)(__a); +} + +/* ----------------------------- predicates --------------------------------- */ + +/* vec_all_eq */ + +static int __ATTRS_o_ai +vec_all_eq(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector bool char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_LT, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_LT, __a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector unsigned short __a, vector unsigned short __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector unsigned short __a, vector bool short __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector bool short __a, vector short __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector bool short __a, vector unsigned short __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector bool short __a, vector bool short __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector pixel __a, vector pixel __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_LT, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_LT, __a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector bool int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_LT, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_eq(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __b); +} + +/* vec_all_ge */ + +static int __ATTRS_o_ai +vec_all_ge(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, (vector signed char)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ, + (vector unsigned char)__b, + (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __b, (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector bool char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ, + (vector unsigned char)__b, + (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, (vector short)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, + (vector unsigned short)__b, + (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __b, (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector bool short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, + (vector unsigned short)__b, + (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, (vector int)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, + (vector unsigned int)__b, + (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __b, (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector bool int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, + (vector unsigned int)__b, + (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_all_ge(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgefp_p(__CR6_LT, __a, __b); +} + +/* vec_all_gt */ + +static int __ATTRS_o_ai +vec_all_gt(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __a, (vector signed char)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT, __a, (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT, + (vector unsigned char)__a, + (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__a, __b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector bool char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT, + (vector unsigned char)__a, + (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __a, (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT, + (vector unsigned short)__a, + (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__a, __b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector bool short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT, + (vector unsigned short)__a, + (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __a, (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT, + (vector unsigned int)__a, + (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__a, __b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector bool int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT, + (vector unsigned int)__a, + (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_all_gt(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __a, __b); +} + +/* vec_all_in */ + +static int __attribute__((__always_inline__)) +vec_all_in(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpbfp_p(__CR6_EQ, __a, __b); +} + +/* vec_all_le */ + +static int __ATTRS_o_ai +vec_all_le(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_le(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_EQ, __a, (vector signed char)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_le(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ, __a, (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ, + (vector unsigned char)__a, + (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ, (vector unsigned char)__a, __b); +} + +static int __ATTRS_o_ai +vec_all_le(vector bool char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ, + (vector unsigned char)__a, + (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_le(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_EQ, __a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_le(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, __a, (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, + (vector unsigned short)__a, + (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, (vector unsigned short)__a, __b); +} + +static int __ATTRS_o_ai +vec_all_le(vector bool short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ, + (vector unsigned short)__a, + (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_le(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_EQ, __a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_le(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, __a, (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, + (vector unsigned int)__a, + (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, (vector unsigned int)__a, __b); +} + +static int __ATTRS_o_ai +vec_all_le(vector bool int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ, + (vector unsigned int)__a, + (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_all_le(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgefp_p(__CR6_LT, __b, __a); +} + +/* vec_all_lt */ + +static int __ATTRS_o_ai +vec_all_lt(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_LT, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_LT, (vector signed char)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT, (vector unsigned char)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT, + (vector unsigned char)__b, + (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT, __b, (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector bool char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT, + (vector unsigned char)__b, + (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_LT, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_LT, (vector short)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT, (vector unsigned short)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT, + (vector unsigned short)__b, + (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT, __b, (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector bool short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT, + (vector unsigned short)__b, + (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_LT, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_LT, (vector int)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT, (vector unsigned int)__b, __a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT, + (vector unsigned int)__b, + (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT, __b, (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector bool int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT, + (vector unsigned int)__b, + (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_all_lt(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgtfp_p(__CR6_LT, __b, __a); +} + +/* vec_all_nan */ + +static int __attribute__((__always_inline__)) +vec_all_nan(vector float __a) +{ + return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __a); +} + +/* vec_all_ne */ + +static int __ATTRS_o_ai +vec_all_ne(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector bool char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpequb_p(__CR6_EQ, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_EQ, __a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector unsigned short __a, vector unsigned short __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector unsigned short __a, vector bool short __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector bool short __a, vector short __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector bool short __a, vector unsigned short __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector bool short __a, vector bool short __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector pixel __a, vector pixel __b) +{ + return + __builtin_altivec_vcmpequh_p(__CR6_EQ, (vector short)__a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, __b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_EQ, __a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector bool int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_EQ, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_all_ne(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpeqfp_p(__CR6_EQ, __a, __b); +} + +/* vec_all_nge */ + +static int __attribute__((__always_inline__)) +vec_all_nge(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __a, __b); +} + +/* vec_all_ngt */ + +static int __attribute__((__always_inline__)) +vec_all_ngt(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __a, __b); +} + +/* vec_all_nle */ + +static int __attribute__((__always_inline__)) +vec_all_nle(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgefp_p(__CR6_EQ, __b, __a); +} + +/* vec_all_nlt */ + +static int __attribute__((__always_inline__)) +vec_all_nlt(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgtfp_p(__CR6_EQ, __b, __a); +} + +/* vec_all_numeric */ + +static int __attribute__((__always_inline__)) +vec_all_numeric(vector float __a) +{ + return __builtin_altivec_vcmpeqfp_p(__CR6_LT, __a, __a); +} + +/* vec_any_eq */ + +static int __ATTRS_o_ai +vec_any_eq(vector signed char __a, vector signed char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector signed char __a, vector bool char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector unsigned char __a, vector unsigned char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector unsigned char __a, vector bool char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector bool char __a, vector signed char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector bool char __a, vector unsigned char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector bool char __a, vector bool char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_EQ_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, __a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector bool short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector pixel __a, vector pixel __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_EQ_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, __a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector unsigned int __a, vector unsigned int __b) +{ + return + __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector unsigned int __a, vector bool int __b) +{ + return + __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector bool int __a, vector int __b) +{ + return + __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector bool int __a, vector unsigned int __b) +{ + return + __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector bool int __a, vector bool int __b) +{ + return + __builtin_altivec_vcmpequw_p(__CR6_EQ_REV, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_eq(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __b); +} + +/* vec_any_ge */ + +static int __ATTRS_o_ai +vec_any_ge(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, (vector signed char)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector unsigned char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, + (vector unsigned char)__b, + (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector bool char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __b, (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector bool char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, + (vector unsigned char)__b, + (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, (vector short)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector unsigned short __a, vector bool short __b) +{ + return + __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, + (vector unsigned short)__b, + (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector bool short __a, vector unsigned short __b) +{ + return + __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __b, (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector bool short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, + (vector unsigned short)__b, + (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, (vector int)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, + (vector unsigned int)__b, + (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __b, (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector bool int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, + (vector unsigned int)__b, + (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_any_ge(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __a, __b); +} + +/* vec_any_gt */ + +static int __ATTRS_o_ai +vec_any_gt(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __a, (vector signed char)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector unsigned char __a, vector bool char __b) +{ + return + __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __a, (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, + (vector unsigned char)__a, + (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector bool char __a, vector unsigned char __b) +{ + return + __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__a, __b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector bool char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, + (vector unsigned char)__a, + (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector unsigned short __a, vector bool short __b) +{ + return + __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __a, (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, + (vector unsigned short)__a, + (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector bool short __a, vector unsigned short __b) +{ + return + __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__a, __b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector bool short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, + (vector unsigned short)__a, + (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __a, (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, + (vector unsigned int)__a, + (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__a, __b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector bool int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, + (vector unsigned int)__a, + (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_any_gt(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __a, __b); +} + +/* vec_any_le */ + +static int __ATTRS_o_ai +vec_any_le(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_le(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_LT_REV, __a, (vector signed char)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_le(vector unsigned char __a, vector bool char __b) +{ + return + __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, __a, (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, + (vector unsigned char)__a, + (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector bool char __a, vector unsigned char __b) +{ + return + __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, (vector unsigned char)__a, __b); +} + +static int __ATTRS_o_ai +vec_any_le(vector bool char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_LT_REV, + (vector unsigned char)__a, + (vector unsigned char)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_le(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_LT_REV, __a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_le(vector unsigned short __a, vector bool short __b) +{ + return + __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, __a, (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, + (vector unsigned short)__a, + (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector bool short __a, vector unsigned short __b) +{ + return + __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, (vector unsigned short)__a, __b); +} + +static int __ATTRS_o_ai +vec_any_le(vector bool short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_LT_REV, + (vector unsigned short)__a, + (vector unsigned short)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_le(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_LT_REV, __a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_le(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, __a, (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, + (vector unsigned int)__a, + (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, (vector unsigned int)__a, __b); +} + +static int __ATTRS_o_ai +vec_any_le(vector bool int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_LT_REV, + (vector unsigned int)__a, + (vector unsigned int)__b); +} + +static int __ATTRS_o_ai +vec_any_le(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgefp_p(__CR6_EQ_REV, __b, __a); +} + +/* vec_any_lt */ + +static int __ATTRS_o_ai +vec_any_lt(vector signed char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector signed char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtsb_p(__CR6_EQ_REV, (vector signed char)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector unsigned char __a, vector unsigned char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector unsigned char __a, vector bool char __b) +{ + return + __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, (vector unsigned char)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector bool char __a, vector signed char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, + (vector unsigned char)__b, + (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector bool char __a, vector unsigned char __b) +{ + return + __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, __b, (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector bool char __a, vector bool char __b) +{ + return __builtin_altivec_vcmpgtub_p(__CR6_EQ_REV, + (vector unsigned char)__b, + (vector unsigned char)__a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtsh_p(__CR6_EQ_REV, (vector short)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector unsigned short __a, vector bool short __b) +{ + return + __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, (vector unsigned short)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, + (vector unsigned short)__b, + (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector bool short __a, vector unsigned short __b) +{ + return + __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, __b, (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector bool short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpgtuh_p(__CR6_EQ_REV, + (vector unsigned short)__b, + (vector unsigned short)__a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtsw_p(__CR6_EQ_REV, (vector int)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector unsigned int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector unsigned int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, (vector unsigned int)__b, __a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector bool int __a, vector int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, + (vector unsigned int)__b, + (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector bool int __a, vector unsigned int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, __b, (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector bool int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpgtuw_p(__CR6_EQ_REV, + (vector unsigned int)__b, + (vector unsigned int)__a); +} + +static int __ATTRS_o_ai +vec_any_lt(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgtfp_p(__CR6_EQ_REV, __b, __a); +} + +/* vec_any_nan */ + +static int __attribute__((__always_inline__)) +vec_any_nan(vector float __a) +{ + return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __a); +} + +/* vec_any_ne */ + +static int __ATTRS_o_ai +vec_any_ne(vector signed char __a, vector signed char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector signed char __a, vector bool char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector unsigned char __a, vector unsigned char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector unsigned char __a, vector bool char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector bool char __a, vector signed char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector bool char __a, vector unsigned char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector bool char __a, vector bool char __b) +{ + return + __builtin_altivec_vcmpequb_p(__CR6_LT_REV, (vector char)__a, (vector char)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector short __a, vector short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, __a, (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector unsigned short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector unsigned short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector bool short __a, vector short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector bool short __a, vector unsigned short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector bool short __a, vector bool short __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector pixel __a, vector pixel __b) +{ + return __builtin_altivec_vcmpequh_p(__CR6_LT_REV, + (vector short)__a, + (vector short)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector int __a, vector int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, __b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector int __a, vector bool int __b) +{ + return __builtin_altivec_vcmpequw_p(__CR6_LT_REV, __a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector unsigned int __a, vector unsigned int __b) +{ + return + __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector unsigned int __a, vector bool int __b) +{ + return + __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector bool int __a, vector int __b) +{ + return + __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector bool int __a, vector unsigned int __b) +{ + return + __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector bool int __a, vector bool int __b) +{ + return + __builtin_altivec_vcmpequw_p(__CR6_LT_REV, (vector int)__a, (vector int)__b); +} + +static int __ATTRS_o_ai +vec_any_ne(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpeqfp_p(__CR6_LT_REV, __a, __b); +} + +/* vec_any_nge */ + +static int __attribute__((__always_inline__)) +vec_any_nge(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __a, __b); +} + +/* vec_any_ngt */ + +static int __attribute__((__always_inline__)) +vec_any_ngt(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __a, __b); +} + +/* vec_any_nle */ + +static int __attribute__((__always_inline__)) +vec_any_nle(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgefp_p(__CR6_LT_REV, __b, __a); +} + +/* vec_any_nlt */ + +static int __attribute__((__always_inline__)) +vec_any_nlt(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpgtfp_p(__CR6_LT_REV, __b, __a); +} + +/* vec_any_numeric */ + +static int __attribute__((__always_inline__)) +vec_any_numeric(vector float __a) +{ + return __builtin_altivec_vcmpeqfp_p(__CR6_EQ_REV, __a, __a); +} + +/* vec_any_out */ + +static int __attribute__((__always_inline__)) +vec_any_out(vector float __a, vector float __b) +{ + return __builtin_altivec_vcmpbfp_p(__CR6_EQ_REV, __a, __b); +} + +#undef __ATTRS_o_ai + +#endif /* __ALTIVEC_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/ammintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/ammintrin.h new file mode 100755 index 0000000..d87b9cd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/ammintrin.h @@ -0,0 +1,68 @@ +/*===---- ammintrin.h - SSE4a intrinsics -----------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __AMMINTRIN_H +#define __AMMINTRIN_H + +#ifndef __SSE4A__ +#error "SSE4A instruction set not enabled" +#else + +#include + +#define _mm_extracti_si64(x, len, idx) \ + ((__m128i)__builtin_ia32_extrqi((__v2di)(__m128i)(x), \ + (char)(len), (char)(idx))) + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_extract_si64(__m128i __x, __m128i __y) +{ + return (__m128i)__builtin_ia32_extrq((__v2di)__x, (__v16qi)__y); +} + +#define _mm_inserti_si64(x, y, len, idx) \ + ((__m128i)__builtin_ia32_insertqi((__v2di)(__m128i)(x), \ + (__v2di)(__m128i)(y), \ + (char)(len), (char)(idx))) + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_insert_si64(__m128i __x, __m128i __y) +{ + return (__m128i)__builtin_ia32_insertq((__v2di)__x, (__v2di)__y); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_stream_sd(double *__p, __m128d __a) +{ + __builtin_ia32_movntsd(__p, (__v2df)__a); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_stream_ss(float *__p, __m128 __a) +{ + __builtin_ia32_movntss(__p, (__v4sf)__a); +} + +#endif /* __SSE4A__ */ + +#endif /* __AMMINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/arm_neon.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/arm_neon.h new file mode 100755 index 0000000..c297518 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/arm_neon.h @@ -0,0 +1,9595 @@ +/*===---- arm_neon.h - ARM Neon intrinsics ---------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __ARM_NEON_H +#define __ARM_NEON_H + +#if !defined(__ARM_NEON__) && !defined(__ARM_NEON) +#error "NEON support not enabled" +#endif + +#include + +typedef float float32_t; +typedef __fp16 float16_t; +#ifdef __aarch64__ +typedef double float64_t; +#endif + +#ifdef __aarch64__ +typedef uint8_t poly8_t; +typedef uint16_t poly16_t; +typedef uint64_t poly64_t; +#else +typedef int8_t poly8_t; +typedef int16_t poly16_t; +#endif +typedef __attribute__((neon_vector_type(8))) int8_t int8x8_t; +typedef __attribute__((neon_vector_type(16))) int8_t int8x16_t; +typedef __attribute__((neon_vector_type(4))) int16_t int16x4_t; +typedef __attribute__((neon_vector_type(8))) int16_t int16x8_t; +typedef __attribute__((neon_vector_type(2))) int32_t int32x2_t; +typedef __attribute__((neon_vector_type(4))) int32_t int32x4_t; +typedef __attribute__((neon_vector_type(1))) int64_t int64x1_t; +typedef __attribute__((neon_vector_type(2))) int64_t int64x2_t; +typedef __attribute__((neon_vector_type(8))) uint8_t uint8x8_t; +typedef __attribute__((neon_vector_type(16))) uint8_t uint8x16_t; +typedef __attribute__((neon_vector_type(4))) uint16_t uint16x4_t; +typedef __attribute__((neon_vector_type(8))) uint16_t uint16x8_t; +typedef __attribute__((neon_vector_type(2))) uint32_t uint32x2_t; +typedef __attribute__((neon_vector_type(4))) uint32_t uint32x4_t; +typedef __attribute__((neon_vector_type(1))) uint64_t uint64x1_t; +typedef __attribute__((neon_vector_type(2))) uint64_t uint64x2_t; +typedef __attribute__((neon_vector_type(4))) float16_t float16x4_t; +typedef __attribute__((neon_vector_type(8))) float16_t float16x8_t; +typedef __attribute__((neon_vector_type(2))) float32_t float32x2_t; +typedef __attribute__((neon_vector_type(4))) float32_t float32x4_t; +#ifdef __aarch64__ +typedef __attribute__((neon_vector_type(1))) float64_t float64x1_t; +typedef __attribute__((neon_vector_type(2))) float64_t float64x2_t; +#endif +typedef __attribute__((neon_polyvector_type(8))) poly8_t poly8x8_t; +typedef __attribute__((neon_polyvector_type(16))) poly8_t poly8x16_t; +typedef __attribute__((neon_polyvector_type(4))) poly16_t poly16x4_t; +typedef __attribute__((neon_polyvector_type(8))) poly16_t poly16x8_t; +#ifdef __aarch64__ +typedef __attribute__((neon_polyvector_type(1))) poly64_t poly64x1_t; +typedef __attribute__((neon_polyvector_type(2))) poly64_t poly64x2_t; +#endif + +typedef struct int8x8x2_t { + int8x8_t val[2]; +} int8x8x2_t; + +typedef struct int8x16x2_t { + int8x16_t val[2]; +} int8x16x2_t; + +typedef struct int16x4x2_t { + int16x4_t val[2]; +} int16x4x2_t; + +typedef struct int16x8x2_t { + int16x8_t val[2]; +} int16x8x2_t; + +typedef struct int32x2x2_t { + int32x2_t val[2]; +} int32x2x2_t; + +typedef struct int32x4x2_t { + int32x4_t val[2]; +} int32x4x2_t; + +typedef struct int64x1x2_t { + int64x1_t val[2]; +} int64x1x2_t; + +typedef struct int64x2x2_t { + int64x2_t val[2]; +} int64x2x2_t; + +typedef struct uint8x8x2_t { + uint8x8_t val[2]; +} uint8x8x2_t; + +typedef struct uint8x16x2_t { + uint8x16_t val[2]; +} uint8x16x2_t; + +typedef struct uint16x4x2_t { + uint16x4_t val[2]; +} uint16x4x2_t; + +typedef struct uint16x8x2_t { + uint16x8_t val[2]; +} uint16x8x2_t; + +typedef struct uint32x2x2_t { + uint32x2_t val[2]; +} uint32x2x2_t; + +typedef struct uint32x4x2_t { + uint32x4_t val[2]; +} uint32x4x2_t; + +typedef struct uint64x1x2_t { + uint64x1_t val[2]; +} uint64x1x2_t; + +typedef struct uint64x2x2_t { + uint64x2_t val[2]; +} uint64x2x2_t; + +typedef struct float16x4x2_t { + float16x4_t val[2]; +} float16x4x2_t; + +typedef struct float16x8x2_t { + float16x8_t val[2]; +} float16x8x2_t; + +typedef struct float32x2x2_t { + float32x2_t val[2]; +} float32x2x2_t; + +typedef struct float32x4x2_t { + float32x4_t val[2]; +} float32x4x2_t; + +#ifdef __aarch64__ +typedef struct float64x1x2_t { + float64x1_t val[2]; +} float64x1x2_t; + +typedef struct float64x2x2_t { + float64x2_t val[2]; +} float64x2x2_t; + +#endif +typedef struct poly8x8x2_t { + poly8x8_t val[2]; +} poly8x8x2_t; + +typedef struct poly8x16x2_t { + poly8x16_t val[2]; +} poly8x16x2_t; + +typedef struct poly16x4x2_t { + poly16x4_t val[2]; +} poly16x4x2_t; + +typedef struct poly16x8x2_t { + poly16x8_t val[2]; +} poly16x8x2_t; + +#ifdef __aarch64__ +typedef struct poly64x1x2_t { + poly64x1_t val[2]; +} poly64x1x2_t; + +typedef struct poly64x2x2_t { + poly64x2_t val[2]; +} poly64x2x2_t; + +#endif +typedef struct int8x8x3_t { + int8x8_t val[3]; +} int8x8x3_t; + +typedef struct int8x16x3_t { + int8x16_t val[3]; +} int8x16x3_t; + +typedef struct int16x4x3_t { + int16x4_t val[3]; +} int16x4x3_t; + +typedef struct int16x8x3_t { + int16x8_t val[3]; +} int16x8x3_t; + +typedef struct int32x2x3_t { + int32x2_t val[3]; +} int32x2x3_t; + +typedef struct int32x4x3_t { + int32x4_t val[3]; +} int32x4x3_t; + +typedef struct int64x1x3_t { + int64x1_t val[3]; +} int64x1x3_t; + +typedef struct int64x2x3_t { + int64x2_t val[3]; +} int64x2x3_t; + +typedef struct uint8x8x3_t { + uint8x8_t val[3]; +} uint8x8x3_t; + +typedef struct uint8x16x3_t { + uint8x16_t val[3]; +} uint8x16x3_t; + +typedef struct uint16x4x3_t { + uint16x4_t val[3]; +} uint16x4x3_t; + +typedef struct uint16x8x3_t { + uint16x8_t val[3]; +} uint16x8x3_t; + +typedef struct uint32x2x3_t { + uint32x2_t val[3]; +} uint32x2x3_t; + +typedef struct uint32x4x3_t { + uint32x4_t val[3]; +} uint32x4x3_t; + +typedef struct uint64x1x3_t { + uint64x1_t val[3]; +} uint64x1x3_t; + +typedef struct uint64x2x3_t { + uint64x2_t val[3]; +} uint64x2x3_t; + +typedef struct float16x4x3_t { + float16x4_t val[3]; +} float16x4x3_t; + +typedef struct float16x8x3_t { + float16x8_t val[3]; +} float16x8x3_t; + +typedef struct float32x2x3_t { + float32x2_t val[3]; +} float32x2x3_t; + +typedef struct float32x4x3_t { + float32x4_t val[3]; +} float32x4x3_t; + +#ifdef __aarch64__ +typedef struct float64x1x3_t { + float64x1_t val[3]; +} float64x1x3_t; + +typedef struct float64x2x3_t { + float64x2_t val[3]; +} float64x2x3_t; + +#endif +typedef struct poly8x8x3_t { + poly8x8_t val[3]; +} poly8x8x3_t; + +typedef struct poly8x16x3_t { + poly8x16_t val[3]; +} poly8x16x3_t; + +typedef struct poly16x4x3_t { + poly16x4_t val[3]; +} poly16x4x3_t; + +typedef struct poly16x8x3_t { + poly16x8_t val[3]; +} poly16x8x3_t; + +#ifdef __aarch64__ +typedef struct poly64x1x3_t { + poly64x1_t val[3]; +} poly64x1x3_t; + +typedef struct poly64x2x3_t { + poly64x2_t val[3]; +} poly64x2x3_t; + +#endif +typedef struct int8x8x4_t { + int8x8_t val[4]; +} int8x8x4_t; + +typedef struct int8x16x4_t { + int8x16_t val[4]; +} int8x16x4_t; + +typedef struct int16x4x4_t { + int16x4_t val[4]; +} int16x4x4_t; + +typedef struct int16x8x4_t { + int16x8_t val[4]; +} int16x8x4_t; + +typedef struct int32x2x4_t { + int32x2_t val[4]; +} int32x2x4_t; + +typedef struct int32x4x4_t { + int32x4_t val[4]; +} int32x4x4_t; + +typedef struct int64x1x4_t { + int64x1_t val[4]; +} int64x1x4_t; + +typedef struct int64x2x4_t { + int64x2_t val[4]; +} int64x2x4_t; + +typedef struct uint8x8x4_t { + uint8x8_t val[4]; +} uint8x8x4_t; + +typedef struct uint8x16x4_t { + uint8x16_t val[4]; +} uint8x16x4_t; + +typedef struct uint16x4x4_t { + uint16x4_t val[4]; +} uint16x4x4_t; + +typedef struct uint16x8x4_t { + uint16x8_t val[4]; +} uint16x8x4_t; + +typedef struct uint32x2x4_t { + uint32x2_t val[4]; +} uint32x2x4_t; + +typedef struct uint32x4x4_t { + uint32x4_t val[4]; +} uint32x4x4_t; + +typedef struct uint64x1x4_t { + uint64x1_t val[4]; +} uint64x1x4_t; + +typedef struct uint64x2x4_t { + uint64x2_t val[4]; +} uint64x2x4_t; + +typedef struct float16x4x4_t { + float16x4_t val[4]; +} float16x4x4_t; + +typedef struct float16x8x4_t { + float16x8_t val[4]; +} float16x8x4_t; + +typedef struct float32x2x4_t { + float32x2_t val[4]; +} float32x2x4_t; + +typedef struct float32x4x4_t { + float32x4_t val[4]; +} float32x4x4_t; + +#ifdef __aarch64__ +typedef struct float64x1x4_t { + float64x1_t val[4]; +} float64x1x4_t; + +typedef struct float64x2x4_t { + float64x2_t val[4]; +} float64x2x4_t; + +#endif +typedef struct poly8x8x4_t { + poly8x8_t val[4]; +} poly8x8x4_t; + +typedef struct poly8x16x4_t { + poly8x16_t val[4]; +} poly8x16x4_t; + +typedef struct poly16x4x4_t { + poly16x4_t val[4]; +} poly16x4x4_t; + +typedef struct poly16x8x4_t { + poly16x8_t val[4]; +} poly16x8x4_t; + +#ifdef __aarch64__ +typedef struct poly64x1x4_t { + poly64x1_t val[4]; +} poly64x1x4_t; + +typedef struct poly64x2x4_t { + poly64x2_t val[4]; +} poly64x2x4_t; + +#endif + +#define __ai static inline __attribute__((__always_inline__, __nodebug__)) + +__ai int16x8_t vmovl_s8(int8x8_t __a) { + return (int16x8_t)__builtin_neon_vmovl_v(__a, 33); } +__ai int32x4_t vmovl_s16(int16x4_t __a) { + return (int32x4_t)__builtin_neon_vmovl_v((int8x8_t)__a, 34); } +__ai int64x2_t vmovl_s32(int32x2_t __a) { + return (int64x2_t)__builtin_neon_vmovl_v((int8x8_t)__a, 35); } +__ai uint16x8_t vmovl_u8(uint8x8_t __a) { + return (uint16x8_t)__builtin_neon_vmovl_v((int8x8_t)__a, 49); } +__ai uint32x4_t vmovl_u16(uint16x4_t __a) { + return (uint32x4_t)__builtin_neon_vmovl_v((int8x8_t)__a, 50); } +__ai uint64x2_t vmovl_u32(uint32x2_t __a) { + return (uint64x2_t)__builtin_neon_vmovl_v((int8x8_t)__a, 51); } + +__ai int16x8_t vmull_s8(int8x8_t __a, int8x8_t __b) { + return (int16x8_t)__builtin_neon_vmull_v(__a, __b, 33); } +__ai int32x4_t vmull_s16(int16x4_t __a, int16x4_t __b) { + return (int32x4_t)__builtin_neon_vmull_v((int8x8_t)__a, (int8x8_t)__b, 34); } +__ai int64x2_t vmull_s32(int32x2_t __a, int32x2_t __b) { + return (int64x2_t)__builtin_neon_vmull_v((int8x8_t)__a, (int8x8_t)__b, 35); } +__ai uint16x8_t vmull_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint16x8_t)__builtin_neon_vmull_v((int8x8_t)__a, (int8x8_t)__b, 49); } +__ai uint32x4_t vmull_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint32x4_t)__builtin_neon_vmull_v((int8x8_t)__a, (int8x8_t)__b, 50); } +__ai uint64x2_t vmull_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint64x2_t)__builtin_neon_vmull_v((int8x8_t)__a, (int8x8_t)__b, 51); } +__ai poly16x8_t vmull_p8(poly8x8_t __a, poly8x8_t __b) { + return (poly16x8_t)__builtin_neon_vmull_v((int8x8_t)__a, (int8x8_t)__b, 37); } + +__ai int8x8_t vabd_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vabd_v(__a, __b, 0); } +__ai int16x4_t vabd_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vabd_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vabd_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vabd_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai uint8x8_t vabd_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vabd_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vabd_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vabd_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vabd_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vabd_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai float32x2_t vabd_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vabd_v((int8x8_t)__a, (int8x8_t)__b, 8); } +__ai int8x16_t vabdq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vabdq_v(__a, __b, 32); } +__ai int16x8_t vabdq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vabdq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vabdq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vabdq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai uint8x16_t vabdq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vabdq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vabdq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vabdq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vabdq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vabdq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai float32x4_t vabdq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vabdq_v((int8x16_t)__a, (int8x16_t)__b, 40); } + +__ai int16x8_t vabdl_s8(int8x8_t __a, int8x8_t __b) { + return (int16x8_t)vmovl_u8((uint8x8_t)vabd_s8(__a, __b)); } +__ai int32x4_t vabdl_s16(int16x4_t __a, int16x4_t __b) { + return (int32x4_t)vmovl_u16((uint16x4_t)vabd_s16(__a, __b)); } +__ai int64x2_t vabdl_s32(int32x2_t __a, int32x2_t __b) { + return (int64x2_t)vmovl_u32((uint32x2_t)vabd_s32(__a, __b)); } +__ai uint16x8_t vabdl_u8(uint8x8_t __a, uint8x8_t __b) { + return vmovl_u8(vabd_u8(__a, __b)); } +__ai uint32x4_t vabdl_u16(uint16x4_t __a, uint16x4_t __b) { + return vmovl_u16(vabd_u16(__a, __b)); } +__ai uint64x2_t vabdl_u32(uint32x2_t __a, uint32x2_t __b) { + return vmovl_u32(vabd_u32(__a, __b)); } + +__ai int8x8_t vaba_s8(int8x8_t __a, int8x8_t __b, int8x8_t __c) { + return __a + vabd_s8(__b, __c); } +__ai int16x4_t vaba_s16(int16x4_t __a, int16x4_t __b, int16x4_t __c) { + return __a + vabd_s16(__b, __c); } +__ai int32x2_t vaba_s32(int32x2_t __a, int32x2_t __b, int32x2_t __c) { + return __a + vabd_s32(__b, __c); } +__ai uint8x8_t vaba_u8(uint8x8_t __a, uint8x8_t __b, uint8x8_t __c) { + return __a + vabd_u8(__b, __c); } +__ai uint16x4_t vaba_u16(uint16x4_t __a, uint16x4_t __b, uint16x4_t __c) { + return __a + vabd_u16(__b, __c); } +__ai uint32x2_t vaba_u32(uint32x2_t __a, uint32x2_t __b, uint32x2_t __c) { + return __a + vabd_u32(__b, __c); } +__ai int8x16_t vabaq_s8(int8x16_t __a, int8x16_t __b, int8x16_t __c) { + return __a + vabdq_s8(__b, __c); } +__ai int16x8_t vabaq_s16(int16x8_t __a, int16x8_t __b, int16x8_t __c) { + return __a + vabdq_s16(__b, __c); } +__ai int32x4_t vabaq_s32(int32x4_t __a, int32x4_t __b, int32x4_t __c) { + return __a + vabdq_s32(__b, __c); } +__ai uint8x16_t vabaq_u8(uint8x16_t __a, uint8x16_t __b, uint8x16_t __c) { + return __a + vabdq_u8(__b, __c); } +__ai uint16x8_t vabaq_u16(uint16x8_t __a, uint16x8_t __b, uint16x8_t __c) { + return __a + vabdq_u16(__b, __c); } +__ai uint32x4_t vabaq_u32(uint32x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return __a + vabdq_u32(__b, __c); } + +__ai int16x8_t vabal_s8(int16x8_t __a, int8x8_t __b, int8x8_t __c) { + return __a + vabdl_s8(__b, __c); } +__ai int32x4_t vabal_s16(int32x4_t __a, int16x4_t __b, int16x4_t __c) { + return __a + vabdl_s16(__b, __c); } +__ai int64x2_t vabal_s32(int64x2_t __a, int32x2_t __b, int32x2_t __c) { + return __a + vabdl_s32(__b, __c); } +__ai uint16x8_t vabal_u8(uint16x8_t __a, uint8x8_t __b, uint8x8_t __c) { + return __a + vabdl_u8(__b, __c); } +__ai uint32x4_t vabal_u16(uint32x4_t __a, uint16x4_t __b, uint16x4_t __c) { + return __a + vabdl_u16(__b, __c); } +__ai uint64x2_t vabal_u32(uint64x2_t __a, uint32x2_t __b, uint32x2_t __c) { + return __a + vabdl_u32(__b, __c); } + + +__ai int8x8_t vabs_s8(int8x8_t __a) { + return (int8x8_t)__builtin_neon_vabs_v(__a, 0); } +__ai int16x4_t vabs_s16(int16x4_t __a) { + return (int16x4_t)__builtin_neon_vabs_v((int8x8_t)__a, 1); } +__ai int32x2_t vabs_s32(int32x2_t __a) { + return (int32x2_t)__builtin_neon_vabs_v((int8x8_t)__a, 2); } +__ai float32x2_t vabs_f32(float32x2_t __a) { + return (float32x2_t)__builtin_neon_vabs_v((int8x8_t)__a, 8); } +__ai int8x16_t vabsq_s8(int8x16_t __a) { + return (int8x16_t)__builtin_neon_vabsq_v(__a, 32); } +__ai int16x8_t vabsq_s16(int16x8_t __a) { + return (int16x8_t)__builtin_neon_vabsq_v((int8x16_t)__a, 33); } +__ai int32x4_t vabsq_s32(int32x4_t __a) { + return (int32x4_t)__builtin_neon_vabsq_v((int8x16_t)__a, 34); } +__ai float32x4_t vabsq_f32(float32x4_t __a) { + return (float32x4_t)__builtin_neon_vabsq_v((int8x16_t)__a, 40); } + +__ai int8x8_t vadd_s8(int8x8_t __a, int8x8_t __b) { + return __a + __b; } +__ai int16x4_t vadd_s16(int16x4_t __a, int16x4_t __b) { + return __a + __b; } +__ai int32x2_t vadd_s32(int32x2_t __a, int32x2_t __b) { + return __a + __b; } +__ai int64x1_t vadd_s64(int64x1_t __a, int64x1_t __b) { + return __a + __b; } +__ai float32x2_t vadd_f32(float32x2_t __a, float32x2_t __b) { + return __a + __b; } +__ai uint8x8_t vadd_u8(uint8x8_t __a, uint8x8_t __b) { + return __a + __b; } +__ai uint16x4_t vadd_u16(uint16x4_t __a, uint16x4_t __b) { + return __a + __b; } +__ai uint32x2_t vadd_u32(uint32x2_t __a, uint32x2_t __b) { + return __a + __b; } +__ai uint64x1_t vadd_u64(uint64x1_t __a, uint64x1_t __b) { + return __a + __b; } +__ai int8x16_t vaddq_s8(int8x16_t __a, int8x16_t __b) { + return __a + __b; } +__ai int16x8_t vaddq_s16(int16x8_t __a, int16x8_t __b) { + return __a + __b; } +__ai int32x4_t vaddq_s32(int32x4_t __a, int32x4_t __b) { + return __a + __b; } +__ai int64x2_t vaddq_s64(int64x2_t __a, int64x2_t __b) { + return __a + __b; } +__ai float32x4_t vaddq_f32(float32x4_t __a, float32x4_t __b) { + return __a + __b; } +__ai uint8x16_t vaddq_u8(uint8x16_t __a, uint8x16_t __b) { + return __a + __b; } +__ai uint16x8_t vaddq_u16(uint16x8_t __a, uint16x8_t __b) { + return __a + __b; } +__ai uint32x4_t vaddq_u32(uint32x4_t __a, uint32x4_t __b) { + return __a + __b; } +__ai uint64x2_t vaddq_u64(uint64x2_t __a, uint64x2_t __b) { + return __a + __b; } + +__ai int8x8_t vaddhn_s16(int16x8_t __a, int16x8_t __b) { + return (int8x8_t)__builtin_neon_vaddhn_v((int8x16_t)__a, (int8x16_t)__b, 0); } +__ai int16x4_t vaddhn_s32(int32x4_t __a, int32x4_t __b) { + return (int16x4_t)__builtin_neon_vaddhn_v((int8x16_t)__a, (int8x16_t)__b, 1); } +__ai int32x2_t vaddhn_s64(int64x2_t __a, int64x2_t __b) { + return (int32x2_t)__builtin_neon_vaddhn_v((int8x16_t)__a, (int8x16_t)__b, 2); } +__ai uint8x8_t vaddhn_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint8x8_t)__builtin_neon_vaddhn_v((int8x16_t)__a, (int8x16_t)__b, 16); } +__ai uint16x4_t vaddhn_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint16x4_t)__builtin_neon_vaddhn_v((int8x16_t)__a, (int8x16_t)__b, 17); } +__ai uint32x2_t vaddhn_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint32x2_t)__builtin_neon_vaddhn_v((int8x16_t)__a, (int8x16_t)__b, 18); } + +__ai int16x8_t vaddl_s8(int8x8_t __a, int8x8_t __b) { + return vmovl_s8(__a) + vmovl_s8(__b); } +__ai int32x4_t vaddl_s16(int16x4_t __a, int16x4_t __b) { + return vmovl_s16(__a) + vmovl_s16(__b); } +__ai int64x2_t vaddl_s32(int32x2_t __a, int32x2_t __b) { + return vmovl_s32(__a) + vmovl_s32(__b); } +__ai uint16x8_t vaddl_u8(uint8x8_t __a, uint8x8_t __b) { + return vmovl_u8(__a) + vmovl_u8(__b); } +__ai uint32x4_t vaddl_u16(uint16x4_t __a, uint16x4_t __b) { + return vmovl_u16(__a) + vmovl_u16(__b); } +__ai uint64x2_t vaddl_u32(uint32x2_t __a, uint32x2_t __b) { + return vmovl_u32(__a) + vmovl_u32(__b); } + +__ai int16x8_t vaddw_s8(int16x8_t __a, int8x8_t __b) { + return __a + vmovl_s8(__b); } +__ai int32x4_t vaddw_s16(int32x4_t __a, int16x4_t __b) { + return __a + vmovl_s16(__b); } +__ai int64x2_t vaddw_s32(int64x2_t __a, int32x2_t __b) { + return __a + vmovl_s32(__b); } +__ai uint16x8_t vaddw_u8(uint16x8_t __a, uint8x8_t __b) { + return __a + vmovl_u8(__b); } +__ai uint32x4_t vaddw_u16(uint32x4_t __a, uint16x4_t __b) { + return __a + vmovl_u16(__b); } +__ai uint64x2_t vaddw_u32(uint64x2_t __a, uint32x2_t __b) { + return __a + vmovl_u32(__b); } + +__ai int8x8_t vand_s8(int8x8_t __a, int8x8_t __b) { + return __a & __b; } +__ai int16x4_t vand_s16(int16x4_t __a, int16x4_t __b) { + return __a & __b; } +__ai int32x2_t vand_s32(int32x2_t __a, int32x2_t __b) { + return __a & __b; } +__ai int64x1_t vand_s64(int64x1_t __a, int64x1_t __b) { + return __a & __b; } +__ai uint8x8_t vand_u8(uint8x8_t __a, uint8x8_t __b) { + return __a & __b; } +__ai uint16x4_t vand_u16(uint16x4_t __a, uint16x4_t __b) { + return __a & __b; } +__ai uint32x2_t vand_u32(uint32x2_t __a, uint32x2_t __b) { + return __a & __b; } +__ai uint64x1_t vand_u64(uint64x1_t __a, uint64x1_t __b) { + return __a & __b; } +__ai int8x16_t vandq_s8(int8x16_t __a, int8x16_t __b) { + return __a & __b; } +__ai int16x8_t vandq_s16(int16x8_t __a, int16x8_t __b) { + return __a & __b; } +__ai int32x4_t vandq_s32(int32x4_t __a, int32x4_t __b) { + return __a & __b; } +__ai int64x2_t vandq_s64(int64x2_t __a, int64x2_t __b) { + return __a & __b; } +__ai uint8x16_t vandq_u8(uint8x16_t __a, uint8x16_t __b) { + return __a & __b; } +__ai uint16x8_t vandq_u16(uint16x8_t __a, uint16x8_t __b) { + return __a & __b; } +__ai uint32x4_t vandq_u32(uint32x4_t __a, uint32x4_t __b) { + return __a & __b; } +__ai uint64x2_t vandq_u64(uint64x2_t __a, uint64x2_t __b) { + return __a & __b; } + +__ai int8x8_t vbic_s8(int8x8_t __a, int8x8_t __b) { + return __a & ~__b; } +__ai int16x4_t vbic_s16(int16x4_t __a, int16x4_t __b) { + return __a & ~__b; } +__ai int32x2_t vbic_s32(int32x2_t __a, int32x2_t __b) { + return __a & ~__b; } +__ai int64x1_t vbic_s64(int64x1_t __a, int64x1_t __b) { + return __a & ~__b; } +__ai uint8x8_t vbic_u8(uint8x8_t __a, uint8x8_t __b) { + return __a & ~__b; } +__ai uint16x4_t vbic_u16(uint16x4_t __a, uint16x4_t __b) { + return __a & ~__b; } +__ai uint32x2_t vbic_u32(uint32x2_t __a, uint32x2_t __b) { + return __a & ~__b; } +__ai uint64x1_t vbic_u64(uint64x1_t __a, uint64x1_t __b) { + return __a & ~__b; } +__ai int8x16_t vbicq_s8(int8x16_t __a, int8x16_t __b) { + return __a & ~__b; } +__ai int16x8_t vbicq_s16(int16x8_t __a, int16x8_t __b) { + return __a & ~__b; } +__ai int32x4_t vbicq_s32(int32x4_t __a, int32x4_t __b) { + return __a & ~__b; } +__ai int64x2_t vbicq_s64(int64x2_t __a, int64x2_t __b) { + return __a & ~__b; } +__ai uint8x16_t vbicq_u8(uint8x16_t __a, uint8x16_t __b) { + return __a & ~__b; } +__ai uint16x8_t vbicq_u16(uint16x8_t __a, uint16x8_t __b) { + return __a & ~__b; } +__ai uint32x4_t vbicq_u32(uint32x4_t __a, uint32x4_t __b) { + return __a & ~__b; } +__ai uint64x2_t vbicq_u64(uint64x2_t __a, uint64x2_t __b) { + return __a & ~__b; } + +__ai int8x8_t vbsl_s8(uint8x8_t __a, int8x8_t __b, int8x8_t __c) { + return (int8x8_t)__builtin_neon_vbsl_v((int8x8_t)__a, __b, __c, 0); } +__ai int16x4_t vbsl_s16(uint16x4_t __a, int16x4_t __b, int16x4_t __c) { + return (int16x4_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 1); } +__ai int32x2_t vbsl_s32(uint32x2_t __a, int32x2_t __b, int32x2_t __c) { + return (int32x2_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 2); } +__ai int64x1_t vbsl_s64(uint64x1_t __a, int64x1_t __b, int64x1_t __c) { + return (int64x1_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 3); } +__ai uint8x8_t vbsl_u8(uint8x8_t __a, uint8x8_t __b, uint8x8_t __c) { + return (uint8x8_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 16); } +__ai uint16x4_t vbsl_u16(uint16x4_t __a, uint16x4_t __b, uint16x4_t __c) { + return (uint16x4_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 17); } +__ai uint32x2_t vbsl_u32(uint32x2_t __a, uint32x2_t __b, uint32x2_t __c) { + return (uint32x2_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 18); } +__ai uint64x1_t vbsl_u64(uint64x1_t __a, uint64x1_t __b, uint64x1_t __c) { + return (uint64x1_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 19); } +__ai float32x2_t vbsl_f32(uint32x2_t __a, float32x2_t __b, float32x2_t __c) { + return (float32x2_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 8); } +__ai poly8x8_t vbsl_p8(uint8x8_t __a, poly8x8_t __b, poly8x8_t __c) { + return (poly8x8_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 4); } +__ai poly16x4_t vbsl_p16(uint16x4_t __a, poly16x4_t __b, poly16x4_t __c) { + return (poly16x4_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 5); } +__ai int8x16_t vbslq_s8(uint8x16_t __a, int8x16_t __b, int8x16_t __c) { + return (int8x16_t)__builtin_neon_vbslq_v((int8x16_t)__a, __b, __c, 32); } +__ai int16x8_t vbslq_s16(uint16x8_t __a, int16x8_t __b, int16x8_t __c) { + return (int16x8_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 33); } +__ai int32x4_t vbslq_s32(uint32x4_t __a, int32x4_t __b, int32x4_t __c) { + return (int32x4_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 34); } +__ai int64x2_t vbslq_s64(uint64x2_t __a, int64x2_t __b, int64x2_t __c) { + return (int64x2_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 35); } +__ai uint8x16_t vbslq_u8(uint8x16_t __a, uint8x16_t __b, uint8x16_t __c) { + return (uint8x16_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 48); } +__ai uint16x8_t vbslq_u16(uint16x8_t __a, uint16x8_t __b, uint16x8_t __c) { + return (uint16x8_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 49); } +__ai uint32x4_t vbslq_u32(uint32x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return (uint32x4_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 50); } +__ai uint64x2_t vbslq_u64(uint64x2_t __a, uint64x2_t __b, uint64x2_t __c) { + return (uint64x2_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 51); } +__ai float32x4_t vbslq_f32(uint32x4_t __a, float32x4_t __b, float32x4_t __c) { + return (float32x4_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 40); } +__ai poly8x16_t vbslq_p8(uint8x16_t __a, poly8x16_t __b, poly8x16_t __c) { + return (poly8x16_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 36); } +__ai poly16x8_t vbslq_p16(uint16x8_t __a, poly16x8_t __b, poly16x8_t __c) { + return (poly16x8_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 37); } + +__ai uint32x2_t vcage_f32(float32x2_t __a, float32x2_t __b) { + return (uint32x2_t)__builtin_neon_vcage_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint32x4_t vcageq_f32(float32x4_t __a, float32x4_t __b) { + return (uint32x4_t)__builtin_neon_vcageq_v((int8x16_t)__a, (int8x16_t)__b, 50); } + +__ai uint32x2_t vcagt_f32(float32x2_t __a, float32x2_t __b) { + return (uint32x2_t)__builtin_neon_vcagt_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint32x4_t vcagtq_f32(float32x4_t __a, float32x4_t __b) { + return (uint32x4_t)__builtin_neon_vcagtq_v((int8x16_t)__a, (int8x16_t)__b, 50); } + +__ai uint32x2_t vcale_f32(float32x2_t __a, float32x2_t __b) { + return (uint32x2_t)__builtin_neon_vcale_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint32x4_t vcaleq_f32(float32x4_t __a, float32x4_t __b) { + return (uint32x4_t)__builtin_neon_vcaleq_v((int8x16_t)__a, (int8x16_t)__b, 50); } + +__ai uint32x2_t vcalt_f32(float32x2_t __a, float32x2_t __b) { + return (uint32x2_t)__builtin_neon_vcalt_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint32x4_t vcaltq_f32(float32x4_t __a, float32x4_t __b) { + return (uint32x4_t)__builtin_neon_vcaltq_v((int8x16_t)__a, (int8x16_t)__b, 50); } + +__ai uint8x8_t vceq_s8(int8x8_t __a, int8x8_t __b) { + return (uint8x8_t)(__a == __b); } +__ai uint16x4_t vceq_s16(int16x4_t __a, int16x4_t __b) { + return (uint16x4_t)(__a == __b); } +__ai uint32x2_t vceq_s32(int32x2_t __a, int32x2_t __b) { + return (uint32x2_t)(__a == __b); } +__ai uint32x2_t vceq_f32(float32x2_t __a, float32x2_t __b) { + return (uint32x2_t)(__a == __b); } +__ai uint8x8_t vceq_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)(__a == __b); } +__ai uint16x4_t vceq_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)(__a == __b); } +__ai uint32x2_t vceq_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)(__a == __b); } +__ai uint8x8_t vceq_p8(poly8x8_t __a, poly8x8_t __b) { + return (uint8x8_t)(__a == __b); } +__ai uint8x16_t vceqq_s8(int8x16_t __a, int8x16_t __b) { + return (uint8x16_t)(__a == __b); } +__ai uint16x8_t vceqq_s16(int16x8_t __a, int16x8_t __b) { + return (uint16x8_t)(__a == __b); } +__ai uint32x4_t vceqq_s32(int32x4_t __a, int32x4_t __b) { + return (uint32x4_t)(__a == __b); } +__ai uint32x4_t vceqq_f32(float32x4_t __a, float32x4_t __b) { + return (uint32x4_t)(__a == __b); } +__ai uint8x16_t vceqq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)(__a == __b); } +__ai uint16x8_t vceqq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)(__a == __b); } +__ai uint32x4_t vceqq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)(__a == __b); } +__ai uint8x16_t vceqq_p8(poly8x16_t __a, poly8x16_t __b) { + return (uint8x16_t)(__a == __b); } + +__ai uint8x8_t vcge_s8(int8x8_t __a, int8x8_t __b) { + return (uint8x8_t)(__a >= __b); } +__ai uint16x4_t vcge_s16(int16x4_t __a, int16x4_t __b) { + return (uint16x4_t)(__a >= __b); } +__ai uint32x2_t vcge_s32(int32x2_t __a, int32x2_t __b) { + return (uint32x2_t)(__a >= __b); } +__ai uint32x2_t vcge_f32(float32x2_t __a, float32x2_t __b) { + return (uint32x2_t)(__a >= __b); } +__ai uint8x8_t vcge_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)(__a >= __b); } +__ai uint16x4_t vcge_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)(__a >= __b); } +__ai uint32x2_t vcge_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)(__a >= __b); } +__ai uint8x16_t vcgeq_s8(int8x16_t __a, int8x16_t __b) { + return (uint8x16_t)(__a >= __b); } +__ai uint16x8_t vcgeq_s16(int16x8_t __a, int16x8_t __b) { + return (uint16x8_t)(__a >= __b); } +__ai uint32x4_t vcgeq_s32(int32x4_t __a, int32x4_t __b) { + return (uint32x4_t)(__a >= __b); } +__ai uint32x4_t vcgeq_f32(float32x4_t __a, float32x4_t __b) { + return (uint32x4_t)(__a >= __b); } +__ai uint8x16_t vcgeq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)(__a >= __b); } +__ai uint16x8_t vcgeq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)(__a >= __b); } +__ai uint32x4_t vcgeq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)(__a >= __b); } + +__ai uint8x8_t vcgt_s8(int8x8_t __a, int8x8_t __b) { + return (uint8x8_t)(__a > __b); } +__ai uint16x4_t vcgt_s16(int16x4_t __a, int16x4_t __b) { + return (uint16x4_t)(__a > __b); } +__ai uint32x2_t vcgt_s32(int32x2_t __a, int32x2_t __b) { + return (uint32x2_t)(__a > __b); } +__ai uint32x2_t vcgt_f32(float32x2_t __a, float32x2_t __b) { + return (uint32x2_t)(__a > __b); } +__ai uint8x8_t vcgt_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)(__a > __b); } +__ai uint16x4_t vcgt_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)(__a > __b); } +__ai uint32x2_t vcgt_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)(__a > __b); } +__ai uint8x16_t vcgtq_s8(int8x16_t __a, int8x16_t __b) { + return (uint8x16_t)(__a > __b); } +__ai uint16x8_t vcgtq_s16(int16x8_t __a, int16x8_t __b) { + return (uint16x8_t)(__a > __b); } +__ai uint32x4_t vcgtq_s32(int32x4_t __a, int32x4_t __b) { + return (uint32x4_t)(__a > __b); } +__ai uint32x4_t vcgtq_f32(float32x4_t __a, float32x4_t __b) { + return (uint32x4_t)(__a > __b); } +__ai uint8x16_t vcgtq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)(__a > __b); } +__ai uint16x8_t vcgtq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)(__a > __b); } +__ai uint32x4_t vcgtq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)(__a > __b); } + +__ai uint8x8_t vcle_s8(int8x8_t __a, int8x8_t __b) { + return (uint8x8_t)(__a <= __b); } +__ai uint16x4_t vcle_s16(int16x4_t __a, int16x4_t __b) { + return (uint16x4_t)(__a <= __b); } +__ai uint32x2_t vcle_s32(int32x2_t __a, int32x2_t __b) { + return (uint32x2_t)(__a <= __b); } +__ai uint32x2_t vcle_f32(float32x2_t __a, float32x2_t __b) { + return (uint32x2_t)(__a <= __b); } +__ai uint8x8_t vcle_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)(__a <= __b); } +__ai uint16x4_t vcle_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)(__a <= __b); } +__ai uint32x2_t vcle_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)(__a <= __b); } +__ai uint8x16_t vcleq_s8(int8x16_t __a, int8x16_t __b) { + return (uint8x16_t)(__a <= __b); } +__ai uint16x8_t vcleq_s16(int16x8_t __a, int16x8_t __b) { + return (uint16x8_t)(__a <= __b); } +__ai uint32x4_t vcleq_s32(int32x4_t __a, int32x4_t __b) { + return (uint32x4_t)(__a <= __b); } +__ai uint32x4_t vcleq_f32(float32x4_t __a, float32x4_t __b) { + return (uint32x4_t)(__a <= __b); } +__ai uint8x16_t vcleq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)(__a <= __b); } +__ai uint16x8_t vcleq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)(__a <= __b); } +__ai uint32x4_t vcleq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)(__a <= __b); } + +__ai int8x8_t vcls_s8(int8x8_t __a) { + return (int8x8_t)__builtin_neon_vcls_v(__a, 0); } +__ai int16x4_t vcls_s16(int16x4_t __a) { + return (int16x4_t)__builtin_neon_vcls_v((int8x8_t)__a, 1); } +__ai int32x2_t vcls_s32(int32x2_t __a) { + return (int32x2_t)__builtin_neon_vcls_v((int8x8_t)__a, 2); } +__ai int8x16_t vclsq_s8(int8x16_t __a) { + return (int8x16_t)__builtin_neon_vclsq_v(__a, 32); } +__ai int16x8_t vclsq_s16(int16x8_t __a) { + return (int16x8_t)__builtin_neon_vclsq_v((int8x16_t)__a, 33); } +__ai int32x4_t vclsq_s32(int32x4_t __a) { + return (int32x4_t)__builtin_neon_vclsq_v((int8x16_t)__a, 34); } + +__ai uint8x8_t vclt_s8(int8x8_t __a, int8x8_t __b) { + return (uint8x8_t)(__a < __b); } +__ai uint16x4_t vclt_s16(int16x4_t __a, int16x4_t __b) { + return (uint16x4_t)(__a < __b); } +__ai uint32x2_t vclt_s32(int32x2_t __a, int32x2_t __b) { + return (uint32x2_t)(__a < __b); } +__ai uint32x2_t vclt_f32(float32x2_t __a, float32x2_t __b) { + return (uint32x2_t)(__a < __b); } +__ai uint8x8_t vclt_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)(__a < __b); } +__ai uint16x4_t vclt_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)(__a < __b); } +__ai uint32x2_t vclt_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)(__a < __b); } +__ai uint8x16_t vcltq_s8(int8x16_t __a, int8x16_t __b) { + return (uint8x16_t)(__a < __b); } +__ai uint16x8_t vcltq_s16(int16x8_t __a, int16x8_t __b) { + return (uint16x8_t)(__a < __b); } +__ai uint32x4_t vcltq_s32(int32x4_t __a, int32x4_t __b) { + return (uint32x4_t)(__a < __b); } +__ai uint32x4_t vcltq_f32(float32x4_t __a, float32x4_t __b) { + return (uint32x4_t)(__a < __b); } +__ai uint8x16_t vcltq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)(__a < __b); } +__ai uint16x8_t vcltq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)(__a < __b); } +__ai uint32x4_t vcltq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)(__a < __b); } + +__ai int8x8_t vclz_s8(int8x8_t __a) { + return (int8x8_t)__builtin_neon_vclz_v(__a, 0); } +__ai int16x4_t vclz_s16(int16x4_t __a) { + return (int16x4_t)__builtin_neon_vclz_v((int8x8_t)__a, 1); } +__ai int32x2_t vclz_s32(int32x2_t __a) { + return (int32x2_t)__builtin_neon_vclz_v((int8x8_t)__a, 2); } +__ai uint8x8_t vclz_u8(uint8x8_t __a) { + return (uint8x8_t)__builtin_neon_vclz_v((int8x8_t)__a, 16); } +__ai uint16x4_t vclz_u16(uint16x4_t __a) { + return (uint16x4_t)__builtin_neon_vclz_v((int8x8_t)__a, 17); } +__ai uint32x2_t vclz_u32(uint32x2_t __a) { + return (uint32x2_t)__builtin_neon_vclz_v((int8x8_t)__a, 18); } +__ai int8x16_t vclzq_s8(int8x16_t __a) { + return (int8x16_t)__builtin_neon_vclzq_v(__a, 32); } +__ai int16x8_t vclzq_s16(int16x8_t __a) { + return (int16x8_t)__builtin_neon_vclzq_v((int8x16_t)__a, 33); } +__ai int32x4_t vclzq_s32(int32x4_t __a) { + return (int32x4_t)__builtin_neon_vclzq_v((int8x16_t)__a, 34); } +__ai uint8x16_t vclzq_u8(uint8x16_t __a) { + return (uint8x16_t)__builtin_neon_vclzq_v((int8x16_t)__a, 48); } +__ai uint16x8_t vclzq_u16(uint16x8_t __a) { + return (uint16x8_t)__builtin_neon_vclzq_v((int8x16_t)__a, 49); } +__ai uint32x4_t vclzq_u32(uint32x4_t __a) { + return (uint32x4_t)__builtin_neon_vclzq_v((int8x16_t)__a, 50); } + +__ai uint8x8_t vcnt_u8(uint8x8_t __a) { + return (uint8x8_t)__builtin_neon_vcnt_v((int8x8_t)__a, 16); } +__ai int8x8_t vcnt_s8(int8x8_t __a) { + return (int8x8_t)__builtin_neon_vcnt_v(__a, 0); } +__ai poly8x8_t vcnt_p8(poly8x8_t __a) { + return (poly8x8_t)__builtin_neon_vcnt_v((int8x8_t)__a, 4); } +__ai uint8x16_t vcntq_u8(uint8x16_t __a) { + return (uint8x16_t)__builtin_neon_vcntq_v((int8x16_t)__a, 48); } +__ai int8x16_t vcntq_s8(int8x16_t __a) { + return (int8x16_t)__builtin_neon_vcntq_v(__a, 32); } +__ai poly8x16_t vcntq_p8(poly8x16_t __a) { + return (poly8x16_t)__builtin_neon_vcntq_v((int8x16_t)__a, 36); } + +__ai int8x16_t vcombine_s8(int8x8_t __a, int8x8_t __b) { + return (int8x16_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai int16x8_t vcombine_s16(int16x4_t __a, int16x4_t __b) { + return (int16x8_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai int32x4_t vcombine_s32(int32x2_t __a, int32x2_t __b) { + return (int32x4_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai int64x2_t vcombine_s64(int64x1_t __a, int64x1_t __b) { + return (int64x2_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai float16x8_t vcombine_f16(float16x4_t __a, float16x4_t __b) { + return (float16x8_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai float32x4_t vcombine_f32(float32x2_t __a, float32x2_t __b) { + return (float32x4_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai uint8x16_t vcombine_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x16_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai uint16x8_t vcombine_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x8_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai uint32x4_t vcombine_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x4_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai uint64x2_t vcombine_u64(uint64x1_t __a, uint64x1_t __b) { + return (uint64x2_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai poly8x16_t vcombine_p8(poly8x8_t __a, poly8x8_t __b) { + return (poly8x16_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai poly16x8_t vcombine_p16(poly16x4_t __a, poly16x4_t __b) { + return (poly16x8_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } + +__ai int8x8_t vcreate_s8(uint64_t __a) { + return (int8x8_t)__a; } +__ai int16x4_t vcreate_s16(uint64_t __a) { + return (int16x4_t)__a; } +__ai int32x2_t vcreate_s32(uint64_t __a) { + return (int32x2_t)__a; } +__ai float16x4_t vcreate_f16(uint64_t __a) { + return (float16x4_t)__a; } +__ai float32x2_t vcreate_f32(uint64_t __a) { + return (float32x2_t)__a; } +__ai uint8x8_t vcreate_u8(uint64_t __a) { + return (uint8x8_t)__a; } +__ai uint16x4_t vcreate_u16(uint64_t __a) { + return (uint16x4_t)__a; } +__ai uint32x2_t vcreate_u32(uint64_t __a) { + return (uint32x2_t)__a; } +__ai uint64x1_t vcreate_u64(uint64_t __a) { + return (uint64x1_t)__a; } +__ai poly8x8_t vcreate_p8(uint64_t __a) { + return (poly8x8_t)__a; } +__ai poly16x4_t vcreate_p16(uint64_t __a) { + return (poly16x4_t)__a; } +__ai int64x1_t vcreate_s64(uint64_t __a) { + return (int64x1_t)__a; } + +__ai float16x4_t vcvt_f16_f32(float32x4_t __a) { + return (float16x4_t)__builtin_neon_vcvt_f16_v((int8x16_t)__a, 7); } + +__ai float32x2_t vcvt_f32_s32(int32x2_t __a) { + return (float32x2_t)__builtin_neon_vcvt_f32_v((int8x8_t)__a, 2); } +__ai float32x2_t vcvt_f32_u32(uint32x2_t __a) { + return (float32x2_t)__builtin_neon_vcvt_f32_v((int8x8_t)__a, 18); } +__ai float32x4_t vcvtq_f32_s32(int32x4_t __a) { + return (float32x4_t)__builtin_neon_vcvtq_f32_v((int8x16_t)__a, 34); } +__ai float32x4_t vcvtq_f32_u32(uint32x4_t __a) { + return (float32x4_t)__builtin_neon_vcvtq_f32_v((int8x16_t)__a, 50); } + +__ai float32x4_t vcvt_f32_f16(float16x4_t __a) { + return (float32x4_t)__builtin_neon_vcvt_f32_f16((int8x8_t)__a, 7); } + +#define vcvt_n_f32_s32(a, __b) __extension__ ({ \ + int32x2_t __a = (a); \ + (float32x2_t)__builtin_neon_vcvt_n_f32_v((int8x8_t)__a, __b, 2); }) +#define vcvt_n_f32_u32(a, __b) __extension__ ({ \ + uint32x2_t __a = (a); \ + (float32x2_t)__builtin_neon_vcvt_n_f32_v((int8x8_t)__a, __b, 18); }) +#define vcvtq_n_f32_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (float32x4_t)__builtin_neon_vcvtq_n_f32_v((int8x16_t)__a, __b, 34); }) +#define vcvtq_n_f32_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + (float32x4_t)__builtin_neon_vcvtq_n_f32_v((int8x16_t)__a, __b, 50); }) + +#define vcvt_n_s32_f32(a, __b) __extension__ ({ \ + float32x2_t __a = (a); \ + (int32x2_t)__builtin_neon_vcvt_n_s32_v((int8x8_t)__a, __b, 2); }) +#define vcvtq_n_s32_f32(a, __b) __extension__ ({ \ + float32x4_t __a = (a); \ + (int32x4_t)__builtin_neon_vcvtq_n_s32_v((int8x16_t)__a, __b, 34); }) + +#define vcvt_n_u32_f32(a, __b) __extension__ ({ \ + float32x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vcvt_n_u32_v((int8x8_t)__a, __b, 18); }) +#define vcvtq_n_u32_f32(a, __b) __extension__ ({ \ + float32x4_t __a = (a); \ + (uint32x4_t)__builtin_neon_vcvtq_n_u32_v((int8x16_t)__a, __b, 50); }) + +__ai int32x2_t vcvt_s32_f32(float32x2_t __a) { + return (int32x2_t)__builtin_neon_vcvt_s32_v((int8x8_t)__a, 2); } +__ai int32x4_t vcvtq_s32_f32(float32x4_t __a) { + return (int32x4_t)__builtin_neon_vcvtq_s32_v((int8x16_t)__a, 34); } + +__ai uint32x2_t vcvt_u32_f32(float32x2_t __a) { + return (uint32x2_t)__builtin_neon_vcvt_u32_v((int8x8_t)__a, 18); } +__ai uint32x4_t vcvtq_u32_f32(float32x4_t __a) { + return (uint32x4_t)__builtin_neon_vcvtq_u32_v((int8x16_t)__a, 50); } + +#define vdup_lane_u8(a, __b) __extension__ ({ \ + uint8x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdup_lane_u16(a, __b) __extension__ ({ \ + uint16x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdup_lane_u32(a, __b) __extension__ ({ \ + uint32x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) +#define vdup_lane_s8(a, __b) __extension__ ({ \ + int8x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdup_lane_s16(a, __b) __extension__ ({ \ + int16x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdup_lane_s32(a, __b) __extension__ ({ \ + int32x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) +#define vdup_lane_p8(a, __b) __extension__ ({ \ + poly8x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdup_lane_p16(a, __b) __extension__ ({ \ + poly16x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdup_lane_f32(a, __b) __extension__ ({ \ + float32x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) +#define vdupq_lane_u8(a, __b) __extension__ ({ \ + uint8x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_lane_u16(a, __b) __extension__ ({ \ + uint16x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_lane_u32(a, __b) __extension__ ({ \ + uint32x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdupq_lane_s8(a, __b) __extension__ ({ \ + int8x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_lane_s16(a, __b) __extension__ ({ \ + int16x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_lane_s32(a, __b) __extension__ ({ \ + int32x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdupq_lane_p8(a, __b) __extension__ ({ \ + poly8x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_lane_p16(a, __b) __extension__ ({ \ + poly16x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_lane_f32(a, __b) __extension__ ({ \ + float32x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdup_lane_s64(a, __b) __extension__ ({ \ + int64x1_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b); }) +#define vdup_lane_u64(a, __b) __extension__ ({ \ + uint64x1_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b); }) +#define vdupq_lane_s64(a, __b) __extension__ ({ \ + int64x1_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) +#define vdupq_lane_u64(a, __b) __extension__ ({ \ + uint64x1_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) + +__ai uint8x8_t vdup_n_u8(uint8_t __a) { + return (uint8x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai uint16x4_t vdup_n_u16(uint16_t __a) { + return (uint16x4_t){ __a, __a, __a, __a }; } +__ai uint32x2_t vdup_n_u32(uint32_t __a) { + return (uint32x2_t){ __a, __a }; } +__ai int8x8_t vdup_n_s8(int8_t __a) { + return (int8x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai int16x4_t vdup_n_s16(int16_t __a) { + return (int16x4_t){ __a, __a, __a, __a }; } +__ai int32x2_t vdup_n_s32(int32_t __a) { + return (int32x2_t){ __a, __a }; } +__ai poly8x8_t vdup_n_p8(poly8_t __a) { + return (poly8x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai poly16x4_t vdup_n_p16(poly16_t __a) { + return (poly16x4_t){ __a, __a, __a, __a }; } +__ai float32x2_t vdup_n_f32(float32_t __a) { + return (float32x2_t){ __a, __a }; } +__ai uint8x16_t vdupq_n_u8(uint8_t __a) { + return (uint8x16_t){ __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai uint16x8_t vdupq_n_u16(uint16_t __a) { + return (uint16x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai uint32x4_t vdupq_n_u32(uint32_t __a) { + return (uint32x4_t){ __a, __a, __a, __a }; } +__ai int8x16_t vdupq_n_s8(int8_t __a) { + return (int8x16_t){ __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai int16x8_t vdupq_n_s16(int16_t __a) { + return (int16x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai int32x4_t vdupq_n_s32(int32_t __a) { + return (int32x4_t){ __a, __a, __a, __a }; } +__ai poly8x16_t vdupq_n_p8(poly8_t __a) { + return (poly8x16_t){ __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai poly16x8_t vdupq_n_p16(poly16_t __a) { + return (poly16x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai float32x4_t vdupq_n_f32(float32_t __a) { + return (float32x4_t){ __a, __a, __a, __a }; } +__ai int64x1_t vdup_n_s64(int64_t __a) { + return (int64x1_t){ __a }; } +__ai uint64x1_t vdup_n_u64(uint64_t __a) { + return (uint64x1_t){ __a }; } +__ai int64x2_t vdupq_n_s64(int64_t __a) { + return (int64x2_t){ __a, __a }; } +__ai uint64x2_t vdupq_n_u64(uint64_t __a) { + return (uint64x2_t){ __a, __a }; } + +__ai int8x8_t veor_s8(int8x8_t __a, int8x8_t __b) { + return __a ^ __b; } +__ai int16x4_t veor_s16(int16x4_t __a, int16x4_t __b) { + return __a ^ __b; } +__ai int32x2_t veor_s32(int32x2_t __a, int32x2_t __b) { + return __a ^ __b; } +__ai int64x1_t veor_s64(int64x1_t __a, int64x1_t __b) { + return __a ^ __b; } +__ai uint8x8_t veor_u8(uint8x8_t __a, uint8x8_t __b) { + return __a ^ __b; } +__ai uint16x4_t veor_u16(uint16x4_t __a, uint16x4_t __b) { + return __a ^ __b; } +__ai uint32x2_t veor_u32(uint32x2_t __a, uint32x2_t __b) { + return __a ^ __b; } +__ai uint64x1_t veor_u64(uint64x1_t __a, uint64x1_t __b) { + return __a ^ __b; } +__ai int8x16_t veorq_s8(int8x16_t __a, int8x16_t __b) { + return __a ^ __b; } +__ai int16x8_t veorq_s16(int16x8_t __a, int16x8_t __b) { + return __a ^ __b; } +__ai int32x4_t veorq_s32(int32x4_t __a, int32x4_t __b) { + return __a ^ __b; } +__ai int64x2_t veorq_s64(int64x2_t __a, int64x2_t __b) { + return __a ^ __b; } +__ai uint8x16_t veorq_u8(uint8x16_t __a, uint8x16_t __b) { + return __a ^ __b; } +__ai uint16x8_t veorq_u16(uint16x8_t __a, uint16x8_t __b) { + return __a ^ __b; } +__ai uint32x4_t veorq_u32(uint32x4_t __a, uint32x4_t __b) { + return __a ^ __b; } +__ai uint64x2_t veorq_u64(uint64x2_t __a, uint64x2_t __b) { + return __a ^ __b; } + +#define vext_s8(a, b, __c) __extension__ ({ \ + int8x8_t __a = (a); int8x8_t __b = (b); \ + (int8x8_t)__builtin_neon_vext_v(__a, __b, __c, 0); }) +#define vext_u8(a, b, __c) __extension__ ({ \ + uint8x8_t __a = (a); uint8x8_t __b = (b); \ + (uint8x8_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 16); }) +#define vext_p8(a, b, __c) __extension__ ({ \ + poly8x8_t __a = (a); poly8x8_t __b = (b); \ + (poly8x8_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 4); }) +#define vext_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); \ + (int16x4_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 1); }) +#define vext_u16(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint16x4_t __b = (b); \ + (uint16x4_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 17); }) +#define vext_p16(a, b, __c) __extension__ ({ \ + poly16x4_t __a = (a); poly16x4_t __b = (b); \ + (poly16x4_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 5); }) +#define vext_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); \ + (int32x2_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 2); }) +#define vext_u32(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint32x2_t __b = (b); \ + (uint32x2_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 18); }) +#define vext_s64(a, b, __c) __extension__ ({ \ + int64x1_t __a = (a); int64x1_t __b = (b); \ + (int64x1_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 3); }) +#define vext_u64(a, b, __c) __extension__ ({ \ + uint64x1_t __a = (a); uint64x1_t __b = (b); \ + (uint64x1_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 19); }) +#define vext_f32(a, b, __c) __extension__ ({ \ + float32x2_t __a = (a); float32x2_t __b = (b); \ + (float32x2_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 8); }) +#define vextq_s8(a, b, __c) __extension__ ({ \ + int8x16_t __a = (a); int8x16_t __b = (b); \ + (int8x16_t)__builtin_neon_vextq_v(__a, __b, __c, 32); }) +#define vextq_u8(a, b, __c) __extension__ ({ \ + uint8x16_t __a = (a); uint8x16_t __b = (b); \ + (uint8x16_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 48); }) +#define vextq_p8(a, b, __c) __extension__ ({ \ + poly8x16_t __a = (a); poly8x16_t __b = (b); \ + (poly8x16_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 36); }) +#define vextq_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); \ + (int16x8_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 33); }) +#define vextq_u16(a, b, __c) __extension__ ({ \ + uint16x8_t __a = (a); uint16x8_t __b = (b); \ + (uint16x8_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 49); }) +#define vextq_p16(a, b, __c) __extension__ ({ \ + poly16x8_t __a = (a); poly16x8_t __b = (b); \ + (poly16x8_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 37); }) +#define vextq_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); \ + (int32x4_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 34); }) +#define vextq_u32(a, b, __c) __extension__ ({ \ + uint32x4_t __a = (a); uint32x4_t __b = (b); \ + (uint32x4_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 50); }) +#define vextq_s64(a, b, __c) __extension__ ({ \ + int64x2_t __a = (a); int64x2_t __b = (b); \ + (int64x2_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 35); }) +#define vextq_u64(a, b, __c) __extension__ ({ \ + uint64x2_t __a = (a); uint64x2_t __b = (b); \ + (uint64x2_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 51); }) +#define vextq_f32(a, b, __c) __extension__ ({ \ + float32x4_t __a = (a); float32x4_t __b = (b); \ + (float32x4_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 40); }) + +__ai float32x2_t vfma_f32(float32x2_t __a, float32x2_t __b, float32x2_t __c) { + return (float32x2_t)__builtin_neon_vfma_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 8); } +__ai float32x4_t vfmaq_f32(float32x4_t __a, float32x4_t __b, float32x4_t __c) { + return (float32x4_t)__builtin_neon_vfmaq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 40); } + +__ai int8x8_t vget_high_s8(int8x16_t __a) { + return __builtin_shufflevector(__a, __a, 8, 9, 10, 11, 12, 13, 14, 15); } +__ai int16x4_t vget_high_s16(int16x8_t __a) { + return __builtin_shufflevector(__a, __a, 4, 5, 6, 7); } +__ai int32x2_t vget_high_s32(int32x4_t __a) { + return __builtin_shufflevector(__a, __a, 2, 3); } +__ai int64x1_t vget_high_s64(int64x2_t __a) { + return __builtin_shufflevector(__a, __a, 1); } +__ai float16x4_t vget_high_f16(float16x8_t __a) { + return __builtin_shufflevector(__a, __a, 4, 5, 6, 7); } +__ai float32x2_t vget_high_f32(float32x4_t __a) { + return __builtin_shufflevector(__a, __a, 2, 3); } +__ai uint8x8_t vget_high_u8(uint8x16_t __a) { + return __builtin_shufflevector(__a, __a, 8, 9, 10, 11, 12, 13, 14, 15); } +__ai uint16x4_t vget_high_u16(uint16x8_t __a) { + return __builtin_shufflevector(__a, __a, 4, 5, 6, 7); } +__ai uint32x2_t vget_high_u32(uint32x4_t __a) { + return __builtin_shufflevector(__a, __a, 2, 3); } +__ai uint64x1_t vget_high_u64(uint64x2_t __a) { + return __builtin_shufflevector(__a, __a, 1); } +__ai poly8x8_t vget_high_p8(poly8x16_t __a) { + return __builtin_shufflevector(__a, __a, 8, 9, 10, 11, 12, 13, 14, 15); } +__ai poly16x4_t vget_high_p16(poly16x8_t __a) { + return __builtin_shufflevector(__a, __a, 4, 5, 6, 7); } + +#define vget_lane_u8(a, __b) __extension__ ({ \ + uint8x8_t __a = (a); \ + (uint8_t)__builtin_neon_vget_lane_i8((int8x8_t)__a, __b); }) +#define vget_lane_u16(a, __b) __extension__ ({ \ + uint16x4_t __a = (a); \ + (uint16_t)__builtin_neon_vget_lane_i16((int16x4_t)__a, __b); }) +#define vget_lane_u32(a, __b) __extension__ ({ \ + uint32x2_t __a = (a); \ + (uint32_t)__builtin_neon_vget_lane_i32((int32x2_t)__a, __b); }) +#define vget_lane_s8(a, __b) __extension__ ({ \ + int8x8_t __a = (a); \ + (int8_t)__builtin_neon_vget_lane_i8(__a, __b); }) +#define vget_lane_s16(a, __b) __extension__ ({ \ + int16x4_t __a = (a); \ + (int16_t)__builtin_neon_vget_lane_i16(__a, __b); }) +#define vget_lane_s32(a, __b) __extension__ ({ \ + int32x2_t __a = (a); \ + (int32_t)__builtin_neon_vget_lane_i32(__a, __b); }) +#define vget_lane_p8(a, __b) __extension__ ({ \ + poly8x8_t __a = (a); \ + (poly8_t)__builtin_neon_vget_lane_i8((int8x8_t)__a, __b); }) +#define vget_lane_p16(a, __b) __extension__ ({ \ + poly16x4_t __a = (a); \ + (poly16_t)__builtin_neon_vget_lane_i16((int16x4_t)__a, __b); }) +#define vget_lane_f32(a, __b) __extension__ ({ \ + float32x2_t __a = (a); \ + (float32_t)__builtin_neon_vget_lane_f32(__a, __b); }) +#define vgetq_lane_u8(a, __b) __extension__ ({ \ + uint8x16_t __a = (a); \ + (uint8_t)__builtin_neon_vgetq_lane_i8((int8x16_t)__a, __b); }) +#define vgetq_lane_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + (uint16_t)__builtin_neon_vgetq_lane_i16((int16x8_t)__a, __b); }) +#define vgetq_lane_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + (uint32_t)__builtin_neon_vgetq_lane_i32((int32x4_t)__a, __b); }) +#define vgetq_lane_s8(a, __b) __extension__ ({ \ + int8x16_t __a = (a); \ + (int8_t)__builtin_neon_vgetq_lane_i8(__a, __b); }) +#define vgetq_lane_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (int16_t)__builtin_neon_vgetq_lane_i16(__a, __b); }) +#define vgetq_lane_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (int32_t)__builtin_neon_vgetq_lane_i32(__a, __b); }) +#define vgetq_lane_p8(a, __b) __extension__ ({ \ + poly8x16_t __a = (a); \ + (poly8_t)__builtin_neon_vgetq_lane_i8((int8x16_t)__a, __b); }) +#define vgetq_lane_p16(a, __b) __extension__ ({ \ + poly16x8_t __a = (a); \ + (poly16_t)__builtin_neon_vgetq_lane_i16((int16x8_t)__a, __b); }) +#define vgetq_lane_f32(a, __b) __extension__ ({ \ + float32x4_t __a = (a); \ + (float32_t)__builtin_neon_vgetq_lane_f32(__a, __b); }) +#define vget_lane_s64(a, __b) __extension__ ({ \ + int64x1_t __a = (a); \ + (int64_t)__builtin_neon_vget_lane_i64(__a, __b); }) +#define vget_lane_u64(a, __b) __extension__ ({ \ + uint64x1_t __a = (a); \ + (uint64_t)__builtin_neon_vget_lane_i64((int64x1_t)__a, __b); }) +#define vgetq_lane_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (int64_t)__builtin_neon_vgetq_lane_i64(__a, __b); }) +#define vgetq_lane_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + (uint64_t)__builtin_neon_vgetq_lane_i64((int64x2_t)__a, __b); }) + +__ai int8x8_t vget_low_s8(int8x16_t __a) { + return __builtin_shufflevector(__a, __a, 0, 1, 2, 3, 4, 5, 6, 7); } +__ai int16x4_t vget_low_s16(int16x8_t __a) { + return __builtin_shufflevector(__a, __a, 0, 1, 2, 3); } +__ai int32x2_t vget_low_s32(int32x4_t __a) { + return __builtin_shufflevector(__a, __a, 0, 1); } +__ai int64x1_t vget_low_s64(int64x2_t __a) { + return __builtin_shufflevector(__a, __a, 0); } +__ai float16x4_t vget_low_f16(float16x8_t __a) { + return __builtin_shufflevector(__a, __a, 0, 1, 2, 3); } +__ai float32x2_t vget_low_f32(float32x4_t __a) { + return __builtin_shufflevector(__a, __a, 0, 1); } +__ai uint8x8_t vget_low_u8(uint8x16_t __a) { + return __builtin_shufflevector(__a, __a, 0, 1, 2, 3, 4, 5, 6, 7); } +__ai uint16x4_t vget_low_u16(uint16x8_t __a) { + return __builtin_shufflevector(__a, __a, 0, 1, 2, 3); } +__ai uint32x2_t vget_low_u32(uint32x4_t __a) { + return __builtin_shufflevector(__a, __a, 0, 1); } +__ai uint64x1_t vget_low_u64(uint64x2_t __a) { + return __builtin_shufflevector(__a, __a, 0); } +__ai poly8x8_t vget_low_p8(poly8x16_t __a) { + return __builtin_shufflevector(__a, __a, 0, 1, 2, 3, 4, 5, 6, 7); } +__ai poly16x4_t vget_low_p16(poly16x8_t __a) { + return __builtin_shufflevector(__a, __a, 0, 1, 2, 3); } + +__ai int8x8_t vhadd_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vhadd_v(__a, __b, 0); } +__ai int16x4_t vhadd_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vhadd_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vhadd_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vhadd_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai uint8x8_t vhadd_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vhadd_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vhadd_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vhadd_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vhadd_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vhadd_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai int8x16_t vhaddq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vhaddq_v(__a, __b, 32); } +__ai int16x8_t vhaddq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vhaddq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vhaddq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vhaddq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai uint8x16_t vhaddq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vhaddq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vhaddq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vhaddq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vhaddq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vhaddq_v((int8x16_t)__a, (int8x16_t)__b, 50); } + +__ai int8x8_t vhsub_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vhsub_v(__a, __b, 0); } +__ai int16x4_t vhsub_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vhsub_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vhsub_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vhsub_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai uint8x8_t vhsub_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vhsub_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vhsub_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vhsub_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vhsub_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vhsub_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai int8x16_t vhsubq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vhsubq_v(__a, __b, 32); } +__ai int16x8_t vhsubq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vhsubq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vhsubq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vhsubq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai uint8x16_t vhsubq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vhsubq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vhsubq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vhsubq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vhsubq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vhsubq_v((int8x16_t)__a, (int8x16_t)__b, 50); } + +#define vld1q_u8(__a) __extension__ ({ \ + (uint8x16_t)__builtin_neon_vld1q_v(__a, 48); }) +#define vld1q_u16(__a) __extension__ ({ \ + (uint16x8_t)__builtin_neon_vld1q_v(__a, 49); }) +#define vld1q_u32(__a) __extension__ ({ \ + (uint32x4_t)__builtin_neon_vld1q_v(__a, 50); }) +#define vld1q_u64(__a) __extension__ ({ \ + (uint64x2_t)__builtin_neon_vld1q_v(__a, 51); }) +#define vld1q_s8(__a) __extension__ ({ \ + (int8x16_t)__builtin_neon_vld1q_v(__a, 32); }) +#define vld1q_s16(__a) __extension__ ({ \ + (int16x8_t)__builtin_neon_vld1q_v(__a, 33); }) +#define vld1q_s32(__a) __extension__ ({ \ + (int32x4_t)__builtin_neon_vld1q_v(__a, 34); }) +#define vld1q_s64(__a) __extension__ ({ \ + (int64x2_t)__builtin_neon_vld1q_v(__a, 35); }) +#define vld1q_f16(__a) __extension__ ({ \ + (float16x8_t)__builtin_neon_vld1q_v(__a, 39); }) +#define vld1q_f32(__a) __extension__ ({ \ + (float32x4_t)__builtin_neon_vld1q_v(__a, 40); }) +#define vld1q_p8(__a) __extension__ ({ \ + (poly8x16_t)__builtin_neon_vld1q_v(__a, 36); }) +#define vld1q_p16(__a) __extension__ ({ \ + (poly16x8_t)__builtin_neon_vld1q_v(__a, 37); }) +#define vld1_u8(__a) __extension__ ({ \ + (uint8x8_t)__builtin_neon_vld1_v(__a, 16); }) +#define vld1_u16(__a) __extension__ ({ \ + (uint16x4_t)__builtin_neon_vld1_v(__a, 17); }) +#define vld1_u32(__a) __extension__ ({ \ + (uint32x2_t)__builtin_neon_vld1_v(__a, 18); }) +#define vld1_u64(__a) __extension__ ({ \ + (uint64x1_t)__builtin_neon_vld1_v(__a, 19); }) +#define vld1_s8(__a) __extension__ ({ \ + (int8x8_t)__builtin_neon_vld1_v(__a, 0); }) +#define vld1_s16(__a) __extension__ ({ \ + (int16x4_t)__builtin_neon_vld1_v(__a, 1); }) +#define vld1_s32(__a) __extension__ ({ \ + (int32x2_t)__builtin_neon_vld1_v(__a, 2); }) +#define vld1_s64(__a) __extension__ ({ \ + (int64x1_t)__builtin_neon_vld1_v(__a, 3); }) +#define vld1_f16(__a) __extension__ ({ \ + (float16x4_t)__builtin_neon_vld1_v(__a, 7); }) +#define vld1_f32(__a) __extension__ ({ \ + (float32x2_t)__builtin_neon_vld1_v(__a, 8); }) +#define vld1_p8(__a) __extension__ ({ \ + (poly8x8_t)__builtin_neon_vld1_v(__a, 4); }) +#define vld1_p16(__a) __extension__ ({ \ + (poly16x4_t)__builtin_neon_vld1_v(__a, 5); }) + +#define vld1q_dup_u8(__a) __extension__ ({ \ + (uint8x16_t)__builtin_neon_vld1q_dup_v(__a, 48); }) +#define vld1q_dup_u16(__a) __extension__ ({ \ + (uint16x8_t)__builtin_neon_vld1q_dup_v(__a, 49); }) +#define vld1q_dup_u32(__a) __extension__ ({ \ + (uint32x4_t)__builtin_neon_vld1q_dup_v(__a, 50); }) +#define vld1q_dup_u64(__a) __extension__ ({ \ + (uint64x2_t)__builtin_neon_vld1q_dup_v(__a, 51); }) +#define vld1q_dup_s8(__a) __extension__ ({ \ + (int8x16_t)__builtin_neon_vld1q_dup_v(__a, 32); }) +#define vld1q_dup_s16(__a) __extension__ ({ \ + (int16x8_t)__builtin_neon_vld1q_dup_v(__a, 33); }) +#define vld1q_dup_s32(__a) __extension__ ({ \ + (int32x4_t)__builtin_neon_vld1q_dup_v(__a, 34); }) +#define vld1q_dup_s64(__a) __extension__ ({ \ + (int64x2_t)__builtin_neon_vld1q_dup_v(__a, 35); }) +#define vld1q_dup_f16(__a) __extension__ ({ \ + (float16x8_t)__builtin_neon_vld1q_dup_v(__a, 39); }) +#define vld1q_dup_f32(__a) __extension__ ({ \ + (float32x4_t)__builtin_neon_vld1q_dup_v(__a, 40); }) +#define vld1q_dup_p8(__a) __extension__ ({ \ + (poly8x16_t)__builtin_neon_vld1q_dup_v(__a, 36); }) +#define vld1q_dup_p16(__a) __extension__ ({ \ + (poly16x8_t)__builtin_neon_vld1q_dup_v(__a, 37); }) +#define vld1_dup_u8(__a) __extension__ ({ \ + (uint8x8_t)__builtin_neon_vld1_dup_v(__a, 16); }) +#define vld1_dup_u16(__a) __extension__ ({ \ + (uint16x4_t)__builtin_neon_vld1_dup_v(__a, 17); }) +#define vld1_dup_u32(__a) __extension__ ({ \ + (uint32x2_t)__builtin_neon_vld1_dup_v(__a, 18); }) +#define vld1_dup_u64(__a) __extension__ ({ \ + (uint64x1_t)__builtin_neon_vld1_dup_v(__a, 19); }) +#define vld1_dup_s8(__a) __extension__ ({ \ + (int8x8_t)__builtin_neon_vld1_dup_v(__a, 0); }) +#define vld1_dup_s16(__a) __extension__ ({ \ + (int16x4_t)__builtin_neon_vld1_dup_v(__a, 1); }) +#define vld1_dup_s32(__a) __extension__ ({ \ + (int32x2_t)__builtin_neon_vld1_dup_v(__a, 2); }) +#define vld1_dup_s64(__a) __extension__ ({ \ + (int64x1_t)__builtin_neon_vld1_dup_v(__a, 3); }) +#define vld1_dup_f16(__a) __extension__ ({ \ + (float16x4_t)__builtin_neon_vld1_dup_v(__a, 7); }) +#define vld1_dup_f32(__a) __extension__ ({ \ + (float32x2_t)__builtin_neon_vld1_dup_v(__a, 8); }) +#define vld1_dup_p8(__a) __extension__ ({ \ + (poly8x8_t)__builtin_neon_vld1_dup_v(__a, 4); }) +#define vld1_dup_p16(__a) __extension__ ({ \ + (poly16x4_t)__builtin_neon_vld1_dup_v(__a, 5); }) + +#define vld1q_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x16_t __b = (b); \ + (uint8x16_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 48); }) +#define vld1q_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x8_t __b = (b); \ + (uint16x8_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 49); }) +#define vld1q_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x4_t __b = (b); \ + (uint32x4_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 50); }) +#define vld1q_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x2_t __b = (b); \ + (uint64x2_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 51); }) +#define vld1q_lane_s8(__a, b, __c) __extension__ ({ \ + int8x16_t __b = (b); \ + (int8x16_t)__builtin_neon_vld1q_lane_v(__a, __b, __c, 32); }) +#define vld1q_lane_s16(__a, b, __c) __extension__ ({ \ + int16x8_t __b = (b); \ + (int16x8_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 33); }) +#define vld1q_lane_s32(__a, b, __c) __extension__ ({ \ + int32x4_t __b = (b); \ + (int32x4_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 34); }) +#define vld1q_lane_s64(__a, b, __c) __extension__ ({ \ + int64x2_t __b = (b); \ + (int64x2_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 35); }) +#define vld1q_lane_f16(__a, b, __c) __extension__ ({ \ + float16x8_t __b = (b); \ + (float16x8_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 39); }) +#define vld1q_lane_f32(__a, b, __c) __extension__ ({ \ + float32x4_t __b = (b); \ + (float32x4_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 40); }) +#define vld1q_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x16_t __b = (b); \ + (poly8x16_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 36); }) +#define vld1q_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x8_t __b = (b); \ + (poly16x8_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 37); }) +#define vld1_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x8_t __b = (b); \ + (uint8x8_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 16); }) +#define vld1_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x4_t __b = (b); \ + (uint16x4_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 17); }) +#define vld1_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x2_t __b = (b); \ + (uint32x2_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 18); }) +#define vld1_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x1_t __b = (b); \ + (uint64x1_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 19); }) +#define vld1_lane_s8(__a, b, __c) __extension__ ({ \ + int8x8_t __b = (b); \ + (int8x8_t)__builtin_neon_vld1_lane_v(__a, __b, __c, 0); }) +#define vld1_lane_s16(__a, b, __c) __extension__ ({ \ + int16x4_t __b = (b); \ + (int16x4_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 1); }) +#define vld1_lane_s32(__a, b, __c) __extension__ ({ \ + int32x2_t __b = (b); \ + (int32x2_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 2); }) +#define vld1_lane_s64(__a, b, __c) __extension__ ({ \ + int64x1_t __b = (b); \ + (int64x1_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 3); }) +#define vld1_lane_f16(__a, b, __c) __extension__ ({ \ + float16x4_t __b = (b); \ + (float16x4_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 7); }) +#define vld1_lane_f32(__a, b, __c) __extension__ ({ \ + float32x2_t __b = (b); \ + (float32x2_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 8); }) +#define vld1_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x8_t __b = (b); \ + (poly8x8_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 4); }) +#define vld1_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x4_t __b = (b); \ + (poly16x4_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 5); }) + +#define vld2q_u8(__a) __extension__ ({ \ + uint8x16x2_t r; __builtin_neon_vld2q_v(&r, __a, 48); r; }) +#define vld2q_u16(__a) __extension__ ({ \ + uint16x8x2_t r; __builtin_neon_vld2q_v(&r, __a, 49); r; }) +#define vld2q_u32(__a) __extension__ ({ \ + uint32x4x2_t r; __builtin_neon_vld2q_v(&r, __a, 50); r; }) +#define vld2q_s8(__a) __extension__ ({ \ + int8x16x2_t r; __builtin_neon_vld2q_v(&r, __a, 32); r; }) +#define vld2q_s16(__a) __extension__ ({ \ + int16x8x2_t r; __builtin_neon_vld2q_v(&r, __a, 33); r; }) +#define vld2q_s32(__a) __extension__ ({ \ + int32x4x2_t r; __builtin_neon_vld2q_v(&r, __a, 34); r; }) +#define vld2q_f16(__a) __extension__ ({ \ + float16x8x2_t r; __builtin_neon_vld2q_v(&r, __a, 39); r; }) +#define vld2q_f32(__a) __extension__ ({ \ + float32x4x2_t r; __builtin_neon_vld2q_v(&r, __a, 40); r; }) +#define vld2q_p8(__a) __extension__ ({ \ + poly8x16x2_t r; __builtin_neon_vld2q_v(&r, __a, 36); r; }) +#define vld2q_p16(__a) __extension__ ({ \ + poly16x8x2_t r; __builtin_neon_vld2q_v(&r, __a, 37); r; }) +#define vld2_u8(__a) __extension__ ({ \ + uint8x8x2_t r; __builtin_neon_vld2_v(&r, __a, 16); r; }) +#define vld2_u16(__a) __extension__ ({ \ + uint16x4x2_t r; __builtin_neon_vld2_v(&r, __a, 17); r; }) +#define vld2_u32(__a) __extension__ ({ \ + uint32x2x2_t r; __builtin_neon_vld2_v(&r, __a, 18); r; }) +#define vld2_u64(__a) __extension__ ({ \ + uint64x1x2_t r; __builtin_neon_vld2_v(&r, __a, 19); r; }) +#define vld2_s8(__a) __extension__ ({ \ + int8x8x2_t r; __builtin_neon_vld2_v(&r, __a, 0); r; }) +#define vld2_s16(__a) __extension__ ({ \ + int16x4x2_t r; __builtin_neon_vld2_v(&r, __a, 1); r; }) +#define vld2_s32(__a) __extension__ ({ \ + int32x2x2_t r; __builtin_neon_vld2_v(&r, __a, 2); r; }) +#define vld2_s64(__a) __extension__ ({ \ + int64x1x2_t r; __builtin_neon_vld2_v(&r, __a, 3); r; }) +#define vld2_f16(__a) __extension__ ({ \ + float16x4x2_t r; __builtin_neon_vld2_v(&r, __a, 7); r; }) +#define vld2_f32(__a) __extension__ ({ \ + float32x2x2_t r; __builtin_neon_vld2_v(&r, __a, 8); r; }) +#define vld2_p8(__a) __extension__ ({ \ + poly8x8x2_t r; __builtin_neon_vld2_v(&r, __a, 4); r; }) +#define vld2_p16(__a) __extension__ ({ \ + poly16x4x2_t r; __builtin_neon_vld2_v(&r, __a, 5); r; }) + +#define vld2_dup_u8(__a) __extension__ ({ \ + uint8x8x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 16); r; }) +#define vld2_dup_u16(__a) __extension__ ({ \ + uint16x4x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 17); r; }) +#define vld2_dup_u32(__a) __extension__ ({ \ + uint32x2x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 18); r; }) +#define vld2_dup_u64(__a) __extension__ ({ \ + uint64x1x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 19); r; }) +#define vld2_dup_s8(__a) __extension__ ({ \ + int8x8x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 0); r; }) +#define vld2_dup_s16(__a) __extension__ ({ \ + int16x4x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 1); r; }) +#define vld2_dup_s32(__a) __extension__ ({ \ + int32x2x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 2); r; }) +#define vld2_dup_s64(__a) __extension__ ({ \ + int64x1x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 3); r; }) +#define vld2_dup_f16(__a) __extension__ ({ \ + float16x4x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 7); r; }) +#define vld2_dup_f32(__a) __extension__ ({ \ + float32x2x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 8); r; }) +#define vld2_dup_p8(__a) __extension__ ({ \ + poly8x8x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 4); r; }) +#define vld2_dup_p16(__a) __extension__ ({ \ + poly16x4x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 5); r; }) + +#define vld2q_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x8x2_t __b = (b); \ + uint16x8x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 49); r; }) +#define vld2q_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x4x2_t __b = (b); \ + uint32x4x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 50); r; }) +#define vld2q_lane_s16(__a, b, __c) __extension__ ({ \ + int16x8x2_t __b = (b); \ + int16x8x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 33); r; }) +#define vld2q_lane_s32(__a, b, __c) __extension__ ({ \ + int32x4x2_t __b = (b); \ + int32x4x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 34); r; }) +#define vld2q_lane_f16(__a, b, __c) __extension__ ({ \ + float16x8x2_t __b = (b); \ + float16x8x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 39); r; }) +#define vld2q_lane_f32(__a, b, __c) __extension__ ({ \ + float32x4x2_t __b = (b); \ + float32x4x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 40); r; }) +#define vld2q_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x8x2_t __b = (b); \ + poly16x8x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 37); r; }) +#define vld2_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x8x2_t __b = (b); \ + uint8x8x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 16); r; }) +#define vld2_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x4x2_t __b = (b); \ + uint16x4x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 17); r; }) +#define vld2_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x2x2_t __b = (b); \ + uint32x2x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 18); r; }) +#define vld2_lane_s8(__a, b, __c) __extension__ ({ \ + int8x8x2_t __b = (b); \ + int8x8x2_t r; __builtin_neon_vld2_lane_v(&r, __a, __b.val[0], __b.val[1], __c, 0); r; }) +#define vld2_lane_s16(__a, b, __c) __extension__ ({ \ + int16x4x2_t __b = (b); \ + int16x4x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 1); r; }) +#define vld2_lane_s32(__a, b, __c) __extension__ ({ \ + int32x2x2_t __b = (b); \ + int32x2x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 2); r; }) +#define vld2_lane_f16(__a, b, __c) __extension__ ({ \ + float16x4x2_t __b = (b); \ + float16x4x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 7); r; }) +#define vld2_lane_f32(__a, b, __c) __extension__ ({ \ + float32x2x2_t __b = (b); \ + float32x2x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 8); r; }) +#define vld2_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x8x2_t __b = (b); \ + poly8x8x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 4); r; }) +#define vld2_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x4x2_t __b = (b); \ + poly16x4x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 5); r; }) + +#define vld3q_u8(__a) __extension__ ({ \ + uint8x16x3_t r; __builtin_neon_vld3q_v(&r, __a, 48); r; }) +#define vld3q_u16(__a) __extension__ ({ \ + uint16x8x3_t r; __builtin_neon_vld3q_v(&r, __a, 49); r; }) +#define vld3q_u32(__a) __extension__ ({ \ + uint32x4x3_t r; __builtin_neon_vld3q_v(&r, __a, 50); r; }) +#define vld3q_s8(__a) __extension__ ({ \ + int8x16x3_t r; __builtin_neon_vld3q_v(&r, __a, 32); r; }) +#define vld3q_s16(__a) __extension__ ({ \ + int16x8x3_t r; __builtin_neon_vld3q_v(&r, __a, 33); r; }) +#define vld3q_s32(__a) __extension__ ({ \ + int32x4x3_t r; __builtin_neon_vld3q_v(&r, __a, 34); r; }) +#define vld3q_f16(__a) __extension__ ({ \ + float16x8x3_t r; __builtin_neon_vld3q_v(&r, __a, 39); r; }) +#define vld3q_f32(__a) __extension__ ({ \ + float32x4x3_t r; __builtin_neon_vld3q_v(&r, __a, 40); r; }) +#define vld3q_p8(__a) __extension__ ({ \ + poly8x16x3_t r; __builtin_neon_vld3q_v(&r, __a, 36); r; }) +#define vld3q_p16(__a) __extension__ ({ \ + poly16x8x3_t r; __builtin_neon_vld3q_v(&r, __a, 37); r; }) +#define vld3_u8(__a) __extension__ ({ \ + uint8x8x3_t r; __builtin_neon_vld3_v(&r, __a, 16); r; }) +#define vld3_u16(__a) __extension__ ({ \ + uint16x4x3_t r; __builtin_neon_vld3_v(&r, __a, 17); r; }) +#define vld3_u32(__a) __extension__ ({ \ + uint32x2x3_t r; __builtin_neon_vld3_v(&r, __a, 18); r; }) +#define vld3_u64(__a) __extension__ ({ \ + uint64x1x3_t r; __builtin_neon_vld3_v(&r, __a, 19); r; }) +#define vld3_s8(__a) __extension__ ({ \ + int8x8x3_t r; __builtin_neon_vld3_v(&r, __a, 0); r; }) +#define vld3_s16(__a) __extension__ ({ \ + int16x4x3_t r; __builtin_neon_vld3_v(&r, __a, 1); r; }) +#define vld3_s32(__a) __extension__ ({ \ + int32x2x3_t r; __builtin_neon_vld3_v(&r, __a, 2); r; }) +#define vld3_s64(__a) __extension__ ({ \ + int64x1x3_t r; __builtin_neon_vld3_v(&r, __a, 3); r; }) +#define vld3_f16(__a) __extension__ ({ \ + float16x4x3_t r; __builtin_neon_vld3_v(&r, __a, 7); r; }) +#define vld3_f32(__a) __extension__ ({ \ + float32x2x3_t r; __builtin_neon_vld3_v(&r, __a, 8); r; }) +#define vld3_p8(__a) __extension__ ({ \ + poly8x8x3_t r; __builtin_neon_vld3_v(&r, __a, 4); r; }) +#define vld3_p16(__a) __extension__ ({ \ + poly16x4x3_t r; __builtin_neon_vld3_v(&r, __a, 5); r; }) + +#define vld3_dup_u8(__a) __extension__ ({ \ + uint8x8x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 16); r; }) +#define vld3_dup_u16(__a) __extension__ ({ \ + uint16x4x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 17); r; }) +#define vld3_dup_u32(__a) __extension__ ({ \ + uint32x2x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 18); r; }) +#define vld3_dup_u64(__a) __extension__ ({ \ + uint64x1x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 19); r; }) +#define vld3_dup_s8(__a) __extension__ ({ \ + int8x8x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 0); r; }) +#define vld3_dup_s16(__a) __extension__ ({ \ + int16x4x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 1); r; }) +#define vld3_dup_s32(__a) __extension__ ({ \ + int32x2x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 2); r; }) +#define vld3_dup_s64(__a) __extension__ ({ \ + int64x1x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 3); r; }) +#define vld3_dup_f16(__a) __extension__ ({ \ + float16x4x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 7); r; }) +#define vld3_dup_f32(__a) __extension__ ({ \ + float32x2x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 8); r; }) +#define vld3_dup_p8(__a) __extension__ ({ \ + poly8x8x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 4); r; }) +#define vld3_dup_p16(__a) __extension__ ({ \ + poly16x4x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 5); r; }) + +#define vld3q_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x8x3_t __b = (b); \ + uint16x8x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 49); r; }) +#define vld3q_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x4x3_t __b = (b); \ + uint32x4x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 50); r; }) +#define vld3q_lane_s16(__a, b, __c) __extension__ ({ \ + int16x8x3_t __b = (b); \ + int16x8x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 33); r; }) +#define vld3q_lane_s32(__a, b, __c) __extension__ ({ \ + int32x4x3_t __b = (b); \ + int32x4x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 34); r; }) +#define vld3q_lane_f16(__a, b, __c) __extension__ ({ \ + float16x8x3_t __b = (b); \ + float16x8x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 39); r; }) +#define vld3q_lane_f32(__a, b, __c) __extension__ ({ \ + float32x4x3_t __b = (b); \ + float32x4x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 40); r; }) +#define vld3q_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x8x3_t __b = (b); \ + poly16x8x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 37); r; }) +#define vld3_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x8x3_t __b = (b); \ + uint8x8x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 16); r; }) +#define vld3_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x4x3_t __b = (b); \ + uint16x4x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 17); r; }) +#define vld3_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x2x3_t __b = (b); \ + uint32x2x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 18); r; }) +#define vld3_lane_s8(__a, b, __c) __extension__ ({ \ + int8x8x3_t __b = (b); \ + int8x8x3_t r; __builtin_neon_vld3_lane_v(&r, __a, __b.val[0], __b.val[1], __b.val[2], __c, 0); r; }) +#define vld3_lane_s16(__a, b, __c) __extension__ ({ \ + int16x4x3_t __b = (b); \ + int16x4x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 1); r; }) +#define vld3_lane_s32(__a, b, __c) __extension__ ({ \ + int32x2x3_t __b = (b); \ + int32x2x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 2); r; }) +#define vld3_lane_f16(__a, b, __c) __extension__ ({ \ + float16x4x3_t __b = (b); \ + float16x4x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 7); r; }) +#define vld3_lane_f32(__a, b, __c) __extension__ ({ \ + float32x2x3_t __b = (b); \ + float32x2x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 8); r; }) +#define vld3_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x8x3_t __b = (b); \ + poly8x8x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 4); r; }) +#define vld3_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x4x3_t __b = (b); \ + poly16x4x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 5); r; }) + +#define vld4q_u8(__a) __extension__ ({ \ + uint8x16x4_t r; __builtin_neon_vld4q_v(&r, __a, 48); r; }) +#define vld4q_u16(__a) __extension__ ({ \ + uint16x8x4_t r; __builtin_neon_vld4q_v(&r, __a, 49); r; }) +#define vld4q_u32(__a) __extension__ ({ \ + uint32x4x4_t r; __builtin_neon_vld4q_v(&r, __a, 50); r; }) +#define vld4q_s8(__a) __extension__ ({ \ + int8x16x4_t r; __builtin_neon_vld4q_v(&r, __a, 32); r; }) +#define vld4q_s16(__a) __extension__ ({ \ + int16x8x4_t r; __builtin_neon_vld4q_v(&r, __a, 33); r; }) +#define vld4q_s32(__a) __extension__ ({ \ + int32x4x4_t r; __builtin_neon_vld4q_v(&r, __a, 34); r; }) +#define vld4q_f16(__a) __extension__ ({ \ + float16x8x4_t r; __builtin_neon_vld4q_v(&r, __a, 39); r; }) +#define vld4q_f32(__a) __extension__ ({ \ + float32x4x4_t r; __builtin_neon_vld4q_v(&r, __a, 40); r; }) +#define vld4q_p8(__a) __extension__ ({ \ + poly8x16x4_t r; __builtin_neon_vld4q_v(&r, __a, 36); r; }) +#define vld4q_p16(__a) __extension__ ({ \ + poly16x8x4_t r; __builtin_neon_vld4q_v(&r, __a, 37); r; }) +#define vld4_u8(__a) __extension__ ({ \ + uint8x8x4_t r; __builtin_neon_vld4_v(&r, __a, 16); r; }) +#define vld4_u16(__a) __extension__ ({ \ + uint16x4x4_t r; __builtin_neon_vld4_v(&r, __a, 17); r; }) +#define vld4_u32(__a) __extension__ ({ \ + uint32x2x4_t r; __builtin_neon_vld4_v(&r, __a, 18); r; }) +#define vld4_u64(__a) __extension__ ({ \ + uint64x1x4_t r; __builtin_neon_vld4_v(&r, __a, 19); r; }) +#define vld4_s8(__a) __extension__ ({ \ + int8x8x4_t r; __builtin_neon_vld4_v(&r, __a, 0); r; }) +#define vld4_s16(__a) __extension__ ({ \ + int16x4x4_t r; __builtin_neon_vld4_v(&r, __a, 1); r; }) +#define vld4_s32(__a) __extension__ ({ \ + int32x2x4_t r; __builtin_neon_vld4_v(&r, __a, 2); r; }) +#define vld4_s64(__a) __extension__ ({ \ + int64x1x4_t r; __builtin_neon_vld4_v(&r, __a, 3); r; }) +#define vld4_f16(__a) __extension__ ({ \ + float16x4x4_t r; __builtin_neon_vld4_v(&r, __a, 7); r; }) +#define vld4_f32(__a) __extension__ ({ \ + float32x2x4_t r; __builtin_neon_vld4_v(&r, __a, 8); r; }) +#define vld4_p8(__a) __extension__ ({ \ + poly8x8x4_t r; __builtin_neon_vld4_v(&r, __a, 4); r; }) +#define vld4_p16(__a) __extension__ ({ \ + poly16x4x4_t r; __builtin_neon_vld4_v(&r, __a, 5); r; }) + +#define vld4_dup_u8(__a) __extension__ ({ \ + uint8x8x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 16); r; }) +#define vld4_dup_u16(__a) __extension__ ({ \ + uint16x4x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 17); r; }) +#define vld4_dup_u32(__a) __extension__ ({ \ + uint32x2x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 18); r; }) +#define vld4_dup_u64(__a) __extension__ ({ \ + uint64x1x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 19); r; }) +#define vld4_dup_s8(__a) __extension__ ({ \ + int8x8x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 0); r; }) +#define vld4_dup_s16(__a) __extension__ ({ \ + int16x4x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 1); r; }) +#define vld4_dup_s32(__a) __extension__ ({ \ + int32x2x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 2); r; }) +#define vld4_dup_s64(__a) __extension__ ({ \ + int64x1x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 3); r; }) +#define vld4_dup_f16(__a) __extension__ ({ \ + float16x4x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 7); r; }) +#define vld4_dup_f32(__a) __extension__ ({ \ + float32x2x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 8); r; }) +#define vld4_dup_p8(__a) __extension__ ({ \ + poly8x8x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 4); r; }) +#define vld4_dup_p16(__a) __extension__ ({ \ + poly16x4x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 5); r; }) + +#define vld4q_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x8x4_t __b = (b); \ + uint16x8x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 49); r; }) +#define vld4q_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x4x4_t __b = (b); \ + uint32x4x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 50); r; }) +#define vld4q_lane_s16(__a, b, __c) __extension__ ({ \ + int16x8x4_t __b = (b); \ + int16x8x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 33); r; }) +#define vld4q_lane_s32(__a, b, __c) __extension__ ({ \ + int32x4x4_t __b = (b); \ + int32x4x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 34); r; }) +#define vld4q_lane_f16(__a, b, __c) __extension__ ({ \ + float16x8x4_t __b = (b); \ + float16x8x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 39); r; }) +#define vld4q_lane_f32(__a, b, __c) __extension__ ({ \ + float32x4x4_t __b = (b); \ + float32x4x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 40); r; }) +#define vld4q_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x8x4_t __b = (b); \ + poly16x8x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 37); r; }) +#define vld4_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x8x4_t __b = (b); \ + uint8x8x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 16); r; }) +#define vld4_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x4x4_t __b = (b); \ + uint16x4x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 17); r; }) +#define vld4_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x2x4_t __b = (b); \ + uint32x2x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 18); r; }) +#define vld4_lane_s8(__a, b, __c) __extension__ ({ \ + int8x8x4_t __b = (b); \ + int8x8x4_t r; __builtin_neon_vld4_lane_v(&r, __a, __b.val[0], __b.val[1], __b.val[2], __b.val[3], __c, 0); r; }) +#define vld4_lane_s16(__a, b, __c) __extension__ ({ \ + int16x4x4_t __b = (b); \ + int16x4x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 1); r; }) +#define vld4_lane_s32(__a, b, __c) __extension__ ({ \ + int32x2x4_t __b = (b); \ + int32x2x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 2); r; }) +#define vld4_lane_f16(__a, b, __c) __extension__ ({ \ + float16x4x4_t __b = (b); \ + float16x4x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 7); r; }) +#define vld4_lane_f32(__a, b, __c) __extension__ ({ \ + float32x2x4_t __b = (b); \ + float32x2x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 8); r; }) +#define vld4_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x8x4_t __b = (b); \ + poly8x8x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 4); r; }) +#define vld4_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x4x4_t __b = (b); \ + poly16x4x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 5); r; }) + +__ai int8x8_t vmax_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vmax_v(__a, __b, 0); } +__ai int16x4_t vmax_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vmax_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vmax_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vmax_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai uint8x8_t vmax_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vmax_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vmax_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vmax_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vmax_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vmax_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai float32x2_t vmax_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vmax_v((int8x8_t)__a, (int8x8_t)__b, 8); } +__ai int8x16_t vmaxq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vmaxq_v(__a, __b, 32); } +__ai int16x8_t vmaxq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vmaxq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vmaxq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vmaxq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai uint8x16_t vmaxq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vmaxq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vmaxq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vmaxq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vmaxq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vmaxq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai float32x4_t vmaxq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vmaxq_v((int8x16_t)__a, (int8x16_t)__b, 40); } + +__ai int8x8_t vmin_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vmin_v(__a, __b, 0); } +__ai int16x4_t vmin_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vmin_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vmin_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vmin_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai uint8x8_t vmin_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vmin_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vmin_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vmin_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vmin_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vmin_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai float32x2_t vmin_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vmin_v((int8x8_t)__a, (int8x8_t)__b, 8); } +__ai int8x16_t vminq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vminq_v(__a, __b, 32); } +__ai int16x8_t vminq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vminq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vminq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vminq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai uint8x16_t vminq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vminq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vminq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vminq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vminq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vminq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai float32x4_t vminq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vminq_v((int8x16_t)__a, (int8x16_t)__b, 40); } + +__ai int8x8_t vmla_s8(int8x8_t __a, int8x8_t __b, int8x8_t __c) { + return __a + (__b * __c); } +__ai int16x4_t vmla_s16(int16x4_t __a, int16x4_t __b, int16x4_t __c) { + return __a + (__b * __c); } +__ai int32x2_t vmla_s32(int32x2_t __a, int32x2_t __b, int32x2_t __c) { + return __a + (__b * __c); } +__ai float32x2_t vmla_f32(float32x2_t __a, float32x2_t __b, float32x2_t __c) { + return __a + (__b * __c); } +__ai uint8x8_t vmla_u8(uint8x8_t __a, uint8x8_t __b, uint8x8_t __c) { + return __a + (__b * __c); } +__ai uint16x4_t vmla_u16(uint16x4_t __a, uint16x4_t __b, uint16x4_t __c) { + return __a + (__b * __c); } +__ai uint32x2_t vmla_u32(uint32x2_t __a, uint32x2_t __b, uint32x2_t __c) { + return __a + (__b * __c); } +__ai int8x16_t vmlaq_s8(int8x16_t __a, int8x16_t __b, int8x16_t __c) { + return __a + (__b * __c); } +__ai int16x8_t vmlaq_s16(int16x8_t __a, int16x8_t __b, int16x8_t __c) { + return __a + (__b * __c); } +__ai int32x4_t vmlaq_s32(int32x4_t __a, int32x4_t __b, int32x4_t __c) { + return __a + (__b * __c); } +__ai float32x4_t vmlaq_f32(float32x4_t __a, float32x4_t __b, float32x4_t __c) { + return __a + (__b * __c); } +__ai uint8x16_t vmlaq_u8(uint8x16_t __a, uint8x16_t __b, uint8x16_t __c) { + return __a + (__b * __c); } +__ai uint16x8_t vmlaq_u16(uint16x8_t __a, uint16x8_t __b, uint16x8_t __c) { + return __a + (__b * __c); } +__ai uint32x4_t vmlaq_u32(uint32x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return __a + (__b * __c); } + +__ai int16x8_t vmlal_s8(int16x8_t __a, int8x8_t __b, int8x8_t __c) { + return __a + vmull_s8(__b, __c); } +__ai int32x4_t vmlal_s16(int32x4_t __a, int16x4_t __b, int16x4_t __c) { + return __a + vmull_s16(__b, __c); } +__ai int64x2_t vmlal_s32(int64x2_t __a, int32x2_t __b, int32x2_t __c) { + return __a + vmull_s32(__b, __c); } +__ai uint16x8_t vmlal_u8(uint16x8_t __a, uint8x8_t __b, uint8x8_t __c) { + return __a + vmull_u8(__b, __c); } +__ai uint32x4_t vmlal_u16(uint32x4_t __a, uint16x4_t __b, uint16x4_t __c) { + return __a + vmull_u16(__b, __c); } +__ai uint64x2_t vmlal_u32(uint64x2_t __a, uint32x2_t __b, uint32x2_t __c) { + return __a + vmull_u32(__b, __c); } + +#define vmlal_lane_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x4_t __b = (b); int16x4_t __c = (c); \ + __a + vmull_s16(__b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlal_lane_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x2_t __b = (b); int32x2_t __c = (c); \ + __a + vmull_s32(__b, __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlal_lane_u16(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint16x4_t __b = (b); uint16x4_t __c = (c); \ + __a + vmull_u16(__b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlal_lane_u32(a, b, c, __d) __extension__ ({ \ + uint64x2_t __a = (a); uint32x2_t __b = (b); uint32x2_t __c = (c); \ + __a + vmull_u32(__b, __builtin_shufflevector(__c, __c, __d, __d)); }) + +__ai int32x4_t vmlal_n_s16(int32x4_t __a, int16x4_t __b, int16_t __c) { + return __a + vmull_s16(__b, (int16x4_t){ __c, __c, __c, __c }); } +__ai int64x2_t vmlal_n_s32(int64x2_t __a, int32x2_t __b, int32_t __c) { + return __a + vmull_s32(__b, (int32x2_t){ __c, __c }); } +__ai uint32x4_t vmlal_n_u16(uint32x4_t __a, uint16x4_t __b, uint16_t __c) { + return __a + vmull_u16(__b, (uint16x4_t){ __c, __c, __c, __c }); } +__ai uint64x2_t vmlal_n_u32(uint64x2_t __a, uint32x2_t __b, uint32_t __c) { + return __a + vmull_u32(__b, (uint32x2_t){ __c, __c }); } + +#define vmla_lane_s16(a, b, c, __d) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); int16x4_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmla_lane_s32(a, b, c, __d) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); int32x2_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmla_lane_u16(a, b, c, __d) __extension__ ({ \ + uint16x4_t __a = (a); uint16x4_t __b = (b); uint16x4_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmla_lane_u32(a, b, c, __d) __extension__ ({ \ + uint32x2_t __a = (a); uint32x2_t __b = (b); uint32x2_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmla_lane_f32(a, b, c, __d) __extension__ ({ \ + float32x2_t __a = (a); float32x2_t __b = (b); float32x2_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlaq_lane_s16(a, b, c, __d) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); int16x4_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d, __d, __d, __d, __d)); }) +#define vmlaq_lane_s32(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); int32x2_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlaq_lane_u16(a, b, c, __d) __extension__ ({ \ + uint16x8_t __a = (a); uint16x8_t __b = (b); uint16x4_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d, __d, __d, __d, __d)); }) +#define vmlaq_lane_u32(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint32x4_t __b = (b); uint32x2_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlaq_lane_f32(a, b, c, __d) __extension__ ({ \ + float32x4_t __a = (a); float32x4_t __b = (b); float32x2_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) + +__ai int16x4_t vmla_n_s16(int16x4_t __a, int16x4_t __b, int16_t __c) { + return __a + (__b * (int16x4_t){ __c, __c, __c, __c }); } +__ai int32x2_t vmla_n_s32(int32x2_t __a, int32x2_t __b, int32_t __c) { + return __a + (__b * (int32x2_t){ __c, __c }); } +__ai uint16x4_t vmla_n_u16(uint16x4_t __a, uint16x4_t __b, uint16_t __c) { + return __a + (__b * (uint16x4_t){ __c, __c, __c, __c }); } +__ai uint32x2_t vmla_n_u32(uint32x2_t __a, uint32x2_t __b, uint32_t __c) { + return __a + (__b * (uint32x2_t){ __c, __c }); } +__ai float32x2_t vmla_n_f32(float32x2_t __a, float32x2_t __b, float32_t __c) { + return __a + (__b * (float32x2_t){ __c, __c }); } +__ai int16x8_t vmlaq_n_s16(int16x8_t __a, int16x8_t __b, int16_t __c) { + return __a + (__b * (int16x8_t){ __c, __c, __c, __c, __c, __c, __c, __c }); } +__ai int32x4_t vmlaq_n_s32(int32x4_t __a, int32x4_t __b, int32_t __c) { + return __a + (__b * (int32x4_t){ __c, __c, __c, __c }); } +__ai uint16x8_t vmlaq_n_u16(uint16x8_t __a, uint16x8_t __b, uint16_t __c) { + return __a + (__b * (uint16x8_t){ __c, __c, __c, __c, __c, __c, __c, __c }); } +__ai uint32x4_t vmlaq_n_u32(uint32x4_t __a, uint32x4_t __b, uint32_t __c) { + return __a + (__b * (uint32x4_t){ __c, __c, __c, __c }); } +__ai float32x4_t vmlaq_n_f32(float32x4_t __a, float32x4_t __b, float32_t __c) { + return __a + (__b * (float32x4_t){ __c, __c, __c, __c }); } + +__ai int8x8_t vmls_s8(int8x8_t __a, int8x8_t __b, int8x8_t __c) { + return __a - (__b * __c); } +__ai int16x4_t vmls_s16(int16x4_t __a, int16x4_t __b, int16x4_t __c) { + return __a - (__b * __c); } +__ai int32x2_t vmls_s32(int32x2_t __a, int32x2_t __b, int32x2_t __c) { + return __a - (__b * __c); } +__ai float32x2_t vmls_f32(float32x2_t __a, float32x2_t __b, float32x2_t __c) { + return __a - (__b * __c); } +__ai uint8x8_t vmls_u8(uint8x8_t __a, uint8x8_t __b, uint8x8_t __c) { + return __a - (__b * __c); } +__ai uint16x4_t vmls_u16(uint16x4_t __a, uint16x4_t __b, uint16x4_t __c) { + return __a - (__b * __c); } +__ai uint32x2_t vmls_u32(uint32x2_t __a, uint32x2_t __b, uint32x2_t __c) { + return __a - (__b * __c); } +__ai int8x16_t vmlsq_s8(int8x16_t __a, int8x16_t __b, int8x16_t __c) { + return __a - (__b * __c); } +__ai int16x8_t vmlsq_s16(int16x8_t __a, int16x8_t __b, int16x8_t __c) { + return __a - (__b * __c); } +__ai int32x4_t vmlsq_s32(int32x4_t __a, int32x4_t __b, int32x4_t __c) { + return __a - (__b * __c); } +__ai float32x4_t vmlsq_f32(float32x4_t __a, float32x4_t __b, float32x4_t __c) { + return __a - (__b * __c); } +__ai uint8x16_t vmlsq_u8(uint8x16_t __a, uint8x16_t __b, uint8x16_t __c) { + return __a - (__b * __c); } +__ai uint16x8_t vmlsq_u16(uint16x8_t __a, uint16x8_t __b, uint16x8_t __c) { + return __a - (__b * __c); } +__ai uint32x4_t vmlsq_u32(uint32x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return __a - (__b * __c); } + +__ai int16x8_t vmlsl_s8(int16x8_t __a, int8x8_t __b, int8x8_t __c) { + return __a - vmull_s8(__b, __c); } +__ai int32x4_t vmlsl_s16(int32x4_t __a, int16x4_t __b, int16x4_t __c) { + return __a - vmull_s16(__b, __c); } +__ai int64x2_t vmlsl_s32(int64x2_t __a, int32x2_t __b, int32x2_t __c) { + return __a - vmull_s32(__b, __c); } +__ai uint16x8_t vmlsl_u8(uint16x8_t __a, uint8x8_t __b, uint8x8_t __c) { + return __a - vmull_u8(__b, __c); } +__ai uint32x4_t vmlsl_u16(uint32x4_t __a, uint16x4_t __b, uint16x4_t __c) { + return __a - vmull_u16(__b, __c); } +__ai uint64x2_t vmlsl_u32(uint64x2_t __a, uint32x2_t __b, uint32x2_t __c) { + return __a - vmull_u32(__b, __c); } + +#define vmlsl_lane_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x4_t __b = (b); int16x4_t __c = (c); \ + __a - vmull_s16(__b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsl_lane_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x2_t __b = (b); int32x2_t __c = (c); \ + __a - vmull_s32(__b, __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlsl_lane_u16(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint16x4_t __b = (b); uint16x4_t __c = (c); \ + __a - vmull_u16(__b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsl_lane_u32(a, b, c, __d) __extension__ ({ \ + uint64x2_t __a = (a); uint32x2_t __b = (b); uint32x2_t __c = (c); \ + __a - vmull_u32(__b, __builtin_shufflevector(__c, __c, __d, __d)); }) + +__ai int32x4_t vmlsl_n_s16(int32x4_t __a, int16x4_t __b, int16_t __c) { + return __a - vmull_s16(__b, (int16x4_t){ __c, __c, __c, __c }); } +__ai int64x2_t vmlsl_n_s32(int64x2_t __a, int32x2_t __b, int32_t __c) { + return __a - vmull_s32(__b, (int32x2_t){ __c, __c }); } +__ai uint32x4_t vmlsl_n_u16(uint32x4_t __a, uint16x4_t __b, uint16_t __c) { + return __a - vmull_u16(__b, (uint16x4_t){ __c, __c, __c, __c }); } +__ai uint64x2_t vmlsl_n_u32(uint64x2_t __a, uint32x2_t __b, uint32_t __c) { + return __a - vmull_u32(__b, (uint32x2_t){ __c, __c }); } + +#define vmls_lane_s16(a, b, c, __d) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); int16x4_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmls_lane_s32(a, b, c, __d) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); int32x2_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmls_lane_u16(a, b, c, __d) __extension__ ({ \ + uint16x4_t __a = (a); uint16x4_t __b = (b); uint16x4_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmls_lane_u32(a, b, c, __d) __extension__ ({ \ + uint32x2_t __a = (a); uint32x2_t __b = (b); uint32x2_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmls_lane_f32(a, b, c, __d) __extension__ ({ \ + float32x2_t __a = (a); float32x2_t __b = (b); float32x2_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlsq_lane_s16(a, b, c, __d) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); int16x4_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d, __d, __d, __d, __d)); }) +#define vmlsq_lane_s32(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); int32x2_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsq_lane_u16(a, b, c, __d) __extension__ ({ \ + uint16x8_t __a = (a); uint16x8_t __b = (b); uint16x4_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d, __d, __d, __d, __d)); }) +#define vmlsq_lane_u32(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint32x4_t __b = (b); uint32x2_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsq_lane_f32(a, b, c, __d) __extension__ ({ \ + float32x4_t __a = (a); float32x4_t __b = (b); float32x2_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) + +__ai int16x4_t vmls_n_s16(int16x4_t __a, int16x4_t __b, int16_t __c) { + return __a - (__b * (int16x4_t){ __c, __c, __c, __c }); } +__ai int32x2_t vmls_n_s32(int32x2_t __a, int32x2_t __b, int32_t __c) { + return __a - (__b * (int32x2_t){ __c, __c }); } +__ai uint16x4_t vmls_n_u16(uint16x4_t __a, uint16x4_t __b, uint16_t __c) { + return __a - (__b * (uint16x4_t){ __c, __c, __c, __c }); } +__ai uint32x2_t vmls_n_u32(uint32x2_t __a, uint32x2_t __b, uint32_t __c) { + return __a - (__b * (uint32x2_t){ __c, __c }); } +__ai float32x2_t vmls_n_f32(float32x2_t __a, float32x2_t __b, float32_t __c) { + return __a - (__b * (float32x2_t){ __c, __c }); } +__ai int16x8_t vmlsq_n_s16(int16x8_t __a, int16x8_t __b, int16_t __c) { + return __a - (__b * (int16x8_t){ __c, __c, __c, __c, __c, __c, __c, __c }); } +__ai int32x4_t vmlsq_n_s32(int32x4_t __a, int32x4_t __b, int32_t __c) { + return __a - (__b * (int32x4_t){ __c, __c, __c, __c }); } +__ai uint16x8_t vmlsq_n_u16(uint16x8_t __a, uint16x8_t __b, uint16_t __c) { + return __a - (__b * (uint16x8_t){ __c, __c, __c, __c, __c, __c, __c, __c }); } +__ai uint32x4_t vmlsq_n_u32(uint32x4_t __a, uint32x4_t __b, uint32_t __c) { + return __a - (__b * (uint32x4_t){ __c, __c, __c, __c }); } +__ai float32x4_t vmlsq_n_f32(float32x4_t __a, float32x4_t __b, float32_t __c) { + return __a - (__b * (float32x4_t){ __c, __c, __c, __c }); } + +__ai int8x8_t vmovn_s16(int16x8_t __a) { + return (int8x8_t)__builtin_neon_vmovn_v((int8x16_t)__a, 0); } +__ai int16x4_t vmovn_s32(int32x4_t __a) { + return (int16x4_t)__builtin_neon_vmovn_v((int8x16_t)__a, 1); } +__ai int32x2_t vmovn_s64(int64x2_t __a) { + return (int32x2_t)__builtin_neon_vmovn_v((int8x16_t)__a, 2); } +__ai uint8x8_t vmovn_u16(uint16x8_t __a) { + return (uint8x8_t)__builtin_neon_vmovn_v((int8x16_t)__a, 16); } +__ai uint16x4_t vmovn_u32(uint32x4_t __a) { + return (uint16x4_t)__builtin_neon_vmovn_v((int8x16_t)__a, 17); } +__ai uint32x2_t vmovn_u64(uint64x2_t __a) { + return (uint32x2_t)__builtin_neon_vmovn_v((int8x16_t)__a, 18); } + +__ai uint8x8_t vmov_n_u8(uint8_t __a) { + return (uint8x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai uint16x4_t vmov_n_u16(uint16_t __a) { + return (uint16x4_t){ __a, __a, __a, __a }; } +__ai uint32x2_t vmov_n_u32(uint32_t __a) { + return (uint32x2_t){ __a, __a }; } +__ai int8x8_t vmov_n_s8(int8_t __a) { + return (int8x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai int16x4_t vmov_n_s16(int16_t __a) { + return (int16x4_t){ __a, __a, __a, __a }; } +__ai int32x2_t vmov_n_s32(int32_t __a) { + return (int32x2_t){ __a, __a }; } +__ai poly8x8_t vmov_n_p8(poly8_t __a) { + return (poly8x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai poly16x4_t vmov_n_p16(poly16_t __a) { + return (poly16x4_t){ __a, __a, __a, __a }; } +__ai float32x2_t vmov_n_f32(float32_t __a) { + return (float32x2_t){ __a, __a }; } +__ai uint8x16_t vmovq_n_u8(uint8_t __a) { + return (uint8x16_t){ __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai uint16x8_t vmovq_n_u16(uint16_t __a) { + return (uint16x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai uint32x4_t vmovq_n_u32(uint32_t __a) { + return (uint32x4_t){ __a, __a, __a, __a }; } +__ai int8x16_t vmovq_n_s8(int8_t __a) { + return (int8x16_t){ __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai int16x8_t vmovq_n_s16(int16_t __a) { + return (int16x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai int32x4_t vmovq_n_s32(int32_t __a) { + return (int32x4_t){ __a, __a, __a, __a }; } +__ai poly8x16_t vmovq_n_p8(poly8_t __a) { + return (poly8x16_t){ __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai poly16x8_t vmovq_n_p16(poly16_t __a) { + return (poly16x8_t){ __a, __a, __a, __a, __a, __a, __a, __a }; } +__ai float32x4_t vmovq_n_f32(float32_t __a) { + return (float32x4_t){ __a, __a, __a, __a }; } +__ai int64x1_t vmov_n_s64(int64_t __a) { + return (int64x1_t){ __a }; } +__ai uint64x1_t vmov_n_u64(uint64_t __a) { + return (uint64x1_t){ __a }; } +__ai int64x2_t vmovq_n_s64(int64_t __a) { + return (int64x2_t){ __a, __a }; } +__ai uint64x2_t vmovq_n_u64(uint64_t __a) { + return (uint64x2_t){ __a, __a }; } + +__ai int8x8_t vmul_s8(int8x8_t __a, int8x8_t __b) { + return __a * __b; } +__ai int16x4_t vmul_s16(int16x4_t __a, int16x4_t __b) { + return __a * __b; } +__ai int32x2_t vmul_s32(int32x2_t __a, int32x2_t __b) { + return __a * __b; } +__ai float32x2_t vmul_f32(float32x2_t __a, float32x2_t __b) { + return __a * __b; } +__ai uint8x8_t vmul_u8(uint8x8_t __a, uint8x8_t __b) { + return __a * __b; } +__ai uint16x4_t vmul_u16(uint16x4_t __a, uint16x4_t __b) { + return __a * __b; } +__ai uint32x2_t vmul_u32(uint32x2_t __a, uint32x2_t __b) { + return __a * __b; } +__ai int8x16_t vmulq_s8(int8x16_t __a, int8x16_t __b) { + return __a * __b; } +__ai int16x8_t vmulq_s16(int16x8_t __a, int16x8_t __b) { + return __a * __b; } +__ai int32x4_t vmulq_s32(int32x4_t __a, int32x4_t __b) { + return __a * __b; } +__ai float32x4_t vmulq_f32(float32x4_t __a, float32x4_t __b) { + return __a * __b; } +__ai uint8x16_t vmulq_u8(uint8x16_t __a, uint8x16_t __b) { + return __a * __b; } +__ai uint16x8_t vmulq_u16(uint16x8_t __a, uint16x8_t __b) { + return __a * __b; } +__ai uint32x4_t vmulq_u32(uint32x4_t __a, uint32x4_t __b) { + return __a * __b; } + +#define vmull_lane_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); \ + vmull_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vmull_lane_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); \ + vmull_s32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) +#define vmull_lane_u16(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint16x4_t __b = (b); \ + vmull_u16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vmull_lane_u32(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint32x2_t __b = (b); \ + vmull_u32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) + +__ai int32x4_t vmull_n_s16(int16x4_t __a, int16_t __b) { + return (int32x4_t)__builtin_neon_vmull_v((int8x8_t)__a, (int8x8_t)(int16x4_t){ __b, __b, __b, __b }, 34); } +__ai int64x2_t vmull_n_s32(int32x2_t __a, int32_t __b) { + return (int64x2_t)__builtin_neon_vmull_v((int8x8_t)__a, (int8x8_t)(int32x2_t){ __b, __b }, 35); } +__ai uint32x4_t vmull_n_u16(uint16x4_t __a, uint16_t __b) { + return (uint32x4_t)__builtin_neon_vmull_v((int8x8_t)__a, (int8x8_t)(uint16x4_t){ __b, __b, __b, __b }, 50); } +__ai uint64x2_t vmull_n_u32(uint32x2_t __a, uint32_t __b) { + return (uint64x2_t)__builtin_neon_vmull_v((int8x8_t)__a, (int8x8_t)(uint32x2_t){ __b, __b }, 51); } + +__ai poly8x8_t vmul_p8(poly8x8_t __a, poly8x8_t __b) { + return (poly8x8_t)__builtin_neon_vmul_v((int8x8_t)__a, (int8x8_t)__b, 4); } +__ai poly8x16_t vmulq_p8(poly8x16_t __a, poly8x16_t __b) { + return (poly8x16_t)__builtin_neon_vmulq_v((int8x16_t)__a, (int8x16_t)__b, 36); } + +#define vmul_lane_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c); }) +#define vmul_lane_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c); }) +#define vmul_lane_f32(a, b, __c) __extension__ ({ \ + float32x2_t __a = (a); float32x2_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c); }) +#define vmul_lane_u16(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint16x4_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c); }) +#define vmul_lane_u32(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint32x2_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c); }) +#define vmulq_lane_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x4_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c, __c, __c, __c, __c); }) +#define vmulq_lane_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x2_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c); }) +#define vmulq_lane_f32(a, b, __c) __extension__ ({ \ + float32x4_t __a = (a); float32x2_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c); }) +#define vmulq_lane_u16(a, b, __c) __extension__ ({ \ + uint16x8_t __a = (a); uint16x4_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c, __c, __c, __c, __c); }) +#define vmulq_lane_u32(a, b, __c) __extension__ ({ \ + uint32x4_t __a = (a); uint32x2_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c); }) + +__ai int16x4_t vmul_n_s16(int16x4_t __a, int16_t __b) { + return __a * (int16x4_t){ __b, __b, __b, __b }; } +__ai int32x2_t vmul_n_s32(int32x2_t __a, int32_t __b) { + return __a * (int32x2_t){ __b, __b }; } +__ai float32x2_t vmul_n_f32(float32x2_t __a, float32_t __b) { + return __a * (float32x2_t){ __b, __b }; } +__ai uint16x4_t vmul_n_u16(uint16x4_t __a, uint16_t __b) { + return __a * (uint16x4_t){ __b, __b, __b, __b }; } +__ai uint32x2_t vmul_n_u32(uint32x2_t __a, uint32_t __b) { + return __a * (uint32x2_t){ __b, __b }; } +__ai int16x8_t vmulq_n_s16(int16x8_t __a, int16_t __b) { + return __a * (int16x8_t){ __b, __b, __b, __b, __b, __b, __b, __b }; } +__ai int32x4_t vmulq_n_s32(int32x4_t __a, int32_t __b) { + return __a * (int32x4_t){ __b, __b, __b, __b }; } +__ai float32x4_t vmulq_n_f32(float32x4_t __a, float32_t __b) { + return __a * (float32x4_t){ __b, __b, __b, __b }; } +__ai uint16x8_t vmulq_n_u16(uint16x8_t __a, uint16_t __b) { + return __a * (uint16x8_t){ __b, __b, __b, __b, __b, __b, __b, __b }; } +__ai uint32x4_t vmulq_n_u32(uint32x4_t __a, uint32_t __b) { + return __a * (uint32x4_t){ __b, __b, __b, __b }; } + +__ai int8x8_t vmvn_s8(int8x8_t __a) { + return ~__a; } +__ai int16x4_t vmvn_s16(int16x4_t __a) { + return ~__a; } +__ai int32x2_t vmvn_s32(int32x2_t __a) { + return ~__a; } +__ai uint8x8_t vmvn_u8(uint8x8_t __a) { + return ~__a; } +__ai uint16x4_t vmvn_u16(uint16x4_t __a) { + return ~__a; } +__ai uint32x2_t vmvn_u32(uint32x2_t __a) { + return ~__a; } +__ai poly8x8_t vmvn_p8(poly8x8_t __a) { + return ~__a; } +__ai int8x16_t vmvnq_s8(int8x16_t __a) { + return ~__a; } +__ai int16x8_t vmvnq_s16(int16x8_t __a) { + return ~__a; } +__ai int32x4_t vmvnq_s32(int32x4_t __a) { + return ~__a; } +__ai uint8x16_t vmvnq_u8(uint8x16_t __a) { + return ~__a; } +__ai uint16x8_t vmvnq_u16(uint16x8_t __a) { + return ~__a; } +__ai uint32x4_t vmvnq_u32(uint32x4_t __a) { + return ~__a; } +__ai poly8x16_t vmvnq_p8(poly8x16_t __a) { + return ~__a; } + +__ai int8x8_t vneg_s8(int8x8_t __a) { + return -__a; } +__ai int16x4_t vneg_s16(int16x4_t __a) { + return -__a; } +__ai int32x2_t vneg_s32(int32x2_t __a) { + return -__a; } +__ai float32x2_t vneg_f32(float32x2_t __a) { + return -__a; } +__ai int8x16_t vnegq_s8(int8x16_t __a) { + return -__a; } +__ai int16x8_t vnegq_s16(int16x8_t __a) { + return -__a; } +__ai int32x4_t vnegq_s32(int32x4_t __a) { + return -__a; } +__ai float32x4_t vnegq_f32(float32x4_t __a) { + return -__a; } + +__ai int8x8_t vorn_s8(int8x8_t __a, int8x8_t __b) { + return __a | ~__b; } +__ai int16x4_t vorn_s16(int16x4_t __a, int16x4_t __b) { + return __a | ~__b; } +__ai int32x2_t vorn_s32(int32x2_t __a, int32x2_t __b) { + return __a | ~__b; } +__ai int64x1_t vorn_s64(int64x1_t __a, int64x1_t __b) { + return __a | ~__b; } +__ai uint8x8_t vorn_u8(uint8x8_t __a, uint8x8_t __b) { + return __a | ~__b; } +__ai uint16x4_t vorn_u16(uint16x4_t __a, uint16x4_t __b) { + return __a | ~__b; } +__ai uint32x2_t vorn_u32(uint32x2_t __a, uint32x2_t __b) { + return __a | ~__b; } +__ai uint64x1_t vorn_u64(uint64x1_t __a, uint64x1_t __b) { + return __a | ~__b; } +__ai int8x16_t vornq_s8(int8x16_t __a, int8x16_t __b) { + return __a | ~__b; } +__ai int16x8_t vornq_s16(int16x8_t __a, int16x8_t __b) { + return __a | ~__b; } +__ai int32x4_t vornq_s32(int32x4_t __a, int32x4_t __b) { + return __a | ~__b; } +__ai int64x2_t vornq_s64(int64x2_t __a, int64x2_t __b) { + return __a | ~__b; } +__ai uint8x16_t vornq_u8(uint8x16_t __a, uint8x16_t __b) { + return __a | ~__b; } +__ai uint16x8_t vornq_u16(uint16x8_t __a, uint16x8_t __b) { + return __a | ~__b; } +__ai uint32x4_t vornq_u32(uint32x4_t __a, uint32x4_t __b) { + return __a | ~__b; } +__ai uint64x2_t vornq_u64(uint64x2_t __a, uint64x2_t __b) { + return __a | ~__b; } + +__ai int8x8_t vorr_s8(int8x8_t __a, int8x8_t __b) { + return __a | __b; } +__ai int16x4_t vorr_s16(int16x4_t __a, int16x4_t __b) { + return __a | __b; } +__ai int32x2_t vorr_s32(int32x2_t __a, int32x2_t __b) { + return __a | __b; } +__ai int64x1_t vorr_s64(int64x1_t __a, int64x1_t __b) { + return __a | __b; } +__ai uint8x8_t vorr_u8(uint8x8_t __a, uint8x8_t __b) { + return __a | __b; } +__ai uint16x4_t vorr_u16(uint16x4_t __a, uint16x4_t __b) { + return __a | __b; } +__ai uint32x2_t vorr_u32(uint32x2_t __a, uint32x2_t __b) { + return __a | __b; } +__ai uint64x1_t vorr_u64(uint64x1_t __a, uint64x1_t __b) { + return __a | __b; } +__ai int8x16_t vorrq_s8(int8x16_t __a, int8x16_t __b) { + return __a | __b; } +__ai int16x8_t vorrq_s16(int16x8_t __a, int16x8_t __b) { + return __a | __b; } +__ai int32x4_t vorrq_s32(int32x4_t __a, int32x4_t __b) { + return __a | __b; } +__ai int64x2_t vorrq_s64(int64x2_t __a, int64x2_t __b) { + return __a | __b; } +__ai uint8x16_t vorrq_u8(uint8x16_t __a, uint8x16_t __b) { + return __a | __b; } +__ai uint16x8_t vorrq_u16(uint16x8_t __a, uint16x8_t __b) { + return __a | __b; } +__ai uint32x4_t vorrq_u32(uint32x4_t __a, uint32x4_t __b) { + return __a | __b; } +__ai uint64x2_t vorrq_u64(uint64x2_t __a, uint64x2_t __b) { + return __a | __b; } + +__ai int16x4_t vpadal_s8(int16x4_t __a, int8x8_t __b) { + return (int16x4_t)__builtin_neon_vpadal_v((int8x8_t)__a, __b, 1); } +__ai int32x2_t vpadal_s16(int32x2_t __a, int16x4_t __b) { + return (int32x2_t)__builtin_neon_vpadal_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai int64x1_t vpadal_s32(int64x1_t __a, int32x2_t __b) { + return (int64x1_t)__builtin_neon_vpadal_v((int8x8_t)__a, (int8x8_t)__b, 3); } +__ai uint16x4_t vpadal_u8(uint16x4_t __a, uint8x8_t __b) { + return (uint16x4_t)__builtin_neon_vpadal_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vpadal_u16(uint32x2_t __a, uint16x4_t __b) { + return (uint32x2_t)__builtin_neon_vpadal_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint64x1_t vpadal_u32(uint64x1_t __a, uint32x2_t __b) { + return (uint64x1_t)__builtin_neon_vpadal_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai int16x8_t vpadalq_s8(int16x8_t __a, int8x16_t __b) { + return (int16x8_t)__builtin_neon_vpadalq_v((int8x16_t)__a, __b, 33); } +__ai int32x4_t vpadalq_s16(int32x4_t __a, int16x8_t __b) { + return (int32x4_t)__builtin_neon_vpadalq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai int64x2_t vpadalq_s32(int64x2_t __a, int32x4_t __b) { + return (int64x2_t)__builtin_neon_vpadalq_v((int8x16_t)__a, (int8x16_t)__b, 35); } +__ai uint16x8_t vpadalq_u8(uint16x8_t __a, uint8x16_t __b) { + return (uint16x8_t)__builtin_neon_vpadalq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vpadalq_u16(uint32x4_t __a, uint16x8_t __b) { + return (uint32x4_t)__builtin_neon_vpadalq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai uint64x2_t vpadalq_u32(uint64x2_t __a, uint32x4_t __b) { + return (uint64x2_t)__builtin_neon_vpadalq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +__ai int8x8_t vpadd_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vpadd_v(__a, __b, 0); } +__ai int16x4_t vpadd_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vpadd_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vpadd_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vpadd_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai uint8x8_t vpadd_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vpadd_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vpadd_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vpadd_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vpadd_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vpadd_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai float32x2_t vpadd_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vpadd_v((int8x8_t)__a, (int8x8_t)__b, 8); } + +__ai int16x4_t vpaddl_s8(int8x8_t __a) { + return (int16x4_t)__builtin_neon_vpaddl_v(__a, 1); } +__ai int32x2_t vpaddl_s16(int16x4_t __a) { + return (int32x2_t)__builtin_neon_vpaddl_v((int8x8_t)__a, 2); } +__ai int64x1_t vpaddl_s32(int32x2_t __a) { + return (int64x1_t)__builtin_neon_vpaddl_v((int8x8_t)__a, 3); } +__ai uint16x4_t vpaddl_u8(uint8x8_t __a) { + return (uint16x4_t)__builtin_neon_vpaddl_v((int8x8_t)__a, 17); } +__ai uint32x2_t vpaddl_u16(uint16x4_t __a) { + return (uint32x2_t)__builtin_neon_vpaddl_v((int8x8_t)__a, 18); } +__ai uint64x1_t vpaddl_u32(uint32x2_t __a) { + return (uint64x1_t)__builtin_neon_vpaddl_v((int8x8_t)__a, 19); } +__ai int16x8_t vpaddlq_s8(int8x16_t __a) { + return (int16x8_t)__builtin_neon_vpaddlq_v(__a, 33); } +__ai int32x4_t vpaddlq_s16(int16x8_t __a) { + return (int32x4_t)__builtin_neon_vpaddlq_v((int8x16_t)__a, 34); } +__ai int64x2_t vpaddlq_s32(int32x4_t __a) { + return (int64x2_t)__builtin_neon_vpaddlq_v((int8x16_t)__a, 35); } +__ai uint16x8_t vpaddlq_u8(uint8x16_t __a) { + return (uint16x8_t)__builtin_neon_vpaddlq_v((int8x16_t)__a, 49); } +__ai uint32x4_t vpaddlq_u16(uint16x8_t __a) { + return (uint32x4_t)__builtin_neon_vpaddlq_v((int8x16_t)__a, 50); } +__ai uint64x2_t vpaddlq_u32(uint32x4_t __a) { + return (uint64x2_t)__builtin_neon_vpaddlq_v((int8x16_t)__a, 51); } + +__ai int8x8_t vpmax_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vpmax_v(__a, __b, 0); } +__ai int16x4_t vpmax_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vpmax_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vpmax_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vpmax_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai uint8x8_t vpmax_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vpmax_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vpmax_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vpmax_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vpmax_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vpmax_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai float32x2_t vpmax_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vpmax_v((int8x8_t)__a, (int8x8_t)__b, 8); } + +__ai int8x8_t vpmin_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vpmin_v(__a, __b, 0); } +__ai int16x4_t vpmin_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vpmin_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vpmin_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vpmin_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai uint8x8_t vpmin_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vpmin_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vpmin_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vpmin_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vpmin_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vpmin_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai float32x2_t vpmin_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vpmin_v((int8x8_t)__a, (int8x8_t)__b, 8); } + +__ai int8x8_t vqabs_s8(int8x8_t __a) { + return (int8x8_t)__builtin_neon_vqabs_v(__a, 0); } +__ai int16x4_t vqabs_s16(int16x4_t __a) { + return (int16x4_t)__builtin_neon_vqabs_v((int8x8_t)__a, 1); } +__ai int32x2_t vqabs_s32(int32x2_t __a) { + return (int32x2_t)__builtin_neon_vqabs_v((int8x8_t)__a, 2); } +__ai int8x16_t vqabsq_s8(int8x16_t __a) { + return (int8x16_t)__builtin_neon_vqabsq_v(__a, 32); } +__ai int16x8_t vqabsq_s16(int16x8_t __a) { + return (int16x8_t)__builtin_neon_vqabsq_v((int8x16_t)__a, 33); } +__ai int32x4_t vqabsq_s32(int32x4_t __a) { + return (int32x4_t)__builtin_neon_vqabsq_v((int8x16_t)__a, 34); } + +__ai int8x8_t vqadd_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vqadd_v(__a, __b, 0); } +__ai int16x4_t vqadd_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vqadd_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vqadd_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vqadd_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai int64x1_t vqadd_s64(int64x1_t __a, int64x1_t __b) { + return (int64x1_t)__builtin_neon_vqadd_v((int8x8_t)__a, (int8x8_t)__b, 3); } +__ai uint8x8_t vqadd_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vqadd_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vqadd_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vqadd_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vqadd_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vqadd_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint64x1_t vqadd_u64(uint64x1_t __a, uint64x1_t __b) { + return (uint64x1_t)__builtin_neon_vqadd_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai int8x16_t vqaddq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vqaddq_v(__a, __b, 32); } +__ai int16x8_t vqaddq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vqaddq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vqaddq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vqaddq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai int64x2_t vqaddq_s64(int64x2_t __a, int64x2_t __b) { + return (int64x2_t)__builtin_neon_vqaddq_v((int8x16_t)__a, (int8x16_t)__b, 35); } +__ai uint8x16_t vqaddq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vqaddq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vqaddq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vqaddq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vqaddq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vqaddq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai uint64x2_t vqaddq_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint64x2_t)__builtin_neon_vqaddq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +__ai int32x4_t vqdmlal_s16(int32x4_t __a, int16x4_t __b, int16x4_t __c) { + return (int32x4_t)__builtin_neon_vqdmlal_v((int8x16_t)__a, (int8x8_t)__b, (int8x8_t)__c, 34); } +__ai int64x2_t vqdmlal_s32(int64x2_t __a, int32x2_t __b, int32x2_t __c) { + return (int64x2_t)__builtin_neon_vqdmlal_v((int8x16_t)__a, (int8x8_t)__b, (int8x8_t)__c, 35); } + +#define vqdmlal_lane_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x4_t __b = (b); int16x4_t __c = (c); \ + vqdmlal_s16(__a, __b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vqdmlal_lane_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x2_t __b = (b); int32x2_t __c = (c); \ + vqdmlal_s32(__a, __b, __builtin_shufflevector(__c, __c, __d, __d)); }) + +__ai int32x4_t vqdmlal_n_s16(int32x4_t __a, int16x4_t __b, int16_t __c) { + return (int32x4_t)__builtin_neon_vqdmlal_v((int8x16_t)__a, (int8x8_t)__b, (int8x8_t)(int16x4_t){ __c, __c, __c, __c }, 34); } +__ai int64x2_t vqdmlal_n_s32(int64x2_t __a, int32x2_t __b, int32_t __c) { + return (int64x2_t)__builtin_neon_vqdmlal_v((int8x16_t)__a, (int8x8_t)__b, (int8x8_t)(int32x2_t){ __c, __c }, 35); } + +__ai int32x4_t vqdmlsl_s16(int32x4_t __a, int16x4_t __b, int16x4_t __c) { + return (int32x4_t)__builtin_neon_vqdmlsl_v((int8x16_t)__a, (int8x8_t)__b, (int8x8_t)__c, 34); } +__ai int64x2_t vqdmlsl_s32(int64x2_t __a, int32x2_t __b, int32x2_t __c) { + return (int64x2_t)__builtin_neon_vqdmlsl_v((int8x16_t)__a, (int8x8_t)__b, (int8x8_t)__c, 35); } + +#define vqdmlsl_lane_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x4_t __b = (b); int16x4_t __c = (c); \ + vqdmlsl_s16(__a, __b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vqdmlsl_lane_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x2_t __b = (b); int32x2_t __c = (c); \ + vqdmlsl_s32(__a, __b, __builtin_shufflevector(__c, __c, __d, __d)); }) + +__ai int32x4_t vqdmlsl_n_s16(int32x4_t __a, int16x4_t __b, int16_t __c) { + return (int32x4_t)__builtin_neon_vqdmlsl_v((int8x16_t)__a, (int8x8_t)__b, (int8x8_t)(int16x4_t){ __c, __c, __c, __c }, 34); } +__ai int64x2_t vqdmlsl_n_s32(int64x2_t __a, int32x2_t __b, int32_t __c) { + return (int64x2_t)__builtin_neon_vqdmlsl_v((int8x16_t)__a, (int8x8_t)__b, (int8x8_t)(int32x2_t){ __c, __c }, 35); } + +__ai int16x4_t vqdmulh_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vqdmulh_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vqdmulh_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vqdmulh_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai int16x8_t vqdmulhq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vqdmulhq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vqdmulhq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vqdmulhq_v((int8x16_t)__a, (int8x16_t)__b, 34); } + +#define vqdmulh_lane_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); \ + vqdmulh_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vqdmulh_lane_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); \ + vqdmulh_s32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) +#define vqdmulhq_lane_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x4_t __b = (b); \ + vqdmulhq_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c, __c, __c, __c, __c)); }) +#define vqdmulhq_lane_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x2_t __b = (b); \ + vqdmulhq_s32(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) + +__ai int16x4_t vqdmulh_n_s16(int16x4_t __a, int16_t __b) { + return (int16x4_t)__builtin_neon_vqdmulh_v((int8x8_t)__a, (int8x8_t)(int16x4_t){ __b, __b, __b, __b }, 1); } +__ai int32x2_t vqdmulh_n_s32(int32x2_t __a, int32_t __b) { + return (int32x2_t)__builtin_neon_vqdmulh_v((int8x8_t)__a, (int8x8_t)(int32x2_t){ __b, __b }, 2); } +__ai int16x8_t vqdmulhq_n_s16(int16x8_t __a, int16_t __b) { + return (int16x8_t)__builtin_neon_vqdmulhq_v((int8x16_t)__a, (int8x16_t)(int16x8_t){ __b, __b, __b, __b, __b, __b, __b, __b }, 33); } +__ai int32x4_t vqdmulhq_n_s32(int32x4_t __a, int32_t __b) { + return (int32x4_t)__builtin_neon_vqdmulhq_v((int8x16_t)__a, (int8x16_t)(int32x4_t){ __b, __b, __b, __b }, 34); } + +__ai int32x4_t vqdmull_s16(int16x4_t __a, int16x4_t __b) { + return (int32x4_t)__builtin_neon_vqdmull_v((int8x8_t)__a, (int8x8_t)__b, 34); } +__ai int64x2_t vqdmull_s32(int32x2_t __a, int32x2_t __b) { + return (int64x2_t)__builtin_neon_vqdmull_v((int8x8_t)__a, (int8x8_t)__b, 35); } + +#define vqdmull_lane_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); \ + vqdmull_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vqdmull_lane_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); \ + vqdmull_s32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) + +__ai int32x4_t vqdmull_n_s16(int16x4_t __a, int16_t __b) { + return (int32x4_t)__builtin_neon_vqdmull_v((int8x8_t)__a, (int8x8_t)(int16x4_t){ __b, __b, __b, __b }, 34); } +__ai int64x2_t vqdmull_n_s32(int32x2_t __a, int32_t __b) { + return (int64x2_t)__builtin_neon_vqdmull_v((int8x8_t)__a, (int8x8_t)(int32x2_t){ __b, __b }, 35); } + +__ai int8x8_t vqmovn_s16(int16x8_t __a) { + return (int8x8_t)__builtin_neon_vqmovn_v((int8x16_t)__a, 0); } +__ai int16x4_t vqmovn_s32(int32x4_t __a) { + return (int16x4_t)__builtin_neon_vqmovn_v((int8x16_t)__a, 1); } +__ai int32x2_t vqmovn_s64(int64x2_t __a) { + return (int32x2_t)__builtin_neon_vqmovn_v((int8x16_t)__a, 2); } +__ai uint8x8_t vqmovn_u16(uint16x8_t __a) { + return (uint8x8_t)__builtin_neon_vqmovn_v((int8x16_t)__a, 16); } +__ai uint16x4_t vqmovn_u32(uint32x4_t __a) { + return (uint16x4_t)__builtin_neon_vqmovn_v((int8x16_t)__a, 17); } +__ai uint32x2_t vqmovn_u64(uint64x2_t __a) { + return (uint32x2_t)__builtin_neon_vqmovn_v((int8x16_t)__a, 18); } + +__ai uint8x8_t vqmovun_s16(int16x8_t __a) { + return (uint8x8_t)__builtin_neon_vqmovun_v((int8x16_t)__a, 16); } +__ai uint16x4_t vqmovun_s32(int32x4_t __a) { + return (uint16x4_t)__builtin_neon_vqmovun_v((int8x16_t)__a, 17); } +__ai uint32x2_t vqmovun_s64(int64x2_t __a) { + return (uint32x2_t)__builtin_neon_vqmovun_v((int8x16_t)__a, 18); } + +__ai int8x8_t vqneg_s8(int8x8_t __a) { + return (int8x8_t)__builtin_neon_vqneg_v(__a, 0); } +__ai int16x4_t vqneg_s16(int16x4_t __a) { + return (int16x4_t)__builtin_neon_vqneg_v((int8x8_t)__a, 1); } +__ai int32x2_t vqneg_s32(int32x2_t __a) { + return (int32x2_t)__builtin_neon_vqneg_v((int8x8_t)__a, 2); } +__ai int8x16_t vqnegq_s8(int8x16_t __a) { + return (int8x16_t)__builtin_neon_vqnegq_v(__a, 32); } +__ai int16x8_t vqnegq_s16(int16x8_t __a) { + return (int16x8_t)__builtin_neon_vqnegq_v((int8x16_t)__a, 33); } +__ai int32x4_t vqnegq_s32(int32x4_t __a) { + return (int32x4_t)__builtin_neon_vqnegq_v((int8x16_t)__a, 34); } + +__ai int16x4_t vqrdmulh_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vqrdmulh_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vqrdmulh_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vqrdmulh_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai int16x8_t vqrdmulhq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vqrdmulhq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vqrdmulhq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vqrdmulhq_v((int8x16_t)__a, (int8x16_t)__b, 34); } + +#define vqrdmulh_lane_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); \ + vqrdmulh_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vqrdmulh_lane_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); \ + vqrdmulh_s32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) +#define vqrdmulhq_lane_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x4_t __b = (b); \ + vqrdmulhq_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c, __c, __c, __c, __c)); }) +#define vqrdmulhq_lane_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x2_t __b = (b); \ + vqrdmulhq_s32(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) + +__ai int16x4_t vqrdmulh_n_s16(int16x4_t __a, int16_t __b) { + return (int16x4_t)__builtin_neon_vqrdmulh_v((int8x8_t)__a, (int8x8_t)(int16x4_t){ __b, __b, __b, __b }, 1); } +__ai int32x2_t vqrdmulh_n_s32(int32x2_t __a, int32_t __b) { + return (int32x2_t)__builtin_neon_vqrdmulh_v((int8x8_t)__a, (int8x8_t)(int32x2_t){ __b, __b }, 2); } +__ai int16x8_t vqrdmulhq_n_s16(int16x8_t __a, int16_t __b) { + return (int16x8_t)__builtin_neon_vqrdmulhq_v((int8x16_t)__a, (int8x16_t)(int16x8_t){ __b, __b, __b, __b, __b, __b, __b, __b }, 33); } +__ai int32x4_t vqrdmulhq_n_s32(int32x4_t __a, int32_t __b) { + return (int32x4_t)__builtin_neon_vqrdmulhq_v((int8x16_t)__a, (int8x16_t)(int32x4_t){ __b, __b, __b, __b }, 34); } + +__ai int8x8_t vqrshl_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vqrshl_v(__a, __b, 0); } +__ai int16x4_t vqrshl_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vqrshl_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vqrshl_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vqrshl_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai int64x1_t vqrshl_s64(int64x1_t __a, int64x1_t __b) { + return (int64x1_t)__builtin_neon_vqrshl_v((int8x8_t)__a, (int8x8_t)__b, 3); } +__ai uint8x8_t vqrshl_u8(uint8x8_t __a, int8x8_t __b) { + return (uint8x8_t)__builtin_neon_vqrshl_v((int8x8_t)__a, __b, 16); } +__ai uint16x4_t vqrshl_u16(uint16x4_t __a, int16x4_t __b) { + return (uint16x4_t)__builtin_neon_vqrshl_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vqrshl_u32(uint32x2_t __a, int32x2_t __b) { + return (uint32x2_t)__builtin_neon_vqrshl_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint64x1_t vqrshl_u64(uint64x1_t __a, int64x1_t __b) { + return (uint64x1_t)__builtin_neon_vqrshl_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai int8x16_t vqrshlq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vqrshlq_v(__a, __b, 32); } +__ai int16x8_t vqrshlq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vqrshlq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vqrshlq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vqrshlq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai int64x2_t vqrshlq_s64(int64x2_t __a, int64x2_t __b) { + return (int64x2_t)__builtin_neon_vqrshlq_v((int8x16_t)__a, (int8x16_t)__b, 35); } +__ai uint8x16_t vqrshlq_u8(uint8x16_t __a, int8x16_t __b) { + return (uint8x16_t)__builtin_neon_vqrshlq_v((int8x16_t)__a, __b, 48); } +__ai uint16x8_t vqrshlq_u16(uint16x8_t __a, int16x8_t __b) { + return (uint16x8_t)__builtin_neon_vqrshlq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vqrshlq_u32(uint32x4_t __a, int32x4_t __b) { + return (uint32x4_t)__builtin_neon_vqrshlq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai uint64x2_t vqrshlq_u64(uint64x2_t __a, int64x2_t __b) { + return (uint64x2_t)__builtin_neon_vqrshlq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +#define vqrshrn_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (int8x8_t)__builtin_neon_vqrshrn_n_v((int8x16_t)__a, __b, 0); }) +#define vqrshrn_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (int16x4_t)__builtin_neon_vqrshrn_n_v((int8x16_t)__a, __b, 1); }) +#define vqrshrn_n_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (int32x2_t)__builtin_neon_vqrshrn_n_v((int8x16_t)__a, __b, 2); }) +#define vqrshrn_n_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + (uint8x8_t)__builtin_neon_vqrshrn_n_v((int8x16_t)__a, __b, 16); }) +#define vqrshrn_n_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + (uint16x4_t)__builtin_neon_vqrshrn_n_v((int8x16_t)__a, __b, 17); }) +#define vqrshrn_n_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vqrshrn_n_v((int8x16_t)__a, __b, 18); }) + +#define vqrshrun_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (uint8x8_t)__builtin_neon_vqrshrun_n_v((int8x16_t)__a, __b, 16); }) +#define vqrshrun_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (uint16x4_t)__builtin_neon_vqrshrun_n_v((int8x16_t)__a, __b, 17); }) +#define vqrshrun_n_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vqrshrun_n_v((int8x16_t)__a, __b, 18); }) + +__ai int8x8_t vqshl_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vqshl_v(__a, __b, 0); } +__ai int16x4_t vqshl_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vqshl_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vqshl_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vqshl_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai int64x1_t vqshl_s64(int64x1_t __a, int64x1_t __b) { + return (int64x1_t)__builtin_neon_vqshl_v((int8x8_t)__a, (int8x8_t)__b, 3); } +__ai uint8x8_t vqshl_u8(uint8x8_t __a, int8x8_t __b) { + return (uint8x8_t)__builtin_neon_vqshl_v((int8x8_t)__a, __b, 16); } +__ai uint16x4_t vqshl_u16(uint16x4_t __a, int16x4_t __b) { + return (uint16x4_t)__builtin_neon_vqshl_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vqshl_u32(uint32x2_t __a, int32x2_t __b) { + return (uint32x2_t)__builtin_neon_vqshl_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint64x1_t vqshl_u64(uint64x1_t __a, int64x1_t __b) { + return (uint64x1_t)__builtin_neon_vqshl_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai int8x16_t vqshlq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vqshlq_v(__a, __b, 32); } +__ai int16x8_t vqshlq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vqshlq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vqshlq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vqshlq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai int64x2_t vqshlq_s64(int64x2_t __a, int64x2_t __b) { + return (int64x2_t)__builtin_neon_vqshlq_v((int8x16_t)__a, (int8x16_t)__b, 35); } +__ai uint8x16_t vqshlq_u8(uint8x16_t __a, int8x16_t __b) { + return (uint8x16_t)__builtin_neon_vqshlq_v((int8x16_t)__a, __b, 48); } +__ai uint16x8_t vqshlq_u16(uint16x8_t __a, int16x8_t __b) { + return (uint16x8_t)__builtin_neon_vqshlq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vqshlq_u32(uint32x4_t __a, int32x4_t __b) { + return (uint32x4_t)__builtin_neon_vqshlq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai uint64x2_t vqshlq_u64(uint64x2_t __a, int64x2_t __b) { + return (uint64x2_t)__builtin_neon_vqshlq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +#define vqshlu_n_s8(a, __b) __extension__ ({ \ + int8x8_t __a = (a); \ + (uint8x8_t)__builtin_neon_vqshlu_n_v(__a, __b, 16); }) +#define vqshlu_n_s16(a, __b) __extension__ ({ \ + int16x4_t __a = (a); \ + (uint16x4_t)__builtin_neon_vqshlu_n_v((int8x8_t)__a, __b, 17); }) +#define vqshlu_n_s32(a, __b) __extension__ ({ \ + int32x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vqshlu_n_v((int8x8_t)__a, __b, 18); }) +#define vqshlu_n_s64(a, __b) __extension__ ({ \ + int64x1_t __a = (a); \ + (uint64x1_t)__builtin_neon_vqshlu_n_v((int8x8_t)__a, __b, 19); }) +#define vqshluq_n_s8(a, __b) __extension__ ({ \ + int8x16_t __a = (a); \ + (uint8x16_t)__builtin_neon_vqshluq_n_v(__a, __b, 48); }) +#define vqshluq_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (uint16x8_t)__builtin_neon_vqshluq_n_v((int8x16_t)__a, __b, 49); }) +#define vqshluq_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (uint32x4_t)__builtin_neon_vqshluq_n_v((int8x16_t)__a, __b, 50); }) +#define vqshluq_n_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (uint64x2_t)__builtin_neon_vqshluq_n_v((int8x16_t)__a, __b, 51); }) + +#define vqshl_n_s8(a, __b) __extension__ ({ \ + int8x8_t __a = (a); \ + (int8x8_t)__builtin_neon_vqshl_n_v(__a, __b, 0); }) +#define vqshl_n_s16(a, __b) __extension__ ({ \ + int16x4_t __a = (a); \ + (int16x4_t)__builtin_neon_vqshl_n_v((int8x8_t)__a, __b, 1); }) +#define vqshl_n_s32(a, __b) __extension__ ({ \ + int32x2_t __a = (a); \ + (int32x2_t)__builtin_neon_vqshl_n_v((int8x8_t)__a, __b, 2); }) +#define vqshl_n_s64(a, __b) __extension__ ({ \ + int64x1_t __a = (a); \ + (int64x1_t)__builtin_neon_vqshl_n_v((int8x8_t)__a, __b, 3); }) +#define vqshl_n_u8(a, __b) __extension__ ({ \ + uint8x8_t __a = (a); \ + (uint8x8_t)__builtin_neon_vqshl_n_v((int8x8_t)__a, __b, 16); }) +#define vqshl_n_u16(a, __b) __extension__ ({ \ + uint16x4_t __a = (a); \ + (uint16x4_t)__builtin_neon_vqshl_n_v((int8x8_t)__a, __b, 17); }) +#define vqshl_n_u32(a, __b) __extension__ ({ \ + uint32x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vqshl_n_v((int8x8_t)__a, __b, 18); }) +#define vqshl_n_u64(a, __b) __extension__ ({ \ + uint64x1_t __a = (a); \ + (uint64x1_t)__builtin_neon_vqshl_n_v((int8x8_t)__a, __b, 19); }) +#define vqshlq_n_s8(a, __b) __extension__ ({ \ + int8x16_t __a = (a); \ + (int8x16_t)__builtin_neon_vqshlq_n_v(__a, __b, 32); }) +#define vqshlq_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (int16x8_t)__builtin_neon_vqshlq_n_v((int8x16_t)__a, __b, 33); }) +#define vqshlq_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (int32x4_t)__builtin_neon_vqshlq_n_v((int8x16_t)__a, __b, 34); }) +#define vqshlq_n_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (int64x2_t)__builtin_neon_vqshlq_n_v((int8x16_t)__a, __b, 35); }) +#define vqshlq_n_u8(a, __b) __extension__ ({ \ + uint8x16_t __a = (a); \ + (uint8x16_t)__builtin_neon_vqshlq_n_v((int8x16_t)__a, __b, 48); }) +#define vqshlq_n_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + (uint16x8_t)__builtin_neon_vqshlq_n_v((int8x16_t)__a, __b, 49); }) +#define vqshlq_n_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + (uint32x4_t)__builtin_neon_vqshlq_n_v((int8x16_t)__a, __b, 50); }) +#define vqshlq_n_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + (uint64x2_t)__builtin_neon_vqshlq_n_v((int8x16_t)__a, __b, 51); }) + +#define vqshrn_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (int8x8_t)__builtin_neon_vqshrn_n_v((int8x16_t)__a, __b, 0); }) +#define vqshrn_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (int16x4_t)__builtin_neon_vqshrn_n_v((int8x16_t)__a, __b, 1); }) +#define vqshrn_n_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (int32x2_t)__builtin_neon_vqshrn_n_v((int8x16_t)__a, __b, 2); }) +#define vqshrn_n_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + (uint8x8_t)__builtin_neon_vqshrn_n_v((int8x16_t)__a, __b, 16); }) +#define vqshrn_n_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + (uint16x4_t)__builtin_neon_vqshrn_n_v((int8x16_t)__a, __b, 17); }) +#define vqshrn_n_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vqshrn_n_v((int8x16_t)__a, __b, 18); }) + +#define vqshrun_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (uint8x8_t)__builtin_neon_vqshrun_n_v((int8x16_t)__a, __b, 16); }) +#define vqshrun_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (uint16x4_t)__builtin_neon_vqshrun_n_v((int8x16_t)__a, __b, 17); }) +#define vqshrun_n_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vqshrun_n_v((int8x16_t)__a, __b, 18); }) + +__ai int8x8_t vqsub_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vqsub_v(__a, __b, 0); } +__ai int16x4_t vqsub_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vqsub_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vqsub_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vqsub_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai int64x1_t vqsub_s64(int64x1_t __a, int64x1_t __b) { + return (int64x1_t)__builtin_neon_vqsub_v((int8x8_t)__a, (int8x8_t)__b, 3); } +__ai uint8x8_t vqsub_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vqsub_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vqsub_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vqsub_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vqsub_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vqsub_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint64x1_t vqsub_u64(uint64x1_t __a, uint64x1_t __b) { + return (uint64x1_t)__builtin_neon_vqsub_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai int8x16_t vqsubq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vqsubq_v(__a, __b, 32); } +__ai int16x8_t vqsubq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vqsubq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vqsubq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vqsubq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai int64x2_t vqsubq_s64(int64x2_t __a, int64x2_t __b) { + return (int64x2_t)__builtin_neon_vqsubq_v((int8x16_t)__a, (int8x16_t)__b, 35); } +__ai uint8x16_t vqsubq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vqsubq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vqsubq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vqsubq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vqsubq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vqsubq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai uint64x2_t vqsubq_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint64x2_t)__builtin_neon_vqsubq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +__ai int8x8_t vraddhn_s16(int16x8_t __a, int16x8_t __b) { + return (int8x8_t)__builtin_neon_vraddhn_v((int8x16_t)__a, (int8x16_t)__b, 0); } +__ai int16x4_t vraddhn_s32(int32x4_t __a, int32x4_t __b) { + return (int16x4_t)__builtin_neon_vraddhn_v((int8x16_t)__a, (int8x16_t)__b, 1); } +__ai int32x2_t vraddhn_s64(int64x2_t __a, int64x2_t __b) { + return (int32x2_t)__builtin_neon_vraddhn_v((int8x16_t)__a, (int8x16_t)__b, 2); } +__ai uint8x8_t vraddhn_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint8x8_t)__builtin_neon_vraddhn_v((int8x16_t)__a, (int8x16_t)__b, 16); } +__ai uint16x4_t vraddhn_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint16x4_t)__builtin_neon_vraddhn_v((int8x16_t)__a, (int8x16_t)__b, 17); } +__ai uint32x2_t vraddhn_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint32x2_t)__builtin_neon_vraddhn_v((int8x16_t)__a, (int8x16_t)__b, 18); } + +__ai float32x2_t vrecpe_f32(float32x2_t __a) { + return (float32x2_t)__builtin_neon_vrecpe_v((int8x8_t)__a, 8); } +__ai uint32x2_t vrecpe_u32(uint32x2_t __a) { + return (uint32x2_t)__builtin_neon_vrecpe_v((int8x8_t)__a, 18); } +__ai float32x4_t vrecpeq_f32(float32x4_t __a) { + return (float32x4_t)__builtin_neon_vrecpeq_v((int8x16_t)__a, 40); } +__ai uint32x4_t vrecpeq_u32(uint32x4_t __a) { + return (uint32x4_t)__builtin_neon_vrecpeq_v((int8x16_t)__a, 50); } + +__ai float32x2_t vrecps_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vrecps_v((int8x8_t)__a, (int8x8_t)__b, 8); } +__ai float32x4_t vrecpsq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vrecpsq_v((int8x16_t)__a, (int8x16_t)__b, 40); } + +__ai int8x8_t vreinterpret_s8_s16(int16x4_t __a) { + return (int8x8_t)__a; } +__ai int8x8_t vreinterpret_s8_s32(int32x2_t __a) { + return (int8x8_t)__a; } +__ai int8x8_t vreinterpret_s8_s64(int64x1_t __a) { + return (int8x8_t)__a; } +__ai int8x8_t vreinterpret_s8_u8(uint8x8_t __a) { + return (int8x8_t)__a; } +__ai int8x8_t vreinterpret_s8_u16(uint16x4_t __a) { + return (int8x8_t)__a; } +__ai int8x8_t vreinterpret_s8_u32(uint32x2_t __a) { + return (int8x8_t)__a; } +__ai int8x8_t vreinterpret_s8_u64(uint64x1_t __a) { + return (int8x8_t)__a; } +__ai int8x8_t vreinterpret_s8_f16(float16x4_t __a) { + return (int8x8_t)__a; } +__ai int8x8_t vreinterpret_s8_f32(float32x2_t __a) { + return (int8x8_t)__a; } +__ai int8x8_t vreinterpret_s8_p8(poly8x8_t __a) { + return (int8x8_t)__a; } +__ai int8x8_t vreinterpret_s8_p16(poly16x4_t __a) { + return (int8x8_t)__a; } +__ai int16x4_t vreinterpret_s16_s8(int8x8_t __a) { + return (int16x4_t)__a; } +__ai int16x4_t vreinterpret_s16_s32(int32x2_t __a) { + return (int16x4_t)__a; } +__ai int16x4_t vreinterpret_s16_s64(int64x1_t __a) { + return (int16x4_t)__a; } +__ai int16x4_t vreinterpret_s16_u8(uint8x8_t __a) { + return (int16x4_t)__a; } +__ai int16x4_t vreinterpret_s16_u16(uint16x4_t __a) { + return (int16x4_t)__a; } +__ai int16x4_t vreinterpret_s16_u32(uint32x2_t __a) { + return (int16x4_t)__a; } +__ai int16x4_t vreinterpret_s16_u64(uint64x1_t __a) { + return (int16x4_t)__a; } +__ai int16x4_t vreinterpret_s16_f16(float16x4_t __a) { + return (int16x4_t)__a; } +__ai int16x4_t vreinterpret_s16_f32(float32x2_t __a) { + return (int16x4_t)__a; } +__ai int16x4_t vreinterpret_s16_p8(poly8x8_t __a) { + return (int16x4_t)__a; } +__ai int16x4_t vreinterpret_s16_p16(poly16x4_t __a) { + return (int16x4_t)__a; } +__ai int32x2_t vreinterpret_s32_s8(int8x8_t __a) { + return (int32x2_t)__a; } +__ai int32x2_t vreinterpret_s32_s16(int16x4_t __a) { + return (int32x2_t)__a; } +__ai int32x2_t vreinterpret_s32_s64(int64x1_t __a) { + return (int32x2_t)__a; } +__ai int32x2_t vreinterpret_s32_u8(uint8x8_t __a) { + return (int32x2_t)__a; } +__ai int32x2_t vreinterpret_s32_u16(uint16x4_t __a) { + return (int32x2_t)__a; } +__ai int32x2_t vreinterpret_s32_u32(uint32x2_t __a) { + return (int32x2_t)__a; } +__ai int32x2_t vreinterpret_s32_u64(uint64x1_t __a) { + return (int32x2_t)__a; } +__ai int32x2_t vreinterpret_s32_f16(float16x4_t __a) { + return (int32x2_t)__a; } +__ai int32x2_t vreinterpret_s32_f32(float32x2_t __a) { + return (int32x2_t)__a; } +__ai int32x2_t vreinterpret_s32_p8(poly8x8_t __a) { + return (int32x2_t)__a; } +__ai int32x2_t vreinterpret_s32_p16(poly16x4_t __a) { + return (int32x2_t)__a; } +__ai int64x1_t vreinterpret_s64_s8(int8x8_t __a) { + return (int64x1_t)__a; } +__ai int64x1_t vreinterpret_s64_s16(int16x4_t __a) { + return (int64x1_t)__a; } +__ai int64x1_t vreinterpret_s64_s32(int32x2_t __a) { + return (int64x1_t)__a; } +__ai int64x1_t vreinterpret_s64_u8(uint8x8_t __a) { + return (int64x1_t)__a; } +__ai int64x1_t vreinterpret_s64_u16(uint16x4_t __a) { + return (int64x1_t)__a; } +__ai int64x1_t vreinterpret_s64_u32(uint32x2_t __a) { + return (int64x1_t)__a; } +__ai int64x1_t vreinterpret_s64_u64(uint64x1_t __a) { + return (int64x1_t)__a; } +__ai int64x1_t vreinterpret_s64_f16(float16x4_t __a) { + return (int64x1_t)__a; } +__ai int64x1_t vreinterpret_s64_f32(float32x2_t __a) { + return (int64x1_t)__a; } +__ai int64x1_t vreinterpret_s64_p8(poly8x8_t __a) { + return (int64x1_t)__a; } +__ai int64x1_t vreinterpret_s64_p16(poly16x4_t __a) { + return (int64x1_t)__a; } +__ai uint8x8_t vreinterpret_u8_s8(int8x8_t __a) { + return (uint8x8_t)__a; } +__ai uint8x8_t vreinterpret_u8_s16(int16x4_t __a) { + return (uint8x8_t)__a; } +__ai uint8x8_t vreinterpret_u8_s32(int32x2_t __a) { + return (uint8x8_t)__a; } +__ai uint8x8_t vreinterpret_u8_s64(int64x1_t __a) { + return (uint8x8_t)__a; } +__ai uint8x8_t vreinterpret_u8_u16(uint16x4_t __a) { + return (uint8x8_t)__a; } +__ai uint8x8_t vreinterpret_u8_u32(uint32x2_t __a) { + return (uint8x8_t)__a; } +__ai uint8x8_t vreinterpret_u8_u64(uint64x1_t __a) { + return (uint8x8_t)__a; } +__ai uint8x8_t vreinterpret_u8_f16(float16x4_t __a) { + return (uint8x8_t)__a; } +__ai uint8x8_t vreinterpret_u8_f32(float32x2_t __a) { + return (uint8x8_t)__a; } +__ai uint8x8_t vreinterpret_u8_p8(poly8x8_t __a) { + return (uint8x8_t)__a; } +__ai uint8x8_t vreinterpret_u8_p16(poly16x4_t __a) { + return (uint8x8_t)__a; } +__ai uint16x4_t vreinterpret_u16_s8(int8x8_t __a) { + return (uint16x4_t)__a; } +__ai uint16x4_t vreinterpret_u16_s16(int16x4_t __a) { + return (uint16x4_t)__a; } +__ai uint16x4_t vreinterpret_u16_s32(int32x2_t __a) { + return (uint16x4_t)__a; } +__ai uint16x4_t vreinterpret_u16_s64(int64x1_t __a) { + return (uint16x4_t)__a; } +__ai uint16x4_t vreinterpret_u16_u8(uint8x8_t __a) { + return (uint16x4_t)__a; } +__ai uint16x4_t vreinterpret_u16_u32(uint32x2_t __a) { + return (uint16x4_t)__a; } +__ai uint16x4_t vreinterpret_u16_u64(uint64x1_t __a) { + return (uint16x4_t)__a; } +__ai uint16x4_t vreinterpret_u16_f16(float16x4_t __a) { + return (uint16x4_t)__a; } +__ai uint16x4_t vreinterpret_u16_f32(float32x2_t __a) { + return (uint16x4_t)__a; } +__ai uint16x4_t vreinterpret_u16_p8(poly8x8_t __a) { + return (uint16x4_t)__a; } +__ai uint16x4_t vreinterpret_u16_p16(poly16x4_t __a) { + return (uint16x4_t)__a; } +__ai uint32x2_t vreinterpret_u32_s8(int8x8_t __a) { + return (uint32x2_t)__a; } +__ai uint32x2_t vreinterpret_u32_s16(int16x4_t __a) { + return (uint32x2_t)__a; } +__ai uint32x2_t vreinterpret_u32_s32(int32x2_t __a) { + return (uint32x2_t)__a; } +__ai uint32x2_t vreinterpret_u32_s64(int64x1_t __a) { + return (uint32x2_t)__a; } +__ai uint32x2_t vreinterpret_u32_u8(uint8x8_t __a) { + return (uint32x2_t)__a; } +__ai uint32x2_t vreinterpret_u32_u16(uint16x4_t __a) { + return (uint32x2_t)__a; } +__ai uint32x2_t vreinterpret_u32_u64(uint64x1_t __a) { + return (uint32x2_t)__a; } +__ai uint32x2_t vreinterpret_u32_f16(float16x4_t __a) { + return (uint32x2_t)__a; } +__ai uint32x2_t vreinterpret_u32_f32(float32x2_t __a) { + return (uint32x2_t)__a; } +__ai uint32x2_t vreinterpret_u32_p8(poly8x8_t __a) { + return (uint32x2_t)__a; } +__ai uint32x2_t vreinterpret_u32_p16(poly16x4_t __a) { + return (uint32x2_t)__a; } +__ai uint64x1_t vreinterpret_u64_s8(int8x8_t __a) { + return (uint64x1_t)__a; } +__ai uint64x1_t vreinterpret_u64_s16(int16x4_t __a) { + return (uint64x1_t)__a; } +__ai uint64x1_t vreinterpret_u64_s32(int32x2_t __a) { + return (uint64x1_t)__a; } +__ai uint64x1_t vreinterpret_u64_s64(int64x1_t __a) { + return (uint64x1_t)__a; } +__ai uint64x1_t vreinterpret_u64_u8(uint8x8_t __a) { + return (uint64x1_t)__a; } +__ai uint64x1_t vreinterpret_u64_u16(uint16x4_t __a) { + return (uint64x1_t)__a; } +__ai uint64x1_t vreinterpret_u64_u32(uint32x2_t __a) { + return (uint64x1_t)__a; } +__ai uint64x1_t vreinterpret_u64_f16(float16x4_t __a) { + return (uint64x1_t)__a; } +__ai uint64x1_t vreinterpret_u64_f32(float32x2_t __a) { + return (uint64x1_t)__a; } +__ai uint64x1_t vreinterpret_u64_p8(poly8x8_t __a) { + return (uint64x1_t)__a; } +__ai uint64x1_t vreinterpret_u64_p16(poly16x4_t __a) { + return (uint64x1_t)__a; } +__ai float16x4_t vreinterpret_f16_s8(int8x8_t __a) { + return (float16x4_t)__a; } +__ai float16x4_t vreinterpret_f16_s16(int16x4_t __a) { + return (float16x4_t)__a; } +__ai float16x4_t vreinterpret_f16_s32(int32x2_t __a) { + return (float16x4_t)__a; } +__ai float16x4_t vreinterpret_f16_s64(int64x1_t __a) { + return (float16x4_t)__a; } +__ai float16x4_t vreinterpret_f16_u8(uint8x8_t __a) { + return (float16x4_t)__a; } +__ai float16x4_t vreinterpret_f16_u16(uint16x4_t __a) { + return (float16x4_t)__a; } +__ai float16x4_t vreinterpret_f16_u32(uint32x2_t __a) { + return (float16x4_t)__a; } +__ai float16x4_t vreinterpret_f16_u64(uint64x1_t __a) { + return (float16x4_t)__a; } +__ai float16x4_t vreinterpret_f16_f32(float32x2_t __a) { + return (float16x4_t)__a; } +__ai float16x4_t vreinterpret_f16_p8(poly8x8_t __a) { + return (float16x4_t)__a; } +__ai float16x4_t vreinterpret_f16_p16(poly16x4_t __a) { + return (float16x4_t)__a; } +__ai float32x2_t vreinterpret_f32_s8(int8x8_t __a) { + return (float32x2_t)__a; } +__ai float32x2_t vreinterpret_f32_s16(int16x4_t __a) { + return (float32x2_t)__a; } +__ai float32x2_t vreinterpret_f32_s32(int32x2_t __a) { + return (float32x2_t)__a; } +__ai float32x2_t vreinterpret_f32_s64(int64x1_t __a) { + return (float32x2_t)__a; } +__ai float32x2_t vreinterpret_f32_u8(uint8x8_t __a) { + return (float32x2_t)__a; } +__ai float32x2_t vreinterpret_f32_u16(uint16x4_t __a) { + return (float32x2_t)__a; } +__ai float32x2_t vreinterpret_f32_u32(uint32x2_t __a) { + return (float32x2_t)__a; } +__ai float32x2_t vreinterpret_f32_u64(uint64x1_t __a) { + return (float32x2_t)__a; } +__ai float32x2_t vreinterpret_f32_f16(float16x4_t __a) { + return (float32x2_t)__a; } +__ai float32x2_t vreinterpret_f32_p8(poly8x8_t __a) { + return (float32x2_t)__a; } +__ai float32x2_t vreinterpret_f32_p16(poly16x4_t __a) { + return (float32x2_t)__a; } +__ai poly8x8_t vreinterpret_p8_s8(int8x8_t __a) { + return (poly8x8_t)__a; } +__ai poly8x8_t vreinterpret_p8_s16(int16x4_t __a) { + return (poly8x8_t)__a; } +__ai poly8x8_t vreinterpret_p8_s32(int32x2_t __a) { + return (poly8x8_t)__a; } +__ai poly8x8_t vreinterpret_p8_s64(int64x1_t __a) { + return (poly8x8_t)__a; } +__ai poly8x8_t vreinterpret_p8_u8(uint8x8_t __a) { + return (poly8x8_t)__a; } +__ai poly8x8_t vreinterpret_p8_u16(uint16x4_t __a) { + return (poly8x8_t)__a; } +__ai poly8x8_t vreinterpret_p8_u32(uint32x2_t __a) { + return (poly8x8_t)__a; } +__ai poly8x8_t vreinterpret_p8_u64(uint64x1_t __a) { + return (poly8x8_t)__a; } +__ai poly8x8_t vreinterpret_p8_f16(float16x4_t __a) { + return (poly8x8_t)__a; } +__ai poly8x8_t vreinterpret_p8_f32(float32x2_t __a) { + return (poly8x8_t)__a; } +__ai poly8x8_t vreinterpret_p8_p16(poly16x4_t __a) { + return (poly8x8_t)__a; } +__ai poly16x4_t vreinterpret_p16_s8(int8x8_t __a) { + return (poly16x4_t)__a; } +__ai poly16x4_t vreinterpret_p16_s16(int16x4_t __a) { + return (poly16x4_t)__a; } +__ai poly16x4_t vreinterpret_p16_s32(int32x2_t __a) { + return (poly16x4_t)__a; } +__ai poly16x4_t vreinterpret_p16_s64(int64x1_t __a) { + return (poly16x4_t)__a; } +__ai poly16x4_t vreinterpret_p16_u8(uint8x8_t __a) { + return (poly16x4_t)__a; } +__ai poly16x4_t vreinterpret_p16_u16(uint16x4_t __a) { + return (poly16x4_t)__a; } +__ai poly16x4_t vreinterpret_p16_u32(uint32x2_t __a) { + return (poly16x4_t)__a; } +__ai poly16x4_t vreinterpret_p16_u64(uint64x1_t __a) { + return (poly16x4_t)__a; } +__ai poly16x4_t vreinterpret_p16_f16(float16x4_t __a) { + return (poly16x4_t)__a; } +__ai poly16x4_t vreinterpret_p16_f32(float32x2_t __a) { + return (poly16x4_t)__a; } +__ai poly16x4_t vreinterpret_p16_p8(poly8x8_t __a) { + return (poly16x4_t)__a; } +__ai int8x16_t vreinterpretq_s8_s16(int16x8_t __a) { + return (int8x16_t)__a; } +__ai int8x16_t vreinterpretq_s8_s32(int32x4_t __a) { + return (int8x16_t)__a; } +__ai int8x16_t vreinterpretq_s8_s64(int64x2_t __a) { + return (int8x16_t)__a; } +__ai int8x16_t vreinterpretq_s8_u8(uint8x16_t __a) { + return (int8x16_t)__a; } +__ai int8x16_t vreinterpretq_s8_u16(uint16x8_t __a) { + return (int8x16_t)__a; } +__ai int8x16_t vreinterpretq_s8_u32(uint32x4_t __a) { + return (int8x16_t)__a; } +__ai int8x16_t vreinterpretq_s8_u64(uint64x2_t __a) { + return (int8x16_t)__a; } +__ai int8x16_t vreinterpretq_s8_f16(float16x8_t __a) { + return (int8x16_t)__a; } +__ai int8x16_t vreinterpretq_s8_f32(float32x4_t __a) { + return (int8x16_t)__a; } +__ai int8x16_t vreinterpretq_s8_p8(poly8x16_t __a) { + return (int8x16_t)__a; } +__ai int8x16_t vreinterpretq_s8_p16(poly16x8_t __a) { + return (int8x16_t)__a; } +__ai int16x8_t vreinterpretq_s16_s8(int8x16_t __a) { + return (int16x8_t)__a; } +__ai int16x8_t vreinterpretq_s16_s32(int32x4_t __a) { + return (int16x8_t)__a; } +__ai int16x8_t vreinterpretq_s16_s64(int64x2_t __a) { + return (int16x8_t)__a; } +__ai int16x8_t vreinterpretq_s16_u8(uint8x16_t __a) { + return (int16x8_t)__a; } +__ai int16x8_t vreinterpretq_s16_u16(uint16x8_t __a) { + return (int16x8_t)__a; } +__ai int16x8_t vreinterpretq_s16_u32(uint32x4_t __a) { + return (int16x8_t)__a; } +__ai int16x8_t vreinterpretq_s16_u64(uint64x2_t __a) { + return (int16x8_t)__a; } +__ai int16x8_t vreinterpretq_s16_f16(float16x8_t __a) { + return (int16x8_t)__a; } +__ai int16x8_t vreinterpretq_s16_f32(float32x4_t __a) { + return (int16x8_t)__a; } +__ai int16x8_t vreinterpretq_s16_p8(poly8x16_t __a) { + return (int16x8_t)__a; } +__ai int16x8_t vreinterpretq_s16_p16(poly16x8_t __a) { + return (int16x8_t)__a; } +__ai int32x4_t vreinterpretq_s32_s8(int8x16_t __a) { + return (int32x4_t)__a; } +__ai int32x4_t vreinterpretq_s32_s16(int16x8_t __a) { + return (int32x4_t)__a; } +__ai int32x4_t vreinterpretq_s32_s64(int64x2_t __a) { + return (int32x4_t)__a; } +__ai int32x4_t vreinterpretq_s32_u8(uint8x16_t __a) { + return (int32x4_t)__a; } +__ai int32x4_t vreinterpretq_s32_u16(uint16x8_t __a) { + return (int32x4_t)__a; } +__ai int32x4_t vreinterpretq_s32_u32(uint32x4_t __a) { + return (int32x4_t)__a; } +__ai int32x4_t vreinterpretq_s32_u64(uint64x2_t __a) { + return (int32x4_t)__a; } +__ai int32x4_t vreinterpretq_s32_f16(float16x8_t __a) { + return (int32x4_t)__a; } +__ai int32x4_t vreinterpretq_s32_f32(float32x4_t __a) { + return (int32x4_t)__a; } +__ai int32x4_t vreinterpretq_s32_p8(poly8x16_t __a) { + return (int32x4_t)__a; } +__ai int32x4_t vreinterpretq_s32_p16(poly16x8_t __a) { + return (int32x4_t)__a; } +__ai int64x2_t vreinterpretq_s64_s8(int8x16_t __a) { + return (int64x2_t)__a; } +__ai int64x2_t vreinterpretq_s64_s16(int16x8_t __a) { + return (int64x2_t)__a; } +__ai int64x2_t vreinterpretq_s64_s32(int32x4_t __a) { + return (int64x2_t)__a; } +__ai int64x2_t vreinterpretq_s64_u8(uint8x16_t __a) { + return (int64x2_t)__a; } +__ai int64x2_t vreinterpretq_s64_u16(uint16x8_t __a) { + return (int64x2_t)__a; } +__ai int64x2_t vreinterpretq_s64_u32(uint32x4_t __a) { + return (int64x2_t)__a; } +__ai int64x2_t vreinterpretq_s64_u64(uint64x2_t __a) { + return (int64x2_t)__a; } +__ai int64x2_t vreinterpretq_s64_f16(float16x8_t __a) { + return (int64x2_t)__a; } +__ai int64x2_t vreinterpretq_s64_f32(float32x4_t __a) { + return (int64x2_t)__a; } +__ai int64x2_t vreinterpretq_s64_p8(poly8x16_t __a) { + return (int64x2_t)__a; } +__ai int64x2_t vreinterpretq_s64_p16(poly16x8_t __a) { + return (int64x2_t)__a; } +__ai uint8x16_t vreinterpretq_u8_s8(int8x16_t __a) { + return (uint8x16_t)__a; } +__ai uint8x16_t vreinterpretq_u8_s16(int16x8_t __a) { + return (uint8x16_t)__a; } +__ai uint8x16_t vreinterpretq_u8_s32(int32x4_t __a) { + return (uint8x16_t)__a; } +__ai uint8x16_t vreinterpretq_u8_s64(int64x2_t __a) { + return (uint8x16_t)__a; } +__ai uint8x16_t vreinterpretq_u8_u16(uint16x8_t __a) { + return (uint8x16_t)__a; } +__ai uint8x16_t vreinterpretq_u8_u32(uint32x4_t __a) { + return (uint8x16_t)__a; } +__ai uint8x16_t vreinterpretq_u8_u64(uint64x2_t __a) { + return (uint8x16_t)__a; } +__ai uint8x16_t vreinterpretq_u8_f16(float16x8_t __a) { + return (uint8x16_t)__a; } +__ai uint8x16_t vreinterpretq_u8_f32(float32x4_t __a) { + return (uint8x16_t)__a; } +__ai uint8x16_t vreinterpretq_u8_p8(poly8x16_t __a) { + return (uint8x16_t)__a; } +__ai uint8x16_t vreinterpretq_u8_p16(poly16x8_t __a) { + return (uint8x16_t)__a; } +__ai uint16x8_t vreinterpretq_u16_s8(int8x16_t __a) { + return (uint16x8_t)__a; } +__ai uint16x8_t vreinterpretq_u16_s16(int16x8_t __a) { + return (uint16x8_t)__a; } +__ai uint16x8_t vreinterpretq_u16_s32(int32x4_t __a) { + return (uint16x8_t)__a; } +__ai uint16x8_t vreinterpretq_u16_s64(int64x2_t __a) { + return (uint16x8_t)__a; } +__ai uint16x8_t vreinterpretq_u16_u8(uint8x16_t __a) { + return (uint16x8_t)__a; } +__ai uint16x8_t vreinterpretq_u16_u32(uint32x4_t __a) { + return (uint16x8_t)__a; } +__ai uint16x8_t vreinterpretq_u16_u64(uint64x2_t __a) { + return (uint16x8_t)__a; } +__ai uint16x8_t vreinterpretq_u16_f16(float16x8_t __a) { + return (uint16x8_t)__a; } +__ai uint16x8_t vreinterpretq_u16_f32(float32x4_t __a) { + return (uint16x8_t)__a; } +__ai uint16x8_t vreinterpretq_u16_p8(poly8x16_t __a) { + return (uint16x8_t)__a; } +__ai uint16x8_t vreinterpretq_u16_p16(poly16x8_t __a) { + return (uint16x8_t)__a; } +__ai uint32x4_t vreinterpretq_u32_s8(int8x16_t __a) { + return (uint32x4_t)__a; } +__ai uint32x4_t vreinterpretq_u32_s16(int16x8_t __a) { + return (uint32x4_t)__a; } +__ai uint32x4_t vreinterpretq_u32_s32(int32x4_t __a) { + return (uint32x4_t)__a; } +__ai uint32x4_t vreinterpretq_u32_s64(int64x2_t __a) { + return (uint32x4_t)__a; } +__ai uint32x4_t vreinterpretq_u32_u8(uint8x16_t __a) { + return (uint32x4_t)__a; } +__ai uint32x4_t vreinterpretq_u32_u16(uint16x8_t __a) { + return (uint32x4_t)__a; } +__ai uint32x4_t vreinterpretq_u32_u64(uint64x2_t __a) { + return (uint32x4_t)__a; } +__ai uint32x4_t vreinterpretq_u32_f16(float16x8_t __a) { + return (uint32x4_t)__a; } +__ai uint32x4_t vreinterpretq_u32_f32(float32x4_t __a) { + return (uint32x4_t)__a; } +__ai uint32x4_t vreinterpretq_u32_p8(poly8x16_t __a) { + return (uint32x4_t)__a; } +__ai uint32x4_t vreinterpretq_u32_p16(poly16x8_t __a) { + return (uint32x4_t)__a; } +__ai uint64x2_t vreinterpretq_u64_s8(int8x16_t __a) { + return (uint64x2_t)__a; } +__ai uint64x2_t vreinterpretq_u64_s16(int16x8_t __a) { + return (uint64x2_t)__a; } +__ai uint64x2_t vreinterpretq_u64_s32(int32x4_t __a) { + return (uint64x2_t)__a; } +__ai uint64x2_t vreinterpretq_u64_s64(int64x2_t __a) { + return (uint64x2_t)__a; } +__ai uint64x2_t vreinterpretq_u64_u8(uint8x16_t __a) { + return (uint64x2_t)__a; } +__ai uint64x2_t vreinterpretq_u64_u16(uint16x8_t __a) { + return (uint64x2_t)__a; } +__ai uint64x2_t vreinterpretq_u64_u32(uint32x4_t __a) { + return (uint64x2_t)__a; } +__ai uint64x2_t vreinterpretq_u64_f16(float16x8_t __a) { + return (uint64x2_t)__a; } +__ai uint64x2_t vreinterpretq_u64_f32(float32x4_t __a) { + return (uint64x2_t)__a; } +__ai uint64x2_t vreinterpretq_u64_p8(poly8x16_t __a) { + return (uint64x2_t)__a; } +__ai uint64x2_t vreinterpretq_u64_p16(poly16x8_t __a) { + return (uint64x2_t)__a; } +__ai float16x8_t vreinterpretq_f16_s8(int8x16_t __a) { + return (float16x8_t)__a; } +__ai float16x8_t vreinterpretq_f16_s16(int16x8_t __a) { + return (float16x8_t)__a; } +__ai float16x8_t vreinterpretq_f16_s32(int32x4_t __a) { + return (float16x8_t)__a; } +__ai float16x8_t vreinterpretq_f16_s64(int64x2_t __a) { + return (float16x8_t)__a; } +__ai float16x8_t vreinterpretq_f16_u8(uint8x16_t __a) { + return (float16x8_t)__a; } +__ai float16x8_t vreinterpretq_f16_u16(uint16x8_t __a) { + return (float16x8_t)__a; } +__ai float16x8_t vreinterpretq_f16_u32(uint32x4_t __a) { + return (float16x8_t)__a; } +__ai float16x8_t vreinterpretq_f16_u64(uint64x2_t __a) { + return (float16x8_t)__a; } +__ai float16x8_t vreinterpretq_f16_f32(float32x4_t __a) { + return (float16x8_t)__a; } +__ai float16x8_t vreinterpretq_f16_p8(poly8x16_t __a) { + return (float16x8_t)__a; } +__ai float16x8_t vreinterpretq_f16_p16(poly16x8_t __a) { + return (float16x8_t)__a; } +__ai float32x4_t vreinterpretq_f32_s8(int8x16_t __a) { + return (float32x4_t)__a; } +__ai float32x4_t vreinterpretq_f32_s16(int16x8_t __a) { + return (float32x4_t)__a; } +__ai float32x4_t vreinterpretq_f32_s32(int32x4_t __a) { + return (float32x4_t)__a; } +__ai float32x4_t vreinterpretq_f32_s64(int64x2_t __a) { + return (float32x4_t)__a; } +__ai float32x4_t vreinterpretq_f32_u8(uint8x16_t __a) { + return (float32x4_t)__a; } +__ai float32x4_t vreinterpretq_f32_u16(uint16x8_t __a) { + return (float32x4_t)__a; } +__ai float32x4_t vreinterpretq_f32_u32(uint32x4_t __a) { + return (float32x4_t)__a; } +__ai float32x4_t vreinterpretq_f32_u64(uint64x2_t __a) { + return (float32x4_t)__a; } +__ai float32x4_t vreinterpretq_f32_f16(float16x8_t __a) { + return (float32x4_t)__a; } +__ai float32x4_t vreinterpretq_f32_p8(poly8x16_t __a) { + return (float32x4_t)__a; } +__ai float32x4_t vreinterpretq_f32_p16(poly16x8_t __a) { + return (float32x4_t)__a; } +__ai poly8x16_t vreinterpretq_p8_s8(int8x16_t __a) { + return (poly8x16_t)__a; } +__ai poly8x16_t vreinterpretq_p8_s16(int16x8_t __a) { + return (poly8x16_t)__a; } +__ai poly8x16_t vreinterpretq_p8_s32(int32x4_t __a) { + return (poly8x16_t)__a; } +__ai poly8x16_t vreinterpretq_p8_s64(int64x2_t __a) { + return (poly8x16_t)__a; } +__ai poly8x16_t vreinterpretq_p8_u8(uint8x16_t __a) { + return (poly8x16_t)__a; } +__ai poly8x16_t vreinterpretq_p8_u16(uint16x8_t __a) { + return (poly8x16_t)__a; } +__ai poly8x16_t vreinterpretq_p8_u32(uint32x4_t __a) { + return (poly8x16_t)__a; } +__ai poly8x16_t vreinterpretq_p8_u64(uint64x2_t __a) { + return (poly8x16_t)__a; } +__ai poly8x16_t vreinterpretq_p8_f16(float16x8_t __a) { + return (poly8x16_t)__a; } +__ai poly8x16_t vreinterpretq_p8_f32(float32x4_t __a) { + return (poly8x16_t)__a; } +__ai poly8x16_t vreinterpretq_p8_p16(poly16x8_t __a) { + return (poly8x16_t)__a; } +__ai poly16x8_t vreinterpretq_p16_s8(int8x16_t __a) { + return (poly16x8_t)__a; } +__ai poly16x8_t vreinterpretq_p16_s16(int16x8_t __a) { + return (poly16x8_t)__a; } +__ai poly16x8_t vreinterpretq_p16_s32(int32x4_t __a) { + return (poly16x8_t)__a; } +__ai poly16x8_t vreinterpretq_p16_s64(int64x2_t __a) { + return (poly16x8_t)__a; } +__ai poly16x8_t vreinterpretq_p16_u8(uint8x16_t __a) { + return (poly16x8_t)__a; } +__ai poly16x8_t vreinterpretq_p16_u16(uint16x8_t __a) { + return (poly16x8_t)__a; } +__ai poly16x8_t vreinterpretq_p16_u32(uint32x4_t __a) { + return (poly16x8_t)__a; } +__ai poly16x8_t vreinterpretq_p16_u64(uint64x2_t __a) { + return (poly16x8_t)__a; } +__ai poly16x8_t vreinterpretq_p16_f16(float16x8_t __a) { + return (poly16x8_t)__a; } +__ai poly16x8_t vreinterpretq_p16_f32(float32x4_t __a) { + return (poly16x8_t)__a; } +__ai poly16x8_t vreinterpretq_p16_p8(poly8x16_t __a) { + return (poly16x8_t)__a; } + +__ai int8x8_t vrev16_s8(int8x8_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2, 5, 4, 7, 6); } +__ai uint8x8_t vrev16_u8(uint8x8_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2, 5, 4, 7, 6); } +__ai poly8x8_t vrev16_p8(poly8x8_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2, 5, 4, 7, 6); } +__ai int8x16_t vrev16q_s8(int8x16_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); } +__ai uint8x16_t vrev16q_u8(uint8x16_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); } +__ai poly8x16_t vrev16q_p8(poly8x16_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14); } + +__ai int8x8_t vrev32_s8(int8x8_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0, 7, 6, 5, 4); } +__ai int16x4_t vrev32_s16(int16x4_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2); } +__ai uint8x8_t vrev32_u8(uint8x8_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0, 7, 6, 5, 4); } +__ai uint16x4_t vrev32_u16(uint16x4_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2); } +__ai poly8x8_t vrev32_p8(poly8x8_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0, 7, 6, 5, 4); } +__ai poly16x4_t vrev32_p16(poly16x4_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2); } +__ai int8x16_t vrev32q_s8(int8x16_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12); } +__ai int16x8_t vrev32q_s16(int16x8_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2, 5, 4, 7, 6); } +__ai uint8x16_t vrev32q_u8(uint8x16_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12); } +__ai uint16x8_t vrev32q_u16(uint16x8_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2, 5, 4, 7, 6); } +__ai poly8x16_t vrev32q_p8(poly8x16_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12); } +__ai poly16x8_t vrev32q_p16(poly16x8_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2, 5, 4, 7, 6); } + +__ai int8x8_t vrev64_s8(int8x8_t __a) { + return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0); } +__ai int16x4_t vrev64_s16(int16x4_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0); } +__ai int32x2_t vrev64_s32(int32x2_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0); } +__ai uint8x8_t vrev64_u8(uint8x8_t __a) { + return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0); } +__ai uint16x4_t vrev64_u16(uint16x4_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0); } +__ai uint32x2_t vrev64_u32(uint32x2_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0); } +__ai poly8x8_t vrev64_p8(poly8x8_t __a) { + return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0); } +__ai poly16x4_t vrev64_p16(poly16x4_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0); } +__ai float32x2_t vrev64_f32(float32x2_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0); } +__ai int8x16_t vrev64q_s8(int8x16_t __a) { + return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8); } +__ai int16x8_t vrev64q_s16(int16x8_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0, 7, 6, 5, 4); } +__ai int32x4_t vrev64q_s32(int32x4_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2); } +__ai uint8x16_t vrev64q_u8(uint8x16_t __a) { + return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8); } +__ai uint16x8_t vrev64q_u16(uint16x8_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0, 7, 6, 5, 4); } +__ai uint32x4_t vrev64q_u32(uint32x4_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2); } +__ai poly8x16_t vrev64q_p8(poly8x16_t __a) { + return __builtin_shufflevector(__a, __a, 7, 6, 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10, 9, 8); } +__ai poly16x8_t vrev64q_p16(poly16x8_t __a) { + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0, 7, 6, 5, 4); } +__ai float32x4_t vrev64q_f32(float32x4_t __a) { + return __builtin_shufflevector(__a, __a, 1, 0, 3, 2); } + +__ai int8x8_t vrhadd_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vrhadd_v(__a, __b, 0); } +__ai int16x4_t vrhadd_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vrhadd_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vrhadd_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vrhadd_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai uint8x8_t vrhadd_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vrhadd_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vrhadd_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vrhadd_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vrhadd_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vrhadd_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai int8x16_t vrhaddq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vrhaddq_v(__a, __b, 32); } +__ai int16x8_t vrhaddq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vrhaddq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vrhaddq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vrhaddq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai uint8x16_t vrhaddq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vrhaddq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vrhaddq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vrhaddq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vrhaddq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vrhaddq_v((int8x16_t)__a, (int8x16_t)__b, 50); } + +__ai int8x8_t vrshl_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vrshl_v(__a, __b, 0); } +__ai int16x4_t vrshl_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vrshl_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vrshl_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vrshl_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai int64x1_t vrshl_s64(int64x1_t __a, int64x1_t __b) { + return (int64x1_t)__builtin_neon_vrshl_v((int8x8_t)__a, (int8x8_t)__b, 3); } +__ai uint8x8_t vrshl_u8(uint8x8_t __a, int8x8_t __b) { + return (uint8x8_t)__builtin_neon_vrshl_v((int8x8_t)__a, __b, 16); } +__ai uint16x4_t vrshl_u16(uint16x4_t __a, int16x4_t __b) { + return (uint16x4_t)__builtin_neon_vrshl_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vrshl_u32(uint32x2_t __a, int32x2_t __b) { + return (uint32x2_t)__builtin_neon_vrshl_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint64x1_t vrshl_u64(uint64x1_t __a, int64x1_t __b) { + return (uint64x1_t)__builtin_neon_vrshl_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai int8x16_t vrshlq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vrshlq_v(__a, __b, 32); } +__ai int16x8_t vrshlq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vrshlq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vrshlq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vrshlq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai int64x2_t vrshlq_s64(int64x2_t __a, int64x2_t __b) { + return (int64x2_t)__builtin_neon_vrshlq_v((int8x16_t)__a, (int8x16_t)__b, 35); } +__ai uint8x16_t vrshlq_u8(uint8x16_t __a, int8x16_t __b) { + return (uint8x16_t)__builtin_neon_vrshlq_v((int8x16_t)__a, __b, 48); } +__ai uint16x8_t vrshlq_u16(uint16x8_t __a, int16x8_t __b) { + return (uint16x8_t)__builtin_neon_vrshlq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vrshlq_u32(uint32x4_t __a, int32x4_t __b) { + return (uint32x4_t)__builtin_neon_vrshlq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai uint64x2_t vrshlq_u64(uint64x2_t __a, int64x2_t __b) { + return (uint64x2_t)__builtin_neon_vrshlq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +#define vrshrn_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (int8x8_t)__builtin_neon_vrshrn_n_v((int8x16_t)__a, __b, 0); }) +#define vrshrn_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (int16x4_t)__builtin_neon_vrshrn_n_v((int8x16_t)__a, __b, 1); }) +#define vrshrn_n_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (int32x2_t)__builtin_neon_vrshrn_n_v((int8x16_t)__a, __b, 2); }) +#define vrshrn_n_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + (uint8x8_t)__builtin_neon_vrshrn_n_v((int8x16_t)__a, __b, 16); }) +#define vrshrn_n_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + (uint16x4_t)__builtin_neon_vrshrn_n_v((int8x16_t)__a, __b, 17); }) +#define vrshrn_n_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vrshrn_n_v((int8x16_t)__a, __b, 18); }) + +#define vrshr_n_s8(a, __b) __extension__ ({ \ + int8x8_t __a = (a); \ + (int8x8_t)__builtin_neon_vrshr_n_v(__a, __b, 0); }) +#define vrshr_n_s16(a, __b) __extension__ ({ \ + int16x4_t __a = (a); \ + (int16x4_t)__builtin_neon_vrshr_n_v((int8x8_t)__a, __b, 1); }) +#define vrshr_n_s32(a, __b) __extension__ ({ \ + int32x2_t __a = (a); \ + (int32x2_t)__builtin_neon_vrshr_n_v((int8x8_t)__a, __b, 2); }) +#define vrshr_n_s64(a, __b) __extension__ ({ \ + int64x1_t __a = (a); \ + (int64x1_t)__builtin_neon_vrshr_n_v((int8x8_t)__a, __b, 3); }) +#define vrshr_n_u8(a, __b) __extension__ ({ \ + uint8x8_t __a = (a); \ + (uint8x8_t)__builtin_neon_vrshr_n_v((int8x8_t)__a, __b, 16); }) +#define vrshr_n_u16(a, __b) __extension__ ({ \ + uint16x4_t __a = (a); \ + (uint16x4_t)__builtin_neon_vrshr_n_v((int8x8_t)__a, __b, 17); }) +#define vrshr_n_u32(a, __b) __extension__ ({ \ + uint32x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vrshr_n_v((int8x8_t)__a, __b, 18); }) +#define vrshr_n_u64(a, __b) __extension__ ({ \ + uint64x1_t __a = (a); \ + (uint64x1_t)__builtin_neon_vrshr_n_v((int8x8_t)__a, __b, 19); }) +#define vrshrq_n_s8(a, __b) __extension__ ({ \ + int8x16_t __a = (a); \ + (int8x16_t)__builtin_neon_vrshrq_n_v(__a, __b, 32); }) +#define vrshrq_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (int16x8_t)__builtin_neon_vrshrq_n_v((int8x16_t)__a, __b, 33); }) +#define vrshrq_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (int32x4_t)__builtin_neon_vrshrq_n_v((int8x16_t)__a, __b, 34); }) +#define vrshrq_n_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (int64x2_t)__builtin_neon_vrshrq_n_v((int8x16_t)__a, __b, 35); }) +#define vrshrq_n_u8(a, __b) __extension__ ({ \ + uint8x16_t __a = (a); \ + (uint8x16_t)__builtin_neon_vrshrq_n_v((int8x16_t)__a, __b, 48); }) +#define vrshrq_n_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + (uint16x8_t)__builtin_neon_vrshrq_n_v((int8x16_t)__a, __b, 49); }) +#define vrshrq_n_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + (uint32x4_t)__builtin_neon_vrshrq_n_v((int8x16_t)__a, __b, 50); }) +#define vrshrq_n_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + (uint64x2_t)__builtin_neon_vrshrq_n_v((int8x16_t)__a, __b, 51); }) + +__ai float32x2_t vrsqrte_f32(float32x2_t __a) { + return (float32x2_t)__builtin_neon_vrsqrte_v((int8x8_t)__a, 8); } +__ai uint32x2_t vrsqrte_u32(uint32x2_t __a) { + return (uint32x2_t)__builtin_neon_vrsqrte_v((int8x8_t)__a, 18); } +__ai float32x4_t vrsqrteq_f32(float32x4_t __a) { + return (float32x4_t)__builtin_neon_vrsqrteq_v((int8x16_t)__a, 40); } +__ai uint32x4_t vrsqrteq_u32(uint32x4_t __a) { + return (uint32x4_t)__builtin_neon_vrsqrteq_v((int8x16_t)__a, 50); } + +__ai float32x2_t vrsqrts_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vrsqrts_v((int8x8_t)__a, (int8x8_t)__b, 8); } +__ai float32x4_t vrsqrtsq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vrsqrtsq_v((int8x16_t)__a, (int8x16_t)__b, 40); } + +#define vrsra_n_s8(a, b, __c) __extension__ ({ \ + int8x8_t __a = (a); int8x8_t __b = (b); \ + (int8x8_t)__builtin_neon_vrsra_n_v(__a, __b, __c, 0); }) +#define vrsra_n_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); \ + (int16x4_t)__builtin_neon_vrsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 1); }) +#define vrsra_n_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); \ + (int32x2_t)__builtin_neon_vrsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 2); }) +#define vrsra_n_s64(a, b, __c) __extension__ ({ \ + int64x1_t __a = (a); int64x1_t __b = (b); \ + (int64x1_t)__builtin_neon_vrsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 3); }) +#define vrsra_n_u8(a, b, __c) __extension__ ({ \ + uint8x8_t __a = (a); uint8x8_t __b = (b); \ + (uint8x8_t)__builtin_neon_vrsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 16); }) +#define vrsra_n_u16(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint16x4_t __b = (b); \ + (uint16x4_t)__builtin_neon_vrsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 17); }) +#define vrsra_n_u32(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint32x2_t __b = (b); \ + (uint32x2_t)__builtin_neon_vrsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 18); }) +#define vrsra_n_u64(a, b, __c) __extension__ ({ \ + uint64x1_t __a = (a); uint64x1_t __b = (b); \ + (uint64x1_t)__builtin_neon_vrsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 19); }) +#define vrsraq_n_s8(a, b, __c) __extension__ ({ \ + int8x16_t __a = (a); int8x16_t __b = (b); \ + (int8x16_t)__builtin_neon_vrsraq_n_v(__a, __b, __c, 32); }) +#define vrsraq_n_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); \ + (int16x8_t)__builtin_neon_vrsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 33); }) +#define vrsraq_n_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); \ + (int32x4_t)__builtin_neon_vrsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 34); }) +#define vrsraq_n_s64(a, b, __c) __extension__ ({ \ + int64x2_t __a = (a); int64x2_t __b = (b); \ + (int64x2_t)__builtin_neon_vrsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 35); }) +#define vrsraq_n_u8(a, b, __c) __extension__ ({ \ + uint8x16_t __a = (a); uint8x16_t __b = (b); \ + (uint8x16_t)__builtin_neon_vrsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 48); }) +#define vrsraq_n_u16(a, b, __c) __extension__ ({ \ + uint16x8_t __a = (a); uint16x8_t __b = (b); \ + (uint16x8_t)__builtin_neon_vrsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 49); }) +#define vrsraq_n_u32(a, b, __c) __extension__ ({ \ + uint32x4_t __a = (a); uint32x4_t __b = (b); \ + (uint32x4_t)__builtin_neon_vrsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 50); }) +#define vrsraq_n_u64(a, b, __c) __extension__ ({ \ + uint64x2_t __a = (a); uint64x2_t __b = (b); \ + (uint64x2_t)__builtin_neon_vrsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 51); }) + +__ai int8x8_t vrsubhn_s16(int16x8_t __a, int16x8_t __b) { + return (int8x8_t)__builtin_neon_vrsubhn_v((int8x16_t)__a, (int8x16_t)__b, 0); } +__ai int16x4_t vrsubhn_s32(int32x4_t __a, int32x4_t __b) { + return (int16x4_t)__builtin_neon_vrsubhn_v((int8x16_t)__a, (int8x16_t)__b, 1); } +__ai int32x2_t vrsubhn_s64(int64x2_t __a, int64x2_t __b) { + return (int32x2_t)__builtin_neon_vrsubhn_v((int8x16_t)__a, (int8x16_t)__b, 2); } +__ai uint8x8_t vrsubhn_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint8x8_t)__builtin_neon_vrsubhn_v((int8x16_t)__a, (int8x16_t)__b, 16); } +__ai uint16x4_t vrsubhn_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint16x4_t)__builtin_neon_vrsubhn_v((int8x16_t)__a, (int8x16_t)__b, 17); } +__ai uint32x2_t vrsubhn_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint32x2_t)__builtin_neon_vrsubhn_v((int8x16_t)__a, (int8x16_t)__b, 18); } + +#define vset_lane_u8(a, b, __c) __extension__ ({ \ + uint8_t __a = (a); uint8x8_t __b = (b); \ + (uint8x8_t)__builtin_neon_vset_lane_i8(__a, (int8x8_t)__b, __c); }) +#define vset_lane_u16(a, b, __c) __extension__ ({ \ + uint16_t __a = (a); uint16x4_t __b = (b); \ + (uint16x4_t)__builtin_neon_vset_lane_i16(__a, (int16x4_t)__b, __c); }) +#define vset_lane_u32(a, b, __c) __extension__ ({ \ + uint32_t __a = (a); uint32x2_t __b = (b); \ + (uint32x2_t)__builtin_neon_vset_lane_i32(__a, (int32x2_t)__b, __c); }) +#define vset_lane_s8(a, b, __c) __extension__ ({ \ + int8_t __a = (a); int8x8_t __b = (b); \ + (int8x8_t)__builtin_neon_vset_lane_i8(__a, __b, __c); }) +#define vset_lane_s16(a, b, __c) __extension__ ({ \ + int16_t __a = (a); int16x4_t __b = (b); \ + (int16x4_t)__builtin_neon_vset_lane_i16(__a, __b, __c); }) +#define vset_lane_s32(a, b, __c) __extension__ ({ \ + int32_t __a = (a); int32x2_t __b = (b); \ + (int32x2_t)__builtin_neon_vset_lane_i32(__a, __b, __c); }) +#define vset_lane_p8(a, b, __c) __extension__ ({ \ + poly8_t __a = (a); poly8x8_t __b = (b); \ + (poly8x8_t)__builtin_neon_vset_lane_i8(__a, (int8x8_t)__b, __c); }) +#define vset_lane_p16(a, b, __c) __extension__ ({ \ + poly16_t __a = (a); poly16x4_t __b = (b); \ + (poly16x4_t)__builtin_neon_vset_lane_i16(__a, (int16x4_t)__b, __c); }) +#define vset_lane_f32(a, b, __c) __extension__ ({ \ + float32_t __a = (a); float32x2_t __b = (b); \ + (float32x2_t)__builtin_neon_vset_lane_f32(__a, __b, __c); }) +#define vsetq_lane_u8(a, b, __c) __extension__ ({ \ + uint8_t __a = (a); uint8x16_t __b = (b); \ + (uint8x16_t)__builtin_neon_vsetq_lane_i8(__a, (int8x16_t)__b, __c); }) +#define vsetq_lane_u16(a, b, __c) __extension__ ({ \ + uint16_t __a = (a); uint16x8_t __b = (b); \ + (uint16x8_t)__builtin_neon_vsetq_lane_i16(__a, (int16x8_t)__b, __c); }) +#define vsetq_lane_u32(a, b, __c) __extension__ ({ \ + uint32_t __a = (a); uint32x4_t __b = (b); \ + (uint32x4_t)__builtin_neon_vsetq_lane_i32(__a, (int32x4_t)__b, __c); }) +#define vsetq_lane_s8(a, b, __c) __extension__ ({ \ + int8_t __a = (a); int8x16_t __b = (b); \ + (int8x16_t)__builtin_neon_vsetq_lane_i8(__a, __b, __c); }) +#define vsetq_lane_s16(a, b, __c) __extension__ ({ \ + int16_t __a = (a); int16x8_t __b = (b); \ + (int16x8_t)__builtin_neon_vsetq_lane_i16(__a, __b, __c); }) +#define vsetq_lane_s32(a, b, __c) __extension__ ({ \ + int32_t __a = (a); int32x4_t __b = (b); \ + (int32x4_t)__builtin_neon_vsetq_lane_i32(__a, __b, __c); }) +#define vsetq_lane_p8(a, b, __c) __extension__ ({ \ + poly8_t __a = (a); poly8x16_t __b = (b); \ + (poly8x16_t)__builtin_neon_vsetq_lane_i8(__a, (int8x16_t)__b, __c); }) +#define vsetq_lane_p16(a, b, __c) __extension__ ({ \ + poly16_t __a = (a); poly16x8_t __b = (b); \ + (poly16x8_t)__builtin_neon_vsetq_lane_i16(__a, (int16x8_t)__b, __c); }) +#define vsetq_lane_f32(a, b, __c) __extension__ ({ \ + float32_t __a = (a); float32x4_t __b = (b); \ + (float32x4_t)__builtin_neon_vsetq_lane_f32(__a, __b, __c); }) +#define vset_lane_s64(a, b, __c) __extension__ ({ \ + int64_t __a = (a); int64x1_t __b = (b); \ + (int64x1_t)__builtin_neon_vset_lane_i64(__a, __b, __c); }) +#define vset_lane_u64(a, b, __c) __extension__ ({ \ + uint64_t __a = (a); uint64x1_t __b = (b); \ + (uint64x1_t)__builtin_neon_vset_lane_i64(__a, (int64x1_t)__b, __c); }) +#define vsetq_lane_s64(a, b, __c) __extension__ ({ \ + int64_t __a = (a); int64x2_t __b = (b); \ + (int64x2_t)__builtin_neon_vsetq_lane_i64(__a, __b, __c); }) +#define vsetq_lane_u64(a, b, __c) __extension__ ({ \ + uint64_t __a = (a); uint64x2_t __b = (b); \ + (uint64x2_t)__builtin_neon_vsetq_lane_i64(__a, (int64x2_t)__b, __c); }) + +__ai int8x8_t vshl_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vshl_v(__a, __b, 0); } +__ai int16x4_t vshl_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vshl_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vshl_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vshl_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai int64x1_t vshl_s64(int64x1_t __a, int64x1_t __b) { + return (int64x1_t)__builtin_neon_vshl_v((int8x8_t)__a, (int8x8_t)__b, 3); } +__ai uint8x8_t vshl_u8(uint8x8_t __a, int8x8_t __b) { + return (uint8x8_t)__builtin_neon_vshl_v((int8x8_t)__a, __b, 16); } +__ai uint16x4_t vshl_u16(uint16x4_t __a, int16x4_t __b) { + return (uint16x4_t)__builtin_neon_vshl_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vshl_u32(uint32x2_t __a, int32x2_t __b) { + return (uint32x2_t)__builtin_neon_vshl_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint64x1_t vshl_u64(uint64x1_t __a, int64x1_t __b) { + return (uint64x1_t)__builtin_neon_vshl_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai int8x16_t vshlq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vshlq_v(__a, __b, 32); } +__ai int16x8_t vshlq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vshlq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vshlq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vshlq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai int64x2_t vshlq_s64(int64x2_t __a, int64x2_t __b) { + return (int64x2_t)__builtin_neon_vshlq_v((int8x16_t)__a, (int8x16_t)__b, 35); } +__ai uint8x16_t vshlq_u8(uint8x16_t __a, int8x16_t __b) { + return (uint8x16_t)__builtin_neon_vshlq_v((int8x16_t)__a, __b, 48); } +__ai uint16x8_t vshlq_u16(uint16x8_t __a, int16x8_t __b) { + return (uint16x8_t)__builtin_neon_vshlq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vshlq_u32(uint32x4_t __a, int32x4_t __b) { + return (uint32x4_t)__builtin_neon_vshlq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai uint64x2_t vshlq_u64(uint64x2_t __a, int64x2_t __b) { + return (uint64x2_t)__builtin_neon_vshlq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +#define vshll_n_s8(a, __b) __extension__ ({ \ + int8x8_t __a = (a); \ + (int16x8_t)__builtin_neon_vshll_n_v(__a, __b, 33); }) +#define vshll_n_s16(a, __b) __extension__ ({ \ + int16x4_t __a = (a); \ + (int32x4_t)__builtin_neon_vshll_n_v((int8x8_t)__a, __b, 34); }) +#define vshll_n_s32(a, __b) __extension__ ({ \ + int32x2_t __a = (a); \ + (int64x2_t)__builtin_neon_vshll_n_v((int8x8_t)__a, __b, 35); }) +#define vshll_n_u8(a, __b) __extension__ ({ \ + uint8x8_t __a = (a); \ + (uint16x8_t)__builtin_neon_vshll_n_v((int8x8_t)__a, __b, 49); }) +#define vshll_n_u16(a, __b) __extension__ ({ \ + uint16x4_t __a = (a); \ + (uint32x4_t)__builtin_neon_vshll_n_v((int8x8_t)__a, __b, 50); }) +#define vshll_n_u32(a, __b) __extension__ ({ \ + uint32x2_t __a = (a); \ + (uint64x2_t)__builtin_neon_vshll_n_v((int8x8_t)__a, __b, 51); }) + +#define vshl_n_s8(a, __b) __extension__ ({ \ + int8x8_t __a = (a); \ + (int8x8_t)__builtin_neon_vshl_n_v(__a, __b, 0); }) +#define vshl_n_s16(a, __b) __extension__ ({ \ + int16x4_t __a = (a); \ + (int16x4_t)__builtin_neon_vshl_n_v((int8x8_t)__a, __b, 1); }) +#define vshl_n_s32(a, __b) __extension__ ({ \ + int32x2_t __a = (a); \ + (int32x2_t)__builtin_neon_vshl_n_v((int8x8_t)__a, __b, 2); }) +#define vshl_n_s64(a, __b) __extension__ ({ \ + int64x1_t __a = (a); \ + (int64x1_t)__builtin_neon_vshl_n_v((int8x8_t)__a, __b, 3); }) +#define vshl_n_u8(a, __b) __extension__ ({ \ + uint8x8_t __a = (a); \ + (uint8x8_t)__builtin_neon_vshl_n_v((int8x8_t)__a, __b, 16); }) +#define vshl_n_u16(a, __b) __extension__ ({ \ + uint16x4_t __a = (a); \ + (uint16x4_t)__builtin_neon_vshl_n_v((int8x8_t)__a, __b, 17); }) +#define vshl_n_u32(a, __b) __extension__ ({ \ + uint32x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vshl_n_v((int8x8_t)__a, __b, 18); }) +#define vshl_n_u64(a, __b) __extension__ ({ \ + uint64x1_t __a = (a); \ + (uint64x1_t)__builtin_neon_vshl_n_v((int8x8_t)__a, __b, 19); }) +#define vshlq_n_s8(a, __b) __extension__ ({ \ + int8x16_t __a = (a); \ + (int8x16_t)__builtin_neon_vshlq_n_v(__a, __b, 32); }) +#define vshlq_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (int16x8_t)__builtin_neon_vshlq_n_v((int8x16_t)__a, __b, 33); }) +#define vshlq_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (int32x4_t)__builtin_neon_vshlq_n_v((int8x16_t)__a, __b, 34); }) +#define vshlq_n_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (int64x2_t)__builtin_neon_vshlq_n_v((int8x16_t)__a, __b, 35); }) +#define vshlq_n_u8(a, __b) __extension__ ({ \ + uint8x16_t __a = (a); \ + (uint8x16_t)__builtin_neon_vshlq_n_v((int8x16_t)__a, __b, 48); }) +#define vshlq_n_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + (uint16x8_t)__builtin_neon_vshlq_n_v((int8x16_t)__a, __b, 49); }) +#define vshlq_n_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + (uint32x4_t)__builtin_neon_vshlq_n_v((int8x16_t)__a, __b, 50); }) +#define vshlq_n_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + (uint64x2_t)__builtin_neon_vshlq_n_v((int8x16_t)__a, __b, 51); }) + +#define vshrn_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (int8x8_t)__builtin_neon_vshrn_n_v((int8x16_t)__a, __b, 0); }) +#define vshrn_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (int16x4_t)__builtin_neon_vshrn_n_v((int8x16_t)__a, __b, 1); }) +#define vshrn_n_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (int32x2_t)__builtin_neon_vshrn_n_v((int8x16_t)__a, __b, 2); }) +#define vshrn_n_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + (uint8x8_t)__builtin_neon_vshrn_n_v((int8x16_t)__a, __b, 16); }) +#define vshrn_n_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + (uint16x4_t)__builtin_neon_vshrn_n_v((int8x16_t)__a, __b, 17); }) +#define vshrn_n_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vshrn_n_v((int8x16_t)__a, __b, 18); }) + +#define vshr_n_s8(a, __b) __extension__ ({ \ + int8x8_t __a = (a); \ + (int8x8_t)__builtin_neon_vshr_n_v(__a, __b, 0); }) +#define vshr_n_s16(a, __b) __extension__ ({ \ + int16x4_t __a = (a); \ + (int16x4_t)__builtin_neon_vshr_n_v((int8x8_t)__a, __b, 1); }) +#define vshr_n_s32(a, __b) __extension__ ({ \ + int32x2_t __a = (a); \ + (int32x2_t)__builtin_neon_vshr_n_v((int8x8_t)__a, __b, 2); }) +#define vshr_n_s64(a, __b) __extension__ ({ \ + int64x1_t __a = (a); \ + (int64x1_t)__builtin_neon_vshr_n_v((int8x8_t)__a, __b, 3); }) +#define vshr_n_u8(a, __b) __extension__ ({ \ + uint8x8_t __a = (a); \ + (uint8x8_t)__builtin_neon_vshr_n_v((int8x8_t)__a, __b, 16); }) +#define vshr_n_u16(a, __b) __extension__ ({ \ + uint16x4_t __a = (a); \ + (uint16x4_t)__builtin_neon_vshr_n_v((int8x8_t)__a, __b, 17); }) +#define vshr_n_u32(a, __b) __extension__ ({ \ + uint32x2_t __a = (a); \ + (uint32x2_t)__builtin_neon_vshr_n_v((int8x8_t)__a, __b, 18); }) +#define vshr_n_u64(a, __b) __extension__ ({ \ + uint64x1_t __a = (a); \ + (uint64x1_t)__builtin_neon_vshr_n_v((int8x8_t)__a, __b, 19); }) +#define vshrq_n_s8(a, __b) __extension__ ({ \ + int8x16_t __a = (a); \ + (int8x16_t)__builtin_neon_vshrq_n_v(__a, __b, 32); }) +#define vshrq_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (int16x8_t)__builtin_neon_vshrq_n_v((int8x16_t)__a, __b, 33); }) +#define vshrq_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (int32x4_t)__builtin_neon_vshrq_n_v((int8x16_t)__a, __b, 34); }) +#define vshrq_n_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (int64x2_t)__builtin_neon_vshrq_n_v((int8x16_t)__a, __b, 35); }) +#define vshrq_n_u8(a, __b) __extension__ ({ \ + uint8x16_t __a = (a); \ + (uint8x16_t)__builtin_neon_vshrq_n_v((int8x16_t)__a, __b, 48); }) +#define vshrq_n_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + (uint16x8_t)__builtin_neon_vshrq_n_v((int8x16_t)__a, __b, 49); }) +#define vshrq_n_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + (uint32x4_t)__builtin_neon_vshrq_n_v((int8x16_t)__a, __b, 50); }) +#define vshrq_n_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + (uint64x2_t)__builtin_neon_vshrq_n_v((int8x16_t)__a, __b, 51); }) + +#define vsli_n_s8(a, b, __c) __extension__ ({ \ + int8x8_t __a = (a); int8x8_t __b = (b); \ + (int8x8_t)__builtin_neon_vsli_n_v(__a, __b, __c, 0); }) +#define vsli_n_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); \ + (int16x4_t)__builtin_neon_vsli_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 1); }) +#define vsli_n_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); \ + (int32x2_t)__builtin_neon_vsli_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 2); }) +#define vsli_n_s64(a, b, __c) __extension__ ({ \ + int64x1_t __a = (a); int64x1_t __b = (b); \ + (int64x1_t)__builtin_neon_vsli_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 3); }) +#define vsli_n_u8(a, b, __c) __extension__ ({ \ + uint8x8_t __a = (a); uint8x8_t __b = (b); \ + (uint8x8_t)__builtin_neon_vsli_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 16); }) +#define vsli_n_u16(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint16x4_t __b = (b); \ + (uint16x4_t)__builtin_neon_vsli_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 17); }) +#define vsli_n_u32(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint32x2_t __b = (b); \ + (uint32x2_t)__builtin_neon_vsli_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 18); }) +#define vsli_n_u64(a, b, __c) __extension__ ({ \ + uint64x1_t __a = (a); uint64x1_t __b = (b); \ + (uint64x1_t)__builtin_neon_vsli_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 19); }) +#define vsli_n_p8(a, b, __c) __extension__ ({ \ + poly8x8_t __a = (a); poly8x8_t __b = (b); \ + (poly8x8_t)__builtin_neon_vsli_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 4); }) +#define vsli_n_p16(a, b, __c) __extension__ ({ \ + poly16x4_t __a = (a); poly16x4_t __b = (b); \ + (poly16x4_t)__builtin_neon_vsli_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 5); }) +#define vsliq_n_s8(a, b, __c) __extension__ ({ \ + int8x16_t __a = (a); int8x16_t __b = (b); \ + (int8x16_t)__builtin_neon_vsliq_n_v(__a, __b, __c, 32); }) +#define vsliq_n_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); \ + (int16x8_t)__builtin_neon_vsliq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 33); }) +#define vsliq_n_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); \ + (int32x4_t)__builtin_neon_vsliq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 34); }) +#define vsliq_n_s64(a, b, __c) __extension__ ({ \ + int64x2_t __a = (a); int64x2_t __b = (b); \ + (int64x2_t)__builtin_neon_vsliq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 35); }) +#define vsliq_n_u8(a, b, __c) __extension__ ({ \ + uint8x16_t __a = (a); uint8x16_t __b = (b); \ + (uint8x16_t)__builtin_neon_vsliq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 48); }) +#define vsliq_n_u16(a, b, __c) __extension__ ({ \ + uint16x8_t __a = (a); uint16x8_t __b = (b); \ + (uint16x8_t)__builtin_neon_vsliq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 49); }) +#define vsliq_n_u32(a, b, __c) __extension__ ({ \ + uint32x4_t __a = (a); uint32x4_t __b = (b); \ + (uint32x4_t)__builtin_neon_vsliq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 50); }) +#define vsliq_n_u64(a, b, __c) __extension__ ({ \ + uint64x2_t __a = (a); uint64x2_t __b = (b); \ + (uint64x2_t)__builtin_neon_vsliq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 51); }) +#define vsliq_n_p8(a, b, __c) __extension__ ({ \ + poly8x16_t __a = (a); poly8x16_t __b = (b); \ + (poly8x16_t)__builtin_neon_vsliq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 36); }) +#define vsliq_n_p16(a, b, __c) __extension__ ({ \ + poly16x8_t __a = (a); poly16x8_t __b = (b); \ + (poly16x8_t)__builtin_neon_vsliq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 37); }) + +#define vsra_n_s8(a, b, __c) __extension__ ({ \ + int8x8_t __a = (a); int8x8_t __b = (b); \ + (int8x8_t)__builtin_neon_vsra_n_v(__a, __b, __c, 0); }) +#define vsra_n_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); \ + (int16x4_t)__builtin_neon_vsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 1); }) +#define vsra_n_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); \ + (int32x2_t)__builtin_neon_vsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 2); }) +#define vsra_n_s64(a, b, __c) __extension__ ({ \ + int64x1_t __a = (a); int64x1_t __b = (b); \ + (int64x1_t)__builtin_neon_vsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 3); }) +#define vsra_n_u8(a, b, __c) __extension__ ({ \ + uint8x8_t __a = (a); uint8x8_t __b = (b); \ + (uint8x8_t)__builtin_neon_vsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 16); }) +#define vsra_n_u16(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint16x4_t __b = (b); \ + (uint16x4_t)__builtin_neon_vsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 17); }) +#define vsra_n_u32(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint32x2_t __b = (b); \ + (uint32x2_t)__builtin_neon_vsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 18); }) +#define vsra_n_u64(a, b, __c) __extension__ ({ \ + uint64x1_t __a = (a); uint64x1_t __b = (b); \ + (uint64x1_t)__builtin_neon_vsra_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 19); }) +#define vsraq_n_s8(a, b, __c) __extension__ ({ \ + int8x16_t __a = (a); int8x16_t __b = (b); \ + (int8x16_t)__builtin_neon_vsraq_n_v(__a, __b, __c, 32); }) +#define vsraq_n_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); \ + (int16x8_t)__builtin_neon_vsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 33); }) +#define vsraq_n_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); \ + (int32x4_t)__builtin_neon_vsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 34); }) +#define vsraq_n_s64(a, b, __c) __extension__ ({ \ + int64x2_t __a = (a); int64x2_t __b = (b); \ + (int64x2_t)__builtin_neon_vsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 35); }) +#define vsraq_n_u8(a, b, __c) __extension__ ({ \ + uint8x16_t __a = (a); uint8x16_t __b = (b); \ + (uint8x16_t)__builtin_neon_vsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 48); }) +#define vsraq_n_u16(a, b, __c) __extension__ ({ \ + uint16x8_t __a = (a); uint16x8_t __b = (b); \ + (uint16x8_t)__builtin_neon_vsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 49); }) +#define vsraq_n_u32(a, b, __c) __extension__ ({ \ + uint32x4_t __a = (a); uint32x4_t __b = (b); \ + (uint32x4_t)__builtin_neon_vsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 50); }) +#define vsraq_n_u64(a, b, __c) __extension__ ({ \ + uint64x2_t __a = (a); uint64x2_t __b = (b); \ + (uint64x2_t)__builtin_neon_vsraq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 51); }) + +#define vsri_n_s8(a, b, __c) __extension__ ({ \ + int8x8_t __a = (a); int8x8_t __b = (b); \ + (int8x8_t)__builtin_neon_vsri_n_v(__a, __b, __c, 0); }) +#define vsri_n_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); \ + (int16x4_t)__builtin_neon_vsri_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 1); }) +#define vsri_n_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); \ + (int32x2_t)__builtin_neon_vsri_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 2); }) +#define vsri_n_s64(a, b, __c) __extension__ ({ \ + int64x1_t __a = (a); int64x1_t __b = (b); \ + (int64x1_t)__builtin_neon_vsri_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 3); }) +#define vsri_n_u8(a, b, __c) __extension__ ({ \ + uint8x8_t __a = (a); uint8x8_t __b = (b); \ + (uint8x8_t)__builtin_neon_vsri_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 16); }) +#define vsri_n_u16(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint16x4_t __b = (b); \ + (uint16x4_t)__builtin_neon_vsri_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 17); }) +#define vsri_n_u32(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint32x2_t __b = (b); \ + (uint32x2_t)__builtin_neon_vsri_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 18); }) +#define vsri_n_u64(a, b, __c) __extension__ ({ \ + uint64x1_t __a = (a); uint64x1_t __b = (b); \ + (uint64x1_t)__builtin_neon_vsri_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 19); }) +#define vsri_n_p8(a, b, __c) __extension__ ({ \ + poly8x8_t __a = (a); poly8x8_t __b = (b); \ + (poly8x8_t)__builtin_neon_vsri_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 4); }) +#define vsri_n_p16(a, b, __c) __extension__ ({ \ + poly16x4_t __a = (a); poly16x4_t __b = (b); \ + (poly16x4_t)__builtin_neon_vsri_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 5); }) +#define vsriq_n_s8(a, b, __c) __extension__ ({ \ + int8x16_t __a = (a); int8x16_t __b = (b); \ + (int8x16_t)__builtin_neon_vsriq_n_v(__a, __b, __c, 32); }) +#define vsriq_n_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); \ + (int16x8_t)__builtin_neon_vsriq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 33); }) +#define vsriq_n_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); \ + (int32x4_t)__builtin_neon_vsriq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 34); }) +#define vsriq_n_s64(a, b, __c) __extension__ ({ \ + int64x2_t __a = (a); int64x2_t __b = (b); \ + (int64x2_t)__builtin_neon_vsriq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 35); }) +#define vsriq_n_u8(a, b, __c) __extension__ ({ \ + uint8x16_t __a = (a); uint8x16_t __b = (b); \ + (uint8x16_t)__builtin_neon_vsriq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 48); }) +#define vsriq_n_u16(a, b, __c) __extension__ ({ \ + uint16x8_t __a = (a); uint16x8_t __b = (b); \ + (uint16x8_t)__builtin_neon_vsriq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 49); }) +#define vsriq_n_u32(a, b, __c) __extension__ ({ \ + uint32x4_t __a = (a); uint32x4_t __b = (b); \ + (uint32x4_t)__builtin_neon_vsriq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 50); }) +#define vsriq_n_u64(a, b, __c) __extension__ ({ \ + uint64x2_t __a = (a); uint64x2_t __b = (b); \ + (uint64x2_t)__builtin_neon_vsriq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 51); }) +#define vsriq_n_p8(a, b, __c) __extension__ ({ \ + poly8x16_t __a = (a); poly8x16_t __b = (b); \ + (poly8x16_t)__builtin_neon_vsriq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 36); }) +#define vsriq_n_p16(a, b, __c) __extension__ ({ \ + poly16x8_t __a = (a); poly16x8_t __b = (b); \ + (poly16x8_t)__builtin_neon_vsriq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 37); }) + +#define vst1q_u8(__a, b) __extension__ ({ \ + uint8x16_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 48); }) +#define vst1q_u16(__a, b) __extension__ ({ \ + uint16x8_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 49); }) +#define vst1q_u32(__a, b) __extension__ ({ \ + uint32x4_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 50); }) +#define vst1q_u64(__a, b) __extension__ ({ \ + uint64x2_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 51); }) +#define vst1q_s8(__a, b) __extension__ ({ \ + int8x16_t __b = (b); \ + __builtin_neon_vst1q_v(__a, __b, 32); }) +#define vst1q_s16(__a, b) __extension__ ({ \ + int16x8_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 33); }) +#define vst1q_s32(__a, b) __extension__ ({ \ + int32x4_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 34); }) +#define vst1q_s64(__a, b) __extension__ ({ \ + int64x2_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 35); }) +#define vst1q_f16(__a, b) __extension__ ({ \ + float16x8_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 39); }) +#define vst1q_f32(__a, b) __extension__ ({ \ + float32x4_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 40); }) +#define vst1q_p8(__a, b) __extension__ ({ \ + poly8x16_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 36); }) +#define vst1q_p16(__a, b) __extension__ ({ \ + poly16x8_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 37); }) +#define vst1_u8(__a, b) __extension__ ({ \ + uint8x8_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 16); }) +#define vst1_u16(__a, b) __extension__ ({ \ + uint16x4_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 17); }) +#define vst1_u32(__a, b) __extension__ ({ \ + uint32x2_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 18); }) +#define vst1_u64(__a, b) __extension__ ({ \ + uint64x1_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 19); }) +#define vst1_s8(__a, b) __extension__ ({ \ + int8x8_t __b = (b); \ + __builtin_neon_vst1_v(__a, __b, 0); }) +#define vst1_s16(__a, b) __extension__ ({ \ + int16x4_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 1); }) +#define vst1_s32(__a, b) __extension__ ({ \ + int32x2_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 2); }) +#define vst1_s64(__a, b) __extension__ ({ \ + int64x1_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 3); }) +#define vst1_f16(__a, b) __extension__ ({ \ + float16x4_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 7); }) +#define vst1_f32(__a, b) __extension__ ({ \ + float32x2_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 8); }) +#define vst1_p8(__a, b) __extension__ ({ \ + poly8x8_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 4); }) +#define vst1_p16(__a, b) __extension__ ({ \ + poly16x4_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 5); }) + +#define vst1q_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x16_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 48); }) +#define vst1q_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x8_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 49); }) +#define vst1q_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x4_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 50); }) +#define vst1q_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x2_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 51); }) +#define vst1q_lane_s8(__a, b, __c) __extension__ ({ \ + int8x16_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, __b, __c, 32); }) +#define vst1q_lane_s16(__a, b, __c) __extension__ ({ \ + int16x8_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 33); }) +#define vst1q_lane_s32(__a, b, __c) __extension__ ({ \ + int32x4_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 34); }) +#define vst1q_lane_s64(__a, b, __c) __extension__ ({ \ + int64x2_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 35); }) +#define vst1q_lane_f16(__a, b, __c) __extension__ ({ \ + float16x8_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 39); }) +#define vst1q_lane_f32(__a, b, __c) __extension__ ({ \ + float32x4_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 40); }) +#define vst1q_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x16_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 36); }) +#define vst1q_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x8_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 37); }) +#define vst1_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x8_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 16); }) +#define vst1_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x4_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 17); }) +#define vst1_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x2_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 18); }) +#define vst1_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x1_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 19); }) +#define vst1_lane_s8(__a, b, __c) __extension__ ({ \ + int8x8_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, __b, __c, 0); }) +#define vst1_lane_s16(__a, b, __c) __extension__ ({ \ + int16x4_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 1); }) +#define vst1_lane_s32(__a, b, __c) __extension__ ({ \ + int32x2_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 2); }) +#define vst1_lane_s64(__a, b, __c) __extension__ ({ \ + int64x1_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 3); }) +#define vst1_lane_f16(__a, b, __c) __extension__ ({ \ + float16x4_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 7); }) +#define vst1_lane_f32(__a, b, __c) __extension__ ({ \ + float32x2_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 8); }) +#define vst1_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x8_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 4); }) +#define vst1_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x4_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 5); }) + +#define vst2q_u8(__a, b) __extension__ ({ \ + uint8x16x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 48); }) +#define vst2q_u16(__a, b) __extension__ ({ \ + uint16x8x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 49); }) +#define vst2q_u32(__a, b) __extension__ ({ \ + uint32x4x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 50); }) +#define vst2q_s8(__a, b) __extension__ ({ \ + int8x16x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, __b.val[0], __b.val[1], 32); }) +#define vst2q_s16(__a, b) __extension__ ({ \ + int16x8x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 33); }) +#define vst2q_s32(__a, b) __extension__ ({ \ + int32x4x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 34); }) +#define vst2q_f16(__a, b) __extension__ ({ \ + float16x8x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 39); }) +#define vst2q_f32(__a, b) __extension__ ({ \ + float32x4x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 40); }) +#define vst2q_p8(__a, b) __extension__ ({ \ + poly8x16x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 36); }) +#define vst2q_p16(__a, b) __extension__ ({ \ + poly16x8x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 37); }) +#define vst2_u8(__a, b) __extension__ ({ \ + uint8x8x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 16); }) +#define vst2_u16(__a, b) __extension__ ({ \ + uint16x4x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 17); }) +#define vst2_u32(__a, b) __extension__ ({ \ + uint32x2x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 18); }) +#define vst2_u64(__a, b) __extension__ ({ \ + uint64x1x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 19); }) +#define vst2_s8(__a, b) __extension__ ({ \ + int8x8x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, __b.val[0], __b.val[1], 0); }) +#define vst2_s16(__a, b) __extension__ ({ \ + int16x4x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 1); }) +#define vst2_s32(__a, b) __extension__ ({ \ + int32x2x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 2); }) +#define vst2_s64(__a, b) __extension__ ({ \ + int64x1x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 3); }) +#define vst2_f16(__a, b) __extension__ ({ \ + float16x4x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 7); }) +#define vst2_f32(__a, b) __extension__ ({ \ + float32x2x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 8); }) +#define vst2_p8(__a, b) __extension__ ({ \ + poly8x8x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 4); }) +#define vst2_p16(__a, b) __extension__ ({ \ + poly16x4x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 5); }) + +#define vst2q_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x8x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 49); }) +#define vst2q_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x4x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 50); }) +#define vst2q_lane_s16(__a, b, __c) __extension__ ({ \ + int16x8x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 33); }) +#define vst2q_lane_s32(__a, b, __c) __extension__ ({ \ + int32x4x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 34); }) +#define vst2q_lane_f16(__a, b, __c) __extension__ ({ \ + float16x8x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 39); }) +#define vst2q_lane_f32(__a, b, __c) __extension__ ({ \ + float32x4x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 40); }) +#define vst2q_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x8x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 37); }) +#define vst2_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x8x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 16); }) +#define vst2_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x4x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 17); }) +#define vst2_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x2x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 18); }) +#define vst2_lane_s8(__a, b, __c) __extension__ ({ \ + int8x8x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, __b.val[0], __b.val[1], __c, 0); }) +#define vst2_lane_s16(__a, b, __c) __extension__ ({ \ + int16x4x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 1); }) +#define vst2_lane_s32(__a, b, __c) __extension__ ({ \ + int32x2x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 2); }) +#define vst2_lane_f16(__a, b, __c) __extension__ ({ \ + float16x4x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 7); }) +#define vst2_lane_f32(__a, b, __c) __extension__ ({ \ + float32x2x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 8); }) +#define vst2_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x8x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 4); }) +#define vst2_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x4x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 5); }) + +#define vst3q_u8(__a, b) __extension__ ({ \ + uint8x16x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 48); }) +#define vst3q_u16(__a, b) __extension__ ({ \ + uint16x8x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 49); }) +#define vst3q_u32(__a, b) __extension__ ({ \ + uint32x4x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 50); }) +#define vst3q_s8(__a, b) __extension__ ({ \ + int8x16x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, __b.val[0], __b.val[1], __b.val[2], 32); }) +#define vst3q_s16(__a, b) __extension__ ({ \ + int16x8x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 33); }) +#define vst3q_s32(__a, b) __extension__ ({ \ + int32x4x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 34); }) +#define vst3q_f16(__a, b) __extension__ ({ \ + float16x8x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 39); }) +#define vst3q_f32(__a, b) __extension__ ({ \ + float32x4x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 40); }) +#define vst3q_p8(__a, b) __extension__ ({ \ + poly8x16x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 36); }) +#define vst3q_p16(__a, b) __extension__ ({ \ + poly16x8x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 37); }) +#define vst3_u8(__a, b) __extension__ ({ \ + uint8x8x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 16); }) +#define vst3_u16(__a, b) __extension__ ({ \ + uint16x4x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 17); }) +#define vst3_u32(__a, b) __extension__ ({ \ + uint32x2x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 18); }) +#define vst3_u64(__a, b) __extension__ ({ \ + uint64x1x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 19); }) +#define vst3_s8(__a, b) __extension__ ({ \ + int8x8x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, __b.val[0], __b.val[1], __b.val[2], 0); }) +#define vst3_s16(__a, b) __extension__ ({ \ + int16x4x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 1); }) +#define vst3_s32(__a, b) __extension__ ({ \ + int32x2x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 2); }) +#define vst3_s64(__a, b) __extension__ ({ \ + int64x1x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 3); }) +#define vst3_f16(__a, b) __extension__ ({ \ + float16x4x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 7); }) +#define vst3_f32(__a, b) __extension__ ({ \ + float32x2x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 8); }) +#define vst3_p8(__a, b) __extension__ ({ \ + poly8x8x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 4); }) +#define vst3_p16(__a, b) __extension__ ({ \ + poly16x4x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 5); }) + +#define vst3q_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x8x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 49); }) +#define vst3q_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x4x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 50); }) +#define vst3q_lane_s16(__a, b, __c) __extension__ ({ \ + int16x8x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 33); }) +#define vst3q_lane_s32(__a, b, __c) __extension__ ({ \ + int32x4x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 34); }) +#define vst3q_lane_f16(__a, b, __c) __extension__ ({ \ + float16x8x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 39); }) +#define vst3q_lane_f32(__a, b, __c) __extension__ ({ \ + float32x4x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 40); }) +#define vst3q_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x8x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 37); }) +#define vst3_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x8x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 16); }) +#define vst3_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x4x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 17); }) +#define vst3_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x2x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 18); }) +#define vst3_lane_s8(__a, b, __c) __extension__ ({ \ + int8x8x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, __b.val[0], __b.val[1], __b.val[2], __c, 0); }) +#define vst3_lane_s16(__a, b, __c) __extension__ ({ \ + int16x4x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 1); }) +#define vst3_lane_s32(__a, b, __c) __extension__ ({ \ + int32x2x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 2); }) +#define vst3_lane_f16(__a, b, __c) __extension__ ({ \ + float16x4x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 7); }) +#define vst3_lane_f32(__a, b, __c) __extension__ ({ \ + float32x2x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 8); }) +#define vst3_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x8x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 4); }) +#define vst3_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x4x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 5); }) + +#define vst4q_u8(__a, b) __extension__ ({ \ + uint8x16x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 48); }) +#define vst4q_u16(__a, b) __extension__ ({ \ + uint16x8x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 49); }) +#define vst4q_u32(__a, b) __extension__ ({ \ + uint32x4x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 50); }) +#define vst4q_s8(__a, b) __extension__ ({ \ + int8x16x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, __b.val[0], __b.val[1], __b.val[2], __b.val[3], 32); }) +#define vst4q_s16(__a, b) __extension__ ({ \ + int16x8x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 33); }) +#define vst4q_s32(__a, b) __extension__ ({ \ + int32x4x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 34); }) +#define vst4q_f16(__a, b) __extension__ ({ \ + float16x8x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 39); }) +#define vst4q_f32(__a, b) __extension__ ({ \ + float32x4x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 40); }) +#define vst4q_p8(__a, b) __extension__ ({ \ + poly8x16x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 36); }) +#define vst4q_p16(__a, b) __extension__ ({ \ + poly16x8x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 37); }) +#define vst4_u8(__a, b) __extension__ ({ \ + uint8x8x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 16); }) +#define vst4_u16(__a, b) __extension__ ({ \ + uint16x4x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 17); }) +#define vst4_u32(__a, b) __extension__ ({ \ + uint32x2x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 18); }) +#define vst4_u64(__a, b) __extension__ ({ \ + uint64x1x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 19); }) +#define vst4_s8(__a, b) __extension__ ({ \ + int8x8x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, __b.val[0], __b.val[1], __b.val[2], __b.val[3], 0); }) +#define vst4_s16(__a, b) __extension__ ({ \ + int16x4x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 1); }) +#define vst4_s32(__a, b) __extension__ ({ \ + int32x2x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 2); }) +#define vst4_s64(__a, b) __extension__ ({ \ + int64x1x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 3); }) +#define vst4_f16(__a, b) __extension__ ({ \ + float16x4x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 7); }) +#define vst4_f32(__a, b) __extension__ ({ \ + float32x2x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 8); }) +#define vst4_p8(__a, b) __extension__ ({ \ + poly8x8x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 4); }) +#define vst4_p16(__a, b) __extension__ ({ \ + poly16x4x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 5); }) + +#define vst4q_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x8x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 49); }) +#define vst4q_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x4x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 50); }) +#define vst4q_lane_s16(__a, b, __c) __extension__ ({ \ + int16x8x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 33); }) +#define vst4q_lane_s32(__a, b, __c) __extension__ ({ \ + int32x4x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 34); }) +#define vst4q_lane_f16(__a, b, __c) __extension__ ({ \ + float16x8x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 39); }) +#define vst4q_lane_f32(__a, b, __c) __extension__ ({ \ + float32x4x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 40); }) +#define vst4q_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x8x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 37); }) +#define vst4_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x8x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 16); }) +#define vst4_lane_u16(__a, b, __c) __extension__ ({ \ + uint16x4x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 17); }) +#define vst4_lane_u32(__a, b, __c) __extension__ ({ \ + uint32x2x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 18); }) +#define vst4_lane_s8(__a, b, __c) __extension__ ({ \ + int8x8x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, __b.val[0], __b.val[1], __b.val[2], __b.val[3], __c, 0); }) +#define vst4_lane_s16(__a, b, __c) __extension__ ({ \ + int16x4x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 1); }) +#define vst4_lane_s32(__a, b, __c) __extension__ ({ \ + int32x2x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 2); }) +#define vst4_lane_f16(__a, b, __c) __extension__ ({ \ + float16x4x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 7); }) +#define vst4_lane_f32(__a, b, __c) __extension__ ({ \ + float32x2x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 8); }) +#define vst4_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x8x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 4); }) +#define vst4_lane_p16(__a, b, __c) __extension__ ({ \ + poly16x4x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 5); }) + +__ai int8x8_t vsub_s8(int8x8_t __a, int8x8_t __b) { + return __a - __b; } +__ai int16x4_t vsub_s16(int16x4_t __a, int16x4_t __b) { + return __a - __b; } +__ai int32x2_t vsub_s32(int32x2_t __a, int32x2_t __b) { + return __a - __b; } +__ai int64x1_t vsub_s64(int64x1_t __a, int64x1_t __b) { + return __a - __b; } +__ai float32x2_t vsub_f32(float32x2_t __a, float32x2_t __b) { + return __a - __b; } +__ai uint8x8_t vsub_u8(uint8x8_t __a, uint8x8_t __b) { + return __a - __b; } +__ai uint16x4_t vsub_u16(uint16x4_t __a, uint16x4_t __b) { + return __a - __b; } +__ai uint32x2_t vsub_u32(uint32x2_t __a, uint32x2_t __b) { + return __a - __b; } +__ai uint64x1_t vsub_u64(uint64x1_t __a, uint64x1_t __b) { + return __a - __b; } +__ai int8x16_t vsubq_s8(int8x16_t __a, int8x16_t __b) { + return __a - __b; } +__ai int16x8_t vsubq_s16(int16x8_t __a, int16x8_t __b) { + return __a - __b; } +__ai int32x4_t vsubq_s32(int32x4_t __a, int32x4_t __b) { + return __a - __b; } +__ai int64x2_t vsubq_s64(int64x2_t __a, int64x2_t __b) { + return __a - __b; } +__ai float32x4_t vsubq_f32(float32x4_t __a, float32x4_t __b) { + return __a - __b; } +__ai uint8x16_t vsubq_u8(uint8x16_t __a, uint8x16_t __b) { + return __a - __b; } +__ai uint16x8_t vsubq_u16(uint16x8_t __a, uint16x8_t __b) { + return __a - __b; } +__ai uint32x4_t vsubq_u32(uint32x4_t __a, uint32x4_t __b) { + return __a - __b; } +__ai uint64x2_t vsubq_u64(uint64x2_t __a, uint64x2_t __b) { + return __a - __b; } + +__ai int8x8_t vsubhn_s16(int16x8_t __a, int16x8_t __b) { + return (int8x8_t)__builtin_neon_vsubhn_v((int8x16_t)__a, (int8x16_t)__b, 0); } +__ai int16x4_t vsubhn_s32(int32x4_t __a, int32x4_t __b) { + return (int16x4_t)__builtin_neon_vsubhn_v((int8x16_t)__a, (int8x16_t)__b, 1); } +__ai int32x2_t vsubhn_s64(int64x2_t __a, int64x2_t __b) { + return (int32x2_t)__builtin_neon_vsubhn_v((int8x16_t)__a, (int8x16_t)__b, 2); } +__ai uint8x8_t vsubhn_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint8x8_t)__builtin_neon_vsubhn_v((int8x16_t)__a, (int8x16_t)__b, 16); } +__ai uint16x4_t vsubhn_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint16x4_t)__builtin_neon_vsubhn_v((int8x16_t)__a, (int8x16_t)__b, 17); } +__ai uint32x2_t vsubhn_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint32x2_t)__builtin_neon_vsubhn_v((int8x16_t)__a, (int8x16_t)__b, 18); } + +__ai int16x8_t vsubl_s8(int8x8_t __a, int8x8_t __b) { + return vmovl_s8(__a) - vmovl_s8(__b); } +__ai int32x4_t vsubl_s16(int16x4_t __a, int16x4_t __b) { + return vmovl_s16(__a) - vmovl_s16(__b); } +__ai int64x2_t vsubl_s32(int32x2_t __a, int32x2_t __b) { + return vmovl_s32(__a) - vmovl_s32(__b); } +__ai uint16x8_t vsubl_u8(uint8x8_t __a, uint8x8_t __b) { + return vmovl_u8(__a) - vmovl_u8(__b); } +__ai uint32x4_t vsubl_u16(uint16x4_t __a, uint16x4_t __b) { + return vmovl_u16(__a) - vmovl_u16(__b); } +__ai uint64x2_t vsubl_u32(uint32x2_t __a, uint32x2_t __b) { + return vmovl_u32(__a) - vmovl_u32(__b); } + +__ai int16x8_t vsubw_s8(int16x8_t __a, int8x8_t __b) { + return __a - vmovl_s8(__b); } +__ai int32x4_t vsubw_s16(int32x4_t __a, int16x4_t __b) { + return __a - vmovl_s16(__b); } +__ai int64x2_t vsubw_s32(int64x2_t __a, int32x2_t __b) { + return __a - vmovl_s32(__b); } +__ai uint16x8_t vsubw_u8(uint16x8_t __a, uint8x8_t __b) { + return __a - vmovl_u8(__b); } +__ai uint32x4_t vsubw_u16(uint32x4_t __a, uint16x4_t __b) { + return __a - vmovl_u16(__b); } +__ai uint64x2_t vsubw_u32(uint64x2_t __a, uint32x2_t __b) { + return __a - vmovl_u32(__b); } + +__ai uint8x8_t vtbl1_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vtbl1_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai int8x8_t vtbl1_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vtbl1_v(__a, __b, 0); } +__ai poly8x8_t vtbl1_p8(poly8x8_t __a, uint8x8_t __b) { + return (poly8x8_t)__builtin_neon_vtbl1_v((int8x8_t)__a, (int8x8_t)__b, 4); } + +__ai uint8x8_t vtbl2_u8(uint8x8x2_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vtbl2_v((int8x8_t)__a.val[0], (int8x8_t)__a.val[1], (int8x8_t)__b, 16); } +__ai int8x8_t vtbl2_s8(int8x8x2_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vtbl2_v(__a.val[0], __a.val[1], __b, 0); } +__ai poly8x8_t vtbl2_p8(poly8x8x2_t __a, uint8x8_t __b) { + return (poly8x8_t)__builtin_neon_vtbl2_v((int8x8_t)__a.val[0], (int8x8_t)__a.val[1], (int8x8_t)__b, 4); } + +__ai uint8x8_t vtbl3_u8(uint8x8x3_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vtbl3_v((int8x8_t)__a.val[0], (int8x8_t)__a.val[1], (int8x8_t)__a.val[2], (int8x8_t)__b, 16); } +__ai int8x8_t vtbl3_s8(int8x8x3_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vtbl3_v(__a.val[0], __a.val[1], __a.val[2], __b, 0); } +__ai poly8x8_t vtbl3_p8(poly8x8x3_t __a, uint8x8_t __b) { + return (poly8x8_t)__builtin_neon_vtbl3_v((int8x8_t)__a.val[0], (int8x8_t)__a.val[1], (int8x8_t)__a.val[2], (int8x8_t)__b, 4); } + +__ai uint8x8_t vtbl4_u8(uint8x8x4_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vtbl4_v((int8x8_t)__a.val[0], (int8x8_t)__a.val[1], (int8x8_t)__a.val[2], (int8x8_t)__a.val[3], (int8x8_t)__b, 16); } +__ai int8x8_t vtbl4_s8(int8x8x4_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vtbl4_v(__a.val[0], __a.val[1], __a.val[2], __a.val[3], __b, 0); } +__ai poly8x8_t vtbl4_p8(poly8x8x4_t __a, uint8x8_t __b) { + return (poly8x8_t)__builtin_neon_vtbl4_v((int8x8_t)__a.val[0], (int8x8_t)__a.val[1], (int8x8_t)__a.val[2], (int8x8_t)__a.val[3], (int8x8_t)__b, 4); } + +__ai uint8x8_t vtbx1_u8(uint8x8_t __a, uint8x8_t __b, uint8x8_t __c) { + return (uint8x8_t)__builtin_neon_vtbx1_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 16); } +__ai int8x8_t vtbx1_s8(int8x8_t __a, int8x8_t __b, int8x8_t __c) { + return (int8x8_t)__builtin_neon_vtbx1_v(__a, __b, __c, 0); } +__ai poly8x8_t vtbx1_p8(poly8x8_t __a, poly8x8_t __b, uint8x8_t __c) { + return (poly8x8_t)__builtin_neon_vtbx1_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 4); } + +__ai uint8x8_t vtbx2_u8(uint8x8_t __a, uint8x8x2_t __b, uint8x8_t __c) { + return (uint8x8_t)__builtin_neon_vtbx2_v((int8x8_t)__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__c, 16); } +__ai int8x8_t vtbx2_s8(int8x8_t __a, int8x8x2_t __b, int8x8_t __c) { + return (int8x8_t)__builtin_neon_vtbx2_v(__a, __b.val[0], __b.val[1], __c, 0); } +__ai poly8x8_t vtbx2_p8(poly8x8_t __a, poly8x8x2_t __b, uint8x8_t __c) { + return (poly8x8_t)__builtin_neon_vtbx2_v((int8x8_t)__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__c, 4); } + +__ai uint8x8_t vtbx3_u8(uint8x8_t __a, uint8x8x3_t __b, uint8x8_t __c) { + return (uint8x8_t)__builtin_neon_vtbx3_v((int8x8_t)__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__c, 16); } +__ai int8x8_t vtbx3_s8(int8x8_t __a, int8x8x3_t __b, int8x8_t __c) { + return (int8x8_t)__builtin_neon_vtbx3_v(__a, __b.val[0], __b.val[1], __b.val[2], __c, 0); } +__ai poly8x8_t vtbx3_p8(poly8x8_t __a, poly8x8x3_t __b, uint8x8_t __c) { + return (poly8x8_t)__builtin_neon_vtbx3_v((int8x8_t)__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__c, 4); } + +__ai uint8x8_t vtbx4_u8(uint8x8_t __a, uint8x8x4_t __b, uint8x8_t __c) { + return (uint8x8_t)__builtin_neon_vtbx4_v((int8x8_t)__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], (int8x8_t)__c, 16); } +__ai int8x8_t vtbx4_s8(int8x8_t __a, int8x8x4_t __b, int8x8_t __c) { + return (int8x8_t)__builtin_neon_vtbx4_v(__a, __b.val[0], __b.val[1], __b.val[2], __b.val[3], __c, 0); } +__ai poly8x8_t vtbx4_p8(poly8x8_t __a, poly8x8x4_t __b, uint8x8_t __c) { + return (poly8x8_t)__builtin_neon_vtbx4_v((int8x8_t)__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], (int8x8_t)__c, 4); } + +__ai int8x8x2_t vtrn_s8(int8x8_t __a, int8x8_t __b) { + int8x8x2_t r; __builtin_neon_vtrn_v(&r, __a, __b, 0); return r; } +__ai int16x4x2_t vtrn_s16(int16x4_t __a, int16x4_t __b) { + int16x4x2_t r; __builtin_neon_vtrn_v(&r, (int8x8_t)__a, (int8x8_t)__b, 1); return r; } +__ai int32x2x2_t vtrn_s32(int32x2_t __a, int32x2_t __b) { + int32x2x2_t r; __builtin_neon_vtrn_v(&r, (int8x8_t)__a, (int8x8_t)__b, 2); return r; } +__ai uint8x8x2_t vtrn_u8(uint8x8_t __a, uint8x8_t __b) { + uint8x8x2_t r; __builtin_neon_vtrn_v(&r, (int8x8_t)__a, (int8x8_t)__b, 16); return r; } +__ai uint16x4x2_t vtrn_u16(uint16x4_t __a, uint16x4_t __b) { + uint16x4x2_t r; __builtin_neon_vtrn_v(&r, (int8x8_t)__a, (int8x8_t)__b, 17); return r; } +__ai uint32x2x2_t vtrn_u32(uint32x2_t __a, uint32x2_t __b) { + uint32x2x2_t r; __builtin_neon_vtrn_v(&r, (int8x8_t)__a, (int8x8_t)__b, 18); return r; } +__ai float32x2x2_t vtrn_f32(float32x2_t __a, float32x2_t __b) { + float32x2x2_t r; __builtin_neon_vtrn_v(&r, (int8x8_t)__a, (int8x8_t)__b, 8); return r; } +__ai poly8x8x2_t vtrn_p8(poly8x8_t __a, poly8x8_t __b) { + poly8x8x2_t r; __builtin_neon_vtrn_v(&r, (int8x8_t)__a, (int8x8_t)__b, 4); return r; } +__ai poly16x4x2_t vtrn_p16(poly16x4_t __a, poly16x4_t __b) { + poly16x4x2_t r; __builtin_neon_vtrn_v(&r, (int8x8_t)__a, (int8x8_t)__b, 5); return r; } +__ai int8x16x2_t vtrnq_s8(int8x16_t __a, int8x16_t __b) { + int8x16x2_t r; __builtin_neon_vtrnq_v(&r, __a, __b, 32); return r; } +__ai int16x8x2_t vtrnq_s16(int16x8_t __a, int16x8_t __b) { + int16x8x2_t r; __builtin_neon_vtrnq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 33); return r; } +__ai int32x4x2_t vtrnq_s32(int32x4_t __a, int32x4_t __b) { + int32x4x2_t r; __builtin_neon_vtrnq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 34); return r; } +__ai uint8x16x2_t vtrnq_u8(uint8x16_t __a, uint8x16_t __b) { + uint8x16x2_t r; __builtin_neon_vtrnq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 48); return r; } +__ai uint16x8x2_t vtrnq_u16(uint16x8_t __a, uint16x8_t __b) { + uint16x8x2_t r; __builtin_neon_vtrnq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 49); return r; } +__ai uint32x4x2_t vtrnq_u32(uint32x4_t __a, uint32x4_t __b) { + uint32x4x2_t r; __builtin_neon_vtrnq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 50); return r; } +__ai float32x4x2_t vtrnq_f32(float32x4_t __a, float32x4_t __b) { + float32x4x2_t r; __builtin_neon_vtrnq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 40); return r; } +__ai poly8x16x2_t vtrnq_p8(poly8x16_t __a, poly8x16_t __b) { + poly8x16x2_t r; __builtin_neon_vtrnq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 36); return r; } +__ai poly16x8x2_t vtrnq_p16(poly16x8_t __a, poly16x8_t __b) { + poly16x8x2_t r; __builtin_neon_vtrnq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 37); return r; } + +__ai uint8x8_t vtst_s8(int8x8_t __a, int8x8_t __b) { + return (uint8x8_t)__builtin_neon_vtst_v(__a, __b, 16); } +__ai uint16x4_t vtst_s16(int16x4_t __a, int16x4_t __b) { + return (uint16x4_t)__builtin_neon_vtst_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vtst_s32(int32x2_t __a, int32x2_t __b) { + return (uint32x2_t)__builtin_neon_vtst_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint8x8_t vtst_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vtst_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vtst_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vtst_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vtst_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vtst_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint8x8_t vtst_p8(poly8x8_t __a, poly8x8_t __b) { + return (uint8x8_t)__builtin_neon_vtst_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vtst_p16(poly16x4_t __a, poly16x4_t __b) { + return (uint16x4_t)__builtin_neon_vtst_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint8x16_t vtstq_s8(int8x16_t __a, int8x16_t __b) { + return (uint8x16_t)__builtin_neon_vtstq_v(__a, __b, 48); } +__ai uint16x8_t vtstq_s16(int16x8_t __a, int16x8_t __b) { + return (uint16x8_t)__builtin_neon_vtstq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vtstq_s32(int32x4_t __a, int32x4_t __b) { + return (uint32x4_t)__builtin_neon_vtstq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai uint8x16_t vtstq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vtstq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vtstq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vtstq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vtstq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vtstq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai uint8x16_t vtstq_p8(poly8x16_t __a, poly8x16_t __b) { + return (uint8x16_t)__builtin_neon_vtstq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vtstq_p16(poly16x8_t __a, poly16x8_t __b) { + return (uint16x8_t)__builtin_neon_vtstq_v((int8x16_t)__a, (int8x16_t)__b, 49); } + +__ai int8x8x2_t vuzp_s8(int8x8_t __a, int8x8_t __b) { + int8x8x2_t r; __builtin_neon_vuzp_v(&r, __a, __b, 0); return r; } +__ai int16x4x2_t vuzp_s16(int16x4_t __a, int16x4_t __b) { + int16x4x2_t r; __builtin_neon_vuzp_v(&r, (int8x8_t)__a, (int8x8_t)__b, 1); return r; } +__ai int32x2x2_t vuzp_s32(int32x2_t __a, int32x2_t __b) { + int32x2x2_t r; __builtin_neon_vuzp_v(&r, (int8x8_t)__a, (int8x8_t)__b, 2); return r; } +__ai uint8x8x2_t vuzp_u8(uint8x8_t __a, uint8x8_t __b) { + uint8x8x2_t r; __builtin_neon_vuzp_v(&r, (int8x8_t)__a, (int8x8_t)__b, 16); return r; } +__ai uint16x4x2_t vuzp_u16(uint16x4_t __a, uint16x4_t __b) { + uint16x4x2_t r; __builtin_neon_vuzp_v(&r, (int8x8_t)__a, (int8x8_t)__b, 17); return r; } +__ai uint32x2x2_t vuzp_u32(uint32x2_t __a, uint32x2_t __b) { + uint32x2x2_t r; __builtin_neon_vuzp_v(&r, (int8x8_t)__a, (int8x8_t)__b, 18); return r; } +__ai float32x2x2_t vuzp_f32(float32x2_t __a, float32x2_t __b) { + float32x2x2_t r; __builtin_neon_vuzp_v(&r, (int8x8_t)__a, (int8x8_t)__b, 8); return r; } +__ai poly8x8x2_t vuzp_p8(poly8x8_t __a, poly8x8_t __b) { + poly8x8x2_t r; __builtin_neon_vuzp_v(&r, (int8x8_t)__a, (int8x8_t)__b, 4); return r; } +__ai poly16x4x2_t vuzp_p16(poly16x4_t __a, poly16x4_t __b) { + poly16x4x2_t r; __builtin_neon_vuzp_v(&r, (int8x8_t)__a, (int8x8_t)__b, 5); return r; } +__ai int8x16x2_t vuzpq_s8(int8x16_t __a, int8x16_t __b) { + int8x16x2_t r; __builtin_neon_vuzpq_v(&r, __a, __b, 32); return r; } +__ai int16x8x2_t vuzpq_s16(int16x8_t __a, int16x8_t __b) { + int16x8x2_t r; __builtin_neon_vuzpq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 33); return r; } +__ai int32x4x2_t vuzpq_s32(int32x4_t __a, int32x4_t __b) { + int32x4x2_t r; __builtin_neon_vuzpq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 34); return r; } +__ai uint8x16x2_t vuzpq_u8(uint8x16_t __a, uint8x16_t __b) { + uint8x16x2_t r; __builtin_neon_vuzpq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 48); return r; } +__ai uint16x8x2_t vuzpq_u16(uint16x8_t __a, uint16x8_t __b) { + uint16x8x2_t r; __builtin_neon_vuzpq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 49); return r; } +__ai uint32x4x2_t vuzpq_u32(uint32x4_t __a, uint32x4_t __b) { + uint32x4x2_t r; __builtin_neon_vuzpq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 50); return r; } +__ai float32x4x2_t vuzpq_f32(float32x4_t __a, float32x4_t __b) { + float32x4x2_t r; __builtin_neon_vuzpq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 40); return r; } +__ai poly8x16x2_t vuzpq_p8(poly8x16_t __a, poly8x16_t __b) { + poly8x16x2_t r; __builtin_neon_vuzpq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 36); return r; } +__ai poly16x8x2_t vuzpq_p16(poly16x8_t __a, poly16x8_t __b) { + poly16x8x2_t r; __builtin_neon_vuzpq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 37); return r; } + +__ai int8x8x2_t vzip_s8(int8x8_t __a, int8x8_t __b) { + int8x8x2_t r; __builtin_neon_vzip_v(&r, __a, __b, 0); return r; } +__ai int16x4x2_t vzip_s16(int16x4_t __a, int16x4_t __b) { + int16x4x2_t r; __builtin_neon_vzip_v(&r, (int8x8_t)__a, (int8x8_t)__b, 1); return r; } +__ai int32x2x2_t vzip_s32(int32x2_t __a, int32x2_t __b) { + int32x2x2_t r; __builtin_neon_vzip_v(&r, (int8x8_t)__a, (int8x8_t)__b, 2); return r; } +__ai uint8x8x2_t vzip_u8(uint8x8_t __a, uint8x8_t __b) { + uint8x8x2_t r; __builtin_neon_vzip_v(&r, (int8x8_t)__a, (int8x8_t)__b, 16); return r; } +__ai uint16x4x2_t vzip_u16(uint16x4_t __a, uint16x4_t __b) { + uint16x4x2_t r; __builtin_neon_vzip_v(&r, (int8x8_t)__a, (int8x8_t)__b, 17); return r; } +__ai uint32x2x2_t vzip_u32(uint32x2_t __a, uint32x2_t __b) { + uint32x2x2_t r; __builtin_neon_vzip_v(&r, (int8x8_t)__a, (int8x8_t)__b, 18); return r; } +__ai float32x2x2_t vzip_f32(float32x2_t __a, float32x2_t __b) { + float32x2x2_t r; __builtin_neon_vzip_v(&r, (int8x8_t)__a, (int8x8_t)__b, 8); return r; } +__ai poly8x8x2_t vzip_p8(poly8x8_t __a, poly8x8_t __b) { + poly8x8x2_t r; __builtin_neon_vzip_v(&r, (int8x8_t)__a, (int8x8_t)__b, 4); return r; } +__ai poly16x4x2_t vzip_p16(poly16x4_t __a, poly16x4_t __b) { + poly16x4x2_t r; __builtin_neon_vzip_v(&r, (int8x8_t)__a, (int8x8_t)__b, 5); return r; } +__ai int8x16x2_t vzipq_s8(int8x16_t __a, int8x16_t __b) { + int8x16x2_t r; __builtin_neon_vzipq_v(&r, __a, __b, 32); return r; } +__ai int16x8x2_t vzipq_s16(int16x8_t __a, int16x8_t __b) { + int16x8x2_t r; __builtin_neon_vzipq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 33); return r; } +__ai int32x4x2_t vzipq_s32(int32x4_t __a, int32x4_t __b) { + int32x4x2_t r; __builtin_neon_vzipq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 34); return r; } +__ai uint8x16x2_t vzipq_u8(uint8x16_t __a, uint8x16_t __b) { + uint8x16x2_t r; __builtin_neon_vzipq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 48); return r; } +__ai uint16x8x2_t vzipq_u16(uint16x8_t __a, uint16x8_t __b) { + uint16x8x2_t r; __builtin_neon_vzipq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 49); return r; } +__ai uint32x4x2_t vzipq_u32(uint32x4_t __a, uint32x4_t __b) { + uint32x4x2_t r; __builtin_neon_vzipq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 50); return r; } +__ai float32x4x2_t vzipq_f32(float32x4_t __a, float32x4_t __b) { + float32x4x2_t r; __builtin_neon_vzipq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 40); return r; } +__ai poly8x16x2_t vzipq_p8(poly8x16_t __a, poly8x16_t __b) { + poly8x16x2_t r; __builtin_neon_vzipq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 36); return r; } +__ai poly16x8x2_t vzipq_p16(poly16x8_t __a, poly16x8_t __b) { + poly16x8x2_t r; __builtin_neon_vzipq_v(&r, (int8x16_t)__a, (int8x16_t)__b, 37); return r; } + +#ifdef __aarch64__ +__ai int16x8_t vmovl_high_s8(int8x16_t __a) { + int8x8_t __a1 = vget_high_s8(__a); + return (int16x8_t)vshll_n_s8(__a1, 0); } +__ai int32x4_t vmovl_high_s16(int16x8_t __a) { + int16x4_t __a1 = vget_high_s16(__a); + return (int32x4_t)vshll_n_s16(__a1, 0); } +__ai int64x2_t vmovl_high_s32(int32x4_t __a) { + int32x2_t __a1 = vget_high_s32(__a); + return (int64x2_t)vshll_n_s32(__a1, 0); } +__ai uint16x8_t vmovl_high_u8(uint8x16_t __a) { + uint8x8_t __a1 = vget_high_u8(__a); + return (uint16x8_t)vshll_n_u8(__a1, 0); } +__ai uint32x4_t vmovl_high_u16(uint16x8_t __a) { + uint16x4_t __a1 = vget_high_u16(__a); + return (uint32x4_t)vshll_n_u16(__a1, 0); } +__ai uint64x2_t vmovl_high_u32(uint32x4_t __a) { + uint32x2_t __a1 = vget_high_u32(__a); + return (uint64x2_t)vshll_n_u32(__a1, 0); } + +__ai int16x8_t vmull_high_s8(int8x16_t __a, int8x16_t __b) { + return vmull_s8(vget_high_s8(__a), vget_high_s8(__b)); } +__ai int32x4_t vmull_high_s16(int16x8_t __a, int16x8_t __b) { + return vmull_s16(vget_high_s16(__a), vget_high_s16(__b)); } +__ai int64x2_t vmull_high_s32(int32x4_t __a, int32x4_t __b) { + return vmull_s32(vget_high_s32(__a), vget_high_s32(__b)); } +__ai uint16x8_t vmull_high_u8(uint8x16_t __a, uint8x16_t __b) { + return vmull_u8(vget_high_u8(__a), vget_high_u8(__b)); } +__ai uint32x4_t vmull_high_u16(uint16x8_t __a, uint16x8_t __b) { + return vmull_u16(vget_high_u16(__a), vget_high_u16(__b)); } +__ai uint64x2_t vmull_high_u32(uint32x4_t __a, uint32x4_t __b) { + return vmull_u32(vget_high_u32(__a), vget_high_u32(__b)); } +__ai poly16x8_t vmull_high_p8(poly8x16_t __a, poly8x16_t __b) { + return vmull_p8(vget_high_p8(__a), vget_high_p8(__b)); } + +__ai int16x8_t vabdl_high_s8(int8x16_t __a, int8x16_t __b) { + return vabdl_s8(vget_high_s8(__a), vget_high_s8(__b)); } +__ai int32x4_t vabdl_high_s16(int16x8_t __a, int16x8_t __b) { + return vabdl_s16(vget_high_s16(__a), vget_high_s16(__b)); } +__ai int64x2_t vabdl_high_s32(int32x4_t __a, int32x4_t __b) { + return vabdl_s32(vget_high_s32(__a), vget_high_s32(__b)); } +__ai uint16x8_t vabdl_high_u8(uint8x16_t __a, uint8x16_t __b) { + return vabdl_u8(vget_high_u8(__a), vget_high_u8(__b)); } +__ai uint32x4_t vabdl_high_u16(uint16x8_t __a, uint16x8_t __b) { + return vabdl_u16(vget_high_u16(__a), vget_high_u16(__b)); } +__ai uint64x2_t vabdl_high_u32(uint32x4_t __a, uint32x4_t __b) { + return vabdl_u32(vget_high_u32(__a), vget_high_u32(__b)); } + +__ai float64x1_t vabd_f64(float64x1_t __a, float64x1_t __b) { + return (float64x1_t)__builtin_neon_vabd_v((int8x8_t)__a, (int8x8_t)__b, 9); } +__ai float64x2_t vabdq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vabdq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai int64x1_t vabs_s64(int64x1_t __a) { + return (int64x1_t)__builtin_neon_vabs_v((int8x8_t)__a, 3); } +__ai float64x1_t vabs_f64(float64x1_t __a) { + return (float64x1_t)__builtin_neon_vabs_v((int8x8_t)__a, 9); } +__ai int64x2_t vabsq_s64(int64x2_t __a) { + return (int64x2_t)__builtin_neon_vabsq_v((int8x16_t)__a, 35); } +__ai float64x2_t vabsq_f64(float64x2_t __a) { + return (float64x2_t)__builtin_neon_vabsq_v((int8x16_t)__a, 41); } + +__ai float64x1_t vadd_f64(float64x1_t __a, float64x1_t __b) { + return __a + __b; } +__ai float64x2_t vaddq_f64(float64x2_t __a, float64x2_t __b) { + return __a + __b; } + +__ai int8x16_t vpaddq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vpaddq_v(__a, __b, 32); } +__ai int16x8_t vpaddq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vpaddq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vpaddq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vpaddq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai int64x2_t vpaddq_s64(int64x2_t __a, int64x2_t __b) { + return (int64x2_t)__builtin_neon_vpaddq_v((int8x16_t)__a, (int8x16_t)__b, 35); } +__ai uint8x16_t vpaddq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vpaddq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vpaddq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vpaddq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vpaddq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vpaddq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai uint64x2_t vpaddq_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint64x2_t)__builtin_neon_vpaddq_v((int8x16_t)__a, (int8x16_t)__b, 51); } +__ai float32x4_t vpaddq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vpaddq_v((int8x16_t)__a, (int8x16_t)__b, 40); } +__ai float64x2_t vpaddq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vpaddq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai float64x1_t vbsl_f64(uint64x1_t __a, float64x1_t __b, float64x1_t __c) { + return (float64x1_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 9); } +__ai float64x2_t vbslq_f64(uint64x2_t __a, float64x2_t __b, float64x2_t __c) { + return (float64x2_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 41); } +__ai poly64x1_t vbsl_p64(uint64x1_t __a, poly64x1_t __b, poly64x1_t __c) { + return (poly64x1_t)__builtin_neon_vbsl_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 6); } +__ai poly64x2_t vbslq_p64(uint64x2_t __a, poly64x2_t __b, poly64x2_t __c) { + return (poly64x2_t)__builtin_neon_vbslq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 38); } + +__ai uint64x1_t vceq_s64(int64x1_t __a, int64x1_t __b) { + return (uint64x1_t)(__a == __b); } +__ai uint64x1_t vceq_u64(uint64x1_t __a, uint64x1_t __b) { + return (uint64x1_t)(__a == __b); } +__ai uint64x1_t vceq_f64(float64x1_t __a, float64x1_t __b) { + return (uint64x1_t)(__a == __b); } +__ai uint64x2_t vceqq_f64(float64x2_t __a, float64x2_t __b) { + return (uint64x2_t)(__a == __b); } +__ai uint64x2_t vceqq_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint64x2_t)(__a == __b); } +__ai uint64x2_t vceqq_s64(int64x2_t __a, int64x2_t __b) { + return (uint64x2_t)(__a == __b); } +__ai uint64x1_t vceq_p64(poly64x1_t __a, poly64x1_t __b) { + return (uint64x1_t)(__a == __b); } +__ai uint64x2_t vceqq_p64(poly64x2_t __a, poly64x2_t __b) { + return (uint64x2_t)(__a == __b); } + +__ai uint64x1_t vcge_s64(int64x1_t __a, int64x1_t __b) { + return (uint64x1_t)(__a >= __b); } +__ai uint64x1_t vcge_u64(uint64x1_t __a, uint64x1_t __b) { + return (uint64x1_t)(__a >= __b); } +__ai uint64x2_t vcgeq_s64(int64x2_t __a, int64x2_t __b) { + return (uint64x2_t)(__a >= __b); } +__ai uint64x2_t vcgeq_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint64x2_t)(__a >= __b); } +__ai uint64x1_t vcge_f64(float64x1_t __a, float64x1_t __b) { + return (uint64x1_t)(__a >= __b); } +__ai uint64x2_t vcgeq_f64(float64x2_t __a, float64x2_t __b) { + return (uint64x2_t)(__a >= __b); } + +__ai uint64x1_t vcgt_s64(int64x1_t __a, int64x1_t __b) { + return (uint64x1_t)(__a > __b); } +__ai uint64x1_t vcgt_u64(uint64x1_t __a, uint64x1_t __b) { + return (uint64x1_t)(__a > __b); } +__ai uint64x2_t vcgtq_s64(int64x2_t __a, int64x2_t __b) { + return (uint64x2_t)(__a > __b); } +__ai uint64x2_t vcgtq_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint64x2_t)(__a > __b); } +__ai uint64x1_t vcgt_f64(float64x1_t __a, float64x1_t __b) { + return (uint64x1_t)(__a > __b); } +__ai uint64x2_t vcgtq_f64(float64x2_t __a, float64x2_t __b) { + return (uint64x2_t)(__a > __b); } + +__ai uint64x1_t vcle_s64(int64x1_t __a, int64x1_t __b) { + return (uint64x1_t)(__a <= __b); } +__ai uint64x1_t vcle_u64(uint64x1_t __a, uint64x1_t __b) { + return (uint64x1_t)(__a <= __b); } +__ai uint64x2_t vcleq_s64(int64x2_t __a, int64x2_t __b) { + return (uint64x2_t)(__a <= __b); } +__ai uint64x2_t vcleq_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint64x2_t)(__a <= __b); } +__ai uint64x1_t vcle_f64(float64x1_t __a, float64x1_t __b) { + return (uint64x1_t)(__a <= __b); } +__ai uint64x2_t vcleq_f64(float64x2_t __a, float64x2_t __b) { + return (uint64x2_t)(__a <= __b); } + +__ai uint64x1_t vclt_s64(int64x1_t __a, int64x1_t __b) { + return (uint64x1_t)(__a < __b); } +__ai uint64x1_t vclt_u64(uint64x1_t __a, uint64x1_t __b) { + return (uint64x1_t)(__a < __b); } +__ai uint64x2_t vcltq_s64(int64x2_t __a, int64x2_t __b) { + return (uint64x2_t)(__a < __b); } +__ai uint64x2_t vcltq_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint64x2_t)(__a < __b); } +__ai uint64x1_t vclt_f64(float64x1_t __a, float64x1_t __b) { + return (uint64x1_t)(__a < __b); } +__ai uint64x2_t vcltq_f64(float64x2_t __a, float64x2_t __b) { + return (uint64x2_t)(__a < __b); } + +__ai uint8x8_t vceqz_s8(int8x8_t __a) { + return (uint8x8_t)__builtin_neon_vceqz_v(__a, 16); } +__ai uint16x4_t vceqz_s16(int16x4_t __a) { + return (uint16x4_t)__builtin_neon_vceqz_v((int8x8_t)__a, 17); } +__ai uint32x2_t vceqz_s32(int32x2_t __a) { + return (uint32x2_t)__builtin_neon_vceqz_v((int8x8_t)__a, 18); } +__ai uint64x1_t vceqz_s64(int64x1_t __a) { + return (uint64x1_t)__builtin_neon_vceqz_v((int8x8_t)__a, 19); } +__ai uint32x2_t vceqz_f32(float32x2_t __a) { + return (uint32x2_t)__builtin_neon_vceqz_v((int8x8_t)__a, 18); } +__ai uint8x8_t vceqz_u8(uint8x8_t __a) { + return (uint8x8_t)__builtin_neon_vceqz_v((int8x8_t)__a, 16); } +__ai uint16x4_t vceqz_u16(uint16x4_t __a) { + return (uint16x4_t)__builtin_neon_vceqz_v((int8x8_t)__a, 17); } +__ai uint32x2_t vceqz_u32(uint32x2_t __a) { + return (uint32x2_t)__builtin_neon_vceqz_v((int8x8_t)__a, 18); } +__ai uint64x1_t vceqz_u64(uint64x1_t __a) { + return (uint64x1_t)__builtin_neon_vceqz_v((int8x8_t)__a, 19); } +__ai uint8x8_t vceqz_p8(poly8x8_t __a) { + return (uint8x8_t)__builtin_neon_vceqz_v((int8x8_t)__a, 16); } +__ai uint16x4_t vceqz_p16(poly16x4_t __a) { + return (uint16x4_t)__builtin_neon_vceqz_v((int8x8_t)__a, 17); } +__ai uint64x1_t vceqz_p64(poly64x1_t __a) { + return (uint64x1_t)__builtin_neon_vceqz_v((int8x8_t)__a, 19); } +__ai uint8x16_t vceqzq_s8(int8x16_t __a) { + return (uint8x16_t)__builtin_neon_vceqzq_v(__a, 48); } +__ai uint16x8_t vceqzq_s16(int16x8_t __a) { + return (uint16x8_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 49); } +__ai uint32x4_t vceqzq_s32(int32x4_t __a) { + return (uint32x4_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 50); } +__ai uint64x2_t vceqzq_s64(int64x2_t __a) { + return (uint64x2_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 51); } +__ai uint32x4_t vceqzq_f32(float32x4_t __a) { + return (uint32x4_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 50); } +__ai uint8x16_t vceqzq_u8(uint8x16_t __a) { + return (uint8x16_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 48); } +__ai uint16x8_t vceqzq_u16(uint16x8_t __a) { + return (uint16x8_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 49); } +__ai uint32x4_t vceqzq_u32(uint32x4_t __a) { + return (uint32x4_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 50); } +__ai uint64x2_t vceqzq_u64(uint64x2_t __a) { + return (uint64x2_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 51); } +__ai uint8x16_t vceqzq_p8(poly8x16_t __a) { + return (uint8x16_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 48); } +__ai uint16x8_t vceqzq_p16(poly16x8_t __a) { + return (uint16x8_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 49); } +__ai uint64x1_t vceqz_f64(float64x1_t __a) { + return (uint64x1_t)__builtin_neon_vceqz_v((int8x8_t)__a, 19); } +__ai uint64x2_t vceqzq_f64(float64x2_t __a) { + return (uint64x2_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 51); } +__ai uint64x2_t vceqzq_p64(poly64x2_t __a) { + return (uint64x2_t)__builtin_neon_vceqzq_v((int8x16_t)__a, 51); } + +__ai uint8x8_t vcgez_s8(int8x8_t __a) { + return (uint8x8_t)__builtin_neon_vcgez_v(__a, 16); } +__ai uint16x4_t vcgez_s16(int16x4_t __a) { + return (uint16x4_t)__builtin_neon_vcgez_v((int8x8_t)__a, 17); } +__ai uint32x2_t vcgez_s32(int32x2_t __a) { + return (uint32x2_t)__builtin_neon_vcgez_v((int8x8_t)__a, 18); } +__ai uint64x1_t vcgez_s64(int64x1_t __a) { + return (uint64x1_t)__builtin_neon_vcgez_v((int8x8_t)__a, 19); } +__ai uint32x2_t vcgez_f32(float32x2_t __a) { + return (uint32x2_t)__builtin_neon_vcgez_v((int8x8_t)__a, 18); } +__ai uint64x1_t vcgez_f64(float64x1_t __a) { + return (uint64x1_t)__builtin_neon_vcgez_v((int8x8_t)__a, 19); } +__ai uint8x16_t vcgezq_s8(int8x16_t __a) { + return (uint8x16_t)__builtin_neon_vcgezq_v(__a, 48); } +__ai uint16x8_t vcgezq_s16(int16x8_t __a) { + return (uint16x8_t)__builtin_neon_vcgezq_v((int8x16_t)__a, 49); } +__ai uint32x4_t vcgezq_s32(int32x4_t __a) { + return (uint32x4_t)__builtin_neon_vcgezq_v((int8x16_t)__a, 50); } +__ai uint64x2_t vcgezq_s64(int64x2_t __a) { + return (uint64x2_t)__builtin_neon_vcgezq_v((int8x16_t)__a, 51); } +__ai uint32x4_t vcgezq_f32(float32x4_t __a) { + return (uint32x4_t)__builtin_neon_vcgezq_v((int8x16_t)__a, 50); } +__ai uint64x2_t vcgezq_f64(float64x2_t __a) { + return (uint64x2_t)__builtin_neon_vcgezq_v((int8x16_t)__a, 51); } + +__ai uint8x8_t vcgtz_s8(int8x8_t __a) { + return (uint8x8_t)__builtin_neon_vcgtz_v(__a, 16); } +__ai uint16x4_t vcgtz_s16(int16x4_t __a) { + return (uint16x4_t)__builtin_neon_vcgtz_v((int8x8_t)__a, 17); } +__ai uint32x2_t vcgtz_s32(int32x2_t __a) { + return (uint32x2_t)__builtin_neon_vcgtz_v((int8x8_t)__a, 18); } +__ai uint64x1_t vcgtz_s64(int64x1_t __a) { + return (uint64x1_t)__builtin_neon_vcgtz_v((int8x8_t)__a, 19); } +__ai uint32x2_t vcgtz_f32(float32x2_t __a) { + return (uint32x2_t)__builtin_neon_vcgtz_v((int8x8_t)__a, 18); } +__ai uint64x1_t vcgtz_f64(float64x1_t __a) { + return (uint64x1_t)__builtin_neon_vcgtz_v((int8x8_t)__a, 19); } +__ai uint8x16_t vcgtzq_s8(int8x16_t __a) { + return (uint8x16_t)__builtin_neon_vcgtzq_v(__a, 48); } +__ai uint16x8_t vcgtzq_s16(int16x8_t __a) { + return (uint16x8_t)__builtin_neon_vcgtzq_v((int8x16_t)__a, 49); } +__ai uint32x4_t vcgtzq_s32(int32x4_t __a) { + return (uint32x4_t)__builtin_neon_vcgtzq_v((int8x16_t)__a, 50); } +__ai uint64x2_t vcgtzq_s64(int64x2_t __a) { + return (uint64x2_t)__builtin_neon_vcgtzq_v((int8x16_t)__a, 51); } +__ai uint32x4_t vcgtzq_f32(float32x4_t __a) { + return (uint32x4_t)__builtin_neon_vcgtzq_v((int8x16_t)__a, 50); } +__ai uint64x2_t vcgtzq_f64(float64x2_t __a) { + return (uint64x2_t)__builtin_neon_vcgtzq_v((int8x16_t)__a, 51); } + +__ai uint8x8_t vclez_s8(int8x8_t __a) { + return (uint8x8_t)__builtin_neon_vclez_v(__a, 16); } +__ai uint16x4_t vclez_s16(int16x4_t __a) { + return (uint16x4_t)__builtin_neon_vclez_v((int8x8_t)__a, 17); } +__ai uint32x2_t vclez_s32(int32x2_t __a) { + return (uint32x2_t)__builtin_neon_vclez_v((int8x8_t)__a, 18); } +__ai uint64x1_t vclez_s64(int64x1_t __a) { + return (uint64x1_t)__builtin_neon_vclez_v((int8x8_t)__a, 19); } +__ai uint32x2_t vclez_f32(float32x2_t __a) { + return (uint32x2_t)__builtin_neon_vclez_v((int8x8_t)__a, 18); } +__ai uint64x1_t vclez_f64(float64x1_t __a) { + return (uint64x1_t)__builtin_neon_vclez_v((int8x8_t)__a, 19); } +__ai uint8x16_t vclezq_s8(int8x16_t __a) { + return (uint8x16_t)__builtin_neon_vclezq_v(__a, 48); } +__ai uint16x8_t vclezq_s16(int16x8_t __a) { + return (uint16x8_t)__builtin_neon_vclezq_v((int8x16_t)__a, 49); } +__ai uint32x4_t vclezq_s32(int32x4_t __a) { + return (uint32x4_t)__builtin_neon_vclezq_v((int8x16_t)__a, 50); } +__ai uint64x2_t vclezq_s64(int64x2_t __a) { + return (uint64x2_t)__builtin_neon_vclezq_v((int8x16_t)__a, 51); } +__ai uint32x4_t vclezq_f32(float32x4_t __a) { + return (uint32x4_t)__builtin_neon_vclezq_v((int8x16_t)__a, 50); } +__ai uint64x2_t vclezq_f64(float64x2_t __a) { + return (uint64x2_t)__builtin_neon_vclezq_v((int8x16_t)__a, 51); } + +__ai uint8x8_t vcltz_s8(int8x8_t __a) { + return (uint8x8_t)__builtin_neon_vcltz_v(__a, 16); } +__ai uint16x4_t vcltz_s16(int16x4_t __a) { + return (uint16x4_t)__builtin_neon_vcltz_v((int8x8_t)__a, 17); } +__ai uint32x2_t vcltz_s32(int32x2_t __a) { + return (uint32x2_t)__builtin_neon_vcltz_v((int8x8_t)__a, 18); } +__ai uint64x1_t vcltz_s64(int64x1_t __a) { + return (uint64x1_t)__builtin_neon_vcltz_v((int8x8_t)__a, 19); } +__ai uint32x2_t vcltz_f32(float32x2_t __a) { + return (uint32x2_t)__builtin_neon_vcltz_v((int8x8_t)__a, 18); } +__ai uint64x1_t vcltz_f64(float64x1_t __a) { + return (uint64x1_t)__builtin_neon_vcltz_v((int8x8_t)__a, 19); } +__ai uint8x16_t vcltzq_s8(int8x16_t __a) { + return (uint8x16_t)__builtin_neon_vcltzq_v(__a, 48); } +__ai uint16x8_t vcltzq_s16(int16x8_t __a) { + return (uint16x8_t)__builtin_neon_vcltzq_v((int8x16_t)__a, 49); } +__ai uint32x4_t vcltzq_s32(int32x4_t __a) { + return (uint32x4_t)__builtin_neon_vcltzq_v((int8x16_t)__a, 50); } +__ai uint64x2_t vcltzq_s64(int64x2_t __a) { + return (uint64x2_t)__builtin_neon_vcltzq_v((int8x16_t)__a, 51); } +__ai uint32x4_t vcltzq_f32(float32x4_t __a) { + return (uint32x4_t)__builtin_neon_vcltzq_v((int8x16_t)__a, 50); } +__ai uint64x2_t vcltzq_f64(float64x2_t __a) { + return (uint64x2_t)__builtin_neon_vcltzq_v((int8x16_t)__a, 51); } + +__ai uint64x1_t vtst_s64(int64x1_t __a, int64x1_t __b) { + return (uint64x1_t)__builtin_neon_vtst_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai uint64x1_t vtst_u64(uint64x1_t __a, uint64x1_t __b) { + return (uint64x1_t)__builtin_neon_vtst_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai uint64x2_t vtstq_s64(int64x2_t __a, int64x2_t __b) { + return (uint64x2_t)__builtin_neon_vtstq_v((int8x16_t)__a, (int8x16_t)__b, 51); } +__ai uint64x2_t vtstq_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint64x2_t)__builtin_neon_vtstq_v((int8x16_t)__a, (int8x16_t)__b, 51); } +__ai uint64x1_t vtst_p64(poly64x1_t __a, poly64x1_t __b) { + return (uint64x1_t)__builtin_neon_vtst_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai uint64x2_t vtstq_p64(poly64x2_t __a, poly64x2_t __b) { + return (uint64x2_t)__builtin_neon_vtstq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +__ai float64x2_t vcombine_f64(float64x1_t __a, float64x1_t __b) { + return (float64x2_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } +__ai poly64x2_t vcombine_p64(poly64x1_t __a, poly64x1_t __b) { + return (poly64x2_t)__builtin_shufflevector((int64x1_t)__a, (int64x1_t)__b, 0, 1); } + +#define vcopyq_lane_s8(a1, __b1, c1, __d1) __extension__ ({ \ + int8x16_t __a1 = (a1); int8x8_t __c1 = (c1); \ + int8_t __c2 = vget_lane_s8(__c1, __d1); \ + vsetq_lane_s8(__c2, __a1, __b1); }) +#define vcopyq_lane_s16(a1, __b1, c1, __d1) __extension__ ({ \ + int16x8_t __a1 = (a1); int16x4_t __c1 = (c1); \ + int16_t __c2 = vget_lane_s16(__c1, __d1); \ + vsetq_lane_s16(__c2, __a1, __b1); }) +#define vcopyq_lane_s32(a1, __b1, c1, __d1) __extension__ ({ \ + int32x4_t __a1 = (a1); int32x2_t __c1 = (c1); \ + int32_t __c2 = vget_lane_s32(__c1, __d1); \ + vsetq_lane_s32(__c2, __a1, __b1); }) +#define vcopyq_lane_s64(a1, __b1, c1, __d1) __extension__ ({ \ + int64x2_t __a1 = (a1); int64x1_t __c1 = (c1); \ + int64_t __c2 = vget_lane_s64(__c1, __d1); \ + vsetq_lane_s64(__c2, __a1, __b1); }) +#define vcopyq_lane_u8(a1, __b1, c1, __d1) __extension__ ({ \ + uint8x16_t __a1 = (a1); uint8x8_t __c1 = (c1); \ + uint8_t __c2 = vget_lane_u8(__c1, __d1); \ + vsetq_lane_u8(__c2, __a1, __b1); }) +#define vcopyq_lane_u16(a1, __b1, c1, __d1) __extension__ ({ \ + uint16x8_t __a1 = (a1); uint16x4_t __c1 = (c1); \ + uint16_t __c2 = vget_lane_u16(__c1, __d1); \ + vsetq_lane_u16(__c2, __a1, __b1); }) +#define vcopyq_lane_u32(a1, __b1, c1, __d1) __extension__ ({ \ + uint32x4_t __a1 = (a1); uint32x2_t __c1 = (c1); \ + uint32_t __c2 = vget_lane_u32(__c1, __d1); \ + vsetq_lane_u32(__c2, __a1, __b1); }) +#define vcopyq_lane_u64(a1, __b1, c1, __d1) __extension__ ({ \ + uint64x2_t __a1 = (a1); uint64x1_t __c1 = (c1); \ + uint64_t __c2 = vget_lane_u64(__c1, __d1); \ + vsetq_lane_u64(__c2, __a1, __b1); }) +#define vcopyq_lane_p8(a1, __b1, c1, __d1) __extension__ ({ \ + poly8x16_t __a1 = (a1); poly8x8_t __c1 = (c1); \ + poly8_t __c2 = vget_lane_p8(__c1, __d1); \ + vsetq_lane_p8(__c2, __a1, __b1); }) +#define vcopyq_lane_p16(a1, __b1, c1, __d1) __extension__ ({ \ + poly16x8_t __a1 = (a1); poly16x4_t __c1 = (c1); \ + poly16_t __c2 = vget_lane_p16(__c1, __d1); \ + vsetq_lane_p16(__c2, __a1, __b1); }) +#define vcopyq_lane_f32(a1, __b1, c1, __d1) __extension__ ({ \ + float32x4_t __a1 = (a1); float32x2_t __c1 = (c1); \ + float32_t __c2 = vget_lane_f32(__c1, __d1); \ + vsetq_lane_f32(__c2, __a1, __b1); }) +#define vcopyq_lane_f64(a1, __b1, c1, __d1) __extension__ ({ \ + float64x2_t __a1 = (a1); float64x1_t __c1 = (c1); \ + float64_t __c2 = vget_lane_f64(__c1, __d1); \ + vsetq_lane_f64(__c2, __a1, __b1); }) +#define vcopyq_lane_p64(a1, __b1, c1, __d1) __extension__ ({ \ + poly64x2_t __a1 = (a1); poly64x1_t __c1 = (c1); \ + poly64_t __c2 = vget_lane_p64(__c1, __d1); \ + vsetq_lane_p64(__c2, __a1, __b1); }) + +#define vcopyq_laneq_s8(a1, __b1, c1, __d1) __extension__ ({ \ + int8x16_t __a1 = (a1); int8x16_t __c1 = (c1); \ + int8_t __c2 = vgetq_lane_s8(__c1, __d1); \ + vsetq_lane_s8(__c2, __a1, __b1); }) +#define vcopyq_laneq_s16(a1, __b1, c1, __d1) __extension__ ({ \ + int16x8_t __a1 = (a1); int16x8_t __c1 = (c1); \ + int16_t __c2 = vgetq_lane_s16(__c1, __d1); \ + vsetq_lane_s16(__c2, __a1, __b1); }) +#define vcopyq_laneq_s32(a1, __b1, c1, __d1) __extension__ ({ \ + int32x4_t __a1 = (a1); int32x4_t __c1 = (c1); \ + int32_t __c2 = vgetq_lane_s32(__c1, __d1); \ + vsetq_lane_s32(__c2, __a1, __b1); }) +#define vcopyq_laneq_s64(a1, __b1, c1, __d1) __extension__ ({ \ + int64x2_t __a1 = (a1); int64x2_t __c1 = (c1); \ + int64_t __c2 = vgetq_lane_s64(__c1, __d1); \ + vsetq_lane_s64(__c2, __a1, __b1); }) +#define vcopyq_laneq_u8(a1, __b1, c1, __d1) __extension__ ({ \ + uint8x16_t __a1 = (a1); uint8x16_t __c1 = (c1); \ + uint8_t __c2 = vgetq_lane_u8(__c1, __d1); \ + vsetq_lane_u8(__c2, __a1, __b1); }) +#define vcopyq_laneq_u16(a1, __b1, c1, __d1) __extension__ ({ \ + uint16x8_t __a1 = (a1); uint16x8_t __c1 = (c1); \ + uint16_t __c2 = vgetq_lane_u16(__c1, __d1); \ + vsetq_lane_u16(__c2, __a1, __b1); }) +#define vcopyq_laneq_u32(a1, __b1, c1, __d1) __extension__ ({ \ + uint32x4_t __a1 = (a1); uint32x4_t __c1 = (c1); \ + uint32_t __c2 = vgetq_lane_u32(__c1, __d1); \ + vsetq_lane_u32(__c2, __a1, __b1); }) +#define vcopyq_laneq_u64(a1, __b1, c1, __d1) __extension__ ({ \ + uint64x2_t __a1 = (a1); uint64x2_t __c1 = (c1); \ + uint64_t __c2 = vgetq_lane_u64(__c1, __d1); \ + vsetq_lane_u64(__c2, __a1, __b1); }) +#define vcopyq_laneq_p8(a1, __b1, c1, __d1) __extension__ ({ \ + poly8x16_t __a1 = (a1); poly8x16_t __c1 = (c1); \ + poly8_t __c2 = vgetq_lane_p8(__c1, __d1); \ + vsetq_lane_p8(__c2, __a1, __b1); }) +#define vcopyq_laneq_p16(a1, __b1, c1, __d1) __extension__ ({ \ + poly16x8_t __a1 = (a1); poly16x8_t __c1 = (c1); \ + poly16_t __c2 = vgetq_lane_p16(__c1, __d1); \ + vsetq_lane_p16(__c2, __a1, __b1); }) +#define vcopyq_laneq_f32(a1, __b1, c1, __d1) __extension__ ({ \ + float32x4_t __a1 = (a1); float32x4_t __c1 = (c1); \ + float32_t __c2 = vgetq_lane_f32(__c1, __d1); \ + vsetq_lane_f32(__c2, __a1, __b1); }) +#define vcopyq_laneq_f64(a1, __b1, c1, __d1) __extension__ ({ \ + float64x2_t __a1 = (a1); float64x2_t __c1 = (c1); \ + float64_t __c2 = vgetq_lane_f64(__c1, __d1); \ + vsetq_lane_f64(__c2, __a1, __b1); }) +#define vcopyq_laneq_p64(a1, __b1, c1, __d1) __extension__ ({ \ + poly64x2_t __a1 = (a1); poly64x2_t __c1 = (c1); \ + poly64_t __c2 = vgetq_lane_p64(__c1, __d1); \ + vsetq_lane_p64(__c2, __a1, __b1); }) + +#define vcopy_lane_s8(a1, __b1, c1, __d1) __extension__ ({ \ + int8x8_t __a1 = (a1); int8x8_t __c1 = (c1); \ + int8_t __c2 = vget_lane_s8(__c1, __d1); \ + vset_lane_s8(__c2, __a1, __b1); }) +#define vcopy_lane_s16(a1, __b1, c1, __d1) __extension__ ({ \ + int16x4_t __a1 = (a1); int16x4_t __c1 = (c1); \ + int16_t __c2 = vget_lane_s16(__c1, __d1); \ + vset_lane_s16(__c2, __a1, __b1); }) +#define vcopy_lane_s32(a1, __b1, c1, __d1) __extension__ ({ \ + int32x2_t __a1 = (a1); int32x2_t __c1 = (c1); \ + int32_t __c2 = vget_lane_s32(__c1, __d1); \ + vset_lane_s32(__c2, __a1, __b1); }) +#define vcopy_lane_s64(a1, __b1, c1, __d1) __extension__ ({ \ + int64x1_t __a1 = (a1); int64x1_t __c1 = (c1); \ + int64_t __c2 = vget_lane_s64(__c1, __d1); \ + vset_lane_s64(__c2, __a1, __b1); }) +#define vcopy_lane_p8(a1, __b1, c1, __d1) __extension__ ({ \ + poly8x8_t __a1 = (a1); poly8x8_t __c1 = (c1); \ + poly8_t __c2 = vget_lane_p8(__c1, __d1); \ + vset_lane_p8(__c2, __a1, __b1); }) +#define vcopy_lane_p16(a1, __b1, c1, __d1) __extension__ ({ \ + poly16x4_t __a1 = (a1); poly16x4_t __c1 = (c1); \ + poly16_t __c2 = vget_lane_p16(__c1, __d1); \ + vset_lane_p16(__c2, __a1, __b1); }) +#define vcopy_lane_u8(a1, __b1, c1, __d1) __extension__ ({ \ + uint8x8_t __a1 = (a1); uint8x8_t __c1 = (c1); \ + uint8_t __c2 = vget_lane_u8(__c1, __d1); \ + vset_lane_u8(__c2, __a1, __b1); }) +#define vcopy_lane_u16(a1, __b1, c1, __d1) __extension__ ({ \ + uint16x4_t __a1 = (a1); uint16x4_t __c1 = (c1); \ + uint16_t __c2 = vget_lane_u16(__c1, __d1); \ + vset_lane_u16(__c2, __a1, __b1); }) +#define vcopy_lane_u32(a1, __b1, c1, __d1) __extension__ ({ \ + uint32x2_t __a1 = (a1); uint32x2_t __c1 = (c1); \ + uint32_t __c2 = vget_lane_u32(__c1, __d1); \ + vset_lane_u32(__c2, __a1, __b1); }) +#define vcopy_lane_u64(a1, __b1, c1, __d1) __extension__ ({ \ + uint64x1_t __a1 = (a1); uint64x1_t __c1 = (c1); \ + uint64_t __c2 = vget_lane_u64(__c1, __d1); \ + vset_lane_u64(__c2, __a1, __b1); }) +#define vcopy_lane_p64(a1, __b1, c1, __d1) __extension__ ({ \ + poly64x1_t __a1 = (a1); poly64x1_t __c1 = (c1); \ + poly64_t __c2 = vget_lane_p64(__c1, __d1); \ + vset_lane_p64(__c2, __a1, __b1); }) +#define vcopy_lane_f32(a1, __b1, c1, __d1) __extension__ ({ \ + float32x2_t __a1 = (a1); float32x2_t __c1 = (c1); \ + float32_t __c2 = vget_lane_f32(__c1, __d1); \ + vset_lane_f32(__c2, __a1, __b1); }) +#define vcopy_lane_f64(a1, __b1, c1, __d1) __extension__ ({ \ + float64x1_t __a1 = (a1); float64x1_t __c1 = (c1); \ + float64_t __c2 = vget_lane_f64(__c1, __d1); \ + vset_lane_f64(__c2, __a1, __b1); }) + +#define vcopy_laneq_s8(a1, __b1, c1, __d1) __extension__ ({ \ + int8x8_t __a1 = (a1); int8x16_t __c1 = (c1); \ + int8_t __c2 = vgetq_lane_s8(__c1, __d1); \ + vset_lane_s8(__c2, __a1, __b1); }) +#define vcopy_laneq_s16(a1, __b1, c1, __d1) __extension__ ({ \ + int16x4_t __a1 = (a1); int16x8_t __c1 = (c1); \ + int16_t __c2 = vgetq_lane_s16(__c1, __d1); \ + vset_lane_s16(__c2, __a1, __b1); }) +#define vcopy_laneq_s32(a1, __b1, c1, __d1) __extension__ ({ \ + int32x2_t __a1 = (a1); int32x4_t __c1 = (c1); \ + int32_t __c2 = vgetq_lane_s32(__c1, __d1); \ + vset_lane_s32(__c2, __a1, __b1); }) +#define vcopy_laneq_s64(a1, __b1, c1, __d1) __extension__ ({ \ + int64x1_t __a1 = (a1); int64x2_t __c1 = (c1); \ + int64_t __c2 = vgetq_lane_s64(__c1, __d1); \ + vset_lane_s64(__c2, __a1, __b1); }) +#define vcopy_laneq_p8(a1, __b1, c1, __d1) __extension__ ({ \ + poly8x8_t __a1 = (a1); poly8x16_t __c1 = (c1); \ + poly8_t __c2 = vgetq_lane_p8(__c1, __d1); \ + vset_lane_p8(__c2, __a1, __b1); }) +#define vcopy_laneq_p16(a1, __b1, c1, __d1) __extension__ ({ \ + poly16x4_t __a1 = (a1); poly16x8_t __c1 = (c1); \ + poly16_t __c2 = vgetq_lane_p16(__c1, __d1); \ + vset_lane_p16(__c2, __a1, __b1); }) +#define vcopy_laneq_p64(a1, __b1, c1, __d1) __extension__ ({ \ + poly64x1_t __a1 = (a1); poly64x2_t __c1 = (c1); \ + poly64_t __c2 = vgetq_lane_p64(__c1, __d1); \ + vset_lane_p64(__c2, __a1, __b1); }) +#define vcopy_laneq_u8(a1, __b1, c1, __d1) __extension__ ({ \ + uint8x8_t __a1 = (a1); uint8x16_t __c1 = (c1); \ + uint8_t __c2 = vgetq_lane_u8(__c1, __d1); \ + vset_lane_u8(__c2, __a1, __b1); }) +#define vcopy_laneq_u16(a1, __b1, c1, __d1) __extension__ ({ \ + uint16x4_t __a1 = (a1); uint16x8_t __c1 = (c1); \ + uint16_t __c2 = vgetq_lane_u16(__c1, __d1); \ + vset_lane_u16(__c2, __a1, __b1); }) +#define vcopy_laneq_u32(a1, __b1, c1, __d1) __extension__ ({ \ + uint32x2_t __a1 = (a1); uint32x4_t __c1 = (c1); \ + uint32_t __c2 = vgetq_lane_u32(__c1, __d1); \ + vset_lane_u32(__c2, __a1, __b1); }) +#define vcopy_laneq_u64(a1, __b1, c1, __d1) __extension__ ({ \ + uint64x1_t __a1 = (a1); uint64x2_t __c1 = (c1); \ + uint64_t __c2 = vgetq_lane_u64(__c1, __d1); \ + vset_lane_u64(__c2, __a1, __b1); }) +#define vcopy_laneq_f32(a1, __b1, c1, __d1) __extension__ ({ \ + float32x2_t __a1 = (a1); float32x4_t __c1 = (c1); \ + float32_t __c2 = vgetq_lane_f32(__c1, __d1); \ + vset_lane_f32(__c2, __a1, __b1); }) +#define vcopy_laneq_f64(a1, __b1, c1, __d1) __extension__ ({ \ + float64x1_t __a1 = (a1); float64x2_t __c1 = (c1); \ + float64_t __c2 = vgetq_lane_f64(__c1, __d1); \ + vset_lane_f64(__c2, __a1, __b1); }) + +__ai float64x1_t vcreate_f64(uint64_t __a) { + return (float64x1_t)__a; } +__ai poly64x1_t vcreate_p64(uint64_t __a) { + return (poly64x1_t)__a; } + +#define vcvt_n_f64_s64(a, __b) __extension__ ({ \ + int64x1_t __a = (a); \ + (float64x1_t)__builtin_neon_vcvt_n_f64_v((int8x8_t)__a, __b, 3); }) +#define vcvt_n_f64_u64(a, __b) __extension__ ({ \ + uint64x1_t __a = (a); \ + (float64x1_t)__builtin_neon_vcvt_n_f64_v((int8x8_t)__a, __b, 19); }) +#define vcvtq_n_f64_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (float64x2_t)__builtin_neon_vcvtq_n_f64_v((int8x16_t)__a, __b, 35); }) +#define vcvtq_n_f64_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + (float64x2_t)__builtin_neon_vcvtq_n_f64_v((int8x16_t)__a, __b, 51); }) + +__ai float64x1_t vdup_n_f64(float64_t __a) { + return (float64x1_t){ __a }; } +__ai float64x2_t vdupq_n_f64(float64_t __a) { + return (float64x2_t){ __a, __a }; } +__ai poly64x1_t vdup_n_p64(poly64_t __a) { + return (poly64x1_t){ __a }; } +__ai poly64x2_t vdupq_n_p64(poly64_t __a) { + return (poly64x2_t){ __a, __a }; } + +__ai uint64x1_t vcage_f64(float64x1_t __a, float64x1_t __b) { + return (uint64x1_t)__builtin_neon_vcage_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai uint64x2_t vcageq_f64(float64x2_t __a, float64x2_t __b) { + return (uint64x2_t)__builtin_neon_vcageq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +__ai uint64x1_t vcagt_f64(float64x1_t __a, float64x1_t __b) { + return (uint64x1_t)__builtin_neon_vcagt_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai uint64x2_t vcagtq_f64(float64x2_t __a, float64x2_t __b) { + return (uint64x2_t)__builtin_neon_vcagtq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +__ai uint64x1_t vcale_f64(float64x1_t __a, float64x1_t __b) { + return (uint64x1_t)__builtin_neon_vcale_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai uint64x2_t vcaleq_f64(float64x2_t __a, float64x2_t __b) { + return (uint64x2_t)__builtin_neon_vcaleq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +__ai uint64x1_t vcalt_f64(float64x1_t __a, float64x1_t __b) { + return (uint64x1_t)__builtin_neon_vcalt_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai uint64x2_t vcaltq_f64(float64x2_t __a, float64x2_t __b) { + return (uint64x2_t)__builtin_neon_vcaltq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +__ai int32x2_t vcvta_s32_f32(float32x2_t __a) { + return (int32x2_t)__builtin_neon_vcvta_s32_v((int8x8_t)__a, 2); } +__ai int32x4_t vcvtaq_s32_f32(float32x4_t __a) { + return (int32x4_t)__builtin_neon_vcvtaq_s32_v((int8x16_t)__a, 34); } + +__ai int64x1_t vcvta_s64_f64(float64x1_t __a) { + return (int64x1_t)__builtin_neon_vcvta_s64_v((int8x8_t)__a, 3); } +__ai int64x2_t vcvtaq_s64_f64(float64x2_t __a) { + return (int64x2_t)__builtin_neon_vcvtaq_s64_v((int8x16_t)__a, 35); } + +__ai uint32x2_t vcvta_u32_f32(float32x2_t __a) { + return (uint32x2_t)__builtin_neon_vcvta_u32_v((int8x8_t)__a, 18); } +__ai uint32x4_t vcvtaq_u32_f32(float32x4_t __a) { + return (uint32x4_t)__builtin_neon_vcvtaq_u32_v((int8x16_t)__a, 50); } + +__ai uint64x1_t vcvta_u64_f64(float64x1_t __a) { + return (uint64x1_t)__builtin_neon_vcvta_u64_v((int8x8_t)__a, 19); } +__ai uint64x2_t vcvtaq_u64_f64(float64x2_t __a) { + return (uint64x2_t)__builtin_neon_vcvtaq_u64_v((int8x16_t)__a, 51); } + +__ai int32x2_t vcvtm_s32_f32(float32x2_t __a) { + return (int32x2_t)__builtin_neon_vcvtm_s32_v((int8x8_t)__a, 2); } +__ai int32x4_t vcvtmq_s32_f32(float32x4_t __a) { + return (int32x4_t)__builtin_neon_vcvtmq_s32_v((int8x16_t)__a, 34); } + +__ai int64x1_t vcvtm_s64_f64(float64x1_t __a) { + return (int64x1_t)__builtin_neon_vcvtm_s64_v((int8x8_t)__a, 3); } +__ai int64x2_t vcvtmq_s64_f64(float64x2_t __a) { + return (int64x2_t)__builtin_neon_vcvtmq_s64_v((int8x16_t)__a, 35); } + +__ai uint32x2_t vcvtm_u32_f32(float32x2_t __a) { + return (uint32x2_t)__builtin_neon_vcvtm_u32_v((int8x8_t)__a, 18); } +__ai uint32x4_t vcvtmq_u32_f32(float32x4_t __a) { + return (uint32x4_t)__builtin_neon_vcvtmq_u32_v((int8x16_t)__a, 50); } + +__ai uint64x1_t vcvtm_u64_f64(float64x1_t __a) { + return (uint64x1_t)__builtin_neon_vcvtm_u64_v((int8x8_t)__a, 19); } +__ai uint64x2_t vcvtmq_u64_f64(float64x2_t __a) { + return (uint64x2_t)__builtin_neon_vcvtmq_u64_v((int8x16_t)__a, 51); } + +__ai int32x2_t vcvtn_s32_f32(float32x2_t __a) { + return (int32x2_t)__builtin_neon_vcvtn_s32_v((int8x8_t)__a, 2); } +__ai int32x4_t vcvtnq_s32_f32(float32x4_t __a) { + return (int32x4_t)__builtin_neon_vcvtnq_s32_v((int8x16_t)__a, 34); } + +__ai int64x1_t vcvtn_s64_f64(float64x1_t __a) { + return (int64x1_t)__builtin_neon_vcvtn_s64_v((int8x8_t)__a, 3); } +__ai int64x2_t vcvtnq_s64_f64(float64x2_t __a) { + return (int64x2_t)__builtin_neon_vcvtnq_s64_v((int8x16_t)__a, 35); } + +__ai uint32x2_t vcvtn_u32_f32(float32x2_t __a) { + return (uint32x2_t)__builtin_neon_vcvtn_u32_v((int8x8_t)__a, 18); } +__ai uint32x4_t vcvtnq_u32_f32(float32x4_t __a) { + return (uint32x4_t)__builtin_neon_vcvtnq_u32_v((int8x16_t)__a, 50); } + +__ai uint64x1_t vcvtn_u64_f64(float64x1_t __a) { + return (uint64x1_t)__builtin_neon_vcvtn_u64_v((int8x8_t)__a, 19); } +__ai uint64x2_t vcvtnq_u64_f64(float64x2_t __a) { + return (uint64x2_t)__builtin_neon_vcvtnq_u64_v((int8x16_t)__a, 51); } + +__ai int32x2_t vcvtp_s32_f32(float32x2_t __a) { + return (int32x2_t)__builtin_neon_vcvtp_s32_v((int8x8_t)__a, 2); } +__ai int32x4_t vcvtpq_s32_f32(float32x4_t __a) { + return (int32x4_t)__builtin_neon_vcvtpq_s32_v((int8x16_t)__a, 34); } + +__ai int64x1_t vcvtp_s64_f64(float64x1_t __a) { + return (int64x1_t)__builtin_neon_vcvtp_s64_v((int8x8_t)__a, 3); } +__ai int64x2_t vcvtpq_s64_f64(float64x2_t __a) { + return (int64x2_t)__builtin_neon_vcvtpq_s64_v((int8x16_t)__a, 35); } + +__ai uint32x2_t vcvtp_u32_f32(float32x2_t __a) { + return (uint32x2_t)__builtin_neon_vcvtp_u32_v((int8x8_t)__a, 18); } +__ai uint32x4_t vcvtpq_u32_f32(float32x4_t __a) { + return (uint32x4_t)__builtin_neon_vcvtpq_u32_v((int8x16_t)__a, 50); } + +__ai uint64x1_t vcvtp_u64_f64(float64x1_t __a) { + return (uint64x1_t)__builtin_neon_vcvtp_u64_v((int8x8_t)__a, 19); } +__ai uint64x2_t vcvtpq_u64_f64(float64x2_t __a) { + return (uint64x2_t)__builtin_neon_vcvtpq_u64_v((int8x16_t)__a, 51); } + +#define vcvt_n_s64_f64(a, __b) __extension__ ({ \ + float64x1_t __a = (a); \ + (int64x1_t)__builtin_neon_vcvt_n_s64_v((int8x8_t)__a, __b, 3); }) +#define vcvtq_n_s64_f64(a, __b) __extension__ ({ \ + float64x2_t __a = (a); \ + (int64x2_t)__builtin_neon_vcvtq_n_s64_v((int8x16_t)__a, __b, 35); }) + +#define vcvt_n_u64_f64(a, __b) __extension__ ({ \ + float64x1_t __a = (a); \ + (uint64x1_t)__builtin_neon_vcvt_n_u64_v((int8x8_t)__a, __b, 19); }) +#define vcvtq_n_u64_f64(a, __b) __extension__ ({ \ + float64x2_t __a = (a); \ + (uint64x2_t)__builtin_neon_vcvtq_n_u64_v((int8x16_t)__a, __b, 51); }) + +__ai float32x2_t vdiv_f32(float32x2_t __a, float32x2_t __b) { + return __a / __b; } +__ai float64x1_t vdiv_f64(float64x1_t __a, float64x1_t __b) { + return __a / __b; } +__ai float32x4_t vdivq_f32(float32x4_t __a, float32x4_t __b) { + return __a / __b; } +__ai float64x2_t vdivq_f64(float64x2_t __a, float64x2_t __b) { + return __a / __b; } + +__ai float32x2_t vmaxnm_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vmaxnm_v((int8x8_t)__a, (int8x8_t)__b, 8); } +__ai float64x1_t vmaxnm_f64(float64x1_t __a, float64x1_t __b) { + return (float64x1_t)__builtin_neon_vmaxnm_v((int8x8_t)__a, (int8x8_t)__b, 9); } +__ai float32x4_t vmaxnmq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vmaxnmq_v((int8x16_t)__a, (int8x16_t)__b, 40); } +__ai float64x2_t vmaxnmq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vmaxnmq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai float32x2_t vpmaxnm_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vpmaxnm_v((int8x8_t)__a, (int8x8_t)__b, 8); } +__ai float32x4_t vpmaxnmq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vpmaxnmq_v((int8x16_t)__a, (int8x16_t)__b, 40); } +__ai float64x2_t vpmaxnmq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vpmaxnmq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai float32_t vmaxnmv_f32(float32x2_t __a) { + return (float32_t)__builtin_neon_vmaxnmv_f32(__a); } +__ai float32_t vmaxnmvq_f32(float32x4_t __a) { + return (float32_t)__builtin_neon_vmaxnmvq_f32(__a); } +__ai float64_t vmaxnmvq_f64(float64x2_t __a) { + return (float64_t)__builtin_neon_vmaxnmvq_f64(__a); } + +__ai float32x2_t vminnm_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vminnm_v((int8x8_t)__a, (int8x8_t)__b, 8); } +__ai float64x1_t vminnm_f64(float64x1_t __a, float64x1_t __b) { + return (float64x1_t)__builtin_neon_vminnm_v((int8x8_t)__a, (int8x8_t)__b, 9); } +__ai float32x4_t vminnmq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vminnmq_v((int8x16_t)__a, (int8x16_t)__b, 40); } +__ai float64x2_t vminnmq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vminnmq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai float32x2_t vpminnm_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vpminnm_v((int8x8_t)__a, (int8x8_t)__b, 8); } +__ai float32x4_t vpminnmq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vpminnmq_v((int8x16_t)__a, (int8x16_t)__b, 40); } +__ai float64x2_t vpminnmq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vpminnmq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai float32_t vminnmv_f32(float32x2_t __a) { + return (float32_t)__builtin_neon_vminnmv_f32(__a); } +__ai float32_t vminnmvq_f32(float32x4_t __a) { + return (float32_t)__builtin_neon_vminnmvq_f32(__a); } +__ai float64_t vminnmvq_f64(float64x2_t __a) { + return (float64_t)__builtin_neon_vminnmvq_f64(__a); } + +__ai float64x1_t vfma_f64(float64x1_t __a, float64x1_t __b, float64x1_t __c) { + return (float64x1_t)__builtin_neon_vfma_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 9); } +__ai float64x2_t vfmaq_f64(float64x2_t __a, float64x2_t __b, float64x2_t __c) { + return (float64x2_t)__builtin_neon_vfmaq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 41); } + +__ai float32x2_t vfma_n_f32(float32x2_t __a, float32x2_t __b, float32_t __c) { + return vfma_f32(__a, __b, (float32x2_t){ __c, __c }); } +__ai float32x4_t vfmaq_n_f32(float32x4_t __a, float32x4_t __b, float32_t __c) { + return vfmaq_f32(__a, __b, (float32x4_t){ __c, __c, __c, __c }); } + +__ai float32x2_t vfms_f32(float32x2_t __a, float32x2_t __b, float32x2_t __c) { + return (float32x2_t)__builtin_neon_vfms_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 8); } +__ai float64x1_t vfms_f64(float64x1_t __a, float64x1_t __b, float64x1_t __c) { + return (float64x1_t)__builtin_neon_vfms_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, 9); } +__ai float32x4_t vfmsq_f32(float32x4_t __a, float32x4_t __b, float32x4_t __c) { + return (float32x4_t)__builtin_neon_vfmsq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 40); } +__ai float64x2_t vfmsq_f64(float64x2_t __a, float64x2_t __b, float64x2_t __c) { + return (float64x2_t)__builtin_neon_vfmsq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 41); } + +__ai float32x2_t vfms_n_f32(float32x2_t __a, float32x2_t __b, float32_t __c) { + return vfms_f32(__a, __b, (float32x2_t){ __c, __c }); } +__ai float32x4_t vfmsq_n_f32(float32x4_t __a, float32x4_t __b, float32_t __c) { + return vfmsq_f32(__a, __b, (float32x4_t){ __c, __c, __c, __c }); } + +__ai float64x1_t vrecpe_f64(float64x1_t __a) { + return (float64x1_t)__builtin_neon_vrecpe_v((int8x8_t)__a, 9); } +__ai float64x2_t vrecpeq_f64(float64x2_t __a) { + return (float64x2_t)__builtin_neon_vrecpeq_v((int8x16_t)__a, 41); } + +__ai float64x1_t vrecps_f64(float64x1_t __a, float64x1_t __b) { + return (float64x1_t)__builtin_neon_vrecps_v((int8x8_t)__a, (int8x8_t)__b, 9); } +__ai float64x2_t vrecpsq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vrecpsq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai float32x2_t vrnda_f32(float32x2_t __a) { + return (float32x2_t)__builtin_neon_vrnda_v((int8x8_t)__a, 8); } +__ai float64x1_t vrnda_f64(float64x1_t __a) { + return (float64x1_t)__builtin_neon_vrnda_v((int8x8_t)__a, 9); } +__ai float32x4_t vrndaq_f32(float32x4_t __a) { + return (float32x4_t)__builtin_neon_vrndaq_v((int8x16_t)__a, 40); } +__ai float64x2_t vrndaq_f64(float64x2_t __a) { + return (float64x2_t)__builtin_neon_vrndaq_v((int8x16_t)__a, 41); } + +__ai float32x2_t vrndi_f32(float32x2_t __a) { + return (float32x2_t)__builtin_neon_vrndi_v((int8x8_t)__a, 8); } +__ai float64x1_t vrndi_f64(float64x1_t __a) { + return (float64x1_t)__builtin_neon_vrndi_v((int8x8_t)__a, 9); } +__ai float32x4_t vrndiq_f32(float32x4_t __a) { + return (float32x4_t)__builtin_neon_vrndiq_v((int8x16_t)__a, 40); } +__ai float64x2_t vrndiq_f64(float64x2_t __a) { + return (float64x2_t)__builtin_neon_vrndiq_v((int8x16_t)__a, 41); } + +__ai float32x2_t vrndm_f32(float32x2_t __a) { + return (float32x2_t)__builtin_neon_vrndm_v((int8x8_t)__a, 8); } +__ai float64x1_t vrndm_f64(float64x1_t __a) { + return (float64x1_t)__builtin_neon_vrndm_v((int8x8_t)__a, 9); } +__ai float32x4_t vrndmq_f32(float32x4_t __a) { + return (float32x4_t)__builtin_neon_vrndmq_v((int8x16_t)__a, 40); } +__ai float64x2_t vrndmq_f64(float64x2_t __a) { + return (float64x2_t)__builtin_neon_vrndmq_v((int8x16_t)__a, 41); } + +__ai float32x2_t vrndn_f32(float32x2_t __a) { + return (float32x2_t)__builtin_neon_vrndn_v((int8x8_t)__a, 8); } +__ai float64x1_t vrndn_f64(float64x1_t __a) { + return (float64x1_t)__builtin_neon_vrndn_v((int8x8_t)__a, 9); } +__ai float32x4_t vrndnq_f32(float32x4_t __a) { + return (float32x4_t)__builtin_neon_vrndnq_v((int8x16_t)__a, 40); } +__ai float64x2_t vrndnq_f64(float64x2_t __a) { + return (float64x2_t)__builtin_neon_vrndnq_v((int8x16_t)__a, 41); } + +__ai float32x2_t vrndp_f32(float32x2_t __a) { + return (float32x2_t)__builtin_neon_vrndp_v((int8x8_t)__a, 8); } +__ai float64x1_t vrndp_f64(float64x1_t __a) { + return (float64x1_t)__builtin_neon_vrndp_v((int8x8_t)__a, 9); } +__ai float32x4_t vrndpq_f32(float32x4_t __a) { + return (float32x4_t)__builtin_neon_vrndpq_v((int8x16_t)__a, 40); } +__ai float64x2_t vrndpq_f64(float64x2_t __a) { + return (float64x2_t)__builtin_neon_vrndpq_v((int8x16_t)__a, 41); } + +__ai float32x2_t vrndx_f32(float32x2_t __a) { + return (float32x2_t)__builtin_neon_vrndx_v((int8x8_t)__a, 8); } +__ai float64x1_t vrndx_f64(float64x1_t __a) { + return (float64x1_t)__builtin_neon_vrndx_v((int8x8_t)__a, 9); } +__ai float32x4_t vrndxq_f32(float32x4_t __a) { + return (float32x4_t)__builtin_neon_vrndxq_v((int8x16_t)__a, 40); } +__ai float64x2_t vrndxq_f64(float64x2_t __a) { + return (float64x2_t)__builtin_neon_vrndxq_v((int8x16_t)__a, 41); } + +__ai float32x2_t vrnd_f32(float32x2_t __a) { + return (float32x2_t)__builtin_neon_vrnd_v((int8x8_t)__a, 8); } +__ai float64x1_t vrnd_f64(float64x1_t __a) { + return (float64x1_t)__builtin_neon_vrnd_v((int8x8_t)__a, 9); } +__ai float32x4_t vrndq_f32(float32x4_t __a) { + return (float32x4_t)__builtin_neon_vrndq_v((int8x16_t)__a, 40); } +__ai float64x2_t vrndq_f64(float64x2_t __a) { + return (float64x2_t)__builtin_neon_vrndq_v((int8x16_t)__a, 41); } + +__ai float64x1_t vrsqrte_f64(float64x1_t __a) { + return (float64x1_t)__builtin_neon_vrsqrte_v((int8x8_t)__a, 9); } +__ai float64x2_t vrsqrteq_f64(float64x2_t __a) { + return (float64x2_t)__builtin_neon_vrsqrteq_v((int8x16_t)__a, 41); } + +__ai float64x1_t vrsqrts_f64(float64x1_t __a, float64x1_t __b) { + return (float64x1_t)__builtin_neon_vrsqrts_v((int8x8_t)__a, (int8x8_t)__b, 9); } +__ai float64x2_t vrsqrtsq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vrsqrtsq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai float32x2_t vsqrt_f32(float32x2_t __a) { + return (float32x2_t)__builtin_neon_vsqrt_v((int8x8_t)__a, 8); } +__ai float64x1_t vsqrt_f64(float64x1_t __a) { + return (float64x1_t)__builtin_neon_vsqrt_v((int8x8_t)__a, 9); } +__ai float32x4_t vsqrtq_f32(float32x4_t __a) { + return (float32x4_t)__builtin_neon_vsqrtq_v((int8x16_t)__a, 40); } +__ai float64x2_t vsqrtq_f64(float64x2_t __a) { + return (float64x2_t)__builtin_neon_vsqrtq_v((int8x16_t)__a, 41); } + +#define vget_lane_f64(a, __b) __extension__ ({ \ + float64x1_t __a = (a); \ + (float64_t)__builtin_neon_vget_lane_f64(__a, __b); }) +#define vgetq_lane_f64(a, __b) __extension__ ({ \ + float64x2_t __a = (a); \ + (float64_t)__builtin_neon_vgetq_lane_f64(__a, __b); }) +#define vget_lane_p64(a, __b) __extension__ ({ \ + poly64x1_t __a = (a); \ + (poly64_t)__builtin_neon_vget_lane_i64((int64x1_t)__a, __b); }) +#define vgetq_lane_p64(a, __b) __extension__ ({ \ + poly64x2_t __a = (a); \ + (poly64_t)__builtin_neon_vgetq_lane_i64((int64x2_t)__a, __b); }) + +#define vld1q_f64(__a) __extension__ ({ \ + (float64x2_t)__builtin_neon_vld1q_v(__a, 41); }) +#define vld1_f64(__a) __extension__ ({ \ + (float64x1_t)__builtin_neon_vld1_v(__a, 9); }) +#define vld1_p64(__a) __extension__ ({ \ + (poly64x1_t)__builtin_neon_vld1_v(__a, 6); }) +#define vld1q_p64(__a) __extension__ ({ \ + (poly64x2_t)__builtin_neon_vld1q_v(__a, 38); }) + +#define vld1q_dup_f64(__a) __extension__ ({ \ + (float64x2_t)__builtin_neon_vld1q_dup_v(__a, 41); }) +#define vld1q_dup_p64(__a) __extension__ ({ \ + (poly64x2_t)__builtin_neon_vld1q_dup_v(__a, 38); }) +#define vld1_dup_f64(__a) __extension__ ({ \ + (float64x1_t)__builtin_neon_vld1_dup_v(__a, 9); }) +#define vld1_dup_p64(__a) __extension__ ({ \ + (poly64x1_t)__builtin_neon_vld1_dup_v(__a, 6); }) + +#define vld1q_lane_f64(__a, b, __c) __extension__ ({ \ + float64x2_t __b = (b); \ + (float64x2_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 41); }) +#define vld1q_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x2_t __b = (b); \ + (poly64x2_t)__builtin_neon_vld1q_lane_v(__a, (int8x16_t)__b, __c, 38); }) +#define vld1_lane_f64(__a, b, __c) __extension__ ({ \ + float64x1_t __b = (b); \ + (float64x1_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 9); }) +#define vld1_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x1_t __b = (b); \ + (poly64x1_t)__builtin_neon_vld1_lane_v(__a, (int8x8_t)__b, __c, 6); }) + +#define vld1q_u8_x2(__a) __extension__ ({ \ + uint8x16x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 48); r; }) +#define vld1q_u16_x2(__a) __extension__ ({ \ + uint16x8x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 49); r; }) +#define vld1q_u32_x2(__a) __extension__ ({ \ + uint32x4x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 50); r; }) +#define vld1q_u64_x2(__a) __extension__ ({ \ + uint64x2x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 51); r; }) +#define vld1q_s8_x2(__a) __extension__ ({ \ + int8x16x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 32); r; }) +#define vld1q_s16_x2(__a) __extension__ ({ \ + int16x8x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 33); r; }) +#define vld1q_s32_x2(__a) __extension__ ({ \ + int32x4x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 34); r; }) +#define vld1q_s64_x2(__a) __extension__ ({ \ + int64x2x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 35); r; }) +#define vld1q_f16_x2(__a) __extension__ ({ \ + float16x8x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 39); r; }) +#define vld1q_f32_x2(__a) __extension__ ({ \ + float32x4x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 40); r; }) +#define vld1q_f64_x2(__a) __extension__ ({ \ + float64x2x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 41); r; }) +#define vld1q_p8_x2(__a) __extension__ ({ \ + poly8x16x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 36); r; }) +#define vld1q_p16_x2(__a) __extension__ ({ \ + poly16x8x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 37); r; }) +#define vld1q_p64_x2(__a) __extension__ ({ \ + poly64x2x2_t r; __builtin_neon_vld1q_x2_v(&r, __a, 38); r; }) +#define vld1_u8_x2(__a) __extension__ ({ \ + uint8x8x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 16); r; }) +#define vld1_u16_x2(__a) __extension__ ({ \ + uint16x4x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 17); r; }) +#define vld1_u32_x2(__a) __extension__ ({ \ + uint32x2x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 18); r; }) +#define vld1_u64_x2(__a) __extension__ ({ \ + uint64x1x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 19); r; }) +#define vld1_s8_x2(__a) __extension__ ({ \ + int8x8x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 0); r; }) +#define vld1_s16_x2(__a) __extension__ ({ \ + int16x4x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 1); r; }) +#define vld1_s32_x2(__a) __extension__ ({ \ + int32x2x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 2); r; }) +#define vld1_s64_x2(__a) __extension__ ({ \ + int64x1x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 3); r; }) +#define vld1_f16_x2(__a) __extension__ ({ \ + float16x4x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 7); r; }) +#define vld1_f32_x2(__a) __extension__ ({ \ + float32x2x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 8); r; }) +#define vld1_f64_x2(__a) __extension__ ({ \ + float64x1x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 9); r; }) +#define vld1_p8_x2(__a) __extension__ ({ \ + poly8x8x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 4); r; }) +#define vld1_p16_x2(__a) __extension__ ({ \ + poly16x4x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 5); r; }) +#define vld1_p64_x2(__a) __extension__ ({ \ + poly64x1x2_t r; __builtin_neon_vld1_x2_v(&r, __a, 6); r; }) + +#define vld2q_u64(__a) __extension__ ({ \ + uint64x2x2_t r; __builtin_neon_vld2q_v(&r, __a, 51); r; }) +#define vld2q_s64(__a) __extension__ ({ \ + int64x2x2_t r; __builtin_neon_vld2q_v(&r, __a, 35); r; }) +#define vld2q_f64(__a) __extension__ ({ \ + float64x2x2_t r; __builtin_neon_vld2q_v(&r, __a, 41); r; }) +#define vld2_f64(__a) __extension__ ({ \ + float64x1x2_t r; __builtin_neon_vld2_v(&r, __a, 9); r; }) +#define vld2_p64(__a) __extension__ ({ \ + poly64x1x2_t r; __builtin_neon_vld2_v(&r, __a, 6); r; }) +#define vld2q_p64(__a) __extension__ ({ \ + poly64x2x2_t r; __builtin_neon_vld2q_v(&r, __a, 38); r; }) + +#define vld2q_dup_u8(__a) __extension__ ({ \ + uint8x16x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 48); r; }) +#define vld2q_dup_u16(__a) __extension__ ({ \ + uint16x8x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 49); r; }) +#define vld2q_dup_u32(__a) __extension__ ({ \ + uint32x4x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 50); r; }) +#define vld2q_dup_u64(__a) __extension__ ({ \ + uint64x2x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 51); r; }) +#define vld2q_dup_s8(__a) __extension__ ({ \ + int8x16x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 32); r; }) +#define vld2q_dup_s16(__a) __extension__ ({ \ + int16x8x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 33); r; }) +#define vld2q_dup_s32(__a) __extension__ ({ \ + int32x4x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 34); r; }) +#define vld2q_dup_s64(__a) __extension__ ({ \ + int64x2x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 35); r; }) +#define vld2q_dup_f16(__a) __extension__ ({ \ + float16x8x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 39); r; }) +#define vld2q_dup_f32(__a) __extension__ ({ \ + float32x4x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 40); r; }) +#define vld2q_dup_f64(__a) __extension__ ({ \ + float64x2x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 41); r; }) +#define vld2q_dup_p8(__a) __extension__ ({ \ + poly8x16x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 36); r; }) +#define vld2q_dup_p16(__a) __extension__ ({ \ + poly16x8x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 37); r; }) +#define vld2q_dup_p64(__a) __extension__ ({ \ + poly64x2x2_t r; __builtin_neon_vld2q_dup_v(&r, __a, 38); r; }) +#define vld2_dup_f64(__a) __extension__ ({ \ + float64x1x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 9); r; }) +#define vld2_dup_p64(__a) __extension__ ({ \ + poly64x1x2_t r; __builtin_neon_vld2_dup_v(&r, __a, 6); r; }) + +#define vld2q_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x16x2_t __b = (b); \ + uint8x16x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 48); r; }) +#define vld2q_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x2x2_t __b = (b); \ + uint64x2x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 51); r; }) +#define vld2q_lane_s8(__a, b, __c) __extension__ ({ \ + int8x16x2_t __b = (b); \ + int8x16x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, __b.val[0], __b.val[1], __c, 32); r; }) +#define vld2q_lane_s64(__a, b, __c) __extension__ ({ \ + int64x2x2_t __b = (b); \ + int64x2x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 35); r; }) +#define vld2q_lane_f64(__a, b, __c) __extension__ ({ \ + float64x2x2_t __b = (b); \ + float64x2x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 41); r; }) +#define vld2q_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x16x2_t __b = (b); \ + poly8x16x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 36); r; }) +#define vld2q_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x2x2_t __b = (b); \ + poly64x2x2_t r; __builtin_neon_vld2q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 38); r; }) +#define vld2_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x1x2_t __b = (b); \ + uint64x1x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 19); r; }) +#define vld2_lane_s64(__a, b, __c) __extension__ ({ \ + int64x1x2_t __b = (b); \ + int64x1x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 3); r; }) +#define vld2_lane_f64(__a, b, __c) __extension__ ({ \ + float64x1x2_t __b = (b); \ + float64x1x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 9); r; }) +#define vld2_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x1x2_t __b = (b); \ + poly64x1x2_t r; __builtin_neon_vld2_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 6); r; }) + +#define vld3q_u64(__a) __extension__ ({ \ + uint64x2x3_t r; __builtin_neon_vld3q_v(&r, __a, 51); r; }) +#define vld3q_s64(__a) __extension__ ({ \ + int64x2x3_t r; __builtin_neon_vld3q_v(&r, __a, 35); r; }) +#define vld3q_f64(__a) __extension__ ({ \ + float64x2x3_t r; __builtin_neon_vld3q_v(&r, __a, 41); r; }) +#define vld3_f64(__a) __extension__ ({ \ + float64x1x3_t r; __builtin_neon_vld3_v(&r, __a, 9); r; }) +#define vld3_p64(__a) __extension__ ({ \ + poly64x1x3_t r; __builtin_neon_vld3_v(&r, __a, 6); r; }) +#define vld3q_p64(__a) __extension__ ({ \ + poly64x2x3_t r; __builtin_neon_vld3q_v(&r, __a, 38); r; }) + +#define vld3q_dup_u8(__a) __extension__ ({ \ + uint8x16x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 48); r; }) +#define vld3q_dup_u16(__a) __extension__ ({ \ + uint16x8x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 49); r; }) +#define vld3q_dup_u32(__a) __extension__ ({ \ + uint32x4x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 50); r; }) +#define vld3q_dup_u64(__a) __extension__ ({ \ + uint64x2x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 51); r; }) +#define vld3q_dup_s8(__a) __extension__ ({ \ + int8x16x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 32); r; }) +#define vld3q_dup_s16(__a) __extension__ ({ \ + int16x8x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 33); r; }) +#define vld3q_dup_s32(__a) __extension__ ({ \ + int32x4x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 34); r; }) +#define vld3q_dup_s64(__a) __extension__ ({ \ + int64x2x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 35); r; }) +#define vld3q_dup_f16(__a) __extension__ ({ \ + float16x8x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 39); r; }) +#define vld3q_dup_f32(__a) __extension__ ({ \ + float32x4x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 40); r; }) +#define vld3q_dup_f64(__a) __extension__ ({ \ + float64x2x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 41); r; }) +#define vld3q_dup_p8(__a) __extension__ ({ \ + poly8x16x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 36); r; }) +#define vld3q_dup_p16(__a) __extension__ ({ \ + poly16x8x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 37); r; }) +#define vld3q_dup_p64(__a) __extension__ ({ \ + poly64x2x3_t r; __builtin_neon_vld3q_dup_v(&r, __a, 38); r; }) +#define vld3_dup_f64(__a) __extension__ ({ \ + float64x1x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 9); r; }) +#define vld3_dup_p64(__a) __extension__ ({ \ + poly64x1x3_t r; __builtin_neon_vld3_dup_v(&r, __a, 6); r; }) + +#define vld3q_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x16x3_t __b = (b); \ + uint8x16x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 48); r; }) +#define vld3q_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x2x3_t __b = (b); \ + uint64x2x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 51); r; }) +#define vld3q_lane_s8(__a, b, __c) __extension__ ({ \ + int8x16x3_t __b = (b); \ + int8x16x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, __b.val[0], __b.val[1], __b.val[2], __c, 32); r; }) +#define vld3q_lane_s64(__a, b, __c) __extension__ ({ \ + int64x2x3_t __b = (b); \ + int64x2x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 35); r; }) +#define vld3q_lane_f64(__a, b, __c) __extension__ ({ \ + float64x2x3_t __b = (b); \ + float64x2x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 41); r; }) +#define vld3q_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x16x3_t __b = (b); \ + poly8x16x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 36); r; }) +#define vld3q_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x2x3_t __b = (b); \ + poly64x2x3_t r; __builtin_neon_vld3q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 38); r; }) +#define vld3_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x1x3_t __b = (b); \ + uint64x1x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 19); r; }) +#define vld3_lane_s64(__a, b, __c) __extension__ ({ \ + int64x1x3_t __b = (b); \ + int64x1x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 3); r; }) +#define vld3_lane_f64(__a, b, __c) __extension__ ({ \ + float64x1x3_t __b = (b); \ + float64x1x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 9); r; }) +#define vld3_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x1x3_t __b = (b); \ + poly64x1x3_t r; __builtin_neon_vld3_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 6); r; }) + +#define vld1q_u8_x3(__a) __extension__ ({ \ + uint8x16x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 48); r; }) +#define vld1q_u16_x3(__a) __extension__ ({ \ + uint16x8x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 49); r; }) +#define vld1q_u32_x3(__a) __extension__ ({ \ + uint32x4x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 50); r; }) +#define vld1q_u64_x3(__a) __extension__ ({ \ + uint64x2x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 51); r; }) +#define vld1q_s8_x3(__a) __extension__ ({ \ + int8x16x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 32); r; }) +#define vld1q_s16_x3(__a) __extension__ ({ \ + int16x8x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 33); r; }) +#define vld1q_s32_x3(__a) __extension__ ({ \ + int32x4x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 34); r; }) +#define vld1q_s64_x3(__a) __extension__ ({ \ + int64x2x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 35); r; }) +#define vld1q_f16_x3(__a) __extension__ ({ \ + float16x8x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 39); r; }) +#define vld1q_f32_x3(__a) __extension__ ({ \ + float32x4x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 40); r; }) +#define vld1q_f64_x3(__a) __extension__ ({ \ + float64x2x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 41); r; }) +#define vld1q_p8_x3(__a) __extension__ ({ \ + poly8x16x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 36); r; }) +#define vld1q_p16_x3(__a) __extension__ ({ \ + poly16x8x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 37); r; }) +#define vld1q_p64_x3(__a) __extension__ ({ \ + poly64x2x3_t r; __builtin_neon_vld1q_x3_v(&r, __a, 38); r; }) +#define vld1_u8_x3(__a) __extension__ ({ \ + uint8x8x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 16); r; }) +#define vld1_u16_x3(__a) __extension__ ({ \ + uint16x4x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 17); r; }) +#define vld1_u32_x3(__a) __extension__ ({ \ + uint32x2x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 18); r; }) +#define vld1_u64_x3(__a) __extension__ ({ \ + uint64x1x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 19); r; }) +#define vld1_s8_x3(__a) __extension__ ({ \ + int8x8x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 0); r; }) +#define vld1_s16_x3(__a) __extension__ ({ \ + int16x4x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 1); r; }) +#define vld1_s32_x3(__a) __extension__ ({ \ + int32x2x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 2); r; }) +#define vld1_s64_x3(__a) __extension__ ({ \ + int64x1x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 3); r; }) +#define vld1_f16_x3(__a) __extension__ ({ \ + float16x4x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 7); r; }) +#define vld1_f32_x3(__a) __extension__ ({ \ + float32x2x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 8); r; }) +#define vld1_f64_x3(__a) __extension__ ({ \ + float64x1x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 9); r; }) +#define vld1_p8_x3(__a) __extension__ ({ \ + poly8x8x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 4); r; }) +#define vld1_p16_x3(__a) __extension__ ({ \ + poly16x4x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 5); r; }) +#define vld1_p64_x3(__a) __extension__ ({ \ + poly64x1x3_t r; __builtin_neon_vld1_x3_v(&r, __a, 6); r; }) + +#define vld4q_u64(__a) __extension__ ({ \ + uint64x2x4_t r; __builtin_neon_vld4q_v(&r, __a, 51); r; }) +#define vld4q_s64(__a) __extension__ ({ \ + int64x2x4_t r; __builtin_neon_vld4q_v(&r, __a, 35); r; }) +#define vld4q_f64(__a) __extension__ ({ \ + float64x2x4_t r; __builtin_neon_vld4q_v(&r, __a, 41); r; }) +#define vld4_f64(__a) __extension__ ({ \ + float64x1x4_t r; __builtin_neon_vld4_v(&r, __a, 9); r; }) +#define vld4_p64(__a) __extension__ ({ \ + poly64x1x4_t r; __builtin_neon_vld4_v(&r, __a, 6); r; }) +#define vld4q_p64(__a) __extension__ ({ \ + poly64x2x4_t r; __builtin_neon_vld4q_v(&r, __a, 38); r; }) + +#define vld4q_dup_u8(__a) __extension__ ({ \ + uint8x16x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 48); r; }) +#define vld4q_dup_u16(__a) __extension__ ({ \ + uint16x8x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 49); r; }) +#define vld4q_dup_u32(__a) __extension__ ({ \ + uint32x4x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 50); r; }) +#define vld4q_dup_u64(__a) __extension__ ({ \ + uint64x2x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 51); r; }) +#define vld4q_dup_s8(__a) __extension__ ({ \ + int8x16x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 32); r; }) +#define vld4q_dup_s16(__a) __extension__ ({ \ + int16x8x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 33); r; }) +#define vld4q_dup_s32(__a) __extension__ ({ \ + int32x4x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 34); r; }) +#define vld4q_dup_s64(__a) __extension__ ({ \ + int64x2x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 35); r; }) +#define vld4q_dup_f16(__a) __extension__ ({ \ + float16x8x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 39); r; }) +#define vld4q_dup_f32(__a) __extension__ ({ \ + float32x4x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 40); r; }) +#define vld4q_dup_f64(__a) __extension__ ({ \ + float64x2x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 41); r; }) +#define vld4q_dup_p8(__a) __extension__ ({ \ + poly8x16x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 36); r; }) +#define vld4q_dup_p16(__a) __extension__ ({ \ + poly16x8x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 37); r; }) +#define vld4q_dup_p64(__a) __extension__ ({ \ + poly64x2x4_t r; __builtin_neon_vld4q_dup_v(&r, __a, 38); r; }) +#define vld4_dup_f64(__a) __extension__ ({ \ + float64x1x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 9); r; }) +#define vld4_dup_p64(__a) __extension__ ({ \ + poly64x1x4_t r; __builtin_neon_vld4_dup_v(&r, __a, 6); r; }) + +#define vld4q_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x16x4_t __b = (b); \ + uint8x16x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 48); r; }) +#define vld4q_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x2x4_t __b = (b); \ + uint64x2x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 51); r; }) +#define vld4q_lane_s8(__a, b, __c) __extension__ ({ \ + int8x16x4_t __b = (b); \ + int8x16x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, __b.val[0], __b.val[1], __b.val[2], __b.val[3], __c, 32); r; }) +#define vld4q_lane_s64(__a, b, __c) __extension__ ({ \ + int64x2x4_t __b = (b); \ + int64x2x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 35); r; }) +#define vld4q_lane_f64(__a, b, __c) __extension__ ({ \ + float64x2x4_t __b = (b); \ + float64x2x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 41); r; }) +#define vld4q_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x16x4_t __b = (b); \ + poly8x16x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 36); r; }) +#define vld4q_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x2x4_t __b = (b); \ + poly64x2x4_t r; __builtin_neon_vld4q_lane_v(&r, __a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 38); r; }) +#define vld4_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x1x4_t __b = (b); \ + uint64x1x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 19); r; }) +#define vld4_lane_s64(__a, b, __c) __extension__ ({ \ + int64x1x4_t __b = (b); \ + int64x1x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 3); r; }) +#define vld4_lane_f64(__a, b, __c) __extension__ ({ \ + float64x1x4_t __b = (b); \ + float64x1x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 9); r; }) +#define vld4_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x1x4_t __b = (b); \ + poly64x1x4_t r; __builtin_neon_vld4_lane_v(&r, __a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 6); r; }) + +#define vld1q_u8_x4(__a) __extension__ ({ \ + uint8x16x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 48); r; }) +#define vld1q_u16_x4(__a) __extension__ ({ \ + uint16x8x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 49); r; }) +#define vld1q_u32_x4(__a) __extension__ ({ \ + uint32x4x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 50); r; }) +#define vld1q_u64_x4(__a) __extension__ ({ \ + uint64x2x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 51); r; }) +#define vld1q_s8_x4(__a) __extension__ ({ \ + int8x16x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 32); r; }) +#define vld1q_s16_x4(__a) __extension__ ({ \ + int16x8x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 33); r; }) +#define vld1q_s32_x4(__a) __extension__ ({ \ + int32x4x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 34); r; }) +#define vld1q_s64_x4(__a) __extension__ ({ \ + int64x2x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 35); r; }) +#define vld1q_f16_x4(__a) __extension__ ({ \ + float16x8x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 39); r; }) +#define vld1q_f32_x4(__a) __extension__ ({ \ + float32x4x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 40); r; }) +#define vld1q_f64_x4(__a) __extension__ ({ \ + float64x2x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 41); r; }) +#define vld1q_p8_x4(__a) __extension__ ({ \ + poly8x16x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 36); r; }) +#define vld1q_p16_x4(__a) __extension__ ({ \ + poly16x8x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 37); r; }) +#define vld1q_p64_x4(__a) __extension__ ({ \ + poly64x2x4_t r; __builtin_neon_vld1q_x4_v(&r, __a, 38); r; }) +#define vld1_u8_x4(__a) __extension__ ({ \ + uint8x8x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 16); r; }) +#define vld1_u16_x4(__a) __extension__ ({ \ + uint16x4x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 17); r; }) +#define vld1_u32_x4(__a) __extension__ ({ \ + uint32x2x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 18); r; }) +#define vld1_u64_x4(__a) __extension__ ({ \ + uint64x1x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 19); r; }) +#define vld1_s8_x4(__a) __extension__ ({ \ + int8x8x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 0); r; }) +#define vld1_s16_x4(__a) __extension__ ({ \ + int16x4x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 1); r; }) +#define vld1_s32_x4(__a) __extension__ ({ \ + int32x2x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 2); r; }) +#define vld1_s64_x4(__a) __extension__ ({ \ + int64x1x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 3); r; }) +#define vld1_f16_x4(__a) __extension__ ({ \ + float16x4x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 7); r; }) +#define vld1_f32_x4(__a) __extension__ ({ \ + float32x2x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 8); r; }) +#define vld1_f64_x4(__a) __extension__ ({ \ + float64x1x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 9); r; }) +#define vld1_p8_x4(__a) __extension__ ({ \ + poly8x8x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 4); r; }) +#define vld1_p16_x4(__a) __extension__ ({ \ + poly16x4x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 5); r; }) +#define vld1_p64_x4(__a) __extension__ ({ \ + poly64x1x4_t r; __builtin_neon_vld1_x4_v(&r, __a, 6); r; }) + +__ai float64x1_t vmax_f64(float64x1_t __a, float64x1_t __b) { + return (float64x1_t)__builtin_neon_vmax_v((int8x8_t)__a, (int8x8_t)__b, 9); } +__ai float64x2_t vmaxq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vmaxq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai int8x16_t vpmaxq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vpmaxq_v(__a, __b, 32); } +__ai int16x8_t vpmaxq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vpmaxq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vpmaxq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vpmaxq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai uint8x16_t vpmaxq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vpmaxq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vpmaxq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vpmaxq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vpmaxq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vpmaxq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai float32x4_t vpmaxq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vpmaxq_v((int8x16_t)__a, (int8x16_t)__b, 40); } +__ai float64x2_t vpmaxq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vpmaxq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai float64x1_t vmin_f64(float64x1_t __a, float64x1_t __b) { + return (float64x1_t)__builtin_neon_vmin_v((int8x8_t)__a, (int8x8_t)__b, 9); } +__ai float64x2_t vminq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vminq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai int8x16_t vpminq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vpminq_v(__a, __b, 32); } +__ai int16x8_t vpminq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vpminq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vpminq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vpminq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai uint8x16_t vpminq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vpminq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vpminq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vpminq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vpminq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vpminq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai float32x4_t vpminq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vpminq_v((int8x16_t)__a, (int8x16_t)__b, 40); } +__ai float64x2_t vpminq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vpminq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai float64x1_t vmla_f64(float64x1_t __a, float64x1_t __b, float64x1_t __c) { + return __a + (__b * __c); } +__ai float64x2_t vmlaq_f64(float64x2_t __a, float64x2_t __b, float64x2_t __c) { + return __a + (__b * __c); } + +__ai float64x1_t vmls_f64(float64x1_t __a, float64x1_t __b, float64x1_t __c) { + return __a - (__b * __c); } +__ai float64x2_t vmlsq_f64(float64x2_t __a, float64x2_t __b, float64x2_t __c) { + return __a - (__b * __c); } + +__ai float64x1_t vmov_n_f64(float64_t __a) { + return (float64x1_t){ __a }; } +__ai float64x2_t vmovq_n_f64(float64_t __a) { + return (float64x2_t){ __a, __a }; } + +__ai float64x1_t vmul_f64(float64x1_t __a, float64x1_t __b) { + return __a * __b; } +__ai float64x2_t vmulq_f64(float64x2_t __a, float64x2_t __b) { + return __a * __b; } + +__ai float32x2_t vmulx_f32(float32x2_t __a, float32x2_t __b) { + return (float32x2_t)__builtin_neon_vmulx_v((int8x8_t)__a, (int8x8_t)__b, 8); } +__ai float64x1_t vmulx_f64(float64x1_t __a, float64x1_t __b) { + return (float64x1_t)__builtin_neon_vmulx_v((int8x8_t)__a, (int8x8_t)__b, 9); } +__ai float32x4_t vmulxq_f32(float32x4_t __a, float32x4_t __b) { + return (float32x4_t)__builtin_neon_vmulxq_v((int8x16_t)__a, (int8x16_t)__b, 40); } +__ai float64x2_t vmulxq_f64(float64x2_t __a, float64x2_t __b) { + return (float64x2_t)__builtin_neon_vmulxq_v((int8x16_t)__a, (int8x16_t)__b, 41); } + +__ai int64x1_t vneg_s64(int64x1_t __a) { + return -__a; } +__ai float64x1_t vneg_f64(float64x1_t __a) { + return -__a; } +__ai float64x2_t vnegq_f64(float64x2_t __a) { + return -__a; } +__ai int64x2_t vnegq_s64(int64x2_t __a) { + return -__a; } + +__ai int64x1_t vqabs_s64(int64x1_t __a) { + return (int64x1_t)__builtin_neon_vqabs_v((int8x8_t)__a, 3); } +__ai int64x2_t vqabsq_s64(int64x2_t __a) { + return (int64x2_t)__builtin_neon_vqabsq_v((int8x16_t)__a, 35); } + +__ai int64x1_t vqneg_s64(int64x1_t __a) { + return (int64x1_t)__builtin_neon_vqneg_v((int8x8_t)__a, 3); } +__ai int64x2_t vqnegq_s64(int64x2_t __a) { + return (int64x2_t)__builtin_neon_vqnegq_v((int8x16_t)__a, 35); } + +#define vqrshrn_high_n_s16(a, b, __c) __extension__ ({ \ + int8x8_t __a = (a); int16x8_t __b = (b); \ + (int8x16_t)vcombine_s16(__a, vqrshrn_n_s16(__b, __c)); }) +#define vqrshrn_high_n_s32(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int32x4_t __b = (b); \ + (int16x8_t)vcombine_s32(__a, vqrshrn_n_s32(__b, __c)); }) +#define vqrshrn_high_n_s64(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int64x2_t __b = (b); \ + (int32x4_t)vcombine_s64(__a, vqrshrn_n_s64(__b, __c)); }) +#define vqrshrn_high_n_u16(a, b, __c) __extension__ ({ \ + uint8x8_t __a = (a); uint16x8_t __b = (b); \ + (uint8x16_t)vcombine_u16(__a, vqrshrn_n_u16(__b, __c)); }) +#define vqrshrn_high_n_u32(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint32x4_t __b = (b); \ + (uint16x8_t)vcombine_u32(__a, vqrshrn_n_u32(__b, __c)); }) +#define vqrshrn_high_n_u64(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint64x2_t __b = (b); \ + (uint32x4_t)vcombine_u64(__a, vqrshrn_n_u64(__b, __c)); }) + +#define vqrshrun_high_n_s16(a, b, __c) __extension__ ({ \ + int8x8_t __a = (a); int16x8_t __b = (b); \ + (int8x16_t)vcombine_s16(__a, vqrshrun_n_s16(__b, __c)); }) +#define vqrshrun_high_n_s32(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int32x4_t __b = (b); \ + (int16x8_t)vcombine_s32(__a, vqrshrun_n_s32(__b, __c)); }) +#define vqrshrun_high_n_s64(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int64x2_t __b = (b); \ + (int32x4_t)vcombine_s64(__a, vqrshrun_n_s64(__b, __c)); }) + +#define vqshrn_high_n_s16(a, b, __c) __extension__ ({ \ + int8x8_t __a = (a); int16x8_t __b = (b); \ + (int8x16_t)vcombine_s16(__a, vqshrn_n_s16(__b, __c)); }) +#define vqshrn_high_n_s32(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int32x4_t __b = (b); \ + (int16x8_t)vcombine_s32(__a, vqshrn_n_s32(__b, __c)); }) +#define vqshrn_high_n_s64(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int64x2_t __b = (b); \ + (int32x4_t)vcombine_s64(__a, vqshrn_n_s64(__b, __c)); }) +#define vqshrn_high_n_u16(a, b, __c) __extension__ ({ \ + uint8x8_t __a = (a); uint16x8_t __b = (b); \ + (uint8x16_t)vcombine_u16(__a, vqshrn_n_u16(__b, __c)); }) +#define vqshrn_high_n_u32(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint32x4_t __b = (b); \ + (uint16x8_t)vcombine_u32(__a, vqshrn_n_u32(__b, __c)); }) +#define vqshrn_high_n_u64(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint64x2_t __b = (b); \ + (uint32x4_t)vcombine_u64(__a, vqshrn_n_u64(__b, __c)); }) + +#define vqshrun_high_n_s16(a, b, __c) __extension__ ({ \ + int8x8_t __a = (a); int16x8_t __b = (b); \ + (int8x16_t)vcombine_s16(__a, vqshrun_n_s16(__b, __c)); }) +#define vqshrun_high_n_s32(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int32x4_t __b = (b); \ + (int16x8_t)vcombine_s32(__a, vqshrun_n_s32(__b, __c)); }) +#define vqshrun_high_n_s64(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int64x2_t __b = (b); \ + (int32x4_t)vcombine_s64(__a, vqshrun_n_s64(__b, __c)); }) + +__ai int8x16_t vqmovn_high_s16(int8x8_t __a, int16x8_t __b) { + int8x8_t __a1 = vqmovn_s16(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); } +__ai int16x8_t vqmovn_high_s32(int16x4_t __a, int32x4_t __b) { + int16x4_t __a1 = vqmovn_s32(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3, 4, 5, 6, 7); } +__ai int32x4_t vqmovn_high_s64(int32x2_t __a, int64x2_t __b) { + int32x2_t __a1 = vqmovn_s64(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3); } +__ai uint8x16_t vqmovn_high_u16(uint8x8_t __a, uint16x8_t __b) { + uint8x8_t __a1 = vqmovn_u16(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); } +__ai uint16x8_t vqmovn_high_u32(uint16x4_t __a, uint32x4_t __b) { + uint16x4_t __a1 = vqmovn_u32(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3, 4, 5, 6, 7); } +__ai uint32x4_t vqmovn_high_u64(uint32x2_t __a, uint64x2_t __b) { + uint32x2_t __a1 = vqmovn_u64(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3); } + +__ai int8x8_t vrbit_s8(int8x8_t __a) { + return (int8x8_t)__builtin_neon_vrbit_v(__a, 0); } +__ai uint8x8_t vrbit_u8(uint8x8_t __a) { + return (uint8x8_t)__builtin_neon_vrbit_v((int8x8_t)__a, 16); } +__ai poly8x8_t vrbit_p8(poly8x8_t __a) { + return (poly8x8_t)__builtin_neon_vrbit_v((int8x8_t)__a, 4); } +__ai int8x16_t vrbitq_s8(int8x16_t __a) { + return (int8x16_t)__builtin_neon_vrbitq_v(__a, 32); } +__ai uint8x16_t vrbitq_u8(uint8x16_t __a) { + return (uint8x16_t)__builtin_neon_vrbitq_v((int8x16_t)__a, 48); } +__ai poly8x16_t vrbitq_p8(poly8x16_t __a) { + return (poly8x16_t)__builtin_neon_vrbitq_v((int8x16_t)__a, 36); } + +__ai int8x8_t vreinterpret_s8_f64(float64x1_t __a) { + return (int8x8_t)__a; } +__ai int8x8_t vreinterpret_s8_p64(poly64x1_t __a) { + return (int8x8_t)__a; } +__ai int16x4_t vreinterpret_s16_f64(float64x1_t __a) { + return (int16x4_t)__a; } +__ai int16x4_t vreinterpret_s16_p64(poly64x1_t __a) { + return (int16x4_t)__a; } +__ai int32x2_t vreinterpret_s32_f64(float64x1_t __a) { + return (int32x2_t)__a; } +__ai int32x2_t vreinterpret_s32_p64(poly64x1_t __a) { + return (int32x2_t)__a; } +__ai int64x1_t vreinterpret_s64_f64(float64x1_t __a) { + return (int64x1_t)__a; } +__ai int64x1_t vreinterpret_s64_p64(poly64x1_t __a) { + return (int64x1_t)__a; } +__ai uint8x8_t vreinterpret_u8_f64(float64x1_t __a) { + return (uint8x8_t)__a; } +__ai uint8x8_t vreinterpret_u8_p64(poly64x1_t __a) { + return (uint8x8_t)__a; } +__ai uint16x4_t vreinterpret_u16_f64(float64x1_t __a) { + return (uint16x4_t)__a; } +__ai uint16x4_t vreinterpret_u16_p64(poly64x1_t __a) { + return (uint16x4_t)__a; } +__ai uint32x2_t vreinterpret_u32_f64(float64x1_t __a) { + return (uint32x2_t)__a; } +__ai uint32x2_t vreinterpret_u32_p64(poly64x1_t __a) { + return (uint32x2_t)__a; } +__ai uint64x1_t vreinterpret_u64_f64(float64x1_t __a) { + return (uint64x1_t)__a; } +__ai uint64x1_t vreinterpret_u64_p64(poly64x1_t __a) { + return (uint64x1_t)__a; } +__ai float16x4_t vreinterpret_f16_f64(float64x1_t __a) { + return (float16x4_t)__a; } +__ai float16x4_t vreinterpret_f16_p64(poly64x1_t __a) { + return (float16x4_t)__a; } +__ai float32x2_t vreinterpret_f32_f64(float64x1_t __a) { + return (float32x2_t)__a; } +__ai float32x2_t vreinterpret_f32_p64(poly64x1_t __a) { + return (float32x2_t)__a; } +__ai float64x1_t vreinterpret_f64_s8(int8x8_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_s16(int16x4_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_s32(int32x2_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_s64(int64x1_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_u8(uint8x8_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_u16(uint16x4_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_u32(uint32x2_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_u64(uint64x1_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_f16(float16x4_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_f32(float32x2_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_p8(poly8x8_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_p16(poly16x4_t __a) { + return (float64x1_t)__a; } +__ai float64x1_t vreinterpret_f64_p64(poly64x1_t __a) { + return (float64x1_t)__a; } +__ai poly8x8_t vreinterpret_p8_f64(float64x1_t __a) { + return (poly8x8_t)__a; } +__ai poly8x8_t vreinterpret_p8_p64(poly64x1_t __a) { + return (poly8x8_t)__a; } +__ai poly16x4_t vreinterpret_p16_f64(float64x1_t __a) { + return (poly16x4_t)__a; } +__ai poly16x4_t vreinterpret_p16_p64(poly64x1_t __a) { + return (poly16x4_t)__a; } +__ai poly64x1_t vreinterpret_p64_s8(int8x8_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_s16(int16x4_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_s32(int32x2_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_s64(int64x1_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_u8(uint8x8_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_u16(uint16x4_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_u32(uint32x2_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_u64(uint64x1_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_f16(float16x4_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_f32(float32x2_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_f64(float64x1_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_p8(poly8x8_t __a) { + return (poly64x1_t)__a; } +__ai poly64x1_t vreinterpret_p64_p16(poly16x4_t __a) { + return (poly64x1_t)__a; } +__ai int8x16_t vreinterpretq_s8_f64(float64x2_t __a) { + return (int8x16_t)__a; } +__ai int8x16_t vreinterpretq_s8_p64(poly64x2_t __a) { + return (int8x16_t)__a; } +__ai int16x8_t vreinterpretq_s16_f64(float64x2_t __a) { + return (int16x8_t)__a; } +__ai int16x8_t vreinterpretq_s16_p64(poly64x2_t __a) { + return (int16x8_t)__a; } +__ai int32x4_t vreinterpretq_s32_f64(float64x2_t __a) { + return (int32x4_t)__a; } +__ai int32x4_t vreinterpretq_s32_p64(poly64x2_t __a) { + return (int32x4_t)__a; } +__ai int64x2_t vreinterpretq_s64_f64(float64x2_t __a) { + return (int64x2_t)__a; } +__ai int64x2_t vreinterpretq_s64_p64(poly64x2_t __a) { + return (int64x2_t)__a; } +__ai uint8x16_t vreinterpretq_u8_f64(float64x2_t __a) { + return (uint8x16_t)__a; } +__ai uint8x16_t vreinterpretq_u8_p64(poly64x2_t __a) { + return (uint8x16_t)__a; } +__ai uint16x8_t vreinterpretq_u16_f64(float64x2_t __a) { + return (uint16x8_t)__a; } +__ai uint16x8_t vreinterpretq_u16_p64(poly64x2_t __a) { + return (uint16x8_t)__a; } +__ai uint32x4_t vreinterpretq_u32_f64(float64x2_t __a) { + return (uint32x4_t)__a; } +__ai uint32x4_t vreinterpretq_u32_p64(poly64x2_t __a) { + return (uint32x4_t)__a; } +__ai uint64x2_t vreinterpretq_u64_f64(float64x2_t __a) { + return (uint64x2_t)__a; } +__ai uint64x2_t vreinterpretq_u64_p64(poly64x2_t __a) { + return (uint64x2_t)__a; } +__ai float16x8_t vreinterpretq_f16_f64(float64x2_t __a) { + return (float16x8_t)__a; } +__ai float16x8_t vreinterpretq_f16_p64(poly64x2_t __a) { + return (float16x8_t)__a; } +__ai float32x4_t vreinterpretq_f32_f64(float64x2_t __a) { + return (float32x4_t)__a; } +__ai float32x4_t vreinterpretq_f32_p64(poly64x2_t __a) { + return (float32x4_t)__a; } +__ai float64x2_t vreinterpretq_f64_s8(int8x16_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_s16(int16x8_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_s32(int32x4_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_s64(int64x2_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_u8(uint8x16_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_u16(uint16x8_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_u32(uint32x4_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_u64(uint64x2_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_f16(float16x8_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_f32(float32x4_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_p8(poly8x16_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_p16(poly16x8_t __a) { + return (float64x2_t)__a; } +__ai float64x2_t vreinterpretq_f64_p64(poly64x2_t __a) { + return (float64x2_t)__a; } +__ai poly8x16_t vreinterpretq_p8_f64(float64x2_t __a) { + return (poly8x16_t)__a; } +__ai poly8x16_t vreinterpretq_p8_p64(poly64x2_t __a) { + return (poly8x16_t)__a; } +__ai poly16x8_t vreinterpretq_p16_f64(float64x2_t __a) { + return (poly16x8_t)__a; } +__ai poly16x8_t vreinterpretq_p16_p64(poly64x2_t __a) { + return (poly16x8_t)__a; } +__ai poly64x2_t vreinterpretq_p64_s8(int8x16_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_s16(int16x8_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_s32(int32x4_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_s64(int64x2_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_u8(uint8x16_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_u16(uint16x8_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_u32(uint32x4_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_u64(uint64x2_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_f16(float16x8_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_f32(float32x4_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_f64(float64x2_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_p8(poly8x16_t __a) { + return (poly64x2_t)__a; } +__ai poly64x2_t vreinterpretq_p64_p16(poly16x8_t __a) { + return (poly64x2_t)__a; } + +#define vrshrn_high_n_s16(a, b, __c) __extension__ ({ \ + int8x8_t __a = (a); int16x8_t __b = (b); \ + (int8x16_t)vcombine_s16(__a, vrshrn_n_s16(__b, __c)); }) +#define vrshrn_high_n_s32(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int32x4_t __b = (b); \ + (int16x8_t)vcombine_s32(__a, vrshrn_n_s32(__b, __c)); }) +#define vrshrn_high_n_s64(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int64x2_t __b = (b); \ + (int32x4_t)vcombine_s64(__a, vrshrn_n_s64(__b, __c)); }) +#define vrshrn_high_n_u16(a, b, __c) __extension__ ({ \ + uint8x8_t __a = (a); uint16x8_t __b = (b); \ + (uint8x16_t)vcombine_u16(__a, vrshrn_n_u16(__b, __c)); }) +#define vrshrn_high_n_u32(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint32x4_t __b = (b); \ + (uint16x8_t)vcombine_u32(__a, vrshrn_n_u32(__b, __c)); }) +#define vrshrn_high_n_u64(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint64x2_t __b = (b); \ + (uint32x4_t)vcombine_u64(__a, vrshrn_n_u64(__b, __c)); }) + +__ai float32_t vabds_f32(float32_t __a, float32_t __b) { + return (float32_t)__builtin_neon_vabds_f32(__a, __b); } +__ai float64_t vabdd_f64(float64_t __a, float64_t __b) { + return (float64_t)__builtin_neon_vabdd_f64(__a, __b); } + +__ai int64_t vabsd_s64(int64_t __a) { + return (int64_t)__builtin_neon_vabsd_s64(__a); } + +__ai int64_t vaddd_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vaddd_s64(__a, __b); } +__ai uint64_t vaddd_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vaddd_u64(__a, __b); } + +__ai float32_t vpadds_f32(float32x2_t __a) { + return (float32_t)__builtin_neon_vpadds_f32(__a); } +__ai int64_t vpaddd_s64(int64x2_t __a) { + return (int64_t)__builtin_neon_vpaddd_s64(__a); } +__ai float64_t vpaddd_f64(float64x2_t __a) { + return (float64_t)__builtin_neon_vpaddd_f64(__a); } +__ai uint64_t vpaddd_u64(uint64x2_t __a) { + return (uint64_t)__builtin_neon_vpaddd_u64((int64x2_t)__a); } + +__ai int64_t vceqd_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vceqd_s64(__a, __b); } +__ai uint64_t vceqd_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vceqd_u64(__a, __b); } + +__ai int64_t vceqzd_s64(int64_t __a) { + return (int64_t)__builtin_neon_vceqzd_s64(__a); } +__ai uint64_t vceqzd_u64(uint64_t __a) { + return (uint64_t)__builtin_neon_vceqzd_u64(__a); } + +__ai int64_t vcged_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vcged_s64(__a, __b); } + +__ai int64_t vcgezd_s64(int64_t __a) { + return (int64_t)__builtin_neon_vcgezd_s64(__a); } + +__ai int64_t vcgtd_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vcgtd_s64(__a, __b); } + +__ai int64_t vcgtzd_s64(int64_t __a) { + return (int64_t)__builtin_neon_vcgtzd_s64(__a); } + +__ai uint64_t vcgtd_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vcgtd_u64(__a, __b); } + +__ai uint64_t vcged_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vcged_u64(__a, __b); } + +__ai int64_t vcled_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vcled_s64(__a, __b); } +__ai uint64_t vcled_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vcled_u64(__a, __b); } + +__ai int64_t vclezd_s64(int64_t __a) { + return (int64_t)__builtin_neon_vclezd_s64(__a); } + +__ai int64_t vcltd_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vcltd_s64(__a, __b); } +__ai uint64_t vcltd_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vcltd_u64(__a, __b); } + +__ai int64_t vcltzd_s64(int64_t __a) { + return (int64_t)__builtin_neon_vcltzd_s64(__a); } + +__ai int64_t vtstd_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vtstd_s64(__a, __b); } +__ai uint64_t vtstd_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vtstd_u64(__a, __b); } + +__ai uint32_t vcages_f32(float32_t __a, float32_t __b) { + return (uint32_t)__builtin_neon_vcages_f32(__a, __b); } +__ai uint64_t vcaged_f64(float64_t __a, float64_t __b) { + return (uint64_t)__builtin_neon_vcaged_f64(__a, __b); } + +__ai uint32_t vcagts_f32(float32_t __a, float32_t __b) { + return (uint32_t)__builtin_neon_vcagts_f32(__a, __b); } +__ai uint64_t vcagtd_f64(float64_t __a, float64_t __b) { + return (uint64_t)__builtin_neon_vcagtd_f64(__a, __b); } + +__ai uint32_t vcales_f32(float32_t __a, float32_t __b) { + return (uint32_t)__builtin_neon_vcales_f32(__a, __b); } +__ai uint64_t vcaled_f64(float64_t __a, float64_t __b) { + return (uint64_t)__builtin_neon_vcaled_f64(__a, __b); } + +__ai uint32_t vcalts_f32(float32_t __a, float32_t __b) { + return (uint32_t)__builtin_neon_vcalts_f32(__a, __b); } +__ai uint64_t vcaltd_f64(float64_t __a, float64_t __b) { + return (uint64_t)__builtin_neon_vcaltd_f64(__a, __b); } + +__ai uint32_t vceqs_f32(float32_t __a, float32_t __b) { + return (uint32_t)__builtin_neon_vceqs_f32(__a, __b); } +__ai uint64_t vceqd_f64(float64_t __a, float64_t __b) { + return (uint64_t)__builtin_neon_vceqd_f64(__a, __b); } + +__ai uint32_t vceqzs_f32(float32_t __a) { + return (uint32_t)__builtin_neon_vceqzs_f32(__a); } +__ai uint64_t vceqzd_f64(float64_t __a) { + return (uint64_t)__builtin_neon_vceqzd_f64(__a); } + +__ai uint32_t vcges_f32(float32_t __a, float32_t __b) { + return (uint32_t)__builtin_neon_vcges_f32(__a, __b); } +__ai uint64_t vcged_f64(float64_t __a, float64_t __b) { + return (uint64_t)__builtin_neon_vcged_f64(__a, __b); } + +__ai uint32_t vcgezs_f32(float32_t __a) { + return (uint32_t)__builtin_neon_vcgezs_f32(__a); } +__ai uint64_t vcgezd_f64(float64_t __a) { + return (uint64_t)__builtin_neon_vcgezd_f64(__a); } + +__ai uint32_t vcgts_f32(float32_t __a, float32_t __b) { + return (uint32_t)__builtin_neon_vcgts_f32(__a, __b); } +__ai uint64_t vcgtd_f64(float64_t __a, float64_t __b) { + return (uint64_t)__builtin_neon_vcgtd_f64(__a, __b); } + +__ai uint32_t vcgtzs_f32(float32_t __a) { + return (uint32_t)__builtin_neon_vcgtzs_f32(__a); } +__ai uint64_t vcgtzd_f64(float64_t __a) { + return (uint64_t)__builtin_neon_vcgtzd_f64(__a); } + +__ai uint32_t vcles_f32(float32_t __a, float32_t __b) { + return (uint32_t)__builtin_neon_vcles_f32(__a, __b); } +__ai uint64_t vcled_f64(float64_t __a, float64_t __b) { + return (uint64_t)__builtin_neon_vcled_f64(__a, __b); } + +__ai uint32_t vclezs_f32(float32_t __a) { + return (uint32_t)__builtin_neon_vclezs_f32(__a); } +__ai uint64_t vclezd_f64(float64_t __a) { + return (uint64_t)__builtin_neon_vclezd_f64(__a); } + +__ai uint32_t vclts_f32(float32_t __a, float32_t __b) { + return (uint32_t)__builtin_neon_vclts_f32(__a, __b); } +__ai uint64_t vcltd_f64(float64_t __a, float64_t __b) { + return (uint64_t)__builtin_neon_vcltd_f64(__a, __b); } + +__ai uint32_t vcltzs_f32(float32_t __a) { + return (uint32_t)__builtin_neon_vcltzs_f32(__a); } +__ai uint64_t vcltzd_f64(float64_t __a) { + return (uint64_t)__builtin_neon_vcltzd_f64(__a); } + +__ai int64_t vcvtad_s64_f64(float64_t __a) { + return (int64_t)__builtin_neon_vcvtad_s64_f64(__a); } + +__ai int32_t vcvtas_s32_f32(float32_t __a) { + return (int32_t)__builtin_neon_vcvtas_s32_f32(__a); } + +__ai uint64_t vcvtad_u64_f64(float64_t __a) { + return (uint64_t)__builtin_neon_vcvtad_u64_f64(__a); } + +__ai uint32_t vcvtas_u32_f32(float32_t __a) { + return (uint32_t)__builtin_neon_vcvtas_u32_f32(__a); } + +__ai int64_t vcvtmd_s64_f64(float64_t __a) { + return (int64_t)__builtin_neon_vcvtmd_s64_f64(__a); } + +__ai int32_t vcvtms_s32_f32(float32_t __a) { + return (int32_t)__builtin_neon_vcvtms_s32_f32(__a); } + +__ai uint64_t vcvtmd_u64_f64(float64_t __a) { + return (uint64_t)__builtin_neon_vcvtmd_u64_f64(__a); } + +__ai uint32_t vcvtms_u32_f32(float32_t __a) { + return (uint32_t)__builtin_neon_vcvtms_u32_f32(__a); } + +__ai int64_t vcvtnd_s64_f64(float64_t __a) { + return (int64_t)__builtin_neon_vcvtnd_s64_f64(__a); } + +__ai int32_t vcvtns_s32_f32(float32_t __a) { + return (int32_t)__builtin_neon_vcvtns_s32_f32(__a); } + +__ai uint64_t vcvtnd_u64_f64(float64_t __a) { + return (uint64_t)__builtin_neon_vcvtnd_u64_f64(__a); } + +__ai uint32_t vcvtns_u32_f32(float32_t __a) { + return (uint32_t)__builtin_neon_vcvtns_u32_f32(__a); } + +__ai int64_t vcvtpd_s64_f64(float64_t __a) { + return (int64_t)__builtin_neon_vcvtpd_s64_f64(__a); } + +__ai int32_t vcvtps_s32_f32(float32_t __a) { + return (int32_t)__builtin_neon_vcvtps_s32_f32(__a); } + +__ai uint64_t vcvtpd_u64_f64(float64_t __a) { + return (uint64_t)__builtin_neon_vcvtpd_u64_f64(__a); } + +__ai uint32_t vcvtps_u32_f32(float32_t __a) { + return (uint32_t)__builtin_neon_vcvtps_u32_f32(__a); } + +__ai float32_t vcvtxd_f32_f64(float64_t __a) { + return (float32_t)__builtin_neon_vcvtxd_f32_f64(__a); } + +__ai int64_t vcvtd_s64_f64(float64_t __a) { + return (int64_t)__builtin_neon_vcvtd_s64_f64(__a); } + +__ai int32_t vcvts_s32_f32(float32_t __a) { + return (int32_t)__builtin_neon_vcvts_s32_f32(__a); } + +#define vcvts_n_s32_f32(a, __b) __extension__ ({ \ + float32_t __a = (a); \ + (int32_t)__builtin_neon_vcvts_n_s32_f32(__a, __b); }) + +#define vcvtd_n_s64_f64(a, __b) __extension__ ({ \ + float64_t __a = (a); \ + (int64_t)__builtin_neon_vcvtd_n_s64_f64(__a, __b); }) + +__ai uint64_t vcvtd_u64_f64(float64_t __a) { + return (uint64_t)__builtin_neon_vcvtd_u64_f64(__a); } + +__ai uint32_t vcvts_u32_f32(float32_t __a) { + return (uint32_t)__builtin_neon_vcvts_u32_f32(__a); } + +#define vcvts_n_u32_f32(a, __b) __extension__ ({ \ + float32_t __a = (a); \ + (uint32_t)__builtin_neon_vcvts_n_u32_f32(__a, __b); }) + +#define vcvtd_n_u64_f64(a, __b) __extension__ ({ \ + float64_t __a = (a); \ + (uint64_t)__builtin_neon_vcvtd_n_u64_f64(__a, __b); }) + +__ai float32_t vpmaxnms_f32(float32x2_t __a) { + return (float32_t)__builtin_neon_vpmaxnms_f32(__a); } +__ai float64_t vpmaxnmqd_f64(float64x2_t __a) { + return (float64_t)__builtin_neon_vpmaxnmqd_f64(__a); } + +__ai float32_t vpmaxs_f32(float32x2_t __a) { + return (float32_t)__builtin_neon_vpmaxs_f32(__a); } +__ai float64_t vpmaxqd_f64(float64x2_t __a) { + return (float64_t)__builtin_neon_vpmaxqd_f64(__a); } + +__ai float32_t vpminnms_f32(float32x2_t __a) { + return (float32_t)__builtin_neon_vpminnms_f32(__a); } +__ai float64_t vpminnmqd_f64(float64x2_t __a) { + return (float64_t)__builtin_neon_vpminnmqd_f64(__a); } + +__ai float32_t vpmins_f32(float32x2_t __a) { + return (float32_t)__builtin_neon_vpmins_f32(__a); } +__ai float64_t vpminqd_f64(float64x2_t __a) { + return (float64_t)__builtin_neon_vpminqd_f64(__a); } + +#define vfmas_lane_f32(a, b, c, __d) __extension__ ({ \ + float32_t __a = (a); float32_t __b = (b); float32x2_t __c = (c); \ + (float32_t)__builtin_neon_vfmas_lane_f32(__a, __b, __c, __d); }) +#define vfmad_lane_f64(a, b, c, __d) __extension__ ({ \ + float64_t __a = (a); float64_t __b = (b); float64x1_t __c = (c); \ + (float64_t)__builtin_neon_vfmad_lane_f64(__a, __b, __c, __d); }) + +#define vfmas_laneq_f32(a, b, c, __d) __extension__ ({ \ + float32_t __a = (a); float32_t __b = (b); float32x4_t __c = (c); \ + (float32_t)__builtin_neon_vfmas_laneq_f32(__a, __b, __c, __d); }) +#define vfmad_laneq_f64(a, b, c, __d) __extension__ ({ \ + float64_t __a = (a); float64_t __b = (b); float64x2_t __c = (c); \ + (float64_t)__builtin_neon_vfmad_laneq_f64(__a, __b, __c, __d); }) + +#define vfmss_lane_f32(a, b, c, __d) __extension__ ({ \ + float32_t __a = (a); float32_t __b = (b); float32x2_t __c = (c); \ + float32_t __a1 = __a; \ + float32_t __b1 = __b; \ + float32x2_t __c1 = __c; \ + vfmas_lane_f32(__a1, __b1, -__c1, __d); }) +#define vfmsd_lane_f64(a, b, c, __d) __extension__ ({ \ + float64_t __a = (a); float64_t __b = (b); float64x1_t __c = (c); \ + float64_t __a1 = __a; \ + float64_t __b1 = __b; \ + float64x1_t __c1 = __c; \ + vfmad_lane_f64(__a1, __b1, -__c1, __d); }) + +#define vfmss_laneq_f32(a, b, c, __d) __extension__ ({ \ + float32_t __a = (a); float32_t __b = (b); float32x4_t __c = (c); \ + float32_t __a1 = __a; \ + float32_t __b1 = __b; \ + float32x4_t __c1 = __c; \ + vfmas_laneq_f32(__a1, __b1, -__c1, __d); }) +#define vfmsd_laneq_f64(a, b, c, __d) __extension__ ({ \ + float64_t __a = (a); float64_t __b = (b); float64x2_t __c = (c); \ + float64_t __a1 = __a; \ + float64_t __b1 = __b; \ + float64x2_t __c1 = __c; \ + vfmad_laneq_f64(__a1, __b1, -__c1, __d); }) + +__ai float32_t vmulxs_f32(float32_t __a, float32_t __b) { + return (float32_t)__builtin_neon_vmulxs_f32(__a, __b); } +__ai float64_t vmulxd_f64(float64_t __a, float64_t __b) { + return (float64_t)__builtin_neon_vmulxd_f64(__a, __b); } + +#define vmulxs_lane_f32(a, b, __c) __extension__ ({ \ + float32_t __a = (a); float32x2_t __b = (b); \ + float32_t __d1 = vget_lane_f32(__b, __c);\ + vmulxs_f32(__a, __d1); }) +#define vmulxd_lane_f64(a, b, __c) __extension__ ({ \ + float64_t __a = (a); float64x1_t __b = (b); \ + float64_t __d1 = vget_lane_f64(__b, __c);\ + vmulxd_f64(__a, __d1); }) + +#define vmulxs_laneq_f32(a, b, __c) __extension__ ({ \ + float32_t __a = (a); float32x4_t __b = (b); \ + float32_t __d1 = vgetq_lane_f32(__b, __c);\ + vmulxs_f32(__a, __d1); }) +#define vmulxd_laneq_f64(a, b, __c) __extension__ ({ \ + float64_t __a = (a); float64x2_t __b = (b); \ + float64_t __d1 = vgetq_lane_f64(__b, __c);\ + vmulxd_f64(__a, __d1); }) + +#define vmuls_lane_f32(a, b, __c) __extension__ ({ \ + float32_t __a = (a); float32x2_t __b = (b); \ + float32_t __d1 = vget_lane_f32(__b, __c);\ + __a * __d1; }) +#define vmuld_lane_f64(a, b, __c) __extension__ ({ \ + float64_t __a = (a); float64x1_t __b = (b); \ + float64_t __d1 = vget_lane_f64(__b, __c);\ + __a * __d1; }) + +#define vmuls_laneq_f32(a, b, __c) __extension__ ({ \ + float32_t __a = (a); float32x4_t __b = (b); \ + float32_t __d1 = vgetq_lane_f32(__b, __c);\ + __a * __d1; }) +#define vmuld_laneq_f64(a, b, __c) __extension__ ({ \ + float64_t __a = (a); float64x2_t __b = (b); \ + float64_t __d1 = vgetq_lane_f64(__b, __c);\ + __a * __d1; }) + +__ai float32_t vrecpes_f32(float32_t __a) { + return (float32_t)__builtin_neon_vrecpes_f32(__a); } +__ai float64_t vrecped_f64(float64_t __a) { + return (float64_t)__builtin_neon_vrecped_f64(__a); } + +__ai float32_t vrecpss_f32(float32_t __a, float32_t __b) { + return (float32_t)__builtin_neon_vrecpss_f32(__a, __b); } +__ai float64_t vrecpsd_f64(float64_t __a, float64_t __b) { + return (float64_t)__builtin_neon_vrecpsd_f64(__a, __b); } + +__ai float32_t vrecpxs_f32(float32_t __a) { + return (float32_t)__builtin_neon_vrecpxs_f32(__a); } +__ai float64_t vrecpxd_f64(float64_t __a) { + return (float64_t)__builtin_neon_vrecpxd_f64(__a); } + +__ai float32_t vrsqrtes_f32(float32_t __a) { + return (float32_t)__builtin_neon_vrsqrtes_f32(__a); } +__ai float64_t vrsqrted_f64(float64_t __a) { + return (float64_t)__builtin_neon_vrsqrted_f64(__a); } + +__ai float32_t vrsqrtss_f32(float32_t __a, float32_t __b) { + return (float32_t)__builtin_neon_vrsqrtss_f32(__a, __b); } +__ai float64_t vrsqrtsd_f64(float64_t __a, float64_t __b) { + return (float64_t)__builtin_neon_vrsqrtsd_f64(__a, __b); } + +#define vget_lane_f16(a, __b) __extension__ ({ \ + float16x4_t __a = (a); \ + int16x4_t __a1 = vreinterpret_s16_f16(__a);\ + vget_lane_s16(__a1, __b); }) +#define vgetq_lane_f16(a, __b) __extension__ ({ \ + float16x8_t __a = (a); \ + int16x8_t __a1 = vreinterpretq_s16_f16(__a);\ + vgetq_lane_s16(__a1, __b); }) + +__ai int64_t vnegd_s64(int64_t __a) { + return (int64_t)__builtin_neon_vnegd_s64(__a); } + +__ai int8_t vqaddb_s8(int8_t __a, int8_t __b) { + return (int8_t)__builtin_neon_vqaddb_s8(__a, __b); } +__ai int16_t vqaddh_s16(int16_t __a, int16_t __b) { + return (int16_t)__builtin_neon_vqaddh_s16(__a, __b); } +__ai int32_t vqadds_s32(int32_t __a, int32_t __b) { + return (int32_t)__builtin_neon_vqadds_s32(__a, __b); } +__ai int64_t vqaddd_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vqaddd_s64(__a, __b); } +__ai uint8_t vqaddb_u8(uint8_t __a, uint8_t __b) { + return (uint8_t)__builtin_neon_vqaddb_u8(__a, __b); } +__ai uint16_t vqaddh_u16(uint16_t __a, uint16_t __b) { + return (uint16_t)__builtin_neon_vqaddh_u16(__a, __b); } +__ai uint32_t vqadds_u32(uint32_t __a, uint32_t __b) { + return (uint32_t)__builtin_neon_vqadds_u32(__a, __b); } +__ai uint64_t vqaddd_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vqaddd_u64(__a, __b); } + +__ai int8_t vqrshlb_s8(int8_t __a, int8_t __b) { + return (int8_t)__builtin_neon_vqrshlb_s8(__a, __b); } +__ai int16_t vqrshlh_s16(int16_t __a, int16_t __b) { + return (int16_t)__builtin_neon_vqrshlh_s16(__a, __b); } +__ai int32_t vqrshls_s32(int32_t __a, int32_t __b) { + return (int32_t)__builtin_neon_vqrshls_s32(__a, __b); } +__ai int64_t vqrshld_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vqrshld_s64(__a, __b); } +__ai uint8_t vqrshlb_u8(uint8_t __a, uint8_t __b) { + return (uint8_t)__builtin_neon_vqrshlb_u8(__a, __b); } +__ai uint16_t vqrshlh_u16(uint16_t __a, uint16_t __b) { + return (uint16_t)__builtin_neon_vqrshlh_u16(__a, __b); } +__ai uint32_t vqrshls_u32(uint32_t __a, uint32_t __b) { + return (uint32_t)__builtin_neon_vqrshls_u32(__a, __b); } +__ai uint64_t vqrshld_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vqrshld_u64(__a, __b); } + +__ai int8_t vqshlb_s8(int8_t __a, int8_t __b) { + return (int8_t)__builtin_neon_vqshlb_s8(__a, __b); } +__ai int16_t vqshlh_s16(int16_t __a, int16_t __b) { + return (int16_t)__builtin_neon_vqshlh_s16(__a, __b); } +__ai int32_t vqshls_s32(int32_t __a, int32_t __b) { + return (int32_t)__builtin_neon_vqshls_s32(__a, __b); } +__ai int64_t vqshld_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vqshld_s64(__a, __b); } +__ai uint8_t vqshlb_u8(uint8_t __a, uint8_t __b) { + return (uint8_t)__builtin_neon_vqshlb_u8(__a, __b); } +__ai uint16_t vqshlh_u16(uint16_t __a, uint16_t __b) { + return (uint16_t)__builtin_neon_vqshlh_u16(__a, __b); } +__ai uint32_t vqshls_u32(uint32_t __a, uint32_t __b) { + return (uint32_t)__builtin_neon_vqshls_u32(__a, __b); } +__ai uint64_t vqshld_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vqshld_u64(__a, __b); } + +__ai int8_t vqsubb_s8(int8_t __a, int8_t __b) { + return (int8_t)__builtin_neon_vqsubb_s8(__a, __b); } +__ai int16_t vqsubh_s16(int16_t __a, int16_t __b) { + return (int16_t)__builtin_neon_vqsubh_s16(__a, __b); } +__ai int32_t vqsubs_s32(int32_t __a, int32_t __b) { + return (int32_t)__builtin_neon_vqsubs_s32(__a, __b); } +__ai int64_t vqsubd_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vqsubd_s64(__a, __b); } +__ai uint8_t vqsubb_u8(uint8_t __a, uint8_t __b) { + return (uint8_t)__builtin_neon_vqsubb_u8(__a, __b); } +__ai uint16_t vqsubh_u16(uint16_t __a, uint16_t __b) { + return (uint16_t)__builtin_neon_vqsubh_u16(__a, __b); } +__ai uint32_t vqsubs_u32(uint32_t __a, uint32_t __b) { + return (uint32_t)__builtin_neon_vqsubs_u32(__a, __b); } +__ai uint64_t vqsubd_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vqsubd_u64(__a, __b); } + +__ai int64_t vrshld_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vrshld_s64(__a, __b); } +__ai uint64_t vrshld_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vrshld_u64(__a, __b); } + +__ai float64_t vcvtd_f64_s64(int64_t __a) { + return (float64_t)__builtin_neon_vcvtd_f64_s64(__a); } + +__ai float32_t vcvts_f32_s32(int32_t __a) { + return (float32_t)__builtin_neon_vcvts_f32_s32(__a); } + +#define vcvts_n_f32_s32(a, __b) __extension__ ({ \ + int32_t __a = (a); \ + (float32_t)__builtin_neon_vcvts_n_f32_s32(__a, __b); }) +#define vcvts_n_f32_u32(a, __b) __extension__ ({ \ + uint32_t __a = (a); \ + (float32_t)__builtin_neon_vcvts_n_f32_u32(__a, __b); }) + +#define vcvtd_n_f64_s64(a, __b) __extension__ ({ \ + int64_t __a = (a); \ + (float64_t)__builtin_neon_vcvtd_n_f64_s64(__a, __b); }) +#define vcvtd_n_f64_u64(a, __b) __extension__ ({ \ + uint64_t __a = (a); \ + (float64_t)__builtin_neon_vcvtd_n_f64_u64(__a, __b); }) + +#define vset_lane_f16(a, b, __c) __extension__ ({ \ + float16_t __a = (a); float16x4_t __b = (b); \ + int16_t __a1 = (int16_t)__a;\ + int16x4_t __b1 = vreinterpret_s16_f16(b);\ + int16x4_t __b2 = vset_lane_s16(__a1, __b1, __c);\ + vreinterpret_f16_s16(__b2); }) +#define vsetq_lane_f16(a, b, __c) __extension__ ({ \ + float16_t __a = (a); float16x8_t __b = (b); \ + int16_t __a1 = (int16_t)__a;\ + int16x8_t __b1 = vreinterpretq_s16_f16(b);\ + int16x8_t __b2 = vsetq_lane_s16(__a1, __b1, __c);\ + vreinterpretq_f16_s16(__b2); }) + +__ai int64_t vshld_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vshld_s64(__a, __b); } +__ai uint64_t vshld_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vshld_u64(__a, __b); } + +#define vshld_n_s64(a, __b) __extension__ ({ \ + int64_t __a = (a); \ + (int64_t)__builtin_neon_vshld_n_s64(__a, __b); }) +#define vshld_n_u64(a, __b) __extension__ ({ \ + uint64_t __a = (a); \ + (uint64_t)__builtin_neon_vshld_n_u64(__a, __b); }) + +#define vslid_n_s64(a, b, __c) __extension__ ({ \ + int64_t __a = (a); int64_t __b = (b); \ + (int64_t)__builtin_neon_vslid_n_s64(__a, __b, __c); }) +#define vslid_n_u64(a, b, __c) __extension__ ({ \ + uint64_t __a = (a); uint64_t __b = (b); \ + (uint64_t)__builtin_neon_vslid_n_u64(__a, __b, __c); }) + +__ai int8_t vqabsb_s8(int8_t __a) { + return (int8_t)__builtin_neon_vqabsb_s8(__a); } +__ai int16_t vqabsh_s16(int16_t __a) { + return (int16_t)__builtin_neon_vqabsh_s16(__a); } +__ai int32_t vqabss_s32(int32_t __a) { + return (int32_t)__builtin_neon_vqabss_s32(__a); } +__ai int64_t vqabsd_s64(int64_t __a) { + return (int64_t)__builtin_neon_vqabsd_s64(__a); } + +__ai int32_t vqdmlalh_s16(int32_t __a, int16_t __b, int16_t __c) { + return (int32_t)__builtin_neon_vqdmlalh_s16(__a, __b, __c); } +__ai int64_t vqdmlals_s32(int64_t __a, int32_t __b, int32_t __c) { + return (int64_t)__builtin_neon_vqdmlals_s32(__a, __b, __c); } + +#define vqdmlalh_lane_s16(a, b, c, __d) __extension__ ({ \ + int32_t __a = (a); int16_t __b = (b); int16x4_t __c = (c); \ + (int32_t)__builtin_neon_vqdmlalh_lane_s16(__a, __b, __c, __d); }) +#define vqdmlals_lane_s32(a, b, c, __d) __extension__ ({ \ + int64_t __a = (a); int32_t __b = (b); int32x2_t __c = (c); \ + (int64_t)__builtin_neon_vqdmlals_lane_s32(__a, __b, __c, __d); }) + +#define vqdmlalh_laneq_s16(a, b, c, __d) __extension__ ({ \ + int32_t __a = (a); int16_t __b = (b); int16x8_t __c = (c); \ + (int32_t)__builtin_neon_vqdmlalh_laneq_s16(__a, __b, __c, __d); }) +#define vqdmlals_laneq_s32(a, b, c, __d) __extension__ ({ \ + int64_t __a = (a); int32_t __b = (b); int32x4_t __c = (c); \ + (int64_t)__builtin_neon_vqdmlals_laneq_s32(__a, __b, __c, __d); }) + +__ai int32_t vqdmlslh_s16(int32_t __a, int16_t __b, int16_t __c) { + return (int32_t)__builtin_neon_vqdmlslh_s16(__a, __b, __c); } +__ai int64_t vqdmlsls_s32(int64_t __a, int32_t __b, int32_t __c) { + return (int64_t)__builtin_neon_vqdmlsls_s32(__a, __b, __c); } + +#define vqdmlslh_lane_s16(a, b, c, __d) __extension__ ({ \ + int32_t __a = (a); int16_t __b = (b); int16x4_t __c = (c); \ + (int32_t)__builtin_neon_vqdmlslh_lane_s16(__a, __b, __c, __d); }) +#define vqdmlsls_lane_s32(a, b, c, __d) __extension__ ({ \ + int64_t __a = (a); int32_t __b = (b); int32x2_t __c = (c); \ + (int64_t)__builtin_neon_vqdmlsls_lane_s32(__a, __b, __c, __d); }) + +#define vqdmlslh_laneq_s16(a, b, c, __d) __extension__ ({ \ + int32_t __a = (a); int16_t __b = (b); int16x8_t __c = (c); \ + (int32_t)__builtin_neon_vqdmlslh_laneq_s16(__a, __b, __c, __d); }) +#define vqdmlsls_laneq_s32(a, b, c, __d) __extension__ ({ \ + int64_t __a = (a); int32_t __b = (b); int32x4_t __c = (c); \ + (int64_t)__builtin_neon_vqdmlsls_laneq_s32(__a, __b, __c, __d); }) + +__ai int16_t vqdmulhh_s16(int16_t __a, int16_t __b) { + return (int16_t)__builtin_neon_vqdmulhh_s16(__a, __b); } +__ai int32_t vqdmulhs_s32(int32_t __a, int32_t __b) { + return (int32_t)__builtin_neon_vqdmulhs_s32(__a, __b); } + +#define vqdmulhh_lane_s16(a, b, __c) __extension__ ({ \ + int16_t __a = (a); int16x4_t __b = (b); \ + vqdmulhh_s16(__a, vget_lane_s16(__b, __c)); }) +#define vqdmulhs_lane_s32(a, b, __c) __extension__ ({ \ + int32_t __a = (a); int32x2_t __b = (b); \ + vqdmulhs_s32(__a, vget_lane_s32(__b, __c)); }) + +#define vqdmulhh_laneq_s16(a, b, __c) __extension__ ({ \ + int16_t __a = (a); int16x8_t __b = (b); \ + vqdmulhh_s16(__a, vgetq_lane_s16(__b, __c)); }) +#define vqdmulhs_laneq_s32(a, b, __c) __extension__ ({ \ + int32_t __a = (a); int32x4_t __b = (b); \ + vqdmulhs_s32(__a, vgetq_lane_s32(__b, __c)); }) + +__ai int32_t vqdmullh_s16(int16_t __a, int16_t __b) { + return (int32_t)__builtin_neon_vqdmullh_s16(__a, __b); } +__ai int64_t vqdmulls_s32(int32_t __a, int32_t __b) { + return (int64_t)__builtin_neon_vqdmulls_s32(__a, __b); } + +#define vqdmullh_lane_s16(a, b, __c) __extension__ ({ \ + int16_t __a = (a); int16x4_t __b = (b); \ + vqdmullh_s16(__a, vget_lane_s16(b, __c)); }) +#define vqdmulls_lane_s32(a, b, __c) __extension__ ({ \ + int32_t __a = (a); int32x2_t __b = (b); \ + vqdmulls_s32(__a, vget_lane_s32(b, __c)); }) + +#define vqdmullh_laneq_s16(a, b, __c) __extension__ ({ \ + int16_t __a = (a); int16x8_t __b = (b); \ + vqdmullh_s16(__a, vgetq_lane_s16(b, __c)); }) +#define vqdmulls_laneq_s32(a, b, __c) __extension__ ({ \ + int32_t __a = (a); int32x4_t __b = (b); \ + vqdmulls_s32(__a, vgetq_lane_s32(b, __c)); }) + +__ai int8_t vqnegb_s8(int8_t __a) { + return (int8_t)__builtin_neon_vqnegb_s8(__a); } +__ai int16_t vqnegh_s16(int16_t __a) { + return (int16_t)__builtin_neon_vqnegh_s16(__a); } +__ai int32_t vqnegs_s32(int32_t __a) { + return (int32_t)__builtin_neon_vqnegs_s32(__a); } +__ai int64_t vqnegd_s64(int64_t __a) { + return (int64_t)__builtin_neon_vqnegd_s64(__a); } + +__ai int16_t vqrdmulhh_s16(int16_t __a, int16_t __b) { + return (int16_t)__builtin_neon_vqrdmulhh_s16(__a, __b); } +__ai int32_t vqrdmulhs_s32(int32_t __a, int32_t __b) { + return (int32_t)__builtin_neon_vqrdmulhs_s32(__a, __b); } + +#define vqrdmulhh_lane_s16(a, b, __c) __extension__ ({ \ + int16_t __a = (a); int16x4_t __b = (b); \ + vqrdmulhh_s16(__a, vget_lane_s16(__b, __c)); }) +#define vqrdmulhs_lane_s32(a, b, __c) __extension__ ({ \ + int32_t __a = (a); int32x2_t __b = (b); \ + vqrdmulhs_s32(__a, vget_lane_s32(__b, __c)); }) + +#define vqrdmulhh_laneq_s16(a, b, __c) __extension__ ({ \ + int16_t __a = (a); int16x8_t __b = (b); \ + vqrdmulhh_s16(__a, vgetq_lane_s16(__b, __c)); }) +#define vqrdmulhs_laneq_s32(a, b, __c) __extension__ ({ \ + int32_t __a = (a); int32x4_t __b = (b); \ + vqrdmulhs_s32(__a, vgetq_lane_s32(__b, __c)); }) + +#define vqrshrnh_n_s16(a, __b) __extension__ ({ \ + int16_t __a = (a); \ + (int8_t)__builtin_neon_vqrshrnh_n_s16(__a, __b); }) +#define vqrshrns_n_s32(a, __b) __extension__ ({ \ + int32_t __a = (a); \ + (int16_t)__builtin_neon_vqrshrns_n_s32(__a, __b); }) +#define vqrshrnd_n_s64(a, __b) __extension__ ({ \ + int64_t __a = (a); \ + (int32_t)__builtin_neon_vqrshrnd_n_s64(__a, __b); }) +#define vqrshrnh_n_u16(a, __b) __extension__ ({ \ + uint16_t __a = (a); \ + (uint8_t)__builtin_neon_vqrshrnh_n_u16(__a, __b); }) +#define vqrshrns_n_u32(a, __b) __extension__ ({ \ + uint32_t __a = (a); \ + (uint16_t)__builtin_neon_vqrshrns_n_u32(__a, __b); }) +#define vqrshrnd_n_u64(a, __b) __extension__ ({ \ + uint64_t __a = (a); \ + (uint32_t)__builtin_neon_vqrshrnd_n_u64(__a, __b); }) + +#define vqrshrunh_n_s16(a, __b) __extension__ ({ \ + int16_t __a = (a); \ + (int8_t)__builtin_neon_vqrshrunh_n_s16(__a, __b); }) +#define vqrshruns_n_s32(a, __b) __extension__ ({ \ + int32_t __a = (a); \ + (int16_t)__builtin_neon_vqrshruns_n_s32(__a, __b); }) +#define vqrshrund_n_s64(a, __b) __extension__ ({ \ + int64_t __a = (a); \ + (int32_t)__builtin_neon_vqrshrund_n_s64(__a, __b); }) + +#define vqshlub_n_s8(a, __b) __extension__ ({ \ + int8_t __a = (a); \ + (int8_t)__builtin_neon_vqshlub_n_s8(__a, __b); }) +#define vqshluh_n_s16(a, __b) __extension__ ({ \ + int16_t __a = (a); \ + (int16_t)__builtin_neon_vqshluh_n_s16(__a, __b); }) +#define vqshlus_n_s32(a, __b) __extension__ ({ \ + int32_t __a = (a); \ + (int32_t)__builtin_neon_vqshlus_n_s32(__a, __b); }) +#define vqshlud_n_s64(a, __b) __extension__ ({ \ + int64_t __a = (a); \ + (int64_t)__builtin_neon_vqshlud_n_s64(__a, __b); }) + +#define vqshlb_n_s8(a, __b) __extension__ ({ \ + int8_t __a = (a); \ + (int8_t)__builtin_neon_vqshlb_n_s8(__a, __b); }) +#define vqshlh_n_s16(a, __b) __extension__ ({ \ + int16_t __a = (a); \ + (int16_t)__builtin_neon_vqshlh_n_s16(__a, __b); }) +#define vqshls_n_s32(a, __b) __extension__ ({ \ + int32_t __a = (a); \ + (int32_t)__builtin_neon_vqshls_n_s32(__a, __b); }) +#define vqshld_n_s64(a, __b) __extension__ ({ \ + int64_t __a = (a); \ + (int64_t)__builtin_neon_vqshld_n_s64(__a, __b); }) +#define vqshlb_n_u8(a, __b) __extension__ ({ \ + uint8_t __a = (a); \ + (uint8_t)__builtin_neon_vqshlb_n_u8(__a, __b); }) +#define vqshlh_n_u16(a, __b) __extension__ ({ \ + uint16_t __a = (a); \ + (uint16_t)__builtin_neon_vqshlh_n_u16(__a, __b); }) +#define vqshls_n_u32(a, __b) __extension__ ({ \ + uint32_t __a = (a); \ + (uint32_t)__builtin_neon_vqshls_n_u32(__a, __b); }) +#define vqshld_n_u64(a, __b) __extension__ ({ \ + uint64_t __a = (a); \ + (uint64_t)__builtin_neon_vqshld_n_u64(__a, __b); }) + +#define vqshrnh_n_s16(a, __b) __extension__ ({ \ + int16_t __a = (a); \ + (int8_t)__builtin_neon_vqshrnh_n_s16(__a, __b); }) +#define vqshrns_n_s32(a, __b) __extension__ ({ \ + int32_t __a = (a); \ + (int16_t)__builtin_neon_vqshrns_n_s32(__a, __b); }) +#define vqshrnd_n_s64(a, __b) __extension__ ({ \ + int64_t __a = (a); \ + (int32_t)__builtin_neon_vqshrnd_n_s64(__a, __b); }) +#define vqshrnh_n_u16(a, __b) __extension__ ({ \ + uint16_t __a = (a); \ + (uint8_t)__builtin_neon_vqshrnh_n_u16(__a, __b); }) +#define vqshrns_n_u32(a, __b) __extension__ ({ \ + uint32_t __a = (a); \ + (uint16_t)__builtin_neon_vqshrns_n_u32(__a, __b); }) +#define vqshrnd_n_u64(a, __b) __extension__ ({ \ + uint64_t __a = (a); \ + (uint32_t)__builtin_neon_vqshrnd_n_u64(__a, __b); }) + +#define vqshrunh_n_s16(a, __b) __extension__ ({ \ + int16_t __a = (a); \ + (int8_t)__builtin_neon_vqshrunh_n_s16(__a, __b); }) +#define vqshruns_n_s32(a, __b) __extension__ ({ \ + int32_t __a = (a); \ + (int16_t)__builtin_neon_vqshruns_n_s32(__a, __b); }) +#define vqshrund_n_s64(a, __b) __extension__ ({ \ + int64_t __a = (a); \ + (int32_t)__builtin_neon_vqshrund_n_s64(__a, __b); }) + +__ai int8_t vqmovnh_s16(int16_t __a) { + return (int8_t)__builtin_neon_vqmovnh_s16(__a); } +__ai int16_t vqmovns_s32(int32_t __a) { + return (int16_t)__builtin_neon_vqmovns_s32(__a); } +__ai int32_t vqmovnd_s64(int64_t __a) { + return (int32_t)__builtin_neon_vqmovnd_s64(__a); } + +__ai int8_t vqmovunh_s16(int16_t __a) { + return (int8_t)__builtin_neon_vqmovunh_s16(__a); } +__ai int16_t vqmovuns_s32(int32_t __a) { + return (int16_t)__builtin_neon_vqmovuns_s32(__a); } +__ai int32_t vqmovund_s64(int64_t __a) { + return (int32_t)__builtin_neon_vqmovund_s64(__a); } + +#define vsrid_n_s64(a, b, __c) __extension__ ({ \ + int64_t __a = (a); int64_t __b = (b); \ + (int64_t)__builtin_neon_vsrid_n_s64(__a, __b, __c); }) +#define vsrid_n_u64(a, b, __c) __extension__ ({ \ + uint64_t __a = (a); uint64_t __b = (b); \ + (uint64_t)__builtin_neon_vsrid_n_u64(__a, __b, __c); }) + +#define vrshrd_n_s64(a, __b) __extension__ ({ \ + int64_t __a = (a); \ + (int64_t)__builtin_neon_vrshrd_n_s64(__a, __b); }) +#define vrshrd_n_u64(a, __b) __extension__ ({ \ + uint64_t __a = (a); \ + (uint64_t)__builtin_neon_vrshrd_n_u64(__a, __b); }) + +#define vrsrad_n_s64(a, b, __c) __extension__ ({ \ + int64_t __a = (a); int64_t __b = (b); \ + (int64_t)__builtin_neon_vrsrad_n_s64(__a, __b, __c); }) +#define vrsrad_n_u64(a, b, __c) __extension__ ({ \ + uint64_t __a = (a); uint64_t __b = (b); \ + (uint64_t)__builtin_neon_vrsrad_n_u64(__a, __b, __c); }) + +#define vshrd_n_s64(a, __b) __extension__ ({ \ + int64_t __a = (a); \ + (int64_t)__builtin_neon_vshrd_n_s64(__a, __b); }) +#define vshrd_n_u64(a, __b) __extension__ ({ \ + uint64_t __a = (a); \ + (uint64_t)__builtin_neon_vshrd_n_u64(__a, __b); }) + +#define vsrad_n_s64(a, b, __c) __extension__ ({ \ + int64_t __a = (a); int64_t __b = (b); \ + (int64_t)__builtin_neon_vsrad_n_s64(__a, __b, __c); }) +#define vsrad_n_u64(a, b, __c) __extension__ ({ \ + uint64_t __a = (a); uint64_t __b = (b); \ + (uint64_t)__builtin_neon_vsrad_n_u64(__a, __b, __c); }) + +__ai int64_t vsubd_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vsubd_s64(__a, __b); } +__ai uint64_t vsubd_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vsubd_u64(__a, __b); } + +__ai int8_t vuqaddb_s8(int8_t __a, int8_t __b) { + return (int8_t)__builtin_neon_vuqaddb_s8(__a, __b); } +__ai int16_t vuqaddh_s16(int16_t __a, int16_t __b) { + return (int16_t)__builtin_neon_vuqaddh_s16(__a, __b); } +__ai int32_t vuqadds_s32(int32_t __a, int32_t __b) { + return (int32_t)__builtin_neon_vuqadds_s32(__a, __b); } +__ai int64_t vuqaddd_s64(int64_t __a, int64_t __b) { + return (int64_t)__builtin_neon_vuqaddd_s64(__a, __b); } + +__ai float64_t vcvtd_f64_u64(uint64_t __a) { + return (float64_t)__builtin_neon_vcvtd_f64_u64(__a); } + +__ai float32_t vcvts_f32_u32(uint32_t __a) { + return (float32_t)__builtin_neon_vcvts_f32_u32(__a); } + +__ai uint8_t vqmovnh_u16(uint16_t __a) { + return (uint8_t)__builtin_neon_vqmovnh_u16(__a); } +__ai uint16_t vqmovns_u32(uint32_t __a) { + return (uint16_t)__builtin_neon_vqmovns_u32(__a); } +__ai uint32_t vqmovnd_u64(uint64_t __a) { + return (uint32_t)__builtin_neon_vqmovnd_u64(__a); } + +__ai uint8_t vsqaddb_u8(uint8_t __a, uint8_t __b) { + return (uint8_t)__builtin_neon_vsqaddb_u8(__a, __b); } +__ai uint16_t vsqaddh_u16(uint16_t __a, uint16_t __b) { + return (uint16_t)__builtin_neon_vsqaddh_u16(__a, __b); } +__ai uint32_t vsqadds_u32(uint32_t __a, uint32_t __b) { + return (uint32_t)__builtin_neon_vsqadds_u32(__a, __b); } +__ai uint64_t vsqaddd_u64(uint64_t __a, uint64_t __b) { + return (uint64_t)__builtin_neon_vsqaddd_u64(__a, __b); } + +#define vdupb_lane_s8(a, __b) __extension__ ({ \ + int8x8_t __a = (a); \ + (int8_t)__builtin_neon_vdupb_lane_i8(__a, __b); }) +#define vduph_lane_s16(a, __b) __extension__ ({ \ + int16x4_t __a = (a); \ + (int16_t)__builtin_neon_vduph_lane_i16(__a, __b); }) +#define vdups_lane_s32(a, __b) __extension__ ({ \ + int32x2_t __a = (a); \ + (int32_t)__builtin_neon_vdups_lane_i32(__a, __b); }) +#define vdupd_lane_s64(a, __b) __extension__ ({ \ + int64x1_t __a = (a); \ + (int64_t)__builtin_neon_vdupd_lane_i64(__a, __b); }) +#define vdups_lane_f32(a, __b) __extension__ ({ \ + float32x2_t __a = (a); \ + (float32_t)__builtin_neon_vdups_lane_f32(__a, __b); }) +#define vdupd_lane_f64(a, __b) __extension__ ({ \ + float64x1_t __a = (a); \ + (float64_t)__builtin_neon_vdupd_lane_f64(__a, __b); }) +#define vdupb_lane_u8(a, __b) __extension__ ({ \ + uint8x8_t __a = (a); \ + (uint8_t)__builtin_neon_vdupb_lane_i8((int8x8_t)__a, __b); }) +#define vduph_lane_u16(a, __b) __extension__ ({ \ + uint16x4_t __a = (a); \ + (uint16_t)__builtin_neon_vduph_lane_i16((int16x4_t)__a, __b); }) +#define vdups_lane_u32(a, __b) __extension__ ({ \ + uint32x2_t __a = (a); \ + (uint32_t)__builtin_neon_vdups_lane_i32((int32x2_t)__a, __b); }) +#define vdupd_lane_u64(a, __b) __extension__ ({ \ + uint64x1_t __a = (a); \ + (uint64_t)__builtin_neon_vdupd_lane_i64((int64x1_t)__a, __b); }) +#define vdupb_lane_p8(a, __b) __extension__ ({ \ + poly8x8_t __a = (a); \ + (poly8_t)__builtin_neon_vdupb_lane_i8((int8x8_t)__a, __b); }) +#define vduph_lane_p16(a, __b) __extension__ ({ \ + poly16x4_t __a = (a); \ + (poly16_t)__builtin_neon_vduph_lane_i16((int16x4_t)__a, __b); }) + +#define vdupb_laneq_s8(a, __b) __extension__ ({ \ + int8x16_t __a = (a); \ + (int8_t)__builtin_neon_vdupb_laneq_i8(__a, __b); }) +#define vduph_laneq_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + (int16_t)__builtin_neon_vduph_laneq_i16(__a, __b); }) +#define vdups_laneq_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + (int32_t)__builtin_neon_vdups_laneq_i32(__a, __b); }) +#define vdupd_laneq_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + (int64_t)__builtin_neon_vdupd_laneq_i64(__a, __b); }) +#define vdups_laneq_f32(a, __b) __extension__ ({ \ + float32x4_t __a = (a); \ + (float32_t)__builtin_neon_vdups_laneq_f32(__a, __b); }) +#define vdupd_laneq_f64(a, __b) __extension__ ({ \ + float64x2_t __a = (a); \ + (float64_t)__builtin_neon_vdupd_laneq_f64(__a, __b); }) +#define vdupb_laneq_u8(a, __b) __extension__ ({ \ + uint8x16_t __a = (a); \ + (uint8_t)__builtin_neon_vdupb_laneq_i8((int8x16_t)__a, __b); }) +#define vduph_laneq_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + (uint16_t)__builtin_neon_vduph_laneq_i16((int16x8_t)__a, __b); }) +#define vdups_laneq_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + (uint32_t)__builtin_neon_vdups_laneq_i32((int32x4_t)__a, __b); }) +#define vdupd_laneq_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + (uint64_t)__builtin_neon_vdupd_laneq_i64((int64x2_t)__a, __b); }) +#define vdupb_laneq_p8(a, __b) __extension__ ({ \ + poly8x16_t __a = (a); \ + (poly8_t)__builtin_neon_vdupb_laneq_i8((int8x16_t)__a, __b); }) +#define vduph_laneq_p16(a, __b) __extension__ ({ \ + poly16x8_t __a = (a); \ + (poly16_t)__builtin_neon_vduph_laneq_i16((int16x8_t)__a, __b); }) + +#define vmulx_lane_f64(a, b, __c) __extension__ ({ \ + float64x1_t __a = (a); float64x1_t __b = (b); \ + float64_t __d1 = vget_lane_f64(__a, 0);\ + float64_t __e1 = vget_lane_f64(__b, __c);\ + float64_t __f1 = vmulxd_f64(__d1, __e1);\ + float64x1_t __g1;\ + vset_lane_f64(__f1, __g1, __c); }) + +#define vmulx_laneq_f64(a, b, __c) __extension__ ({ \ + float64x1_t __a = (a); float64x2_t __b = (b); \ + float64_t __d1 = vget_lane_f64(__a, 0);\ + float64_t __e1 = vgetq_lane_f64(__b, __c);\ + float64_t __f1 = vmulxd_f64(__d1, __e1);\ + float64x1_t __g1;\ + vset_lane_f64(__f1, __g1, 0); }) + +#define vmul_lane_f64(a, b, __c) __extension__ ({ \ + float64x1_t __a = (a); float64x1_t __b = (b); \ + (float64x1_t)__builtin_neon_vmul_lane_v((int8x8_t)__a, (int8x8_t)__b, __c, 9); }) + +#define vmul_laneq_f64(a, b, __c) __extension__ ({ \ + float64x1_t __a = (a); float64x2_t __b = (b); \ + (float64x1_t)__builtin_neon_vmul_laneq_v((int8x8_t)__a, (int8x16_t)__b, __c, 9); }) + +__ai float64x1_t vmul_n_f64(float64x1_t __a, float64_t __b) { + return (float64x1_t)__builtin_neon_vmul_n_f64(__a, __b); } + +#define vset_lane_f64(a, b, __c) __extension__ ({ \ + float64_t __a = (a); float64x1_t __b = (b); \ + (float64x1_t)__builtin_neon_vset_lane_f64(__a, __b, __c); }) +#define vsetq_lane_f64(a, b, __c) __extension__ ({ \ + float64_t __a = (a); float64x2_t __b = (b); \ + (float64x2_t)__builtin_neon_vsetq_lane_f64(__a, __b, __c); }) +#define vset_lane_p64(a, b, __c) __extension__ ({ \ + poly64_t __a = (a); poly64x1_t __b = (b); \ + (poly64x1_t)__builtin_neon_vset_lane_i64(__a, (int64x1_t)__b, __c); }) +#define vsetq_lane_p64(a, b, __c) __extension__ ({ \ + poly64_t __a = (a); poly64x2_t __b = (b); \ + (poly64x2_t)__builtin_neon_vsetq_lane_i64(__a, (int64x2_t)__b, __c); }) + +#define vshll_high_n_s8(a, __b) __extension__ ({ \ + int8x16_t __a = (a); \ + int8x8_t __a1 = vget_high_s8(__a); \ + (int16x8_t)vshll_n_s8(__a1, __b); }) +#define vshll_high_n_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + int16x4_t __a1 = vget_high_s16(__a); \ + (int32x4_t)vshll_n_s16(__a1, __b); }) +#define vshll_high_n_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + int32x2_t __a1 = vget_high_s32(__a); \ + (int64x2_t)vshll_n_s32(__a1, __b); }) +#define vshll_high_n_u8(a, __b) __extension__ ({ \ + uint8x16_t __a = (a); \ + uint8x8_t __a1 = vget_high_u8(__a); \ + (uint16x8_t)vshll_n_u8(__a1, __b); }) +#define vshll_high_n_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + uint16x4_t __a1 = vget_high_u16(__a); \ + (uint32x4_t)vshll_n_u16(__a1, __b); }) +#define vshll_high_n_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + uint32x2_t __a1 = vget_high_u32(__a); \ + (uint64x2_t)vshll_n_u32(__a1, __b); }) + +#define vshrn_high_n_s16(a, b, __c) __extension__ ({ \ + int8x8_t __a = (a); int16x8_t __b = (b); \ + (int8x16_t)vcombine_s16(__a, vshrn_n_s16(__b, __c)); }) +#define vshrn_high_n_s32(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int32x4_t __b = (b); \ + (int16x8_t)vcombine_s32(__a, vshrn_n_s32(__b, __c)); }) +#define vshrn_high_n_s64(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int64x2_t __b = (b); \ + (int32x4_t)vcombine_s64(__a, vshrn_n_s64(__b, __c)); }) +#define vshrn_high_n_u16(a, b, __c) __extension__ ({ \ + uint8x8_t __a = (a); uint16x8_t __b = (b); \ + (uint8x16_t)vcombine_u16(__a, vshrn_n_u16(__b, __c)); }) +#define vshrn_high_n_u32(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint32x4_t __b = (b); \ + (uint16x8_t)vcombine_u32(__a, vshrn_n_u32(__b, __c)); }) +#define vshrn_high_n_u64(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint64x2_t __b = (b); \ + (uint32x4_t)vcombine_u64(__a, vshrn_n_u64(__b, __c)); }) + +#define vsli_n_p64(a, b, __c) __extension__ ({ \ + poly64x1_t __a = (a); poly64x1_t __b = (b); \ + (poly64x1_t)__builtin_neon_vsli_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 6); }) +#define vsliq_n_p64(a, b, __c) __extension__ ({ \ + poly64x2_t __a = (a); poly64x2_t __b = (b); \ + (poly64x2_t)__builtin_neon_vsliq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 38); }) + +__ai int8x16_t vqmovun_high_s16(int8x8_t __a, int16x8_t __b) { + int8x8_t __a1 = vqmovun_s16(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); } +__ai int16x8_t vqmovun_high_s32(int16x4_t __a, int32x4_t __b) { + int16x4_t __a1 = vqmovun_s32(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3, 4, 5, 6, 7); } +__ai int32x4_t vqmovun_high_s64(int32x2_t __a, int64x2_t __b) { + int32x2_t __a1 = vqmovun_s64(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3); } + +#define vsri_n_p64(a, b, __c) __extension__ ({ \ + poly64x1_t __a = (a); poly64x1_t __b = (b); \ + (poly64x1_t)__builtin_neon_vsri_n_v((int8x8_t)__a, (int8x8_t)__b, __c, 6); }) +#define vsriq_n_p64(a, b, __c) __extension__ ({ \ + poly64x2_t __a = (a); poly64x2_t __b = (b); \ + (poly64x2_t)__builtin_neon_vsriq_n_v((int8x16_t)__a, (int8x16_t)__b, __c, 38); }) + +#define vst1q_f64(__a, b) __extension__ ({ \ + float64x2_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 41); }) +#define vst1_f64(__a, b) __extension__ ({ \ + float64x1_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 9); }) +#define vst1_p64(__a, b) __extension__ ({ \ + poly64x1_t __b = (b); \ + __builtin_neon_vst1_v(__a, (int8x8_t)__b, 6); }) +#define vst1q_p64(__a, b) __extension__ ({ \ + poly64x2_t __b = (b); \ + __builtin_neon_vst1q_v(__a, (int8x16_t)__b, 38); }) + +#define vst1q_lane_f64(__a, b, __c) __extension__ ({ \ + float64x2_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 41); }) +#define vst1q_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x2_t __b = (b); \ + __builtin_neon_vst1q_lane_v(__a, (int8x16_t)__b, __c, 38); }) +#define vst1_lane_f64(__a, b, __c) __extension__ ({ \ + float64x1_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 9); }) +#define vst1_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x1_t __b = (b); \ + __builtin_neon_vst1_lane_v(__a, (int8x8_t)__b, __c, 6); }) + +#define vst1q_u8_x2(__a, b) __extension__ ({ \ + uint8x16x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 48); }) +#define vst1q_u16_x2(__a, b) __extension__ ({ \ + uint16x8x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 49); }) +#define vst1q_u32_x2(__a, b) __extension__ ({ \ + uint32x4x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 50); }) +#define vst1q_u64_x2(__a, b) __extension__ ({ \ + uint64x2x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 51); }) +#define vst1q_s8_x2(__a, b) __extension__ ({ \ + int8x16x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, __b.val[0], __b.val[1], 32); }) +#define vst1q_s16_x2(__a, b) __extension__ ({ \ + int16x8x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 33); }) +#define vst1q_s32_x2(__a, b) __extension__ ({ \ + int32x4x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 34); }) +#define vst1q_s64_x2(__a, b) __extension__ ({ \ + int64x2x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 35); }) +#define vst1q_f16_x2(__a, b) __extension__ ({ \ + float16x8x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 39); }) +#define vst1q_f32_x2(__a, b) __extension__ ({ \ + float32x4x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 40); }) +#define vst1q_f64_x2(__a, b) __extension__ ({ \ + float64x2x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 41); }) +#define vst1q_p8_x2(__a, b) __extension__ ({ \ + poly8x16x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 36); }) +#define vst1q_p16_x2(__a, b) __extension__ ({ \ + poly16x8x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 37); }) +#define vst1q_p64_x2(__a, b) __extension__ ({ \ + poly64x2x2_t __b = (b); \ + __builtin_neon_vst1q_x2_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 38); }) +#define vst1_u8_x2(__a, b) __extension__ ({ \ + uint8x8x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 16); }) +#define vst1_u16_x2(__a, b) __extension__ ({ \ + uint16x4x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 17); }) +#define vst1_u32_x2(__a, b) __extension__ ({ \ + uint32x2x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 18); }) +#define vst1_u64_x2(__a, b) __extension__ ({ \ + uint64x1x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 19); }) +#define vst1_s8_x2(__a, b) __extension__ ({ \ + int8x8x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, __b.val[0], __b.val[1], 0); }) +#define vst1_s16_x2(__a, b) __extension__ ({ \ + int16x4x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 1); }) +#define vst1_s32_x2(__a, b) __extension__ ({ \ + int32x2x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 2); }) +#define vst1_s64_x2(__a, b) __extension__ ({ \ + int64x1x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 3); }) +#define vst1_f16_x2(__a, b) __extension__ ({ \ + float16x4x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 7); }) +#define vst1_f32_x2(__a, b) __extension__ ({ \ + float32x2x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 8); }) +#define vst1_f64_x2(__a, b) __extension__ ({ \ + float64x1x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 9); }) +#define vst1_p8_x2(__a, b) __extension__ ({ \ + poly8x8x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 4); }) +#define vst1_p16_x2(__a, b) __extension__ ({ \ + poly16x4x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 5); }) +#define vst1_p64_x2(__a, b) __extension__ ({ \ + poly64x1x2_t __b = (b); \ + __builtin_neon_vst1_x2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 6); }) + +#define vst1q_u8_x3(__a, b) __extension__ ({ \ + uint8x16x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 48); }) +#define vst1q_u16_x3(__a, b) __extension__ ({ \ + uint16x8x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 49); }) +#define vst1q_u32_x3(__a, b) __extension__ ({ \ + uint32x4x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 50); }) +#define vst1q_u64_x3(__a, b) __extension__ ({ \ + uint64x2x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 51); }) +#define vst1q_s8_x3(__a, b) __extension__ ({ \ + int8x16x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, __b.val[0], __b.val[1], __b.val[2], 32); }) +#define vst1q_s16_x3(__a, b) __extension__ ({ \ + int16x8x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 33); }) +#define vst1q_s32_x3(__a, b) __extension__ ({ \ + int32x4x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 34); }) +#define vst1q_s64_x3(__a, b) __extension__ ({ \ + int64x2x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 35); }) +#define vst1q_f16_x3(__a, b) __extension__ ({ \ + float16x8x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 39); }) +#define vst1q_f32_x3(__a, b) __extension__ ({ \ + float32x4x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 40); }) +#define vst1q_f64_x3(__a, b) __extension__ ({ \ + float64x2x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 41); }) +#define vst1q_p8_x3(__a, b) __extension__ ({ \ + poly8x16x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 36); }) +#define vst1q_p16_x3(__a, b) __extension__ ({ \ + poly16x8x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 37); }) +#define vst1q_p64_x3(__a, b) __extension__ ({ \ + poly64x2x3_t __b = (b); \ + __builtin_neon_vst1q_x3_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 38); }) +#define vst1_u8_x3(__a, b) __extension__ ({ \ + uint8x8x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 16); }) +#define vst1_u16_x3(__a, b) __extension__ ({ \ + uint16x4x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 17); }) +#define vst1_u32_x3(__a, b) __extension__ ({ \ + uint32x2x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 18); }) +#define vst1_u64_x3(__a, b) __extension__ ({ \ + uint64x1x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 19); }) +#define vst1_s8_x3(__a, b) __extension__ ({ \ + int8x8x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, __b.val[0], __b.val[1], __b.val[2], 0); }) +#define vst1_s16_x3(__a, b) __extension__ ({ \ + int16x4x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 1); }) +#define vst1_s32_x3(__a, b) __extension__ ({ \ + int32x2x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 2); }) +#define vst1_s64_x3(__a, b) __extension__ ({ \ + int64x1x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 3); }) +#define vst1_f16_x3(__a, b) __extension__ ({ \ + float16x4x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 7); }) +#define vst1_f32_x3(__a, b) __extension__ ({ \ + float32x2x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 8); }) +#define vst1_f64_x3(__a, b) __extension__ ({ \ + float64x1x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 9); }) +#define vst1_p8_x3(__a, b) __extension__ ({ \ + poly8x8x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 4); }) +#define vst1_p16_x3(__a, b) __extension__ ({ \ + poly16x4x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 5); }) +#define vst1_p64_x3(__a, b) __extension__ ({ \ + poly64x1x3_t __b = (b); \ + __builtin_neon_vst1_x3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 6); }) + +#define vst1q_u8_x4(__a, b) __extension__ ({ \ + uint8x16x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 48); }) +#define vst1q_u16_x4(__a, b) __extension__ ({ \ + uint16x8x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 49); }) +#define vst1q_u32_x4(__a, b) __extension__ ({ \ + uint32x4x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 50); }) +#define vst1q_u64_x4(__a, b) __extension__ ({ \ + uint64x2x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 51); }) +#define vst1q_s8_x4(__a, b) __extension__ ({ \ + int8x16x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, __b.val[0], __b.val[1], __b.val[2], __b.val[3], 32); }) +#define vst1q_s16_x4(__a, b) __extension__ ({ \ + int16x8x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 33); }) +#define vst1q_s32_x4(__a, b) __extension__ ({ \ + int32x4x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 34); }) +#define vst1q_s64_x4(__a, b) __extension__ ({ \ + int64x2x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 35); }) +#define vst1q_f16_x4(__a, b) __extension__ ({ \ + float16x8x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 39); }) +#define vst1q_f32_x4(__a, b) __extension__ ({ \ + float32x4x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 40); }) +#define vst1q_f64_x4(__a, b) __extension__ ({ \ + float64x2x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 41); }) +#define vst1q_p8_x4(__a, b) __extension__ ({ \ + poly8x16x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 36); }) +#define vst1q_p16_x4(__a, b) __extension__ ({ \ + poly16x8x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 37); }) +#define vst1q_p64_x4(__a, b) __extension__ ({ \ + poly64x2x4_t __b = (b); \ + __builtin_neon_vst1q_x4_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 38); }) +#define vst1_u8_x4(__a, b) __extension__ ({ \ + uint8x8x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 16); }) +#define vst1_u16_x4(__a, b) __extension__ ({ \ + uint16x4x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 17); }) +#define vst1_u32_x4(__a, b) __extension__ ({ \ + uint32x2x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 18); }) +#define vst1_u64_x4(__a, b) __extension__ ({ \ + uint64x1x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 19); }) +#define vst1_s8_x4(__a, b) __extension__ ({ \ + int8x8x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, __b.val[0], __b.val[1], __b.val[2], __b.val[3], 0); }) +#define vst1_s16_x4(__a, b) __extension__ ({ \ + int16x4x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 1); }) +#define vst1_s32_x4(__a, b) __extension__ ({ \ + int32x2x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 2); }) +#define vst1_s64_x4(__a, b) __extension__ ({ \ + int64x1x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 3); }) +#define vst1_f16_x4(__a, b) __extension__ ({ \ + float16x4x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 7); }) +#define vst1_f32_x4(__a, b) __extension__ ({ \ + float32x2x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 8); }) +#define vst1_f64_x4(__a, b) __extension__ ({ \ + float64x1x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 9); }) +#define vst1_p8_x4(__a, b) __extension__ ({ \ + poly8x8x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 4); }) +#define vst1_p16_x4(__a, b) __extension__ ({ \ + poly16x4x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 5); }) +#define vst1_p64_x4(__a, b) __extension__ ({ \ + poly64x1x4_t __b = (b); \ + __builtin_neon_vst1_x4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 6); }) + +#define vst2q_u64(__a, b) __extension__ ({ \ + uint64x2x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 51); }) +#define vst2q_s64(__a, b) __extension__ ({ \ + int64x2x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 35); }) +#define vst2q_f64(__a, b) __extension__ ({ \ + float64x2x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 41); }) +#define vst2_f64(__a, b) __extension__ ({ \ + float64x1x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 9); }) +#define vst2_p64(__a, b) __extension__ ({ \ + poly64x1x2_t __b = (b); \ + __builtin_neon_vst2_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], 6); }) +#define vst2q_p64(__a, b) __extension__ ({ \ + poly64x2x2_t __b = (b); \ + __builtin_neon_vst2q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], 38); }) + +#define vst2q_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x16x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 48); }) +#define vst2q_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x2x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 51); }) +#define vst2q_lane_s8(__a, b, __c) __extension__ ({ \ + int8x16x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, __b.val[0], __b.val[1], __c, 32); }) +#define vst2q_lane_s64(__a, b, __c) __extension__ ({ \ + int64x2x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 35); }) +#define vst2q_lane_f64(__a, b, __c) __extension__ ({ \ + float64x2x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 41); }) +#define vst2q_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x16x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 36); }) +#define vst2q_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x2x2_t __b = (b); \ + __builtin_neon_vst2q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], __c, 38); }) +#define vst2_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x1x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 19); }) +#define vst2_lane_s64(__a, b, __c) __extension__ ({ \ + int64x1x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 3); }) +#define vst2_lane_f64(__a, b, __c) __extension__ ({ \ + float64x1x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 9); }) +#define vst2_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x1x2_t __b = (b); \ + __builtin_neon_vst2_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], __c, 6); }) + +#define vst3q_u64(__a, b) __extension__ ({ \ + uint64x2x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 51); }) +#define vst3q_s64(__a, b) __extension__ ({ \ + int64x2x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 35); }) +#define vst3q_f64(__a, b) __extension__ ({ \ + float64x2x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 41); }) +#define vst3_f64(__a, b) __extension__ ({ \ + float64x1x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 9); }) +#define vst3_p64(__a, b) __extension__ ({ \ + poly64x1x3_t __b = (b); \ + __builtin_neon_vst3_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], 6); }) +#define vst3q_p64(__a, b) __extension__ ({ \ + poly64x2x3_t __b = (b); \ + __builtin_neon_vst3q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], 38); }) + +#define vst3q_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x16x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 48); }) +#define vst3q_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x2x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 51); }) +#define vst3q_lane_s8(__a, b, __c) __extension__ ({ \ + int8x16x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, __b.val[0], __b.val[1], __b.val[2], __c, 32); }) +#define vst3q_lane_s64(__a, b, __c) __extension__ ({ \ + int64x2x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 35); }) +#define vst3q_lane_f64(__a, b, __c) __extension__ ({ \ + float64x2x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 41); }) +#define vst3q_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x16x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 36); }) +#define vst3q_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x2x3_t __b = (b); \ + __builtin_neon_vst3q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], __c, 38); }) +#define vst3_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x1x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 19); }) +#define vst3_lane_s64(__a, b, __c) __extension__ ({ \ + int64x1x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 3); }) +#define vst3_lane_f64(__a, b, __c) __extension__ ({ \ + float64x1x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 9); }) +#define vst3_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x1x3_t __b = (b); \ + __builtin_neon_vst3_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], __c, 6); }) + +#define vst4q_u64(__a, b) __extension__ ({ \ + uint64x2x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 51); }) +#define vst4q_s64(__a, b) __extension__ ({ \ + int64x2x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 35); }) +#define vst4q_f64(__a, b) __extension__ ({ \ + float64x2x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 41); }) +#define vst4_f64(__a, b) __extension__ ({ \ + float64x1x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 9); }) +#define vst4_p64(__a, b) __extension__ ({ \ + poly64x1x4_t __b = (b); \ + __builtin_neon_vst4_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], 6); }) +#define vst4q_p64(__a, b) __extension__ ({ \ + poly64x2x4_t __b = (b); \ + __builtin_neon_vst4q_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], 38); }) + +#define vst4q_lane_u8(__a, b, __c) __extension__ ({ \ + uint8x16x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 48); }) +#define vst4q_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x2x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 51); }) +#define vst4q_lane_s8(__a, b, __c) __extension__ ({ \ + int8x16x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, __b.val[0], __b.val[1], __b.val[2], __b.val[3], __c, 32); }) +#define vst4q_lane_s64(__a, b, __c) __extension__ ({ \ + int64x2x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 35); }) +#define vst4q_lane_f64(__a, b, __c) __extension__ ({ \ + float64x2x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 41); }) +#define vst4q_lane_p8(__a, b, __c) __extension__ ({ \ + poly8x16x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 36); }) +#define vst4q_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x2x4_t __b = (b); \ + __builtin_neon_vst4q_lane_v(__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], __c, 38); }) +#define vst4_lane_u64(__a, b, __c) __extension__ ({ \ + uint64x1x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 19); }) +#define vst4_lane_s64(__a, b, __c) __extension__ ({ \ + int64x1x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 3); }) +#define vst4_lane_f64(__a, b, __c) __extension__ ({ \ + float64x1x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 9); }) +#define vst4_lane_p64(__a, b, __c) __extension__ ({ \ + poly64x1x4_t __b = (b); \ + __builtin_neon_vst4_lane_v(__a, (int8x8_t)__b.val[0], (int8x8_t)__b.val[1], (int8x8_t)__b.val[2], (int8x8_t)__b.val[3], __c, 6); }) + +__ai float64x1_t vsub_f64(float64x1_t __a, float64x1_t __b) { + return __a - __b; } +__ai float64x2_t vsubq_f64(float64x2_t __a, float64x2_t __b) { + return __a - __b; } + +__ai int8x8_t vuqadd_s8(int8x8_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vuqadd_v(__a, __b, 0); } +__ai int16x4_t vuqadd_s16(int16x4_t __a, int16x4_t __b) { + return (int16x4_t)__builtin_neon_vuqadd_v((int8x8_t)__a, (int8x8_t)__b, 1); } +__ai int32x2_t vuqadd_s32(int32x2_t __a, int32x2_t __b) { + return (int32x2_t)__builtin_neon_vuqadd_v((int8x8_t)__a, (int8x8_t)__b, 2); } +__ai int64x1_t vuqadd_s64(int64x1_t __a, int64x1_t __b) { + return (int64x1_t)__builtin_neon_vuqadd_v((int8x8_t)__a, (int8x8_t)__b, 3); } +__ai int8x16_t vuqaddq_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vuqaddq_v(__a, __b, 32); } +__ai int16x8_t vuqaddq_s16(int16x8_t __a, int16x8_t __b) { + return (int16x8_t)__builtin_neon_vuqaddq_v((int8x16_t)__a, (int8x16_t)__b, 33); } +__ai int32x4_t vuqaddq_s32(int32x4_t __a, int32x4_t __b) { + return (int32x4_t)__builtin_neon_vuqaddq_v((int8x16_t)__a, (int8x16_t)__b, 34); } +__ai int64x2_t vuqaddq_s64(int64x2_t __a, int64x2_t __b) { + return (int64x2_t)__builtin_neon_vuqaddq_v((int8x16_t)__a, (int8x16_t)__b, 35); } + +__ai uint8x8_t vsqadd_u8(uint8x8_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vsqadd_v((int8x8_t)__a, (int8x8_t)__b, 16); } +__ai uint16x4_t vsqadd_u16(uint16x4_t __a, uint16x4_t __b) { + return (uint16x4_t)__builtin_neon_vsqadd_v((int8x8_t)__a, (int8x8_t)__b, 17); } +__ai uint32x2_t vsqadd_u32(uint32x2_t __a, uint32x2_t __b) { + return (uint32x2_t)__builtin_neon_vsqadd_v((int8x8_t)__a, (int8x8_t)__b, 18); } +__ai uint64x1_t vsqadd_u64(uint64x1_t __a, uint64x1_t __b) { + return (uint64x1_t)__builtin_neon_vsqadd_v((int8x8_t)__a, (int8x8_t)__b, 19); } +__ai uint8x16_t vsqaddq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vsqaddq_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai uint16x8_t vsqaddq_u16(uint16x8_t __a, uint16x8_t __b) { + return (uint16x8_t)__builtin_neon_vsqaddq_v((int8x16_t)__a, (int8x16_t)__b, 49); } +__ai uint32x4_t vsqaddq_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vsqaddq_v((int8x16_t)__a, (int8x16_t)__b, 50); } +__ai uint64x2_t vsqaddq_u64(uint64x2_t __a, uint64x2_t __b) { + return (uint64x2_t)__builtin_neon_vsqaddq_v((int8x16_t)__a, (int8x16_t)__b, 51); } + +__ai int16x8_t vabal_high_s8(int16x8_t __a, int8x16_t __b, int8x16_t __c) { + return vabal_s8(__a, vget_high_s8(__b), vget_high_s8(__c)); } +__ai int32x4_t vabal_high_s16(int32x4_t __a, int16x8_t __b, int16x8_t __c) { + return vabal_s16(__a, vget_high_s16(__b), vget_high_s16(__c)); } +__ai int64x2_t vabal_high_s32(int64x2_t __a, int32x4_t __b, int32x4_t __c) { + return vabal_s32(__a, vget_high_s32(__b), vget_high_s32(__c)); } +__ai uint16x8_t vabal_high_u8(uint16x8_t __a, uint8x16_t __b, uint8x16_t __c) { + return vabal_u8(__a, vget_high_u8(__b), vget_high_u8(__c)); } +__ai uint32x4_t vabal_high_u16(uint32x4_t __a, uint16x8_t __b, uint16x8_t __c) { + return vabal_u16(__a, vget_high_u16(__b), vget_high_u16(__c)); } +__ai uint64x2_t vabal_high_u32(uint64x2_t __a, uint32x4_t __b, uint32x4_t __c) { + return vabal_u32(__a, vget_high_u32(__b), vget_high_u32(__c)); } + + +__ai int8x16_t vaddhn_high_s16(int8x8_t __a, int16x8_t __b, int16x8_t __c) { + return vcombine_s8(__a, vaddhn_s16(__b, __c)); } +__ai int16x8_t vaddhn_high_s32(int16x4_t __a, int32x4_t __b, int32x4_t __c) { + return vcombine_s16(__a, vaddhn_s32(__b, __c)); } +__ai int32x4_t vaddhn_high_s64(int32x2_t __a, int64x2_t __b, int64x2_t __c) { + return vcombine_s32(__a, vaddhn_s64(__b, __c)); } +__ai uint8x16_t vaddhn_high_u16(uint8x8_t __a, uint16x8_t __b, uint16x8_t __c) { + return vcombine_u8(__a, vaddhn_u16(__b, __c)); } +__ai uint16x8_t vaddhn_high_u32(uint16x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return vcombine_u16(__a, vaddhn_u32(__b, __c)); } +__ai uint32x4_t vaddhn_high_u64(uint32x2_t __a, uint64x2_t __b, uint64x2_t __c) { + return vcombine_u32(__a, vaddhn_u64(__b, __c)); } + +__ai int16_t vaddlv_s8(int8x8_t __a) { + return (int16_t)__builtin_neon_vaddlv_s8(__a); } +__ai int32_t vaddlv_s16(int16x4_t __a) { + return (int32_t)__builtin_neon_vaddlv_s16(__a); } +__ai int64_t vaddlv_s32(int32x2_t __a) { + return (int64_t)__builtin_neon_vaddlv_s32(__a); } +__ai uint16_t vaddlv_u8(uint8x8_t __a) { + return (uint16_t)__builtin_neon_vaddlv_u8((int8x8_t)__a); } +__ai uint32_t vaddlv_u16(uint16x4_t __a) { + return (uint32_t)__builtin_neon_vaddlv_u16((int16x4_t)__a); } +__ai uint64_t vaddlv_u32(uint32x2_t __a) { + return (uint64_t)__builtin_neon_vaddlv_u32((int32x2_t)__a); } +__ai int16_t vaddlvq_s8(int8x16_t __a) { + return (int16_t)__builtin_neon_vaddlvq_s8(__a); } +__ai int32_t vaddlvq_s16(int16x8_t __a) { + return (int32_t)__builtin_neon_vaddlvq_s16(__a); } +__ai int64_t vaddlvq_s32(int32x4_t __a) { + return (int64_t)__builtin_neon_vaddlvq_s32(__a); } +__ai uint16_t vaddlvq_u8(uint8x16_t __a) { + return (uint16_t)__builtin_neon_vaddlvq_u8((int8x16_t)__a); } +__ai uint32_t vaddlvq_u16(uint16x8_t __a) { + return (uint32_t)__builtin_neon_vaddlvq_u16((int16x8_t)__a); } +__ai uint64_t vaddlvq_u32(uint32x4_t __a) { + return (uint64_t)__builtin_neon_vaddlvq_u32((int32x4_t)__a); } + +__ai int16x8_t vaddl_high_s8(int8x16_t __a, int8x16_t __b) { + return vmovl_high_s8(__a) + vmovl_high_s8(__b); } +__ai int32x4_t vaddl_high_s16(int16x8_t __a, int16x8_t __b) { + return vmovl_high_s16(__a) + vmovl_high_s16(__b); } +__ai int64x2_t vaddl_high_s32(int32x4_t __a, int32x4_t __b) { + return vmovl_high_s32(__a) + vmovl_high_s32(__b); } +__ai uint16x8_t vaddl_high_u8(uint8x16_t __a, uint8x16_t __b) { + return vmovl_high_u8(__a) + vmovl_high_u8(__b); } +__ai uint32x4_t vaddl_high_u16(uint16x8_t __a, uint16x8_t __b) { + return vmovl_high_u16(__a) + vmovl_high_u16(__b); } +__ai uint64x2_t vaddl_high_u32(uint32x4_t __a, uint32x4_t __b) { + return vmovl_high_u32(__a) + vmovl_high_u32(__b); } + +__ai int8_t vaddv_s8(int8x8_t __a) { + return (int8_t)__builtin_neon_vaddv_s8(__a); } +__ai int16_t vaddv_s16(int16x4_t __a) { + return (int16_t)__builtin_neon_vaddv_s16(__a); } +__ai int32_t vaddv_s32(int32x2_t __a) { + return (int32_t)__builtin_neon_vaddv_s32(__a); } +__ai float32_t vaddv_f32(float32x2_t __a) { + return (float32_t)__builtin_neon_vaddv_f32(__a); } +__ai uint8_t vaddv_u8(uint8x8_t __a) { + return (uint8_t)__builtin_neon_vaddv_u8((int8x8_t)__a); } +__ai uint16_t vaddv_u16(uint16x4_t __a) { + return (uint16_t)__builtin_neon_vaddv_u16((int16x4_t)__a); } +__ai uint32_t vaddv_u32(uint32x2_t __a) { + return (uint32_t)__builtin_neon_vaddv_u32((int32x2_t)__a); } +__ai int8_t vaddvq_s8(int8x16_t __a) { + return (int8_t)__builtin_neon_vaddvq_s8(__a); } +__ai int16_t vaddvq_s16(int16x8_t __a) { + return (int16_t)__builtin_neon_vaddvq_s16(__a); } +__ai int32_t vaddvq_s32(int32x4_t __a) { + return (int32_t)__builtin_neon_vaddvq_s32(__a); } +__ai uint8_t vaddvq_u8(uint8x16_t __a) { + return (uint8_t)__builtin_neon_vaddvq_u8((int8x16_t)__a); } +__ai uint16_t vaddvq_u16(uint16x8_t __a) { + return (uint16_t)__builtin_neon_vaddvq_u16((int16x8_t)__a); } +__ai uint32_t vaddvq_u32(uint32x4_t __a) { + return (uint32_t)__builtin_neon_vaddvq_u32((int32x4_t)__a); } +__ai float32_t vaddvq_f32(float32x4_t __a) { + return (float32_t)__builtin_neon_vaddvq_f32(__a); } +__ai float64_t vaddvq_f64(float64x2_t __a) { + return (float64_t)__builtin_neon_vaddvq_f64(__a); } +__ai int64_t vaddvq_s64(int64x2_t __a) { + return (int64_t)__builtin_neon_vaddvq_s64(__a); } +__ai uint64_t vaddvq_u64(uint64x2_t __a) { + return (uint64_t)__builtin_neon_vaddvq_u64((int64x2_t)__a); } + +__ai int16x8_t vaddw_high_s8(int16x8_t __a, int8x16_t __b) { + return __a + vmovl_high_s8(__b); } +__ai int32x4_t vaddw_high_s16(int32x4_t __a, int16x8_t __b) { + return __a + vmovl_high_s16(__b); } +__ai int64x2_t vaddw_high_s32(int64x2_t __a, int32x4_t __b) { + return __a + vmovl_high_s32(__b); } +__ai uint16x8_t vaddw_high_u8(uint16x8_t __a, uint8x16_t __b) { + return __a + vmovl_high_u8(__b); } +__ai uint32x4_t vaddw_high_u16(uint32x4_t __a, uint16x8_t __b) { + return __a + vmovl_high_u16(__b); } +__ai uint64x2_t vaddw_high_u32(uint64x2_t __a, uint32x4_t __b) { + return __a + vmovl_high_u32(__b); } + +__ai float32x2_t vcvtx_f32_f64(float64x2_t __a) { + return (float32x2_t)__builtin_neon_vcvtx_f32_v((int8x16_t)__a, 41); } + +__ai float32x4_t vcvtx_high_f32_f64(float32x2_t __a, float64x2_t __b) { + float32x2_t __a1 = vcvtx_f32_f64(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3); } + +__ai float32x2_t vcvt_f32_f64(float64x2_t __a) { + return (float32x2_t)__builtin_neon_vcvt_f32_f64((int8x16_t)__a, 41); } + +__ai float64x1_t vcvt_f64_s64(int64x1_t __a) { + return (float64x1_t)__builtin_neon_vcvt_f64_v((int8x8_t)__a, 3); } +__ai float64x1_t vcvt_f64_u64(uint64x1_t __a) { + return (float64x1_t)__builtin_neon_vcvt_f64_v((int8x8_t)__a, 19); } +__ai float64x2_t vcvtq_f64_s64(int64x2_t __a) { + return (float64x2_t)__builtin_neon_vcvtq_f64_v((int8x16_t)__a, 35); } +__ai float64x2_t vcvtq_f64_u64(uint64x2_t __a) { + return (float64x2_t)__builtin_neon_vcvtq_f64_v((int8x16_t)__a, 51); } + +__ai float64x2_t vcvt_f64_f32(float32x2_t __a) { + return (float64x2_t)__builtin_neon_vcvt_f64_f32((int8x8_t)__a, 41); } + +__ai float16x8_t vcvt_high_f16_f32(float16x4_t __a, float32x4_t __b) { + float16x4_t __a1 = vcvt_f16_f32(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3, 4, 5, 6, 7); } + +__ai float32x4_t vcvt_high_f32_f16(float16x8_t __a) { + float16x4_t __a1 = vget_high_f16(__a); + return vcvt_f32_f16(__a1); } + +__ai float32x4_t vcvt_high_f32_f64(float32x2_t __a, float64x2_t __b) { + float32x2_t __a1 = vcvt_f32_f64(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3); } + +__ai float64x2_t vcvt_high_f64_f32(float32x4_t __a) { + float32x2_t __a1 = vget_high_f32(__a); + return vcvt_f64_f32(__a1); } + +__ai int64x1_t vcvt_s64_f64(float64x1_t __a) { + return (int64x1_t)__builtin_neon_vcvt_s64_v((int8x8_t)__a, 3); } +__ai int64x2_t vcvtq_s64_f64(float64x2_t __a) { + return (int64x2_t)__builtin_neon_vcvtq_s64_v((int8x16_t)__a, 35); } + +__ai uint64x1_t vcvt_u64_f64(float64x1_t __a) { + return (uint64x1_t)__builtin_neon_vcvt_u64_v((int8x8_t)__a, 19); } +__ai uint64x2_t vcvtq_u64_f64(float64x2_t __a) { + return (uint64x2_t)__builtin_neon_vcvtq_u64_v((int8x16_t)__a, 51); } + +#define vdup_lane_f16(a, __b) __extension__ ({ \ + float16x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdup_lane_f64(a, __b) __extension__ ({ \ + float64x1_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b); }) +#define vdupq_lane_f16(a, __b) __extension__ ({ \ + float16x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_lane_f64(a, __b) __extension__ ({ \ + float64x1_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) +#define vdup_lane_p64(a, __b) __extension__ ({ \ + poly64x1_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b); }) +#define vdupq_lane_p64(a, __b) __extension__ ({ \ + poly64x1_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) + +#define vdup_laneq_s8(a, __b) __extension__ ({ \ + int8x16_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdup_laneq_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdup_laneq_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) +#define vdup_laneq_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b); }) +#define vdup_laneq_p8(a, __b) __extension__ ({ \ + poly8x16_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdup_laneq_p16(a, __b) __extension__ ({ \ + poly16x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdup_laneq_u8(a, __b) __extension__ ({ \ + uint8x16_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdup_laneq_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdup_laneq_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) +#define vdup_laneq_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b); }) +#define vdup_laneq_f16(a, __b) __extension__ ({ \ + float16x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdup_laneq_f32(a, __b) __extension__ ({ \ + float32x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) +#define vdup_laneq_f64(a, __b) __extension__ ({ \ + float64x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b); }) +#define vdupq_laneq_s8(a, __b) __extension__ ({ \ + int8x16_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_laneq_s16(a, __b) __extension__ ({ \ + int16x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_laneq_s32(a, __b) __extension__ ({ \ + int32x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdupq_laneq_s64(a, __b) __extension__ ({ \ + int64x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) +#define vdupq_laneq_p8(a, __b) __extension__ ({ \ + poly8x16_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_laneq_p16(a, __b) __extension__ ({ \ + poly16x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_laneq_u8(a, __b) __extension__ ({ \ + uint8x16_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_laneq_u16(a, __b) __extension__ ({ \ + uint16x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_laneq_u32(a, __b) __extension__ ({ \ + uint32x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdupq_laneq_u64(a, __b) __extension__ ({ \ + uint64x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) +#define vdupq_laneq_f16(a, __b) __extension__ ({ \ + float16x8_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b, __b, __b, __b, __b); }) +#define vdupq_laneq_f32(a, __b) __extension__ ({ \ + float32x4_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b, __b, __b); }) +#define vdupq_laneq_f64(a, __b) __extension__ ({ \ + float64x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) +#define vdup_laneq_p64(a, __b) __extension__ ({ \ + poly64x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b); }) +#define vdupq_laneq_p64(a, __b) __extension__ ({ \ + poly64x2_t __a = (a); \ + __builtin_shufflevector(__a, __a, __b, __b); }) + +#define vext_f64(a, b, __c) __extension__ ({ \ + float64x1_t __a = (a); float64x1_t __b = (b); \ + (float64x1_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 9); }) +#define vextq_f64(a, b, __c) __extension__ ({ \ + float64x2_t __a = (a); float64x2_t __b = (b); \ + (float64x2_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 41); }) +#define vext_p64(a, b, __c) __extension__ ({ \ + poly64x1_t __a = (a); poly64x1_t __b = (b); \ + (poly64x1_t)__builtin_neon_vext_v((int8x8_t)__a, (int8x8_t)__b, __c, 6); }) +#define vextq_p64(a, b, __c) __extension__ ({ \ + poly64x2_t __a = (a); poly64x2_t __b = (b); \ + (poly64x2_t)__builtin_neon_vextq_v((int8x16_t)__a, (int8x16_t)__b, __c, 38); }) + +#define vfma_lane_f32(a, b, c, __d) __extension__ ({ \ + float32x2_t __a = (a); float32x2_t __b = (b); float32x2_t __c = (c); \ + (float32x2_t)__builtin_neon_vfma_lane_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, __d, 8); }) +#define vfma_lane_f64(a, b, c, __d) __extension__ ({ \ + float64x1_t __a = (a); float64x1_t __b = (b); float64x1_t __c = (c); \ + (float64x1_t)__builtin_neon_vfma_lane_v((int8x8_t)__a, (int8x8_t)__b, (int8x8_t)__c, __d, 9); }) +#define vfmaq_lane_f32(a, b, c, __d) __extension__ ({ \ + float32x4_t __a = (a); float32x4_t __b = (b); float32x2_t __c = (c); \ + (float32x4_t)__builtin_neon_vfmaq_lane_v((int8x16_t)__a, (int8x16_t)__b, (int8x8_t)__c, __d, 40); }) +#define vfmaq_lane_f64(a, b, c, __d) __extension__ ({ \ + float64x2_t __a = (a); float64x2_t __b = (b); float64x1_t __c = (c); \ + (float64x2_t)__builtin_neon_vfmaq_lane_v((int8x16_t)__a, (int8x16_t)__b, (int8x8_t)__c, __d, 41); }) + +#define vfma_laneq_f32(a, b, c, __d) __extension__ ({ \ + float32x2_t __a = (a); float32x2_t __b = (b); float32x4_t __c = (c); \ + (float32x2_t)__builtin_neon_vfma_laneq_v((int8x8_t)__a, (int8x8_t)__b, (int8x16_t)__c, __d, 8); }) +#define vfma_laneq_f64(a, b, c, __d) __extension__ ({ \ + float64x1_t __a = (a); float64x1_t __b = (b); float64x2_t __c = (c); \ + (float64x1_t)__builtin_neon_vfma_laneq_v((int8x8_t)__a, (int8x8_t)__b, (int8x16_t)__c, __d, 9); }) +#define vfmaq_laneq_f32(a, b, c, __d) __extension__ ({ \ + float32x4_t __a = (a); float32x4_t __b = (b); float32x4_t __c = (c); \ + (float32x4_t)__builtin_neon_vfmaq_laneq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, __d, 40); }) +#define vfmaq_laneq_f64(a, b, c, __d) __extension__ ({ \ + float64x2_t __a = (a); float64x2_t __b = (b); float64x2_t __c = (c); \ + (float64x2_t)__builtin_neon_vfmaq_laneq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, __d, 41); }) + +#define vfms_lane_f32(a, b, c, __d) __extension__ ({ \ + float32x2_t __a = (a); float32x2_t __b = (b); float32x2_t __c = (c); \ + float32x2_t __a1 = __a; \ + float32x2_t __b1 = __b; \ + float32x2_t __c1 = __c; \ + vfma_lane_f32(__a1, __b1, -__c1, __d); }) +#define vfms_lane_f64(a, b, c, __d) __extension__ ({ \ + float64x1_t __a = (a); float64x1_t __b = (b); float64x1_t __c = (c); \ + float64x1_t __a1 = __a; \ + float64x1_t __b1 = __b; \ + float64x1_t __c1 = __c; \ + vfma_lane_f64(__a1, __b1, -__c1, __d); }) +#define vfmsq_lane_f32(a, b, c, __d) __extension__ ({ \ + float32x4_t __a = (a); float32x4_t __b = (b); float32x2_t __c = (c); \ + float32x4_t __a1 = __a; \ + float32x4_t __b1 = __b; \ + float32x2_t __c1 = __c; \ + vfmaq_lane_f32(__a1, __b1, -__c1, __d); }) +#define vfmsq_lane_f64(a, b, c, __d) __extension__ ({ \ + float64x2_t __a = (a); float64x2_t __b = (b); float64x1_t __c = (c); \ + float64x2_t __a1 = __a; \ + float64x2_t __b1 = __b; \ + float64x1_t __c1 = __c; \ + vfmaq_lane_f64(__a1, __b1, -__c1, __d); }) + +#define vfms_laneq_f32(a, b, c, __d) __extension__ ({ \ + float32x2_t __a = (a); float32x2_t __b = (b); float32x4_t __c = (c); \ + float32x2_t __a1 = __a; \ + float32x2_t __b1 = __b; \ + float32x4_t __c1 = __c; \ + vfma_laneq_f32(__a1, __b1, -__c1, __d); }) +#define vfms_laneq_f64(a, b, c, __d) __extension__ ({ \ + float64x1_t __a = (a); float64x1_t __b = (b); float64x2_t __c = (c); \ + float64x1_t __a1 = __a; \ + float64x1_t __b1 = __b; \ + float64x2_t __c1 = __c; \ + vfma_laneq_f64(__a1, __b1, -__c1, __d); }) +#define vfmsq_laneq_f32(a, b, c, __d) __extension__ ({ \ + float32x4_t __a = (a); float32x4_t __b = (b); float32x4_t __c = (c); \ + float32x4_t __a1 = __a; \ + float32x4_t __b1 = __b; \ + float32x4_t __c1 = __c; \ + vfmaq_laneq_f32(__a1, __b1, -__c1, __d); }) +#define vfmsq_laneq_f64(a, b, c, __d) __extension__ ({ \ + float64x2_t __a = (a); float64x2_t __b = (b); float64x2_t __c = (c); \ + float64x2_t __a1 = __a; \ + float64x2_t __b1 = __b; \ + float64x2_t __c1 = __c; \ + vfmaq_laneq_f64(__a1, __b1, -__c1, __d); }) + +__ai float64x1_t vget_high_f64(float64x2_t __a) { + return __builtin_shufflevector(__a, __a, 1); } +__ai poly64x1_t vget_high_p64(poly64x2_t __a) { + return __builtin_shufflevector(__a, __a, 1); } + +__ai float64x1_t vget_low_f64(float64x2_t __a) { + return __builtin_shufflevector(__a, __a, 0); } +__ai poly64x1_t vget_low_p64(poly64x2_t __a) { + return __builtin_shufflevector(__a, __a, 0); } + +__ai int8_t vmaxv_s8(int8x8_t __a) { + return (int8_t)__builtin_neon_vmaxv_s8(__a); } +__ai int16_t vmaxv_s16(int16x4_t __a) { + return (int16_t)__builtin_neon_vmaxv_s16(__a); } +__ai int32_t vmaxv_s32(int32x2_t __a) { + return (int32_t)__builtin_neon_vmaxv_s32(__a); } +__ai float32_t vmaxv_f32(float32x2_t __a) { + return (float32_t)__builtin_neon_vmaxv_f32(__a); } +__ai uint8_t vmaxv_u8(uint8x8_t __a) { + return (uint8_t)__builtin_neon_vmaxv_u8((int8x8_t)__a); } +__ai uint16_t vmaxv_u16(uint16x4_t __a) { + return (uint16_t)__builtin_neon_vmaxv_u16((int16x4_t)__a); } +__ai uint32_t vmaxv_u32(uint32x2_t __a) { + return (uint32_t)__builtin_neon_vmaxv_u32((int32x2_t)__a); } +__ai int8_t vmaxvq_s8(int8x16_t __a) { + return (int8_t)__builtin_neon_vmaxvq_s8(__a); } +__ai int16_t vmaxvq_s16(int16x8_t __a) { + return (int16_t)__builtin_neon_vmaxvq_s16(__a); } +__ai int32_t vmaxvq_s32(int32x4_t __a) { + return (int32_t)__builtin_neon_vmaxvq_s32(__a); } +__ai uint8_t vmaxvq_u8(uint8x16_t __a) { + return (uint8_t)__builtin_neon_vmaxvq_u8((int8x16_t)__a); } +__ai uint16_t vmaxvq_u16(uint16x8_t __a) { + return (uint16_t)__builtin_neon_vmaxvq_u16((int16x8_t)__a); } +__ai uint32_t vmaxvq_u32(uint32x4_t __a) { + return (uint32_t)__builtin_neon_vmaxvq_u32((int32x4_t)__a); } +__ai float32_t vmaxvq_f32(float32x4_t __a) { + return (float32_t)__builtin_neon_vmaxvq_f32(__a); } +__ai float64_t vmaxvq_f64(float64x2_t __a) { + return (float64_t)__builtin_neon_vmaxvq_f64(__a); } + +__ai int8_t vminv_s8(int8x8_t __a) { + return (int8_t)__builtin_neon_vminv_s8(__a); } +__ai int16_t vminv_s16(int16x4_t __a) { + return (int16_t)__builtin_neon_vminv_s16(__a); } +__ai int32_t vminv_s32(int32x2_t __a) { + return (int32_t)__builtin_neon_vminv_s32(__a); } +__ai float32_t vminv_f32(float32x2_t __a) { + return (float32_t)__builtin_neon_vminv_f32(__a); } +__ai uint8_t vminv_u8(uint8x8_t __a) { + return (uint8_t)__builtin_neon_vminv_u8((int8x8_t)__a); } +__ai uint16_t vminv_u16(uint16x4_t __a) { + return (uint16_t)__builtin_neon_vminv_u16((int16x4_t)__a); } +__ai uint32_t vminv_u32(uint32x2_t __a) { + return (uint32_t)__builtin_neon_vminv_u32((int32x2_t)__a); } +__ai int8_t vminvq_s8(int8x16_t __a) { + return (int8_t)__builtin_neon_vminvq_s8(__a); } +__ai int16_t vminvq_s16(int16x8_t __a) { + return (int16_t)__builtin_neon_vminvq_s16(__a); } +__ai int32_t vminvq_s32(int32x4_t __a) { + return (int32_t)__builtin_neon_vminvq_s32(__a); } +__ai uint8_t vminvq_u8(uint8x16_t __a) { + return (uint8_t)__builtin_neon_vminvq_u8((int8x16_t)__a); } +__ai uint16_t vminvq_u16(uint16x8_t __a) { + return (uint16_t)__builtin_neon_vminvq_u16((int16x8_t)__a); } +__ai uint32_t vminvq_u32(uint32x4_t __a) { + return (uint32_t)__builtin_neon_vminvq_u32((int32x4_t)__a); } +__ai float32_t vminvq_f32(float32x4_t __a) { + return (float32_t)__builtin_neon_vminvq_f32(__a); } +__ai float64_t vminvq_f64(float64x2_t __a) { + return (float64_t)__builtin_neon_vminvq_f64(__a); } + +__ai int16x8_t vmlal_high_s8(int16x8_t __a, int8x16_t __b, int8x16_t __c) { + return vmlal_s8(__a, vget_high_s8(__b), vget_high_s8(__c)); } +__ai int32x4_t vmlal_high_s16(int32x4_t __a, int16x8_t __b, int16x8_t __c) { + return vmlal_s16(__a, vget_high_s16(__b), vget_high_s16(__c)); } +__ai int64x2_t vmlal_high_s32(int64x2_t __a, int32x4_t __b, int32x4_t __c) { + return vmlal_s32(__a, vget_high_s32(__b), vget_high_s32(__c)); } +__ai uint16x8_t vmlal_high_u8(uint16x8_t __a, uint8x16_t __b, uint8x16_t __c) { + return vmlal_u8(__a, vget_high_u8(__b), vget_high_u8(__c)); } +__ai uint32x4_t vmlal_high_u16(uint32x4_t __a, uint16x8_t __b, uint16x8_t __c) { + return vmlal_u16(__a, vget_high_u16(__b), vget_high_u16(__c)); } +__ai uint64x2_t vmlal_high_u32(uint64x2_t __a, uint32x4_t __b, uint32x4_t __c) { + return vmlal_u32(__a, vget_high_u32(__b), vget_high_u32(__c)); } + +#define vmlal_high_lane_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x8_t __b = (b); int16x4_t __c = (c); \ + __a + vmull_s16(vget_high_s16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlal_high_lane_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x4_t __b = (b); int32x2_t __c = (c); \ + __a + vmull_s32(vget_high_s32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlal_high_lane_u16(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint16x8_t __b = (b); uint16x4_t __c = (c); \ + __a + vmull_u16(vget_high_u16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlal_high_lane_u32(a, b, c, __d) __extension__ ({ \ + uint64x2_t __a = (a); uint32x4_t __b = (b); uint32x2_t __c = (c); \ + __a + vmull_u32(vget_high_u32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) + +#define vmlal_high_laneq_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x8_t __b = (b); int16x8_t __c = (c); \ + __a + vmull_s16(vget_high_s16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlal_high_laneq_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x4_t __b = (b); int32x4_t __c = (c); \ + __a + vmull_s32(vget_high_s32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlal_high_laneq_u16(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint16x8_t __b = (b); uint16x8_t __c = (c); \ + __a + vmull_u16(vget_high_u16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlal_high_laneq_u32(a, b, c, __d) __extension__ ({ \ + uint64x2_t __a = (a); uint32x4_t __b = (b); uint32x4_t __c = (c); \ + __a + vmull_u32(vget_high_u32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) + +__ai int32x4_t vmlal_high_n_s16(int32x4_t __a, int16x8_t __b, int16_t __c) { + return vmlal_n_s16(__a, vget_high_s16(__b), __c); } +__ai int64x2_t vmlal_high_n_s32(int64x2_t __a, int32x4_t __b, int32_t __c) { + return vmlal_n_s32(__a, vget_high_s32(__b), __c); } +__ai uint32x4_t vmlal_high_n_u16(uint32x4_t __a, uint16x8_t __b, uint16_t __c) { + return vmlal_n_u16(__a, vget_high_u16(__b), __c); } +__ai uint64x2_t vmlal_high_n_u32(uint64x2_t __a, uint32x4_t __b, uint32_t __c) { + return vmlal_n_u32(__a, vget_high_u32(__b), __c); } + +#define vmlal_laneq_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x4_t __b = (b); int16x8_t __c = (c); \ + __a + vmull_s16(__b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlal_laneq_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x2_t __b = (b); int32x4_t __c = (c); \ + __a + vmull_s32(__b, __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlal_laneq_u16(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint16x4_t __b = (b); uint16x8_t __c = (c); \ + __a + vmull_u16(__b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlal_laneq_u32(a, b, c, __d) __extension__ ({ \ + uint64x2_t __a = (a); uint32x2_t __b = (b); uint32x4_t __c = (c); \ + __a + vmull_u32(__b, __builtin_shufflevector(__c, __c, __d, __d)); }) + +#define vmla_laneq_s16(a, b, c, __d) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); int16x8_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmla_laneq_s32(a, b, c, __d) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); int32x4_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmla_laneq_u16(a, b, c, __d) __extension__ ({ \ + uint16x4_t __a = (a); uint16x4_t __b = (b); uint16x8_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmla_laneq_u32(a, b, c, __d) __extension__ ({ \ + uint32x2_t __a = (a); uint32x2_t __b = (b); uint32x4_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmla_laneq_f32(a, b, c, __d) __extension__ ({ \ + float32x2_t __a = (a); float32x2_t __b = (b); float32x4_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlaq_laneq_s16(a, b, c, __d) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); int16x8_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d, __d, __d, __d, __d)); }) +#define vmlaq_laneq_s32(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); int32x4_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlaq_laneq_u16(a, b, c, __d) __extension__ ({ \ + uint16x8_t __a = (a); uint16x8_t __b = (b); uint16x8_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d, __d, __d, __d, __d)); }) +#define vmlaq_laneq_u32(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint32x4_t __b = (b); uint32x4_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlaq_laneq_f32(a, b, c, __d) __extension__ ({ \ + float32x4_t __a = (a); float32x4_t __b = (b); float32x4_t __c = (c); \ + __a + (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) + +__ai int16x8_t vmlsl_high_s8(int16x8_t __a, int8x16_t __b, int8x16_t __c) { + return vmlsl_s8(__a, vget_high_s8(__b), vget_high_s8(__c)); } +__ai int32x4_t vmlsl_high_s16(int32x4_t __a, int16x8_t __b, int16x8_t __c) { + return vmlsl_s16(__a, vget_high_s16(__b), vget_high_s16(__c)); } +__ai int64x2_t vmlsl_high_s32(int64x2_t __a, int32x4_t __b, int32x4_t __c) { + return vmlsl_s32(__a, vget_high_s32(__b), vget_high_s32(__c)); } +__ai uint16x8_t vmlsl_high_u8(uint16x8_t __a, uint8x16_t __b, uint8x16_t __c) { + return vmlsl_u8(__a, vget_high_u8(__b), vget_high_u8(__c)); } +__ai uint32x4_t vmlsl_high_u16(uint32x4_t __a, uint16x8_t __b, uint16x8_t __c) { + return vmlsl_u16(__a, vget_high_u16(__b), vget_high_u16(__c)); } +__ai uint64x2_t vmlsl_high_u32(uint64x2_t __a, uint32x4_t __b, uint32x4_t __c) { + return vmlsl_u32(__a, vget_high_u32(__b), vget_high_u32(__c)); } + +#define vmlsl_high_lane_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x8_t __b = (b); int16x4_t __c = (c); \ + __a - vmull_s16(vget_high_s16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsl_high_lane_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x4_t __b = (b); int32x2_t __c = (c); \ + __a - vmull_s32(vget_high_s32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlsl_high_lane_u16(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint16x8_t __b = (b); uint16x4_t __c = (c); \ + __a - vmull_u16(vget_high_u16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsl_high_lane_u32(a, b, c, __d) __extension__ ({ \ + uint64x2_t __a = (a); uint32x4_t __b = (b); uint32x2_t __c = (c); \ + __a - vmull_u32(vget_high_u32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) + +#define vmlsl_high_laneq_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x8_t __b = (b); int16x8_t __c = (c); \ + __a - vmull_s16(vget_high_s16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsl_high_laneq_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x4_t __b = (b); int32x4_t __c = (c); \ + __a - vmull_s32(vget_high_s32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlsl_high_laneq_u16(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint16x8_t __b = (b); uint16x8_t __c = (c); \ + __a - vmull_u16(vget_high_u16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsl_high_laneq_u32(a, b, c, __d) __extension__ ({ \ + uint64x2_t __a = (a); uint32x4_t __b = (b); uint32x4_t __c = (c); \ + __a - vmull_u32(vget_high_u32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) + +__ai int32x4_t vmlsl_high_n_s16(int32x4_t __a, int16x8_t __b, int16_t __c) { + return vmlsl_n_s16(__a, vget_high_s16(__b), __c); } +__ai int64x2_t vmlsl_high_n_s32(int64x2_t __a, int32x4_t __b, int32_t __c) { + return vmlsl_n_s32(__a, vget_high_s32(__b), __c); } +__ai uint32x4_t vmlsl_high_n_u16(uint32x4_t __a, uint16x8_t __b, uint16_t __c) { + return vmlsl_n_u16(__a, vget_high_u16(__b), __c); } +__ai uint64x2_t vmlsl_high_n_u32(uint64x2_t __a, uint32x4_t __b, uint32_t __c) { + return vmlsl_n_u32(__a, vget_high_u32(__b), __c); } + +#define vmlsl_laneq_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x4_t __b = (b); int16x8_t __c = (c); \ + __a - vmull_s16(__b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsl_laneq_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x2_t __b = (b); int32x4_t __c = (c); \ + __a - vmull_s32(__b, __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlsl_laneq_u16(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint16x4_t __b = (b); uint16x8_t __c = (c); \ + __a - vmull_u16(__b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsl_laneq_u32(a, b, c, __d) __extension__ ({ \ + uint64x2_t __a = (a); uint32x2_t __b = (b); uint32x4_t __c = (c); \ + __a - vmull_u32(__b, __builtin_shufflevector(__c, __c, __d, __d)); }) + +#define vmls_laneq_s16(a, b, c, __d) __extension__ ({ \ + int16x4_t __a = (a); int16x4_t __b = (b); int16x8_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmls_laneq_s32(a, b, c, __d) __extension__ ({ \ + int32x2_t __a = (a); int32x2_t __b = (b); int32x4_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmls_laneq_u16(a, b, c, __d) __extension__ ({ \ + uint16x4_t __a = (a); uint16x4_t __b = (b); uint16x8_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmls_laneq_u32(a, b, c, __d) __extension__ ({ \ + uint32x2_t __a = (a); uint32x2_t __b = (b); uint32x4_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmls_laneq_f32(a, b, c, __d) __extension__ ({ \ + float32x2_t __a = (a); float32x2_t __b = (b); float32x4_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d)); }) +#define vmlsq_laneq_s16(a, b, c, __d) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); int16x8_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d, __d, __d, __d, __d)); }) +#define vmlsq_laneq_s32(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); int32x4_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsq_laneq_u16(a, b, c, __d) __extension__ ({ \ + uint16x8_t __a = (a); uint16x8_t __b = (b); uint16x8_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d, __d, __d, __d, __d)); }) +#define vmlsq_laneq_u32(a, b, c, __d) __extension__ ({ \ + uint32x4_t __a = (a); uint32x4_t __b = (b); uint32x4_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vmlsq_laneq_f32(a, b, c, __d) __extension__ ({ \ + float32x4_t __a = (a); float32x4_t __b = (b); float32x4_t __c = (c); \ + __a - (__b * __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) + + + +#define vmull_high_lane_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x4_t __b = (b); \ + vmull_s16(vget_high_s16(__a), __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vmull_high_lane_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x2_t __b = (b); \ + vmull_s32(vget_high_s32(__a), __builtin_shufflevector(__b, __b, __c, __c)); }) +#define vmull_high_lane_u16(a, b, __c) __extension__ ({ \ + uint16x8_t __a = (a); uint16x4_t __b = (b); \ + vmull_u16(vget_high_u16(__a), __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vmull_high_lane_u32(a, b, __c) __extension__ ({ \ + uint32x4_t __a = (a); uint32x2_t __b = (b); \ + vmull_u32(vget_high_u32(__a), __builtin_shufflevector(__b, __b, __c, __c)); }) + +#define vmull_high_laneq_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); \ + vmull_s16(vget_high_s16(__a), __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vmull_high_laneq_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); \ + vmull_s32(vget_high_s32(__a), __builtin_shufflevector(__b, __b, __c, __c)); }) +#define vmull_high_laneq_u16(a, b, __c) __extension__ ({ \ + uint16x8_t __a = (a); uint16x8_t __b = (b); \ + vmull_u16(vget_high_u16(__a), __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vmull_high_laneq_u32(a, b, __c) __extension__ ({ \ + uint32x4_t __a = (a); uint32x4_t __b = (b); \ + vmull_u32(vget_high_u32(__a), __builtin_shufflevector(__b, __b, __c, __c)); }) + +__ai int32x4_t vmull_high_n_s16(int16x8_t __a, int16_t __b) { + return vmull_n_s16(vget_high_s16(__a), __b); } +__ai int64x2_t vmull_high_n_s32(int32x4_t __a, int32_t __b) { + return vmull_n_s32(vget_high_s32(__a), __b); } +__ai uint32x4_t vmull_high_n_u16(uint16x8_t __a, uint16_t __b) { + return vmull_n_u16(vget_high_u16(__a), __b); } +__ai uint64x2_t vmull_high_n_u32(uint32x4_t __a, uint32_t __b) { + return vmull_n_u32(vget_high_u32(__a), __b); } + +#define vmull_laneq_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x8_t __b = (b); \ + vmull_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vmull_laneq_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x4_t __b = (b); \ + vmull_s32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) +#define vmull_laneq_u16(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint16x8_t __b = (b); \ + vmull_u16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vmull_laneq_u32(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint32x4_t __b = (b); \ + vmull_u32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) + +#define vmulx_lane_f32(a, b, __c) __extension__ ({ \ + float32x2_t __a = (a); float32x2_t __b = (b); \ + vmulx_f32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) +#define vmulxq_lane_f32(a, b, __c) __extension__ ({ \ + float32x4_t __a = (a); float32x2_t __b = (b); \ + vmulxq_f32(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vmulxq_lane_f64(a, b, __c) __extension__ ({ \ + float64x2_t __a = (a); float64x1_t __b = (b); \ + vmulxq_f64(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) + +#define vmulx_laneq_f32(a, b, __c) __extension__ ({ \ + float32x2_t __a = (a); float32x4_t __b = (b); \ + vmulx_f32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) +#define vmulxq_laneq_f32(a, b, __c) __extension__ ({ \ + float32x4_t __a = (a); float32x4_t __b = (b); \ + vmulxq_f32(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vmulxq_laneq_f64(a, b, __c) __extension__ ({ \ + float64x2_t __a = (a); float64x2_t __b = (b); \ + vmulxq_f64(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) + +#define vmul_laneq_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x8_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c); }) +#define vmul_laneq_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x4_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c); }) +#define vmul_laneq_f32(a, b, __c) __extension__ ({ \ + float32x2_t __a = (a); float32x4_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c); }) +#define vmul_laneq_u16(a, b, __c) __extension__ ({ \ + uint16x4_t __a = (a); uint16x8_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c); }) +#define vmul_laneq_u32(a, b, __c) __extension__ ({ \ + uint32x2_t __a = (a); uint32x4_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c); }) +#define vmulq_laneq_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c, __c, __c, __c, __c); }) +#define vmulq_laneq_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c); }) +#define vmulq_laneq_f32(a, b, __c) __extension__ ({ \ + float32x4_t __a = (a); float32x4_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c); }) +#define vmulq_laneq_u16(a, b, __c) __extension__ ({ \ + uint16x8_t __a = (a); uint16x8_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c, __c, __c, __c, __c); }) +#define vmulq_laneq_u32(a, b, __c) __extension__ ({ \ + uint32x4_t __a = (a); uint32x4_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c, __c, __c); }) +#define vmulq_laneq_f64(a, b, __c) __extension__ ({ \ + float64x2_t __a = (a); float64x2_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c); }) + +#define vmulq_lane_f64(a, b, __c) __extension__ ({ \ + float64x2_t __a = (a); float64x1_t __b = (b); \ + __a * __builtin_shufflevector(__b, __b, __c, __c); }) + +__ai float64x2_t vmulq_n_f64(float64x2_t __a, float64_t __b) { + return __a * (float64x2_t){ __b, __b }; } + +__ai int32x4_t vqdmlal_high_s16(int32x4_t __a, int16x8_t __b, int16x8_t __c) { + return vqdmlal_s16(__a, vget_high_s16(__b), vget_high_s16(__c)); } +__ai int64x2_t vqdmlal_high_s32(int64x2_t __a, int32x4_t __b, int32x4_t __c) { + return vqdmlal_s32(__a, vget_high_s32(__b), vget_high_s32(__c)); } + +#define vqdmlal_high_lane_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x8_t __b = (b); int16x4_t __c = (c); \ + vqdmlal_s16(__a, vget_high_s16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vqdmlal_high_lane_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x4_t __b = (b); int32x2_t __c = (c); \ + vqdmlal_s32(__a, vget_high_s32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) + +#define vqdmlal_high_laneq_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x8_t __b = (b); int16x8_t __c = (c); \ + vqdmlal_s16(__a, vget_high_s16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vqdmlal_high_laneq_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x4_t __b = (b); int32x4_t __c = (c); \ + vqdmlal_s32(__a, vget_high_s32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) + +__ai int32x4_t vqdmlal_high_n_s16(int32x4_t __a, int16x8_t __b, int16_t __c) { + return vqdmlal_n_s16(__a, vget_high_s16(__b), __c); } +__ai int64x2_t vqdmlal_high_n_s32(int64x2_t __a, int32x4_t __b, int32_t __c) { + return vqdmlal_n_s32(__a, vget_high_s32(__b), __c); } + +#define vqdmlal_laneq_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x4_t __b = (b); int16x8_t __c = (c); \ + vqdmlal_s16(__a, __b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vqdmlal_laneq_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x2_t __b = (b); int32x4_t __c = (c); \ + vqdmlal_s32(__a, __b, __builtin_shufflevector(__c, __c, __d, __d)); }) + +__ai int32x4_t vqdmlsl_high_s16(int32x4_t __a, int16x8_t __b, int16x8_t __c) { + return vqdmlsl_s16(__a, vget_high_s16(__b), vget_high_s16(__c)); } +__ai int64x2_t vqdmlsl_high_s32(int64x2_t __a, int32x4_t __b, int32x4_t __c) { + return vqdmlsl_s32(__a, vget_high_s32(__b), vget_high_s32(__c)); } + +#define vqdmlsl_high_lane_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x8_t __b = (b); int16x4_t __c = (c); \ + vqdmlsl_s16(__a, vget_high_s16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vqdmlsl_high_lane_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x4_t __b = (b); int32x2_t __c = (c); \ + vqdmlsl_s32(__a, vget_high_s32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) + +#define vqdmlsl_high_laneq_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x8_t __b = (b); int16x8_t __c = (c); \ + vqdmlsl_s16(__a, vget_high_s16(__b), __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vqdmlsl_high_laneq_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x4_t __b = (b); int32x4_t __c = (c); \ + vqdmlsl_s32(__a, vget_high_s32(__b), __builtin_shufflevector(__c, __c, __d, __d)); }) + +__ai int32x4_t vqdmlsl_high_n_s16(int32x4_t __a, int16x8_t __b, int16_t __c) { + return vqdmlsl_n_s16(__a, vget_high_s16(__b), __c); } +__ai int64x2_t vqdmlsl_high_n_s32(int64x2_t __a, int32x4_t __b, int32_t __c) { + return vqdmlsl_n_s32(__a, vget_high_s32(__b), __c); } + +#define vqdmlsl_laneq_s16(a, b, c, __d) __extension__ ({ \ + int32x4_t __a = (a); int16x4_t __b = (b); int16x8_t __c = (c); \ + vqdmlsl_s16(__a, __b, __builtin_shufflevector(__c, __c, __d, __d, __d, __d)); }) +#define vqdmlsl_laneq_s32(a, b, c, __d) __extension__ ({ \ + int64x2_t __a = (a); int32x2_t __b = (b); int32x4_t __c = (c); \ + vqdmlsl_s32(__a, __b, __builtin_shufflevector(__c, __c, __d, __d)); }) + +#define vqdmulh_laneq_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x8_t __b = (b); \ + vqdmulh_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vqdmulh_laneq_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x4_t __b = (b); \ + vqdmulh_s32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) +#define vqdmulhq_laneq_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); \ + vqdmulhq_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c, __c, __c, __c, __c)); }) +#define vqdmulhq_laneq_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); \ + vqdmulhq_s32(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) + +__ai int32x4_t vqdmull_high_s16(int16x8_t __a, int16x8_t __b) { + return vqdmull_s16(vget_high_s16(__a), vget_high_s16(__b)); } +__ai int64x2_t vqdmull_high_s32(int32x4_t __a, int32x4_t __b) { + return vqdmull_s32(vget_high_s32(__a), vget_high_s32(__b)); } + +#define vqdmull_high_lane_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x4_t __b = (b); \ + vqdmull_s16(vget_high_s16(__a), __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vqdmull_high_lane_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x2_t __b = (b); \ + vqdmull_s32(vget_high_s32(__a), __builtin_shufflevector(__b, __b, __c, __c)); }) + +#define vqdmull_high_laneq_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); \ + vqdmull_s16(vget_high_s16(__a), __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vqdmull_high_laneq_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); \ + vqdmull_s32(vget_high_s32(__a), __builtin_shufflevector(__b, __b, __c, __c)); }) + +__ai int32x4_t vqdmull_high_n_s16(int16x8_t __a, int16_t __b) { + return vqdmull_n_s16(vget_high_s16(__a), __b); } +__ai int64x2_t vqdmull_high_n_s32(int32x4_t __a, int32_t __b) { + return vqdmull_n_s32(vget_high_s32(__a), __b); } + +#define vqdmull_laneq_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x8_t __b = (b); \ + vqdmull_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vqdmull_laneq_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x4_t __b = (b); \ + vqdmull_s32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) + +#define vqrdmulh_laneq_s16(a, b, __c) __extension__ ({ \ + int16x4_t __a = (a); int16x8_t __b = (b); \ + vqrdmulh_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) +#define vqrdmulh_laneq_s32(a, b, __c) __extension__ ({ \ + int32x2_t __a = (a); int32x4_t __b = (b); \ + vqrdmulh_s32(__a, __builtin_shufflevector(__b, __b, __c, __c)); }) +#define vqrdmulhq_laneq_s16(a, b, __c) __extension__ ({ \ + int16x8_t __a = (a); int16x8_t __b = (b); \ + vqrdmulhq_s16(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c, __c, __c, __c, __c)); }) +#define vqrdmulhq_laneq_s32(a, b, __c) __extension__ ({ \ + int32x4_t __a = (a); int32x4_t __b = (b); \ + vqrdmulhq_s32(__a, __builtin_shufflevector(__b, __b, __c, __c, __c, __c)); }) + +__ai uint8x8_t vqtbl1_u8(uint8x16_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vqtbl1_v((int8x16_t)__a, (int8x8_t)__b, 16); } +__ai int8x8_t vqtbl1_s8(int8x16_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vqtbl1_v(__a, __b, 0); } +__ai poly8x8_t vqtbl1_p8(poly8x16_t __a, uint8x8_t __b) { + return (poly8x8_t)__builtin_neon_vqtbl1_v((int8x16_t)__a, (int8x8_t)__b, 4); } +__ai uint8x16_t vqtbl1q_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vqtbl1q_v((int8x16_t)__a, (int8x16_t)__b, 48); } +__ai int8x16_t vqtbl1q_s8(int8x16_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vqtbl1q_v(__a, __b, 32); } +__ai poly8x16_t vqtbl1q_p8(poly8x16_t __a, uint8x16_t __b) { + return (poly8x16_t)__builtin_neon_vqtbl1q_v((int8x16_t)__a, (int8x16_t)__b, 36); } + +__ai uint8x8_t vqtbl2_u8(uint8x16x2_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vqtbl2_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x8_t)__b, 16); } +__ai int8x8_t vqtbl2_s8(int8x16x2_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vqtbl2_v(__a.val[0], __a.val[1], __b, 0); } +__ai poly8x8_t vqtbl2_p8(poly8x16x2_t __a, uint8x8_t __b) { + return (poly8x8_t)__builtin_neon_vqtbl2_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x8_t)__b, 4); } +__ai uint8x16_t vqtbl2q_u8(uint8x16x2_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vqtbl2q_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x16_t)__b, 48); } +__ai int8x16_t vqtbl2q_s8(int8x16x2_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vqtbl2q_v(__a.val[0], __a.val[1], __b, 32); } +__ai poly8x16_t vqtbl2q_p8(poly8x16x2_t __a, uint8x16_t __b) { + return (poly8x16_t)__builtin_neon_vqtbl2q_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x16_t)__b, 36); } + +__ai uint8x8_t vqtbl3_u8(uint8x16x3_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vqtbl3_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x16_t)__a.val[2], (int8x8_t)__b, 16); } +__ai int8x8_t vqtbl3_s8(int8x16x3_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vqtbl3_v(__a.val[0], __a.val[1], __a.val[2], __b, 0); } +__ai poly8x8_t vqtbl3_p8(poly8x16x3_t __a, uint8x8_t __b) { + return (poly8x8_t)__builtin_neon_vqtbl3_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x16_t)__a.val[2], (int8x8_t)__b, 4); } +__ai uint8x16_t vqtbl3q_u8(uint8x16x3_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vqtbl3q_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x16_t)__a.val[2], (int8x16_t)__b, 48); } +__ai int8x16_t vqtbl3q_s8(int8x16x3_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vqtbl3q_v(__a.val[0], __a.val[1], __a.val[2], __b, 32); } +__ai poly8x16_t vqtbl3q_p8(poly8x16x3_t __a, uint8x16_t __b) { + return (poly8x16_t)__builtin_neon_vqtbl3q_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x16_t)__a.val[2], (int8x16_t)__b, 36); } + +__ai uint8x8_t vqtbl4_u8(uint8x16x4_t __a, uint8x8_t __b) { + return (uint8x8_t)__builtin_neon_vqtbl4_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x16_t)__a.val[2], (int8x16_t)__a.val[3], (int8x8_t)__b, 16); } +__ai int8x8_t vqtbl4_s8(int8x16x4_t __a, int8x8_t __b) { + return (int8x8_t)__builtin_neon_vqtbl4_v(__a.val[0], __a.val[1], __a.val[2], __a.val[3], __b, 0); } +__ai poly8x8_t vqtbl4_p8(poly8x16x4_t __a, uint8x8_t __b) { + return (poly8x8_t)__builtin_neon_vqtbl4_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x16_t)__a.val[2], (int8x16_t)__a.val[3], (int8x8_t)__b, 4); } +__ai uint8x16_t vqtbl4q_u8(uint8x16x4_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vqtbl4q_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x16_t)__a.val[2], (int8x16_t)__a.val[3], (int8x16_t)__b, 48); } +__ai int8x16_t vqtbl4q_s8(int8x16x4_t __a, int8x16_t __b) { + return (int8x16_t)__builtin_neon_vqtbl4q_v(__a.val[0], __a.val[1], __a.val[2], __a.val[3], __b, 32); } +__ai poly8x16_t vqtbl4q_p8(poly8x16x4_t __a, uint8x16_t __b) { + return (poly8x16_t)__builtin_neon_vqtbl4q_v((int8x16_t)__a.val[0], (int8x16_t)__a.val[1], (int8x16_t)__a.val[2], (int8x16_t)__a.val[3], (int8x16_t)__b, 36); } + +__ai uint8x8_t vqtbx1_u8(uint8x8_t __a, uint8x16_t __b, uint8x8_t __c) { + return (uint8x8_t)__builtin_neon_vqtbx1_v((int8x8_t)__a, (int8x16_t)__b, (int8x8_t)__c, 16); } +__ai int8x8_t vqtbx1_s8(int8x8_t __a, int8x16_t __b, int8x8_t __c) { + return (int8x8_t)__builtin_neon_vqtbx1_v(__a, __b, __c, 0); } +__ai poly8x8_t vqtbx1_p8(poly8x8_t __a, poly8x16_t __b, uint8x8_t __c) { + return (poly8x8_t)__builtin_neon_vqtbx1_v((int8x8_t)__a, (int8x16_t)__b, (int8x8_t)__c, 4); } +__ai uint8x16_t vqtbx1q_u8(uint8x16_t __a, uint8x16_t __b, uint8x16_t __c) { + return (uint8x16_t)__builtin_neon_vqtbx1q_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 48); } +__ai int8x16_t vqtbx1q_s8(int8x16_t __a, int8x16_t __b, int8x16_t __c) { + return (int8x16_t)__builtin_neon_vqtbx1q_v(__a, __b, __c, 32); } +__ai poly8x16_t vqtbx1q_p8(poly8x16_t __a, poly8x16_t __b, uint8x16_t __c) { + return (poly8x16_t)__builtin_neon_vqtbx1q_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 36); } + +__ai uint8x8_t vqtbx2_u8(uint8x8_t __a, uint8x16x2_t __b, uint8x8_t __c) { + return (uint8x8_t)__builtin_neon_vqtbx2_v((int8x8_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x8_t)__c, 16); } +__ai int8x8_t vqtbx2_s8(int8x8_t __a, int8x16x2_t __b, int8x8_t __c) { + return (int8x8_t)__builtin_neon_vqtbx2_v(__a, __b.val[0], __b.val[1], __c, 0); } +__ai poly8x8_t vqtbx2_p8(poly8x8_t __a, poly8x16x2_t __b, uint8x8_t __c) { + return (poly8x8_t)__builtin_neon_vqtbx2_v((int8x8_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x8_t)__c, 4); } +__ai uint8x16_t vqtbx2q_u8(uint8x16_t __a, uint8x16x2_t __b, uint8x16_t __c) { + return (uint8x16_t)__builtin_neon_vqtbx2q_v((int8x16_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__c, 48); } +__ai int8x16_t vqtbx2q_s8(int8x16_t __a, int8x16x2_t __b, int8x16_t __c) { + return (int8x16_t)__builtin_neon_vqtbx2q_v(__a, __b.val[0], __b.val[1], __c, 32); } +__ai poly8x16_t vqtbx2q_p8(poly8x16_t __a, poly8x16x2_t __b, uint8x16_t __c) { + return (poly8x16_t)__builtin_neon_vqtbx2q_v((int8x16_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__c, 36); } + +__ai uint8x8_t vqtbx3_u8(uint8x8_t __a, uint8x16x3_t __b, uint8x8_t __c) { + return (uint8x8_t)__builtin_neon_vqtbx3_v((int8x8_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x8_t)__c, 16); } +__ai int8x8_t vqtbx3_s8(int8x8_t __a, int8x16x3_t __b, int8x8_t __c) { + return (int8x8_t)__builtin_neon_vqtbx3_v(__a, __b.val[0], __b.val[1], __b.val[2], __c, 0); } +__ai poly8x8_t vqtbx3_p8(poly8x8_t __a, poly8x16x3_t __b, uint8x8_t __c) { + return (poly8x8_t)__builtin_neon_vqtbx3_v((int8x8_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x8_t)__c, 4); } +__ai uint8x16_t vqtbx3q_u8(uint8x16_t __a, uint8x16x3_t __b, uint8x16_t __c) { + return (uint8x16_t)__builtin_neon_vqtbx3q_v((int8x16_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__c, 48); } +__ai int8x16_t vqtbx3q_s8(int8x16_t __a, int8x16x3_t __b, int8x16_t __c) { + return (int8x16_t)__builtin_neon_vqtbx3q_v(__a, __b.val[0], __b.val[1], __b.val[2], __c, 32); } +__ai poly8x16_t vqtbx3q_p8(poly8x16_t __a, poly8x16x3_t __b, uint8x16_t __c) { + return (poly8x16_t)__builtin_neon_vqtbx3q_v((int8x16_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__c, 36); } + +__ai uint8x8_t vqtbx4_u8(uint8x8_t __a, uint8x16x4_t __b, uint8x8_t __c) { + return (uint8x8_t)__builtin_neon_vqtbx4_v((int8x8_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], (int8x8_t)__c, 16); } +__ai int8x8_t vqtbx4_s8(int8x8_t __a, int8x16x4_t __b, int8x8_t __c) { + return (int8x8_t)__builtin_neon_vqtbx4_v(__a, __b.val[0], __b.val[1], __b.val[2], __b.val[3], __c, 0); } +__ai poly8x8_t vqtbx4_p8(poly8x8_t __a, poly8x16x4_t __b, uint8x8_t __c) { + return (poly8x8_t)__builtin_neon_vqtbx4_v((int8x8_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], (int8x8_t)__c, 4); } +__ai uint8x16_t vqtbx4q_u8(uint8x16_t __a, uint8x16x4_t __b, uint8x16_t __c) { + return (uint8x16_t)__builtin_neon_vqtbx4q_v((int8x16_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], (int8x16_t)__c, 48); } +__ai int8x16_t vqtbx4q_s8(int8x16_t __a, int8x16x4_t __b, int8x16_t __c) { + return (int8x16_t)__builtin_neon_vqtbx4q_v(__a, __b.val[0], __b.val[1], __b.val[2], __b.val[3], __c, 32); } +__ai poly8x16_t vqtbx4q_p8(poly8x16_t __a, poly8x16x4_t __b, uint8x16_t __c) { + return (poly8x16_t)__builtin_neon_vqtbx4q_v((int8x16_t)__a, (int8x16_t)__b.val[0], (int8x16_t)__b.val[1], (int8x16_t)__b.val[2], (int8x16_t)__b.val[3], (int8x16_t)__c, 36); } + +__ai int8x16_t vraddhn_high_s16(int8x8_t __a, int16x8_t __b, int16x8_t __c) { + return vcombine_s8(__a, vraddhn_s16(__b, __c)); } +__ai int16x8_t vraddhn_high_s32(int16x4_t __a, int32x4_t __b, int32x4_t __c) { + return vcombine_s16(__a, vraddhn_s32(__b, __c)); } +__ai int32x4_t vraddhn_high_s64(int32x2_t __a, int64x2_t __b, int64x2_t __c) { + return vcombine_s32(__a, vraddhn_s64(__b, __c)); } +__ai uint8x16_t vraddhn_high_u16(uint8x8_t __a, uint16x8_t __b, uint16x8_t __c) { + return vcombine_u8(__a, vraddhn_u16(__b, __c)); } +__ai uint16x8_t vraddhn_high_u32(uint16x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return vcombine_u16(__a, vraddhn_u32(__b, __c)); } +__ai uint32x4_t vraddhn_high_u64(uint32x2_t __a, uint64x2_t __b, uint64x2_t __c) { + return vcombine_u32(__a, vraddhn_u64(__b, __c)); } + +__ai int8x16_t vrsubhn_high_s16(int8x8_t __a, int16x8_t __b, int16x8_t __c) { + return vcombine_s8(__a, vrsubhn_s16(__b, __c)); } +__ai int16x8_t vrsubhn_high_s32(int16x4_t __a, int32x4_t __b, int32x4_t __c) { + return vcombine_s16(__a, vrsubhn_s32(__b, __c)); } +__ai int32x4_t vrsubhn_high_s64(int32x2_t __a, int64x2_t __b, int64x2_t __c) { + return vcombine_s32(__a, vrsubhn_s64(__b, __c)); } +__ai uint8x16_t vrsubhn_high_u16(uint8x8_t __a, uint16x8_t __b, uint16x8_t __c) { + return vcombine_u8(__a, vrsubhn_u16(__b, __c)); } +__ai uint16x8_t vrsubhn_high_u32(uint16x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return vcombine_u16(__a, vrsubhn_u32(__b, __c)); } +__ai uint32x4_t vrsubhn_high_u64(uint32x2_t __a, uint64x2_t __b, uint64x2_t __c) { + return vcombine_u32(__a, vrsubhn_u64(__b, __c)); } + +__ai int8x16_t vsubhn_high_s16(int8x8_t __a, int16x8_t __b, int16x8_t __c) { + return vcombine_s8(__a, vsubhn_s16(__b, __c)); } +__ai int16x8_t vsubhn_high_s32(int16x4_t __a, int32x4_t __b, int32x4_t __c) { + return vcombine_s16(__a, vsubhn_s32(__b, __c)); } +__ai int32x4_t vsubhn_high_s64(int32x2_t __a, int64x2_t __b, int64x2_t __c) { + return vcombine_s32(__a, vsubhn_s64(__b, __c)); } +__ai uint8x16_t vsubhn_high_u16(uint8x8_t __a, uint16x8_t __b, uint16x8_t __c) { + return vcombine_u8(__a, vsubhn_u16(__b, __c)); } +__ai uint16x8_t vsubhn_high_u32(uint16x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return vcombine_u16(__a, vsubhn_u32(__b, __c)); } +__ai uint32x4_t vsubhn_high_u64(uint32x2_t __a, uint64x2_t __b, uint64x2_t __c) { + return vcombine_u32(__a, vsubhn_u64(__b, __c)); } + +__ai int16x8_t vsubl_high_s8(int8x16_t __a, int8x16_t __b) { + return vmovl_high_s8(__a) - vmovl_high_s8(__b); } +__ai int32x4_t vsubl_high_s16(int16x8_t __a, int16x8_t __b) { + return vmovl_high_s16(__a) - vmovl_high_s16(__b); } +__ai int64x2_t vsubl_high_s32(int32x4_t __a, int32x4_t __b) { + return vmovl_high_s32(__a) - vmovl_high_s32(__b); } +__ai uint16x8_t vsubl_high_u8(uint8x16_t __a, uint8x16_t __b) { + return vmovl_high_u8(__a) - vmovl_high_u8(__b); } +__ai uint32x4_t vsubl_high_u16(uint16x8_t __a, uint16x8_t __b) { + return vmovl_high_u16(__a) - vmovl_high_u16(__b); } +__ai uint64x2_t vsubl_high_u32(uint32x4_t __a, uint32x4_t __b) { + return vmovl_high_u32(__a) - vmovl_high_u32(__b); } + +__ai int16x8_t vsubw_high_s8(int16x8_t __a, int8x16_t __b) { + return __a - vmovl_high_s8(__b); } +__ai int32x4_t vsubw_high_s16(int32x4_t __a, int16x8_t __b) { + return __a - vmovl_high_s16(__b); } +__ai int64x2_t vsubw_high_s32(int64x2_t __a, int32x4_t __b) { + return __a - vmovl_high_s32(__b); } +__ai uint16x8_t vsubw_high_u8(uint16x8_t __a, uint8x16_t __b) { + return __a - vmovl_high_u8(__b); } +__ai uint32x4_t vsubw_high_u16(uint32x4_t __a, uint16x8_t __b) { + return __a - vmovl_high_u16(__b); } +__ai uint64x2_t vsubw_high_u32(uint64x2_t __a, uint32x4_t __b) { + return __a - vmovl_high_u32(__b); } + +__ai int8x8_t vtrn1_s8(int8x8_t __a, int8x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 2, 10, 4, 12, 6, 14); } +__ai int16x4_t vtrn1_s16(int16x4_t __a, int16x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 2, 6); } +__ai int32x2_t vtrn1_s32(int32x2_t __a, int32x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai uint8x8_t vtrn1_u8(uint8x8_t __a, uint8x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 2, 10, 4, 12, 6, 14); } +__ai uint16x4_t vtrn1_u16(uint16x4_t __a, uint16x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 2, 6); } +__ai uint32x2_t vtrn1_u32(uint32x2_t __a, uint32x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai float32x2_t vtrn1_f32(float32x2_t __a, float32x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai poly8x8_t vtrn1_p8(poly8x8_t __a, poly8x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 2, 10, 4, 12, 6, 14); } +__ai poly16x4_t vtrn1_p16(poly16x4_t __a, poly16x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 2, 6); } +__ai int8x16_t vtrn1q_s8(int8x16_t __a, int8x16_t __b) { + return __builtin_shufflevector(__a, __b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30); } +__ai int16x8_t vtrn1q_s16(int16x8_t __a, int16x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 2, 10, 4, 12, 6, 14); } +__ai int32x4_t vtrn1q_s32(int32x4_t __a, int32x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 2, 6); } +__ai int64x2_t vtrn1q_s64(int64x2_t __a, int64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai uint8x16_t vtrn1q_u8(uint8x16_t __a, uint8x16_t __b) { + return __builtin_shufflevector(__a, __b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30); } +__ai uint16x8_t vtrn1q_u16(uint16x8_t __a, uint16x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 2, 10, 4, 12, 6, 14); } +__ai uint32x4_t vtrn1q_u32(uint32x4_t __a, uint32x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 2, 6); } +__ai uint64x2_t vtrn1q_u64(uint64x2_t __a, uint64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai float32x4_t vtrn1q_f32(float32x4_t __a, float32x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 2, 6); } +__ai float64x2_t vtrn1q_f64(float64x2_t __a, float64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai poly8x16_t vtrn1q_p8(poly8x16_t __a, poly8x16_t __b) { + return __builtin_shufflevector(__a, __b, 0, 16, 2, 18, 4, 20, 6, 22, 8, 24, 10, 26, 12, 28, 14, 30); } +__ai poly16x8_t vtrn1q_p16(poly16x8_t __a, poly16x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 2, 10, 4, 12, 6, 14); } +__ai poly64x2_t vtrn1q_p64(poly64x2_t __a, poly64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } + +__ai int8x8_t vtrn2_s8(int8x8_t __a, int8x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 9, 3, 11, 5, 13, 7, 15); } +__ai int16x4_t vtrn2_s16(int16x4_t __a, int16x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 5, 3, 7); } +__ai int32x2_t vtrn2_s32(int32x2_t __a, int32x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai uint8x8_t vtrn2_u8(uint8x8_t __a, uint8x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 9, 3, 11, 5, 13, 7, 15); } +__ai uint16x4_t vtrn2_u16(uint16x4_t __a, uint16x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 5, 3, 7); } +__ai uint32x2_t vtrn2_u32(uint32x2_t __a, uint32x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai float32x2_t vtrn2_f32(float32x2_t __a, float32x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai poly8x8_t vtrn2_p8(poly8x8_t __a, poly8x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 9, 3, 11, 5, 13, 7, 15); } +__ai poly16x4_t vtrn2_p16(poly16x4_t __a, poly16x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 5, 3, 7); } +__ai int8x16_t vtrn2q_s8(int8x16_t __a, int8x16_t __b) { + return __builtin_shufflevector(__a, __b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31); } +__ai int16x8_t vtrn2q_s16(int16x8_t __a, int16x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 9, 3, 11, 5, 13, 7, 15); } +__ai int32x4_t vtrn2q_s32(int32x4_t __a, int32x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 5, 3, 7); } +__ai int64x2_t vtrn2q_s64(int64x2_t __a, int64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai uint8x16_t vtrn2q_u8(uint8x16_t __a, uint8x16_t __b) { + return __builtin_shufflevector(__a, __b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31); } +__ai uint16x8_t vtrn2q_u16(uint16x8_t __a, uint16x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 9, 3, 11, 5, 13, 7, 15); } +__ai uint32x4_t vtrn2q_u32(uint32x4_t __a, uint32x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 5, 3, 7); } +__ai uint64x2_t vtrn2q_u64(uint64x2_t __a, uint64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai float32x4_t vtrn2q_f32(float32x4_t __a, float32x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 5, 3, 7); } +__ai float64x2_t vtrn2q_f64(float64x2_t __a, float64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai poly8x16_t vtrn2q_p8(poly8x16_t __a, poly8x16_t __b) { + return __builtin_shufflevector(__a, __b, 1, 17, 3, 19, 5, 21, 7, 23, 9, 25, 11, 27, 13, 29, 15, 31); } +__ai poly16x8_t vtrn2q_p16(poly16x8_t __a, poly16x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 9, 3, 11, 5, 13, 7, 15); } +__ai poly64x2_t vtrn2q_p64(poly64x2_t __a, poly64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } + +__ai int8x8_t vuzp1_s8(int8x8_t __a, int8x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6, 8, 10, 12, 14); } +__ai int16x4_t vuzp1_s16(int16x4_t __a, int16x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6); } +__ai int32x2_t vuzp1_s32(int32x2_t __a, int32x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai uint8x8_t vuzp1_u8(uint8x8_t __a, uint8x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6, 8, 10, 12, 14); } +__ai uint16x4_t vuzp1_u16(uint16x4_t __a, uint16x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6); } +__ai uint32x2_t vuzp1_u32(uint32x2_t __a, uint32x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai float32x2_t vuzp1_f32(float32x2_t __a, float32x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai poly8x8_t vuzp1_p8(poly8x8_t __a, poly8x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6, 8, 10, 12, 14); } +__ai poly16x4_t vuzp1_p16(poly16x4_t __a, poly16x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6); } +__ai int8x16_t vuzp1q_s8(int8x16_t __a, int8x16_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30); } +__ai int16x8_t vuzp1q_s16(int16x8_t __a, int16x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6, 8, 10, 12, 14); } +__ai int32x4_t vuzp1q_s32(int32x4_t __a, int32x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6); } +__ai int64x2_t vuzp1q_s64(int64x2_t __a, int64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai uint8x16_t vuzp1q_u8(uint8x16_t __a, uint8x16_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30); } +__ai uint16x8_t vuzp1q_u16(uint16x8_t __a, uint16x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6, 8, 10, 12, 14); } +__ai uint32x4_t vuzp1q_u32(uint32x4_t __a, uint32x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6); } +__ai uint64x2_t vuzp1q_u64(uint64x2_t __a, uint64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai float32x4_t vuzp1q_f32(float32x4_t __a, float32x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6); } +__ai float64x2_t vuzp1q_f64(float64x2_t __a, float64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai poly8x16_t vuzp1q_p8(poly8x16_t __a, poly8x16_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30); } +__ai poly16x8_t vuzp1q_p16(poly16x8_t __a, poly16x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2, 4, 6, 8, 10, 12, 14); } +__ai poly64x2_t vuzp1q_p64(poly64x2_t __a, poly64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } + +__ai int8x8_t vuzp2_s8(int8x8_t __a, int8x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7, 9, 11, 13, 15); } +__ai int16x4_t vuzp2_s16(int16x4_t __a, int16x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7); } +__ai int32x2_t vuzp2_s32(int32x2_t __a, int32x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai uint8x8_t vuzp2_u8(uint8x8_t __a, uint8x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7, 9, 11, 13, 15); } +__ai uint16x4_t vuzp2_u16(uint16x4_t __a, uint16x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7); } +__ai uint32x2_t vuzp2_u32(uint32x2_t __a, uint32x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai float32x2_t vuzp2_f32(float32x2_t __a, float32x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai poly8x8_t vuzp2_p8(poly8x8_t __a, poly8x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7, 9, 11, 13, 15); } +__ai poly16x4_t vuzp2_p16(poly16x4_t __a, poly16x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7); } +__ai int8x16_t vuzp2q_s8(int8x16_t __a, int8x16_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31); } +__ai int16x8_t vuzp2q_s16(int16x8_t __a, int16x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7, 9, 11, 13, 15); } +__ai int32x4_t vuzp2q_s32(int32x4_t __a, int32x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7); } +__ai int64x2_t vuzp2q_s64(int64x2_t __a, int64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai uint8x16_t vuzp2q_u8(uint8x16_t __a, uint8x16_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31); } +__ai uint16x8_t vuzp2q_u16(uint16x8_t __a, uint16x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7, 9, 11, 13, 15); } +__ai uint32x4_t vuzp2q_u32(uint32x4_t __a, uint32x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7); } +__ai uint64x2_t vuzp2q_u64(uint64x2_t __a, uint64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai float32x4_t vuzp2q_f32(float32x4_t __a, float32x4_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7); } +__ai float64x2_t vuzp2q_f64(float64x2_t __a, float64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai poly8x16_t vuzp2q_p8(poly8x16_t __a, poly8x16_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31); } +__ai poly16x8_t vuzp2q_p16(poly16x8_t __a, poly16x8_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3, 5, 7, 9, 11, 13, 15); } +__ai poly64x2_t vuzp2q_p64(poly64x2_t __a, poly64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } + +__ai int8x8_t vzip1_s8(int8x8_t __a, int8x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 1, 9, 2, 10, 3, 11); } +__ai int16x4_t vzip1_s16(int16x4_t __a, int16x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 1, 5); } +__ai int32x2_t vzip1_s32(int32x2_t __a, int32x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai uint8x8_t vzip1_u8(uint8x8_t __a, uint8x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 1, 9, 2, 10, 3, 11); } +__ai uint16x4_t vzip1_u16(uint16x4_t __a, uint16x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 1, 5); } +__ai uint32x2_t vzip1_u32(uint32x2_t __a, uint32x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai float32x2_t vzip1_f32(float32x2_t __a, float32x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai poly8x8_t vzip1_p8(poly8x8_t __a, poly8x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 1, 9, 2, 10, 3, 11); } +__ai poly16x4_t vzip1_p16(poly16x4_t __a, poly16x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 1, 5); } +__ai int8x16_t vzip1q_s8(int8x16_t __a, int8x16_t __b) { + return __builtin_shufflevector(__a, __b, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23); } +__ai int16x8_t vzip1q_s16(int16x8_t __a, int16x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 1, 9, 2, 10, 3, 11); } +__ai int32x4_t vzip1q_s32(int32x4_t __a, int32x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 1, 5); } +__ai int64x2_t vzip1q_s64(int64x2_t __a, int64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai uint8x16_t vzip1q_u8(uint8x16_t __a, uint8x16_t __b) { + return __builtin_shufflevector(__a, __b, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23); } +__ai uint16x8_t vzip1q_u16(uint16x8_t __a, uint16x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 1, 9, 2, 10, 3, 11); } +__ai uint32x4_t vzip1q_u32(uint32x4_t __a, uint32x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 1, 5); } +__ai uint64x2_t vzip1q_u64(uint64x2_t __a, uint64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai float32x4_t vzip1q_f32(float32x4_t __a, float32x4_t __b) { + return __builtin_shufflevector(__a, __b, 0, 4, 1, 5); } +__ai float64x2_t vzip1q_f64(float64x2_t __a, float64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } +__ai poly8x16_t vzip1q_p8(poly8x16_t __a, poly8x16_t __b) { + return __builtin_shufflevector(__a, __b, 0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23); } +__ai poly16x8_t vzip1q_p16(poly16x8_t __a, poly16x8_t __b) { + return __builtin_shufflevector(__a, __b, 0, 8, 1, 9, 2, 10, 3, 11); } +__ai poly64x2_t vzip1q_p64(poly64x2_t __a, poly64x2_t __b) { + return __builtin_shufflevector(__a, __b, 0, 2); } + +__ai int8x8_t vzip2_s8(int8x8_t __a, int8x8_t __b) { + return __builtin_shufflevector(__a, __b, 4, 12, 5, 13, 6, 14, 7, 15); } +__ai int16x4_t vzip2_s16(int16x4_t __a, int16x4_t __b) { + return __builtin_shufflevector(__a, __b, 2, 6, 3, 7); } +__ai int32x2_t vzip2_s32(int32x2_t __a, int32x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai uint8x8_t vzip2_u8(uint8x8_t __a, uint8x8_t __b) { + return __builtin_shufflevector(__a, __b, 4, 12, 5, 13, 6, 14, 7, 15); } +__ai uint16x4_t vzip2_u16(uint16x4_t __a, uint16x4_t __b) { + return __builtin_shufflevector(__a, __b, 2, 6, 3, 7); } +__ai uint32x2_t vzip2_u32(uint32x2_t __a, uint32x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai float32x2_t vzip2_f32(float32x2_t __a, float32x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai poly8x8_t vzip2_p8(poly8x8_t __a, poly8x8_t __b) { + return __builtin_shufflevector(__a, __b, 4, 12, 5, 13, 6, 14, 7, 15); } +__ai poly16x4_t vzip2_p16(poly16x4_t __a, poly16x4_t __b) { + return __builtin_shufflevector(__a, __b, 2, 6, 3, 7); } +__ai int8x16_t vzip2q_s8(int8x16_t __a, int8x16_t __b) { + return __builtin_shufflevector(__a, __b, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31); } +__ai int16x8_t vzip2q_s16(int16x8_t __a, int16x8_t __b) { + return __builtin_shufflevector(__a, __b, 4, 12, 5, 13, 6, 14, 7, 15); } +__ai int32x4_t vzip2q_s32(int32x4_t __a, int32x4_t __b) { + return __builtin_shufflevector(__a, __b, 2, 6, 3, 7); } +__ai int64x2_t vzip2q_s64(int64x2_t __a, int64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai uint8x16_t vzip2q_u8(uint8x16_t __a, uint8x16_t __b) { + return __builtin_shufflevector(__a, __b, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31); } +__ai uint16x8_t vzip2q_u16(uint16x8_t __a, uint16x8_t __b) { + return __builtin_shufflevector(__a, __b, 4, 12, 5, 13, 6, 14, 7, 15); } +__ai uint32x4_t vzip2q_u32(uint32x4_t __a, uint32x4_t __b) { + return __builtin_shufflevector(__a, __b, 2, 6, 3, 7); } +__ai uint64x2_t vzip2q_u64(uint64x2_t __a, uint64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai float32x4_t vzip2q_f32(float32x4_t __a, float32x4_t __b) { + return __builtin_shufflevector(__a, __b, 2, 6, 3, 7); } +__ai float64x2_t vzip2q_f64(float64x2_t __a, float64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } +__ai poly8x16_t vzip2q_p8(poly8x16_t __a, poly8x16_t __b) { + return __builtin_shufflevector(__a, __b, 8, 24, 9, 25, 10, 26, 11, 27, 12, 28, 13, 29, 14, 30, 15, 31); } +__ai poly16x8_t vzip2q_p16(poly16x8_t __a, poly16x8_t __b) { + return __builtin_shufflevector(__a, __b, 4, 12, 5, 13, 6, 14, 7, 15); } +__ai poly64x2_t vzip2q_p64(poly64x2_t __a, poly64x2_t __b) { + return __builtin_shufflevector(__a, __b, 1, 3); } + +__ai int8x16_t vmovn_high_s16(int8x8_t __a, int16x8_t __b) { + int8x8_t __a1 = vmovn_s16(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); } +__ai int16x8_t vmovn_high_s32(int16x4_t __a, int32x4_t __b) { + int16x4_t __a1 = vmovn_s32(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3, 4, 5, 6, 7); } +__ai int32x4_t vmovn_high_s64(int32x2_t __a, int64x2_t __b) { + int32x2_t __a1 = vmovn_s64(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3); } +__ai uint8x16_t vmovn_high_u16(uint8x8_t __a, uint16x8_t __b) { + uint8x8_t __a1 = vmovn_u16(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); } +__ai uint16x8_t vmovn_high_u32(uint16x4_t __a, uint32x4_t __b) { + uint16x4_t __a1 = vmovn_u32(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3, 4, 5, 6, 7); } +__ai uint32x4_t vmovn_high_u64(uint32x2_t __a, uint64x2_t __b) { + uint32x2_t __a1 = vmovn_u64(__b); + return __builtin_shufflevector(__a, __a1, 0, 1, 2, 3); } + +#ifdef __ARM_FEATURE_CRYPTO +__ai uint8x16_t vaesdq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vaesdq_v((int8x16_t)__a, (int8x16_t)__b, 48); } + +__ai uint8x16_t vaeseq_u8(uint8x16_t __a, uint8x16_t __b) { + return (uint8x16_t)__builtin_neon_vaeseq_v((int8x16_t)__a, (int8x16_t)__b, 48); } + +__ai uint8x16_t vaesimcq_u8(uint8x16_t __a) { + return (uint8x16_t)__builtin_neon_vaesimcq_v((int8x16_t)__a, 48); } + +__ai uint8x16_t vaesmcq_u8(uint8x16_t __a) { + return (uint8x16_t)__builtin_neon_vaesmcq_v((int8x16_t)__a, 48); } + +__ai uint32x4_t vsha1cq_u32(uint32x4_t __a, uint32_t __b, uint32x4_t __c) { + return (uint32x4_t)__builtin_neon_vsha1cq_u32((int32x4_t)__a, __b, (int32x4_t)__c); } + +__ai uint32_t vsha1h_u32(uint32_t __a) { + return (uint32_t)__builtin_neon_vsha1h_u32(__a); } + +__ai uint32x4_t vsha1mq_u32(uint32x4_t __a, uint32_t __b, uint32x4_t __c) { + return (uint32x4_t)__builtin_neon_vsha1mq_u32((int32x4_t)__a, __b, (int32x4_t)__c); } + +__ai uint32x4_t vsha1pq_u32(uint32x4_t __a, uint32_t __b, uint32x4_t __c) { + return (uint32x4_t)__builtin_neon_vsha1pq_u32((int32x4_t)__a, __b, (int32x4_t)__c); } + +__ai uint32x4_t vsha1su0q_u32(uint32x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return (uint32x4_t)__builtin_neon_vsha1su0q_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 50); } + +__ai uint32x4_t vsha1su1q_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vsha1su1q_v((int8x16_t)__a, (int8x16_t)__b, 50); } + +__ai uint32x4_t vsha256hq_u32(uint32x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return (uint32x4_t)__builtin_neon_vsha256hq_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 50); } + +__ai uint32x4_t vsha256h2q_u32(uint32x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return (uint32x4_t)__builtin_neon_vsha256h2q_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 50); } + +__ai uint32x4_t vsha256su0q_u32(uint32x4_t __a, uint32x4_t __b) { + return (uint32x4_t)__builtin_neon_vsha256su0q_v((int8x16_t)__a, (int8x16_t)__b, 50); } + +__ai uint32x4_t vsha256su1q_u32(uint32x4_t __a, uint32x4_t __b, uint32x4_t __c) { + return (uint32x4_t)__builtin_neon_vsha256su1q_v((int8x16_t)__a, (int8x16_t)__b, (int8x16_t)__c, 50); } + +#endif + +#endif + +#undef __ai + +#endif /* __ARM_NEON_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/avx2intrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/avx2intrin.h new file mode 100755 index 0000000..9574469 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/avx2intrin.h @@ -0,0 +1,1206 @@ +/*===---- avx2intrin.h - AVX2 intrinsics -----------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __IMMINTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __AVX2INTRIN_H +#define __AVX2INTRIN_H + +/* SSE4 Multiple Packed Sums of Absolute Difference. */ +#define _mm256_mpsadbw_epu8(X, Y, M) __builtin_ia32_mpsadbw256((X), (Y), (M)) + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_abs_epi8(__m256i __a) +{ + return (__m256i)__builtin_ia32_pabsb256((__v32qi)__a); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_abs_epi16(__m256i __a) +{ + return (__m256i)__builtin_ia32_pabsw256((__v16hi)__a); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_abs_epi32(__m256i __a) +{ + return (__m256i)__builtin_ia32_pabsd256((__v8si)__a); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_packs_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_packsswb256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_packs_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_packssdw256((__v8si)__a, (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_packus_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_packuswb256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_packus_epi32(__m256i __V1, __m256i __V2) +{ + return (__m256i) __builtin_ia32_packusdw256((__v8si)__V1, (__v8si)__V2); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_add_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)((__v32qi)__a + (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_add_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)((__v16hi)__a + (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_add_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)((__v8si)__a + (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_add_epi64(__m256i __a, __m256i __b) +{ + return __a + __b; +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_adds_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_paddsb256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_adds_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_paddsw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_adds_epu8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_paddusb256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_adds_epu16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_paddusw256((__v16hi)__a, (__v16hi)__b); +} + +#define _mm256_alignr_epi8(a, b, n) __extension__ ({ \ + __m256i __a = (a); \ + __m256i __b = (b); \ + (__m256i)__builtin_ia32_palignr256((__v32qi)__a, (__v32qi)__b, (n)); }) + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_and_si256(__m256i __a, __m256i __b) +{ + return __a & __b; +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_andnot_si256(__m256i __a, __m256i __b) +{ + return ~__a & __b; +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_avg_epu8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pavgb256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_avg_epu16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pavgw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_blendv_epi8(__m256i __V1, __m256i __V2, __m256i __M) +{ + return (__m256i)__builtin_ia32_pblendvb256((__v32qi)__V1, (__v32qi)__V2, + (__v32qi)__M); +} + +#define _mm256_blend_epi16(V1, V2, M) __extension__ ({ \ + __m256i __V1 = (V1); \ + __m256i __V2 = (V2); \ + (__m256i)__builtin_ia32_pblendw256((__v16hi)__V1, (__v16hi)__V2, (M)); }) + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cmpeq_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)((__v32qi)__a == (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cmpeq_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)((__v16hi)__a == (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cmpeq_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)((__v8si)__a == (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cmpeq_epi64(__m256i __a, __m256i __b) +{ + return (__m256i)(__a == __b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cmpgt_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)((__v32qi)__a > (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cmpgt_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)((__v16hi)__a > (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cmpgt_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)((__v8si)__a > (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cmpgt_epi64(__m256i __a, __m256i __b) +{ + return (__m256i)(__a > __b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_hadd_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_phaddw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_hadd_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_phaddd256((__v8si)__a, (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_hadds_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_phaddsw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_hsub_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_phsubw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_hsub_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_phsubd256((__v8si)__a, (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_hsubs_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_phsubsw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maddubs_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmaddubsw256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_madd_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmaddwd256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_max_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmaxsb256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_max_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmaxsw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_max_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmaxsd256((__v8si)__a, (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_max_epu8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmaxub256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_max_epu16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmaxuw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_max_epu32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmaxud256((__v8si)__a, (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_min_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pminsb256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_min_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pminsw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_min_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pminsd256((__v8si)__a, (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_min_epu8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pminub256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_min_epu16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pminuw256 ((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_min_epu32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pminud256((__v8si)__a, (__v8si)__b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm256_movemask_epi8(__m256i __a) +{ + return __builtin_ia32_pmovmskb256((__v32qi)__a); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepi8_epi16(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovsxbw256((__v16qi)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepi8_epi32(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovsxbd256((__v16qi)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepi8_epi64(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovsxbq256((__v16qi)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepi16_epi32(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovsxwd256((__v8hi)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepi16_epi64(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovsxwq256((__v8hi)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepi32_epi64(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovsxdq256((__v4si)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepu8_epi16(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovzxbw256((__v16qi)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepu8_epi32(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovzxbd256((__v16qi)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepu8_epi64(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovzxbq256((__v16qi)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepu16_epi32(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovzxwd256((__v8hi)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepu16_epi64(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovzxwq256((__v8hi)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepu32_epi64(__m128i __V) +{ + return (__m256i)__builtin_ia32_pmovzxdq256((__v4si)__V); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mul_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmuldq256((__v8si)__a, (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mulhrs_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmulhrsw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mulhi_epu16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmulhuw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mulhi_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pmulhw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mullo_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)((__v16hi)__a * (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mullo_epi32 (__m256i __a, __m256i __b) +{ + return (__m256i)((__v8si)__a * (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_mul_epu32(__m256i __a, __m256i __b) +{ + return __builtin_ia32_pmuludq256((__v8si)__a, (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_or_si256(__m256i __a, __m256i __b) +{ + return __a | __b; +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sad_epu8(__m256i __a, __m256i __b) +{ + return __builtin_ia32_psadbw256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_shuffle_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_pshufb256((__v32qi)__a, (__v32qi)__b); +} + +#define _mm256_shuffle_epi32(a, imm) __extension__ ({ \ + __m256i __a = (a); \ + (__m256i)__builtin_shufflevector((__v8si)__a, (__v8si)_mm256_set1_epi32(0), \ + (imm) & 0x3, ((imm) & 0xc) >> 2, \ + ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \ + 4 + (((imm) & 0x03) >> 0), \ + 4 + (((imm) & 0x0c) >> 2), \ + 4 + (((imm) & 0x30) >> 4), \ + 4 + (((imm) & 0xc0) >> 6)); }) + +#define _mm256_shufflehi_epi16(a, imm) __extension__ ({ \ + __m256i __a = (a); \ + (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)_mm256_set1_epi16(0), \ + 0, 1, 2, 3, \ + 4 + (((imm) & 0x03) >> 0), \ + 4 + (((imm) & 0x0c) >> 2), \ + 4 + (((imm) & 0x30) >> 4), \ + 4 + (((imm) & 0xc0) >> 6), \ + 8, 9, 10, 11, \ + 12 + (((imm) & 0x03) >> 0), \ + 12 + (((imm) & 0x0c) >> 2), \ + 12 + (((imm) & 0x30) >> 4), \ + 12 + (((imm) & 0xc0) >> 6)); }) + +#define _mm256_shufflelo_epi16(a, imm) __extension__ ({ \ + __m256i __a = (a); \ + (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)_mm256_set1_epi16(0), \ + (imm) & 0x3,((imm) & 0xc) >> 2, \ + ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \ + 4, 5, 6, 7, \ + 8 + (((imm) & 0x03) >> 0), \ + 8 + (((imm) & 0x0c) >> 2), \ + 8 + (((imm) & 0x30) >> 4), \ + 8 + (((imm) & 0xc0) >> 6), \ + 12, 13, 14, 15); }) + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sign_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_psignb256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sign_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_psignw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sign_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_psignd256((__v8si)__a, (__v8si)__b); +} + +#define _mm256_slli_si256(a, count) __extension__ ({ \ + __m256i __a = (a); \ + (__m256i)__builtin_ia32_pslldqi256(__a, (count)*8); }) + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_slli_epi16(__m256i __a, int __count) +{ + return (__m256i)__builtin_ia32_psllwi256((__v16hi)__a, __count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sll_epi16(__m256i __a, __m128i __count) +{ + return (__m256i)__builtin_ia32_psllw256((__v16hi)__a, (__v8hi)__count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_slli_epi32(__m256i __a, int __count) +{ + return (__m256i)__builtin_ia32_pslldi256((__v8si)__a, __count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sll_epi32(__m256i __a, __m128i __count) +{ + return (__m256i)__builtin_ia32_pslld256((__v8si)__a, (__v4si)__count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_slli_epi64(__m256i __a, int __count) +{ + return __builtin_ia32_psllqi256(__a, __count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sll_epi64(__m256i __a, __m128i __count) +{ + return __builtin_ia32_psllq256(__a, __count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_srai_epi16(__m256i __a, int __count) +{ + return (__m256i)__builtin_ia32_psrawi256((__v16hi)__a, __count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sra_epi16(__m256i __a, __m128i __count) +{ + return (__m256i)__builtin_ia32_psraw256((__v16hi)__a, (__v8hi)__count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_srai_epi32(__m256i __a, int __count) +{ + return (__m256i)__builtin_ia32_psradi256((__v8si)__a, __count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sra_epi32(__m256i __a, __m128i __count) +{ + return (__m256i)__builtin_ia32_psrad256((__v8si)__a, (__v4si)__count); +} + +#define _mm256_srli_si256(a, count) __extension__ ({ \ + __m256i __a = (a); \ + (__m256i)__builtin_ia32_psrldqi256(__a, (count)*8); }) + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_srli_epi16(__m256i __a, int __count) +{ + return (__m256i)__builtin_ia32_psrlwi256((__v16hi)__a, __count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_srl_epi16(__m256i __a, __m128i __count) +{ + return (__m256i)__builtin_ia32_psrlw256((__v16hi)__a, (__v8hi)__count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_srli_epi32(__m256i __a, int __count) +{ + return (__m256i)__builtin_ia32_psrldi256((__v8si)__a, __count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_srl_epi32(__m256i __a, __m128i __count) +{ + return (__m256i)__builtin_ia32_psrld256((__v8si)__a, (__v4si)__count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_srli_epi64(__m256i __a, int __count) +{ + return __builtin_ia32_psrlqi256(__a, __count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_srl_epi64(__m256i __a, __m128i __count) +{ + return __builtin_ia32_psrlq256(__a, __count); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sub_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)((__v32qi)__a - (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sub_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)((__v16hi)__a - (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sub_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)((__v8si)__a - (__v8si)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sub_epi64(__m256i __a, __m256i __b) +{ + return __a - __b; +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_subs_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_psubsb256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_subs_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_psubsw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_subs_epu8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_psubusb256((__v32qi)__a, (__v32qi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_subs_epu16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_psubusw256((__v16hi)__a, (__v16hi)__b); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_unpackhi_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_shufflevector((__v32qi)__a, (__v32qi)__b, 8, 32+8, 9, 32+9, 10, 32+10, 11, 32+11, 12, 32+12, 13, 32+13, 14, 32+14, 15, 32+15, 24, 32+24, 25, 32+25, 26, 32+26, 27, 32+27, 28, 32+28, 29, 32+29, 30, 32+30, 31, 32+31); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_unpackhi_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)__b, 4, 16+4, 5, 16+5, 6, 16+6, 7, 16+7, 12, 16+12, 13, 16+13, 14, 16+14, 15, 16+15); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_unpackhi_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_shufflevector((__v8si)__a, (__v8si)__b, 2, 8+2, 3, 8+3, 6, 8+6, 7, 8+7); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_unpackhi_epi64(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_shufflevector(__a, __b, 1, 4+1, 3, 4+3); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_unpacklo_epi8(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_shufflevector((__v32qi)__a, (__v32qi)__b, 0, 32+0, 1, 32+1, 2, 32+2, 3, 32+3, 4, 32+4, 5, 32+5, 6, 32+6, 7, 32+7, 16, 32+16, 17, 32+17, 18, 32+18, 19, 32+19, 20, 32+20, 21, 32+21, 22, 32+22, 23, 32+23); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_unpacklo_epi16(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_shufflevector((__v16hi)__a, (__v16hi)__b, 0, 16+0, 1, 16+1, 2, 16+2, 3, 16+3, 8, 16+8, 9, 16+9, 10, 16+10, 11, 16+11); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_unpacklo_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_shufflevector((__v8si)__a, (__v8si)__b, 0, 8+0, 1, 8+1, 4, 8+4, 5, 8+5); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_unpacklo_epi64(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_shufflevector(__a, __b, 0, 4+0, 2, 4+2); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_xor_si256(__m256i __a, __m256i __b) +{ + return __a ^ __b; +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_stream_load_si256(__m256i *__V) +{ + return (__m256i)__builtin_ia32_movntdqa256((__v4di *)__V); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_broadcastss_ps(__m128 __X) +{ + return (__m128)__builtin_ia32_vbroadcastss_ps((__v4sf)__X); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_broadcastss_ps(__m128 __X) +{ + return (__m256)__builtin_ia32_vbroadcastss_ps256((__v4sf)__X); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_broadcastsd_pd(__m128d __X) +{ + return (__m256d)__builtin_ia32_vbroadcastsd_pd256((__v2df)__X); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_broadcastsi128_si256(__m128i __X) +{ + return (__m256i)__builtin_ia32_vbroadcastsi256(__X); +} + +#define _mm_blend_epi32(V1, V2, M) __extension__ ({ \ + __m128i __V1 = (V1); \ + __m128i __V2 = (V2); \ + (__m128i)__builtin_ia32_pblendd128((__v4si)__V1, (__v4si)__V2, (M)); }) + +#define _mm256_blend_epi32(V1, V2, M) __extension__ ({ \ + __m256i __V1 = (V1); \ + __m256i __V2 = (V2); \ + (__m256i)__builtin_ia32_pblendd256((__v8si)__V1, (__v8si)__V2, (M)); }) + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_broadcastb_epi8(__m128i __X) +{ + return (__m256i)__builtin_ia32_pbroadcastb256((__v16qi)__X); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_broadcastw_epi16(__m128i __X) +{ + return (__m256i)__builtin_ia32_pbroadcastw256((__v8hi)__X); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_broadcastd_epi32(__m128i __X) +{ + return (__m256i)__builtin_ia32_pbroadcastd256((__v4si)__X); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_broadcastq_epi64(__m128i __X) +{ + return (__m256i)__builtin_ia32_pbroadcastq256(__X); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_broadcastb_epi8(__m128i __X) +{ + return (__m128i)__builtin_ia32_pbroadcastb128((__v16qi)__X); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_broadcastw_epi16(__m128i __X) +{ + return (__m128i)__builtin_ia32_pbroadcastw128((__v8hi)__X); +} + + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_broadcastd_epi32(__m128i __X) +{ + return (__m128i)__builtin_ia32_pbroadcastd128((__v4si)__X); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_broadcastq_epi64(__m128i __X) +{ + return (__m128i)__builtin_ia32_pbroadcastq128(__X); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_permutevar8x32_epi32(__m256i __a, __m256i __b) +{ + return (__m256i)__builtin_ia32_permvarsi256((__v8si)__a, (__v8si)__b); +} + +#define _mm256_permute4x64_pd(V, M) __extension__ ({ \ + __m256d __V = (V); \ + (__m256d)__builtin_shufflevector((__v4df)__V, (__v4df) _mm256_setzero_pd(), \ + (M) & 0x3, ((M) & 0xc) >> 2, \ + ((M) & 0x30) >> 4, ((M) & 0xc0) >> 6); }) + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_permutevar8x32_ps(__m256 __a, __m256 __b) +{ + return (__m256)__builtin_ia32_permvarsf256((__v8sf)__a, (__v8sf)__b); +} + +#define _mm256_permute4x64_epi64(V, M) __extension__ ({ \ + __m256i __V = (V); \ + (__m256i)__builtin_shufflevector((__v4di)__V, (__v4di) _mm256_setzero_si256(), \ + (M) & 0x3, ((M) & 0xc) >> 2, \ + ((M) & 0x30) >> 4, ((M) & 0xc0) >> 6); }) + +#define _mm256_permute2x128_si256(V1, V2, M) __extension__ ({ \ + __m256i __V1 = (V1); \ + __m256i __V2 = (V2); \ + (__m256i)__builtin_ia32_permti256(__V1, __V2, (M)); }) + +#define _mm256_extracti128_si256(A, O) __extension__ ({ \ + __m256i __A = (A); \ + (__m128i)__builtin_ia32_extract128i256(__A, (O)); }) + +#define _mm256_inserti128_si256(V1, V2, O) __extension__ ({ \ + __m256i __V1 = (V1); \ + __m128i __V2 = (V2); \ + (__m256i)__builtin_ia32_insert128i256(__V1, __V2, (O)); }) + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskload_epi32(int const *__X, __m256i __M) +{ + return (__m256i)__builtin_ia32_maskloadd256((const __v8si *)__X, (__v8si)__M); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_maskload_epi64(long long const *__X, __m256i __M) +{ + return (__m256i)__builtin_ia32_maskloadq256((const __v4di *)__X, __M); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskload_epi32(int const *__X, __m128i __M) +{ + return (__m128i)__builtin_ia32_maskloadd((const __v4si *)__X, (__v4si)__M); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maskload_epi64(long long const *__X, __m128i __M) +{ + return (__m128i)__builtin_ia32_maskloadq((const __v2di *)__X, (__v2di)__M); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm256_maskstore_epi32(int *__X, __m256i __M, __m256i __Y) +{ + __builtin_ia32_maskstored256((__v8si *)__X, (__v8si)__M, (__v8si)__Y); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm256_maskstore_epi64(long long *__X, __m256i __M, __m256i __Y) +{ + __builtin_ia32_maskstoreq256((__v4di *)__X, __M, __Y); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_maskstore_epi32(int *__X, __m128i __M, __m128i __Y) +{ + __builtin_ia32_maskstored((__v4si *)__X, (__v4si)__M, (__v4si)__Y); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_maskstore_epi64(long long *__X, __m128i __M, __m128i __Y) +{ + __builtin_ia32_maskstoreq(( __v2di *)__X, __M, __Y); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sllv_epi32(__m256i __X, __m256i __Y) +{ + return (__m256i)__builtin_ia32_psllv8si((__v8si)__X, (__v8si)__Y); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sllv_epi32(__m128i __X, __m128i __Y) +{ + return (__m128i)__builtin_ia32_psllv4si((__v4si)__X, (__v4si)__Y); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_sllv_epi64(__m256i __X, __m256i __Y) +{ + return (__m256i)__builtin_ia32_psllv4di(__X, __Y); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sllv_epi64(__m128i __X, __m128i __Y) +{ + return (__m128i)__builtin_ia32_psllv2di(__X, __Y); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_srav_epi32(__m256i __X, __m256i __Y) +{ + return (__m256i)__builtin_ia32_psrav8si((__v8si)__X, (__v8si)__Y); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_srav_epi32(__m128i __X, __m128i __Y) +{ + return (__m128i)__builtin_ia32_psrav4si((__v4si)__X, (__v4si)__Y); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_srlv_epi32(__m256i __X, __m256i __Y) +{ + return (__m256i)__builtin_ia32_psrlv8si((__v8si)__X, (__v8si)__Y); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_srlv_epi32(__m128i __X, __m128i __Y) +{ + return (__m128i)__builtin_ia32_psrlv4si((__v4si)__X, (__v4si)__Y); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_srlv_epi64(__m256i __X, __m256i __Y) +{ + return (__m256i)__builtin_ia32_psrlv4di(__X, __Y); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_srlv_epi64(__m128i __X, __m128i __Y) +{ + return (__m128i)__builtin_ia32_psrlv2di(__X, __Y); +} + +#define _mm_mask_i32gather_pd(a, m, i, mask, s) __extension__ ({ \ + __m128d __a = (a); \ + double const *__m = (m); \ + __m128i __i = (i); \ + __m128d __mask = (mask); \ + (__m128d)__builtin_ia32_gatherd_pd((__v2df)__a, (const __v2df *)__m, \ + (__v4si)__i, (__v2df)__mask, (s)); }) + +#define _mm256_mask_i32gather_pd(a, m, i, mask, s) __extension__ ({ \ + __m256d __a = (a); \ + double const *__m = (m); \ + __m128i __i = (i); \ + __m256d __mask = (mask); \ + (__m256d)__builtin_ia32_gatherd_pd256((__v4df)__a, (const __v4df *)__m, \ + (__v4si)__i, (__v4df)__mask, (s)); }) + +#define _mm_mask_i64gather_pd(a, m, i, mask, s) __extension__ ({ \ + __m128d __a = (a); \ + double const *__m = (m); \ + __m128i __i = (i); \ + __m128d __mask = (mask); \ + (__m128d)__builtin_ia32_gatherq_pd((__v2df)__a, (const __v2df *)__m, \ + (__v2di)__i, (__v2df)__mask, (s)); }) + +#define _mm256_mask_i64gather_pd(a, m, i, mask, s) __extension__ ({ \ + __m256d __a = (a); \ + double const *__m = (m); \ + __m256i __i = (i); \ + __m256d __mask = (mask); \ + (__m256d)__builtin_ia32_gatherq_pd256((__v4df)__a, (const __v4df *)__m, \ + (__v4di)__i, (__v4df)__mask, (s)); }) + +#define _mm_mask_i32gather_ps(a, m, i, mask, s) __extension__ ({ \ + __m128 __a = (a); \ + float const *__m = (m); \ + __m128i __i = (i); \ + __m128 __mask = (mask); \ + (__m128)__builtin_ia32_gatherd_ps((__v4sf)__a, (const __v4sf *)__m, \ + (__v4si)__i, (__v4sf)__mask, (s)); }) + +#define _mm256_mask_i32gather_ps(a, m, i, mask, s) __extension__ ({ \ + __m256 __a = (a); \ + float const *__m = (m); \ + __m256i __i = (i); \ + __m256 __mask = (mask); \ + (__m256)__builtin_ia32_gatherd_ps256((__v8sf)__a, (const __v8sf *)__m, \ + (__v8si)__i, (__v8sf)__mask, (s)); }) + +#define _mm_mask_i64gather_ps(a, m, i, mask, s) __extension__ ({ \ + __m128 __a = (a); \ + float const *__m = (m); \ + __m128i __i = (i); \ + __m128 __mask = (mask); \ + (__m128)__builtin_ia32_gatherq_ps((__v4sf)__a, (const __v4sf *)__m, \ + (__v2di)__i, (__v4sf)__mask, (s)); }) + +#define _mm256_mask_i64gather_ps(a, m, i, mask, s) __extension__ ({ \ + __m128 __a = (a); \ + float const *__m = (m); \ + __m256i __i = (i); \ + __m128 __mask = (mask); \ + (__m128)__builtin_ia32_gatherq_ps256((__v4sf)__a, (const __v4sf *)__m, \ + (__v4di)__i, (__v4sf)__mask, (s)); }) + +#define _mm_mask_i32gather_epi32(a, m, i, mask, s) __extension__ ({ \ + __m128i __a = (a); \ + int const *__m = (m); \ + __m128i __i = (i); \ + __m128i __mask = (mask); \ + (__m128i)__builtin_ia32_gatherd_d((__v4si)__a, (const __v4si *)__m, \ + (__v4si)__i, (__v4si)__mask, (s)); }) + +#define _mm256_mask_i32gather_epi32(a, m, i, mask, s) __extension__ ({ \ + __m256i __a = (a); \ + int const *__m = (m); \ + __m256i __i = (i); \ + __m256i __mask = (mask); \ + (__m256i)__builtin_ia32_gatherd_d256((__v8si)__a, (const __v8si *)__m, \ + (__v8si)__i, (__v8si)__mask, (s)); }) + +#define _mm_mask_i64gather_epi32(a, m, i, mask, s) __extension__ ({ \ + __m128i __a = (a); \ + int const *__m = (m); \ + __m128i __i = (i); \ + __m128i __mask = (mask); \ + (__m128i)__builtin_ia32_gatherq_d((__v4si)__a, (const __v4si *)__m, \ + (__v2di)__i, (__v4si)__mask, (s)); }) + +#define _mm256_mask_i64gather_epi32(a, m, i, mask, s) __extension__ ({ \ + __m128i __a = (a); \ + int const *__m = (m); \ + __m256i __i = (i); \ + __m128i __mask = (mask); \ + (__m128i)__builtin_ia32_gatherq_d256((__v4si)__a, (const __v4si *)__m, \ + (__v4di)__i, (__v4si)__mask, (s)); }) + +#define _mm_mask_i32gather_epi64(a, m, i, mask, s) __extension__ ({ \ + __m128i __a = (a); \ + long long const *__m = (m); \ + __m128i __i = (i); \ + __m128i __mask = (mask); \ + (__m128i)__builtin_ia32_gatherd_q((__v2di)__a, (const __v2di *)__m, \ + (__v4si)__i, (__v2di)__mask, (s)); }) + +#define _mm256_mask_i32gather_epi64(a, m, i, mask, s) __extension__ ({ \ + __m256i __a = (a); \ + long long const *__m = (m); \ + __m128i __i = (i); \ + __m256i __mask = (mask); \ + (__m256i)__builtin_ia32_gatherd_q256((__v4di)__a, (const __v4di *)__m, \ + (__v4si)__i, (__v4di)__mask, (s)); }) + +#define _mm_mask_i64gather_epi64(a, m, i, mask, s) __extension__ ({ \ + __m128i __a = (a); \ + long long const *__m = (m); \ + __m128i __i = (i); \ + __m128i __mask = (mask); \ + (__m128i)__builtin_ia32_gatherq_q((__v2di)__a, (const __v2di *)__m, \ + (__v2di)__i, (__v2di)__mask, (s)); }) + +#define _mm256_mask_i64gather_epi64(a, m, i, mask, s) __extension__ ({ \ + __m256i __a = (a); \ + long long const *__m = (m); \ + __m256i __i = (i); \ + __m256i __mask = (mask); \ + (__m256i)__builtin_ia32_gatherq_q256((__v4di)__a, (const __v4di *)__m, \ + (__v4di)__i, (__v4di)__mask, (s)); }) + +#define _mm_i32gather_pd(m, i, s) __extension__ ({ \ + double const *__m = (m); \ + __m128i __i = (i); \ + (__m128d)__builtin_ia32_gatherd_pd((__v2df)_mm_setzero_pd(), \ + (const __v2df *)__m, (__v4si)__i, \ + (__v2df)_mm_set1_pd((double)(long long int)-1), (s)); }) + +#define _mm256_i32gather_pd(m, i, s) __extension__ ({ \ + double const *__m = (m); \ + __m128i __i = (i); \ + (__m256d)__builtin_ia32_gatherd_pd256((__v4df)_mm256_setzero_pd(), \ + (const __v4df *)__m, (__v4si)__i, \ + (__v4df)_mm256_set1_pd((double)(long long int)-1), (s)); }) + +#define _mm_i64gather_pd(m, i, s) __extension__ ({ \ + double const *__m = (m); \ + __m128i __i = (i); \ + (__m128d)__builtin_ia32_gatherq_pd((__v2df)_mm_setzero_pd(), \ + (const __v2df *)__m, (__v2di)__i, \ + (__v2df)_mm_set1_pd((double)(long long int)-1), (s)); }) + +#define _mm256_i64gather_pd(m, i, s) __extension__ ({ \ + double const *__m = (m); \ + __m256i __i = (i); \ + (__m256d)__builtin_ia32_gatherq_pd256((__v4df)_mm256_setzero_pd(), \ + (const __v4df *)__m, (__v4di)__i, \ + (__v4df)_mm256_set1_pd((double)(long long int)-1), (s)); }) + +#define _mm_i32gather_ps(m, i, s) __extension__ ({ \ + float const *__m = (m); \ + __m128i __i = (i); \ + (__m128)__builtin_ia32_gatherd_ps((__v4sf)_mm_setzero_ps(), \ + (const __v4sf *)__m, (__v4si)__i, \ + (__v4sf)_mm_set1_ps((float)(int)-1), (s)); }) + +#define _mm256_i32gather_ps(m, i, s) __extension__ ({ \ + float const *__m = (m); \ + __m256i __i = (i); \ + (__m256)__builtin_ia32_gatherd_ps256((__v8sf)_mm256_setzero_ps(), \ + (const __v8sf *)__m, (__v8si)__i, \ + (__v8sf)_mm256_set1_ps((float)(int)-1), (s)); }) + +#define _mm_i64gather_ps(m, i, s) __extension__ ({ \ + float const *__m = (m); \ + __m128i __i = (i); \ + (__m128)__builtin_ia32_gatherq_ps((__v4sf)_mm_setzero_ps(), \ + (const __v4sf *)__m, (__v2di)__i, \ + (__v4sf)_mm_set1_ps((float)(int)-1), (s)); }) + +#define _mm256_i64gather_ps(m, i, s) __extension__ ({ \ + float const *__m = (m); \ + __m256i __i = (i); \ + (__m128)__builtin_ia32_gatherq_ps256((__v4sf)_mm_setzero_ps(), \ + (const __v4sf *)__m, (__v4di)__i, \ + (__v4sf)_mm_set1_ps((float)(int)-1), (s)); }) + +#define _mm_i32gather_epi32(m, i, s) __extension__ ({ \ + int const *__m = (m); \ + __m128i __i = (i); \ + (__m128i)__builtin_ia32_gatherd_d((__v4si)_mm_setzero_si128(), \ + (const __v4si *)__m, (__v4si)__i, \ + (__v4si)_mm_set1_epi32(-1), (s)); }) + +#define _mm256_i32gather_epi32(m, i, s) __extension__ ({ \ + int const *__m = (m); \ + __m256i __i = (i); \ + (__m256i)__builtin_ia32_gatherd_d256((__v8si)_mm256_setzero_si256(), \ + (const __v8si *)__m, (__v8si)__i, \ + (__v8si)_mm256_set1_epi32(-1), (s)); }) + +#define _mm_i64gather_epi32(m, i, s) __extension__ ({ \ + int const *__m = (m); \ + __m128i __i = (i); \ + (__m128i)__builtin_ia32_gatherq_d((__v4si)_mm_setzero_si128(), \ + (const __v4si *)__m, (__v2di)__i, \ + (__v4si)_mm_set1_epi32(-1), (s)); }) + +#define _mm256_i64gather_epi32(m, i, s) __extension__ ({ \ + int const *__m = (m); \ + __m256i __i = (i); \ + (__m128i)__builtin_ia32_gatherq_d256((__v4si)_mm_setzero_si128(), \ + (const __v4si *)__m, (__v4di)__i, \ + (__v4si)_mm_set1_epi32(-1), (s)); }) + +#define _mm_i32gather_epi64(m, i, s) __extension__ ({ \ + long long const *__m = (m); \ + __m128i __i = (i); \ + (__m128i)__builtin_ia32_gatherd_q((__v2di)_mm_setzero_si128(), \ + (const __v2di *)__m, (__v4si)__i, \ + (__v2di)_mm_set1_epi64x(-1), (s)); }) + +#define _mm256_i32gather_epi64(m, i, s) __extension__ ({ \ + long long const *__m = (m); \ + __m128i __i = (i); \ + (__m256i)__builtin_ia32_gatherd_q256((__v4di)_mm256_setzero_si256(), \ + (const __v4di *)__m, (__v4si)__i, \ + (__v4di)_mm256_set1_epi64x(-1), (s)); }) + +#define _mm_i64gather_epi64(m, i, s) __extension__ ({ \ + long long const *__m = (m); \ + __m128i __i = (i); \ + (__m128i)__builtin_ia32_gatherq_q((__v2di)_mm_setzero_si128(), \ + (const __v2di *)__m, (__v2di)__i, \ + (__v2di)_mm_set1_epi64x(-1), (s)); }) + +#define _mm256_i64gather_epi64(m, i, s) __extension__ ({ \ + long long const *__m = (m); \ + __m256i __i = (i); \ + (__m256i)__builtin_ia32_gatherq_q256((__v4di)_mm256_setzero_si256(), \ + (const __v4di *)__m, (__v4di)__i, \ + (__v4di)_mm256_set1_epi64x(-1), (s)); }) + +#endif /* __AVX2INTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/avxintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/avxintrin.h new file mode 100755 index 0000000..141c4d9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/avxintrin.h @@ -0,0 +1,1224 @@ +/*===---- avxintrin.h - AVX intrinsics -------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __IMMINTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __AVXINTRIN_H +#define __AVXINTRIN_H + +typedef double __v4df __attribute__ ((__vector_size__ (32))); +typedef float __v8sf __attribute__ ((__vector_size__ (32))); +typedef long long __v4di __attribute__ ((__vector_size__ (32))); +typedef int __v8si __attribute__ ((__vector_size__ (32))); +typedef short __v16hi __attribute__ ((__vector_size__ (32))); +typedef char __v32qi __attribute__ ((__vector_size__ (32))); + +typedef float __m256 __attribute__ ((__vector_size__ (32))); +typedef double __m256d __attribute__((__vector_size__(32))); +typedef long long __m256i __attribute__((__vector_size__(32))); + +/* Arithmetic */ +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_add_pd(__m256d __a, __m256d __b) +{ + return __a+__b; +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_add_ps(__m256 __a, __m256 __b) +{ + return __a+__b; +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_sub_pd(__m256d __a, __m256d __b) +{ + return __a-__b; +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_sub_ps(__m256 __a, __m256 __b) +{ + return __a-__b; +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_addsub_pd(__m256d __a, __m256d __b) +{ + return (__m256d)__builtin_ia32_addsubpd256((__v4df)__a, (__v4df)__b); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_addsub_ps(__m256 __a, __m256 __b) +{ + return (__m256)__builtin_ia32_addsubps256((__v8sf)__a, (__v8sf)__b); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_div_pd(__m256d __a, __m256d __b) +{ + return __a / __b; +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_div_ps(__m256 __a, __m256 __b) +{ + return __a / __b; +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_max_pd(__m256d __a, __m256d __b) +{ + return (__m256d)__builtin_ia32_maxpd256((__v4df)__a, (__v4df)__b); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_max_ps(__m256 __a, __m256 __b) +{ + return (__m256)__builtin_ia32_maxps256((__v8sf)__a, (__v8sf)__b); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_min_pd(__m256d __a, __m256d __b) +{ + return (__m256d)__builtin_ia32_minpd256((__v4df)__a, (__v4df)__b); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_min_ps(__m256 __a, __m256 __b) +{ + return (__m256)__builtin_ia32_minps256((__v8sf)__a, (__v8sf)__b); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_mul_pd(__m256d __a, __m256d __b) +{ + return __a * __b; +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_mul_ps(__m256 __a, __m256 __b) +{ + return __a * __b; +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_sqrt_pd(__m256d __a) +{ + return (__m256d)__builtin_ia32_sqrtpd256((__v4df)__a); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_sqrt_ps(__m256 __a) +{ + return (__m256)__builtin_ia32_sqrtps256((__v8sf)__a); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_rsqrt_ps(__m256 __a) +{ + return (__m256)__builtin_ia32_rsqrtps256((__v8sf)__a); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_rcp_ps(__m256 __a) +{ + return (__m256)__builtin_ia32_rcpps256((__v8sf)__a); +} + +#define _mm256_round_pd(V, M) __extension__ ({ \ + __m256d __V = (V); \ + (__m256d)__builtin_ia32_roundpd256((__v4df)__V, (M)); }) + +#define _mm256_round_ps(V, M) __extension__ ({ \ + __m256 __V = (V); \ + (__m256)__builtin_ia32_roundps256((__v8sf)__V, (M)); }) + +#define _mm256_ceil_pd(V) _mm256_round_pd((V), _MM_FROUND_CEIL) +#define _mm256_floor_pd(V) _mm256_round_pd((V), _MM_FROUND_FLOOR) +#define _mm256_ceil_ps(V) _mm256_round_ps((V), _MM_FROUND_CEIL) +#define _mm256_floor_ps(V) _mm256_round_ps((V), _MM_FROUND_FLOOR) + +/* Logical */ +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_and_pd(__m256d __a, __m256d __b) +{ + return (__m256d)((__v4di)__a & (__v4di)__b); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_and_ps(__m256 __a, __m256 __b) +{ + return (__m256)((__v8si)__a & (__v8si)__b); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_andnot_pd(__m256d __a, __m256d __b) +{ + return (__m256d)(~(__v4di)__a & (__v4di)__b); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_andnot_ps(__m256 __a, __m256 __b) +{ + return (__m256)(~(__v8si)__a & (__v8si)__b); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_or_pd(__m256d __a, __m256d __b) +{ + return (__m256d)((__v4di)__a | (__v4di)__b); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_or_ps(__m256 __a, __m256 __b) +{ + return (__m256)((__v8si)__a | (__v8si)__b); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_xor_pd(__m256d __a, __m256d __b) +{ + return (__m256d)((__v4di)__a ^ (__v4di)__b); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_xor_ps(__m256 __a, __m256 __b) +{ + return (__m256)((__v8si)__a ^ (__v8si)__b); +} + +/* Horizontal arithmetic */ +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_hadd_pd(__m256d __a, __m256d __b) +{ + return (__m256d)__builtin_ia32_haddpd256((__v4df)__a, (__v4df)__b); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_hadd_ps(__m256 __a, __m256 __b) +{ + return (__m256)__builtin_ia32_haddps256((__v8sf)__a, (__v8sf)__b); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_hsub_pd(__m256d __a, __m256d __b) +{ + return (__m256d)__builtin_ia32_hsubpd256((__v4df)__a, (__v4df)__b); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_hsub_ps(__m256 __a, __m256 __b) +{ + return (__m256)__builtin_ia32_hsubps256((__v8sf)__a, (__v8sf)__b); +} + +/* Vector permutations */ +static __inline __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_permutevar_pd(__m128d __a, __m128i __c) +{ + return (__m128d)__builtin_ia32_vpermilvarpd((__v2df)__a, (__v2di)__c); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_permutevar_pd(__m256d __a, __m256i __c) +{ + return (__m256d)__builtin_ia32_vpermilvarpd256((__v4df)__a, (__v4di)__c); +} + +static __inline __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_permutevar_ps(__m128 __a, __m128i __c) +{ + return (__m128)__builtin_ia32_vpermilvarps((__v4sf)__a, (__v4si)__c); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_permutevar_ps(__m256 __a, __m256i __c) +{ + return (__m256)__builtin_ia32_vpermilvarps256((__v8sf)__a, + (__v8si)__c); +} + +#define _mm_permute_pd(A, C) __extension__ ({ \ + __m128d __A = (A); \ + (__m128d)__builtin_shufflevector((__v2df)__A, (__v2df) _mm_setzero_pd(), \ + (C) & 0x1, ((C) & 0x2) >> 1); }) + +#define _mm256_permute_pd(A, C) __extension__ ({ \ + __m256d __A = (A); \ + (__m256d)__builtin_shufflevector((__v4df)__A, (__v4df) _mm256_setzero_pd(), \ + (C) & 0x1, ((C) & 0x2) >> 1, \ + 2 + (((C) & 0x4) >> 2), \ + 2 + (((C) & 0x8) >> 3)); }) + +#define _mm_permute_ps(A, C) __extension__ ({ \ + __m128 __A = (A); \ + (__m128)__builtin_shufflevector((__v4sf)__A, (__v4sf) _mm_setzero_ps(), \ + (C) & 0x3, ((C) & 0xc) >> 2, \ + ((C) & 0x30) >> 4, ((C) & 0xc0) >> 6); }) + +#define _mm256_permute_ps(A, C) __extension__ ({ \ + __m256 __A = (A); \ + (__m256)__builtin_shufflevector((__v8sf)__A, (__v8sf) _mm256_setzero_ps(), \ + (C) & 0x3, ((C) & 0xc) >> 2, \ + ((C) & 0x30) >> 4, ((C) & 0xc0) >> 6, \ + 4 + (((C) & 0x03) >> 0), \ + 4 + (((C) & 0x0c) >> 2), \ + 4 + (((C) & 0x30) >> 4), \ + 4 + (((C) & 0xc0) >> 6)); }) + +#define _mm256_permute2f128_pd(V1, V2, M) __extension__ ({ \ + __m256d __V1 = (V1); \ + __m256d __V2 = (V2); \ + (__m256d)__builtin_ia32_vperm2f128_pd256((__v4df)__V1, (__v4df)__V2, (M)); }) + +#define _mm256_permute2f128_ps(V1, V2, M) __extension__ ({ \ + __m256 __V1 = (V1); \ + __m256 __V2 = (V2); \ + (__m256)__builtin_ia32_vperm2f128_ps256((__v8sf)__V1, (__v8sf)__V2, (M)); }) + +#define _mm256_permute2f128_si256(V1, V2, M) __extension__ ({ \ + __m256i __V1 = (V1); \ + __m256i __V2 = (V2); \ + (__m256i)__builtin_ia32_vperm2f128_si256((__v8si)__V1, (__v8si)__V2, (M)); }) + +/* Vector Blend */ +#define _mm256_blend_pd(V1, V2, M) __extension__ ({ \ + __m256d __V1 = (V1); \ + __m256d __V2 = (V2); \ + (__m256d)__builtin_ia32_blendpd256((__v4df)__V1, (__v4df)__V2, (M)); }) + +#define _mm256_blend_ps(V1, V2, M) __extension__ ({ \ + __m256 __V1 = (V1); \ + __m256 __V2 = (V2); \ + (__m256)__builtin_ia32_blendps256((__v8sf)__V1, (__v8sf)__V2, (M)); }) + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_blendv_pd(__m256d __a, __m256d __b, __m256d __c) +{ + return (__m256d)__builtin_ia32_blendvpd256( + (__v4df)__a, (__v4df)__b, (__v4df)__c); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_blendv_ps(__m256 __a, __m256 __b, __m256 __c) +{ + return (__m256)__builtin_ia32_blendvps256( + (__v8sf)__a, (__v8sf)__b, (__v8sf)__c); +} + +/* Vector Dot Product */ +#define _mm256_dp_ps(V1, V2, M) __extension__ ({ \ + __m256 __V1 = (V1); \ + __m256 __V2 = (V2); \ + (__m256)__builtin_ia32_dpps256((__v8sf)__V1, (__v8sf)__V2, (M)); }) + +/* Vector shuffle */ +#define _mm256_shuffle_ps(a, b, mask) __extension__ ({ \ + __m256 __a = (a); \ + __m256 __b = (b); \ + (__m256)__builtin_shufflevector((__v8sf)__a, (__v8sf)__b, \ + (mask) & 0x3, ((mask) & 0xc) >> 2, \ + (((mask) & 0x30) >> 4) + 8, (((mask) & 0xc0) >> 6) + 8, \ + ((mask) & 0x3) + 4, (((mask) & 0xc) >> 2) + 4, \ + (((mask) & 0x30) >> 4) + 12, (((mask) & 0xc0) >> 6) + 12); }) + +#define _mm256_shuffle_pd(a, b, mask) __extension__ ({ \ + __m256d __a = (a); \ + __m256d __b = (b); \ + (__m256d)__builtin_shufflevector((__v4df)__a, (__v4df)__b, \ + (mask) & 0x1, \ + (((mask) & 0x2) >> 1) + 4, \ + (((mask) & 0x4) >> 2) + 2, \ + (((mask) & 0x8) >> 3) + 6); }) + +/* Compare */ +#define _CMP_EQ_OQ 0x00 /* Equal (ordered, non-signaling) */ +#define _CMP_LT_OS 0x01 /* Less-than (ordered, signaling) */ +#define _CMP_LE_OS 0x02 /* Less-than-or-equal (ordered, signaling) */ +#define _CMP_UNORD_Q 0x03 /* Unordered (non-signaling) */ +#define _CMP_NEQ_UQ 0x04 /* Not-equal (unordered, non-signaling) */ +#define _CMP_NLT_US 0x05 /* Not-less-than (unordered, signaling) */ +#define _CMP_NLE_US 0x06 /* Not-less-than-or-equal (unordered, signaling) */ +#define _CMP_ORD_Q 0x07 /* Ordered (nonsignaling) */ +#define _CMP_EQ_UQ 0x08 /* Equal (unordered, non-signaling) */ +#define _CMP_NGE_US 0x09 /* Not-greater-than-or-equal (unord, signaling) */ +#define _CMP_NGT_US 0x0a /* Not-greater-than (unordered, signaling) */ +#define _CMP_FALSE_OQ 0x0b /* False (ordered, non-signaling) */ +#define _CMP_NEQ_OQ 0x0c /* Not-equal (ordered, non-signaling) */ +#define _CMP_GE_OS 0x0d /* Greater-than-or-equal (ordered, signaling) */ +#define _CMP_GT_OS 0x0e /* Greater-than (ordered, signaling) */ +#define _CMP_TRUE_UQ 0x0f /* True (unordered, non-signaling) */ +#define _CMP_EQ_OS 0x10 /* Equal (ordered, signaling) */ +#define _CMP_LT_OQ 0x11 /* Less-than (ordered, non-signaling) */ +#define _CMP_LE_OQ 0x12 /* Less-than-or-equal (ordered, non-signaling) */ +#define _CMP_UNORD_S 0x13 /* Unordered (signaling) */ +#define _CMP_NEQ_US 0x14 /* Not-equal (unordered, signaling) */ +#define _CMP_NLT_UQ 0x15 /* Not-less-than (unordered, non-signaling) */ +#define _CMP_NLE_UQ 0x16 /* Not-less-than-or-equal (unord, non-signaling) */ +#define _CMP_ORD_S 0x17 /* Ordered (signaling) */ +#define _CMP_EQ_US 0x18 /* Equal (unordered, signaling) */ +#define _CMP_NGE_UQ 0x19 /* Not-greater-than-or-equal (unord, non-sign) */ +#define _CMP_NGT_UQ 0x1a /* Not-greater-than (unordered, non-signaling) */ +#define _CMP_FALSE_OS 0x1b /* False (ordered, signaling) */ +#define _CMP_NEQ_OS 0x1c /* Not-equal (ordered, signaling) */ +#define _CMP_GE_OQ 0x1d /* Greater-than-or-equal (ordered, non-signaling) */ +#define _CMP_GT_OQ 0x1e /* Greater-than (ordered, non-signaling) */ +#define _CMP_TRUE_US 0x1f /* True (unordered, signaling) */ + +#define _mm_cmp_pd(a, b, c) __extension__ ({ \ + __m128d __a = (a); \ + __m128d __b = (b); \ + (__m128d)__builtin_ia32_cmppd((__v2df)__a, (__v2df)__b, (c)); }) + +#define _mm_cmp_ps(a, b, c) __extension__ ({ \ + __m128 __a = (a); \ + __m128 __b = (b); \ + (__m128)__builtin_ia32_cmpps((__v4sf)__a, (__v4sf)__b, (c)); }) + +#define _mm256_cmp_pd(a, b, c) __extension__ ({ \ + __m256d __a = (a); \ + __m256d __b = (b); \ + (__m256d)__builtin_ia32_cmppd256((__v4df)__a, (__v4df)__b, (c)); }) + +#define _mm256_cmp_ps(a, b, c) __extension__ ({ \ + __m256 __a = (a); \ + __m256 __b = (b); \ + (__m256)__builtin_ia32_cmpps256((__v8sf)__a, (__v8sf)__b, (c)); }) + +#define _mm_cmp_sd(a, b, c) __extension__ ({ \ + __m128d __a = (a); \ + __m128d __b = (b); \ + (__m128d)__builtin_ia32_cmpsd((__v2df)__a, (__v2df)__b, (c)); }) + +#define _mm_cmp_ss(a, b, c) __extension__ ({ \ + __m128 __a = (a); \ + __m128 __b = (b); \ + (__m128)__builtin_ia32_cmpss((__v4sf)__a, (__v4sf)__b, (c)); }) + +/* Vector extract */ +#define _mm256_extractf128_pd(A, O) __extension__ ({ \ + __m256d __A = (A); \ + (__m128d)__builtin_ia32_vextractf128_pd256((__v4df)__A, (O)); }) + +#define _mm256_extractf128_ps(A, O) __extension__ ({ \ + __m256 __A = (A); \ + (__m128)__builtin_ia32_vextractf128_ps256((__v8sf)__A, (O)); }) + +#define _mm256_extractf128_si256(A, O) __extension__ ({ \ + __m256i __A = (A); \ + (__m128i)__builtin_ia32_vextractf128_si256((__v8si)__A, (O)); }) + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_extract_epi32(__m256i __a, int const __imm) +{ + __v8si __b = (__v8si)__a; + return __b[__imm & 7]; +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_extract_epi16(__m256i __a, int const __imm) +{ + __v16hi __b = (__v16hi)__a; + return __b[__imm & 15]; +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_extract_epi8(__m256i __a, int const __imm) +{ + __v32qi __b = (__v32qi)__a; + return __b[__imm & 31]; +} + +#ifdef __x86_64__ +static __inline long long __attribute__((__always_inline__, __nodebug__)) +_mm256_extract_epi64(__m256i __a, const int __imm) +{ + __v4di __b = (__v4di)__a; + return __b[__imm & 3]; +} +#endif + +/* Vector insert */ +#define _mm256_insertf128_pd(V1, V2, O) __extension__ ({ \ + __m256d __V1 = (V1); \ + __m128d __V2 = (V2); \ + (__m256d)__builtin_ia32_vinsertf128_pd256((__v4df)__V1, (__v2df)__V2, (O)); }) + +#define _mm256_insertf128_ps(V1, V2, O) __extension__ ({ \ + __m256 __V1 = (V1); \ + __m128 __V2 = (V2); \ + (__m256)__builtin_ia32_vinsertf128_ps256((__v8sf)__V1, (__v4sf)__V2, (O)); }) + +#define _mm256_insertf128_si256(V1, V2, O) __extension__ ({ \ + __m256i __V1 = (V1); \ + __m128i __V2 = (V2); \ + (__m256i)__builtin_ia32_vinsertf128_si256((__v8si)__V1, (__v4si)__V2, (O)); }) + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_insert_epi32(__m256i __a, int __b, int const __imm) +{ + __v8si __c = (__v8si)__a; + __c[__imm & 7] = __b; + return (__m256i)__c; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_insert_epi16(__m256i __a, int __b, int const __imm) +{ + __v16hi __c = (__v16hi)__a; + __c[__imm & 15] = __b; + return (__m256i)__c; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_insert_epi8(__m256i __a, int __b, int const __imm) +{ + __v32qi __c = (__v32qi)__a; + __c[__imm & 31] = __b; + return (__m256i)__c; +} + +#ifdef __x86_64__ +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_insert_epi64(__m256i __a, int __b, int const __imm) +{ + __v4di __c = (__v4di)__a; + __c[__imm & 3] = __b; + return (__m256i)__c; +} +#endif + +/* Conversion */ +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepi32_pd(__m128i __a) +{ + return (__m256d)__builtin_ia32_cvtdq2pd256((__v4si) __a); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtepi32_ps(__m256i __a) +{ + return (__m256)__builtin_ia32_cvtdq2ps256((__v8si) __a); +} + +static __inline __m128 __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtpd_ps(__m256d __a) +{ + return (__m128)__builtin_ia32_cvtpd2ps256((__v4df) __a); +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtps_epi32(__m256 __a) +{ + return (__m256i)__builtin_ia32_cvtps2dq256((__v8sf) __a); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtps_pd(__m128 __a) +{ + return (__m256d)__builtin_ia32_cvtps2pd256((__v4sf) __a); +} + +static __inline __m128i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvttpd_epi32(__m256d __a) +{ + return (__m128i)__builtin_ia32_cvttpd2dq256((__v4df) __a); +} + +static __inline __m128i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtpd_epi32(__m256d __a) +{ + return (__m128i)__builtin_ia32_cvtpd2dq256((__v4df) __a); +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cvttps_epi32(__m256 __a) +{ + return (__m256i)__builtin_ia32_cvttps2dq256((__v8sf) __a); +} + +/* Vector replicate */ +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_movehdup_ps(__m256 __a) +{ + return __builtin_shufflevector(__a, __a, 1, 1, 3, 3, 5, 5, 7, 7); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_moveldup_ps(__m256 __a) +{ + return __builtin_shufflevector(__a, __a, 0, 0, 2, 2, 4, 4, 6, 6); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_movedup_pd(__m256d __a) +{ + return __builtin_shufflevector(__a, __a, 0, 0, 2, 2); +} + +/* Unpack and Interleave */ +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_unpackhi_pd(__m256d __a, __m256d __b) +{ + return __builtin_shufflevector(__a, __b, 1, 5, 1+2, 5+2); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_unpacklo_pd(__m256d __a, __m256d __b) +{ + return __builtin_shufflevector(__a, __b, 0, 4, 0+2, 4+2); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_unpackhi_ps(__m256 __a, __m256 __b) +{ + return __builtin_shufflevector(__a, __b, 2, 10, 2+1, 10+1, 6, 14, 6+1, 14+1); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_unpacklo_ps(__m256 __a, __m256 __b) +{ + return __builtin_shufflevector(__a, __b, 0, 8, 0+1, 8+1, 4, 12, 4+1, 12+1); +} + +/* Bit Test */ +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm_testz_pd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_vtestzpd((__v2df)__a, (__v2df)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm_testc_pd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_vtestcpd((__v2df)__a, (__v2df)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm_testnzc_pd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_vtestnzcpd((__v2df)__a, (__v2df)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm_testz_ps(__m128 __a, __m128 __b) +{ + return __builtin_ia32_vtestzps((__v4sf)__a, (__v4sf)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm_testc_ps(__m128 __a, __m128 __b) +{ + return __builtin_ia32_vtestcps((__v4sf)__a, (__v4sf)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm_testnzc_ps(__m128 __a, __m128 __b) +{ + return __builtin_ia32_vtestnzcps((__v4sf)__a, (__v4sf)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_testz_pd(__m256d __a, __m256d __b) +{ + return __builtin_ia32_vtestzpd256((__v4df)__a, (__v4df)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_testc_pd(__m256d __a, __m256d __b) +{ + return __builtin_ia32_vtestcpd256((__v4df)__a, (__v4df)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_testnzc_pd(__m256d __a, __m256d __b) +{ + return __builtin_ia32_vtestnzcpd256((__v4df)__a, (__v4df)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_testz_ps(__m256 __a, __m256 __b) +{ + return __builtin_ia32_vtestzps256((__v8sf)__a, (__v8sf)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_testc_ps(__m256 __a, __m256 __b) +{ + return __builtin_ia32_vtestcps256((__v8sf)__a, (__v8sf)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_testnzc_ps(__m256 __a, __m256 __b) +{ + return __builtin_ia32_vtestnzcps256((__v8sf)__a, (__v8sf)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_testz_si256(__m256i __a, __m256i __b) +{ + return __builtin_ia32_ptestz256((__v4di)__a, (__v4di)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_testc_si256(__m256i __a, __m256i __b) +{ + return __builtin_ia32_ptestc256((__v4di)__a, (__v4di)__b); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_testnzc_si256(__m256i __a, __m256i __b) +{ + return __builtin_ia32_ptestnzc256((__v4di)__a, (__v4di)__b); +} + +/* Vector extract sign mask */ +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_movemask_pd(__m256d __a) +{ + return __builtin_ia32_movmskpd256((__v4df)__a); +} + +static __inline int __attribute__((__always_inline__, __nodebug__)) +_mm256_movemask_ps(__m256 __a) +{ + return __builtin_ia32_movmskps256((__v8sf)__a); +} + +/* Vector __zero */ +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_zeroall(void) +{ + __builtin_ia32_vzeroall(); +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_zeroupper(void) +{ + __builtin_ia32_vzeroupper(); +} + +/* Vector load with broadcast */ +static __inline __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_broadcast_ss(float const *__a) +{ + return (__m128)__builtin_ia32_vbroadcastss(__a); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_broadcast_sd(double const *__a) +{ + return (__m256d)__builtin_ia32_vbroadcastsd256(__a); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_broadcast_ss(float const *__a) +{ + return (__m256)__builtin_ia32_vbroadcastss256(__a); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_broadcast_pd(__m128d const *__a) +{ + return (__m256d)__builtin_ia32_vbroadcastf128_pd256(__a); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_broadcast_ps(__m128 const *__a) +{ + return (__m256)__builtin_ia32_vbroadcastf128_ps256(__a); +} + +/* SIMD load ops */ +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_load_pd(double const *__p) +{ + return *(__m256d *)__p; +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_load_ps(float const *__p) +{ + return *(__m256 *)__p; +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_loadu_pd(double const *__p) +{ + struct __loadu_pd { + __m256d __v; + } __attribute__((packed, may_alias)); + return ((struct __loadu_pd*)__p)->__v; +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_loadu_ps(float const *__p) +{ + struct __loadu_ps { + __m256 __v; + } __attribute__((packed, may_alias)); + return ((struct __loadu_ps*)__p)->__v; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_load_si256(__m256i const *__p) +{ + return *__p; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_loadu_si256(__m256i const *__p) +{ + struct __loadu_si256 { + __m256i __v; + } __attribute__((packed, may_alias)); + return ((struct __loadu_si256*)__p)->__v; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_lddqu_si256(__m256i const *__p) +{ + return (__m256i)__builtin_ia32_lddqu256((char const *)__p); +} + +/* SIMD store ops */ +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_store_pd(double *__p, __m256d __a) +{ + *(__m256d *)__p = __a; +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_store_ps(float *__p, __m256 __a) +{ + *(__m256 *)__p = __a; +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_storeu_pd(double *__p, __m256d __a) +{ + __builtin_ia32_storeupd256(__p, (__v4df)__a); +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_storeu_ps(float *__p, __m256 __a) +{ + __builtin_ia32_storeups256(__p, (__v8sf)__a); +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_store_si256(__m256i *__p, __m256i __a) +{ + *__p = __a; +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_storeu_si256(__m256i *__p, __m256i __a) +{ + __builtin_ia32_storedqu256((char *)__p, (__v32qi)__a); +} + +/* Conditional load ops */ +static __inline __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_maskload_pd(double const *__p, __m128d __m) +{ + return (__m128d)__builtin_ia32_maskloadpd((const __v2df *)__p, (__v2df)__m); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_maskload_pd(double const *__p, __m256d __m) +{ + return (__m256d)__builtin_ia32_maskloadpd256((const __v4df *)__p, + (__v4df)__m); +} + +static __inline __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_maskload_ps(float const *__p, __m128 __m) +{ + return (__m128)__builtin_ia32_maskloadps((const __v4sf *)__p, (__v4sf)__m); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_maskload_ps(float const *__p, __m256 __m) +{ + return (__m256)__builtin_ia32_maskloadps256((const __v8sf *)__p, (__v8sf)__m); +} + +/* Conditional store ops */ +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_maskstore_ps(float *__p, __m256 __m, __m256 __a) +{ + __builtin_ia32_maskstoreps256((__v8sf *)__p, (__v8sf)__m, (__v8sf)__a); +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm_maskstore_pd(double *__p, __m128d __m, __m128d __a) +{ + __builtin_ia32_maskstorepd((__v2df *)__p, (__v2df)__m, (__v2df)__a); +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_maskstore_pd(double *__p, __m256d __m, __m256d __a) +{ + __builtin_ia32_maskstorepd256((__v4df *)__p, (__v4df)__m, (__v4df)__a); +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm_maskstore_ps(float *__p, __m128 __m, __m128 __a) +{ + __builtin_ia32_maskstoreps((__v4sf *)__p, (__v4sf)__m, (__v4sf)__a); +} + +/* Cacheability support ops */ +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_stream_si256(__m256i *__a, __m256i __b) +{ + __builtin_ia32_movntdq256((__v4di *)__a, (__v4di)__b); +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_stream_pd(double *__a, __m256d __b) +{ + __builtin_ia32_movntpd256(__a, (__v4df)__b); +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_stream_ps(float *__p, __m256 __a) +{ + __builtin_ia32_movntps256(__p, (__v8sf)__a); +} + +/* Create vectors */ +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_set_pd(double __a, double __b, double __c, double __d) +{ + return (__m256d){ __d, __c, __b, __a }; +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_set_ps(float __a, float __b, float __c, float __d, + float __e, float __f, float __g, float __h) +{ + return (__m256){ __h, __g, __f, __e, __d, __c, __b, __a }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_set_epi32(int __i0, int __i1, int __i2, int __i3, + int __i4, int __i5, int __i6, int __i7) +{ + return (__m256i)(__v8si){ __i7, __i6, __i5, __i4, __i3, __i2, __i1, __i0 }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_set_epi16(short __w15, short __w14, short __w13, short __w12, + short __w11, short __w10, short __w09, short __w08, + short __w07, short __w06, short __w05, short __w04, + short __w03, short __w02, short __w01, short __w00) +{ + return (__m256i)(__v16hi){ __w00, __w01, __w02, __w03, __w04, __w05, __w06, + __w07, __w08, __w09, __w10, __w11, __w12, __w13, __w14, __w15 }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_set_epi8(char __b31, char __b30, char __b29, char __b28, + char __b27, char __b26, char __b25, char __b24, + char __b23, char __b22, char __b21, char __b20, + char __b19, char __b18, char __b17, char __b16, + char __b15, char __b14, char __b13, char __b12, + char __b11, char __b10, char __b09, char __b08, + char __b07, char __b06, char __b05, char __b04, + char __b03, char __b02, char __b01, char __b00) +{ + return (__m256i)(__v32qi){ + __b00, __b01, __b02, __b03, __b04, __b05, __b06, __b07, + __b08, __b09, __b10, __b11, __b12, __b13, __b14, __b15, + __b16, __b17, __b18, __b19, __b20, __b21, __b22, __b23, + __b24, __b25, __b26, __b27, __b28, __b29, __b30, __b31 + }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_set_epi64x(long long __a, long long __b, long long __c, long long __d) +{ + return (__m256i)(__v4di){ __d, __c, __b, __a }; +} + +/* Create vectors with elements in reverse order */ +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_setr_pd(double __a, double __b, double __c, double __d) +{ + return (__m256d){ __a, __b, __c, __d }; +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_setr_ps(float __a, float __b, float __c, float __d, + float __e, float __f, float __g, float __h) +{ + return (__m256){ __a, __b, __c, __d, __e, __f, __g, __h }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_setr_epi32(int __i0, int __i1, int __i2, int __i3, + int __i4, int __i5, int __i6, int __i7) +{ + return (__m256i)(__v8si){ __i0, __i1, __i2, __i3, __i4, __i5, __i6, __i7 }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_setr_epi16(short __w15, short __w14, short __w13, short __w12, + short __w11, short __w10, short __w09, short __w08, + short __w07, short __w06, short __w05, short __w04, + short __w03, short __w02, short __w01, short __w00) +{ + return (__m256i)(__v16hi){ __w15, __w14, __w13, __w12, __w11, __w10, __w09, + __w08, __w07, __w06, __w05, __w04, __w03, __w02, __w01, __w00 }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_setr_epi8(char __b31, char __b30, char __b29, char __b28, + char __b27, char __b26, char __b25, char __b24, + char __b23, char __b22, char __b21, char __b20, + char __b19, char __b18, char __b17, char __b16, + char __b15, char __b14, char __b13, char __b12, + char __b11, char __b10, char __b09, char __b08, + char __b07, char __b06, char __b05, char __b04, + char __b03, char __b02, char __b01, char __b00) +{ + return (__m256i)(__v32qi){ + __b31, __b30, __b29, __b28, __b27, __b26, __b25, __b24, + __b23, __b22, __b21, __b20, __b19, __b18, __b17, __b16, + __b15, __b14, __b13, __b12, __b11, __b10, __b09, __b08, + __b07, __b06, __b05, __b04, __b03, __b02, __b01, __b00 }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_setr_epi64x(long long __a, long long __b, long long __c, long long __d) +{ + return (__m256i)(__v4di){ __a, __b, __c, __d }; +} + +/* Create vectors with repeated elements */ +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_set1_pd(double __w) +{ + return (__m256d){ __w, __w, __w, __w }; +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_set1_ps(float __w) +{ + return (__m256){ __w, __w, __w, __w, __w, __w, __w, __w }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_set1_epi32(int __i) +{ + return (__m256i)(__v8si){ __i, __i, __i, __i, __i, __i, __i, __i }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_set1_epi16(short __w) +{ + return (__m256i)(__v16hi){ __w, __w, __w, __w, __w, __w, __w, __w, __w, __w, + __w, __w, __w, __w, __w, __w }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_set1_epi8(char __b) +{ + return (__m256i)(__v32qi){ __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, + __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, + __b, __b, __b, __b, __b, __b, __b }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_set1_epi64x(long long __q) +{ + return (__m256i)(__v4di){ __q, __q, __q, __q }; +} + +/* Create __zeroed vectors */ +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_setzero_pd(void) +{ + return (__m256d){ 0, 0, 0, 0 }; +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_setzero_ps(void) +{ + return (__m256){ 0, 0, 0, 0, 0, 0, 0, 0 }; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_setzero_si256(void) +{ + return (__m256i){ 0LL, 0LL, 0LL, 0LL }; +} + +/* Cast between vector types */ +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_castpd_ps(__m256d __a) +{ + return (__m256)__a; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_castpd_si256(__m256d __a) +{ + return (__m256i)__a; +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_castps_pd(__m256 __a) +{ + return (__m256d)__a; +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_castps_si256(__m256 __a) +{ + return (__m256i)__a; +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_castsi256_ps(__m256i __a) +{ + return (__m256)__a; +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_castsi256_pd(__m256i __a) +{ + return (__m256d)__a; +} + +static __inline __m128d __attribute__((__always_inline__, __nodebug__)) +_mm256_castpd256_pd128(__m256d __a) +{ + return __builtin_shufflevector(__a, __a, 0, 1); +} + +static __inline __m128 __attribute__((__always_inline__, __nodebug__)) +_mm256_castps256_ps128(__m256 __a) +{ + return __builtin_shufflevector(__a, __a, 0, 1, 2, 3); +} + +static __inline __m128i __attribute__((__always_inline__, __nodebug__)) +_mm256_castsi256_si128(__m256i __a) +{ + return __builtin_shufflevector(__a, __a, 0, 1); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_castpd128_pd256(__m128d __a) +{ + return __builtin_shufflevector(__a, __a, 0, 1, -1, -1); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_castps128_ps256(__m128 __a) +{ + return __builtin_shufflevector(__a, __a, 0, 1, 2, 3, -1, -1, -1, -1); +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_castsi128_si256(__m128i __a) +{ + return __builtin_shufflevector(__a, __a, 0, 1, -1, -1); +} + +/* SIMD load ops (unaligned) */ +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_loadu2_m128(float const *__addr_hi, float const *__addr_lo) +{ + struct __loadu_ps { + __m128 __v; + } __attribute__((__packed__, __may_alias__)); + + __m256 __v256 = _mm256_castps128_ps256(((struct __loadu_ps*)__addr_lo)->__v); + return _mm256_insertf128_ps(__v256, ((struct __loadu_ps*)__addr_hi)->__v, 1); +} + +static __inline __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_loadu2_m128d(double const *__addr_hi, double const *__addr_lo) +{ + struct __loadu_pd { + __m128d __v; + } __attribute__((__packed__, __may_alias__)); + + __m256d __v256 = _mm256_castpd128_pd256(((struct __loadu_pd*)__addr_lo)->__v); + return _mm256_insertf128_pd(__v256, ((struct __loadu_pd*)__addr_hi)->__v, 1); +} + +static __inline __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_loadu2_m128i(__m128i const *__addr_hi, __m128i const *__addr_lo) +{ + struct __loadu_si128 { + __m128i __v; + } __attribute__((packed, may_alias)); + __m256i __v256 = _mm256_castsi128_si256( + ((struct __loadu_si128*)__addr_lo)->__v); + return _mm256_insertf128_si256(__v256, + ((struct __loadu_si128*)__addr_hi)->__v, 1); +} + +/* SIMD store ops (unaligned) */ +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_storeu2_m128(float *__addr_hi, float *__addr_lo, __m256 __a) +{ + __m128 __v128; + + __v128 = _mm256_castps256_ps128(__a); + __builtin_ia32_storeups(__addr_lo, __v128); + __v128 = _mm256_extractf128_ps(__a, 1); + __builtin_ia32_storeups(__addr_hi, __v128); +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_storeu2_m128d(double *__addr_hi, double *__addr_lo, __m256d __a) +{ + __m128d __v128; + + __v128 = _mm256_castpd256_pd128(__a); + __builtin_ia32_storeupd(__addr_lo, __v128); + __v128 = _mm256_extractf128_pd(__a, 1); + __builtin_ia32_storeupd(__addr_hi, __v128); +} + +static __inline void __attribute__((__always_inline__, __nodebug__)) +_mm256_storeu2_m128i(__m128i *__addr_hi, __m128i *__addr_lo, __m256i __a) +{ + __m128i __v128; + + __v128 = _mm256_castsi256_si128(__a); + __builtin_ia32_storedqu((char *)__addr_lo, (__v16qi)__v128); + __v128 = _mm256_extractf128_si256(__a, 1); + __builtin_ia32_storedqu((char *)__addr_hi, (__v16qi)__v128); +} + +#endif /* __AVXINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/bmi2intrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/bmi2intrin.h new file mode 100755 index 0000000..a05cfad --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/bmi2intrin.h @@ -0,0 +1,94 @@ +/*===---- bmi2intrin.h - BMI2 intrinsics -----------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __BMI2__ +# error "BMI2 instruction set not enabled" +#endif /* __BMI2__ */ + +#ifndef __BMI2INTRIN_H +#define __BMI2INTRIN_H + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_bzhi_u32(unsigned int __X, unsigned int __Y) +{ + return __builtin_ia32_bzhi_si(__X, __Y); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_pdep_u32(unsigned int __X, unsigned int __Y) +{ + return __builtin_ia32_pdep_si(__X, __Y); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_pext_u32(unsigned int __X, unsigned int __Y) +{ + return __builtin_ia32_pext_si(__X, __Y); +} + +#ifdef __x86_64__ + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +_bzhi_u64(unsigned long long __X, unsigned long long __Y) +{ + return __builtin_ia32_bzhi_di(__X, __Y); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +_pdep_u64(unsigned long long __X, unsigned long long __Y) +{ + return __builtin_ia32_pdep_di(__X, __Y); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +_pext_u64(unsigned long long __X, unsigned long long __Y) +{ + return __builtin_ia32_pext_di(__X, __Y); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +_mulx_u64 (unsigned long long __X, unsigned long long __Y, + unsigned long long *__P) +{ + unsigned __int128 __res = (unsigned __int128) __X * __Y; + *__P = (unsigned long long) (__res >> 64); + return (unsigned long long) __res; +} + +#else /* !__x86_64__ */ + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_mulx_u32 (unsigned int __X, unsigned int __Y, unsigned int *__P) +{ + unsigned long long __res = (unsigned long long) __X * __Y; + *__P = (unsigned int) (__res >> 32); + return (unsigned int) __res; +} + +#endif /* !__x86_64__ */ + +#endif /* __BMI2INTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/bmiintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/bmiintrin.h new file mode 100755 index 0000000..8cb00f5 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/bmiintrin.h @@ -0,0 +1,115 @@ +/*===---- bmiintrin.h - BMI intrinsics -------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __BMI__ +# error "BMI instruction set not enabled" +#endif /* __BMI__ */ + +#ifndef __BMIINTRIN_H +#define __BMIINTRIN_H + +static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__)) +__tzcnt_u16(unsigned short __X) +{ + return __builtin_ctzs(__X); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__andn_u32(unsigned int __X, unsigned int __Y) +{ + return ~__X & __Y; +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__bextr_u32(unsigned int __X, unsigned int __Y) +{ + return __builtin_ia32_bextr_u32(__X, __Y); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blsi_u32(unsigned int __X) +{ + return __X & -__X; +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blsmsk_u32(unsigned int __X) +{ + return __X ^ (__X - 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blsr_u32(unsigned int __X) +{ + return __X & (__X - 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__tzcnt_u32(unsigned int __X) +{ + return __builtin_ctz(__X); +} + +#ifdef __x86_64__ +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__andn_u64 (unsigned long long __X, unsigned long long __Y) +{ + return ~__X & __Y; +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__bextr_u64(unsigned long long __X, unsigned long long __Y) +{ + return __builtin_ia32_bextr_u64(__X, __Y); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__blsi_u64(unsigned long long __X) +{ + return __X & -__X; +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__blsmsk_u64(unsigned long long __X) +{ + return __X ^ (__X - 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__blsr_u64(unsigned long long __X) +{ + return __X & (__X - 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__tzcnt_u64(unsigned long long __X) +{ + return __builtin_ctzll(__X); +} +#endif + +#endif /* __BMIINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/cpuid.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/cpuid.h new file mode 100755 index 0000000..8f12cae --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/cpuid.h @@ -0,0 +1,156 @@ +/*===---- cpuid.h - X86 cpu model detection --------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#if !(__x86_64__ || __i386__) +#error this header is for x86 only +#endif + +/* Features in %ecx for level 1 */ +#define bit_SSE3 0x00000001 +#define bit_PCLMULQDQ 0x00000002 +#define bit_DTES64 0x00000004 +#define bit_MONITOR 0x00000008 +#define bit_DSCPL 0x00000010 +#define bit_VMX 0x00000020 +#define bit_SMX 0x00000040 +#define bit_EIST 0x00000080 +#define bit_TM2 0x00000100 +#define bit_SSSE3 0x00000200 +#define bit_CNXTID 0x00000400 +#define bit_FMA 0x00001000 +#define bit_CMPXCHG16B 0x00002000 +#define bit_xTPR 0x00004000 +#define bit_PDCM 0x00008000 +#define bit_PCID 0x00020000 +#define bit_DCA 0x00040000 +#define bit_SSE41 0x00080000 +#define bit_SSE42 0x00100000 +#define bit_x2APIC 0x00200000 +#define bit_MOVBE 0x00400000 +#define bit_POPCNT 0x00800000 +#define bit_TSCDeadline 0x01000000 +#define bit_AESNI 0x02000000 +#define bit_XSAVE 0x04000000 +#define bit_OSXSAVE 0x08000000 +#define bit_AVX 0x10000000 +#define bit_RDRAND 0x40000000 + +/* Features in %edx for level 1 */ +#define bit_FPU 0x00000001 +#define bit_VME 0x00000002 +#define bit_DE 0x00000004 +#define bit_PSE 0x00000008 +#define bit_TSC 0x00000010 +#define bit_MSR 0x00000020 +#define bit_PAE 0x00000040 +#define bit_MCE 0x00000080 +#define bit_CX8 0x00000100 +#define bit_APIC 0x00000200 +#define bit_SEP 0x00000800 +#define bit_MTRR 0x00001000 +#define bit_PGE 0x00002000 +#define bit_MCA 0x00004000 +#define bit_CMOV 0x00008000 +#define bit_PAT 0x00010000 +#define bit_PSE36 0x00020000 +#define bit_PSN 0x00040000 +#define bit_CLFSH 0x00080000 +#define bit_DS 0x00200000 +#define bit_ACPI 0x00400000 +#define bit_MMX 0x00800000 +#define bit_FXSR 0x01000000 +#define bit_SSE 0x02000000 +#define bit_SSE2 0x04000000 +#define bit_SS 0x08000000 +#define bit_HTT 0x10000000 +#define bit_TM 0x20000000 +#define bit_PBE 0x80000000 + +/* Features in %ebx for level 7 sub-leaf 0 */ +#define bit_FSGSBASE 0x00000001 +#define bit_SMEP 0x00000080 +#define bit_ENH_MOVSB 0x00000200 + +/* PIC on i386 uses %ebx, so preserve it. */ +#if __i386__ +#define __cpuid(__level, __eax, __ebx, __ecx, __edx) \ + __asm(" pushl %%ebx\n" \ + " cpuid\n" \ + " mov %%ebx,%1\n" \ + " popl %%ebx" \ + : "=a"(__eax), "=r" (__ebx), "=c"(__ecx), "=d"(__edx) \ + : "0"(__level)) + +#define __cpuid_count(__level, __count, __eax, __ebx, __ecx, __edx) \ + __asm(" pushl %%ebx\n" \ + " cpuid\n" \ + " mov %%ebx,%1\n" \ + " popl %%ebx" \ + : "=a"(__eax), "=r" (__ebx), "=c"(__ecx), "=d"(__edx) \ + : "0"(__level), "2"(__count)) +#else +#define __cpuid(__level, __eax, __ebx, __ecx, __edx) \ + __asm("cpuid" : "=a"(__eax), "=b" (__ebx), "=c"(__ecx), "=d"(__edx) \ + : "0"(__level)) + +#define __cpuid_count(__level, __count, __eax, __ebx, __ecx, __edx) \ + __asm("cpuid" : "=a"(__eax), "=b" (__ebx), "=c"(__ecx), "=d"(__edx) \ + : "0"(__level), "2"(__count)) +#endif + +static __inline int __get_cpuid (unsigned int __level, unsigned int *__eax, + unsigned int *__ebx, unsigned int *__ecx, + unsigned int *__edx) { + __cpuid(__level, *__eax, *__ebx, *__ecx, *__edx); + return 1; +} + +static __inline int __get_cpuid_max (unsigned int __level, unsigned int *__sig) +{ + unsigned int __eax, __ebx, __ecx, __edx; +#if __i386__ + int __cpuid_supported; + + __asm(" pushfl\n" + " popl %%eax\n" + " movl %%eax,%%ecx\n" + " xorl $0x00200000,%%eax\n" + " pushl %%eax\n" + " popfl\n" + " pushfl\n" + " popl %%eax\n" + " movl $0,%0\n" + " cmpl %%eax,%%ecx\n" + " je 1f\n" + " movl $1,%0\n" + "1:" + : "=r" (__cpuid_supported) : : "eax", "ecx"); + if (!__cpuid_supported) + return 0; +#endif + + __cpuid(__level, __eax, __ebx, __ecx, __edx); + if (__sig) + *__sig = __ebx; + return __eax; +} diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/emmintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/emmintrin.h new file mode 100755 index 0000000..b3f8569 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/emmintrin.h @@ -0,0 +1,1451 @@ +/*===---- emmintrin.h - SSE2 intrinsics ------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __EMMINTRIN_H +#define __EMMINTRIN_H + +#ifndef __SSE2__ +#error "SSE2 instruction set not enabled" +#else + +#include + +typedef double __m128d __attribute__((__vector_size__(16))); +typedef long long __m128i __attribute__((__vector_size__(16))); + +/* Type defines. */ +typedef double __v2df __attribute__ ((__vector_size__ (16))); +typedef long long __v2di __attribute__ ((__vector_size__ (16))); +typedef short __v8hi __attribute__((__vector_size__(16))); +typedef char __v16qi __attribute__((__vector_size__(16))); + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_add_sd(__m128d __a, __m128d __b) +{ + __a[0] += __b[0]; + return __a; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_add_pd(__m128d __a, __m128d __b) +{ + return __a + __b; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_sub_sd(__m128d __a, __m128d __b) +{ + __a[0] -= __b[0]; + return __a; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_sub_pd(__m128d __a, __m128d __b) +{ + return __a - __b; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_mul_sd(__m128d __a, __m128d __b) +{ + __a[0] *= __b[0]; + return __a; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_mul_pd(__m128d __a, __m128d __b) +{ + return __a * __b; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_div_sd(__m128d __a, __m128d __b) +{ + __a[0] /= __b[0]; + return __a; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_div_pd(__m128d __a, __m128d __b) +{ + return __a / __b; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_sqrt_sd(__m128d __a, __m128d __b) +{ + __m128d __c = __builtin_ia32_sqrtsd(__b); + return (__m128d) { __c[0], __a[1] }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_sqrt_pd(__m128d __a) +{ + return __builtin_ia32_sqrtpd(__a); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_min_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_minsd(__a, __b); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_min_pd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_minpd(__a, __b); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_max_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_maxsd(__a, __b); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_max_pd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_maxpd(__a, __b); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_and_pd(__m128d __a, __m128d __b) +{ + return (__m128d)((__v4si)__a & (__v4si)__b); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_andnot_pd(__m128d __a, __m128d __b) +{ + return (__m128d)(~(__v4si)__a & (__v4si)__b); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_or_pd(__m128d __a, __m128d __b) +{ + return (__m128d)((__v4si)__a | (__v4si)__b); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_xor_pd(__m128d __a, __m128d __b) +{ + return (__m128d)((__v4si)__a ^ (__v4si)__b); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpeq_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__a, __b, 0); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmplt_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__a, __b, 1); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmple_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__a, __b, 2); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpgt_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__b, __a, 1); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpge_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__b, __a, 2); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpord_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__a, __b, 7); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpunord_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__a, __b, 3); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpneq_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__a, __b, 4); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnlt_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__a, __b, 5); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnle_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__a, __b, 6); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpngt_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__b, __a, 5); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnge_pd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmppd(__b, __a, 6); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpeq_sd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmpsd(__a, __b, 0); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmplt_sd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmpsd(__a, __b, 1); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmple_sd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmpsd(__a, __b, 2); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpgt_sd(__m128d __a, __m128d __b) +{ + __m128d __c = __builtin_ia32_cmpsd(__b, __a, 1); + return (__m128d) { __c[0], __a[1] }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpge_sd(__m128d __a, __m128d __b) +{ + __m128d __c = __builtin_ia32_cmpsd(__b, __a, 2); + return (__m128d) { __c[0], __a[1] }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpord_sd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmpsd(__a, __b, 7); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpunord_sd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmpsd(__a, __b, 3); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpneq_sd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmpsd(__a, __b, 4); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnlt_sd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmpsd(__a, __b, 5); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnle_sd(__m128d __a, __m128d __b) +{ + return (__m128d)__builtin_ia32_cmpsd(__a, __b, 6); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpngt_sd(__m128d __a, __m128d __b) +{ + __m128d __c = __builtin_ia32_cmpsd(__b, __a, 5); + return (__m128d) { __c[0], __a[1] }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnge_sd(__m128d __a, __m128d __b) +{ + __m128d __c = __builtin_ia32_cmpsd(__b, __a, 6); + return (__m128d) { __c[0], __a[1] }; +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comieq_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_comisdeq(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comilt_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_comisdlt(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comile_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_comisdle(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comigt_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_comisdgt(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comige_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_comisdge(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comineq_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_comisdneq(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomieq_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_ucomisdeq(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomilt_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_ucomisdlt(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomile_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_ucomisdle(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomigt_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_ucomisdgt(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomige_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_ucomisdge(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomineq_sd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_ucomisdneq(__a, __b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtpd_ps(__m128d __a) +{ + return __builtin_ia32_cvtpd2ps(__a); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cvtps_pd(__m128 __a) +{ + return __builtin_ia32_cvtps2pd(__a); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepi32_pd(__m128i __a) +{ + return __builtin_ia32_cvtdq2pd((__v4si)__a); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtpd_epi32(__m128d __a) +{ + return __builtin_ia32_cvtpd2dq(__a); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsd_si32(__m128d __a) +{ + return __builtin_ia32_cvtsd2si(__a); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsd_ss(__m128 __a, __m128d __b) +{ + __a[0] = __b[0]; + return __a; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsi32_sd(__m128d __a, int __b) +{ + __a[0] = __b; + return __a; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cvtss_sd(__m128d __a, __m128 __b) +{ + __a[0] = __b[0]; + return __a; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvttpd_epi32(__m128d __a) +{ + return (__m128i)__builtin_ia32_cvttpd2dq(__a); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_cvttsd_si32(__m128d __a) +{ + return __a[0]; +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtpd_pi32(__m128d __a) +{ + return (__m64)__builtin_ia32_cvtpd2pi(__a); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cvttpd_pi32(__m128d __a) +{ + return (__m64)__builtin_ia32_cvttpd2pi(__a); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cvtpi32_pd(__m64 __a) +{ + return __builtin_ia32_cvtpi2pd((__v2si)__a); +} + +static __inline__ double __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsd_f64(__m128d __a) +{ + return __a[0]; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_load_pd(double const *__dp) +{ + return *(__m128d*)__dp; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_load1_pd(double const *__dp) +{ + struct __mm_load1_pd_struct { + double __u; + } __attribute__((__packed__, __may_alias__)); + double __u = ((struct __mm_load1_pd_struct*)__dp)->__u; + return (__m128d){ __u, __u }; +} + +#define _mm_load_pd1(dp) _mm_load1_pd(dp) + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_loadr_pd(double const *__dp) +{ + __m128d __u = *(__m128d*)__dp; + return __builtin_shufflevector(__u, __u, 1, 0); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_loadu_pd(double const *__dp) +{ + struct __loadu_pd { + __m128d __v; + } __attribute__((packed, may_alias)); + return ((struct __loadu_pd*)__dp)->__v; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_load_sd(double const *__dp) +{ + struct __mm_load_sd_struct { + double __u; + } __attribute__((__packed__, __may_alias__)); + double __u = ((struct __mm_load_sd_struct*)__dp)->__u; + return (__m128d){ __u, 0 }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_loadh_pd(__m128d __a, double const *__dp) +{ + struct __mm_loadh_pd_struct { + double __u; + } __attribute__((__packed__, __may_alias__)); + double __u = ((struct __mm_loadh_pd_struct*)__dp)->__u; + return (__m128d){ __a[0], __u }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_loadl_pd(__m128d __a, double const *__dp) +{ + struct __mm_loadl_pd_struct { + double __u; + } __attribute__((__packed__, __may_alias__)); + double __u = ((struct __mm_loadl_pd_struct*)__dp)->__u; + return (__m128d){ __u, __a[1] }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_set_sd(double __w) +{ + return (__m128d){ __w, 0 }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_set1_pd(double __w) +{ + return (__m128d){ __w, __w }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_set_pd(double __w, double __x) +{ + return (__m128d){ __x, __w }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_setr_pd(double __w, double __x) +{ + return (__m128d){ __w, __x }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_setzero_pd(void) +{ + return (__m128d){ 0, 0 }; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_move_sd(__m128d __a, __m128d __b) +{ + return (__m128d){ __b[0], __a[1] }; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_store_sd(double *__dp, __m128d __a) +{ + struct __mm_store_sd_struct { + double __u; + } __attribute__((__packed__, __may_alias__)); + ((struct __mm_store_sd_struct*)__dp)->__u = __a[0]; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_store1_pd(double *__dp, __m128d __a) +{ + struct __mm_store1_pd_struct { + double __u[2]; + } __attribute__((__packed__, __may_alias__)); + ((struct __mm_store1_pd_struct*)__dp)->__u[0] = __a[0]; + ((struct __mm_store1_pd_struct*)__dp)->__u[1] = __a[0]; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_store_pd(double *__dp, __m128d __a) +{ + *(__m128d *)__dp = __a; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_storeu_pd(double *__dp, __m128d __a) +{ + __builtin_ia32_storeupd(__dp, __a); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_storer_pd(double *__dp, __m128d __a) +{ + __a = __builtin_shufflevector(__a, __a, 1, 0); + *(__m128d *)__dp = __a; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_storeh_pd(double *__dp, __m128d __a) +{ + struct __mm_storeh_pd_struct { + double __u; + } __attribute__((__packed__, __may_alias__)); + ((struct __mm_storeh_pd_struct*)__dp)->__u = __a[1]; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_storel_pd(double *__dp, __m128d __a) +{ + struct __mm_storeh_pd_struct { + double __u; + } __attribute__((__packed__, __may_alias__)); + ((struct __mm_storeh_pd_struct*)__dp)->__u = __a[0]; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_add_epi8(__m128i __a, __m128i __b) +{ + return (__m128i)((__v16qi)__a + (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_add_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)((__v8hi)__a + (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_add_epi32(__m128i __a, __m128i __b) +{ + return (__m128i)((__v4si)__a + (__v4si)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_add_si64(__m64 __a, __m64 __b) +{ + return __a + __b; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_add_epi64(__m128i __a, __m128i __b) +{ + return __a + __b; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_adds_epi8(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_paddsb128((__v16qi)__a, (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_adds_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_paddsw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_adds_epu8(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_paddusb128((__v16qi)__a, (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_adds_epu16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_paddusw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_avg_epu8(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pavgb128((__v16qi)__a, (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_avg_epu16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pavgw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_madd_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pmaddwd128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_max_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pmaxsw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_max_epu8(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pmaxub128((__v16qi)__a, (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_min_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pminsw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_min_epu8(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pminub128((__v16qi)__a, (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mulhi_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pmulhw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mulhi_epu16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pmulhuw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mullo_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)((__v8hi)__a * (__v8hi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_mul_su32(__m64 __a, __m64 __b) +{ + return __builtin_ia32_pmuludq((__v2si)__a, (__v2si)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mul_epu32(__m128i __a, __m128i __b) +{ + return __builtin_ia32_pmuludq128((__v4si)__a, (__v4si)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sad_epu8(__m128i __a, __m128i __b) +{ + return __builtin_ia32_psadbw128((__v16qi)__a, (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sub_epi8(__m128i __a, __m128i __b) +{ + return (__m128i)((__v16qi)__a - (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sub_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)((__v8hi)__a - (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sub_epi32(__m128i __a, __m128i __b) +{ + return (__m128i)((__v4si)__a - (__v4si)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sub_si64(__m64 __a, __m64 __b) +{ + return __a - __b; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sub_epi64(__m128i __a, __m128i __b) +{ + return __a - __b; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_subs_epi8(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_psubsb128((__v16qi)__a, (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_subs_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_psubsw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_subs_epu8(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_psubusb128((__v16qi)__a, (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_subs_epu16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_psubusw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_and_si128(__m128i __a, __m128i __b) +{ + return __a & __b; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_andnot_si128(__m128i __a, __m128i __b) +{ + return ~__a & __b; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_or_si128(__m128i __a, __m128i __b) +{ + return __a | __b; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_xor_si128(__m128i __a, __m128i __b) +{ + return __a ^ __b; +} + +#define _mm_slli_si128(a, count) __extension__ ({ \ + _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wshadow\""); \ + __m128i __a = (a); \ + _Pragma("clang diagnostic pop"); \ + (__m128i)__builtin_ia32_pslldqi128(__a, (count)*8); }) + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_slli_epi16(__m128i __a, int __count) +{ + return (__m128i)__builtin_ia32_psllwi128((__v8hi)__a, __count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sll_epi16(__m128i __a, __m128i __count) +{ + return (__m128i)__builtin_ia32_psllw128((__v8hi)__a, (__v8hi)__count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_slli_epi32(__m128i __a, int __count) +{ + return (__m128i)__builtin_ia32_pslldi128((__v4si)__a, __count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sll_epi32(__m128i __a, __m128i __count) +{ + return (__m128i)__builtin_ia32_pslld128((__v4si)__a, (__v4si)__count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_slli_epi64(__m128i __a, int __count) +{ + return __builtin_ia32_psllqi128(__a, __count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sll_epi64(__m128i __a, __m128i __count) +{ + return __builtin_ia32_psllq128(__a, __count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_srai_epi16(__m128i __a, int __count) +{ + return (__m128i)__builtin_ia32_psrawi128((__v8hi)__a, __count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sra_epi16(__m128i __a, __m128i __count) +{ + return (__m128i)__builtin_ia32_psraw128((__v8hi)__a, (__v8hi)__count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_srai_epi32(__m128i __a, int __count) +{ + return (__m128i)__builtin_ia32_psradi128((__v4si)__a, __count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sra_epi32(__m128i __a, __m128i __count) +{ + return (__m128i)__builtin_ia32_psrad128((__v4si)__a, (__v4si)__count); +} + + +#define _mm_srli_si128(a, count) __extension__ ({ \ + _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wshadow\""); \ + __m128i __a = (a); \ + _Pragma("clang diagnostic pop"); \ + (__m128i)__builtin_ia32_psrldqi128(__a, (count)*8); }) + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_srli_epi16(__m128i __a, int __count) +{ + return (__m128i)__builtin_ia32_psrlwi128((__v8hi)__a, __count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_srl_epi16(__m128i __a, __m128i __count) +{ + return (__m128i)__builtin_ia32_psrlw128((__v8hi)__a, (__v8hi)__count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_srli_epi32(__m128i __a, int __count) +{ + return (__m128i)__builtin_ia32_psrldi128((__v4si)__a, __count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_srl_epi32(__m128i __a, __m128i __count) +{ + return (__m128i)__builtin_ia32_psrld128((__v4si)__a, (__v4si)__count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_srli_epi64(__m128i __a, int __count) +{ + return __builtin_ia32_psrlqi128(__a, __count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_srl_epi64(__m128i __a, __m128i __count) +{ + return __builtin_ia32_psrlq128(__a, __count); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmpeq_epi8(__m128i __a, __m128i __b) +{ + return (__m128i)((__v16qi)__a == (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmpeq_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)((__v8hi)__a == (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmpeq_epi32(__m128i __a, __m128i __b) +{ + return (__m128i)((__v4si)__a == (__v4si)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmpgt_epi8(__m128i __a, __m128i __b) +{ + /* This function always performs a signed comparison, but __v16qi is a char + which may be signed or unsigned. */ + typedef signed char __v16qs __attribute__((__vector_size__(16))); + return (__m128i)((__v16qs)__a > (__v16qs)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmpgt_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)((__v8hi)__a > (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmpgt_epi32(__m128i __a, __m128i __b) +{ + return (__m128i)((__v4si)__a > (__v4si)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmplt_epi8(__m128i __a, __m128i __b) +{ + return _mm_cmpgt_epi8(__b, __a); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmplt_epi16(__m128i __a, __m128i __b) +{ + return _mm_cmpgt_epi16(__b, __a); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmplt_epi32(__m128i __a, __m128i __b) +{ + return _mm_cmpgt_epi32(__b, __a); +} + +#ifdef __x86_64__ +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsi64_sd(__m128d __a, long long __b) +{ + __a[0] = __b; + return __a; +} + +static __inline__ long long __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsd_si64(__m128d __a) +{ + return __builtin_ia32_cvtsd2si64(__a); +} + +static __inline__ long long __attribute__((__always_inline__, __nodebug__)) +_mm_cvttsd_si64(__m128d __a) +{ + return __a[0]; +} +#endif + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepi32_ps(__m128i __a) +{ + return __builtin_ia32_cvtdq2ps((__v4si)__a); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtps_epi32(__m128 __a) +{ + return (__m128i)__builtin_ia32_cvtps2dq(__a); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvttps_epi32(__m128 __a) +{ + return (__m128i)__builtin_ia32_cvttps2dq(__a); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsi32_si128(int __a) +{ + return (__m128i)(__v4si){ __a, 0, 0, 0 }; +} + +#ifdef __x86_64__ +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsi64_si128(long long __a) +{ + return (__m128i){ __a, 0 }; +} +#endif + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsi128_si32(__m128i __a) +{ + __v4si __b = (__v4si)__a; + return __b[0]; +} + +#ifdef __x86_64__ +static __inline__ long long __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsi128_si64(__m128i __a) +{ + return __a[0]; +} +#endif + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_load_si128(__m128i const *__p) +{ + return *__p; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_loadu_si128(__m128i const *__p) +{ + struct __loadu_si128 { + __m128i __v; + } __attribute__((packed, may_alias)); + return ((struct __loadu_si128*)__p)->__v; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_loadl_epi64(__m128i const *__p) +{ + struct __mm_loadl_epi64_struct { + long long __u; + } __attribute__((__packed__, __may_alias__)); + return (__m128i) { ((struct __mm_loadl_epi64_struct*)__p)->__u, 0}; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_set_epi64x(long long q1, long long q0) +{ + return (__m128i){ q0, q1 }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_set_epi64(__m64 q1, __m64 q0) +{ + return (__m128i){ (long long)q0, (long long)q1 }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_set_epi32(int i3, int i2, int i1, int i0) +{ + return (__m128i)(__v4si){ i0, i1, i2, i3}; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_set_epi16(short w7, short w6, short w5, short w4, short w3, short w2, short w1, short w0) +{ + return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_set_epi8(char b15, char b14, char b13, char b12, char b11, char b10, char b9, char b8, char b7, char b6, char b5, char b4, char b3, char b2, char b1, char b0) +{ + return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_set1_epi64x(long long __q) +{ + return (__m128i){ __q, __q }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_set1_epi64(__m64 __q) +{ + return (__m128i){ (long long)__q, (long long)__q }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_set1_epi32(int __i) +{ + return (__m128i)(__v4si){ __i, __i, __i, __i }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_set1_epi16(short __w) +{ + return (__m128i)(__v8hi){ __w, __w, __w, __w, __w, __w, __w, __w }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_set1_epi8(char __b) +{ + return (__m128i)(__v16qi){ __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b, __b }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_setr_epi64(__m64 q0, __m64 q1) +{ + return (__m128i){ (long long)q0, (long long)q1 }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_setr_epi32(int i0, int i1, int i2, int i3) +{ + return (__m128i)(__v4si){ i0, i1, i2, i3}; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_setr_epi16(short w0, short w1, short w2, short w3, short w4, short w5, short w6, short w7) +{ + return (__m128i)(__v8hi){ w0, w1, w2, w3, w4, w5, w6, w7 }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_setr_epi8(char b0, char b1, char b2, char b3, char b4, char b5, char b6, char b7, char b8, char b9, char b10, char b11, char b12, char b13, char b14, char b15) +{ + return (__m128i)(__v16qi){ b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15 }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_setzero_si128(void) +{ + return (__m128i){ 0LL, 0LL }; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_store_si128(__m128i *__p, __m128i __b) +{ + *__p = __b; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_storeu_si128(__m128i *__p, __m128i __b) +{ + __builtin_ia32_storedqu((char *)__p, (__v16qi)__b); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_maskmoveu_si128(__m128i __d, __m128i __n, char *__p) +{ + __builtin_ia32_maskmovdqu((__v16qi)__d, (__v16qi)__n, __p); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_storel_epi64(__m128i *__p, __m128i __a) +{ + struct __mm_storel_epi64_struct { + long long __u; + } __attribute__((__packed__, __may_alias__)); + ((struct __mm_storel_epi64_struct*)__p)->__u = __a[0]; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_stream_pd(double *__p, __m128d __a) +{ + __builtin_ia32_movntpd(__p, __a); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_stream_si128(__m128i *__p, __m128i __a) +{ + __builtin_ia32_movntdq(__p, __a); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_stream_si32(int *__p, int __a) +{ + __builtin_ia32_movnti(__p, __a); +} + +#ifdef __x86_64__ +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_stream_si64(long long *__p, long long __a) +{ + __builtin_ia32_movnti64(__p, __a); +} +#endif + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_clflush(void const *__p) +{ + __builtin_ia32_clflush(__p); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_lfence(void) +{ + __builtin_ia32_lfence(); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_mfence(void) +{ + __builtin_ia32_mfence(); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_packs_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_packsswb128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_packs_epi32(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_packssdw128((__v4si)__a, (__v4si)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_packus_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_packuswb128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_extract_epi16(__m128i __a, int __imm) +{ + __v8hi __b = (__v8hi)__a; + return (unsigned short)__b[__imm & 7]; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_insert_epi16(__m128i __a, int __b, int __imm) +{ + __v8hi __c = (__v8hi)__a; + __c[__imm & 7] = __b; + return (__m128i)__c; +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_movemask_epi8(__m128i __a) +{ + return __builtin_ia32_pmovmskb128((__v16qi)__a); +} + +#define _mm_shuffle_epi32(a, imm) __extension__ ({ \ + _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wshadow\""); \ + __m128i __a = (a); \ + _Pragma("clang diagnostic pop"); \ + (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si) _mm_set1_epi32(0), \ + (imm) & 0x3, ((imm) & 0xc) >> 2, \ + ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6); }) + +#define _mm_shufflelo_epi16(a, imm) __extension__ ({ \ + _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wshadow\""); \ + __m128i __a = (a); \ + _Pragma("clang diagnostic pop"); \ + (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi) _mm_set1_epi16(0), \ + (imm) & 0x3, ((imm) & 0xc) >> 2, \ + ((imm) & 0x30) >> 4, ((imm) & 0xc0) >> 6, \ + 4, 5, 6, 7); }) + +#define _mm_shufflehi_epi16(a, imm) __extension__ ({ \ + _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wshadow\""); \ + __m128i __a = (a); \ + _Pragma("clang diagnostic pop"); \ + (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi) _mm_set1_epi16(0), \ + 0, 1, 2, 3, \ + 4 + (((imm) & 0x03) >> 0), \ + 4 + (((imm) & 0x0c) >> 2), \ + 4 + (((imm) & 0x30) >> 4), \ + 4 + (((imm) & 0xc0) >> 6)); }) + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_unpackhi_epi8(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_shufflevector((__v16qi)__a, (__v16qi)__b, 8, 16+8, 9, 16+9, 10, 16+10, 11, 16+11, 12, 16+12, 13, 16+13, 14, 16+14, 15, 16+15); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_unpackhi_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 4, 8+4, 5, 8+5, 6, 8+6, 7, 8+7); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_unpackhi_epi32(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 2, 4+2, 3, 4+3); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_unpackhi_epi64(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_shufflevector(__a, __b, 1, 2+1); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_unpacklo_epi8(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_shufflevector((__v16qi)__a, (__v16qi)__b, 0, 16+0, 1, 16+1, 2, 16+2, 3, 16+3, 4, 16+4, 5, 16+5, 6, 16+6, 7, 16+7); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_unpacklo_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_shufflevector((__v8hi)__a, (__v8hi)__b, 0, 8+0, 1, 8+1, 2, 8+2, 3, 8+3); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_unpacklo_epi32(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_shufflevector((__v4si)__a, (__v4si)__b, 0, 4+0, 1, 4+1); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_unpacklo_epi64(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_shufflevector(__a, __b, 0, 2+0); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_movepi64_pi64(__m128i __a) +{ + return (__m64)__a[0]; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_movpi64_epi64(__m64 __a) +{ + return (__m128i){ (long long)__a, 0 }; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_move_epi64(__m128i __a) +{ + return __builtin_shufflevector(__a, (__m128i){ 0 }, 0, 2); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_unpackhi_pd(__m128d __a, __m128d __b) +{ + return __builtin_shufflevector(__a, __b, 1, 2+1); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_unpacklo_pd(__m128d __a, __m128d __b) +{ + return __builtin_shufflevector(__a, __b, 0, 2+0); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_movemask_pd(__m128d __a) +{ + return __builtin_ia32_movmskpd(__a); +} + +#define _mm_shuffle_pd(a, b, i) __extension__ ({ \ + _Pragma("clang diagnostic push") _Pragma("clang diagnostic ignored \"-Wshadow\""); \ + __m128d __a = (a); \ + __m128d __b = (b); \ + _Pragma("clang diagnostic pop"); \ + __builtin_shufflevector(__a, __b, (i) & 1, (((i) & 2) >> 1) + 2); }) + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_castpd_ps(__m128d __a) +{ + return (__m128)__a; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_castpd_si128(__m128d __a) +{ + return (__m128i)__a; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_castps_pd(__m128 __a) +{ + return (__m128d)__a; +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_castps_si128(__m128 __a) +{ + return (__m128i)__a; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_castsi128_ps(__m128i __a) +{ + return (__m128)__a; +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_castsi128_pd(__m128i __a) +{ + return (__m128d)__a; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_pause(void) +{ + __asm__ volatile ("pause"); +} + +#define _MM_SHUFFLE2(x, y) (((x) << 1) | (y)) + +#endif /* __SSE2__ */ + +#endif /* __EMMINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/f16cintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/f16cintrin.h new file mode 100755 index 0000000..f3614c0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/f16cintrin.h @@ -0,0 +1,58 @@ +/*===---- f16cintrin.h - F16C intrinsics -----------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __F16C__ +# error "F16C instruction is not enabled" +#endif /* __F16C__ */ + +#ifndef __F16CINTRIN_H +#define __F16CINTRIN_H + +typedef float __v8sf __attribute__ ((__vector_size__ (32))); +typedef float __m256 __attribute__ ((__vector_size__ (32))); + +#define _mm_cvtps_ph(a, imm) __extension__ ({ \ + __m128 __a = (a); \ + (__m128i)__builtin_ia32_vcvtps2ph((__v4sf)__a, (imm)); }) + +#define _mm256_cvtps_ph(a, imm) __extension__ ({ \ + __m256 __a = (a); \ + (__m128i)__builtin_ia32_vcvtps2ph256((__v8sf)__a, (imm)); }) + +static __inline __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtph_ps(__m128i __a) +{ + return (__m128)__builtin_ia32_vcvtph2ps((__v8hi)__a); +} + +static __inline __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_cvtph_ps(__m128i __a) +{ + return (__m256)__builtin_ia32_vcvtph2ps256((__v8hi)__a); +} + +#endif /* __F16CINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/float.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/float.h new file mode 100755 index 0000000..2cb13d3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/float.h @@ -0,0 +1,124 @@ +/*===---- float.h - Characteristics of floating point types ----------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __FLOAT_H +#define __FLOAT_H + +/* If we're on MinGW, fall back to the system's float.h, which might have + * additional definitions provided for Windows. + * For more details see http://msdn.microsoft.com/en-us/library/y0ybw9fy.aspx + */ +#if (defined(__MINGW32__) || defined(_MSC_VER)) && \ + defined(__has_include_next) && __has_include_next() +# include_next + +/* Undefine anything that we'll be redefining below. */ +# undef FLT_EVAL_METHOD +# undef FLT_ROUNDS +# undef FLT_RADIX +# undef FLT_MANT_DIG +# undef DBL_MANT_DIG +# undef LDBL_MANT_DIG +# undef DECIMAL_DIG +# undef FLT_DIG +# undef DBL_DIG +# undef LDBL_DIG +# undef FLT_MIN_EXP +# undef DBL_MIN_EXP +# undef LDBL_MIN_EXP +# undef FLT_MIN_10_EXP +# undef DBL_MIN_10_EXP +# undef LDBL_MIN_10_EXP +# undef FLT_MAX_EXP +# undef DBL_MAX_EXP +# undef LDBL_MAX_EXP +# undef FLT_MAX_10_EXP +# undef DBL_MAX_10_EXP +# undef LDBL_MAX_10_EXP +# undef FLT_MAX +# undef DBL_MAX +# undef LDBL_MAX +# undef FLT_EPSILON +# undef DBL_EPSILON +# undef LDBL_EPSILON +# undef FLT_MIN +# undef DBL_MIN +# undef LDBL_MIN +# if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) +# undef FLT_TRUE_MIN +# undef DBL_TRUE_MIN +# undef LDBL_TRUE_MIN +# endif +#endif + +/* Characteristics of floating point types, C99 5.2.4.2.2 */ + +#define FLT_EVAL_METHOD __FLT_EVAL_METHOD__ +#define FLT_ROUNDS (__builtin_flt_rounds()) +#define FLT_RADIX __FLT_RADIX__ + +#define FLT_MANT_DIG __FLT_MANT_DIG__ +#define DBL_MANT_DIG __DBL_MANT_DIG__ +#define LDBL_MANT_DIG __LDBL_MANT_DIG__ + +#define DECIMAL_DIG __DECIMAL_DIG__ + +#define FLT_DIG __FLT_DIG__ +#define DBL_DIG __DBL_DIG__ +#define LDBL_DIG __LDBL_DIG__ + +#define FLT_MIN_EXP __FLT_MIN_EXP__ +#define DBL_MIN_EXP __DBL_MIN_EXP__ +#define LDBL_MIN_EXP __LDBL_MIN_EXP__ + +#define FLT_MIN_10_EXP __FLT_MIN_10_EXP__ +#define DBL_MIN_10_EXP __DBL_MIN_10_EXP__ +#define LDBL_MIN_10_EXP __LDBL_MIN_10_EXP__ + +#define FLT_MAX_EXP __FLT_MAX_EXP__ +#define DBL_MAX_EXP __DBL_MAX_EXP__ +#define LDBL_MAX_EXP __LDBL_MAX_EXP__ + +#define FLT_MAX_10_EXP __FLT_MAX_10_EXP__ +#define DBL_MAX_10_EXP __DBL_MAX_10_EXP__ +#define LDBL_MAX_10_EXP __LDBL_MAX_10_EXP__ + +#define FLT_MAX __FLT_MAX__ +#define DBL_MAX __DBL_MAX__ +#define LDBL_MAX __LDBL_MAX__ + +#define FLT_EPSILON __FLT_EPSILON__ +#define DBL_EPSILON __DBL_EPSILON__ +#define LDBL_EPSILON __LDBL_EPSILON__ + +#define FLT_MIN __FLT_MIN__ +#define DBL_MIN __DBL_MIN__ +#define LDBL_MIN __LDBL_MIN__ + +#if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) +# define FLT_TRUE_MIN __FLT_DENORM_MIN__ +# define DBL_TRUE_MIN __DBL_DENORM_MIN__ +# define LDBL_TRUE_MIN __LDBL_DENORM_MIN__ +#endif + +#endif /* __FLOAT_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/fma4intrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/fma4intrin.h new file mode 100755 index 0000000..c30920d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/fma4intrin.h @@ -0,0 +1,231 @@ +/*===---- fma4intrin.h - FMA4 intrinsics -----------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __X86INTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __FMA4INTRIN_H +#define __FMA4INTRIN_H + +#ifndef __FMA4__ +# error "FMA4 instruction set is not enabled" +#else + +#include + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_macc_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmaddps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_macc_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmaddpd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_macc_ss(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmaddss(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_macc_sd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmaddsd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_msub_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmsubps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_msub_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmsubpd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_msub_ss(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmsubss(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_msub_sd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmsubsd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_nmacc_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfnmaddps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_nmacc_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfnmaddpd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_nmacc_ss(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfnmaddss(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_nmacc_sd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfnmaddsd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_nmsub_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfnmsubps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_nmsub_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfnmsubpd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_nmsub_ss(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfnmsubss(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_nmsub_sd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfnmsubsd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_maddsub_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmaddsubps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_maddsub_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmaddsubpd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_msubadd_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmsubaddps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_msubadd_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmsubaddpd(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_macc_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfmaddps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_macc_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfmaddpd256(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_msub_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfmsubps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_msub_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfmsubpd256(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_nmacc_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfnmaddps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_nmacc_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfnmaddpd256(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_nmsub_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfnmsubps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_nmsub_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfnmsubpd256(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_maddsub_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfmaddsubps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_maddsub_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfmaddsubpd256(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_msubadd_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfmsubaddps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_msubadd_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfmsubaddpd256(__A, __B, __C); +} + +#endif /* __FMA4__ */ + +#endif /* __FMA4INTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/fmaintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/fmaintrin.h new file mode 100755 index 0000000..6bfd5a8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/fmaintrin.h @@ -0,0 +1,229 @@ +/*===---- fma4intrin.h - FMA4 intrinsics -----------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __IMMINTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __FMAINTRIN_H +#define __FMAINTRIN_H + +#ifndef __FMA__ +# error "FMA instruction set is not enabled" +#else + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_fmadd_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmaddps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_fmadd_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmaddpd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_fmadd_ss(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmaddss(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_fmadd_sd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmaddsd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_fmsub_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmsubps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_fmsub_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmsubpd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_fmsub_ss(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmsubss(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_fmsub_sd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmsubsd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_fnmadd_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfnmaddps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_fnmadd_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfnmaddpd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_fnmadd_ss(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfnmaddss(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_fnmadd_sd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfnmaddsd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_fnmsub_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfnmsubps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_fnmsub_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfnmsubpd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_fnmsub_ss(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfnmsubss(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_fnmsub_sd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfnmsubsd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_fmaddsub_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmaddsubps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_fmaddsub_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmaddsubpd(__A, __B, __C); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_fmsubadd_ps(__m128 __A, __m128 __B, __m128 __C) +{ + return (__m128)__builtin_ia32_vfmsubaddps(__A, __B, __C); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_fmsubadd_pd(__m128d __A, __m128d __B, __m128d __C) +{ + return (__m128d)__builtin_ia32_vfmsubaddpd(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_fmadd_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfmaddps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_fmadd_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfmaddpd256(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_fmsub_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfmsubps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_fmsub_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfmsubpd256(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_fnmadd_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfnmaddps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_fnmadd_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfnmaddpd256(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_fnmsub_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfnmsubps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_fnmsub_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfnmsubpd256(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_fmaddsub_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfmaddsubps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_fmaddsub_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfmaddsubpd256(__A, __B, __C); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_fmsubadd_ps(__m256 __A, __m256 __B, __m256 __C) +{ + return (__m256)__builtin_ia32_vfmsubaddps256(__A, __B, __C); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_fmsubadd_pd(__m256d __A, __m256d __B, __m256d __C) +{ + return (__m256d)__builtin_ia32_vfmsubaddpd256(__A, __B, __C); +} + +#endif /* __FMA__ */ + +#endif /* __FMAINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/immintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/immintrin.h new file mode 100755 index 0000000..15d6e05 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/immintrin.h @@ -0,0 +1,118 @@ +/*===---- immintrin.h - Intel intrinsics -----------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __IMMINTRIN_H +#define __IMMINTRIN_H + +#ifdef __MMX__ +#include +#endif + +#ifdef __SSE__ +#include +#endif + +#ifdef __SSE2__ +#include +#endif + +#ifdef __SSE3__ +#include +#endif + +#ifdef __SSSE3__ +#include +#endif + +#if defined (__SSE4_2__) || defined (__SSE4_1__) +#include +#endif + +#if defined (__AES__) +#include +#endif + +#ifdef __AVX__ +#include +#endif + +#ifdef __AVX2__ +#include +#endif + +#ifdef __BMI__ +#include +#endif + +#ifdef __BMI2__ +#include +#endif + +#ifdef __LZCNT__ +#include +#endif + +#ifdef __FMA__ +#include +#endif + +#ifdef __RDRND__ +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_rdrand16_step(unsigned short *__p) +{ + return __builtin_ia32_rdrand16_step(__p); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_rdrand32_step(unsigned int *__p) +{ + return __builtin_ia32_rdrand32_step(__p); +} + +#ifdef __x86_64__ +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_rdrand64_step(unsigned long long *__p) +{ + return __builtin_ia32_rdrand64_step(__p); +} +#endif +#endif /* __RDRND__ */ + +#ifdef __RTM__ +#include +#endif + +/* FIXME: check __HLE__ as well when HLE is supported. */ +#if defined (__RTM__) +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_xtest(void) +{ + return __builtin_ia32_xtest(); +} +#endif + +#ifdef __SHA__ +#include +#endif + +#endif /* __IMMINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/iso646.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/iso646.h new file mode 100755 index 0000000..dca13c5 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/iso646.h @@ -0,0 +1,43 @@ +/*===---- iso646.h - Standard header for alternate spellings of operators---=== + * + * Copyright (c) 2008 Eli Friedman + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __ISO646_H +#define __ISO646_H + +#ifndef __cplusplus +#define and && +#define and_eq &= +#define bitand & +#define bitor | +#define compl ~ +#define not ! +#define not_eq != +#define or || +#define or_eq |= +#define xor ^ +#define xor_eq ^= +#endif + +#endif /* __ISO646_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/limits.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/limits.h new file mode 100755 index 0000000..91bd404 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/limits.h @@ -0,0 +1,119 @@ +/*===---- limits.h - Standard header for integer sizes --------------------===*\ + * + * Copyright (c) 2009 Chris Lattner + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * +\*===----------------------------------------------------------------------===*/ + +#ifndef __CLANG_LIMITS_H +#define __CLANG_LIMITS_H + +/* The system's limits.h may, in turn, try to #include_next GCC's limits.h. + Avert this #include_next madness. */ +#if defined __GNUC__ && !defined _GCC_LIMITS_H_ +#define _GCC_LIMITS_H_ +#endif + +/* System headers include a number of constants from POSIX in . + Include it if we're hosted. */ +#if __STDC_HOSTED__ && \ + defined(__has_include_next) && __has_include_next() +#include_next +#endif + +/* Many system headers try to "help us out" by defining these. No really, we + know how big each datatype is. */ +#undef SCHAR_MIN +#undef SCHAR_MAX +#undef UCHAR_MAX +#undef SHRT_MIN +#undef SHRT_MAX +#undef USHRT_MAX +#undef INT_MIN +#undef INT_MAX +#undef UINT_MAX +#undef LONG_MIN +#undef LONG_MAX +#undef ULONG_MAX + +#undef CHAR_BIT +#undef CHAR_MIN +#undef CHAR_MAX + +/* C90/99 5.2.4.2.1 */ +#define SCHAR_MAX __SCHAR_MAX__ +#define SHRT_MAX __SHRT_MAX__ +#define INT_MAX __INT_MAX__ +#define LONG_MAX __LONG_MAX__ + +#define SCHAR_MIN (-__SCHAR_MAX__-1) +#define SHRT_MIN (-__SHRT_MAX__ -1) +#define INT_MIN (-__INT_MAX__ -1) +#define LONG_MIN (-__LONG_MAX__ -1L) + +#define UCHAR_MAX (__SCHAR_MAX__*2 +1) +#define USHRT_MAX (__SHRT_MAX__ *2 +1) +#define UINT_MAX (__INT_MAX__ *2U +1U) +#define ULONG_MAX (__LONG_MAX__ *2UL+1UL) + +#ifndef MB_LEN_MAX +#define MB_LEN_MAX 1 +#endif + +#define CHAR_BIT __CHAR_BIT__ + +#ifdef __CHAR_UNSIGNED__ /* -funsigned-char */ +#define CHAR_MIN 0 +#define CHAR_MAX UCHAR_MAX +#else +#define CHAR_MIN SCHAR_MIN +#define CHAR_MAX __SCHAR_MAX__ +#endif + +/* C99 5.2.4.2.1: Added long long. + C++11 18.3.3.2: same contents as the Standard C Library header . + */ +#if __STDC_VERSION__ >= 199901 || __cplusplus >= 201103L + +#undef LLONG_MIN +#undef LLONG_MAX +#undef ULLONG_MAX + +#define LLONG_MAX __LONG_LONG_MAX__ +#define LLONG_MIN (-__LONG_LONG_MAX__-1LL) +#define ULLONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL) +#endif + +/* LONG_LONG_MIN/LONG_LONG_MAX/ULONG_LONG_MAX are a GNU extension. It's too bad + that we don't have something like #pragma poison that could be used to + deprecate a macro - the code should just use LLONG_MAX and friends. + */ +#if defined(__GNU_LIBRARY__) ? defined(__USE_GNU) : !defined(__STRICT_ANSI__) + +#undef LONG_LONG_MIN +#undef LONG_LONG_MAX +#undef ULONG_LONG_MAX + +#define LONG_LONG_MAX __LONG_LONG_MAX__ +#define LONG_LONG_MIN (-__LONG_LONG_MAX__-1LL) +#define ULONG_LONG_MAX (__LONG_LONG_MAX__*2ULL+1ULL) +#endif + +#endif /* __CLANG_LIMITS_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/lzcntintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/lzcntintrin.h new file mode 100755 index 0000000..62ab5ca --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/lzcntintrin.h @@ -0,0 +1,55 @@ +/*===---- lzcntintrin.h - LZCNT intrinsics ---------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#if !defined __X86INTRIN_H && !defined __IMMINTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __LZCNT__ +# error "LZCNT instruction is not enabled" +#endif /* __LZCNT__ */ + +#ifndef __LZCNTINTRIN_H +#define __LZCNTINTRIN_H + +static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__)) +__lzcnt16(unsigned short __X) +{ + return __builtin_clzs(__X); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__lzcnt32(unsigned int __X) +{ + return __builtin_clz(__X); +} + +#ifdef __x86_64__ +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +__lzcnt64(unsigned long long __X) +{ + return __builtin_clzll(__X); +} +#endif + +#endif /* __LZCNTINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/mm3dnow.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/mm3dnow.h new file mode 100755 index 0000000..5242d99 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/mm3dnow.h @@ -0,0 +1,162 @@ +/*===---- mm3dnow.h - 3DNow! intrinsics ------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef _MM3DNOW_H_INCLUDED +#define _MM3DNOW_H_INCLUDED + +#include +#include + +typedef float __v2sf __attribute__((__vector_size__(8))); + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_femms() { + __builtin_ia32_femms(); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pavgusb(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pavgusb((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pf2id(__m64 __m) { + return (__m64)__builtin_ia32_pf2id((__v2sf)__m); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfacc(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfacc((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfadd(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfadd((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfcmpeq(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfcmpeq((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfcmpge(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfcmpge((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfcmpgt(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfcmpgt((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfmax(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfmax((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfmin(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfmin((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfmul(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfmul((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfrcp(__m64 __m) { + return (__m64)__builtin_ia32_pfrcp((__v2sf)__m); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfrcpit1(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfrcpit1((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfrcpit2(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfrcpit2((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfrsqrt(__m64 __m) { + return (__m64)__builtin_ia32_pfrsqrt((__v2sf)__m); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfrsqrtit1(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfrsqit1((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfsub(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfsub((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfsubr(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfsubr((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pi2fd(__m64 __m) { + return (__m64)__builtin_ia32_pi2fd((__v2si)__m); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pmulhrw(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pmulhrw((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pf2iw(__m64 __m) { + return (__m64)__builtin_ia32_pf2iw((__v2sf)__m); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfnacc(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfnacc((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pfpnacc(__m64 __m1, __m64 __m2) { + return (__m64)__builtin_ia32_pfpnacc((__v2sf)__m1, (__v2sf)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pi2fw(__m64 __m) { + return (__m64)__builtin_ia32_pi2fw((__v2si)__m); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pswapdsf(__m64 __m) { + return (__m64)__builtin_ia32_pswapdsf((__v2sf)__m); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_m_pswapdsi(__m64 __m) { + return (__m64)__builtin_ia32_pswapdsi((__v2si)__m); +} + +#endif diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/mm_malloc.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/mm_malloc.h new file mode 100755 index 0000000..305afd3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/mm_malloc.h @@ -0,0 +1,75 @@ +/*===---- mm_malloc.h - Allocating and Freeing Aligned Memory Blocks -------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __MM_MALLOC_H +#define __MM_MALLOC_H + +#include + +#ifdef _WIN32 +#include +#else +#ifndef __cplusplus +extern int posix_memalign(void **__memptr, size_t __alignment, size_t __size); +#else +// Some systems (e.g. those with GNU libc) declare posix_memalign with an +// exception specifier. Via an "egregious workaround" in +// Sema::CheckEquivalentExceptionSpec, Clang accepts the following as a valid +// redeclaration of glibc's declaration. +extern "C" int posix_memalign(void **__memptr, size_t __alignment, size_t __size); +#endif +#endif + +#if !(defined(_WIN32) && defined(_mm_malloc)) +static __inline__ void *__attribute__((__always_inline__, __nodebug__, + __malloc__)) +_mm_malloc(size_t __size, size_t __align) +{ + if (__align == 1) { + return malloc(__size); + } + + if (!(__align & (__align - 1)) && __align < sizeof(void *)) + __align = sizeof(void *); + + void *__mallocedMemory; +#if defined(__MINGW32__) + __mallocedMemory = __mingw_aligned_malloc(__size, __align); +#elif defined(_WIN32) + __mallocedMemory = _aligned_malloc(__size, __align); +#else + if (posix_memalign(&__mallocedMemory, __align, __size)) + return 0; +#endif + + return __mallocedMemory; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_free(void *__p) +{ + free(__p); +} +#endif + +#endif /* __MM_MALLOC_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/mmintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/mmintrin.h new file mode 100755 index 0000000..986870a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/mmintrin.h @@ -0,0 +1,503 @@ +/*===---- mmintrin.h - MMX intrinsics --------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __MMINTRIN_H +#define __MMINTRIN_H + +#ifndef __MMX__ +#error "MMX instruction set not enabled" +#else + +typedef long long __m64 __attribute__((__vector_size__(8))); + +typedef int __v2si __attribute__((__vector_size__(8))); +typedef short __v4hi __attribute__((__vector_size__(8))); +typedef char __v8qi __attribute__((__vector_size__(8))); + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_empty(void) +{ + __builtin_ia32_emms(); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsi32_si64(int __i) +{ + return (__m64)__builtin_ia32_vec_init_v2si(__i, 0); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsi64_si32(__m64 __m) +{ + return __builtin_ia32_vec_ext_v2si((__v2si)__m, 0); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsi64_m64(long long __i) +{ + return (__m64)__i; +} + +static __inline__ long long __attribute__((__always_inline__, __nodebug__)) +_mm_cvtm64_si64(__m64 __m) +{ + return (long long)__m; +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_packs_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_packsswb((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_packs_pi32(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_packssdw((__v2si)__m1, (__v2si)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_packs_pu16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_packuswb((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_unpackhi_pi8(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_punpckhbw((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_unpackhi_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_punpckhwd((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_unpackhi_pi32(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_punpckhdq((__v2si)__m1, (__v2si)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_unpacklo_pi8(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_punpcklbw((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_unpacklo_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_punpcklwd((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_unpacklo_pi32(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_punpckldq((__v2si)__m1, (__v2si)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_add_pi8(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_paddb((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_add_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_paddw((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_add_pi32(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_paddd((__v2si)__m1, (__v2si)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_adds_pi8(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_paddsb((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_adds_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_paddsw((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_adds_pu8(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_paddusb((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_adds_pu16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_paddusw((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sub_pi8(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_psubb((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sub_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_psubw((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sub_pi32(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_psubd((__v2si)__m1, (__v2si)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_subs_pi8(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_psubsb((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_subs_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_psubsw((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_subs_pu8(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_psubusb((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_subs_pu16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_psubusw((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_madd_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_pmaddwd((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_mulhi_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_pmulhw((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_mullo_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_pmullw((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sll_pi16(__m64 __m, __m64 __count) +{ + return (__m64)__builtin_ia32_psllw((__v4hi)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_slli_pi16(__m64 __m, int __count) +{ + return (__m64)__builtin_ia32_psllwi((__v4hi)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sll_pi32(__m64 __m, __m64 __count) +{ + return (__m64)__builtin_ia32_pslld((__v2si)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_slli_pi32(__m64 __m, int __count) +{ + return (__m64)__builtin_ia32_pslldi((__v2si)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sll_si64(__m64 __m, __m64 __count) +{ + return (__m64)__builtin_ia32_psllq(__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_slli_si64(__m64 __m, int __count) +{ + return (__m64)__builtin_ia32_psllqi(__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sra_pi16(__m64 __m, __m64 __count) +{ + return (__m64)__builtin_ia32_psraw((__v4hi)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_srai_pi16(__m64 __m, int __count) +{ + return (__m64)__builtin_ia32_psrawi((__v4hi)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sra_pi32(__m64 __m, __m64 __count) +{ + return (__m64)__builtin_ia32_psrad((__v2si)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_srai_pi32(__m64 __m, int __count) +{ + return (__m64)__builtin_ia32_psradi((__v2si)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_srl_pi16(__m64 __m, __m64 __count) +{ + return (__m64)__builtin_ia32_psrlw((__v4hi)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_srli_pi16(__m64 __m, int __count) +{ + return (__m64)__builtin_ia32_psrlwi((__v4hi)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_srl_pi32(__m64 __m, __m64 __count) +{ + return (__m64)__builtin_ia32_psrld((__v2si)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_srli_pi32(__m64 __m, int __count) +{ + return (__m64)__builtin_ia32_psrldi((__v2si)__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_srl_si64(__m64 __m, __m64 __count) +{ + return (__m64)__builtin_ia32_psrlq(__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_srli_si64(__m64 __m, int __count) +{ + return (__m64)__builtin_ia32_psrlqi(__m, __count); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_and_si64(__m64 __m1, __m64 __m2) +{ + return __builtin_ia32_pand(__m1, __m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_andnot_si64(__m64 __m1, __m64 __m2) +{ + return __builtin_ia32_pandn(__m1, __m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_or_si64(__m64 __m1, __m64 __m2) +{ + return __builtin_ia32_por(__m1, __m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_xor_si64(__m64 __m1, __m64 __m2) +{ + return __builtin_ia32_pxor(__m1, __m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpeq_pi8(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_pcmpeqb((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpeq_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_pcmpeqw((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpeq_pi32(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_pcmpeqd((__v2si)__m1, (__v2si)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpgt_pi8(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_pcmpgtb((__v8qi)__m1, (__v8qi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpgt_pi16(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_pcmpgtw((__v4hi)__m1, (__v4hi)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpgt_pi32(__m64 __m1, __m64 __m2) +{ + return (__m64)__builtin_ia32_pcmpgtd((__v2si)__m1, (__v2si)__m2); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_setzero_si64(void) +{ + return (__m64){ 0LL }; +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_set_pi32(int __i1, int __i0) +{ + return (__m64)__builtin_ia32_vec_init_v2si(__i0, __i1); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_set_pi16(short __s3, short __s2, short __s1, short __s0) +{ + return (__m64)__builtin_ia32_vec_init_v4hi(__s0, __s1, __s2, __s3); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_set_pi8(char __b7, char __b6, char __b5, char __b4, char __b3, char __b2, + char __b1, char __b0) +{ + return (__m64)__builtin_ia32_vec_init_v8qi(__b0, __b1, __b2, __b3, + __b4, __b5, __b6, __b7); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_set1_pi32(int __i) +{ + return _mm_set_pi32(__i, __i); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_set1_pi16(short __w) +{ + return _mm_set_pi16(__w, __w, __w, __w); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_set1_pi8(char __b) +{ + return _mm_set_pi8(__b, __b, __b, __b, __b, __b, __b, __b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_setr_pi32(int __i0, int __i1) +{ + return _mm_set_pi32(__i1, __i0); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_setr_pi16(short __w0, short __w1, short __w2, short __w3) +{ + return _mm_set_pi16(__w3, __w2, __w1, __w0); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_setr_pi8(char __b0, char __b1, char __b2, char __b3, char __b4, char __b5, + char __b6, char __b7) +{ + return _mm_set_pi8(__b7, __b6, __b5, __b4, __b3, __b2, __b1, __b0); +} + + +/* Aliases for compatibility. */ +#define _m_empty _mm_empty +#define _m_from_int _mm_cvtsi32_si64 +#define _m_to_int _mm_cvtsi64_si32 +#define _m_packsswb _mm_packs_pi16 +#define _m_packssdw _mm_packs_pi32 +#define _m_packuswb _mm_packs_pu16 +#define _m_punpckhbw _mm_unpackhi_pi8 +#define _m_punpckhwd _mm_unpackhi_pi16 +#define _m_punpckhdq _mm_unpackhi_pi32 +#define _m_punpcklbw _mm_unpacklo_pi8 +#define _m_punpcklwd _mm_unpacklo_pi16 +#define _m_punpckldq _mm_unpacklo_pi32 +#define _m_paddb _mm_add_pi8 +#define _m_paddw _mm_add_pi16 +#define _m_paddd _mm_add_pi32 +#define _m_paddsb _mm_adds_pi8 +#define _m_paddsw _mm_adds_pi16 +#define _m_paddusb _mm_adds_pu8 +#define _m_paddusw _mm_adds_pu16 +#define _m_psubb _mm_sub_pi8 +#define _m_psubw _mm_sub_pi16 +#define _m_psubd _mm_sub_pi32 +#define _m_psubsb _mm_subs_pi8 +#define _m_psubsw _mm_subs_pi16 +#define _m_psubusb _mm_subs_pu8 +#define _m_psubusw _mm_subs_pu16 +#define _m_pmaddwd _mm_madd_pi16 +#define _m_pmulhw _mm_mulhi_pi16 +#define _m_pmullw _mm_mullo_pi16 +#define _m_psllw _mm_sll_pi16 +#define _m_psllwi _mm_slli_pi16 +#define _m_pslld _mm_sll_pi32 +#define _m_pslldi _mm_slli_pi32 +#define _m_psllq _mm_sll_si64 +#define _m_psllqi _mm_slli_si64 +#define _m_psraw _mm_sra_pi16 +#define _m_psrawi _mm_srai_pi16 +#define _m_psrad _mm_sra_pi32 +#define _m_psradi _mm_srai_pi32 +#define _m_psrlw _mm_srl_pi16 +#define _m_psrlwi _mm_srli_pi16 +#define _m_psrld _mm_srl_pi32 +#define _m_psrldi _mm_srli_pi32 +#define _m_psrlq _mm_srl_si64 +#define _m_psrlqi _mm_srli_si64 +#define _m_pand _mm_and_si64 +#define _m_pandn _mm_andnot_si64 +#define _m_por _mm_or_si64 +#define _m_pxor _mm_xor_si64 +#define _m_pcmpeqb _mm_cmpeq_pi8 +#define _m_pcmpeqw _mm_cmpeq_pi16 +#define _m_pcmpeqd _mm_cmpeq_pi32 +#define _m_pcmpgtb _mm_cmpgt_pi8 +#define _m_pcmpgtw _mm_cmpgt_pi16 +#define _m_pcmpgtd _mm_cmpgt_pi32 + +#endif /* __MMX__ */ + +#endif /* __MMINTRIN_H */ + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/module.map b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/module.map new file mode 100755 index 0000000..9f7944d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/module.map @@ -0,0 +1,156 @@ +module _Builtin_intrinsics [system] { + explicit module altivec { + requires altivec + header "altivec.h" + } + + explicit module arm { + requires arm + + explicit module neon { + requires neon + header "arm_neon.h" + export * + } + } + + explicit module intel { + requires x86 + export * + + header "immintrin.h" + header "x86intrin.h" + + explicit module mm_malloc { + header "mm_malloc.h" + export * // note: for dependency + } + + explicit module cpuid { + requires x86 + header "cpuid.h" + } + + explicit module mmx { + requires mmx + header "mmintrin.h" + } + + explicit module f16c { + requires f16c + header "f16cintrin.h" + } + + explicit module sse { + requires sse + export mmx + export * // note: for hackish dependency + header "xmmintrin.h" + } + + explicit module sse2 { + requires sse2 + export sse + header "emmintrin.h" + } + + explicit module sse3 { + requires sse3 + export sse2 + header "pmmintrin.h" + } + + explicit module ssse3 { + requires ssse3 + export sse3 + header "tmmintrin.h" + } + + explicit module sse4_1 { + requires sse41 + export ssse3 + header "smmintrin.h" + } + + explicit module sse4_2 { + requires sse42 + export sse4_1 + header "nmmintrin.h" + } + + explicit module sse4a { + requires sse4a + export sse3 + header "ammintrin.h" + } + + explicit module avx { + requires avx + export sse4_2 + header "avxintrin.h" + } + + explicit module avx2 { + requires avx2 + export avx + header "avx2intrin.h" + } + + explicit module bmi { + requires bmi + header "bmiintrin.h" + } + + explicit module bmi2 { + requires bmi2 + header "bmi2intrin.h" + } + + explicit module fma { + requires fma + header "fmaintrin.h" + } + + explicit module fma4 { + requires fma4 + export sse3 + header "fma4intrin.h" + } + + explicit module lzcnt { + requires lzcnt + header "lzcntintrin.h" + } + + explicit module popcnt { + requires popcnt + header "popcntintrin.h" + } + + explicit module mm3dnow { + requires mm3dnow + header "mm3dnow.h" + } + + explicit module xop { + requires xop + export fma4 + header "xopintrin.h" + } + + explicit module aes_pclmul { + requires aes, pclmul + header "wmmintrin.h" + } + + explicit module aes { + requires aes + header "__wmmintrin_aes.h" + } + + explicit module pclmul { + requires pclmul + header "__wmmintrin_pclmul.h" + } + } +} diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/nmmintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/nmmintrin.h new file mode 100755 index 0000000..f12622d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/nmmintrin.h @@ -0,0 +1,35 @@ +/*===---- nmmintrin.h - SSE4 intrinsics ------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef _NMMINTRIN_H +#define _NMMINTRIN_H + +#ifndef __SSE4_2__ +#error "SSE4.2 instruction set not enabled" +#else + +/* To match expectations of gcc we put the sse4.2 definitions into smmintrin.h, + just include it now then. */ +#include +#endif /* __SSE4_2__ */ +#endif /* _NMMINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/pmmintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/pmmintrin.h new file mode 100755 index 0000000..6f1fc32 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/pmmintrin.h @@ -0,0 +1,117 @@ +/*===---- pmmintrin.h - SSE3 intrinsics ------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __PMMINTRIN_H +#define __PMMINTRIN_H + +#ifndef __SSE3__ +#error "SSE3 instruction set not enabled" +#else + +#include + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_lddqu_si128(__m128i const *__p) +{ + return (__m128i)__builtin_ia32_lddqu((char const *)__p); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_addsub_ps(__m128 __a, __m128 __b) +{ + return __builtin_ia32_addsubps(__a, __b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_hadd_ps(__m128 __a, __m128 __b) +{ + return __builtin_ia32_haddps(__a, __b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_hsub_ps(__m128 __a, __m128 __b) +{ + return __builtin_ia32_hsubps(__a, __b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_movehdup_ps(__m128 __a) +{ + return __builtin_shufflevector(__a, __a, 1, 1, 3, 3); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_moveldup_ps(__m128 __a) +{ + return __builtin_shufflevector(__a, __a, 0, 0, 2, 2); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_addsub_pd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_addsubpd(__a, __b); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_hadd_pd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_haddpd(__a, __b); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_hsub_pd(__m128d __a, __m128d __b) +{ + return __builtin_ia32_hsubpd(__a, __b); +} + +#define _mm_loaddup_pd(dp) _mm_load1_pd(dp) + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_movedup_pd(__m128d __a) +{ + return __builtin_shufflevector(__a, __a, 0, 0); +} + +#define _MM_DENORMALS_ZERO_ON (0x0040) +#define _MM_DENORMALS_ZERO_OFF (0x0000) + +#define _MM_DENORMALS_ZERO_MASK (0x0040) + +#define _MM_GET_DENORMALS_ZERO_MODE() (_mm_getcsr() & _MM_DENORMALS_ZERO_MASK) +#define _MM_SET_DENORMALS_ZERO_MODE(x) (_mm_setcsr((_mm_getcsr() & ~_MM_DENORMALS_ZERO_MASK) | (x))) + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_monitor(void const *__p, unsigned __extensions, unsigned __hints) +{ + __builtin_ia32_monitor((void *)__p, __extensions, __hints); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_mwait(unsigned __extensions, unsigned __hints) +{ + __builtin_ia32_mwait(__extensions, __hints); +} + +#endif /* __SSE3__ */ + +#endif /* __PMMINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/popcntintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/popcntintrin.h new file mode 100755 index 0000000..d439daa --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/popcntintrin.h @@ -0,0 +1,45 @@ +/*===---- popcntintrin.h - POPCNT intrinsics -------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __POPCNT__ +#error "POPCNT instruction set not enabled" +#endif + +#ifndef _POPCNTINTRIN_H +#define _POPCNTINTRIN_H + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_popcnt_u32(unsigned int __A) +{ + return __builtin_popcount(__A); +} + +#ifdef __x86_64__ +static __inline__ long long __attribute__((__always_inline__, __nodebug__)) +_mm_popcnt_u64(unsigned long long __A) +{ + return __builtin_popcountll(__A); +} +#endif /* __x86_64__ */ + +#endif /* _POPCNTINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/prfchwintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/prfchwintrin.h new file mode 100755 index 0000000..9825bd8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/prfchwintrin.h @@ -0,0 +1,39 @@ +/*===---- prfchwintrin.h - PREFETCHW intrinsic -----------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#if !defined(__X86INTRIN_H) && !defined(_MM3DNOW_H_INCLUDED) +#error "Never use directly; include or instead." +#endif + +#ifndef __PRFCHWINTRIN_H +#define __PRFCHWINTRIN_H + +#if defined(__PRFCHW__) || defined(__3dNOW__) +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetchw(void *__P) +{ + __builtin_prefetch (__P, 1, 3 /* _MM_HINT_T0 */); +} +#endif + +#endif /* __PRFCHWINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/rdseedintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/rdseedintrin.h new file mode 100755 index 0000000..0fef1fa --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/rdseedintrin.h @@ -0,0 +1,52 @@ +/*===---- rdseedintrin.h - RDSEED intrinsics -------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __X86INTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __RDSEEDINTRIN_H +#define __RDSEEDINTRIN_H + +#ifdef __RDSEED__ +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_rdseed16_step(unsigned short *__p) +{ + return __builtin_ia32_rdseed16_step(__p); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_rdseed32_step(unsigned int *__p) +{ + return __builtin_ia32_rdseed32_step(__p); +} + +#ifdef __x86_64__ +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_rdseed64_step(unsigned long long *__p) +{ + return __builtin_ia32_rdseed64_step(__p); +} +#endif +#endif /* __RDSEED__ */ +#endif /* __RDSEEDINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/rtmintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/rtmintrin.h new file mode 100755 index 0000000..26149ca --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/rtmintrin.h @@ -0,0 +1,54 @@ +/*===---- rtmintrin.h - RTM intrinsics -------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __IMMINTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __RTMINTRIN_H +#define __RTMINTRIN_H + +#define _XBEGIN_STARTED (~0u) +#define _XABORT_EXPLICIT (1 << 0) +#define _XABORT_RETRY (1 << 1) +#define _XABORT_CONFLICT (1 << 2) +#define _XABORT_CAPACITY (1 << 3) +#define _XABORT_DEBUG (1 << 4) +#define _XABORT_NESTED (1 << 5) +#define _XABORT_CODE(x) (((x) >> 24) & 0xFF) + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_xbegin(void) +{ + return __builtin_ia32_xbegin(); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_xend(void) +{ + __builtin_ia32_xend(); +} + +#define _xabort(imm) __builtin_ia32_xabort((imm)) + +#endif /* __RTMINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/shaintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/shaintrin.h new file mode 100755 index 0000000..66ed055 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/shaintrin.h @@ -0,0 +1,74 @@ +/*===---- shaintrin.h - SHA intrinsics -------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __IMMINTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __SHAINTRIN_H +#define __SHAINTRIN_H + +#if !defined (__SHA__) +# error "SHA instructions not enabled" +#endif + +#define _mm_sha1rnds4_epu32(V1, V2, M) __extension__ ({ \ + __builtin_ia32_sha1rnds4((V1), (V2), (M)); }) + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sha1nexte_epu32(__m128i __X, __m128i __Y) +{ + return __builtin_ia32_sha1nexte(__X, __Y); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sha1msg1_epu32(__m128i __X, __m128i __Y) +{ + return __builtin_ia32_sha1msg1(__X, __Y); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sha1msg2_epu32(__m128i __X, __m128i __Y) +{ + return __builtin_ia32_sha1msg2(__X, __Y); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sha256rnds2_epu32(__m128i __X, __m128i __Y, __m128i __Z) +{ + return __builtin_ia32_sha256rnds2(__X, __Y, __Z); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sha256msg1_epu32(__m128i __X, __m128i __Y) +{ + return __builtin_ia32_sha256msg1(__X, __Y); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sha256msg2_epu32(__m128i __X, __m128i __Y) +{ + return __builtin_ia32_sha256msg2(__X, __Y); +} + +#endif /* __SHAINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/smmintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/smmintrin.h new file mode 100755 index 0000000..53b3ccb --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/smmintrin.h @@ -0,0 +1,468 @@ +/*===---- smmintrin.h - SSE4 intrinsics ------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef _SMMINTRIN_H +#define _SMMINTRIN_H + +#ifndef __SSE4_1__ +#error "SSE4.1 instruction set not enabled" +#else + +#include + +/* SSE4 Rounding macros. */ +#define _MM_FROUND_TO_NEAREST_INT 0x00 +#define _MM_FROUND_TO_NEG_INF 0x01 +#define _MM_FROUND_TO_POS_INF 0x02 +#define _MM_FROUND_TO_ZERO 0x03 +#define _MM_FROUND_CUR_DIRECTION 0x04 + +#define _MM_FROUND_RAISE_EXC 0x00 +#define _MM_FROUND_NO_EXC 0x08 + +#define _MM_FROUND_NINT (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_NEAREST_INT) +#define _MM_FROUND_FLOOR (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_NEG_INF) +#define _MM_FROUND_CEIL (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_POS_INF) +#define _MM_FROUND_TRUNC (_MM_FROUND_RAISE_EXC | _MM_FROUND_TO_ZERO) +#define _MM_FROUND_RINT (_MM_FROUND_RAISE_EXC | _MM_FROUND_CUR_DIRECTION) +#define _MM_FROUND_NEARBYINT (_MM_FROUND_NO_EXC | _MM_FROUND_CUR_DIRECTION) + +#define _mm_ceil_ps(X) _mm_round_ps((X), _MM_FROUND_CEIL) +#define _mm_ceil_pd(X) _mm_round_pd((X), _MM_FROUND_CEIL) +#define _mm_ceil_ss(X, Y) _mm_round_ss((X), (Y), _MM_FROUND_CEIL) +#define _mm_ceil_sd(X, Y) _mm_round_sd((X), (Y), _MM_FROUND_CEIL) + +#define _mm_floor_ps(X) _mm_round_ps((X), _MM_FROUND_FLOOR) +#define _mm_floor_pd(X) _mm_round_pd((X), _MM_FROUND_FLOOR) +#define _mm_floor_ss(X, Y) _mm_round_ss((X), (Y), _MM_FROUND_FLOOR) +#define _mm_floor_sd(X, Y) _mm_round_sd((X), (Y), _MM_FROUND_FLOOR) + +#define _mm_round_ps(X, M) __extension__ ({ \ + __m128 __X = (X); \ + (__m128) __builtin_ia32_roundps((__v4sf)__X, (M)); }) + +#define _mm_round_ss(X, Y, M) __extension__ ({ \ + __m128 __X = (X); \ + __m128 __Y = (Y); \ + (__m128) __builtin_ia32_roundss((__v4sf)__X, (__v4sf)__Y, (M)); }) + +#define _mm_round_pd(X, M) __extension__ ({ \ + __m128d __X = (X); \ + (__m128d) __builtin_ia32_roundpd((__v2df)__X, (M)); }) + +#define _mm_round_sd(X, Y, M) __extension__ ({ \ + __m128d __X = (X); \ + __m128d __Y = (Y); \ + (__m128d) __builtin_ia32_roundsd((__v2df)__X, (__v2df)__Y, (M)); }) + +/* SSE4 Packed Blending Intrinsics. */ +#define _mm_blend_pd(V1, V2, M) __extension__ ({ \ + __m128d __V1 = (V1); \ + __m128d __V2 = (V2); \ + (__m128d) __builtin_ia32_blendpd ((__v2df)__V1, (__v2df)__V2, (M)); }) + +#define _mm_blend_ps(V1, V2, M) __extension__ ({ \ + __m128 __V1 = (V1); \ + __m128 __V2 = (V2); \ + (__m128) __builtin_ia32_blendps ((__v4sf)__V1, (__v4sf)__V2, (M)); }) + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_blendv_pd (__m128d __V1, __m128d __V2, __m128d __M) +{ + return (__m128d) __builtin_ia32_blendvpd ((__v2df)__V1, (__v2df)__V2, + (__v2df)__M); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_blendv_ps (__m128 __V1, __m128 __V2, __m128 __M) +{ + return (__m128) __builtin_ia32_blendvps ((__v4sf)__V1, (__v4sf)__V2, + (__v4sf)__M); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_blendv_epi8 (__m128i __V1, __m128i __V2, __m128i __M) +{ + return (__m128i) __builtin_ia32_pblendvb128 ((__v16qi)__V1, (__v16qi)__V2, + (__v16qi)__M); +} + +#define _mm_blend_epi16(V1, V2, M) __extension__ ({ \ + __m128i __V1 = (V1); \ + __m128i __V2 = (V2); \ + (__m128i) __builtin_ia32_pblendw128 ((__v8hi)__V1, (__v8hi)__V2, (M)); }) + +/* SSE4 Dword Multiply Instructions. */ +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mullo_epi32 (__m128i __V1, __m128i __V2) +{ + return (__m128i) ((__v4si)__V1 * (__v4si)__V2); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mul_epi32 (__m128i __V1, __m128i __V2) +{ + return (__m128i) __builtin_ia32_pmuldq128 ((__v4si)__V1, (__v4si)__V2); +} + +/* SSE4 Floating Point Dot Product Instructions. */ +#define _mm_dp_ps(X, Y, M) __extension__ ({ \ + __m128 __X = (X); \ + __m128 __Y = (Y); \ + (__m128) __builtin_ia32_dpps((__v4sf)__X, (__v4sf)__Y, (M)); }) + +#define _mm_dp_pd(X, Y, M) __extension__ ({\ + __m128d __X = (X); \ + __m128d __Y = (Y); \ + (__m128d) __builtin_ia32_dppd((__v2df)__X, (__v2df)__Y, (M)); }) + +/* SSE4 Streaming Load Hint Instruction. */ +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_stream_load_si128 (__m128i *__V) +{ + return (__m128i) __builtin_ia32_movntdqa ((__v2di *) __V); +} + +/* SSE4 Packed Integer Min/Max Instructions. */ +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_min_epi8 (__m128i __V1, __m128i __V2) +{ + return (__m128i) __builtin_ia32_pminsb128 ((__v16qi) __V1, (__v16qi) __V2); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_max_epi8 (__m128i __V1, __m128i __V2) +{ + return (__m128i) __builtin_ia32_pmaxsb128 ((__v16qi) __V1, (__v16qi) __V2); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_min_epu16 (__m128i __V1, __m128i __V2) +{ + return (__m128i) __builtin_ia32_pminuw128 ((__v8hi) __V1, (__v8hi) __V2); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_max_epu16 (__m128i __V1, __m128i __V2) +{ + return (__m128i) __builtin_ia32_pmaxuw128 ((__v8hi) __V1, (__v8hi) __V2); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_min_epi32 (__m128i __V1, __m128i __V2) +{ + return (__m128i) __builtin_ia32_pminsd128 ((__v4si) __V1, (__v4si) __V2); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_max_epi32 (__m128i __V1, __m128i __V2) +{ + return (__m128i) __builtin_ia32_pmaxsd128 ((__v4si) __V1, (__v4si) __V2); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_min_epu32 (__m128i __V1, __m128i __V2) +{ + return (__m128i) __builtin_ia32_pminud128((__v4si) __V1, (__v4si) __V2); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_max_epu32 (__m128i __V1, __m128i __V2) +{ + return (__m128i) __builtin_ia32_pmaxud128((__v4si) __V1, (__v4si) __V2); +} + +/* SSE4 Insertion and Extraction from XMM Register Instructions. */ +#define _mm_insert_ps(X, Y, N) __builtin_ia32_insertps128((X), (Y), (N)) +#define _mm_extract_ps(X, N) (__extension__ \ + ({ union { int __i; float __f; } __t; \ + __v4sf __a = (__v4sf)(X); \ + __t.__f = __a[(N) & 3]; \ + __t.__i;})) + +/* Miscellaneous insert and extract macros. */ +/* Extract a single-precision float from X at index N into D. */ +#define _MM_EXTRACT_FLOAT(D, X, N) (__extension__ ({ __v4sf __a = (__v4sf)(X); \ + (D) = __a[N]; })) + +/* Or together 2 sets of indexes (X and Y) with the zeroing bits (Z) to create + an index suitable for _mm_insert_ps. */ +#define _MM_MK_INSERTPS_NDX(X, Y, Z) (((X) << 6) | ((Y) << 4) | (Z)) + +/* Extract a float from X at index N into the first index of the return. */ +#define _MM_PICK_OUT_PS(X, N) _mm_insert_ps (_mm_setzero_ps(), (X), \ + _MM_MK_INSERTPS_NDX((N), 0, 0x0e)) + +/* Insert int into packed integer array at index. */ +#define _mm_insert_epi8(X, I, N) (__extension__ ({ __v16qi __a = (__v16qi)(X); \ + __a[(N) & 15] = (I); \ + __a;})) +#define _mm_insert_epi32(X, I, N) (__extension__ ({ __v4si __a = (__v4si)(X); \ + __a[(N) & 3] = (I); \ + __a;})) +#ifdef __x86_64__ +#define _mm_insert_epi64(X, I, N) (__extension__ ({ __v2di __a = (__v2di)(X); \ + __a[(N) & 1] = (I); \ + __a;})) +#endif /* __x86_64__ */ + +/* Extract int from packed integer array at index. This returns the element + * as a zero extended value, so it is unsigned. + */ +#define _mm_extract_epi8(X, N) (__extension__ ({ __v16qi __a = (__v16qi)(X); \ + (int)(unsigned char) \ + __a[(N) & 15];})) +#define _mm_extract_epi32(X, N) (__extension__ ({ __v4si __a = (__v4si)(X); \ + __a[(N) & 3];})) +#ifdef __x86_64__ +#define _mm_extract_epi64(X, N) (__extension__ ({ __v2di __a = (__v2di)(X); \ + __a[(N) & 1];})) +#endif /* __x86_64 */ + +/* SSE4 128-bit Packed Integer Comparisons. */ +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_testz_si128(__m128i __M, __m128i __V) +{ + return __builtin_ia32_ptestz128((__v2di)__M, (__v2di)__V); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_testc_si128(__m128i __M, __m128i __V) +{ + return __builtin_ia32_ptestc128((__v2di)__M, (__v2di)__V); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_testnzc_si128(__m128i __M, __m128i __V) +{ + return __builtin_ia32_ptestnzc128((__v2di)__M, (__v2di)__V); +} + +#define _mm_test_all_ones(V) _mm_testc_si128((V), _mm_cmpeq_epi32((V), (V))) +#define _mm_test_mix_ones_zeros(M, V) _mm_testnzc_si128((M), (V)) +#define _mm_test_all_zeros(M, V) _mm_testz_si128 ((M), (V)) + +/* SSE4 64-bit Packed Integer Comparisons. */ +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmpeq_epi64(__m128i __V1, __m128i __V2) +{ + return (__m128i)((__v2di)__V1 == (__v2di)__V2); +} + +/* SSE4 Packed Integer Sign-Extension. */ +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepi8_epi16(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovsxbw128((__v16qi) __V); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepi8_epi32(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovsxbd128((__v16qi) __V); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepi8_epi64(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovsxbq128((__v16qi) __V); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepi16_epi32(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovsxwd128((__v8hi) __V); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepi16_epi64(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovsxwq128((__v8hi)__V); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepi32_epi64(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovsxdq128((__v4si)__V); +} + +/* SSE4 Packed Integer Zero-Extension. */ +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepu8_epi16(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovzxbw128((__v16qi) __V); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepu8_epi32(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovzxbd128((__v16qi)__V); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepu8_epi64(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovzxbq128((__v16qi)__V); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepu16_epi32(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovzxwd128((__v8hi)__V); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepu16_epi64(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovzxwq128((__v8hi)__V); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cvtepu32_epi64(__m128i __V) +{ + return (__m128i) __builtin_ia32_pmovzxdq128((__v4si)__V); +} + +/* SSE4 Pack with Unsigned Saturation. */ +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_packus_epi32(__m128i __V1, __m128i __V2) +{ + return (__m128i) __builtin_ia32_packusdw128((__v4si)__V1, (__v4si)__V2); +} + +/* SSE4 Multiple Packed Sums of Absolute Difference. */ +#define _mm_mpsadbw_epu8(X, Y, M) __extension__ ({ \ + __m128i __X = (X); \ + __m128i __Y = (Y); \ + (__m128i) __builtin_ia32_mpsadbw128((__v16qi)__X, (__v16qi)__Y, (M)); }) + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_minpos_epu16(__m128i __V) +{ + return (__m128i) __builtin_ia32_phminposuw128((__v8hi)__V); +} + +/* These definitions are normally in nmmintrin.h, but gcc puts them in here + so we'll do the same. */ +#ifdef __SSE4_2__ + +/* These specify the type of data that we're comparing. */ +#define _SIDD_UBYTE_OPS 0x00 +#define _SIDD_UWORD_OPS 0x01 +#define _SIDD_SBYTE_OPS 0x02 +#define _SIDD_SWORD_OPS 0x03 + +/* These specify the type of comparison operation. */ +#define _SIDD_CMP_EQUAL_ANY 0x00 +#define _SIDD_CMP_RANGES 0x04 +#define _SIDD_CMP_EQUAL_EACH 0x08 +#define _SIDD_CMP_EQUAL_ORDERED 0x0c + +/* These macros specify the polarity of the operation. */ +#define _SIDD_POSITIVE_POLARITY 0x00 +#define _SIDD_NEGATIVE_POLARITY 0x10 +#define _SIDD_MASKED_POSITIVE_POLARITY 0x20 +#define _SIDD_MASKED_NEGATIVE_POLARITY 0x30 + +/* These macros are used in _mm_cmpXstri() to specify the return. */ +#define _SIDD_LEAST_SIGNIFICANT 0x00 +#define _SIDD_MOST_SIGNIFICANT 0x40 + +/* These macros are used in _mm_cmpXstri() to specify the return. */ +#define _SIDD_BIT_MASK 0x00 +#define _SIDD_UNIT_MASK 0x40 + +/* SSE4.2 Packed Comparison Intrinsics. */ +#define _mm_cmpistrm(A, B, M) __builtin_ia32_pcmpistrm128((A), (B), (M)) +#define _mm_cmpistri(A, B, M) __builtin_ia32_pcmpistri128((A), (B), (M)) + +#define _mm_cmpestrm(A, LA, B, LB, M) \ + __builtin_ia32_pcmpestrm128((A), (LA), (B), (LB), (M)) +#define _mm_cmpestri(A, LA, B, LB, M) \ + __builtin_ia32_pcmpestri128((A), (LA), (B), (LB), (M)) + +/* SSE4.2 Packed Comparison Intrinsics and EFlag Reading. */ +#define _mm_cmpistra(A, B, M) \ + __builtin_ia32_pcmpistria128((A), (B), (M)) +#define _mm_cmpistrc(A, B, M) \ + __builtin_ia32_pcmpistric128((A), (B), (M)) +#define _mm_cmpistro(A, B, M) \ + __builtin_ia32_pcmpistrio128((A), (B), (M)) +#define _mm_cmpistrs(A, B, M) \ + __builtin_ia32_pcmpistris128((A), (B), (M)) +#define _mm_cmpistrz(A, B, M) \ + __builtin_ia32_pcmpistriz128((A), (B), (M)) + +#define _mm_cmpestra(A, LA, B, LB, M) \ + __builtin_ia32_pcmpestria128((A), (LA), (B), (LB), (M)) +#define _mm_cmpestrc(A, LA, B, LB, M) \ + __builtin_ia32_pcmpestric128((A), (LA), (B), (LB), (M)) +#define _mm_cmpestro(A, LA, B, LB, M) \ + __builtin_ia32_pcmpestrio128((A), (LA), (B), (LB), (M)) +#define _mm_cmpestrs(A, LA, B, LB, M) \ + __builtin_ia32_pcmpestris128((A), (LA), (B), (LB), (M)) +#define _mm_cmpestrz(A, LA, B, LB, M) \ + __builtin_ia32_pcmpestriz128((A), (LA), (B), (LB), (M)) + +/* SSE4.2 Compare Packed Data -- Greater Than. */ +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmpgt_epi64(__m128i __V1, __m128i __V2) +{ + return (__m128i)((__v2di)__V1 > (__v2di)__V2); +} + +/* SSE4.2 Accumulate CRC32. */ +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_mm_crc32_u8(unsigned int __C, unsigned char __D) +{ + return __builtin_ia32_crc32qi(__C, __D); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_mm_crc32_u16(unsigned int __C, unsigned short __D) +{ + return __builtin_ia32_crc32hi(__C, __D); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_mm_crc32_u32(unsigned int __C, unsigned int __D) +{ + return __builtin_ia32_crc32si(__C, __D); +} + +#ifdef __x86_64__ +static __inline__ unsigned long long __attribute__((__always_inline__, __nodebug__)) +_mm_crc32_u64(unsigned long long __C, unsigned long long __D) +{ + return __builtin_ia32_crc32di(__C, __D); +} +#endif /* __x86_64__ */ + +#ifdef __POPCNT__ +#include +#endif + +#endif /* __SSE4_2__ */ +#endif /* __SSE4_1__ */ + +#endif /* _SMMINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdalign.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdalign.h new file mode 100755 index 0000000..3738d12 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdalign.h @@ -0,0 +1,35 @@ +/*===---- stdalign.h - Standard header for alignment ------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __STDALIGN_H +#define __STDALIGN_H + +#ifndef __cplusplus +#define alignas _Alignas +#define alignof _Alignof +#endif + +#define __alignas_is_defined 1 +#define __alignof_is_defined 1 + +#endif /* __STDALIGN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdarg.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdarg.h new file mode 100755 index 0000000..2957bf0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdarg.h @@ -0,0 +1,50 @@ +/*===---- stdarg.h - Variable argument handling ----------------------------=== + * + * Copyright (c) 2008 Eli Friedman + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __STDARG_H +#define __STDARG_H + +#ifndef _VA_LIST +typedef __builtin_va_list va_list; +#define _VA_LIST +#endif +#define va_start(ap, param) __builtin_va_start(ap, param) +#define va_end(ap) __builtin_va_end(ap) +#define va_arg(ap, type) __builtin_va_arg(ap, type) + +/* GCC always defines __va_copy, but does not define va_copy unless in c99 mode + * or -ansi is not specified, since it was not part of C90. + */ +#define __va_copy(d,s) __builtin_va_copy(d,s) + +#if __STDC_VERSION__ >= 199900L || __cplusplus >= 201103L || !defined(__STRICT_ANSI__) +#define va_copy(dest, src) __builtin_va_copy(dest, src) +#endif + +/* Hack required to make standard headers work, at least on Ubuntu */ +#define __GNUC_VA_LIST 1 +typedef __builtin_va_list __gnuc_va_list; + +#endif /* __STDARG_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdbool.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdbool.h new file mode 100755 index 0000000..0467893 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdbool.h @@ -0,0 +1,44 @@ +/*===---- stdbool.h - Standard header for booleans -------------------------=== + * + * Copyright (c) 2008 Eli Friedman + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __STDBOOL_H +#define __STDBOOL_H + +/* Don't define bool, true, and false in C++, except as a GNU extension. */ +#ifndef __cplusplus +#define bool _Bool +#define true 1 +#define false 0 +#elif defined(__GNUC__) && !defined(__STRICT_ANSI__) +/* Define _Bool, bool, false, true as a GNU extension. */ +#define _Bool bool +#define bool bool +#define false false +#define true true +#endif + +#define __bool_true_false_are_defined 1 + +#endif /* __STDBOOL_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stddef.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stddef.h new file mode 100755 index 0000000..97126ed --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stddef.h @@ -0,0 +1,116 @@ +/*===---- stddef.h - Basic type definitions --------------------------------=== + * + * Copyright (c) 2008 Eli Friedman + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __STDDEF_H +#define __STDDEF_H + +#if !defined(_PTRDIFF_T) || __has_feature(modules) +/* Always define ptrdiff_t when modules are available. */ +#if !__has_feature(modules) +#define _PTRDIFF_T +#endif +typedef __PTRDIFF_TYPE__ ptrdiff_t; +#endif + +#if !defined(_SIZE_T) || __has_feature(modules) +/* Always define size_t when modules are available. */ +#if !__has_feature(modules) +#define _SIZE_T +#endif +typedef __SIZE_TYPE__ size_t; +#endif + +/* ISO9899:2011 7.20 (C11 Annex K): Define rsize_t if __STDC_WANT_LIB_EXT1__ is + * enabled. */ +#if (defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1 && \ + !defined(_RSIZE_T)) || __has_feature(modules) +/* Always define rsize_t when modules are available. */ +#if !__has_feature(modules) +#define _RSIZE_T +#endif +typedef __SIZE_TYPE__ rsize_t; +#endif + +#ifndef __cplusplus +/* Always define wchar_t when modules are available. */ +#if !defined(_WCHAR_T) || __has_feature(modules) +#if !__has_feature(modules) +#define _WCHAR_T +#if defined(_MSC_EXTENSIONS) +#define _WCHAR_T_DEFINED +#endif +#endif +typedef __WCHAR_TYPE__ wchar_t; +#endif +#endif + +#undef NULL +#ifdef __cplusplus +# if !defined(__MINGW32__) && !defined(_MSC_VER) +# define NULL __null +# else +# define NULL 0 +# endif +#else +# define NULL ((void*)0) +#endif + +#ifdef __cplusplus +#if defined(_MSC_EXTENSIONS) && defined(_NATIVE_NULLPTR_SUPPORTED) +namespace std { typedef decltype(nullptr) nullptr_t; } +using ::std::nullptr_t; +#endif +#endif + +#if __STDC_VERSION__ >= 201112L || __cplusplus >= 201103L +#ifndef _MSC_VER +typedef struct { + long long __clang_max_align_nonce1 + __attribute__((__aligned__(__alignof__(long long)))); + long double __clang_max_align_nonce2 + __attribute__((__aligned__(__alignof__(long double)))); +} max_align_t; +#else +typedef double max_align_t; +#endif +#define __CLANG_MAX_ALIGN_T_DEFINED +#endif + +#define offsetof(t, d) __builtin_offsetof(t, d) + +#endif /* __STDDEF_H */ + +/* Some C libraries expect to see a wint_t here. Others (notably MinGW) will use +__WINT_TYPE__ directly; accommodate both by requiring __need_wint_t */ +#if defined(__need_wint_t) +/* Always define wint_t when modules are available. */ +#if !defined(_WINT_T) || __has_feature(modules) +#if !__has_feature(modules) +#define _WINT_T +#endif +typedef __WINT_TYPE__ wint_t; +#endif +#undef __need_wint_t +#endif /* __need_wint_t */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdint.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdint.h new file mode 100755 index 0000000..11529c0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdint.h @@ -0,0 +1,708 @@ +/*===---- stdint.h - Standard header for sized integer types --------------===*\ + * + * Copyright (c) 2009 Chris Lattner + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * +\*===----------------------------------------------------------------------===*/ + +#ifndef __CLANG_STDINT_H +#define __CLANG_STDINT_H + +/* If we're hosted, fall back to the system's stdint.h, which might have + * additional definitions. + */ +#if __STDC_HOSTED__ && \ + defined(__has_include_next) && __has_include_next() + +// C99 7.18.3 Limits of other integer types +// +// Footnote 219, 220: C++ implementations should define these macros only when +// __STDC_LIMIT_MACROS is defined before is included. +// +// Footnote 222: C++ implementations should define these macros only when +// __STDC_CONSTANT_MACROS is defined before is included. +// +// C++11 [cstdint.syn]p2: +// +// The macros defined by are provided unconditionally. In particular, +// the symbols __STDC_LIMIT_MACROS and __STDC_CONSTANT_MACROS (mentioned in +// footnotes 219, 220, and 222 in the C standard) play no role in C++. +// +// C11 removed the problematic footnotes. +// +// Work around this inconsistency by always defining those macros in C++ mode, +// so that a C library implementation which follows the C99 standard can be +// used in C++. +# ifdef __cplusplus +# if !defined(__STDC_LIMIT_MACROS) +# define __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS_DEFINED_BY_CLANG +# endif +# if !defined(__STDC_CONSTANT_MACROS) +# define __STDC_CONSTANT_MACROS +# define __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG +# endif +# endif + +# include_next + +# ifdef __STDC_LIMIT_MACROS_DEFINED_BY_CLANG +# undef __STDC_LIMIT_MACROS +# undef __STDC_LIMIT_MACROS_DEFINED_BY_CLANG +# endif +# ifdef __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG +# undef __STDC_CONSTANT_MACROS +# undef __STDC_CONSTANT_MACROS_DEFINED_BY_CLANG +# endif + +#else + +/* C99 7.18.1.1 Exact-width integer types. + * C99 7.18.1.2 Minimum-width integer types. + * C99 7.18.1.3 Fastest minimum-width integer types. + * + * The standard requires that exact-width type be defined for 8-, 16-, 32-, and + * 64-bit types if they are implemented. Other exact width types are optional. + * This implementation defines an exact-width types for every integer width + * that is represented in the standard integer types. + * + * The standard also requires minimum-width types be defined for 8-, 16-, 32-, + * and 64-bit widths regardless of whether there are corresponding exact-width + * types. + * + * To accommodate targets that are missing types that are exactly 8, 16, 32, or + * 64 bits wide, this implementation takes an approach of cascading + * redefintions, redefining __int_leastN_t to successively smaller exact-width + * types. It is therefore important that the types are defined in order of + * descending widths. + * + * We currently assume that the minimum-width types and the fastest + * minimum-width types are the same. This is allowed by the standard, but is + * suboptimal. + * + * In violation of the standard, some targets do not implement a type that is + * wide enough to represent all of the required widths (8-, 16-, 32-, 64-bit). + * To accommodate these targets, a required minimum-width type is only + * defined if there exists an exact-width type of equal or greater width. + */ + +#ifdef __INT64_TYPE__ +# ifndef __int8_t_defined /* glibc sys/types.h also defines int64_t*/ +typedef signed __INT64_TYPE__ int64_t; +# endif /* __int8_t_defined */ +typedef unsigned __INT64_TYPE__ uint64_t; +# define __int_least64_t int64_t +# define __uint_least64_t uint64_t +# define __int_least32_t int64_t +# define __uint_least32_t uint64_t +# define __int_least16_t int64_t +# define __uint_least16_t uint64_t +# define __int_least8_t int64_t +# define __uint_least8_t uint64_t +#endif /* __INT64_TYPE__ */ + +#ifdef __int_least64_t +typedef __int_least64_t int_least64_t; +typedef __uint_least64_t uint_least64_t; +typedef __int_least64_t int_fast64_t; +typedef __uint_least64_t uint_fast64_t; +#endif /* __int_least64_t */ + +#ifdef __INT56_TYPE__ +typedef signed __INT56_TYPE__ int56_t; +typedef unsigned __INT56_TYPE__ uint56_t; +typedef int56_t int_least56_t; +typedef uint56_t uint_least56_t; +typedef int56_t int_fast56_t; +typedef uint56_t uint_fast56_t; +# define __int_least32_t int56_t +# define __uint_least32_t uint56_t +# define __int_least16_t int56_t +# define __uint_least16_t uint56_t +# define __int_least8_t int56_t +# define __uint_least8_t uint56_t +#endif /* __INT56_TYPE__ */ + + +#ifdef __INT48_TYPE__ +typedef signed __INT48_TYPE__ int48_t; +typedef unsigned __INT48_TYPE__ uint48_t; +typedef int48_t int_least48_t; +typedef uint48_t uint_least48_t; +typedef int48_t int_fast48_t; +typedef uint48_t uint_fast48_t; +# define __int_least32_t int48_t +# define __uint_least32_t uint48_t +# define __int_least16_t int48_t +# define __uint_least16_t uint48_t +# define __int_least8_t int48_t +# define __uint_least8_t uint48_t +#endif /* __INT48_TYPE__ */ + + +#ifdef __INT40_TYPE__ +typedef signed __INT40_TYPE__ int40_t; +typedef unsigned __INT40_TYPE__ uint40_t; +typedef int40_t int_least40_t; +typedef uint40_t uint_least40_t; +typedef int40_t int_fast40_t; +typedef uint40_t uint_fast40_t; +# define __int_least32_t int40_t +# define __uint_least32_t uint40_t +# define __int_least16_t int40_t +# define __uint_least16_t uint40_t +# define __int_least8_t int40_t +# define __uint_least8_t uint40_t +#endif /* __INT40_TYPE__ */ + + +#ifdef __INT32_TYPE__ + +# ifndef __int8_t_defined /* glibc sys/types.h also defines int32_t*/ +typedef signed __INT32_TYPE__ int32_t; +# endif /* __int8_t_defined */ + +# ifndef __uint32_t_defined /* more glibc compatibility */ +# define __uint32_t_defined +typedef unsigned __INT32_TYPE__ uint32_t; +# endif /* __uint32_t_defined */ + +# define __int_least32_t int32_t +# define __uint_least32_t uint32_t +# define __int_least16_t int32_t +# define __uint_least16_t uint32_t +# define __int_least8_t int32_t +# define __uint_least8_t uint32_t +#endif /* __INT32_TYPE__ */ + +#ifdef __int_least32_t +typedef __int_least32_t int_least32_t; +typedef __uint_least32_t uint_least32_t; +typedef __int_least32_t int_fast32_t; +typedef __uint_least32_t uint_fast32_t; +#endif /* __int_least32_t */ + +#ifdef __INT24_TYPE__ +typedef signed __INT24_TYPE__ int24_t; +typedef unsigned __INT24_TYPE__ uint24_t; +typedef int24_t int_least24_t; +typedef uint24_t uint_least24_t; +typedef int24_t int_fast24_t; +typedef uint24_t uint_fast24_t; +# define __int_least16_t int24_t +# define __uint_least16_t uint24_t +# define __int_least8_t int24_t +# define __uint_least8_t uint24_t +#endif /* __INT24_TYPE__ */ + +#ifdef __INT16_TYPE__ +#ifndef __int8_t_defined /* glibc sys/types.h also defines int16_t*/ +typedef signed __INT16_TYPE__ int16_t; +#endif /* __int8_t_defined */ +typedef unsigned __INT16_TYPE__ uint16_t; +# define __int_least16_t int16_t +# define __uint_least16_t uint16_t +# define __int_least8_t int16_t +# define __uint_least8_t uint16_t +#endif /* __INT16_TYPE__ */ + +#ifdef __int_least16_t +typedef __int_least16_t int_least16_t; +typedef __uint_least16_t uint_least16_t; +typedef __int_least16_t int_fast16_t; +typedef __uint_least16_t uint_fast16_t; +#endif /* __int_least16_t */ + + +#ifdef __INT8_TYPE__ +#ifndef __int8_t_defined /* glibc sys/types.h also defines int8_t*/ +typedef signed __INT8_TYPE__ int8_t; +#endif /* __int8_t_defined */ +typedef unsigned __INT8_TYPE__ uint8_t; +# define __int_least8_t int8_t +# define __uint_least8_t uint8_t +#endif /* __INT8_TYPE__ */ + +#ifdef __int_least8_t +typedef __int_least8_t int_least8_t; +typedef __uint_least8_t uint_least8_t; +typedef __int_least8_t int_fast8_t; +typedef __uint_least8_t uint_fast8_t; +#endif /* __int_least8_t */ + +/* prevent glibc sys/types.h from defining conflicting types */ +#ifndef __int8_t_defined +# define __int8_t_defined +#endif /* __int8_t_defined */ + +/* C99 7.18.1.4 Integer types capable of holding object pointers. + */ +#define __stdint_join3(a,b,c) a ## b ## c + +#define __intn_t(n) __stdint_join3( int, n, _t) +#define __uintn_t(n) __stdint_join3(uint, n, _t) + +#ifndef _INTPTR_T +#ifndef __intptr_t_defined +typedef __intn_t(__INTPTR_WIDTH__) intptr_t; +#define __intptr_t_defined +#define _INTPTR_T +#endif +#endif + +#ifndef _UINTPTR_T +typedef __uintn_t(__INTPTR_WIDTH__) uintptr_t; +#define _UINTPTR_T +#endif + +/* C99 7.18.1.5 Greatest-width integer types. + */ +typedef __INTMAX_TYPE__ intmax_t; +typedef __UINTMAX_TYPE__ uintmax_t; + +/* C99 7.18.4 Macros for minimum-width integer constants. + * + * The standard requires that integer constant macros be defined for all the + * minimum-width types defined above. As 8-, 16-, 32-, and 64-bit minimum-width + * types are required, the corresponding integer constant macros are defined + * here. This implementation also defines minimum-width types for every other + * integer width that the target implements, so corresponding macros are + * defined below, too. + * + * These macros are defined using the same successive-shrinking approach as + * the type definitions above. It is likewise important that macros are defined + * in order of decending width. + * + * Note that C++ should not check __STDC_CONSTANT_MACROS here, contrary to the + * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]). + */ + +#define __int_c_join(a, b) a ## b +#define __int_c(v, suffix) __int_c_join(v, suffix) +#define __uint_c(v, suffix) __int_c_join(v##U, suffix) + + +#ifdef __INT64_TYPE__ +# ifdef __INT64_C_SUFFIX__ +# define __int64_c_suffix __INT64_C_SUFFIX__ +# define __int32_c_suffix __INT64_C_SUFFIX__ +# define __int16_c_suffix __INT64_C_SUFFIX__ +# define __int8_c_suffix __INT64_C_SUFFIX__ +# else +# undef __int64_c_suffix +# undef __int32_c_suffix +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT64_C_SUFFIX__ */ +#endif /* __INT64_TYPE__ */ + +#ifdef __int_least64_t +# ifdef __int64_c_suffix +# define INT64_C(v) __int_c(v, __int64_c_suffix) +# define UINT64_C(v) __uint_c(v, __int64_c_suffix) +# else +# define INT64_C(v) v +# define UINT64_C(v) v ## U +# endif /* __int64_c_suffix */ +#endif /* __int_least64_t */ + + +#ifdef __INT56_TYPE__ +# ifdef __INT56_C_SUFFIX__ +# define INT56_C(v) __int_c(v, __INT56_C_SUFFIX__) +# define UINT56_C(v) __uint_c(v, __INT56_C_SUFFIX__) +# define __int32_c_suffix __INT56_C_SUFFIX__ +# define __int16_c_suffix __INT56_C_SUFFIX__ +# define __int8_c_suffix __INT56_C_SUFFIX__ +# else +# define INT56_C(v) v +# define UINT56_C(v) v ## U +# undef __int32_c_suffix +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT56_C_SUFFIX__ */ +#endif /* __INT56_TYPE__ */ + + +#ifdef __INT48_TYPE__ +# ifdef __INT48_C_SUFFIX__ +# define INT48_C(v) __int_c(v, __INT48_C_SUFFIX__) +# define UINT48_C(v) __uint_c(v, __INT48_C_SUFFIX__) +# define __int32_c_suffix __INT48_C_SUFFIX__ +# define __int16_c_suffix __INT48_C_SUFFIX__ +# define __int8_c_suffix __INT48_C_SUFFIX__ +# else +# define INT48_C(v) v +# define UINT48_C(v) v ## U +# undef __int32_c_suffix +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT48_C_SUFFIX__ */ +#endif /* __INT48_TYPE__ */ + + +#ifdef __INT40_TYPE__ +# ifdef __INT40_C_SUFFIX__ +# define INT40_C(v) __int_c(v, __INT40_C_SUFFIX__) +# define UINT40_C(v) __uint_c(v, __INT40_C_SUFFIX__) +# define __int32_c_suffix __INT40_C_SUFFIX__ +# define __int16_c_suffix __INT40_C_SUFFIX__ +# define __int8_c_suffix __INT40_C_SUFFIX__ +# else +# define INT40_C(v) v +# define UINT40_C(v) v ## U +# undef __int32_c_suffix +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT40_C_SUFFIX__ */ +#endif /* __INT40_TYPE__ */ + + +#ifdef __INT32_TYPE__ +# ifdef __INT32_C_SUFFIX__ +# define __int32_c_suffix __INT32_C_SUFFIX__ +# define __int16_c_suffix __INT32_C_SUFFIX__ +# define __int8_c_suffix __INT32_C_SUFFIX__ +#else +# undef __int32_c_suffix +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT32_C_SUFFIX__ */ +#endif /* __INT32_TYPE__ */ + +#ifdef __int_least32_t +# ifdef __int32_c_suffix +# define INT32_C(v) __int_c(v, __int32_c_suffix) +# define UINT32_C(v) __uint_c(v, __int32_c_suffix) +# else +# define INT32_C(v) v +# define UINT32_C(v) v ## U +# endif /* __int32_c_suffix */ +#endif /* __int_least32_t */ + + +#ifdef __INT24_TYPE__ +# ifdef __INT24_C_SUFFIX__ +# define INT24_C(v) __int_c(v, __INT24_C_SUFFIX__) +# define UINT24_C(v) __uint_c(v, __INT24_C_SUFFIX__) +# define __int16_c_suffix __INT24_C_SUFFIX__ +# define __int8_c_suffix __INT24_C_SUFFIX__ +# else +# define INT24_C(v) v +# define UINT24_C(v) v ## U +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT24_C_SUFFIX__ */ +#endif /* __INT24_TYPE__ */ + + +#ifdef __INT16_TYPE__ +# ifdef __INT16_C_SUFFIX__ +# define __int16_c_suffix __INT16_C_SUFFIX__ +# define __int8_c_suffix __INT16_C_SUFFIX__ +#else +# undef __int16_c_suffix +# undef __int8_c_suffix +# endif /* __INT16_C_SUFFIX__ */ +#endif /* __INT16_TYPE__ */ + +#ifdef __int_least16_t +# ifdef __int16_c_suffix +# define INT16_C(v) __int_c(v, __int16_c_suffix) +# define UINT16_C(v) __uint_c(v, __int16_c_suffix) +# else +# define INT16_C(v) v +# define UINT16_C(v) v ## U +# endif /* __int16_c_suffix */ +#endif /* __int_least16_t */ + + +#ifdef __INT8_TYPE__ +# ifdef __INT8_C_SUFFIX__ +# define __int8_c_suffix __INT8_C_SUFFIX__ +#else +# undef __int8_c_suffix +# endif /* __INT8_C_SUFFIX__ */ +#endif /* __INT8_TYPE__ */ + +#ifdef __int_least8_t +# ifdef __int8_c_suffix +# define INT8_C(v) __int_c(v, __int8_c_suffix) +# define UINT8_C(v) __uint_c(v, __int8_c_suffix) +# else +# define INT8_C(v) v +# define UINT8_C(v) v ## U +# endif /* __int8_c_suffix */ +#endif /* __int_least8_t */ + + +/* C99 7.18.2.1 Limits of exact-width integer types. + * C99 7.18.2.2 Limits of minimum-width integer types. + * C99 7.18.2.3 Limits of fastest minimum-width integer types. + * + * The presence of limit macros are completely optional in C99. This + * implementation defines limits for all of the types (exact- and + * minimum-width) that it defines above, using the limits of the minimum-width + * type for any types that do not have exact-width representations. + * + * As in the type definitions, this section takes an approach of + * successive-shrinking to determine which limits to use for the standard (8, + * 16, 32, 64) bit widths when they don't have exact representations. It is + * therefore important that the defintions be kept in order of decending + * widths. + * + * Note that C++ should not check __STDC_LIMIT_MACROS here, contrary to the + * claims of the C standard (see C++ 18.3.1p2, [cstdint.syn]). + */ + +#ifdef __INT64_TYPE__ +# define INT64_MAX INT64_C( 9223372036854775807) +# define INT64_MIN (-INT64_C( 9223372036854775807)-1) +# define UINT64_MAX UINT64_C(18446744073709551615) +# define __INT_LEAST64_MIN INT64_MIN +# define __INT_LEAST64_MAX INT64_MAX +# define __UINT_LEAST64_MAX UINT64_MAX +# define __INT_LEAST32_MIN INT64_MIN +# define __INT_LEAST32_MAX INT64_MAX +# define __UINT_LEAST32_MAX UINT64_MAX +# define __INT_LEAST16_MIN INT64_MIN +# define __INT_LEAST16_MAX INT64_MAX +# define __UINT_LEAST16_MAX UINT64_MAX +# define __INT_LEAST8_MIN INT64_MIN +# define __INT_LEAST8_MAX INT64_MAX +# define __UINT_LEAST8_MAX UINT64_MAX +#endif /* __INT64_TYPE__ */ + +#ifdef __INT_LEAST64_MIN +# define INT_LEAST64_MIN __INT_LEAST64_MIN +# define INT_LEAST64_MAX __INT_LEAST64_MAX +# define UINT_LEAST64_MAX __UINT_LEAST64_MAX +# define INT_FAST64_MIN __INT_LEAST64_MIN +# define INT_FAST64_MAX __INT_LEAST64_MAX +# define UINT_FAST64_MAX __UINT_LEAST64_MAX +#endif /* __INT_LEAST64_MIN */ + + +#ifdef __INT56_TYPE__ +# define INT56_MAX INT56_C(36028797018963967) +# define INT56_MIN (-INT56_C(36028797018963967)-1) +# define UINT56_MAX UINT56_C(72057594037927935) +# define INT_LEAST56_MIN INT56_MIN +# define INT_LEAST56_MAX INT56_MAX +# define UINT_LEAST56_MAX UINT56_MAX +# define INT_FAST56_MIN INT56_MIN +# define INT_FAST56_MAX INT56_MAX +# define UINT_FAST56_MAX UINT56_MAX +# define __INT_LEAST32_MIN INT56_MIN +# define __INT_LEAST32_MAX INT56_MAX +# define __UINT_LEAST32_MAX UINT56_MAX +# define __INT_LEAST16_MIN INT56_MIN +# define __INT_LEAST16_MAX INT56_MAX +# define __UINT_LEAST16_MAX UINT56_MAX +# define __INT_LEAST8_MIN INT56_MIN +# define __INT_LEAST8_MAX INT56_MAX +# define __UINT_LEAST8_MAX UINT56_MAX +#endif /* __INT56_TYPE__ */ + + +#ifdef __INT48_TYPE__ +# define INT48_MAX INT48_C(140737488355327) +# define INT48_MIN (-INT48_C(140737488355327)-1) +# define UINT48_MAX UINT48_C(281474976710655) +# define INT_LEAST48_MIN INT48_MIN +# define INT_LEAST48_MAX INT48_MAX +# define UINT_LEAST48_MAX UINT48_MAX +# define INT_FAST48_MIN INT48_MIN +# define INT_FAST48_MAX INT48_MAX +# define UINT_FAST48_MAX UINT48_MAX +# define __INT_LEAST32_MIN INT48_MIN +# define __INT_LEAST32_MAX INT48_MAX +# define __UINT_LEAST32_MAX UINT48_MAX +# define __INT_LEAST16_MIN INT48_MIN +# define __INT_LEAST16_MAX INT48_MAX +# define __UINT_LEAST16_MAX UINT48_MAX +# define __INT_LEAST8_MIN INT48_MIN +# define __INT_LEAST8_MAX INT48_MAX +# define __UINT_LEAST8_MAX UINT48_MAX +#endif /* __INT48_TYPE__ */ + + +#ifdef __INT40_TYPE__ +# define INT40_MAX INT40_C(549755813887) +# define INT40_MIN (-INT40_C(549755813887)-1) +# define UINT40_MAX UINT40_C(1099511627775) +# define INT_LEAST40_MIN INT40_MIN +# define INT_LEAST40_MAX INT40_MAX +# define UINT_LEAST40_MAX UINT40_MAX +# define INT_FAST40_MIN INT40_MIN +# define INT_FAST40_MAX INT40_MAX +# define UINT_FAST40_MAX UINT40_MAX +# define __INT_LEAST32_MIN INT40_MIN +# define __INT_LEAST32_MAX INT40_MAX +# define __UINT_LEAST32_MAX UINT40_MAX +# define __INT_LEAST16_MIN INT40_MIN +# define __INT_LEAST16_MAX INT40_MAX +# define __UINT_LEAST16_MAX UINT40_MAX +# define __INT_LEAST8_MIN INT40_MIN +# define __INT_LEAST8_MAX INT40_MAX +# define __UINT_LEAST8_MAX UINT40_MAX +#endif /* __INT40_TYPE__ */ + + +#ifdef __INT32_TYPE__ +# define INT32_MAX INT32_C(2147483647) +# define INT32_MIN (-INT32_C(2147483647)-1) +# define UINT32_MAX UINT32_C(4294967295) +# define __INT_LEAST32_MIN INT32_MIN +# define __INT_LEAST32_MAX INT32_MAX +# define __UINT_LEAST32_MAX UINT32_MAX +# define __INT_LEAST16_MIN INT32_MIN +# define __INT_LEAST16_MAX INT32_MAX +# define __UINT_LEAST16_MAX UINT32_MAX +# define __INT_LEAST8_MIN INT32_MIN +# define __INT_LEAST8_MAX INT32_MAX +# define __UINT_LEAST8_MAX UINT32_MAX +#endif /* __INT32_TYPE__ */ + +#ifdef __INT_LEAST32_MIN +# define INT_LEAST32_MIN __INT_LEAST32_MIN +# define INT_LEAST32_MAX __INT_LEAST32_MAX +# define UINT_LEAST32_MAX __UINT_LEAST32_MAX +# define INT_FAST32_MIN __INT_LEAST32_MIN +# define INT_FAST32_MAX __INT_LEAST32_MAX +# define UINT_FAST32_MAX __UINT_LEAST32_MAX +#endif /* __INT_LEAST32_MIN */ + + +#ifdef __INT24_TYPE__ +# define INT24_MAX INT24_C(8388607) +# define INT24_MIN (-INT24_C(8388607)-1) +# define UINT24_MAX UINT24_C(16777215) +# define INT_LEAST24_MIN INT24_MIN +# define INT_LEAST24_MAX INT24_MAX +# define UINT_LEAST24_MAX UINT24_MAX +# define INT_FAST24_MIN INT24_MIN +# define INT_FAST24_MAX INT24_MAX +# define UINT_FAST24_MAX UINT24_MAX +# define __INT_LEAST16_MIN INT24_MIN +# define __INT_LEAST16_MAX INT24_MAX +# define __UINT_LEAST16_MAX UINT24_MAX +# define __INT_LEAST8_MIN INT24_MIN +# define __INT_LEAST8_MAX INT24_MAX +# define __UINT_LEAST8_MAX UINT24_MAX +#endif /* __INT24_TYPE__ */ + + +#ifdef __INT16_TYPE__ +#define INT16_MAX INT16_C(32767) +#define INT16_MIN (-INT16_C(32767)-1) +#define UINT16_MAX UINT16_C(65535) +# define __INT_LEAST16_MIN INT16_MIN +# define __INT_LEAST16_MAX INT16_MAX +# define __UINT_LEAST16_MAX UINT16_MAX +# define __INT_LEAST8_MIN INT16_MIN +# define __INT_LEAST8_MAX INT16_MAX +# define __UINT_LEAST8_MAX UINT16_MAX +#endif /* __INT16_TYPE__ */ + +#ifdef __INT_LEAST16_MIN +# define INT_LEAST16_MIN __INT_LEAST16_MIN +# define INT_LEAST16_MAX __INT_LEAST16_MAX +# define UINT_LEAST16_MAX __UINT_LEAST16_MAX +# define INT_FAST16_MIN __INT_LEAST16_MIN +# define INT_FAST16_MAX __INT_LEAST16_MAX +# define UINT_FAST16_MAX __UINT_LEAST16_MAX +#endif /* __INT_LEAST16_MIN */ + + +#ifdef __INT8_TYPE__ +# define INT8_MAX INT8_C(127) +# define INT8_MIN (-INT8_C(127)-1) +# define UINT8_MAX UINT8_C(255) +# define __INT_LEAST8_MIN INT8_MIN +# define __INT_LEAST8_MAX INT8_MAX +# define __UINT_LEAST8_MAX UINT8_MAX +#endif /* __INT8_TYPE__ */ + +#ifdef __INT_LEAST8_MIN +# define INT_LEAST8_MIN __INT_LEAST8_MIN +# define INT_LEAST8_MAX __INT_LEAST8_MAX +# define UINT_LEAST8_MAX __UINT_LEAST8_MAX +# define INT_FAST8_MIN __INT_LEAST8_MIN +# define INT_FAST8_MAX __INT_LEAST8_MAX +# define UINT_FAST8_MAX __UINT_LEAST8_MAX +#endif /* __INT_LEAST8_MIN */ + +/* Some utility macros */ +#define __INTN_MIN(n) __stdint_join3( INT, n, _MIN) +#define __INTN_MAX(n) __stdint_join3( INT, n, _MAX) +#define __UINTN_MAX(n) __stdint_join3(UINT, n, _MAX) +#define __INTN_C(n, v) __stdint_join3( INT, n, _C(v)) +#define __UINTN_C(n, v) __stdint_join3(UINT, n, _C(v)) + +/* C99 7.18.2.4 Limits of integer types capable of holding object pointers. */ +/* C99 7.18.3 Limits of other integer types. */ + +#define INTPTR_MIN __INTN_MIN(__INTPTR_WIDTH__) +#define INTPTR_MAX __INTN_MAX(__INTPTR_WIDTH__) +#define UINTPTR_MAX __UINTN_MAX(__INTPTR_WIDTH__) +#define PTRDIFF_MIN __INTN_MIN(__PTRDIFF_WIDTH__) +#define PTRDIFF_MAX __INTN_MAX(__PTRDIFF_WIDTH__) +#define SIZE_MAX __UINTN_MAX(__SIZE_WIDTH__) + +/* ISO9899:2011 7.20 (C11 Annex K): Define RSIZE_MAX if __STDC_WANT_LIB_EXT1__ + * is enabled. */ +#if defined(__STDC_WANT_LIB_EXT1__) && __STDC_WANT_LIB_EXT1__ >= 1 +#define RSIZE_MAX (SIZE_MAX >> 1) +#endif + +/* C99 7.18.2.5 Limits of greatest-width integer types. */ +#define INTMAX_MIN __INTN_MIN(__INTMAX_WIDTH__) +#define INTMAX_MAX __INTN_MAX(__INTMAX_WIDTH__) +#define UINTMAX_MAX __UINTN_MAX(__INTMAX_WIDTH__) + +/* C99 7.18.3 Limits of other integer types. */ +#define SIG_ATOMIC_MIN __INTN_MIN(__SIG_ATOMIC_WIDTH__) +#define SIG_ATOMIC_MAX __INTN_MAX(__SIG_ATOMIC_WIDTH__) +#ifdef __WINT_UNSIGNED__ +# define WINT_MIN __UINTN_C(__WINT_WIDTH__, 0) +# define WINT_MAX __UINTN_MAX(__WINT_WIDTH__) +#else +# define WINT_MIN __INTN_MIN(__WINT_WIDTH__) +# define WINT_MAX __INTN_MAX(__WINT_WIDTH__) +#endif + +#ifndef WCHAR_MAX +# define WCHAR_MAX __WCHAR_MAX__ +#endif +#ifndef WCHAR_MIN +# if __WCHAR_MAX__ == __INTN_MAX(__WCHAR_WIDTH__) +# define WCHAR_MIN __INTN_MIN(__WCHAR_WIDTH__) +# else +# define WCHAR_MIN __UINTN_C(__WCHAR_WIDTH__, 0) +# endif +#endif + +/* 7.18.4.2 Macros for greatest-width integer constants. */ +#define INTMAX_C(v) __INTN_C(__INTMAX_WIDTH__, v) +#define UINTMAX_C(v) __UINTN_C(__INTMAX_WIDTH__, v) + +#endif /* __STDC_HOSTED__ */ +#endif /* __CLANG_STDINT_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdnoreturn.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdnoreturn.h new file mode 100755 index 0000000..a7a301d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/stdnoreturn.h @@ -0,0 +1,30 @@ +/*===---- stdnoreturn.h - Standard header for noreturn macro ---------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __STDNORETURN_H +#define __STDNORETURN_H + +#define noreturn _Noreturn +#define __noreturn_is_defined 1 + +#endif /* __STDNORETURN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/tbmintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/tbmintrin.h new file mode 100755 index 0000000..f95e34f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/tbmintrin.h @@ -0,0 +1,158 @@ +/*===---- tbmintrin.h - TBM intrinsics -------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __TBM__ +#error "TBM instruction set is not enabled" +#endif + +#ifndef __X86INTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __TBMINTRIN_H +#define __TBMINTRIN_H + +#define __bextri_u32(a, b) (__builtin_ia32_bextri_u32((a), (b))) + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blcfill_u32(unsigned int a) +{ + return a & (a + 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blci_u32(unsigned int a) +{ + return a | ~(a + 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blcic_u32(unsigned int a) +{ + return ~a & (a + 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blcmsk_u32(unsigned int a) +{ + return a ^ (a + 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blcs_u32(unsigned int a) +{ + return a | (a + 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blsfill_u32(unsigned int a) +{ + return a | (a - 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__blsic_u32(unsigned int a) +{ + return ~a | (a - 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__t1mskc_u32(unsigned int a) +{ + return ~a | (a + 1); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +__tzmsk_u32(unsigned int a) +{ + return ~a & (a - 1); +} + +#ifdef __x86_64__ +#define __bextri_u64(a, b) (__builtin_ia32_bextri_u64((a), (int)(b))) + +static __inline__ unsigned long long __attribute__((__always_inline__, + __nodebug__)) +__blcfill_u64(unsigned long long a) +{ + return a & (a + 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, + __nodebug__)) +__blci_u64(unsigned long long a) +{ + return a | ~(a + 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, + __nodebug__)) +__blcic_u64(unsigned long long a) +{ + return ~a & (a + 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, + __nodebug__)) +__blcmsk_u64(unsigned long long a) +{ + return a ^ (a + 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, + __nodebug__)) +__blcs_u64(unsigned long long a) +{ + return a | (a + 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, + __nodebug__)) +__blsfill_u64(unsigned long long a) +{ + return a | (a - 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, + __nodebug__)) +__blsic_u64(unsigned long long a) +{ + return ~a | (a - 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, + __nodebug__)) +__t1mskc_u64(unsigned long long a) +{ + return ~a | (a + 1); +} + +static __inline__ unsigned long long __attribute__((__always_inline__, + __nodebug__)) +__tzmsk_u64(unsigned long long a) +{ + return ~a & (a - 1); +} +#endif + +#endif /* __TBMINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/tgmath.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/tgmath.h new file mode 100755 index 0000000..a48e267 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/tgmath.h @@ -0,0 +1,1374 @@ +/*===---- tgmath.h - Standard header for type generic math ----------------===*\ + * + * Copyright (c) 2009 Howard Hinnant + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * +\*===----------------------------------------------------------------------===*/ + +#ifndef __TGMATH_H +#define __TGMATH_H + +/* C99 7.22 Type-generic math . */ +#include + +/* C++ handles type genericity with overloading in math.h. */ +#ifndef __cplusplus +#include + +#define _TG_ATTRSp __attribute__((__overloadable__)) +#define _TG_ATTRS __attribute__((__overloadable__, __always_inline__)) + +// promotion + +typedef void _Argument_type_is_not_arithmetic; +static _Argument_type_is_not_arithmetic __tg_promote(...) + __attribute__((__unavailable__,__overloadable__)); +static double _TG_ATTRSp __tg_promote(int); +static double _TG_ATTRSp __tg_promote(unsigned int); +static double _TG_ATTRSp __tg_promote(long); +static double _TG_ATTRSp __tg_promote(unsigned long); +static double _TG_ATTRSp __tg_promote(long long); +static double _TG_ATTRSp __tg_promote(unsigned long long); +static float _TG_ATTRSp __tg_promote(float); +static double _TG_ATTRSp __tg_promote(double); +static long double _TG_ATTRSp __tg_promote(long double); +static float _Complex _TG_ATTRSp __tg_promote(float _Complex); +static double _Complex _TG_ATTRSp __tg_promote(double _Complex); +static long double _Complex _TG_ATTRSp __tg_promote(long double _Complex); + +#define __tg_promote1(__x) (__typeof__(__tg_promote(__x))) +#define __tg_promote2(__x, __y) (__typeof__(__tg_promote(__x) + \ + __tg_promote(__y))) +#define __tg_promote3(__x, __y, __z) (__typeof__(__tg_promote(__x) + \ + __tg_promote(__y) + \ + __tg_promote(__z))) + +// acos + +static float + _TG_ATTRS + __tg_acos(float __x) {return acosf(__x);} + +static double + _TG_ATTRS + __tg_acos(double __x) {return acos(__x);} + +static long double + _TG_ATTRS + __tg_acos(long double __x) {return acosl(__x);} + +static float _Complex + _TG_ATTRS + __tg_acos(float _Complex __x) {return cacosf(__x);} + +static double _Complex + _TG_ATTRS + __tg_acos(double _Complex __x) {return cacos(__x);} + +static long double _Complex + _TG_ATTRS + __tg_acos(long double _Complex __x) {return cacosl(__x);} + +#undef acos +#define acos(__x) __tg_acos(__tg_promote1((__x))(__x)) + +// asin + +static float + _TG_ATTRS + __tg_asin(float __x) {return asinf(__x);} + +static double + _TG_ATTRS + __tg_asin(double __x) {return asin(__x);} + +static long double + _TG_ATTRS + __tg_asin(long double __x) {return asinl(__x);} + +static float _Complex + _TG_ATTRS + __tg_asin(float _Complex __x) {return casinf(__x);} + +static double _Complex + _TG_ATTRS + __tg_asin(double _Complex __x) {return casin(__x);} + +static long double _Complex + _TG_ATTRS + __tg_asin(long double _Complex __x) {return casinl(__x);} + +#undef asin +#define asin(__x) __tg_asin(__tg_promote1((__x))(__x)) + +// atan + +static float + _TG_ATTRS + __tg_atan(float __x) {return atanf(__x);} + +static double + _TG_ATTRS + __tg_atan(double __x) {return atan(__x);} + +static long double + _TG_ATTRS + __tg_atan(long double __x) {return atanl(__x);} + +static float _Complex + _TG_ATTRS + __tg_atan(float _Complex __x) {return catanf(__x);} + +static double _Complex + _TG_ATTRS + __tg_atan(double _Complex __x) {return catan(__x);} + +static long double _Complex + _TG_ATTRS + __tg_atan(long double _Complex __x) {return catanl(__x);} + +#undef atan +#define atan(__x) __tg_atan(__tg_promote1((__x))(__x)) + +// acosh + +static float + _TG_ATTRS + __tg_acosh(float __x) {return acoshf(__x);} + +static double + _TG_ATTRS + __tg_acosh(double __x) {return acosh(__x);} + +static long double + _TG_ATTRS + __tg_acosh(long double __x) {return acoshl(__x);} + +static float _Complex + _TG_ATTRS + __tg_acosh(float _Complex __x) {return cacoshf(__x);} + +static double _Complex + _TG_ATTRS + __tg_acosh(double _Complex __x) {return cacosh(__x);} + +static long double _Complex + _TG_ATTRS + __tg_acosh(long double _Complex __x) {return cacoshl(__x);} + +#undef acosh +#define acosh(__x) __tg_acosh(__tg_promote1((__x))(__x)) + +// asinh + +static float + _TG_ATTRS + __tg_asinh(float __x) {return asinhf(__x);} + +static double + _TG_ATTRS + __tg_asinh(double __x) {return asinh(__x);} + +static long double + _TG_ATTRS + __tg_asinh(long double __x) {return asinhl(__x);} + +static float _Complex + _TG_ATTRS + __tg_asinh(float _Complex __x) {return casinhf(__x);} + +static double _Complex + _TG_ATTRS + __tg_asinh(double _Complex __x) {return casinh(__x);} + +static long double _Complex + _TG_ATTRS + __tg_asinh(long double _Complex __x) {return casinhl(__x);} + +#undef asinh +#define asinh(__x) __tg_asinh(__tg_promote1((__x))(__x)) + +// atanh + +static float + _TG_ATTRS + __tg_atanh(float __x) {return atanhf(__x);} + +static double + _TG_ATTRS + __tg_atanh(double __x) {return atanh(__x);} + +static long double + _TG_ATTRS + __tg_atanh(long double __x) {return atanhl(__x);} + +static float _Complex + _TG_ATTRS + __tg_atanh(float _Complex __x) {return catanhf(__x);} + +static double _Complex + _TG_ATTRS + __tg_atanh(double _Complex __x) {return catanh(__x);} + +static long double _Complex + _TG_ATTRS + __tg_atanh(long double _Complex __x) {return catanhl(__x);} + +#undef atanh +#define atanh(__x) __tg_atanh(__tg_promote1((__x))(__x)) + +// cos + +static float + _TG_ATTRS + __tg_cos(float __x) {return cosf(__x);} + +static double + _TG_ATTRS + __tg_cos(double __x) {return cos(__x);} + +static long double + _TG_ATTRS + __tg_cos(long double __x) {return cosl(__x);} + +static float _Complex + _TG_ATTRS + __tg_cos(float _Complex __x) {return ccosf(__x);} + +static double _Complex + _TG_ATTRS + __tg_cos(double _Complex __x) {return ccos(__x);} + +static long double _Complex + _TG_ATTRS + __tg_cos(long double _Complex __x) {return ccosl(__x);} + +#undef cos +#define cos(__x) __tg_cos(__tg_promote1((__x))(__x)) + +// sin + +static float + _TG_ATTRS + __tg_sin(float __x) {return sinf(__x);} + +static double + _TG_ATTRS + __tg_sin(double __x) {return sin(__x);} + +static long double + _TG_ATTRS + __tg_sin(long double __x) {return sinl(__x);} + +static float _Complex + _TG_ATTRS + __tg_sin(float _Complex __x) {return csinf(__x);} + +static double _Complex + _TG_ATTRS + __tg_sin(double _Complex __x) {return csin(__x);} + +static long double _Complex + _TG_ATTRS + __tg_sin(long double _Complex __x) {return csinl(__x);} + +#undef sin +#define sin(__x) __tg_sin(__tg_promote1((__x))(__x)) + +// tan + +static float + _TG_ATTRS + __tg_tan(float __x) {return tanf(__x);} + +static double + _TG_ATTRS + __tg_tan(double __x) {return tan(__x);} + +static long double + _TG_ATTRS + __tg_tan(long double __x) {return tanl(__x);} + +static float _Complex + _TG_ATTRS + __tg_tan(float _Complex __x) {return ctanf(__x);} + +static double _Complex + _TG_ATTRS + __tg_tan(double _Complex __x) {return ctan(__x);} + +static long double _Complex + _TG_ATTRS + __tg_tan(long double _Complex __x) {return ctanl(__x);} + +#undef tan +#define tan(__x) __tg_tan(__tg_promote1((__x))(__x)) + +// cosh + +static float + _TG_ATTRS + __tg_cosh(float __x) {return coshf(__x);} + +static double + _TG_ATTRS + __tg_cosh(double __x) {return cosh(__x);} + +static long double + _TG_ATTRS + __tg_cosh(long double __x) {return coshl(__x);} + +static float _Complex + _TG_ATTRS + __tg_cosh(float _Complex __x) {return ccoshf(__x);} + +static double _Complex + _TG_ATTRS + __tg_cosh(double _Complex __x) {return ccosh(__x);} + +static long double _Complex + _TG_ATTRS + __tg_cosh(long double _Complex __x) {return ccoshl(__x);} + +#undef cosh +#define cosh(__x) __tg_cosh(__tg_promote1((__x))(__x)) + +// sinh + +static float + _TG_ATTRS + __tg_sinh(float __x) {return sinhf(__x);} + +static double + _TG_ATTRS + __tg_sinh(double __x) {return sinh(__x);} + +static long double + _TG_ATTRS + __tg_sinh(long double __x) {return sinhl(__x);} + +static float _Complex + _TG_ATTRS + __tg_sinh(float _Complex __x) {return csinhf(__x);} + +static double _Complex + _TG_ATTRS + __tg_sinh(double _Complex __x) {return csinh(__x);} + +static long double _Complex + _TG_ATTRS + __tg_sinh(long double _Complex __x) {return csinhl(__x);} + +#undef sinh +#define sinh(__x) __tg_sinh(__tg_promote1((__x))(__x)) + +// tanh + +static float + _TG_ATTRS + __tg_tanh(float __x) {return tanhf(__x);} + +static double + _TG_ATTRS + __tg_tanh(double __x) {return tanh(__x);} + +static long double + _TG_ATTRS + __tg_tanh(long double __x) {return tanhl(__x);} + +static float _Complex + _TG_ATTRS + __tg_tanh(float _Complex __x) {return ctanhf(__x);} + +static double _Complex + _TG_ATTRS + __tg_tanh(double _Complex __x) {return ctanh(__x);} + +static long double _Complex + _TG_ATTRS + __tg_tanh(long double _Complex __x) {return ctanhl(__x);} + +#undef tanh +#define tanh(__x) __tg_tanh(__tg_promote1((__x))(__x)) + +// exp + +static float + _TG_ATTRS + __tg_exp(float __x) {return expf(__x);} + +static double + _TG_ATTRS + __tg_exp(double __x) {return exp(__x);} + +static long double + _TG_ATTRS + __tg_exp(long double __x) {return expl(__x);} + +static float _Complex + _TG_ATTRS + __tg_exp(float _Complex __x) {return cexpf(__x);} + +static double _Complex + _TG_ATTRS + __tg_exp(double _Complex __x) {return cexp(__x);} + +static long double _Complex + _TG_ATTRS + __tg_exp(long double _Complex __x) {return cexpl(__x);} + +#undef exp +#define exp(__x) __tg_exp(__tg_promote1((__x))(__x)) + +// log + +static float + _TG_ATTRS + __tg_log(float __x) {return logf(__x);} + +static double + _TG_ATTRS + __tg_log(double __x) {return log(__x);} + +static long double + _TG_ATTRS + __tg_log(long double __x) {return logl(__x);} + +static float _Complex + _TG_ATTRS + __tg_log(float _Complex __x) {return clogf(__x);} + +static double _Complex + _TG_ATTRS + __tg_log(double _Complex __x) {return clog(__x);} + +static long double _Complex + _TG_ATTRS + __tg_log(long double _Complex __x) {return clogl(__x);} + +#undef log +#define log(__x) __tg_log(__tg_promote1((__x))(__x)) + +// pow + +static float + _TG_ATTRS + __tg_pow(float __x, float __y) {return powf(__x, __y);} + +static double + _TG_ATTRS + __tg_pow(double __x, double __y) {return pow(__x, __y);} + +static long double + _TG_ATTRS + __tg_pow(long double __x, long double __y) {return powl(__x, __y);} + +static float _Complex + _TG_ATTRS + __tg_pow(float _Complex __x, float _Complex __y) {return cpowf(__x, __y);} + +static double _Complex + _TG_ATTRS + __tg_pow(double _Complex __x, double _Complex __y) {return cpow(__x, __y);} + +static long double _Complex + _TG_ATTRS + __tg_pow(long double _Complex __x, long double _Complex __y) + {return cpowl(__x, __y);} + +#undef pow +#define pow(__x, __y) __tg_pow(__tg_promote2((__x), (__y))(__x), \ + __tg_promote2((__x), (__y))(__y)) + +// sqrt + +static float + _TG_ATTRS + __tg_sqrt(float __x) {return sqrtf(__x);} + +static double + _TG_ATTRS + __tg_sqrt(double __x) {return sqrt(__x);} + +static long double + _TG_ATTRS + __tg_sqrt(long double __x) {return sqrtl(__x);} + +static float _Complex + _TG_ATTRS + __tg_sqrt(float _Complex __x) {return csqrtf(__x);} + +static double _Complex + _TG_ATTRS + __tg_sqrt(double _Complex __x) {return csqrt(__x);} + +static long double _Complex + _TG_ATTRS + __tg_sqrt(long double _Complex __x) {return csqrtl(__x);} + +#undef sqrt +#define sqrt(__x) __tg_sqrt(__tg_promote1((__x))(__x)) + +// fabs + +static float + _TG_ATTRS + __tg_fabs(float __x) {return fabsf(__x);} + +static double + _TG_ATTRS + __tg_fabs(double __x) {return fabs(__x);} + +static long double + _TG_ATTRS + __tg_fabs(long double __x) {return fabsl(__x);} + +static float + _TG_ATTRS + __tg_fabs(float _Complex __x) {return cabsf(__x);} + +static double + _TG_ATTRS + __tg_fabs(double _Complex __x) {return cabs(__x);} + +static long double + _TG_ATTRS + __tg_fabs(long double _Complex __x) {return cabsl(__x);} + +#undef fabs +#define fabs(__x) __tg_fabs(__tg_promote1((__x))(__x)) + +// atan2 + +static float + _TG_ATTRS + __tg_atan2(float __x, float __y) {return atan2f(__x, __y);} + +static double + _TG_ATTRS + __tg_atan2(double __x, double __y) {return atan2(__x, __y);} + +static long double + _TG_ATTRS + __tg_atan2(long double __x, long double __y) {return atan2l(__x, __y);} + +#undef atan2 +#define atan2(__x, __y) __tg_atan2(__tg_promote2((__x), (__y))(__x), \ + __tg_promote2((__x), (__y))(__y)) + +// cbrt + +static float + _TG_ATTRS + __tg_cbrt(float __x) {return cbrtf(__x);} + +static double + _TG_ATTRS + __tg_cbrt(double __x) {return cbrt(__x);} + +static long double + _TG_ATTRS + __tg_cbrt(long double __x) {return cbrtl(__x);} + +#undef cbrt +#define cbrt(__x) __tg_cbrt(__tg_promote1((__x))(__x)) + +// ceil + +static float + _TG_ATTRS + __tg_ceil(float __x) {return ceilf(__x);} + +static double + _TG_ATTRS + __tg_ceil(double __x) {return ceil(__x);} + +static long double + _TG_ATTRS + __tg_ceil(long double __x) {return ceill(__x);} + +#undef ceil +#define ceil(__x) __tg_ceil(__tg_promote1((__x))(__x)) + +// copysign + +static float + _TG_ATTRS + __tg_copysign(float __x, float __y) {return copysignf(__x, __y);} + +static double + _TG_ATTRS + __tg_copysign(double __x, double __y) {return copysign(__x, __y);} + +static long double + _TG_ATTRS + __tg_copysign(long double __x, long double __y) {return copysignl(__x, __y);} + +#undef copysign +#define copysign(__x, __y) __tg_copysign(__tg_promote2((__x), (__y))(__x), \ + __tg_promote2((__x), (__y))(__y)) + +// erf + +static float + _TG_ATTRS + __tg_erf(float __x) {return erff(__x);} + +static double + _TG_ATTRS + __tg_erf(double __x) {return erf(__x);} + +static long double + _TG_ATTRS + __tg_erf(long double __x) {return erfl(__x);} + +#undef erf +#define erf(__x) __tg_erf(__tg_promote1((__x))(__x)) + +// erfc + +static float + _TG_ATTRS + __tg_erfc(float __x) {return erfcf(__x);} + +static double + _TG_ATTRS + __tg_erfc(double __x) {return erfc(__x);} + +static long double + _TG_ATTRS + __tg_erfc(long double __x) {return erfcl(__x);} + +#undef erfc +#define erfc(__x) __tg_erfc(__tg_promote1((__x))(__x)) + +// exp2 + +static float + _TG_ATTRS + __tg_exp2(float __x) {return exp2f(__x);} + +static double + _TG_ATTRS + __tg_exp2(double __x) {return exp2(__x);} + +static long double + _TG_ATTRS + __tg_exp2(long double __x) {return exp2l(__x);} + +#undef exp2 +#define exp2(__x) __tg_exp2(__tg_promote1((__x))(__x)) + +// expm1 + +static float + _TG_ATTRS + __tg_expm1(float __x) {return expm1f(__x);} + +static double + _TG_ATTRS + __tg_expm1(double __x) {return expm1(__x);} + +static long double + _TG_ATTRS + __tg_expm1(long double __x) {return expm1l(__x);} + +#undef expm1 +#define expm1(__x) __tg_expm1(__tg_promote1((__x))(__x)) + +// fdim + +static float + _TG_ATTRS + __tg_fdim(float __x, float __y) {return fdimf(__x, __y);} + +static double + _TG_ATTRS + __tg_fdim(double __x, double __y) {return fdim(__x, __y);} + +static long double + _TG_ATTRS + __tg_fdim(long double __x, long double __y) {return fdiml(__x, __y);} + +#undef fdim +#define fdim(__x, __y) __tg_fdim(__tg_promote2((__x), (__y))(__x), \ + __tg_promote2((__x), (__y))(__y)) + +// floor + +static float + _TG_ATTRS + __tg_floor(float __x) {return floorf(__x);} + +static double + _TG_ATTRS + __tg_floor(double __x) {return floor(__x);} + +static long double + _TG_ATTRS + __tg_floor(long double __x) {return floorl(__x);} + +#undef floor +#define floor(__x) __tg_floor(__tg_promote1((__x))(__x)) + +// fma + +static float + _TG_ATTRS + __tg_fma(float __x, float __y, float __z) + {return fmaf(__x, __y, __z);} + +static double + _TG_ATTRS + __tg_fma(double __x, double __y, double __z) + {return fma(__x, __y, __z);} + +static long double + _TG_ATTRS + __tg_fma(long double __x,long double __y, long double __z) + {return fmal(__x, __y, __z);} + +#undef fma +#define fma(__x, __y, __z) \ + __tg_fma(__tg_promote3((__x), (__y), (__z))(__x), \ + __tg_promote3((__x), (__y), (__z))(__y), \ + __tg_promote3((__x), (__y), (__z))(__z)) + +// fmax + +static float + _TG_ATTRS + __tg_fmax(float __x, float __y) {return fmaxf(__x, __y);} + +static double + _TG_ATTRS + __tg_fmax(double __x, double __y) {return fmax(__x, __y);} + +static long double + _TG_ATTRS + __tg_fmax(long double __x, long double __y) {return fmaxl(__x, __y);} + +#undef fmax +#define fmax(__x, __y) __tg_fmax(__tg_promote2((__x), (__y))(__x), \ + __tg_promote2((__x), (__y))(__y)) + +// fmin + +static float + _TG_ATTRS + __tg_fmin(float __x, float __y) {return fminf(__x, __y);} + +static double + _TG_ATTRS + __tg_fmin(double __x, double __y) {return fmin(__x, __y);} + +static long double + _TG_ATTRS + __tg_fmin(long double __x, long double __y) {return fminl(__x, __y);} + +#undef fmin +#define fmin(__x, __y) __tg_fmin(__tg_promote2((__x), (__y))(__x), \ + __tg_promote2((__x), (__y))(__y)) + +// fmod + +static float + _TG_ATTRS + __tg_fmod(float __x, float __y) {return fmodf(__x, __y);} + +static double + _TG_ATTRS + __tg_fmod(double __x, double __y) {return fmod(__x, __y);} + +static long double + _TG_ATTRS + __tg_fmod(long double __x, long double __y) {return fmodl(__x, __y);} + +#undef fmod +#define fmod(__x, __y) __tg_fmod(__tg_promote2((__x), (__y))(__x), \ + __tg_promote2((__x), (__y))(__y)) + +// frexp + +static float + _TG_ATTRS + __tg_frexp(float __x, int* __y) {return frexpf(__x, __y);} + +static double + _TG_ATTRS + __tg_frexp(double __x, int* __y) {return frexp(__x, __y);} + +static long double + _TG_ATTRS + __tg_frexp(long double __x, int* __y) {return frexpl(__x, __y);} + +#undef frexp +#define frexp(__x, __y) __tg_frexp(__tg_promote1((__x))(__x), __y) + +// hypot + +static float + _TG_ATTRS + __tg_hypot(float __x, float __y) {return hypotf(__x, __y);} + +static double + _TG_ATTRS + __tg_hypot(double __x, double __y) {return hypot(__x, __y);} + +static long double + _TG_ATTRS + __tg_hypot(long double __x, long double __y) {return hypotl(__x, __y);} + +#undef hypot +#define hypot(__x, __y) __tg_hypot(__tg_promote2((__x), (__y))(__x), \ + __tg_promote2((__x), (__y))(__y)) + +// ilogb + +static int + _TG_ATTRS + __tg_ilogb(float __x) {return ilogbf(__x);} + +static int + _TG_ATTRS + __tg_ilogb(double __x) {return ilogb(__x);} + +static int + _TG_ATTRS + __tg_ilogb(long double __x) {return ilogbl(__x);} + +#undef ilogb +#define ilogb(__x) __tg_ilogb(__tg_promote1((__x))(__x)) + +// ldexp + +static float + _TG_ATTRS + __tg_ldexp(float __x, int __y) {return ldexpf(__x, __y);} + +static double + _TG_ATTRS + __tg_ldexp(double __x, int __y) {return ldexp(__x, __y);} + +static long double + _TG_ATTRS + __tg_ldexp(long double __x, int __y) {return ldexpl(__x, __y);} + +#undef ldexp +#define ldexp(__x, __y) __tg_ldexp(__tg_promote1((__x))(__x), __y) + +// lgamma + +static float + _TG_ATTRS + __tg_lgamma(float __x) {return lgammaf(__x);} + +static double + _TG_ATTRS + __tg_lgamma(double __x) {return lgamma(__x);} + +static long double + _TG_ATTRS + __tg_lgamma(long double __x) {return lgammal(__x);} + +#undef lgamma +#define lgamma(__x) __tg_lgamma(__tg_promote1((__x))(__x)) + +// llrint + +static long long + _TG_ATTRS + __tg_llrint(float __x) {return llrintf(__x);} + +static long long + _TG_ATTRS + __tg_llrint(double __x) {return llrint(__x);} + +static long long + _TG_ATTRS + __tg_llrint(long double __x) {return llrintl(__x);} + +#undef llrint +#define llrint(__x) __tg_llrint(__tg_promote1((__x))(__x)) + +// llround + +static long long + _TG_ATTRS + __tg_llround(float __x) {return llroundf(__x);} + +static long long + _TG_ATTRS + __tg_llround(double __x) {return llround(__x);} + +static long long + _TG_ATTRS + __tg_llround(long double __x) {return llroundl(__x);} + +#undef llround +#define llround(__x) __tg_llround(__tg_promote1((__x))(__x)) + +// log10 + +static float + _TG_ATTRS + __tg_log10(float __x) {return log10f(__x);} + +static double + _TG_ATTRS + __tg_log10(double __x) {return log10(__x);} + +static long double + _TG_ATTRS + __tg_log10(long double __x) {return log10l(__x);} + +#undef log10 +#define log10(__x) __tg_log10(__tg_promote1((__x))(__x)) + +// log1p + +static float + _TG_ATTRS + __tg_log1p(float __x) {return log1pf(__x);} + +static double + _TG_ATTRS + __tg_log1p(double __x) {return log1p(__x);} + +static long double + _TG_ATTRS + __tg_log1p(long double __x) {return log1pl(__x);} + +#undef log1p +#define log1p(__x) __tg_log1p(__tg_promote1((__x))(__x)) + +// log2 + +static float + _TG_ATTRS + __tg_log2(float __x) {return log2f(__x);} + +static double + _TG_ATTRS + __tg_log2(double __x) {return log2(__x);} + +static long double + _TG_ATTRS + __tg_log2(long double __x) {return log2l(__x);} + +#undef log2 +#define log2(__x) __tg_log2(__tg_promote1((__x))(__x)) + +// logb + +static float + _TG_ATTRS + __tg_logb(float __x) {return logbf(__x);} + +static double + _TG_ATTRS + __tg_logb(double __x) {return logb(__x);} + +static long double + _TG_ATTRS + __tg_logb(long double __x) {return logbl(__x);} + +#undef logb +#define logb(__x) __tg_logb(__tg_promote1((__x))(__x)) + +// lrint + +static long + _TG_ATTRS + __tg_lrint(float __x) {return lrintf(__x);} + +static long + _TG_ATTRS + __tg_lrint(double __x) {return lrint(__x);} + +static long + _TG_ATTRS + __tg_lrint(long double __x) {return lrintl(__x);} + +#undef lrint +#define lrint(__x) __tg_lrint(__tg_promote1((__x))(__x)) + +// lround + +static long + _TG_ATTRS + __tg_lround(float __x) {return lroundf(__x);} + +static long + _TG_ATTRS + __tg_lround(double __x) {return lround(__x);} + +static long + _TG_ATTRS + __tg_lround(long double __x) {return lroundl(__x);} + +#undef lround +#define lround(__x) __tg_lround(__tg_promote1((__x))(__x)) + +// nearbyint + +static float + _TG_ATTRS + __tg_nearbyint(float __x) {return nearbyintf(__x);} + +static double + _TG_ATTRS + __tg_nearbyint(double __x) {return nearbyint(__x);} + +static long double + _TG_ATTRS + __tg_nearbyint(long double __x) {return nearbyintl(__x);} + +#undef nearbyint +#define nearbyint(__x) __tg_nearbyint(__tg_promote1((__x))(__x)) + +// nextafter + +static float + _TG_ATTRS + __tg_nextafter(float __x, float __y) {return nextafterf(__x, __y);} + +static double + _TG_ATTRS + __tg_nextafter(double __x, double __y) {return nextafter(__x, __y);} + +static long double + _TG_ATTRS + __tg_nextafter(long double __x, long double __y) {return nextafterl(__x, __y);} + +#undef nextafter +#define nextafter(__x, __y) __tg_nextafter(__tg_promote2((__x), (__y))(__x), \ + __tg_promote2((__x), (__y))(__y)) + +// nexttoward + +static float + _TG_ATTRS + __tg_nexttoward(float __x, long double __y) {return nexttowardf(__x, __y);} + +static double + _TG_ATTRS + __tg_nexttoward(double __x, long double __y) {return nexttoward(__x, __y);} + +static long double + _TG_ATTRS + __tg_nexttoward(long double __x, long double __y) {return nexttowardl(__x, __y);} + +#undef nexttoward +#define nexttoward(__x, __y) __tg_nexttoward(__tg_promote1((__x))(__x), (__y)) + +// remainder + +static float + _TG_ATTRS + __tg_remainder(float __x, float __y) {return remainderf(__x, __y);} + +static double + _TG_ATTRS + __tg_remainder(double __x, double __y) {return remainder(__x, __y);} + +static long double + _TG_ATTRS + __tg_remainder(long double __x, long double __y) {return remainderl(__x, __y);} + +#undef remainder +#define remainder(__x, __y) __tg_remainder(__tg_promote2((__x), (__y))(__x), \ + __tg_promote2((__x), (__y))(__y)) + +// remquo + +static float + _TG_ATTRS + __tg_remquo(float __x, float __y, int* __z) + {return remquof(__x, __y, __z);} + +static double + _TG_ATTRS + __tg_remquo(double __x, double __y, int* __z) + {return remquo(__x, __y, __z);} + +static long double + _TG_ATTRS + __tg_remquo(long double __x,long double __y, int* __z) + {return remquol(__x, __y, __z);} + +#undef remquo +#define remquo(__x, __y, __z) \ + __tg_remquo(__tg_promote2((__x), (__y))(__x), \ + __tg_promote2((__x), (__y))(__y), \ + (__z)) + +// rint + +static float + _TG_ATTRS + __tg_rint(float __x) {return rintf(__x);} + +static double + _TG_ATTRS + __tg_rint(double __x) {return rint(__x);} + +static long double + _TG_ATTRS + __tg_rint(long double __x) {return rintl(__x);} + +#undef rint +#define rint(__x) __tg_rint(__tg_promote1((__x))(__x)) + +// round + +static float + _TG_ATTRS + __tg_round(float __x) {return roundf(__x);} + +static double + _TG_ATTRS + __tg_round(double __x) {return round(__x);} + +static long double + _TG_ATTRS + __tg_round(long double __x) {return roundl(__x);} + +#undef round +#define round(__x) __tg_round(__tg_promote1((__x))(__x)) + +// scalbn + +static float + _TG_ATTRS + __tg_scalbn(float __x, int __y) {return scalbnf(__x, __y);} + +static double + _TG_ATTRS + __tg_scalbn(double __x, int __y) {return scalbn(__x, __y);} + +static long double + _TG_ATTRS + __tg_scalbn(long double __x, int __y) {return scalbnl(__x, __y);} + +#undef scalbn +#define scalbn(__x, __y) __tg_scalbn(__tg_promote1((__x))(__x), __y) + +// scalbln + +static float + _TG_ATTRS + __tg_scalbln(float __x, long __y) {return scalblnf(__x, __y);} + +static double + _TG_ATTRS + __tg_scalbln(double __x, long __y) {return scalbln(__x, __y);} + +static long double + _TG_ATTRS + __tg_scalbln(long double __x, long __y) {return scalblnl(__x, __y);} + +#undef scalbln +#define scalbln(__x, __y) __tg_scalbln(__tg_promote1((__x))(__x), __y) + +// tgamma + +static float + _TG_ATTRS + __tg_tgamma(float __x) {return tgammaf(__x);} + +static double + _TG_ATTRS + __tg_tgamma(double __x) {return tgamma(__x);} + +static long double + _TG_ATTRS + __tg_tgamma(long double __x) {return tgammal(__x);} + +#undef tgamma +#define tgamma(__x) __tg_tgamma(__tg_promote1((__x))(__x)) + +// trunc + +static float + _TG_ATTRS + __tg_trunc(float __x) {return truncf(__x);} + +static double + _TG_ATTRS + __tg_trunc(double __x) {return trunc(__x);} + +static long double + _TG_ATTRS + __tg_trunc(long double __x) {return truncl(__x);} + +#undef trunc +#define trunc(__x) __tg_trunc(__tg_promote1((__x))(__x)) + +// carg + +static float + _TG_ATTRS + __tg_carg(float __x) {return atan2f(0.F, __x);} + +static double + _TG_ATTRS + __tg_carg(double __x) {return atan2(0., __x);} + +static long double + _TG_ATTRS + __tg_carg(long double __x) {return atan2l(0.L, __x);} + +static float + _TG_ATTRS + __tg_carg(float _Complex __x) {return cargf(__x);} + +static double + _TG_ATTRS + __tg_carg(double _Complex __x) {return carg(__x);} + +static long double + _TG_ATTRS + __tg_carg(long double _Complex __x) {return cargl(__x);} + +#undef carg +#define carg(__x) __tg_carg(__tg_promote1((__x))(__x)) + +// cimag + +static float + _TG_ATTRS + __tg_cimag(float __x) {return 0;} + +static double + _TG_ATTRS + __tg_cimag(double __x) {return 0;} + +static long double + _TG_ATTRS + __tg_cimag(long double __x) {return 0;} + +static float + _TG_ATTRS + __tg_cimag(float _Complex __x) {return cimagf(__x);} + +static double + _TG_ATTRS + __tg_cimag(double _Complex __x) {return cimag(__x);} + +static long double + _TG_ATTRS + __tg_cimag(long double _Complex __x) {return cimagl(__x);} + +#undef cimag +#define cimag(__x) __tg_cimag(__tg_promote1((__x))(__x)) + +// conj + +static float _Complex + _TG_ATTRS + __tg_conj(float __x) {return __x;} + +static double _Complex + _TG_ATTRS + __tg_conj(double __x) {return __x;} + +static long double _Complex + _TG_ATTRS + __tg_conj(long double __x) {return __x;} + +static float _Complex + _TG_ATTRS + __tg_conj(float _Complex __x) {return conjf(__x);} + +static double _Complex + _TG_ATTRS + __tg_conj(double _Complex __x) {return conj(__x);} + +static long double _Complex + _TG_ATTRS + __tg_conj(long double _Complex __x) {return conjl(__x);} + +#undef conj +#define conj(__x) __tg_conj(__tg_promote1((__x))(__x)) + +// cproj + +static float _Complex + _TG_ATTRS + __tg_cproj(float __x) {return cprojf(__x);} + +static double _Complex + _TG_ATTRS + __tg_cproj(double __x) {return cproj(__x);} + +static long double _Complex + _TG_ATTRS + __tg_cproj(long double __x) {return cprojl(__x);} + +static float _Complex + _TG_ATTRS + __tg_cproj(float _Complex __x) {return cprojf(__x);} + +static double _Complex + _TG_ATTRS + __tg_cproj(double _Complex __x) {return cproj(__x);} + +static long double _Complex + _TG_ATTRS + __tg_cproj(long double _Complex __x) {return cprojl(__x);} + +#undef cproj +#define cproj(__x) __tg_cproj(__tg_promote1((__x))(__x)) + +// creal + +static float + _TG_ATTRS + __tg_creal(float __x) {return __x;} + +static double + _TG_ATTRS + __tg_creal(double __x) {return __x;} + +static long double + _TG_ATTRS + __tg_creal(long double __x) {return __x;} + +static float + _TG_ATTRS + __tg_creal(float _Complex __x) {return crealf(__x);} + +static double + _TG_ATTRS + __tg_creal(double _Complex __x) {return creal(__x);} + +static long double + _TG_ATTRS + __tg_creal(long double _Complex __x) {return creall(__x);} + +#undef creal +#define creal(__x) __tg_creal(__tg_promote1((__x))(__x)) + +#undef _TG_ATTRSp +#undef _TG_ATTRS + +#endif /* __cplusplus */ +#endif /* __TGMATH_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/tmmintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/tmmintrin.h new file mode 100755 index 0000000..4238f5b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/tmmintrin.h @@ -0,0 +1,225 @@ +/*===---- tmmintrin.h - SSSE3 intrinsics -----------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __TMMINTRIN_H +#define __TMMINTRIN_H + +#ifndef __SSSE3__ +#error "SSSE3 instruction set not enabled" +#else + +#include + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_abs_pi8(__m64 __a) +{ + return (__m64)__builtin_ia32_pabsb((__v8qi)__a); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_abs_epi8(__m128i __a) +{ + return (__m128i)__builtin_ia32_pabsb128((__v16qi)__a); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_abs_pi16(__m64 __a) +{ + return (__m64)__builtin_ia32_pabsw((__v4hi)__a); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_abs_epi16(__m128i __a) +{ + return (__m128i)__builtin_ia32_pabsw128((__v8hi)__a); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_abs_pi32(__m64 __a) +{ + return (__m64)__builtin_ia32_pabsd((__v2si)__a); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_abs_epi32(__m128i __a) +{ + return (__m128i)__builtin_ia32_pabsd128((__v4si)__a); +} + +#define _mm_alignr_epi8(a, b, n) __extension__ ({ \ + __m128i __a = (a); \ + __m128i __b = (b); \ + (__m128i)__builtin_ia32_palignr128((__v16qi)__a, (__v16qi)__b, (n)); }) + +#define _mm_alignr_pi8(a, b, n) __extension__ ({ \ + __m64 __a = (a); \ + __m64 __b = (b); \ + (__m64)__builtin_ia32_palignr((__v8qi)__a, (__v8qi)__b, (n)); }) + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_hadd_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_phaddw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_hadd_epi32(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_phaddd128((__v4si)__a, (__v4si)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_hadd_pi16(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_phaddw((__v4hi)__a, (__v4hi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_hadd_pi32(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_phaddd((__v2si)__a, (__v2si)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_hadds_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_phaddsw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_hadds_pi16(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_phaddsw((__v4hi)__a, (__v4hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_hsub_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_phsubw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_hsub_epi32(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_phsubd128((__v4si)__a, (__v4si)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_hsub_pi16(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_phsubw((__v4hi)__a, (__v4hi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_hsub_pi32(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_phsubd((__v2si)__a, (__v2si)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_hsubs_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_phsubsw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_hsubs_pi16(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_phsubsw((__v4hi)__a, (__v4hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maddubs_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pmaddubsw128((__v16qi)__a, (__v16qi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_maddubs_pi16(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_pmaddubsw((__v8qi)__a, (__v8qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_mulhrs_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pmulhrsw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_mulhrs_pi16(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_pmulhrsw((__v4hi)__a, (__v4hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_shuffle_epi8(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_pshufb128((__v16qi)__a, (__v16qi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_shuffle_pi8(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_pshufb((__v8qi)__a, (__v8qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sign_epi8(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_psignb128((__v16qi)__a, (__v16qi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sign_epi16(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_psignw128((__v8hi)__a, (__v8hi)__b); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sign_epi32(__m128i __a, __m128i __b) +{ + return (__m128i)__builtin_ia32_psignd128((__v4si)__a, (__v4si)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sign_pi8(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_psignb((__v8qi)__a, (__v8qi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sign_pi16(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_psignw((__v4hi)__a, (__v4hi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sign_pi32(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_psignd((__v2si)__a, (__v2si)__b); +} + +#endif /* __SSSE3__ */ + +#endif /* __TMMINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/unwind.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/unwind.h new file mode 100755 index 0000000..685c1df --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/unwind.h @@ -0,0 +1,280 @@ +/*===---- unwind.h - Stack unwinding ----------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +/* See "Data Definitions for libgcc_s" in the Linux Standard Base.*/ + +#ifndef __CLANG_UNWIND_H +#define __CLANG_UNWIND_H + +#if __has_include_next() +/* Darwin (from 11.x on) and libunwind provide an unwind.h. If that's available, + * use it. libunwind wraps some of its definitions in #ifdef _GNU_SOURCE, + * so define that around the include.*/ +# ifndef _GNU_SOURCE +# define _SHOULD_UNDEFINE_GNU_SOURCE +# define _GNU_SOURCE +# endif +// libunwind's unwind.h reflects the current visibility. However, Mozilla +// builds with -fvisibility=hidden and relies on gcc's unwind.h to reset the +// visibility to default and export its contents. gcc also allows users to +// override its override by #defining HIDE_EXPORTS (but note, this only obeys +// the user's -fvisibility setting; it doesn't hide any exports on its own). We +// imitate gcc's header here: +# ifdef HIDE_EXPORTS +# include_next +# else +# pragma GCC visibility push(default) +# include_next +# pragma GCC visibility pop +# endif +# ifdef _SHOULD_UNDEFINE_GNU_SOURCE +# undef _GNU_SOURCE +# undef _SHOULD_UNDEFINE_GNU_SOURCE +# endif +#else + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* It is a bit strange for a header to play with the visibility of the + symbols it declares, but this matches gcc's behavior and some programs + depend on it */ +#ifndef HIDE_EXPORTS +#pragma GCC visibility push(default) +#endif + +typedef uintptr_t _Unwind_Word; +typedef intptr_t _Unwind_Sword; +typedef uintptr_t _Unwind_Ptr; +typedef uintptr_t _Unwind_Internal_Ptr; +typedef uint64_t _Unwind_Exception_Class; + +typedef intptr_t _sleb128_t; +typedef uintptr_t _uleb128_t; + +struct _Unwind_Context; +struct _Unwind_Exception; +typedef enum { + _URC_NO_REASON = 0, + _URC_FOREIGN_EXCEPTION_CAUGHT = 1, + + _URC_FATAL_PHASE2_ERROR = 2, + _URC_FATAL_PHASE1_ERROR = 3, + _URC_NORMAL_STOP = 4, + + _URC_END_OF_STACK = 5, + _URC_HANDLER_FOUND = 6, + _URC_INSTALL_CONTEXT = 7, + _URC_CONTINUE_UNWIND = 8 +} _Unwind_Reason_Code; + +typedef enum { + _UA_SEARCH_PHASE = 1, + _UA_CLEANUP_PHASE = 2, + + _UA_HANDLER_FRAME = 4, + _UA_FORCE_UNWIND = 8, + _UA_END_OF_STACK = 16 /* gcc extension to C++ ABI */ +} _Unwind_Action; + +typedef void (*_Unwind_Exception_Cleanup_Fn)(_Unwind_Reason_Code, + struct _Unwind_Exception *); + +struct _Unwind_Exception { + _Unwind_Exception_Class exception_class; + _Unwind_Exception_Cleanup_Fn exception_cleanup; + _Unwind_Word private_1; + _Unwind_Word private_2; + /* The Itanium ABI requires that _Unwind_Exception objects are "double-word + * aligned". GCC has interpreted this to mean "use the maximum useful + * alignment for the target"; so do we. */ +} __attribute__((__aligned__)); + +typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)(int, _Unwind_Action, + _Unwind_Exception_Class, + struct _Unwind_Exception *, + struct _Unwind_Context *, + void *); + +typedef _Unwind_Reason_Code (*_Unwind_Personality_Fn)( + int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *, + struct _Unwind_Context *); +typedef _Unwind_Personality_Fn __personality_routine; + +typedef _Unwind_Reason_Code (*_Unwind_Trace_Fn)(struct _Unwind_Context *, + void *); + +#if defined(__arm__) && !defined(__APPLE__) + +typedef enum { + _UVRSC_CORE = 0, /* integer register */ + _UVRSC_VFP = 1, /* vfp */ + _UVRSC_WMMXD = 3, /* Intel WMMX data register */ + _UVRSC_WMMXC = 4 /* Intel WMMX control register */ +} _Unwind_VRS_RegClass; + +typedef enum { + _UVRSD_UINT32 = 0, + _UVRSD_VFPX = 1, + _UVRSD_UINT64 = 3, + _UVRSD_FLOAT = 4, + _UVRSD_DOUBLE = 5 +} _Unwind_VRS_DataRepresentation; + +typedef enum { + _UVRSR_OK = 0, + _UVRSR_NOT_IMPLEMENTED = 1, + _UVRSR_FAILED = 2 +} _Unwind_VRS_Result; + +_Unwind_VRS_Result _Unwind_VRS_Get(struct _Unwind_Context *__context, + _Unwind_VRS_RegClass __regclass, + uint32_t __regno, + _Unwind_VRS_DataRepresentation __representation, + void *__valuep); + +_Unwind_VRS_Result _Unwind_VRS_Set(struct _Unwind_Context *__context, + _Unwind_VRS_RegClass __regclass, + uint32_t __regno, + _Unwind_VRS_DataRepresentation __representation, + void *__valuep); + +static __inline__ +_Unwind_Word _Unwind_GetGR(struct _Unwind_Context *__context, int __index) { + _Unwind_Word __value; + _Unwind_VRS_Get(__context, _UVRSC_CORE, __index, _UVRSD_UINT32, &__value); + return __value; +} + +static __inline__ +void _Unwind_SetGR(struct _Unwind_Context *__context, int __index, + _Unwind_Word __value) { + _Unwind_VRS_Set(__context, _UVRSC_CORE, __index, _UVRSD_UINT32, &__value); +} + +static __inline__ +_Unwind_Word _Unwind_GetIP(struct _Unwind_Context *__context) { + _Unwind_Word __ip = _Unwind_GetGR(__context, 15); + return __ip & ~(_Unwind_Word)(0x1); /* Remove thumb mode bit. */ +} + +static __inline__ +void _Unwind_SetIP(struct _Unwind_Context *__context, _Unwind_Word __value) { + _Unwind_Word __thumb_mode_bit = _Unwind_GetGR(__context, 15) & 0x1; + _Unwind_SetGR(__context, 15, __value | __thumb_mode_bit); +} +#else +_Unwind_Word _Unwind_GetGR(struct _Unwind_Context *, int); +void _Unwind_SetGR(struct _Unwind_Context *, int, _Unwind_Word); + +_Unwind_Word _Unwind_GetIP(struct _Unwind_Context *); +void _Unwind_SetIP(struct _Unwind_Context *, _Unwind_Word); +#endif + + +_Unwind_Word _Unwind_GetIPInfo(struct _Unwind_Context *, int *); + +_Unwind_Word _Unwind_GetCFA(struct _Unwind_Context *); + +void *_Unwind_GetLanguageSpecificData(struct _Unwind_Context *); + +_Unwind_Ptr _Unwind_GetRegionStart(struct _Unwind_Context *); + +/* DWARF EH functions; currently not available on Darwin/ARM */ +#if !defined(__APPLE__) || !defined(__arm__) + +_Unwind_Reason_Code _Unwind_RaiseException(struct _Unwind_Exception *); +_Unwind_Reason_Code _Unwind_ForcedUnwind(struct _Unwind_Exception *, + _Unwind_Stop_Fn, void *); +void _Unwind_DeleteException(struct _Unwind_Exception *); +void _Unwind_Resume(struct _Unwind_Exception *); +_Unwind_Reason_Code _Unwind_Resume_or_Rethrow(struct _Unwind_Exception *); + +#endif + +_Unwind_Reason_Code _Unwind_Backtrace(_Unwind_Trace_Fn, void *); + +/* setjmp(3)/longjmp(3) stuff */ +typedef struct SjLj_Function_Context *_Unwind_FunctionContext_t; + +void _Unwind_SjLj_Register(_Unwind_FunctionContext_t); +void _Unwind_SjLj_Unregister(_Unwind_FunctionContext_t); +_Unwind_Reason_Code _Unwind_SjLj_RaiseException(struct _Unwind_Exception *); +_Unwind_Reason_Code _Unwind_SjLj_ForcedUnwind(struct _Unwind_Exception *, + _Unwind_Stop_Fn, void *); +void _Unwind_SjLj_Resume(struct _Unwind_Exception *); +_Unwind_Reason_Code _Unwind_SjLj_Resume_or_Rethrow(struct _Unwind_Exception *); + +void *_Unwind_FindEnclosingFunction(void *); + +#ifdef __APPLE__ + +_Unwind_Ptr _Unwind_GetDataRelBase(struct _Unwind_Context *) + __attribute__((unavailable)); +_Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *) + __attribute__((unavailable)); + +/* Darwin-specific functions */ +void __register_frame(const void *); +void __deregister_frame(const void *); + +struct dwarf_eh_bases { + uintptr_t tbase; + uintptr_t dbase; + uintptr_t func; +}; +void *_Unwind_Find_FDE(const void *, struct dwarf_eh_bases *); + +void __register_frame_info_bases(const void *, void *, void *, void *) + __attribute__((unavailable)); +void __register_frame_info(const void *, void *) __attribute__((unavailable)); +void __register_frame_info_table_bases(const void *, void*, void *, void *) + __attribute__((unavailable)); +void __register_frame_info_table(const void *, void *) + __attribute__((unavailable)); +void __register_frame_table(const void *) __attribute__((unavailable)); +void __deregister_frame_info(const void *) __attribute__((unavailable)); +void __deregister_frame_info_bases(const void *)__attribute__((unavailable)); + +#else + +_Unwind_Ptr _Unwind_GetDataRelBase(struct _Unwind_Context *); +_Unwind_Ptr _Unwind_GetTextRelBase(struct _Unwind_Context *); + +#endif + + +#ifndef HIDE_EXPORTS +#pragma GCC visibility pop +#endif + +#ifdef __cplusplus +} +#endif + +#endif + +#endif /* __CLANG_UNWIND_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/varargs.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/varargs.h new file mode 100755 index 0000000..b5477d0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/varargs.h @@ -0,0 +1,26 @@ +/*===---- varargs.h - Variable argument handling -------------------------------------=== +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in +* all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +* THE SOFTWARE. +* +*===-----------------------------------------------------------------------=== +*/ +#ifndef __VARARGS_H +#define __VARARGS_H + #error "Please use instead of " +#endif diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/wmmintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/wmmintrin.h new file mode 100755 index 0000000..369e3c2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/wmmintrin.h @@ -0,0 +1,42 @@ +/*===---- wmmintrin.h - AES intrinsics ------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef _WMMINTRIN_H +#define _WMMINTRIN_H + +#include + +#if !defined (__AES__) && !defined (__PCLMUL__) +# error "AES/PCLMUL instructions not enabled" +#else + +#ifdef __AES__ +#include <__wmmintrin_aes.h> +#endif /* __AES__ */ + +#ifdef __PCLMUL__ +#include <__wmmintrin_pclmul.h> +#endif /* __PCLMUL__ */ + +#endif /* __AES__ || __PCLMUL__ */ +#endif /* _WMMINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/x86intrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/x86intrin.h new file mode 100755 index 0000000..399016f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/x86intrin.h @@ -0,0 +1,79 @@ +/*===---- x86intrin.h - X86 intrinsics -------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __X86INTRIN_H +#define __X86INTRIN_H + +#include + +#ifdef __3dNOW__ +#include +#endif + +#ifdef __BMI__ +#include +#endif + +#ifdef __BMI2__ +#include +#endif + +#ifdef __LZCNT__ +#include +#endif + +#ifdef __POPCNT__ +#include +#endif + +#ifdef __RDSEED__ +#include +#endif + +#ifdef __PRFCHW__ +#include +#endif + +#ifdef __SSE4A__ +#include +#endif + +#ifdef __FMA4__ +#include +#endif + +#ifdef __XOP__ +#include +#endif + +#ifdef __TBM__ +#include +#endif + +#ifdef __F16C__ +#include +#endif + +// FIXME: LWP + +#endif /* __X86INTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/xmmintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/xmmintrin.h new file mode 100755 index 0000000..c68d3ed --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/xmmintrin.h @@ -0,0 +1,1001 @@ +/*===---- xmmintrin.h - SSE intrinsics -------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __XMMINTRIN_H +#define __XMMINTRIN_H + +#ifndef __SSE__ +#error "SSE instruction set not enabled" +#else + +#include + +typedef int __v4si __attribute__((__vector_size__(16))); +typedef float __v4sf __attribute__((__vector_size__(16))); +typedef float __m128 __attribute__((__vector_size__(16))); + +// This header should only be included in a hosted environment as it depends on +// a standard library to provide allocation routines. +#if __STDC_HOSTED__ +#include +#endif + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_add_ss(__m128 __a, __m128 __b) +{ + __a[0] += __b[0]; + return __a; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_add_ps(__m128 __a, __m128 __b) +{ + return __a + __b; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_sub_ss(__m128 __a, __m128 __b) +{ + __a[0] -= __b[0]; + return __a; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_sub_ps(__m128 __a, __m128 __b) +{ + return __a - __b; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_mul_ss(__m128 __a, __m128 __b) +{ + __a[0] *= __b[0]; + return __a; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_mul_ps(__m128 __a, __m128 __b) +{ + return __a * __b; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_div_ss(__m128 __a, __m128 __b) +{ + __a[0] /= __b[0]; + return __a; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_div_ps(__m128 __a, __m128 __b) +{ + return __a / __b; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_sqrt_ss(__m128 __a) +{ + __m128 __c = __builtin_ia32_sqrtss(__a); + return (__m128) { __c[0], __a[1], __a[2], __a[3] }; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_sqrt_ps(__m128 __a) +{ + return __builtin_ia32_sqrtps(__a); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_rcp_ss(__m128 __a) +{ + __m128 __c = __builtin_ia32_rcpss(__a); + return (__m128) { __c[0], __a[1], __a[2], __a[3] }; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_rcp_ps(__m128 __a) +{ + return __builtin_ia32_rcpps(__a); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_rsqrt_ss(__m128 __a) +{ + __m128 __c = __builtin_ia32_rsqrtss(__a); + return (__m128) { __c[0], __a[1], __a[2], __a[3] }; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_rsqrt_ps(__m128 __a) +{ + return __builtin_ia32_rsqrtps(__a); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_min_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_minss(__a, __b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_min_ps(__m128 __a, __m128 __b) +{ + return __builtin_ia32_minps(__a, __b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_max_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_maxss(__a, __b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_max_ps(__m128 __a, __m128 __b) +{ + return __builtin_ia32_maxps(__a, __b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_and_ps(__m128 __a, __m128 __b) +{ + return (__m128)((__v4si)__a & (__v4si)__b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_andnot_ps(__m128 __a, __m128 __b) +{ + return (__m128)(~(__v4si)__a & (__v4si)__b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_or_ps(__m128 __a, __m128 __b) +{ + return (__m128)((__v4si)__a | (__v4si)__b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_xor_ps(__m128 __a, __m128 __b) +{ + return (__m128)((__v4si)__a ^ (__v4si)__b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpeq_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpss(__a, __b, 0); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpeq_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__a, __b, 0); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmplt_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpss(__a, __b, 1); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmplt_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__a, __b, 1); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmple_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpss(__a, __b, 2); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmple_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__a, __b, 2); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpgt_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_shufflevector(__a, + __builtin_ia32_cmpss(__b, __a, 1), + 4, 1, 2, 3); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpgt_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__b, __a, 1); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpge_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_shufflevector(__a, + __builtin_ia32_cmpss(__b, __a, 2), + 4, 1, 2, 3); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpge_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__b, __a, 2); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpneq_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpss(__a, __b, 4); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpneq_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__a, __b, 4); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnlt_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpss(__a, __b, 5); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnlt_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__a, __b, 5); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnle_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpss(__a, __b, 6); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnle_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__a, __b, 6); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpngt_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_shufflevector(__a, + __builtin_ia32_cmpss(__b, __a, 5), + 4, 1, 2, 3); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpngt_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__b, __a, 5); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnge_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_shufflevector(__a, + __builtin_ia32_cmpss(__b, __a, 6), + 4, 1, 2, 3); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpnge_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__b, __a, 6); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpord_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpss(__a, __b, 7); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpord_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__a, __b, 7); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpunord_ss(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpss(__a, __b, 3); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cmpunord_ps(__m128 __a, __m128 __b) +{ + return (__m128)__builtin_ia32_cmpps(__a, __b, 3); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comieq_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_comieq(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comilt_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_comilt(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comile_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_comile(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comigt_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_comigt(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comige_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_comige(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_comineq_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_comineq(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomieq_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_ucomieq(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomilt_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_ucomilt(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomile_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_ucomile(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomigt_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_ucomigt(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomige_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_ucomige(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_ucomineq_ss(__m128 __a, __m128 __b) +{ + return __builtin_ia32_ucomineq(__a, __b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_cvtss_si32(__m128 __a) +{ + return __builtin_ia32_cvtss2si(__a); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_cvt_ss2si(__m128 __a) +{ + return _mm_cvtss_si32(__a); +} + +#ifdef __x86_64__ + +static __inline__ long long __attribute__((__always_inline__, __nodebug__)) +_mm_cvtss_si64(__m128 __a) +{ + return __builtin_ia32_cvtss2si64(__a); +} + +#endif + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtps_pi32(__m128 __a) +{ + return (__m64)__builtin_ia32_cvtps2pi(__a); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cvt_ps2pi(__m128 __a) +{ + return _mm_cvtps_pi32(__a); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_cvttss_si32(__m128 __a) +{ + return __a[0]; +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_cvtt_ss2si(__m128 __a) +{ + return _mm_cvttss_si32(__a); +} + +static __inline__ long long __attribute__((__always_inline__, __nodebug__)) +_mm_cvttss_si64(__m128 __a) +{ + return __a[0]; +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cvttps_pi32(__m128 __a) +{ + return (__m64)__builtin_ia32_cvttps2pi(__a); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtt_ps2pi(__m128 __a) +{ + return _mm_cvttps_pi32(__a); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsi32_ss(__m128 __a, int __b) +{ + __a[0] = __b; + return __a; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvt_si2ss(__m128 __a, int __b) +{ + return _mm_cvtsi32_ss(__a, __b); +} + +#ifdef __x86_64__ + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtsi64_ss(__m128 __a, long long __b) +{ + __a[0] = __b; + return __a; +} + +#endif + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtpi32_ps(__m128 __a, __m64 __b) +{ + return __builtin_ia32_cvtpi2ps(__a, (__v2si)__b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvt_pi2ps(__m128 __a, __m64 __b) +{ + return _mm_cvtpi32_ps(__a, __b); +} + +static __inline__ float __attribute__((__always_inline__, __nodebug__)) +_mm_cvtss_f32(__m128 __a) +{ + return __a[0]; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_loadh_pi(__m128 __a, const __m64 *__p) +{ + typedef float __mm_loadh_pi_v2f32 __attribute__((__vector_size__(8))); + struct __mm_loadh_pi_struct { + __mm_loadh_pi_v2f32 __u; + } __attribute__((__packed__, __may_alias__)); + __mm_loadh_pi_v2f32 __b = ((struct __mm_loadh_pi_struct*)__p)->__u; + __m128 __bb = __builtin_shufflevector(__b, __b, 0, 1, 0, 1); + return __builtin_shufflevector(__a, __bb, 0, 1, 4, 5); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_loadl_pi(__m128 __a, const __m64 *__p) +{ + typedef float __mm_loadl_pi_v2f32 __attribute__((__vector_size__(8))); + struct __mm_loadl_pi_struct { + __mm_loadl_pi_v2f32 __u; + } __attribute__((__packed__, __may_alias__)); + __mm_loadl_pi_v2f32 __b = ((struct __mm_loadl_pi_struct*)__p)->__u; + __m128 __bb = __builtin_shufflevector(__b, __b, 0, 1, 0, 1); + return __builtin_shufflevector(__a, __bb, 4, 5, 2, 3); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_load_ss(const float *__p) +{ + struct __mm_load_ss_struct { + float __u; + } __attribute__((__packed__, __may_alias__)); + float __u = ((struct __mm_load_ss_struct*)__p)->__u; + return (__m128){ __u, 0, 0, 0 }; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_load1_ps(const float *__p) +{ + struct __mm_load1_ps_struct { + float __u; + } __attribute__((__packed__, __may_alias__)); + float __u = ((struct __mm_load1_ps_struct*)__p)->__u; + return (__m128){ __u, __u, __u, __u }; +} + +#define _mm_load_ps1(p) _mm_load1_ps(p) + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_load_ps(const float *__p) +{ + return *(__m128*)__p; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_loadu_ps(const float *__p) +{ + struct __loadu_ps { + __m128 __v; + } __attribute__((__packed__, __may_alias__)); + return ((struct __loadu_ps*)__p)->__v; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_loadr_ps(const float *__p) +{ + __m128 __a = _mm_load_ps(__p); + return __builtin_shufflevector(__a, __a, 3, 2, 1, 0); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_set_ss(float __w) +{ + return (__m128){ __w, 0, 0, 0 }; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_set1_ps(float __w) +{ + return (__m128){ __w, __w, __w, __w }; +} + +// Microsoft specific. +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_set_ps1(float __w) +{ + return _mm_set1_ps(__w); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_set_ps(float __z, float __y, float __x, float __w) +{ + return (__m128){ __w, __x, __y, __z }; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_setr_ps(float __z, float __y, float __x, float __w) +{ + return (__m128){ __z, __y, __x, __w }; +} + +static __inline__ __m128 __attribute__((__always_inline__)) +_mm_setzero_ps(void) +{ + return (__m128){ 0, 0, 0, 0 }; +} + +static __inline__ void __attribute__((__always_inline__)) +_mm_storeh_pi(__m64 *__p, __m128 __a) +{ + __builtin_ia32_storehps((__v2si *)__p, __a); +} + +static __inline__ void __attribute__((__always_inline__)) +_mm_storel_pi(__m64 *__p, __m128 __a) +{ + __builtin_ia32_storelps((__v2si *)__p, __a); +} + +static __inline__ void __attribute__((__always_inline__)) +_mm_store_ss(float *__p, __m128 __a) +{ + struct __mm_store_ss_struct { + float __u; + } __attribute__((__packed__, __may_alias__)); + ((struct __mm_store_ss_struct*)__p)->__u = __a[0]; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_storeu_ps(float *__p, __m128 __a) +{ + __builtin_ia32_storeups(__p, __a); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_store1_ps(float *__p, __m128 __a) +{ + __a = __builtin_shufflevector(__a, __a, 0, 0, 0, 0); + _mm_storeu_ps(__p, __a); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_store_ps1(float *__p, __m128 __a) +{ + return _mm_store1_ps(__p, __a); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_store_ps(float *__p, __m128 __a) +{ + *(__m128 *)__p = __a; +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_storer_ps(float *__p, __m128 __a) +{ + __a = __builtin_shufflevector(__a, __a, 3, 2, 1, 0); + _mm_store_ps(__p, __a); +} + +#define _MM_HINT_T0 3 +#define _MM_HINT_T1 2 +#define _MM_HINT_T2 1 +#define _MM_HINT_NTA 0 + +/* FIXME: We have to #define this because "sel" must be a constant integer, and + Sema doesn't do any form of constant propagation yet. */ + +#define _mm_prefetch(a, sel) (__builtin_prefetch((void *)(a), 0, (sel))) + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_stream_pi(__m64 *__p, __m64 __a) +{ + __builtin_ia32_movntq(__p, __a); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_stream_ps(float *__p, __m128 __a) +{ + __builtin_ia32_movntps(__p, __a); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_sfence(void) +{ + __builtin_ia32_sfence(); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_extract_pi16(__m64 __a, int __n) +{ + __v4hi __b = (__v4hi)__a; + return (unsigned short)__b[__n & 3]; +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_insert_pi16(__m64 __a, int __d, int __n) +{ + __v4hi __b = (__v4hi)__a; + __b[__n & 3] = __d; + return (__m64)__b; +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_max_pi16(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_pmaxsw((__v4hi)__a, (__v4hi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_max_pu8(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_pmaxub((__v8qi)__a, (__v8qi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_min_pi16(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_pminsw((__v4hi)__a, (__v4hi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_min_pu8(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_pminub((__v8qi)__a, (__v8qi)__b); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_movemask_pi8(__m64 __a) +{ + return __builtin_ia32_pmovmskb((__v8qi)__a); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_mulhi_pu16(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_pmulhuw((__v4hi)__a, (__v4hi)__b); +} + +#define _mm_shuffle_pi16(a, n) __extension__ ({ \ + __m64 __a = (a); \ + (__m64)__builtin_ia32_pshufw((__v4hi)__a, (n)); }) + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_maskmove_si64(__m64 __d, __m64 __n, char *__p) +{ + __builtin_ia32_maskmovq((__v8qi)__d, (__v8qi)__n, __p); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_avg_pu8(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_pavgb((__v8qi)__a, (__v8qi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_avg_pu16(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_pavgw((__v4hi)__a, (__v4hi)__b); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_sad_pu8(__m64 __a, __m64 __b) +{ + return (__m64)__builtin_ia32_psadbw((__v8qi)__a, (__v8qi)__b); +} + +static __inline__ unsigned int __attribute__((__always_inline__, __nodebug__)) +_mm_getcsr(void) +{ + return __builtin_ia32_stmxcsr(); +} + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_mm_setcsr(unsigned int __i) +{ + __builtin_ia32_ldmxcsr(__i); +} + +#define _mm_shuffle_ps(a, b, mask) __extension__ ({ \ + __m128 __a = (a); \ + __m128 __b = (b); \ + (__m128)__builtin_shufflevector((__v4sf)__a, (__v4sf)__b, \ + (mask) & 0x3, ((mask) & 0xc) >> 2, \ + (((mask) & 0x30) >> 4) + 4, \ + (((mask) & 0xc0) >> 6) + 4); }) + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_unpackhi_ps(__m128 __a, __m128 __b) +{ + return __builtin_shufflevector(__a, __b, 2, 6, 3, 7); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_unpacklo_ps(__m128 __a, __m128 __b) +{ + return __builtin_shufflevector(__a, __b, 0, 4, 1, 5); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_move_ss(__m128 __a, __m128 __b) +{ + return __builtin_shufflevector(__a, __b, 4, 1, 2, 3); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_movehl_ps(__m128 __a, __m128 __b) +{ + return __builtin_shufflevector(__a, __b, 6, 7, 2, 3); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_movelh_ps(__m128 __a, __m128 __b) +{ + return __builtin_shufflevector(__a, __b, 0, 1, 4, 5); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtpi16_ps(__m64 __a) +{ + __m64 __b, __c; + __m128 __r; + + __b = _mm_setzero_si64(); + __b = _mm_cmpgt_pi16(__b, __a); + __c = _mm_unpackhi_pi16(__a, __b); + __r = _mm_setzero_ps(); + __r = _mm_cvtpi32_ps(__r, __c); + __r = _mm_movelh_ps(__r, __r); + __c = _mm_unpacklo_pi16(__a, __b); + __r = _mm_cvtpi32_ps(__r, __c); + + return __r; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtpu16_ps(__m64 __a) +{ + __m64 __b, __c; + __m128 __r; + + __b = _mm_setzero_si64(); + __c = _mm_unpackhi_pi16(__a, __b); + __r = _mm_setzero_ps(); + __r = _mm_cvtpi32_ps(__r, __c); + __r = _mm_movelh_ps(__r, __r); + __c = _mm_unpacklo_pi16(__a, __b); + __r = _mm_cvtpi32_ps(__r, __c); + + return __r; +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtpi8_ps(__m64 __a) +{ + __m64 __b; + + __b = _mm_setzero_si64(); + __b = _mm_cmpgt_pi8(__b, __a); + __b = _mm_unpacklo_pi8(__a, __b); + + return _mm_cvtpi16_ps(__b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtpu8_ps(__m64 __a) +{ + __m64 __b; + + __b = _mm_setzero_si64(); + __b = _mm_unpacklo_pi8(__a, __b); + + return _mm_cvtpi16_ps(__b); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtpi32x2_ps(__m64 __a, __m64 __b) +{ + __m128 __c; + + __c = _mm_setzero_ps(); + __c = _mm_cvtpi32_ps(__c, __b); + __c = _mm_movelh_ps(__c, __c); + + return _mm_cvtpi32_ps(__c, __a); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtps_pi16(__m128 __a) +{ + __m64 __b, __c; + + __b = _mm_cvtps_pi32(__a); + __a = _mm_movehl_ps(__a, __a); + __c = _mm_cvtps_pi32(__a); + + return _mm_packs_pi16(__b, __c); +} + +static __inline__ __m64 __attribute__((__always_inline__, __nodebug__)) +_mm_cvtps_pi8(__m128 __a) +{ + __m64 __b, __c; + + __b = _mm_cvtps_pi16(__a); + __c = _mm_setzero_si64(); + + return _mm_packs_pi16(__b, __c); +} + +static __inline__ int __attribute__((__always_inline__, __nodebug__)) +_mm_movemask_ps(__m128 __a) +{ + return __builtin_ia32_movmskps(__a); +} + +#define _MM_SHUFFLE(z, y, x, w) (((z) << 6) | ((y) << 4) | ((x) << 2) | (w)) + +#define _MM_EXCEPT_INVALID (0x0001) +#define _MM_EXCEPT_DENORM (0x0002) +#define _MM_EXCEPT_DIV_ZERO (0x0004) +#define _MM_EXCEPT_OVERFLOW (0x0008) +#define _MM_EXCEPT_UNDERFLOW (0x0010) +#define _MM_EXCEPT_INEXACT (0x0020) +#define _MM_EXCEPT_MASK (0x003f) + +#define _MM_MASK_INVALID (0x0080) +#define _MM_MASK_DENORM (0x0100) +#define _MM_MASK_DIV_ZERO (0x0200) +#define _MM_MASK_OVERFLOW (0x0400) +#define _MM_MASK_UNDERFLOW (0x0800) +#define _MM_MASK_INEXACT (0x1000) +#define _MM_MASK_MASK (0x1f80) + +#define _MM_ROUND_NEAREST (0x0000) +#define _MM_ROUND_DOWN (0x2000) +#define _MM_ROUND_UP (0x4000) +#define _MM_ROUND_TOWARD_ZERO (0x6000) +#define _MM_ROUND_MASK (0x6000) + +#define _MM_FLUSH_ZERO_MASK (0x8000) +#define _MM_FLUSH_ZERO_ON (0x8000) +#define _MM_FLUSH_ZERO_OFF (0x0000) + +#define _MM_GET_EXCEPTION_MASK() (_mm_getcsr() & _MM_MASK_MASK) +#define _MM_GET_EXCEPTION_STATE() (_mm_getcsr() & _MM_EXCEPT_MASK) +#define _MM_GET_FLUSH_ZERO_MODE() (_mm_getcsr() & _MM_FLUSH_ZERO_MASK) +#define _MM_GET_ROUNDING_MODE() (_mm_getcsr() & _MM_ROUND_MASK) + +#define _MM_SET_EXCEPTION_MASK(x) (_mm_setcsr((_mm_getcsr() & ~_MM_MASK_MASK) | (x))) +#define _MM_SET_EXCEPTION_STATE(x) (_mm_setcsr((_mm_getcsr() & ~_MM_EXCEPT_MASK) | (x))) +#define _MM_SET_FLUSH_ZERO_MODE(x) (_mm_setcsr((_mm_getcsr() & ~_MM_FLUSH_ZERO_MASK) | (x))) +#define _MM_SET_ROUNDING_MODE(x) (_mm_setcsr((_mm_getcsr() & ~_MM_ROUND_MASK) | (x))) + +#define _MM_TRANSPOSE4_PS(row0, row1, row2, row3) \ +do { \ + __m128 tmp3, tmp2, tmp1, tmp0; \ + tmp0 = _mm_unpacklo_ps((row0), (row1)); \ + tmp2 = _mm_unpacklo_ps((row2), (row3)); \ + tmp1 = _mm_unpackhi_ps((row0), (row1)); \ + tmp3 = _mm_unpackhi_ps((row2), (row3)); \ + (row0) = _mm_movelh_ps(tmp0, tmp2); \ + (row1) = _mm_movehl_ps(tmp2, tmp0); \ + (row2) = _mm_movelh_ps(tmp1, tmp3); \ + (row3) = _mm_movehl_ps(tmp3, tmp1); \ +} while (0) + +/* Aliases for compatibility. */ +#define _m_pextrw _mm_extract_pi16 +#define _m_pinsrw _mm_insert_pi16 +#define _m_pmaxsw _mm_max_pi16 +#define _m_pmaxub _mm_max_pu8 +#define _m_pminsw _mm_min_pi16 +#define _m_pminub _mm_min_pu8 +#define _m_pmovmskb _mm_movemask_pi8 +#define _m_pmulhuw _mm_mulhi_pu16 +#define _m_pshufw _mm_shuffle_pi16 +#define _m_maskmovq _mm_maskmove_si64 +#define _m_pavgb _mm_avg_pu8 +#define _m_pavgw _mm_avg_pu16 +#define _m_psadbw _mm_sad_pu8 +#define _m_ _mm_ +#define _m_ _mm_ + +/* Ugly hack for backwards-compatibility (compatible with gcc) */ +#ifdef __SSE2__ +#include +#endif + +#endif /* __SSE__ */ + +#endif /* __XMMINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/xopintrin.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/xopintrin.h new file mode 100755 index 0000000..cc94ca0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/clang/3.4.2/include/xopintrin.h @@ -0,0 +1,804 @@ +/*===---- xopintrin.h - XOP intrinsics -------------------------------------=== + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + *===-----------------------------------------------------------------------=== + */ + +#ifndef __X86INTRIN_H +#error "Never use directly; include instead." +#endif + +#ifndef __XOPINTRIN_H +#define __XOPINTRIN_H + +#ifndef __XOP__ +# error "XOP instruction set is not enabled" +#else + +#include + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maccs_epi16(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmacssww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_macc_epi16(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmacsww((__v8hi)__A, (__v8hi)__B, (__v8hi)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maccsd_epi16(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmacsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maccd_epi16(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmacswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maccs_epi32(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmacssdd((__v4si)__A, (__v4si)__B, (__v4si)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_macc_epi32(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmacsdd((__v4si)__A, (__v4si)__B, (__v4si)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maccslo_epi32(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmacssdql((__v4si)__A, (__v4si)__B, (__v2di)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_macclo_epi32(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmacsdql((__v4si)__A, (__v4si)__B, (__v2di)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maccshi_epi32(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmacssdqh((__v4si)__A, (__v4si)__B, (__v2di)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_macchi_epi32(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmacsdqh((__v4si)__A, (__v4si)__B, (__v2di)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maddsd_epi16(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmadcsswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_maddd_epi16(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpmadcswd((__v8hi)__A, (__v8hi)__B, (__v4si)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddw_epi8(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphaddbw((__v16qi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddd_epi8(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphaddbd((__v16qi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddq_epi8(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphaddbq((__v16qi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddd_epi16(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphaddwd((__v8hi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddq_epi16(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphaddwq((__v8hi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddq_epi32(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphadddq((__v4si)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddw_epu8(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphaddubw((__v16qi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddd_epu8(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphaddubd((__v16qi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddq_epu8(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphaddubq((__v16qi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddd_epu16(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphadduwd((__v8hi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddq_epu16(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphadduwq((__v8hi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_haddq_epu32(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphaddudq((__v4si)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_hsubw_epi8(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphsubbw((__v16qi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_hsubd_epi16(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphsubwd((__v8hi)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_hsubq_epi32(__m128i __A) +{ + return (__m128i)__builtin_ia32_vphsubdq((__v4si)__A); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_cmov_si128(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpcmov(__A, __B, __C); +} + +static __inline__ __m256i __attribute__((__always_inline__, __nodebug__)) +_mm256_cmov_si256(__m256i __A, __m256i __B, __m256i __C) +{ + return (__m256i)__builtin_ia32_vpcmov_256(__A, __B, __C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_perm_epi8(__m128i __A, __m128i __B, __m128i __C) +{ + return (__m128i)__builtin_ia32_vpperm((__v16qi)__A, (__v16qi)__B, (__v16qi)__C); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_rot_epi8(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vprotb((__v16qi)__A, (__v16qi)__B); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_rot_epi16(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vprotw((__v8hi)__A, (__v8hi)__B); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_rot_epi32(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vprotd((__v4si)__A, (__v4si)__B); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_rot_epi64(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vprotq((__v2di)__A, (__v2di)__B); +} + +#define _mm_roti_epi8(A, N) __extension__ ({ \ + __m128i __A = (A); \ + (__m128i)__builtin_ia32_vprotbi((__v16qi)__A, (N)); }) + +#define _mm_roti_epi16(A, N) __extension__ ({ \ + __m128i __A = (A); \ + (__m128i)__builtin_ia32_vprotwi((__v8hi)__A, (N)); }) + +#define _mm_roti_epi32(A, N) __extension__ ({ \ + __m128i __A = (A); \ + (__m128i)__builtin_ia32_vprotdi((__v4si)__A, (N)); }) + +#define _mm_roti_epi64(A, N) __extension__ ({ \ + __m128i __A = (A); \ + (__m128i)__builtin_ia32_vprotqi((__v2di)__A, (N)); }) + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_shl_epi8(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vpshlb((__v16qi)__A, (__v16qi)__B); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_shl_epi16(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vpshlw((__v8hi)__A, (__v8hi)__B); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_shl_epi32(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vpshld((__v4si)__A, (__v4si)__B); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_shl_epi64(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vpshlq((__v2di)__A, (__v2di)__B); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sha_epi8(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vpshab((__v16qi)__A, (__v16qi)__B); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sha_epi16(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vpshaw((__v8hi)__A, (__v8hi)__B); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sha_epi32(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vpshad((__v4si)__A, (__v4si)__B); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_sha_epi64(__m128i __A, __m128i __B) +{ + return (__m128i)__builtin_ia32_vpshaq((__v2di)__A, (__v2di)__B); +} + +#define _mm_com_epu8(A, B, N) __extension__ ({ \ + __m128i __A = (A); \ + __m128i __B = (B); \ + (__m128i)__builtin_ia32_vpcomub((__v16qi)__A, (__v16qi)__B, (N)); }) + +#define _mm_com_epu16(A, B, N) __extension__ ({ \ + __m128i __A = (A); \ + __m128i __B = (B); \ + (__m128i)__builtin_ia32_vpcomuw((__v8hi)__A, (__v8hi)__B, (N)); }) + +#define _mm_com_epu32(A, B, N) __extension__ ({ \ + __m128i __A = (A); \ + __m128i __B = (B); \ + (__m128i)__builtin_ia32_vpcomud((__v4si)__A, (__v4si)__B, (N)); }) + +#define _mm_com_epu64(A, B, N) __extension__ ({ \ + __m128i __A = (A); \ + __m128i __B = (B); \ + (__m128i)__builtin_ia32_vpcomuq((__v2di)__A, (__v2di)__B, (N)); }) + +#define _mm_com_epi8(A, B, N) __extension__ ({ \ + __m128i __A = (A); \ + __m128i __B = (B); \ + (__m128i)__builtin_ia32_vpcomb((__v16qi)__A, (__v16qi)__B, (N)); }) + +#define _mm_com_epi16(A, B, N) __extension__ ({ \ + __m128i __A = (A); \ + __m128i __B = (B); \ + (__m128i)__builtin_ia32_vpcomw((__v8hi)__A, (__v8hi)__B, (N)); }) + +#define _mm_com_epi32(A, B, N) __extension__ ({ \ + __m128i __A = (A); \ + __m128i __B = (B); \ + (__m128i)__builtin_ia32_vpcomd((__v4si)__A, (__v4si)__B, (N)); }) + +#define _mm_com_epi64(A, B, N) __extension__ ({ \ + __m128i __A = (A); \ + __m128i __B = (B); \ + (__m128i)__builtin_ia32_vpcomq((__v2di)__A, (__v2di)__B, (N)); }) + +#define _MM_PCOMCTRL_LT 0 +#define _MM_PCOMCTRL_LE 1 +#define _MM_PCOMCTRL_GT 2 +#define _MM_PCOMCTRL_GE 3 +#define _MM_PCOMCTRL_EQ 4 +#define _MM_PCOMCTRL_NEQ 5 +#define _MM_PCOMCTRL_FALSE 6 +#define _MM_PCOMCTRL_TRUE 7 + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comlt_epu8(__m128i __A, __m128i __B) +{ + return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comle_epu8(__m128i __A, __m128i __B) +{ + return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_LE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comgt_epu8(__m128i __A, __m128i __B) +{ + return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comge_epu8(__m128i __A, __m128i __B) +{ + return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_GE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comeq_epu8(__m128i __A, __m128i __B) +{ + return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_EQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comneq_epu8(__m128i __A, __m128i __B) +{ + return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_NEQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comfalse_epu8(__m128i __A, __m128i __B) +{ + return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_FALSE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comtrue_epu8(__m128i __A, __m128i __B) +{ + return _mm_com_epu8(__A, __B, _MM_PCOMCTRL_TRUE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comlt_epu16(__m128i __A, __m128i __B) +{ + return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comle_epu16(__m128i __A, __m128i __B) +{ + return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_LE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comgt_epu16(__m128i __A, __m128i __B) +{ + return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comge_epu16(__m128i __A, __m128i __B) +{ + return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_GE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comeq_epu16(__m128i __A, __m128i __B) +{ + return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_EQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comneq_epu16(__m128i __A, __m128i __B) +{ + return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_NEQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comfalse_epu16(__m128i __A, __m128i __B) +{ + return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_FALSE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comtrue_epu16(__m128i __A, __m128i __B) +{ + return _mm_com_epu16(__A, __B, _MM_PCOMCTRL_TRUE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comlt_epu32(__m128i __A, __m128i __B) +{ + return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comle_epu32(__m128i __A, __m128i __B) +{ + return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_LE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comgt_epu32(__m128i __A, __m128i __B) +{ + return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comge_epu32(__m128i __A, __m128i __B) +{ + return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_GE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comeq_epu32(__m128i __A, __m128i __B) +{ + return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_EQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comneq_epu32(__m128i __A, __m128i __B) +{ + return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_NEQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comfalse_epu32(__m128i __A, __m128i __B) +{ + return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_FALSE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comtrue_epu32(__m128i __A, __m128i __B) +{ + return _mm_com_epu32(__A, __B, _MM_PCOMCTRL_TRUE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comlt_epu64(__m128i __A, __m128i __B) +{ + return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comle_epu64(__m128i __A, __m128i __B) +{ + return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_LE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comgt_epu64(__m128i __A, __m128i __B) +{ + return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comge_epu64(__m128i __A, __m128i __B) +{ + return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_GE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comeq_epu64(__m128i __A, __m128i __B) +{ + return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_EQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comneq_epu64(__m128i __A, __m128i __B) +{ + return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_NEQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comfalse_epu64(__m128i __A, __m128i __B) +{ + return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_FALSE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comtrue_epu64(__m128i __A, __m128i __B) +{ + return _mm_com_epu64(__A, __B, _MM_PCOMCTRL_TRUE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comlt_epi8(__m128i __A, __m128i __B) +{ + return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comle_epi8(__m128i __A, __m128i __B) +{ + return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_LE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comgt_epi8(__m128i __A, __m128i __B) +{ + return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comge_epi8(__m128i __A, __m128i __B) +{ + return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_GE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comeq_epi8(__m128i __A, __m128i __B) +{ + return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_EQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comneq_epi8(__m128i __A, __m128i __B) +{ + return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_NEQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comfalse_epi8(__m128i __A, __m128i __B) +{ + return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_FALSE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comtrue_epi8(__m128i __A, __m128i __B) +{ + return _mm_com_epi8(__A, __B, _MM_PCOMCTRL_TRUE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comlt_epi16(__m128i __A, __m128i __B) +{ + return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comle_epi16(__m128i __A, __m128i __B) +{ + return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_LE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comgt_epi16(__m128i __A, __m128i __B) +{ + return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comge_epi16(__m128i __A, __m128i __B) +{ + return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_GE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comeq_epi16(__m128i __A, __m128i __B) +{ + return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_EQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comneq_epi16(__m128i __A, __m128i __B) +{ + return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_NEQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comfalse_epi16(__m128i __A, __m128i __B) +{ + return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_FALSE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comtrue_epi16(__m128i __A, __m128i __B) +{ + return _mm_com_epi16(__A, __B, _MM_PCOMCTRL_TRUE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comlt_epi32(__m128i __A, __m128i __B) +{ + return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comle_epi32(__m128i __A, __m128i __B) +{ + return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_LE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comgt_epi32(__m128i __A, __m128i __B) +{ + return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comge_epi32(__m128i __A, __m128i __B) +{ + return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_GE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comeq_epi32(__m128i __A, __m128i __B) +{ + return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_EQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comneq_epi32(__m128i __A, __m128i __B) +{ + return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_NEQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comfalse_epi32(__m128i __A, __m128i __B) +{ + return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_FALSE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comtrue_epi32(__m128i __A, __m128i __B) +{ + return _mm_com_epi32(__A, __B, _MM_PCOMCTRL_TRUE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comlt_epi64(__m128i __A, __m128i __B) +{ + return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comle_epi64(__m128i __A, __m128i __B) +{ + return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_LE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comgt_epi64(__m128i __A, __m128i __B) +{ + return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GT); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comge_epi64(__m128i __A, __m128i __B) +{ + return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_GE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comeq_epi64(__m128i __A, __m128i __B) +{ + return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_EQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comneq_epi64(__m128i __A, __m128i __B) +{ + return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_NEQ); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comfalse_epi64(__m128i __A, __m128i __B) +{ + return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_FALSE); +} + +static __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) +_mm_comtrue_epi64(__m128i __A, __m128i __B) +{ + return _mm_com_epi64(__A, __B, _MM_PCOMCTRL_TRUE); +} + +#define _mm_permute2_pd(X, Y, C, I) __extension__ ({ \ + __m128d __X = (X); \ + __m128d __Y = (Y); \ + __m128i __C = (C); \ + (__m128d)__builtin_ia32_vpermil2pd((__v2df)__X, (__v2df)__Y, \ + (__v2di)__C, (I)); }) + +#define _mm256_permute2_pd(X, Y, C, I) __extension__ ({ \ + __m256d __X = (X); \ + __m256d __Y = (Y); \ + __m256i __C = (C); \ + (__m256d)__builtin_ia32_vpermil2pd256((__v4df)__X, (__v4df)__Y, \ + (__v4di)__C, (I)); }) + +#define _mm_permute2_ps(X, Y, C, I) __extension__ ({ \ + __m128 __X = (X); \ + __m128 __Y = (Y); \ + __m128i __C = (C); \ + (__m128)__builtin_ia32_vpermil2ps((__v4sf)__X, (__v4sf)__Y, \ + (__v4si)__C, (I)); }) + +#define _mm256_permute2_ps(X, Y, C, I) __extension__ ({ \ + __m256 __X = (X); \ + __m256 __Y = (Y); \ + __m256i __C = (C); \ + (__m256)__builtin_ia32_vpermil2ps256((__v8sf)__X, (__v8sf)__Y, \ + (__v8si)__C, (I)); }) + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_frcz_ss(__m128 __A) +{ + return (__m128)__builtin_ia32_vfrczss((__v4sf)__A); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_frcz_sd(__m128d __A) +{ + return (__m128d)__builtin_ia32_vfrczsd((__v2df)__A); +} + +static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) +_mm_frcz_ps(__m128 __A) +{ + return (__m128)__builtin_ia32_vfrczps((__v4sf)__A); +} + +static __inline__ __m128d __attribute__((__always_inline__, __nodebug__)) +_mm_frcz_pd(__m128d __A) +{ + return (__m128d)__builtin_ia32_vfrczpd((__v2df)__A); +} + +static __inline__ __m256 __attribute__((__always_inline__, __nodebug__)) +_mm256_frcz_ps(__m256 __A) +{ + return (__m256)__builtin_ia32_vfrczps256((__v8sf)__A); +} + +static __inline__ __m256d __attribute__((__always_inline__, __nodebug__)) +_mm256_frcz_pd(__m256d __A) +{ + return (__m256d)__builtin_ia32_vfrczpd256((__v4df)__A); +} + +#endif /* __XOP__ */ + +#endif /* __XOPINTRIN_H */ diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/csystem_includes.txt b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/csystem_includes.txt new file mode 100755 index 0000000..52d3081 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/csystem_includes.txt @@ -0,0 +1,5 @@ +/usr/lib/gcc/x86_64-linux-gnu/4.6/include +/usr/local/include +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed +/usr/include/x86_64-linux-gnu +/usr/include diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/cxxsystem_includes.txt b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/cxxsystem_includes.txt new file mode 100755 index 0000000..968ffe3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/cxxsystem_includes.txt @@ -0,0 +1,8 @@ +/usr/include/c++/4.6 +/usr/include/c++/4.6/x86_64-linux-gnu/. +/usr/include/c++/4.6/backward +/usr/lib/gcc/x86_64-linux-gnu/4.6/include +/usr/local/include +/usr/lib/gcc/x86_64-linux-gnu/4.6/include-fixed +/usr/include/x86_64-linux-gnu +/usr/include diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/get_system_includes.sh b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/get_system_includes.sh new file mode 100755 index 0000000..2cde4e4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/casadi/jit/get_system_includes.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# This script gets the C or C++ system include paths +# Works with Clang and GCC +# Usage (C): ./get_system_includes.sh clang c > csystem_paths.txt +# Usage (C++): ./get_system_includes.sh gcc-5 c++ > cxxsystem_paths.txt +# Joel Andersson + +$1 -E -x $2 - -v < /dev/null >/dev/null 2> /tmp/compiler_settings.txt +list_begin='#include <...> search starts here:' +list_end='End of search list.' +IN_SECTION=0 +while read p; do + if (($IN_SECTION)); then + if [ "$p" == "$list_end" ]; then + let IN_SECTION=0 + else + echo $p + fi + else + if [ "$p" == "$list_begin" ]; then + let IN_SECTION=1 + fi + fi +done +#include +#include + +#include +#include +#include "casadi_exception.hpp" + +// Define pi if the compiler fails to do so +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif // M_PI + +/// \cond INTERNAL + +namespace casadi { + + /// Enum for quick access to any node + enum Operation { + // Simple assignment + OP_ASSIGN, + + // Standard unary and binary functions + OP_ADD, OP_SUB, OP_MUL, OP_DIV, + OP_NEG, OP_EXP, OP_LOG, OP_POW, OP_CONSTPOW, + OP_SQRT, OP_SQ, OP_TWICE, + OP_SIN, OP_COS, OP_TAN, + OP_ASIN, OP_ACOS, OP_ATAN, + OP_LT, OP_LE, OP_EQ, OP_NE, OP_NOT, OP_AND, OP_OR, + OP_FLOOR, OP_CEIL, OP_FMOD, OP_FABS, OP_SIGN, OP_COPYSIGN, OP_IF_ELSE_ZERO, + OP_ERF, OP_FMIN, OP_FMAX, + OP_INV, + OP_SINH, OP_COSH, OP_TANH, + OP_ASINH, OP_ACOSH, OP_ATANH, + OP_ATAN2, + + // Double constant + OP_CONST, + + // Function input and output + OP_INPUT, OP_OUTPUT, + + // Free parameter + OP_PARAMETER, + + // Embedded function call + OP_CALL, + + // Find first nonzero in a vector + OP_FIND, + + // Embedded function call in parallel + OP_MAP, + + // Matrix multiplication + OP_MATMUL, + + // Solve linear system of equations + OP_SOLVE, + + // Matrix transpose + OP_TRANSPOSE, + + // Matrix determinant + OP_DETERMINANT, + + // Matrix inverse + OP_INVERSE, + + // Inner product + OP_INNER_PROD, + + // Horizontal concatenation + OP_HORZCAT, + + // Vertical concatenation of vectors + OP_VERTCAT, + + // Diagonal concatenation + OP_DIAGCAT, + + // Horizontal split + OP_HORZSPLIT, + + // Vertical split of vectors + OP_VERTSPLIT, + + // Diagonal split + OP_DIAGSPLIT, + + // Reshape an expression + OP_RESHAPE, + + // Submatrix reference + OP_SUBREF, + + // Submatrix assignment + OP_SUBASSIGN, + + // Nonzero reference + OP_GETNONZEROS, + + // Nonzero addition + OP_ADDNONZEROS, + + // Nonzero assignment + OP_SETNONZEROS, + + // Set sparse + OP_PROJECT, + + // Assertion + OP_ASSERTION, + + // Monitor + OP_MONITOR, + + // Norms + OP_NORM2, OP_NORM1, OP_NORMINF, OP_NORMF, + + // Horizontal repeat + OP_HORZREPMAT, + + // Horizontal repeat sum + OP_HORZREPSUM, + + OP_ERFINV, + OP_PRINTME, + OP_LIFT, + NUM_BUILT_IN_OPS + }; + +#ifndef SWIG + + // Get GCC version if GCC is used +#ifdef __GNUC__ +#ifdef __GNUC_MINOR__ +#ifdef __GNUC_PATCHLEVEL__ +#define GCC_VERSION (__GNUC__ * 10000 +__GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) +#endif // __GNUC_PATCHLEVEL__ +#endif // __GNUC_MINOR__ +#endif // __GNUC__ + + // Disable some Visual studio warnings +#ifdef _MSC_VER + +#pragma warning(disable:4996) + + // warning C4018: '<' : signed/unsigned mismatch +#pragma warning(disable:4018) + + // warning C4800: 'int' : forcing value to bool 'true'or 'false'(performance warning) +#pragma warning(disable:4800) +#endif + + ///@{ + /** \brief Enable using elementary numerical operations without std:: prefix */ + using std::sqrt; + using std::sin; + using std::cos; + using std::tan; + using std::atan; + using std::asin; + using std::acos; + using std::sinh; + using std::cosh; + using std::tanh; + using std::exp; + using std::log; + using std::log10; + using std::abs; + using std::fabs; + using std::floor; + using std::ceil; + using std::pow; + using std::fmod; + using std::atan2; + ///@} + + ///@{ + // Implement "missing" operations + inline double atanh(double x) throw() { + if (x==-1) return -std::numeric_limits::infinity(); + if (x==1) return std::numeric_limits::infinity(); + return 0.5*log((1+x)/(1-x)); + } + + inline double asinh(double x) throw() { + return log(x + sqrt(1+x*x)); + } + + inline double acosh(double x) throw() { + return log(x + sqrt(1+x)*sqrt(x-1)); + } + + inline int isnan(double x) throw() { return x!=x;} + inline int isinf(double x) throw() { return isnan(x-x);} + + /// Sign function, note that sign(nan) == nan + inline double sign(double x) { return x<0 ? -1 : x>0 ? 1 : x;} + + /// Compare if two values are equal, up to a depth + inline bool isEqual(double x, double y, int depth=0) { return x==y;} + + /// fmin, fmax and erf should be available if C99 and/or C++11 required + inline double fmin(double x, double y) throw() { return std::min(x, y);} + inline int fmin(int x, int y) throw() { return std::min(x, y);} + inline double fmax(double x, double y) throw() { return std::max(x, y);} + inline int fmax(int x, int y) throw() { return std::max(x, y);} + + /// fabs(int) was added in C++11 + inline int fabs(int x) throw() { return std::abs(x);} + ///@} + +#ifdef HAS_ERF + using ::erf; +#else // HAS ERF + inline double erf(double x) throw() { + // Approximation found in Sourceforge and modified, + // originally from numerical recipes in Fortran + double sx = x<0 ? -1 : x>0 ? 1 : x; + double z = sx*x; + double t = 1.0/(1.0+0.5*z); + return 1.-sx*(t*exp(-z*z-1.26551223+t*(1.00002368+t*(0.37409196+t*(0.09678418+ + t*(-0.18628806+t*(0.27886807+t*(-1.13520398+t*(1.48851587+ + t*(-0.82215223+t*0.17087277)))))))))); + } +#endif // HAS ERF + ///@} + + ///@{ + /** \brief CasADi additions */ + template T constpow(const T &x, const T &n) { return x.constpow(n);} + template T printme(const T &x, const T &y) { return x.printme(y);} + inline double printme(double x, double y) { + std::cout << "|> " << y << " : " << x << std::endl; + return x; + } + + #ifdef HAS_COPYSIGN + using std::copysign; + #else + /// copysign function + inline double copysign(double x, double y) { return y>=0 ? fabs(x) : -fabs(x);} + #endif //HAS_COPYSIGN + + /// Conditional assignment + template T if_else_zero(const T &x, const T &y) {return x.zz_if_else_zero(y);} + + /// Conditional assignment + inline double if_else_zero(double x, double y) { return x ? y : 0;} + + /// Inverse of the error function + template T erfinv(const T &x) {return x.zz_erfinv();} +#ifdef HAS_ERFINV + using ::erfinv; +#else // HAS ERFINV + inline double erfinv(double x) throw() { + // Approximation found in Sourceforge and modified: Not very efficient + if (x>=1) { + return x==1 ? std::numeric_limits::infinity() : + std::numeric_limits::quiet_NaN(); + } else if (x<=-1) { + return x==-1 ? -std::numeric_limits::infinity() : + std::numeric_limits::quiet_NaN(); + } else if (x<-0.7) { + double z = sqrt(-log((1.0+x)/2.0)); + return -(((1.641345311*z+3.429567803)*z-1.624906493)*z-1.970840454)/ + ((1.637067800*z+3.543889200)*z+1.0); + } else { + double y; + if (x<0.7) { + double z = x*x; + y = x*(((-0.140543331*z+0.914624893)*z-1.645349621)*z+0.886226899)/ + ((((-0.329097515*z+0.012229801)*z+1.442710462)*z-2.118377725)*z+1.0); + } else { + double z = sqrt(-log((1.0-x)/2.0)); + y = (((1.641345311*z+3.429567803)*z-1.624906493)*z-1.970840454)/ + ((1.637067800*z+3.543889200)*z+1.0); + } + + //polish x to full accuracy + y = y - (erf(y) - x) / (2.0/sqrt(M_PI) * exp(-y*y)); + y = y - (erf(y) - x) / (2.0/sqrt(M_PI) * exp(-y*y)); + return y; + } + } +#endif // HAS_ERFINV + ///@} + + template + T twice(const T& x) { + return x+x; + } + + template + T sq(const T& x) { + return x*x; + } + + template + struct UnaryOperation { + /// Function evaluation + template static inline void fcn(const T& x, T& f); + + /// Partial derivatives + template static inline void der(const T& x, const T& f, T* d); + }; + + template + struct BinaryOperation { + /// Function evaluation + template static inline void fcn(const T& x, const T& y, T& f) { + UnaryOperation::fcn(x, f);} + + /// Partial derivatives - binary function + template static inline void der(const T& x, const T& y, const T& f, T* d) { + UnaryOperation::der(x, f, d); d[1]=0; } + }; + + template + struct BinaryOperationE { + /// Function evaluation + template static inline T fcn(const T& x, const T& y) { + T ret; + BinaryOperation::fcn(x, y, ret); + return ret; + } + }; + + /// Calculate function and derivative + template + struct DerBinaryOpertion { + /// Perform the operation + template static inline void derf(const T& x, const T& y, T& f, T* d) { + + /** First save to temp since f might have the same address as x or y, + * in which case it will be incorrect in the second call + */ + T tmp; + + /// Evaluate the function + BinaryOperation::fcn(x, y, tmp); + + /// Evaluate the partial derivatives + BinaryOperation::der(x, y, tmp, d); + + /// Now save f + f = tmp; + } + }; + + /// Perform a binary operation on two scalars + template + struct BinaryOperationSS { + /// Function evaluation + template static inline void fcn(const T& x, const T& y, T& f, int n) { + BinaryOperation::fcn(x, y, f); + } + + /// Partial derivatives - binary function + template static inline void der(const T& x, const T& y, const T& f, T* d, int n) { + BinaryOperation::der(x, y, f, d); + } + }; + + + /// Perform a binary operation on two vectors + template + struct BinaryOperationVV { + /// Function evaluation + template static inline void fcn(const T* x, const T* y, T* f, int n) { + for (int i=0; i::fcn(*x++, *y++, *f++); + } + } + + /// Partial derivatives - binary function + template static inline void der(const T* x, const T* y, const T* f, T* d, int n) { + for (int i=0; i::der(*x++, *y++, *f++, d); + } + } + }; + + /// Perform a binary operation on a vector and a scalar + template + struct BinaryOperationVS { + /// Function evaluation + template static inline void fcn(const T* x, const T& y, T* f, int n) { + for (int i=0; i::fcn(*x++, y, *f++); + } + } + + /// Partial derivatives - binary function + template static inline void der(const T* x, const T& y, const T* f, T* d, int n) { + for (int i=0; i::der(*x++, y, *f++, d); + } + } + }; + + /// Perform a binary operation on a scalar and a vector + template + struct BinaryOperationSV { + /// Function evaluation + template static inline void fcn(const T& x, const T* y, T* f, int n) { + for (int i=0; i::fcn(x, *y++, *f++); + } + } + + /// Partial derivatives - binary function + template static inline void der(const T& x, const T* y, const T* f, T* d, int n) { + for (int i=0; i::der(x, *y++, *f++, d); + } + } + }; + + ///@{ + /// Smoothness (by default true) + template struct SmoothChecker { static const bool check=true;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + template<> struct SmoothChecker{ static const bool check=false;}; + ///@} + + ///@{ + /// If evaluated with the first argument zero, is the result zero? + template struct F0XChecker { static const bool check=false;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + template<> struct F0XChecker{ static const bool check=true;}; + ///@} + + ///@{ + /// If evaluated with the second argument zero, is the result zero? + template struct Function0Checker { static const bool check=false;}; + template<> struct Function0Checker{ static const bool check=true;}; + template<> struct Function0Checker{ static const bool check=true;}; + template<> struct Function0Checker{ static const bool check=true;}; + ///@} + + ///@{ + /// If evaluated with both arguments zero, is the result zero? + template struct F00Checker { static const bool check=F0XChecker::check;}; + template<> struct F00Checker{ static const bool check=true;}; + template<> struct F00Checker{ static const bool check=true;}; + template<> struct F00Checker{ static const bool check=true;}; + template<> struct F00Checker{ static const bool check=true;}; + template<> struct F00Checker{ static const bool check=true;}; + template<> struct F00Checker{ static const bool check=true;}; + template<> struct F00Checker{ static const bool check=true;}; + ///@} + + ///@{ + /// Is commutative + template struct CommChecker { static const bool check=false;}; + template<> struct CommChecker{ static const bool check=true;}; + template<> struct CommChecker{ static const bool check=true;}; + template<> struct CommChecker{ static const bool check=true;}; + template<> struct CommChecker{ static const bool check=true;}; + template<> struct CommChecker{ static const bool check=true;}; + template<> struct CommChecker{ static const bool check=true;}; + ///@} + + ///@{ + /// Always non-negative (false by default) + template struct NonnegativeChecker { static const bool check=false;}; + template<> struct NonnegativeChecker{ static const bool check=true;}; + template<> struct NonnegativeChecker{ static const bool check=true;}; + template<> struct NonnegativeChecker{ static const bool check=true;}; + template<> struct NonnegativeChecker{ static const bool check=true;}; + template<> struct NonnegativeChecker{ static const bool check=true;}; + template<> struct NonnegativeChecker{ static const bool check=true;}; + template<> struct NonnegativeChecker{ static const bool check=true;}; + template<> struct NonnegativeChecker{ static const bool check=true;}; + template<> struct NonnegativeChecker{ static const bool check=true;}; + template<> struct NonnegativeChecker{ static const bool check=true;}; + ///@} + + ///@{ + /// Is the operation binary as opposed to unary + template struct BinaryChecker { static const bool check=false;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + template<> struct BinaryChecker{ static const bool check=true;}; + ///@} + + /// Simple assignment + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = x;} + template static inline void der(const T& x, const T& f, T* d) { d[0] = 1; } + }; + + /// Addition + template<> + struct BinaryOperation{ + public: + template static inline void fcn(const T& x, const T& y, T& f) { f = x+y;} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=d[1]=1;} + }; + + /// Subtraction + template<> + struct BinaryOperation{ + public: + template static inline void fcn(const T& x, const T& y, T& f) { f = x-y;} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=1; d[1]=-1;} + }; + + /// Multiplication + template<> + struct BinaryOperation{ + public: + template static inline void fcn(const T& x, const T& y, T& f) { f = x*y;} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=y; d[1]=x;} + }; + + /// Division + template<> + struct BinaryOperation{ + public: + template static inline void fcn(const T& x, const T& y, T& f) { f = x/y;} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=1/y; d[1]=-f/y;} + }; + + /// Negation + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = -x;} + template static inline void der(const T& x, const T& f, T* d) { d[0]=-1;} + }; + + /// Natural exponent + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = exp(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0]=f;} + }; + + /// Natural logarithm + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = log(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0]=1/x;} + }; + + /// Power, defined only for x>=0 + template<> + struct BinaryOperation{ + public: + template static inline void fcn(const T& x, const T& y, T& f) { f = pow(x, y);} + // See issue #104 why d[0] is no longer y*f/x + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=y*pow(x, y-1); d[1]=log(x)*f;} + }; + + /// Power, defined only for y constant + template<> + struct BinaryOperation{ + public: + template static inline void fcn(const T& x, const T& y, T& f) { f = pow(x, y);} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=y*pow(x, y-1); d[1]=0;} + }; + + /// Square root + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = sqrt(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0]=1/(twice(f));} + }; + + /// Square + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = sq(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0]=twice(x);} + }; + + /// Times two + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = 2.*x;} + template static inline void der(const T& x, const T& f, T* d) { d[0] = 2; } + }; + + /// Sine + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = sin(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0]=cos(x);} + }; + + /// Cosine + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = cos(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0]=-sin(x);} + }; + + /// Tangent + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = tan(x);} + template static inline void der(const T& x, const T& f, T* d) + { d[0] = 1/sq(cos(x));} + }; + + /// Arcus sine + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = asin(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0]=1/sqrt(1-x*x);} + }; + + /// Arcus cosine + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = acos(x);} + template static inline void der(const T& x, const T& f, T* d) + { d[0]=-1/sqrt(1-x*x);} + }; + + /// Arcus tangent + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = atan(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0] = 1/(1+x*x);} + }; + + /// Less than + template<> + struct BinaryOperation{ + public: + template static inline void fcn(const T& x, const T& y, T& f) { f = x < y;} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=d[1]=0;} + }; + + /// Less or equal to + template<> + struct BinaryOperation{ + public: + template static inline void fcn(const T& x, const T& y, T& f) { f = x <= y;} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=d[1]=0;} + }; + + /// Floor function + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = floor(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0] = 0;} + }; + + /// Ceil function + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = ceil(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0] = 0;} + }; + + /// Remainder of division + template<> + struct BinaryOperation{ + template static inline void fcn(const T& x, const T& y, T& f) { f = fmod(x, y);} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=1; d[1]=(f-x)/y;} + }; + + /// Equal to + template<> + struct BinaryOperation{ + template static inline void fcn(const T& x, const T& y, T& f) { f = x==y;} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=d[1]=0;} + }; + + /// Not equal to + template<> + struct BinaryOperation{ + template static inline void fcn(const T& x, const T& y, T& f) { f = x!=y;} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=d[1]=0;} + }; + + /// Logical not + template<> + struct UnaryOperation{ + public: + template static inline void fcn(const T& x, T& f) { f = !x;} + template static inline void der(const T& x, const T& f, T* d) { d[0] = 0;} + }; + + /// Logical and + template<> + struct BinaryOperation{ + template static inline void fcn(const T& x, const T& y, T& f) { f = x && y;} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=d[1]=0;} + }; + + /// Logical or + template<> + struct BinaryOperation{ + template static inline void fcn(const T& x, const T& y, T& f) { f = x || y;} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=d[1]=0;} + }; + + /// Error function + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = erf(x);} + template static inline void der(const T& x, const T& f, T* d) { + d[0] = (2/sqrt(M_PI))*exp(-x*x);} + }; + + /// Absolute value + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = fabs(x);} + template static inline void der(const T& x, const T& f, T* d) { + d[0]=sign(x);} + }; + + /// Sign + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = sign(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0]=0;} + }; + + /// Copysign + template<> + struct BinaryOperation{ + template static inline void fcn(const T& x, const T& y, T& f) { f = copysign(x, y);} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + T e = 1; d[0]=copysign(e, y); d[1]=0;} + }; + + /// Minimum + template<> + struct BinaryOperation{ + template static inline void fcn(const T& x, const T& y, T& f) { f = fmin(x, y);} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=x<=y; d[1]=!d[0];} + }; + + /// Maximum + template<> + struct BinaryOperation{ + template static inline void fcn(const T& x, const T& y, T& f) { f = fmax(x, y);} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=x>=y; d[1]=!d[0];} + }; + + /// Elementwise inverse + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = 1./x;} + template static inline void der(const T& x, const T& f, T* d) { d[0] = -f*f; } + }; + + /// Hyperbolic sine + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = sinh(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0] = cosh(x); } + }; + + /// Hyperbolic cosine + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = cosh(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0] = -sinh(x); } + }; + + /// Hyperbolic tangent + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = tanh(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0] = 1-f*f; } + }; + + /// Inverse hyperbolic sine + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = asinh(x);} + template static inline void der(const T& x, const T& f, T* d) { + d[0] = 1/sqrt(1+x*x); } + }; + + /// Inverse hyperbolic cosine + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = acosh(x);} + template static inline void der(const T& x, const T& f, T* d) { + d[0] = 1/sqrt(x-1)/sqrt(x+1); } + }; + + /// Inverse hyperbolic tangent + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = atanh(x);} + template static inline void der(const T& x, const T& f, T* d) { d[0] = 1/(1-x*x); } + }; + + /// Inverse of error function + template<> + struct UnaryOperation{ + template static inline void fcn(const T& x, T& f) { f = erfinv(x);} + template static inline void der(const T& x, const T& f, T* d) { + d[0] = (sqrt(M_PI)/2)*exp(f*f); } + }; + + /// Identity operator with the side effect of printing + template<> + struct BinaryOperation{ + template static inline void fcn(const T& x, const T& y, T& f) {f = printme(x, y); } + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=1; d[1]=0;} + }; + + /// Arctan2 + template<> + struct BinaryOperation{ + public: + template static inline void fcn(const T& x, const T& y, T& f) { f = atan2(x, y);} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + T t = x*x+y*y; d[0]=y/t; d[1]=-x/t;} + }; + + /// Conditional assignment + template<> + struct BinaryOperation{ + public: + template static inline void fcn(const T& x, const T& y, T& f) { + f = if_else_zero(x, y);} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0]=0; d[1]=x;} + }; + + /// Inverse of error function + template<> + struct BinaryOperation{ + template static inline void fcn(const T& x, const T& y, T& f) { f = x;} + template static inline void der(const T& x, const T& y, const T& f, T* d) { + d[0] = 1; d[1] = 0; } + }; + +#endif // SWIG + +} // namespace casadi + +/// \endcond + +#endif // CASADI_CALCULUS_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_common.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_common.hpp new file mode 100755 index 0000000..a804645 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_common.hpp @@ -0,0 +1,40 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CASADI_COMMON_HPP +#define CASADI_CASADI_COMMON_HPP + +#include + +#ifdef casadi_EXPORTS +#define casadi_implementation +#endif + +#ifndef SHARED_LIBRARY +#define casadi_implementation +#endif + +#endif // CASADI_CASADI_COMMON_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_exception.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_exception.hpp new file mode 100755 index 0000000..c044ea3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_exception.hpp @@ -0,0 +1,174 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CASADI_EXCEPTION_HPP +#define CASADI_CASADI_EXCEPTION_HPP + +#include +#include +#include +#include +#include + +#include "casadi_common.hpp" + +namespace casadi { + +/** \brief Casadi exception class + \author Joel Andersson + \date 2010 + Example for simple exception throwing: + \code + throw CasadiException("This is a nasty error"); + \endcode + Example for exception chaining: + \code + try { + throw CasadiException("This is a nasty error"); + catch(CasadiException &e) { + throw CasadiException("Serious error.") << e; + } + \endcode +*/ +class CASADI_EXPORT CasadiException : public std::exception { + public: + //! \brief Default constructor + CasadiException() { + } + + //! \brief Form message string + explicit CasadiException(const std::string& msg) : msg_(msg) {} + + //! \brief Destructor + ~CasadiException() throw() {} + + //! \brief Display error + virtual const char* what() const throw() { + return msg_.c_str(); + } + + //! \brief Append a message + CasadiException& operator<<(const std::string& msg) { + msg_ += msg; + return *this; + } + + //! \brief Append an exception + CasadiException& operator<<(const std::exception& ex) { + msg_ += " => "; + msg_ += ex.what(); + return *this; + } + + protected: + std::string msg_; +}; + +// Assertion similar to the standard C assert statement, with the difference +// that it throws an exception with the same information +#ifdef CASADI_NDEBUG +// Release mode +#define casadi_assert(x) +#define casadi_assert_message(x, msg) +#define casadi_assert_warning(x, msg) +#define casadi_warning(msg) +#define casadi_error(msg) + +#else // CASADI_NDEBUG +// Debug mode +// Convert to string +#define CASADI_ASSERT_STR1(x) #x +#define CASADI_ASSERT_STR(x) CASADI_ASSERT_STR1(x) + +// String denoting where the assertion is situated +#define CASADI_ASSERT_WHERE " on line " CASADI_ASSERT_STR(__LINE__) \ + " of file " CASADI_ASSERT_STR(__FILE__) + + // Should be removed, cf. #890 +#define casadi_msg(msg) \ + if (verbose()) { \ + std::stringstream ss; \ + ss << msg; \ + log(ss.str()); \ + } + +#define casadi_error(msg) \ + { \ + std::stringstream ss_internal_; \ + ss_internal_ << CASADI_ASSERT_WHERE << std::endl << msg << std::endl; \ + throw casadi::CasadiException(ss_internal_.str()); \ + } + +// This assertion checks for illegal user inputs. It will not be checked if CASADI_NDEBUG is defined +#define casadi_assert_message(x, msg) \ +{ \ + bool is_ok; \ + try { \ + is_ok = x; \ + } catch(std::exception& ex) { \ + throw casadi::CasadiException(std::string("When trying to check the assertion \"" \ + CASADI_ASSERT_STR(x) "\"" CASADI_ASSERT_WHERE ", caught: \n")+ex.what()); \ + } \ + if (!is_ok) { \ + std::stringstream ss_internal_; \ + ss_internal_ << "The assertion \"" CASADI_ASSERT_STR(x) "\"" CASADI_ASSERT_WHERE \ + " failed. " << std::endl << msg << std::endl; \ + throw casadi::CasadiException(ss_internal_.str()); \ + }\ +} \ + +// This assertion if for errors caused by bugs in CasADi, use it instead of C:s assert(), +// but never in destructors +#if NDEBUG +#define casadi_assert(x) casadi_assert_message(x, "Please notify the CasADi developers.") +#else +#define casadi_assert(x) casadi_assert_message(x, \ + "(Hint for developers: CasadiOptions.setCatchErrorsSwig(False)" \ + " to obtain gdb stacktrace in python.)" \ + << std::endl << "Please notify the CasADi developers.") +#endif + +// This is for warnings to be issued when casadi is not in release mode and an assertion fails +#define casadi_assert_warning(x, msg) \ + if ((x)==false) { \ + casadi::userOut() << "CasADi warning: \"" << msg << "\" (assertion \"" \ + CASADI_ASSERT_STR(x) "\"" CASADI_ASSERT_WHERE " failed.)" << std::endl; \ + } + +// This is for warnings to be issued when casadi is not in release mode +#define casadi_warning(msg) \ + casadi::userOut() << "CasADi warning: \"" << msg << "\" issued " \ + CASADI_ASSERT_WHERE ". " << std::endl; + +// http://stackoverflow.com/questions/303562/c-format-macro-inline-ostringstream +#define STRING(ITEMS) \ + ((dynamic_cast(std::ostringstream() \ + . seekp(0, std::ios_base::cur) << ITEMS)) . str()) + +#endif // CASADI_NDEBUG + +} // namespace casadi + +#endif // CASADI_CASADI_EXCEPTION_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_export.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_export.h new file mode 100755 index 0000000..3cbd6fb --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_export.h @@ -0,0 +1,35 @@ + +#ifndef CASADI_EXPORT_H +#define CASADI_EXPORT_H + +#ifdef CASADI_STATIC_DEFINE +# define CASADI_EXPORT +# define CASADI_NO_EXPORT +#else +# ifndef CASADI_EXPORT +# ifdef casadi_EXPORTS + /* We are building this library */ +# define CASADI_EXPORT __attribute__((visibility("default"))) +# else + /* We are using this library */ +# define CASADI_EXPORT __attribute__((visibility("default"))) +# endif +# endif + +# ifndef CASADI_NO_EXPORT +# define CASADI_NO_EXPORT __attribute__((visibility("hidden"))) +# endif +#endif + +#ifndef CASADI_DEPRECATED +# define CASADI_DEPRECATED __attribute__ ((__deprecated__)) +# define CASADI_DEPRECATED_EXPORT CASADI_EXPORT __attribute__ ((__deprecated__)) +# define CASADI_DEPRECATED_NO_EXPORT CASADI_NO_EXPORT __attribute__ ((__deprecated__)) +#endif + +#define DEFINE_NO_DEPRECATED 0 +#if DEFINE_NO_DEPRECATED +# define CASADI_NO_DEPRECATED +#endif + +#endif diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_interrupt.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_interrupt.hpp new file mode 100755 index 0000000..cf7ead7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_interrupt.hpp @@ -0,0 +1,71 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_INTERRUPT_HPP +#define CASADI_INTERRUPT_HPP + +#include +#include "casadi_exception.hpp" + +#include +#include + +namespace casadi { + + /// \cond INTERNAL + + /** + * \brief Takes care of user interrupts (Ctrl+C) + * + * This is an internal class. + * + * \author Joris Gillis + * \date 2015 + */ + class CASADI_EXPORT InterruptHandler { + private: + /// No implementation - no instances are allowed of this class + InterruptHandler(); + + /// By default, report everything is okay + static bool checkInterruptedDefault() { + return false; + } + + public: + /// The routine that is used for checking interrupts + static bool (*checkInterrupted)(); + + /// Raises an error if an interrupt was captured. + static void check() { + casadi_assert_message(!checkInterrupted(), "Interrupted by user."); + } + }; + + /// \endcond INTERNAL + +} // namespace casadi + +#endif // CASADI_INTERRUPT_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_limits.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_limits.hpp new file mode 100755 index 0000000..07b98b7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_limits.hpp @@ -0,0 +1,67 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CASADI_LIMITS_HPP +#define CASADI_CASADI_LIMITS_HPP + +#include +#include + +/** \brief The casadi namespace */ +namespace casadi { + + +/** \brief casadi_limits class + +The following class, which acts as a complements to the standard numeric_limits class, allows +specifying certain properties of scalar objects. The template can be specialized for +e.g. symbolic scalars +\author Joel Andersson +\date 2011 +*/ + +template +class CASADI_EXPORT casadi_limits { + public: + static bool isZero(const T& val) { return val==0; } + static bool isAlmostZero(const T& val, double tol) { return val<=tol && val>=-tol; } + static bool isOne(const T& val) { return val==1;} + static bool isMinusOne(const T& val) { return val==-1;} + static bool isConstant(const T& val) { return true;} + static bool isInteger(const T& val) { return val==static_cast(val);} + static bool isInf(const T& val) { return std::numeric_limits::has_infinity ? + val==std::numeric_limits::infinity() : false;} + static bool isMinusInf(const T& val) { return std::numeric_limits::has_infinity ? + val==-std::numeric_limits::infinity() : false;} + static bool isNaN(const T& val) { + return std::numeric_limits::has_quiet_NaN ? val!=val : false;} + static const T zero; + static const T one; + static const T two; + static const T minus_one; +}; + +} // namespace casadi +#endif // CASADI_CASADI_LIMITS_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_logger.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_logger.hpp new file mode 100755 index 0000000..695e1b4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_logger.hpp @@ -0,0 +1,178 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_LOGGER_HPP +#define CASADI_LOGGER_HPP + +#include + +#include +#include + +namespace casadi { + + /// Print levels + enum PrintLevel { + /// No printing at all + PL_NONE, + /// Only print warnings + PL_WARN, + /// Print evaluation progress + PL_PROG, + /// Print error messages useful for debugging + PL_DEBUG, + /// Print everything + PL_ALL, + PL_NUM_LEVELS + }; + + /** + * \brief Keeps track of logging output to screen and/or files. + * All printout from CasADi routines should go through this files. + * + * \author Joel Andersson + * \date 2015 + */ + class CASADI_EXPORT Logger { + private: + /// No implementation - no instances are allowed of this class + Logger(); + + public: + /// Print level, i.e. the highest level being printed + static PrintLevel level; + + /// Print warnings, can be redefined + static void (*writeWarn)(const char* s, std::streamsize num, bool error); + + /// Print progress, can be redefined + static void (*writeProg)(const char* s, std::streamsize num, bool error); + + /// Print debug information, can be redefined + static void (*writeDebug)(const char* s, std::streamsize num, bool error); + + /// Print everything, can be redefined + static void (*writeAll)(const char* s, std::streamsize num, bool error); + + /// Flush buffers + static void (*flush)(bool error); + + /// By default, print to std::cout or std::cerr + static void writeDefault(const char* s, std::streamsize num, bool error) { + if (error) { + std::cerr.write(s, num); + } else { + std::cout.write(s, num); + } + } + + /// By default, flush std::cout or std::cerr + static void flushDefault(bool error) { + if (error) { + std::cerr << std::flush; + } else { + std::cout << std::flush; + } + } + + /// Ignore output + static void writeIgnore(const char* s, std::streamsize num, bool error) { + } + + /// Print output message + template static void write(const char* s, std::streamsize num) { + switch (PL) { + case PL_NONE: + // No print + break; + case PL_WARN: + // Warnings + writeWarn(s, num, Err); + break; + case PL_PROG: + // Progress + writeProg(s, num, Err); + break; + case PL_DEBUG: break; + // Debug information + writeDebug(s, num, Err); + break; + case PL_ALL: break; + // All information + writeAll(s, num, Err); + break; + case PL_NUM_LEVELS: + break; + } + } + + /// Print log message, single character + template static void writeCh(char ch) { + write(&ch, 1); + } + + // Stream buffer for std::cout like printing + template class Streambuf : public std::streambuf { + public: + Streambuf() {} + protected: + virtual int_type overflow(int_type ch) { + if (ch != traits_type::eof()) { + writeCh(static_cast(ch)); + } + return ch; + } + virtual std::streamsize xsputn(const char* s, std::streamsize num) { + write(s, num); + return num; + } + virtual int sync() { + flush(Err); + return 0; + } + }; + + // Output stream for std::cout like printing + template class Stream : public std::ostream { + protected: + Streambuf buf; + public: + Stream() : std::ostream(&buf) {} + }; + + + }; + + // Get an output stream + template + std::ostream& userOut() { + // Singleton pattern + static Logger::Stream instance; + return instance; + } + +} // namespace casadi + +#endif // CASADI_LOGGER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_math.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_math.hpp new file mode 100755 index 0000000..504d35f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_math.hpp @@ -0,0 +1,587 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CASADI_MATH_HPP +#define CASADI_CASADI_MATH_HPP + +#include "casadi_calculus.hpp" + +/// \cond INTERNAL +namespace casadi { + +template class F> +bool operation_checker(unsigned int op) { + switch (op) { + case OP_ASSIGN: return F::check; + case OP_ADD: return F::check; + case OP_SUB: return F::check; + case OP_MUL: return F::check; + case OP_DIV: return F::check; + case OP_NEG: return F::check; + case OP_EXP: return F::check; + case OP_LOG: return F::check; + case OP_POW: return F::check; + case OP_CONSTPOW: return F::check; + case OP_SQRT: return F::check; + case OP_SQ: return F::check; + case OP_TWICE: return F::check; + case OP_SIN: return F::check; + case OP_COS: return F::check; + case OP_TAN: return F::check; + case OP_ASIN: return F::check; + case OP_ACOS: return F::check; + case OP_ATAN: return F::check; + case OP_LT: return F::check; + case OP_LE: return F::check; + case OP_EQ: return F::check; + case OP_NE: return F::check; + case OP_NOT: return F::check; + case OP_AND: return F::check; + case OP_OR: return F::check; + case OP_IF_ELSE_ZERO: return F::check; + case OP_FLOOR: return F::check; + case OP_CEIL: return F::check; + case OP_FMOD: return F::check; + case OP_FABS: return F::check; + case OP_SIGN: return F::check; + case OP_COPYSIGN: return F::check; + case OP_ERF: return F::check; + case OP_FMIN: return F::check; + case OP_FMAX: return F::check; + case OP_INV: return F::check; + case OP_SINH: return F::check; + case OP_COSH: return F::check; + case OP_TANH: return F::check; + case OP_ASINH: return F::check; + case OP_ACOSH: return F::check; + case OP_ATANH: return F::check; + case OP_CONST: return F::check; + case OP_CALL: return F::check; + case OP_INPUT: return F::check; + case OP_OUTPUT: return F::check; + case OP_ERFINV: return F::check; + case OP_PRINTME: return F::check; + case OP_ATAN2: return F::check; + case OP_LIFT: return F::check; + } + + // False by default + return false; +} + + +/// Easy access to all the functions for a particular type +template +struct casadi_math { + + /** \brief Evaluate a built in function (scalar-scalar) */ + static inline void fun(unsigned char op, const T& x, const T& y, T& f); + + /** \brief Evaluate a built in function (vector-vector) */ + static inline void fun(unsigned char op, const T* x, const T* y, T* f, int n); + + /** \brief Evaluate a built in function (vector-scalar) */ + static inline void fun(unsigned char op, const T* x, const T& y, T* f, int n); + + /** \brief Evaluate a built in function (scalar-vector) */ + static inline void fun(unsigned char op, const T& x, const T* y, T* f, int n); + + /** \brief Evaluate a built in derivative function */ + static inline void der(unsigned char op, const T& x, const T& y, const T& f, T* d); + + /** \brief Evaluate the function and the derivative function */ + static inline void derF(unsigned char op, const T& x, const T& y, T& f, T* d); + + /** \brief Number of dependencies */ + static inline int ndeps(unsigned char op); + + /** \brief Print */ + static inline void print(unsigned char op, std::ostream &stream, const std::string& x, + const std::string& y); + static inline void printName(unsigned char op, std::ostream &stream); + static inline void printPre(unsigned char op, std::ostream &stream); + static inline void printSep(unsigned char op, std::ostream &stream); + static inline void printPost(unsigned char op, std::ostream &stream); +}; + +/// Specialize the class so that it can be used with integer type +template<> +struct casadi_math{ + + /** \brief Evaluate a built in function */ + static inline void fun(unsigned char op, const int& x, const int& y, int& f) { + double ff(0); + casadi_math::fun(op, static_cast(x), static_cast(y), ff); + f = static_cast(ff); + } + + static inline void fun(unsigned char op, const int* x, const int* y, int* f, int n) { + for (int i=0; i::fun(op, static_cast(*x++), static_cast(*y++), ff); + *f++ = static_cast(ff); + } + } + + static inline void fun(unsigned char op, const int* x, const int& y, int* f, int n) { + for (int i=0; i::fun(op, static_cast(*x++), static_cast(y), ff); + *f++ = static_cast(ff); + } + } + + static inline void fun(unsigned char op, const int& x, const int* y, int* f, int n) { + for (int i=0; i::fun(op, static_cast(x), static_cast(*y++), ff); + *f++ = static_cast(ff); + } + } + + /** \brief Evaluate a built in derivative function */ + static inline void der(unsigned char op, const int& x, const int& y, const int& f, int* d) { + double d_real[2] = {static_cast(d[0]), static_cast(d[1])}; + casadi_math::der(op, static_cast(x), static_cast(y), + static_cast(f), d_real); + d[0] = static_cast(d_real[0]); + d[1] = static_cast(d_real[1]); + } + + /** \brief Evaluate the function and the derivative function */ + static inline void derF(unsigned char op, const int& x, const int& y, int& f, int* d) { + double d_real[2] = {static_cast(d[0]), static_cast(d[1])}; + double f_real(f); + casadi_math::derF(op, static_cast(x), static_cast(y), f_real, d_real); + f = static_cast(f_real); + d[0] = static_cast(d_real[0]); + d[1] = static_cast(d_real[1]); + } + + /** \brief Number of dependencies */ + static inline int ndeps(unsigned char op) { return casadi_math::ndeps(op);} + + /** \brief Print */ + static inline void print(unsigned char op, std::ostream &stream, const std::string& x, + const std::string& y) { casadi_math::print(op, stream, x, y);} + static inline void printPre(unsigned char op, std::ostream &stream) { + casadi_math::printPre(op, stream);} + static inline void printName(unsigned char op, std::ostream &stream) { + casadi_math::printName(op, stream);} + static inline void printSep(unsigned char op, std::ostream &stream) { + casadi_math::printSep(op, stream);} + static inline void printPost(unsigned char op, std::ostream &stream) { + casadi_math::printPost(op, stream);} +}; + +// Template implementations + +template +inline void casadi_math::fun(unsigned char op, const T& x, const T& y, T& f) { +// NOTE: We define the implementation in a preprocessor macro to be able to force inlining, +// and to allow extensions in the VM +#define CASADI_MATH_FUN_BUILTIN_GEN(CNAME, X, Y, F, N) \ + case OP_ASSIGN: CNAME::fcn(X, Y, F, N); break;\ + case OP_ADD: CNAME::fcn(X, Y, F, N); break;\ + case OP_SUB: CNAME::fcn(X, Y, F, N); break;\ + case OP_MUL: CNAME::fcn(X, Y, F, N); break;\ + case OP_DIV: CNAME::fcn(X, Y, F, N); break;\ + case OP_NEG: CNAME::fcn(X, Y, F, N); break;\ + case OP_EXP: CNAME::fcn(X, Y, F, N); break;\ + case OP_LOG: CNAME::fcn(X, Y, F, N); break;\ + case OP_POW: CNAME::fcn(X, Y, F, N); break;\ + case OP_CONSTPOW: CNAME::fcn(X, Y, F, N); break;\ + case OP_SQRT: CNAME::fcn(X, Y, F, N); break;\ + case OP_SQ: CNAME::fcn(X, Y, F, N); break;\ + case OP_TWICE: CNAME::fcn(X, Y, F, N); break;\ + case OP_SIN: CNAME::fcn(X, Y, F, N); break;\ + case OP_COS: CNAME::fcn(X, Y, F, N); break;\ + case OP_TAN: CNAME::fcn(X, Y, F, N); break;\ + case OP_ASIN: CNAME::fcn(X, Y, F, N); break;\ + case OP_ACOS: CNAME::fcn(X, Y, F, N); break;\ + case OP_ATAN: CNAME::fcn(X, Y, F, N); break;\ + case OP_LT: CNAME::fcn(X, Y, F, N); break;\ + case OP_LE: CNAME::fcn(X, Y, F, N); break;\ + case OP_EQ: CNAME::fcn(X, Y, F, N); break;\ + case OP_NE: CNAME::fcn(X, Y, F, N); break;\ + case OP_NOT: CNAME::fcn(X, Y, F, N); break;\ + case OP_AND: CNAME::fcn(X, Y, F, N); break;\ + case OP_OR: CNAME::fcn(X, Y, F, N); break;\ + case OP_IF_ELSE_ZERO: CNAME::fcn(X, Y, F, N); break;\ + case OP_FLOOR: CNAME::fcn(X, Y, F, N); break;\ + case OP_CEIL: CNAME::fcn(X, Y, F, N); break;\ + case OP_FMOD: CNAME::fcn(X, Y, F, N); break;\ + case OP_FABS: CNAME::fcn(X, Y, F, N); break;\ + case OP_SIGN: CNAME::fcn(X, Y, F, N); break;\ + case OP_COPYSIGN: CNAME::fcn(X, Y, F, N); break;\ + case OP_ERF: CNAME::fcn(X, Y, F, N); break;\ + case OP_FMIN: CNAME::fcn(X, Y, F, N); break;\ + case OP_FMAX: CNAME::fcn(X, Y, F, N); break;\ + case OP_INV: CNAME::fcn(X, Y, F, N); break;\ + case OP_SINH: CNAME::fcn(X, Y, F, N); break;\ + case OP_COSH: CNAME::fcn(X, Y, F, N); break;\ + case OP_TANH: CNAME::fcn(X, Y, F, N); break;\ + case OP_ASINH: CNAME::fcn(X, Y, F, N); break;\ + case OP_ACOSH: CNAME::fcn(X, Y, F, N); break;\ + case OP_ATANH: CNAME::fcn(X, Y, F, N); break;\ + case OP_ATAN2: CNAME::fcn(X, Y, F, N); break; \ + case OP_ERFINV: CNAME::fcn(X, Y, F, N); break;\ + case OP_LIFT: CNAME::fcn(X, Y, F, N); break;\ + case OP_PRINTME: CNAME::fcn(X, Y, F, N); break; + +#define CASADI_MATH_FUN_BUILTIN(X, Y, F) CASADI_MATH_FUN_BUILTIN_GEN(BinaryOperationSS, X, Y, F, 1) + + switch (op) { + CASADI_MATH_FUN_BUILTIN(x, y, f) + } +} + +template + inline void casadi_math::fun(unsigned char op, const T* x, const T* y, T* f, int n) { + switch (op) { + CASADI_MATH_FUN_BUILTIN_GEN(BinaryOperationVV, x, y, f, n) + } +} + +template + inline void casadi_math::fun(unsigned char op, const T* x, const T& y, T* f, int n) { + switch (op) { + CASADI_MATH_FUN_BUILTIN_GEN(BinaryOperationVS, x, y, f, n) + } +} + +template + inline void casadi_math::fun(unsigned char op, const T& x, const T* y, T* f, int n) { + switch (op) { + CASADI_MATH_FUN_BUILTIN_GEN(BinaryOperationSV, x, y, f, n) + } +} + + +template +inline void casadi_math::der(unsigned char op, const T& x, const T& y, const T& f, T* d) { +// NOTE: We define the implementation in a preprocessor macro to be able to force inlining, +// and to allow extensions in the VM +#define CASADI_MATH_DER_BUILTIN(X, Y, F, D) \ + case OP_ASSIGN: BinaryOperation::der(X, Y, F, D); break;\ + case OP_ADD: BinaryOperation::der(X, Y, F, D); break;\ + case OP_SUB: BinaryOperation::der(X, Y, F, D); break;\ + case OP_MUL: BinaryOperation::der(X, Y, F, D); break;\ + case OP_DIV: BinaryOperation::der(X, Y, F, D); break;\ + case OP_NEG: BinaryOperation::der(X, Y, F, D); break;\ + case OP_EXP: BinaryOperation::der(X, Y, F, D); break;\ + case OP_LOG: BinaryOperation::der(X, Y, F, D); break;\ + case OP_POW: BinaryOperation::der(X, Y, F, D); break;\ + case OP_CONSTPOW: BinaryOperation::der(X, Y, F, D); break;\ + case OP_SQRT: BinaryOperation::der(X, Y, F, D); break;\ + case OP_SQ: BinaryOperation::der(X, Y, F, D); break;\ + case OP_TWICE: BinaryOperation::der(X, Y, F, D); break;\ + case OP_SIN: BinaryOperation::der(X, Y, F, D); break;\ + case OP_COS: BinaryOperation::der(X, Y, F, D); break;\ + case OP_TAN: BinaryOperation::der(X, Y, F, D); break;\ + case OP_ASIN: BinaryOperation::der(X, Y, F, D); break;\ + case OP_ACOS: BinaryOperation::der(X, Y, F, D); break;\ + case OP_ATAN: BinaryOperation::der(X, Y, F, D); break;\ + case OP_LT: BinaryOperation::der(X, Y, F, D); break;\ + case OP_LE: BinaryOperation::der(X, Y, F, D); break;\ + case OP_EQ: BinaryOperation::der(X, Y, F, D); break;\ + case OP_NE: BinaryOperation::der(X, Y, F, D); break;\ + case OP_NOT: BinaryOperation::der(X, Y, F, D); break;\ + case OP_AND: BinaryOperation::der(X, Y, F, D); break;\ + case OP_OR: BinaryOperation::der(X, Y, F, D); break;\ + case OP_IF_ELSE_ZERO: BinaryOperation::der(X, Y, F, D); break;\ + case OP_FLOOR: BinaryOperation::der(X, Y, F, D); break;\ + case OP_CEIL: BinaryOperation::der(X, Y, F, D); break;\ + case OP_FMOD: BinaryOperation::der(X, Y, F, D); break;\ + case OP_FABS: BinaryOperation::der(X, Y, F, D); break;\ + case OP_SIGN: BinaryOperation::der(X, Y, F, D); break;\ + case OP_COPYSIGN: BinaryOperation::der(X, Y, F, D); break;\ + case OP_ERF: BinaryOperation::der(X, Y, F, D); break;\ + case OP_FMIN: BinaryOperation::der(X, Y, F, D); break;\ + case OP_FMAX: BinaryOperation::der(X, Y, F, D); break;\ + case OP_INV: BinaryOperation::der(X, Y, F, D); break;\ + case OP_SINH: BinaryOperation::der(X, Y, F, D); break;\ + case OP_COSH: BinaryOperation::der(X, Y, F, D); break;\ + case OP_TANH: BinaryOperation::der(X, Y, F, D); break;\ + case OP_ASINH: BinaryOperation::der(X, Y, F, D); break;\ + case OP_ACOSH: BinaryOperation::der(X, Y, F, D); break;\ + case OP_ATANH: BinaryOperation::der(X, Y, F, D); break;\ + case OP_ATAN2: BinaryOperation::der(X, Y, F, D); break;\ + case OP_ERFINV: BinaryOperation::der(X, Y, F, D); break;\ + case OP_LIFT: BinaryOperation::der(X, Y, F, D); break;\ + case OP_PRINTME: BinaryOperation::der(X, Y, F, D); break; + + switch (op) { + CASADI_MATH_DER_BUILTIN(x, y, f, d) + } +} + + +template +inline void casadi_math::derF(unsigned char op, const T& x, const T& y, T& f, T* d) { +// NOTE: We define the implementation in a preprocessor macro to be able to force inlining, +// and to allow extensions in the VM +#define CASADI_MATH_DERF_BUILTIN(X, Y, F, D) \ + case OP_ASSIGN: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_ADD: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_SUB: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_MUL: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_DIV: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_NEG: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_EXP: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_LOG: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_POW: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_CONSTPOW: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_SQRT: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_SQ: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_TWICE: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_SIN: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_COS: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_TAN: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_ASIN: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_ACOS: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_ATAN: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_LT: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_LE: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_EQ: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_NE: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_NOT: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_AND: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_OR: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_IF_ELSE_ZERO: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_FLOOR: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_CEIL: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_FMOD: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_FABS: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_SIGN: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_COPYSIGN: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_ERF: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_FMIN: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_FMAX: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_INV: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_SINH: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_COSH: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_TANH: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_ASINH: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_ACOSH: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_ATANH: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_ATAN2: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_ERFINV: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_LIFT: DerBinaryOpertion::derf(X, Y, F, D); break;\ + case OP_PRINTME: DerBinaryOpertion::derf(X, Y, F, D); break; + + switch (op) { + CASADI_MATH_DERF_BUILTIN(x, y, f, d) + } +} + +template +inline int casadi_math::ndeps(unsigned char op) { +#define CASADI_MATH_BINARY_BUILTIN \ + case OP_ADD:\ + case OP_SUB:\ + case OP_MUL:\ + case OP_DIV:\ + case OP_POW:\ + case OP_CONSTPOW:\ + case OP_LT:\ + case OP_LE:\ + case OP_EQ:\ + case OP_NE:\ + case OP_AND:\ + case OP_OR:\ + case OP_IF_ELSE_ZERO:\ + case OP_COPYSIGN:\ + case OP_FMIN:\ + case OP_FMAX:\ + case OP_ATAN2:\ + case OP_PRINTME:\ + case OP_LIFT: + + switch (op) { + case OP_CONST: + case OP_PARAMETER: + case OP_INPUT: + return 0; + CASADI_MATH_BINARY_BUILTIN + return 2; + default: + return 1; + } +} + +template +inline void casadi_math::print(unsigned char op, std::ostream &stream, const std::string& x, + const std::string& y) { + if (ndeps(op)==2) { + printPre(op, stream); + stream << x; + printSep(op, stream); + stream << y; + printPost(op, stream); + } else { + printPre(op, stream); + stream << x; + printPost(op, stream); + } +} + +template +inline void casadi_math::printName(unsigned char op, std::ostream &stream) { + switch (op) { + case OP_ASSIGN: stream << "assign"; break; + case OP_ADD: stream << "add"; break; + case OP_SUB: stream << "sub"; break; + case OP_MUL: stream << "mul"; break; + case OP_DIV: stream << "div"; break; + case OP_NEG: stream << "neg"; break; + case OP_EXP: stream << "exp"; break; + case OP_LOG: stream << "log"; break; + case OP_CONSTPOW: + case OP_POW: stream << "pow"; break; + case OP_SQRT: stream << "sqrt"; break; + case OP_SQ: stream << "sq"; break; + case OP_TWICE: stream << "twice"; break; + case OP_SIN: stream << "sin"; break; + case OP_COS: stream << "cos"; break; + case OP_TAN: stream << "tan"; break; + case OP_ASIN: stream << "asin"; break; + case OP_ACOS: stream << "acos"; break; + case OP_ATAN: stream << "atan"; break; + case OP_LT: stream << "lt"; break; + case OP_LE: stream << "le"; break; + case OP_EQ: stream << "eq"; break; + case OP_NE: stream << "ne"; break; + case OP_NOT: stream << "not"; break; + case OP_AND: stream << "and"; break; + case OP_OR: stream << "or"; break; + case OP_FLOOR: stream << "floor"; break; + case OP_CEIL: stream << "ceil"; break; + case OP_FMOD: stream << "fmod"; break; + case OP_FABS: stream << "fabs"; break; + case OP_SIGN: stream << "sign"; break; + case OP_COPYSIGN: stream << "copysign"; break; + case OP_IF_ELSE_ZERO: stream << "if_else_zero"; break; + case OP_ERF: stream << "erf"; break; + case OP_FMIN: stream << "fmin"; break; + case OP_FMAX: stream << "fmax"; break; + case OP_INV: stream << "inv"; break; + case OP_SINH: stream << "sinh"; break; + case OP_COSH: stream << "cosh"; break; + case OP_TANH: stream << "tanh"; break; + case OP_ASINH: stream << "asinh"; break; + case OP_ACOSH: stream << "acosh"; break; + case OP_ATANH: stream << "atanh"; break; + case OP_ATAN2: stream << "atan2"; break; + case OP_CONST: stream << "const"; break; + case OP_INPUT: stream << "input"; break; + case OP_OUTPUT: stream << "output"; break; + case OP_PARAMETER: stream << "parameter"; break; + case OP_CALL: stream << "call"; break; + case OP_MATMUL: stream << "matmul"; break; + case OP_SOLVE: stream << "solve"; break; + case OP_TRANSPOSE: stream << "transpose"; break; + case OP_DETERMINANT: stream << "determinant"; break; + case OP_INVERSE: stream << "inverse"; break; + case OP_INNER_PROD: stream << "inner_prod"; break; + case OP_HORZCAT: stream << "horzcat"; break; + case OP_VERTCAT: stream << "vertcat"; break; + case OP_DIAGCAT: stream << "diagcat"; break; + case OP_HORZSPLIT: stream << "horzsplit"; break; + case OP_VERTSPLIT: stream << "vertsplit"; break; + case OP_DIAGSPLIT: stream << "diagsplit"; break; + case OP_RESHAPE: stream << "reshape"; break; + case OP_SUBREF: stream << "subref"; break; + case OP_SUBASSIGN: stream << "subassign"; break; + case OP_GETNONZEROS: stream << "getnonzeros"; break; + case OP_ADDNONZEROS: stream << "addnonzeros"; break; + case OP_SETNONZEROS: stream << "setnonzeros"; break; + case OP_PROJECT: stream << "project"; break; + case OP_ASSERTION: stream << "assertion"; break; + case OP_NORM2: stream << "norm2"; break; + case OP_NORM1: stream << "norm1"; break; + case OP_NORMINF: stream << "norminf"; break; + case OP_NORMF: stream << "normf"; break; + case OP_ERFINV: stream << "erfinv"; break; + case OP_PRINTME: stream << "printme"; break; + case OP_LIFT: stream << "lift"; break; + } +} + +template +inline void casadi_math::printPre(unsigned char op, std::ostream &stream) { + switch (op) { + case OP_ASSIGN: break; + case OP_ADD: stream << "("; break; + case OP_SUB: stream << "("; break; + case OP_MUL: stream << "("; break; + case OP_DIV: stream << "("; break; + case OP_NEG: stream << "(-"; break; + case OP_TWICE: stream << "(2.*"; break; + case OP_LT: stream << "("; break; + case OP_LE: stream << "("; break; + case OP_EQ: stream << "("; break; + case OP_NE: stream << "("; break; + case OP_NOT: stream << "(!"; break; + case OP_AND: stream << "("; break; + case OP_OR: stream << "("; break; + case OP_IF_ELSE_ZERO: stream << "("; break; + case OP_INV: stream << "(1./"; break; + default: printName(op, stream); stream << "("; break; + } +} + +template +inline void casadi_math::printSep(unsigned char op, std::ostream &stream) { + switch (op) { + case OP_ADD: stream << "+"; break; + case OP_SUB: stream << "-"; break; + case OP_MUL: stream << "*"; break; + case OP_DIV: stream << "/"; break; + case OP_LT: stream << "<"; break; + case OP_LE: stream << "<="; break; + case OP_EQ: stream << "=="; break; + case OP_NE: stream << "!="; break; + case OP_AND: stream << "&&"; break; + case OP_OR: stream << "||"; break; + case OP_IF_ELSE_ZERO: stream << "?"; break; + default: stream << ","; break; + } +} + +template +inline void casadi_math::printPost(unsigned char op, std::ostream &stream) { + switch (op) { + case OP_ASSIGN: break; + case OP_IF_ELSE_ZERO: stream << ":0)"; break; + default: stream << ")"; break; + } +} + +} // namespace casadi + +/// \endcond + +#endif // CASADI_CASADI_MATH_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_meta.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_meta.hpp new file mode 100755 index 0000000..dcaa8b7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_meta.hpp @@ -0,0 +1,105 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CASADI_META_HPP +#define CASADI_CASADI_META_HPP + +#include +#include "casadi_common.hpp" + +namespace casadi { + /** + * \brief Collects global CasADi meta information + * + * \author Joris Gillis + * \date 2012 + */ + class CASADI_EXPORT CasadiMeta { + private: + /// No instances are allowed + CasadiMeta(); + public: +#ifndef SWIG + static const std::string version; + static const std::string git_revision; + static const std::string git_describe; + static const std::string feature_list; + static const std::string build_type; + static const std::string compiler_id; + static const std::string compiler; + static const std::string compiler_flags; + static const std::string modules; + static const std::string plugins; + static const std::string install_prefix; +#endif //SWIG + /** \brief Obtain the version number of CasADi + * The format is 'x.y.z' or 'x.y.z+' + * + * The variant without + indicates that the version is an official release + * + * The variant with + indicates that the version is more recent than 'x.y.z', + * and might be more recent than 'x.y.w' with w>z. + * + * \see getGitRevision getGitDescribe + */ + static std::string getVersion() { return version; } + /** \brief Obtain the git hash of this build + * (only available if built from a git repo) + */ + static std::string getGitRevision() { return git_revision; } + /** \brief Obtain the git description of this build + * (only available if built from a git repo) + */ + static std::string getGitDescribe() { return git_describe; } + /** \brief Obtain list of features that were compiled into this build + */ + static std::string getFeatureList() { return feature_list; } + /** \brief Obtain build type: RELEASE/Debug + */ + static std::string getBuildType() { return build_type; } + /** \brief Obtain compiler identification + * Provided by http://www.cmake.org/cmake/help/v2.8.10/cmake.html#variable:CMAKE_LANG_COMPILER_ID + */ + static std::string getCompilerId() { return compiler_id; } + /** \brief Obtain compiler + */ + static std::string getCompiler() { return compiler; } + /** \brief Obtain compiler flags + */ + static std::string getCompilerFlags() { return compiler_flags; } + /** \brief Obtain modules list + */ + static std::string getModules() { return modules; } + /** \brief Obtain plugins list + */ + static std::string getPlugins() { return plugins; } + /** \brief Obtain install prefix + */ + static std::string getInstallPrefix() { return install_prefix; } + }; + +} // namespace casadi + +#endif // CASADI_CASADI_META_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_options.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_options.hpp new file mode 100755 index 0000000..c4a5972 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_options.hpp @@ -0,0 +1,123 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CASADI_OPTIONS_HPP +#define CASADI_CASADI_OPTIONS_HPP + +#include +#include + +#include "casadi_common.hpp" + +namespace casadi { + + /** + * \brief Collects global CasADi options + * + * + * Note to developers: \n + * - use sparingly. Global options are - in general - a rather bad idea \n + * - this class must never be instantiated. Access its static members directly \n + * + * \author Joris Gillis + * \date 2012 + */ + class CASADI_EXPORT CasadiOptions { + private: + /// No instances are allowed + CasadiOptions(); + public: + +#ifndef SWIG + /** \brief Catch CasADi errors when they reach the SWIG layer + * If set to true (which will always be the default), any CasADi errors are caught in the SWIG interface + * and converted to swig exceptions. This allows the user to obtain stacktraces, use try/except, etc... + * + * If set to false, CasADi errors crash the swig interface. This allows a CasADi developer + * to obtain a full C++ stacktrace with a debugger such as 'gdb'. + * + * Default: true + */ + static bool catch_errors_swig; + /** \brief Indicates whether simplifications should be made on the fly. + * e.g. cos(-x) -> cos(x) + * Default: true + */ + static bool simplification_on_the_fly; + + /** \brief Stream on which profiling log should be written */ + static std::ofstream profilingLog; + + /** \brief flag to indicate if profiling is active */ + static bool profiling; + + static bool profilingBinary; + + static bool purgeSeeds; + + static bool allowed_internal_api; + + static std::string casadipath; + + static int optimized_num_dir; + +#endif //SWIG + // Setter and getter for catch_errors_swig + static void setCatchErrorsSwig(bool flag) { catch_errors_swig = flag; } + static bool getCatchErrorsSwig() { return catch_errors_swig; } + + // Setter and getter for simplification_on_the_fly + static void setSimplificationOnTheFly(bool flag) { simplification_on_the_fly = flag; } + static bool getSimplificationOnTheFly() { return simplification_on_the_fly; } + + /** \brief Start virtual machine profiling + * + * When profiling is active, each primitive of an MX algorithm is profiling and dumped into the supplied file _filename_ + * After the profiling is done, convert the supplied file to a viewable webpage with: + * `casadi-build-dir/bin/profilereport _filename_` + */ + static void startProfiling(const std::string &filename); + static void stopProfiling(); + + static void setProfilingBinary(bool flag) { profilingBinary = flag; } + static bool getProfilingBinary() { return profilingBinary; } + + static void setPurgeSeeds(bool flag) { purgeSeeds = flag; } + static bool setPurgeSeeds() { return purgeSeeds; } + + static void setAllowedInternalAPI(bool flag) { allowed_internal_api= flag; } + static bool getAllowedInternalAPI() { return allowed_internal_api; } + + static void setCasadiPath(const std::string & path) { casadipath = path; } + static std::string getCasadiPath() { return casadipath; } + + static void setOptimizedNumDir(int n) { optimized_num_dir = n; } + static int getOptimizedNumDir() { return optimized_num_dir; } + + }; + +} // namespace casadi + +#endif // CASADI_CASADI_OPTIONS_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_types.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_types.hpp new file mode 100755 index 0000000..a31b296 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/casadi_types.hpp @@ -0,0 +1,106 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CASADI_TYPES_HPP +#define CASADI_CASADI_TYPES_HPP + +#include +#include +#include + +#include "casadi_common.hpp" +#include "casadi_logger.hpp" + +#ifdef SWIG +#define SWIG_OUTPUT(arg) OUTPUT +#define SWIG_INOUT(arg) INOUT +#define SWIG_CONSTREF(arg) const arg +#ifdef SWIGMATLAB +#define SWIG_IND1 true +#else // SWIGMATLAB +#define SWIG_IND1 false +#endif // SWIGMATLAB +#else // SWIG +#define SWIG_OUTPUT(arg) arg +#define SWIG_INOUT(arg) arg +#define SWIG_CONSTREF(arg) const arg & +#define SWIG_IND1 false +#endif // SWIG + +namespace casadi { + + /// Forward declarations + class SXElement; + class MX; + template class Matrix; + class Function; + class Sparsity; + class CodeGenerator; + class NlpSolver; + class LinearSolver; + class Integrator; + class QpSolver; + class StabilizedQpSolver; + class QcqpSolver; + class LpSolver; + class SdpSolver; + class SocpSolver; + class SdqpSolver; + class DleSolver; + class CleSolver; + class ImplicitFunction; + + class DerivativeGenerator; + class Callback; + class CustomEvaluate; + class CustomFunction; + class NlpBuilder; + class Variable; + class DaeBuilder; + class XmlFile; + +#ifndef SWIG + + // Type with a size corresponding to that of double (or smaller) that can be used to hold a set + // of booleans. If the compiler supports C99 or has defined __SIZEOF_LONG_LONG__, + // we shall use the long long datatype, which is 64 bits, otherwise long + #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L || defined(__SIZEOF_LONG_LONG__)) + typedef unsigned long long bvec_t; + #else + typedef unsigned long bvec_t; + #endif + + // Number of directions we can deal with at a time + // the size of bvec_t in bits (CHAR_BIT is the number of bits per byte, usually 8) + const int bvec_size = CHAR_BIT*sizeof(bvec_t); + + // Make sure that the integer datatype is indeed smaller or equal to the double + //assert(sizeof(bvec_t) <= sizeof(double)); // doesn't work - very strange +#endif // SWIG + +} // namespace casadi + +#endif // CASADI_CASADI_TYPES_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/core.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/core.hpp new file mode 100755 index 0000000..ffdabe8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/core.hpp @@ -0,0 +1,85 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CORE_HPP +#define CASADI_CORE_HPP + +// Scalar expressions (why do I need to put it up here?) +#include "sx/sx_element.hpp" + +// Generic tools +#include "polynomial.hpp" +#include "std_vector_tools.hpp" +#include "functor.hpp" +#include "casadi_options.hpp" +#include "casadi_meta.hpp" + +// Matrices +#include "matrix/matrix.hpp" + +// Matrix expressions +#include "mx/mx.hpp" + +// Functions +#include "function/code_generator.hpp" +#include "function/sx_function.hpp" +#include "function/mx_function.hpp" +#include "function/compiler.hpp" +#include "function/external_function.hpp" +#include "function/switch.hpp" +#include "function/linear_solver.hpp" +#include "function/nlp_solver.hpp" +#include "function/integrator.hpp" +#include "function/implicit_function.hpp" +#include "function/custom_function.hpp" +#include "function/callback.hpp" +#include "function/simulator.hpp" +#include "function/control_simulator.hpp" +#include "function/qp_solver.hpp" +#include "function/homotopy_nlp_solver.hpp" +#include "function/stabilized_qp_solver.hpp" +#include "function/lp_solver.hpp" +#include "function/sdp_solver.hpp" +#include "function/socp_solver.hpp" +#include "function/qcqp_solver.hpp" +#include "function/sdqp_solver.hpp" +#include "function/nullspace.hpp" +#include "function/lr_dle_solver.hpp" +#include "function/lr_dple_solver.hpp" +#include "function/dple_solver.hpp" +#include "function/cle_solver.hpp" +#include "function/dle_solver.hpp" +#include "function/map.hpp" +#include "function/mapaccum.hpp" +#include "function/kernel_sum_2d.hpp" + +// Misc +#include "misc/integration_tools.hpp" +#include "misc/nlp_builder.hpp" +#include "misc/variable.hpp" +#include "misc/dae_builder.hpp" +#include "misc/xml_file.hpp" + +#endif // CASADI_CORE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/expression_tools.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/expression_tools.hpp new file mode 100755 index 0000000..a033a23 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/expression_tools.hpp @@ -0,0 +1,26 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +// redirection +#include "function/sx_function.hpp" diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/adaptor.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/adaptor.hpp new file mode 100755 index 0000000..1ecdafa --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/adaptor.hpp @@ -0,0 +1,68 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_ADAPTOR_HPP +#define CASADI_ADAPTOR_HPP + +#include "../function/function_internal.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** \brief A helper class for a Solver that delegates work to another solver + * + * + * \author Joris Gillis + * \date 2014 + */ + template< class Derived, class Solver> + class Adaptor { + public: + + // Solver name of target solver + static std::string solvername() { return Solver::shortname() + "_solver"; } + + // Options name of target solver + static std::string optionsname() { return solvername() + "_options"; } + + /// Add options that are common to all Adaptor classes + void addOptions(); + }; + + template< class Derived, class Solver> + void Adaptor::addOptions() { + Derived* this_ = static_cast(this); + this_->addOption(solvername(), OT_STRING, GenericType(), + "Name of solver."); + this_->addOption(optionsname(), OT_DICT, Dict(), + "Options to be passed to solver."); + } + +} // namespace casadi + +/// \endcond + +#endif // CASADI_ADAPTOR_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/callback.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/callback.hpp new file mode 100755 index 0000000..465fde2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/callback.hpp @@ -0,0 +1,179 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef CASADI_CALLBACK_HPP +#define CASADI_CALLBACK_HPP + +#include "function_internal.hpp" +#include "../functor_internal.hpp" + +namespace casadi { + + +class CASADI_EXPORT Callback2 { + + public: + Callback2(); + + //virtual Sparsity jacSparsity(int iind, ind oind) { } + virtual std::vector operator()(const std::vector& arg); + //virtual Function derForward(const std::string& name, int nfwd, const Dict& options) {} + + /** \brief Number of input arguments + * + * Specify the number of input arguments that a specific instance can handle. + * The number must not be changed over the lifetime of the object + * + * Default implementation: 1 + * + */ + virtual int nIn() { return 1;} + /** \brief Number of output arguments + * + * Specify the number of output arguments that a specific instance can handle. + * The number must not be changed over the lifetime of the object + * + * Default implementation: 1 + */ + virtual int nOut() { return 1;} + /** \brief Specify input sparsity + * + * Specify the sparsity corresponding to a given input. + * The sparsity must not be changed over the lifetime of the object + * + * Default implementation: dense using inputShape + * + */ + virtual Sparsity inputSparsity(int i) { return Sparsity::dense(inputShape(i)); } + /** \brief Specify output sparsity + * + * Specify the sparsity corresponding to a given output. + * The sparsity must not be changed over the lifetime of the object + * + * Default implementation: dense using outputShape + * + */ + virtual Sparsity outputSparsity(int i) { return Sparsity::dense(outputShape(i)); } + /** \brief Specify input shape + * + * Specify the shape corresponding to a given input. + * The shape must not be changed over the lifetime of the object + * + * Default implementation: scalar (1,1) + * + */ + virtual std::pair inputShape(int i) { return std::pair(1, 1); } + /** \brief Specify output shape + * + * Specify the shape corresponding to a given output. + * The shape must not be changed over the lifetime of the object + * + * Default implementation: scalar (1,1) + * + */ + virtual std::pair outputShape(int i) { return std::pair(1, 1); } + /** \brief Specify the name of the object + */ + virtual std::string name() { return "Custom callback"; } + + /** \brief Specify the options of the object + */ + virtual Dict options() { return Dict(); } + + Function create(); + + /** \brief Destructor */ + virtual ~Callback2(); + + +}; + +class CASADI_EXPORT DerivativeGenerator2 { + + public: + DerivativeGenerator2(); + + virtual Function operator()(Function& fcn, int ndir); + + /// Computes the derivative as if this derivative generator does not exist + Function original(Function& fcn, int ndir, bool fwd); + + DerivativeGenerator create(); + + /** \brief Destructor */ + virtual ~DerivativeGenerator2(); +}; + +#ifndef SWIG + +class DerivativeGeneratorInternal2 : public DerivativeGeneratorInternal { +public: + /** \brief Create a function */ + explicit DerivativeGeneratorInternal2(DerivativeGenerator2 &callback); + + /** \brief Destructor */ + virtual ~DerivativeGeneratorInternal2(); + + /** \brief Cloning */ + virtual DerivativeGeneratorInternal2* clone() const { + return new DerivativeGeneratorInternal2(*this); + } + + virtual Function call(Function& fcn, int ndir, void* user_data) { return callback_(fcn, ndir); } + + DerivativeGenerator2& callback_; +}; + + +class CASADI_EXPORT CallbackFunctionInternal : public FunctionInternal { + friend class CallbackFunction; + public: + + + /** \brief Create a function */ + explicit CallbackFunctionInternal(Callback2 &callback); + + /** \brief Destructor */ + virtual ~CallbackFunctionInternal(); + + /** \brief Cloning */ + virtual CallbackFunctionInternal* clone() const { return new CallbackFunctionInternal(*this);} + + virtual void evalD(const double** arg, + double** res, int* iw, double* w); + + /** \brief Initialize */ + virtual void init(); + + Callback2& callback_; + + double eps_; + +}; +#endif + + +} // namespace casadi + +#endif // CASADI_CALLBACK_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/cle_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/cle_internal.hpp new file mode 100755 index 0000000..3010afb --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/cle_internal.hpp @@ -0,0 +1,127 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CLE_INTERNAL_HPP +#define CASADI_CLE_INTERNAL_HPP + +#include "cle_solver.hpp" +#include "cle_internal.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /// Structure specification of a CLE + enum CleStruct { + /// The matrix A + Cle_STRUCT_A, + /// The matrix V + Cle_STRUCT_V, + /// The matrix C (defaults to unity) + Cle_STRUCT_C, + Cle_STRUCT_NUM}; + + /** \brief Internal storage for CleSolver related data + + @copydoc CLE_doc + \author Joris Gillis + \date 2014 + */ + class CASADI_EXPORT + CleInternal : public FunctionInternal, + public PluginInterface { + public: + /** \brief Constructor + * \param st \structargument{Cle} + */ + CleInternal(const std::map& st, + int nrhs=1, bool transp=false); + + /** \brief Destructor */ + virtual ~CleInternal()=0; + + /** \brief Clone */ + virtual CleInternal* clone() const=0; + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief Create a new solver */ + virtual CleInternal* create(const std::map& st) const = 0; + + /** \brief Print solver statistics */ + virtual void printStats(std::ostream &stream) const {} + + /** \brief evaluate */ + virtual void evaluate()=0; + + /** \brief Initialize */ + virtual void init(); + + /// Structure of Cle + std::vector st_; + + /// Sparsities of A + Sparsity A_; + + /// Sparsities of V + Sparsity V_; + + /// Assume positive definiteness of P_i + bool pos_def_; + + /// Throw an error when system is unstable + bool error_unstable_; + + /// Margin for instability detection + double eps_unstable_; + + /// Number of right hand sides + int nrhs_; + + /// Tranpose the system? + bool transp_; + + // Creator function for internal class + typedef CleInternal* (*Creator)(const std::map& st); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "cle";} + }; + +} // namespace casadi +/// \endcond +#endif // CASADI_CLE_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/cle_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/cle_solver.hpp new file mode 100755 index 0000000..1615126 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/cle_solver.hpp @@ -0,0 +1,131 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CLE_SOLVER_HPP +#define CASADI_CLE_SOLVER_HPP + +#include "function.hpp" + +/** \defgroup CLE_doc Discrete periodic Lyapunov Equation solver + + + Given matrices \f$A\f$ and symmetric \f$V\f$ + + \verbatim + A in R^(n x n) + V in S^n + \endverbatim + + finds \f$P\f$ that satisfies: + + \verbatim + 0 = A P + P A' + V + \endverbatim + + +*/ +namespace casadi { +#ifndef SWIG + + /// Input arguments of a \e cle solver [cleIn] + enum CLEInput { + /// A matrix [a] + CLE_A, + /// V matrix [v] + CLE_V, + CLE_NUM_IN + }; + + /// Output arguments of a \e cle solver [cleOut] + enum CLEOutput { + /// Lyapunov matrix [p] + CLE_P, + /// Number of arguments. + CLE_NUM_OUT + }; +#endif // SWIG + + /// Forward declaration of internal class + class CleInternal; + + /** \brief Base class for Discrete Lyapunov Equation Solvers + + @copydoc CLE_doc + + \generalsection{CleSolver} + \pluginssection{CleSolver} + + \author Joris Gillis + \date 2014 + + */ + class CASADI_EXPORT CleSolver : public Function { + public: + /// Default constructor + CleSolver(); + + /// Clone + CleSolver clone() const; + + /** \brief Constructor (new syntax, includes initialization) + * \param solver \pluginargument{CleSolver} + * \param st \structargument{Cle} + */ + CleSolver(const std::string& name, const std::string& solver, + const std::map& st, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor (no initialization) + * \param solver \pluginargument{CleSolver} + * \param st \structargument{Cle} + */ + CleSolver(const std::string& solver, const std::map& st); +#endif // WITH_DEPRECATED_FEATURES + + /// Print solver statistics + void printStats(std::ostream &stream=casadi::userOut()) const; + + /// Access functions of the node + CleInternal* operator->(); + + /// Access functions of the node + const CleInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + }; + +} // namespace casadi + +#endif // CASADI_CLE_SOLVER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/code_generator.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/code_generator.hpp new file mode 100755 index 0000000..592a619 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/code_generator.hpp @@ -0,0 +1,247 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CODE_GENERATOR_HPP +#define CASADI_CODE_GENERATOR_HPP + +#include "function.hpp" +#include +#include +#include + +namespace casadi { + + class CASADI_EXPORT CodeGenerator { + public: + /// Constructor + CodeGenerator(const Dict& opts = Dict()); + + /// Add a function (name generated) + void add(const Function& f); + + /// Add a function + void add(const Function& f, const std::string& fname); + +#ifndef SWIG + /// Generate the code to a stream + void generate(std::ostream& s) const; +#endif // SWIG + + /// Generate a file + void generate(const std::string& name) const; + + /// Generate a file, return code as string + std::string generate() const; + + /// Compile and load function + std::string compile(const std::string& name, const std::string& compiler="gcc -fPIC -O2"); + + /// Add an include file optionally using a relative path "..." instead of an absolute path <...> + void addInclude(const std::string& new_include, bool relative_path=false, + const std::string& use_ifdef=std::string()); + +#ifndef SWIG + /// Add an external function declaration + void addExternal(const std::string& new_external); + + // Add a sparsity pattern + std::string sparsity(const Sparsity& sp); + + // Add a sparsity pattern, get index + int addSparsity(const Sparsity& sp); + + /** \brief Get the index of an existing sparsity pattern */ + int getSparsity(const Sparsity& sp) const; + + /** \brief Get or add a constant */ + int getConstant(const std::vector& v, bool allow_adding=false); + + /** \brief Get or add an integer constant */ + int getConstant(const std::vector& v, bool allow_adding=false); + + /** \brief Use simplified signature */ + static bool simplifiedCall(const Function& f); + + /** \brief Generate a call to a function (generic signature) */ + std::string call(const Function& f, const std::string& arg, const std::string& res, + const std::string& iw, const std::string& w) const; + + /** \brief Generate a call to a function (simplified signature) */ + std::string call(const Function& f, const std::string& arg, const std::string& res) const; + + /** \brief Print a constant in a lossless but compact manner */ + static std::string constant(double v); + + /** \brief Codegen inner product */ + std::string inner_prod(int n, const std::string& x, const std::string& y); + + /** \brief Auxiliary functions */ + enum Auxiliary { + AUX_COPY_N, + AUX_SWAP, + AUX_SCAL, + AUX_AXPY, + AUX_INNER_PROD, + AUX_NRM2, + AUX_IAMAX, + AUX_FILL_N, + AUX_ASUM, + AUX_SQ, + AUX_SIGN, + AUX_MM_SPARSE, + AUX_PROJECT, + AUX_TRANS, + AUX_TO_MEX, + AUX_FROM_MEX + }; + + /** \brief Add a built-in auxiliary function */ + void addAuxiliary(Auxiliary f); + + /** Convert in integer to a string */ + static std::string to_string(int n); + + /** Get work vector name from index */ + std::string work(int n, int sz) const; + + /** Get work vector element from index */ + std::string workel(int n) const; + + /** \brief Print int vector to a c file */ + static void printVector(std::ostream &s, const std::string& name, const std::vector& v); + + /** \brief Print real vector to a c file */ + static void printVector(std::ostream &s, const std::string& name, const std::vector& v); + + /** \brief Create a copy_n operation */ + std::string copy_n(const std::string& arg, std::size_t n, const std::string& res); + + /** \brief Create a fill_n operation */ + std::string fill_n(const std::string& res, std::size_t n, const std::string& v); + + /** \brief Sparse assignment */ + std::string project(const std::string& arg, const Sparsity& sp_arg, + const std::string& res, const Sparsity& sp_res, + const std::string& w); + + /** \brief Create matrix in MATLAB's MEX format */ + std::string to_mex(const Sparsity& sp, const std::string& arg); + + /** \brief Get matrix from MATLAB's MEX format */ + std::string from_mex(std::string& arg, + const std::string& res, std::size_t res_off, const Sparsity& sp_res, + const std::string& w); + + /** \brief Assignment */ + static void assign(std::ostream &s, const std::string& lhs, const std::string& rhs); + + /** \brief Printf */ + std::string printf(const std::string& str, + const std::vector& arg=std::vector()); + std::string printf(const std::string& str, const std::string& arg1); + std::string printf(const std::string& str, const std::string& arg1, const std::string& arg2); + std::string printf(const std::string& str, const std::string& arg1, const std::string& arg2, + const std::string& arg3); + private: + + /// SQUARE + void auxSq(); + + /// SIGN + void auxSign(); + + // private: + public: + /// \cond INTERNAL + + // Real-type used for the codegen + std::string real_t; + + // Generate header file? + bool with_header; + + // Are we creating a MEX file? + bool mex; + + // Verbose codegen? + bool verbose; + + // Are we generating C++? + bool cpp; + + // Should we generate a main (allowing evaluation from command line) + bool main; + + /** \brief Codegen scalar + * Use the work vector for storing work vector elements of length 1 + * (typically scalar) instead of using local variables + */ + bool codegen_scalars; + + // Stringstreams holding the different parts of the file being generated + std::stringstream includes; + std::stringstream auxiliaries; + std::stringstream body; + std::stringstream header; + + // Names of exposed functions + std::vector exposed_fname; + + // Set of already included header files + typedef std::map PointerMap; + std::set added_includes_; + std::set added_externals_; + std::set added_auxiliaries_; + PointerMap added_sparsities_; + PointerMap added_dependencies_; + std::multimap added_double_constants_; + std::multimap added_integer_constants_; + + // Constants + std::vector > double_constants_; + std::vector > integer_constants_; + + // Hash a vector + static size_t hash(const std::vector& v); + static size_t hash(const std::vector& v); + + // Compare two vectors + template + static bool equal(const std::vector& v1, const std::vector& v2) { + if (v1.size()!=v2.size()) return false; + for (int j=0; j(); + const CompilerInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /// Query plugin name + std::string plugin_name() const; + +#ifndef SWIG + /// Get a function pointer for numerical evaluation + void* getFunction(const std::string& symname); +#endif // SWIG + }; + +} // namespace casadi + +#endif // CASADI_COMPILER_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/compiler_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/compiler_internal.hpp new file mode 100755 index 0000000..ae354d4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/compiler_internal.hpp @@ -0,0 +1,85 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_COMPILER_INTERNAL_HPP +#define CASADI_COMPILER_INTERNAL_HPP + +#include "compiler.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + + +/// \cond INTERNAL +namespace casadi { + +/** \brief NLP solver storage class + + @copydoc Compiler_doc + \author Joel Andersson + \date 2010-2013 +*/ + class CASADI_EXPORT + CompilerInternal : public OptionsFunctionalityNode, + public PluginInterface { + + public: + /// Constructor + CompilerInternal(const std::string& name); + + /// Destructor + virtual ~CompilerInternal() = 0; + + /** \brief Print */ + virtual void print(std::ostream &stream) const; + + // Creator function for internal class + typedef CompilerInternal* (*Creator)(const std::string& name); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "compiler";} + + /// Queery plugin name + virtual const char* plugin_name() const = 0; + + /// Get a function pointer for numerical evaluation + virtual void* getFunction(const std::string& symname) = 0; + + protected: + /// C filename + std::string name_; + }; + +} // namespace casadi +/// \endcond +#endif // CASADI_COMPILER_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/control_simulator.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/control_simulator.hpp new file mode 100755 index 0000000..00c9843 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/control_simulator.hpp @@ -0,0 +1,172 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CONTROLSIMULATOR_HPP +#define CASADI_CONTROLSIMULATOR_HPP + +#include "integrator.hpp" + +namespace casadi { +#ifndef SWIG + + /// Input arguments of an ODE/DAE function [controldaeIn] + enum ControlledDAEInput { + /// Global physical time. (1-by-1) [t] + CONTROL_DAE_T, + /// State vector (dimension nx-by-1). + /// Should have the same amount of + /// non-zeros as DAEOutput:DAE_RES [x] + CONTROL_DAE_X, + /// Algebraic state vector (dimension np-by-1). [z] + CONTROL_DAE_Z, + /// Parameter vector (dimension np-by-1). [p] + CONTROL_DAE_P, + /// Control vector (dimension nu-by-1). [u] + CONTROL_DAE_U, + /// Control vector, linearly interpolated (dimension nu-by-1). [u_interp] + CONTROL_DAE_U_INTERP, + /// State vector (dimension nx-by-1) at the last major time-step [x_major] + CONTROL_DAE_X_MAJOR, + /// Time at start of control interval (1-by-1) [t0] + CONTROL_DAE_T0, + /// Time at end of control interval (1-by-1) [tf] + CONTROL_DAE_TF, + /// Number of arguments. + CONTROL_DAE_NUM_IN + }; + + /// Input arguments of a control simulator [controlsimulatorIn] + enum ControlSimulatorInput { + /// Differential or algebraic state at t0 (dimension nx-by-1) [x0] + CONTROLSIMULATOR_X0, + /// Parameters that are fixed over the entire horizon (dimension np-by-1) [p] + CONTROLSIMULATOR_P, + /// Parameters that change over the integration intervals (dimension nu-by-(ns-1)) [u] + CONTROLSIMULATOR_U, + /// Number of input arguments of a piecewise simulator + CONTROLSIMULATOR_NUM_IN}; +#endif // SWIG + + // Forward declaration of internal class + class ControlSimulatorInternal; + + /** \brief Piecewise Simulation class + + A ControlSimulator can be seen as a chain of Simulators whereby some parameters change + from one Simulator to the next. + + These changing parameters can typically be interpreted as "controls" in the context + of dynamic optimization. + + We discriminate between the following time steps: + * Major time-steps. These are the time steps provided by the supplied grid. + Controls are constant inbetween major time-steps\n + * Minor time-steps. These are time steps linearly interpolated from one major time-step + to the next. The option 'nf' regulates how many minor time-steps are taken.\n + * Integration time-steps. Time steps that the supplied integrator might choose to + integrate the continuous dynamics. + They are not important what ControlSimulator is concerned.\n + + np Number of parameters + nu Number of controls + ns The number of major grid points, as supplied in the constructor + nf The number of minor grid points per major interval + + \author Joris Gillis + \date 2011 + */ + + class CASADI_EXPORT ControlSimulator : public Function { + public: + + /// Default constructor + ControlSimulator(); + + /** \brief Creates a piecewise simulator (new syntax, includes initialization) + * \param ffcn Continuous time dynamics, an casadi::Function with the following mapping: + * \copydoc scheme_ControlledDAEInput + * \copydoc scheme_DAEOutput + * + * + * \param output_fcn output function which maps ControlledDAEInput or DAEInput to n outputs. + * \copydoc scheme_DAEInput + * \copydoc scheme_ControlledDAEInput + * \param grid the major time grid + */ + ControlSimulator(const std::string& name, const Function& dae, const Function& output_fcn, + const Matrix& grid, const Dict& opts=Dict()); + + /// Output function equal to the state (new syntax, includes initialization) + ControlSimulator(const std::string& name, const Function& dae, + const Matrix& grid, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Creates a piecewise simulator, no initialization + * \param ffcn Continuous time dynamics, an casadi::Function with the following mapping: + * \copydoc scheme_ControlledDAEInput + * \copydoc scheme_DAEOutput + * + * + * \param output_fcn output function which maps ControlledDAEInput or DAEInput to n outputs. + * \copydoc scheme_DAEInput + * \copydoc scheme_ControlledDAEInput + * \param grid the major time grid + */ + ControlSimulator(const Function& dae, const Function& output_fcn, + const Matrix& grid); + + /// [DEPRECATED] Output function equal to the state, no initialization + ControlSimulator(const Function& dae, const Matrix& grid); +#endif // WITH_DEPRECATED_FEATURES + + /// Access functions of the node. + ControlSimulatorInternal* operator->(); + + /// Const access functions of the node. + const ControlSimulatorInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /** Get the (minor) time grid + * The length is (ns-1)*nf + 1 + */ + std::vector getMinorT() const; + + /** \brief Get the controls, sampled on the minor timescale. + * Number of rows is (ns-1)*nf + */ + Matrix getMinorU() const; + + + /** \brief Get the index i such that gridminor[i] == gridmajor + */ + std::vector< int > getMajorIndex() const; + + }; + +} // namespace casadi + +#endif // CASADI_CONTROLSIMULATOR_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/control_simulator_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/control_simulator_internal.hpp new file mode 100755 index 0000000..19b0039 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/control_simulator_internal.hpp @@ -0,0 +1,115 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CONTROLSIMULATOR_INTERNAL_HPP +#define CASADI_CONTROLSIMULATOR_INTERNAL_HPP + +#include "control_simulator.hpp" +#include "simulator.hpp" +#include "function_internal.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** \brief ControlSimulator data storage class + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT ControlSimulatorInternal : public FunctionInternal { + public: + + /** \brief Constructor */ + ControlSimulatorInternal(const Function& dae, const Function& output_fcn, + const DMatrix& gridc); + + /** \brief Destructor */ + virtual ~ControlSimulatorInternal(); + + /** \brief Clone */ + virtual ControlSimulatorInternal* clone() const { + return new ControlSimulatorInternal(deepcopy(dae_), deepcopy(output_fcn_), gridc_);} + + /** \brief initialize */ + virtual void init(); + + /** \brief Integrate */ + virtual void evaluate(); + + /// Get the parameters that change on a coarse time scale, sampled on the fine timescale + Matrix getVFine() const; + + /** \brief Get the index i such that gridfine[i] == gridcoarse + */ + std::vector< int > getCoarseIndex() const; + + + Integrator integrator_; + Function dae_; + Function control_dae_; + Simulator simulator_; + + // original output function + Function orig_output_fcn_; + + // adapted output function + Function output_fcn_; + + /** \brief The hart of this class, a casadi of simulator calls */ + Function all_output_; + + /** grid */ + std::vector grid_; + + /** Coarse grid */ + std::vector gridc_; + + /** The local non-dimensional time grid */ + std::vector gridlocal_; + + /** \brief Number of states */ + int ny_; + + /** \brief Number of static parameters */ + int np_; + + /** \brief Number of controls */ + int nu_; + + /** \brief Number of interpolated controls */ + int nu_interp_; + + /** \brief Number of coarse time steps */ + int ns_; + + /** \brief Number of fine-grained time steps */ + int nf_; + + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_CONTROLSIMULATOR_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/custom_function.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/custom_function.hpp new file mode 100755 index 0000000..d660879 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/custom_function.hpp @@ -0,0 +1,112 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CUSTOM_FUNCTION_HPP +#define CASADI_CUSTOM_FUNCTION_HPP + +#include "function.hpp" +#include + +namespace casadi { + +/** \brief Forward declaration of internal class */ +class CustomFunctionInternal; + +// Forward declaration +class CustomFunction; + +/** \brief Interface to a custom function + + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT CustomFunction : public Function { + +public: + +/** \brief default constructor */ + CustomFunction(); + + ///@{ + /** \brief Constructor (new syntax, includes initialization) */ + CustomFunction(const std::string& name, const CustomEvaluate &c_fcn, + const std::vector& inputscheme, + const std::vector& outputscheme, + const Dict& opts=Dict()); + + CustomFunction(const std::string& name, const CustomEvaluate &c_fcn, + const std::pair< SparsityDict, std::vector >& inputscheme, + const std::vector& outputscheme, + const Dict& opts=Dict()); + + CustomFunction(const std::string& name, const CustomEvaluate &c_fcn, + const std::vector& inputscheme, + const std::pair< SparsityDict, std::vector >& outputscheme, + const Dict& opts=Dict()); + + CustomFunction(const std::string& name, const CustomEvaluate &c_fcn, + const std::pair< SparsityDict, std::vector >& inputscheme, + const std::pair< SparsityDict, std::vector >& outputscheme, + const Dict& opts=Dict()); + ///@} + +#ifdef WITH_DEPRECATED_FEATURES + ///@{ + /** \brief [DEPRECATED] Constructor */ + CustomFunction(const CustomEvaluate &c_fcn, + const std::vector& inputscheme, + const std::vector& outputscheme); + + CustomFunction(const CustomEvaluate &c_fcn, + const std::pair< SparsityDict, std::vector >& inputscheme, + const std::vector& outputscheme); + + CustomFunction(const CustomEvaluate &c_fcn, + const std::vector& inputscheme, + const std::pair< SparsityDict, std::vector >& outputscheme); + + CustomFunction(const CustomEvaluate &c_fcn, + const std::pair< SparsityDict, std::vector >& inputscheme, + const std::pair< SparsityDict, std::vector >& outputscheme); + ///@} +#endif // WITH_DEPRECATED_FEATURES + + /** \brief Access functions of the node */ + CustomFunctionInternal* operator->(); + + /** \brief Const access functions of the node */ + const CustomFunctionInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + +}; // class CustomFunction + + + +} // namespace casadi + + +#endif // CASADI_CUSTOM_FUNCTION_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/custom_function_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/custom_function_internal.hpp new file mode 100755 index 0000000..7e2143f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/custom_function_internal.hpp @@ -0,0 +1,76 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CUSTOM_FUNCTION_INTERNAL_HPP +#define CASADI_CUSTOM_FUNCTION_INTERNAL_HPP + +#include "custom_function.hpp" +#include "function_internal.hpp" +#include "../functor.hpp" +#include + +/// \cond INTERNAL + +namespace casadi { + + /** \brief Internal class for CustomFunction + \author Joel Andersson + \date 2010 + A regular user should never work with any Node class. Use CustomFunction directly. + */ +class CASADI_EXPORT CustomFunctionInternal : public FunctionInternal { + friend class CustomFunction; + public: + + /** \brief Create a function */ + explicit CustomFunctionInternal(const CustomEvaluate &c_fcn, + const std::vector &inputscheme, + const std::vector &outputscheme); + + /** \brief Destructor */ + virtual ~CustomFunctionInternal(); + + /** \brief Cloning */ + virtual CustomFunctionInternal* clone() const { return new CustomFunctionInternal(*this);} + + /** \brief Evaluate */ + virtual void evaluate(); + + /** \brief Initialize */ + virtual void init(); + + CustomEvaluate evaluate_; + + /// A reference to this object to be passed to the user functions + CustomFunction ref_; + +}; // class CustomFunctionInternal + + + +} // namespace casadi +/// \endcond + +#endif // CASADI_CUSTOM_FUNCTION_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dense_io.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dense_io.hpp new file mode 100755 index 0000000..1f6569e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dense_io.hpp @@ -0,0 +1,159 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_DENSE_IO_HPP +#define CASADI_DENSE_IO_HPP + +#include "../function/function_internal.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** \brief A helper class for Functions that work on dense Inputs/Outputs + * + * + * \author Joris Gillis + * \date 2014 + */ + template< class Derived> + class DenseIO { + public: + /// Initialize + void init(); + /// Read the sparse inputs into the dense inputs + void readInputs(); + /// Write the dense outputs to the sparse outputs + void writeOutputs(); + + DMatrix & inputD(int i); + DMatrix & outputD(int i); + const DMatrix & inputD(int i) const; + const DMatrix & outputD(int i) const; + protected: + /// The dense io interface + std::vector dense_inputs_; + /// The dense io interface + std::vector dense_outputs_; + }; + +#ifndef SWIG +template< class Derived> +void DenseIO::init() { + + Derived* d = static_cast(this); + + dense_inputs_.resize(d->nIn()); + dense_outputs_.resize(d->nOut()); + + for (int i=0;i< d->nIn();++i) { + if (!d->input(i).isdense()) { + dense_inputs_[i] = densify(d->input(i)); + } + } + for (int i=0;i< d->nOut();++i) { + if (!d->output(i).isdense()) { + dense_outputs_[i] = densify(d->output(i)); + } + } + +} + +template< class Derived> +DMatrix & DenseIO::inputD(int i) { + Derived* d = static_cast(this); + + if (d->input(i).isdense()) { + return d->input(i); + } else { + return dense_inputs_[i]; + } +} + +template< class Derived> +const DMatrix & DenseIO::inputD(int i) const { + Derived* d = static_cast(this); + + if (d->input(i).isdense()) { + return d->input(i); + } else { + return dense_inputs_[i]; + } +} + +template< class Derived> +DMatrix & DenseIO::outputD(int i) { + Derived* d = static_cast(this); + + if (d->output(i).isdense()) { + return d->output(i); + } else { + return dense_outputs_[i]; + } +} + +template< class Derived> +const DMatrix & DenseIO::outputD(int i) const { + Derived* d = static_cast(this); + + if (d->output(i).isdense()) { + return d->output(i); + } else { + return dense_outputs_[i]; + } +} + +template< class Derived> +void DenseIO::readInputs() { + + Derived* d = static_cast(this); + + for (int i=0;i< d->nIn();++i) { + if (!d->input(i).isdense()) { + inputD(i).set(d->input(i)); + } + } + +} + +template< class Derived> +void DenseIO::writeOutputs() { + + Derived* d = static_cast(this); + + for (int i=0;i< d->nOut();++i) { + if (!d->output(i).isdense()) { + d->setOutput(outputD(i), i); + } + } + +} + +#endif +} // namespace casadi + +/// \endcond + +#endif // CASADI_DENSE_IO_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dle_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dle_internal.hpp new file mode 100755 index 0000000..b409d40 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dle_internal.hpp @@ -0,0 +1,130 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_DLE_INTERNAL_HPP +#define CASADI_DLE_INTERNAL_HPP + +#include "dle_solver.hpp" +#include "dle_internal.hpp" +#include "lr_dle_internal.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /// Structure specification of a DLE + enum DleStruct { + /// The matrix A + Dle_STRUCT_A, + /// The matrix V + Dle_STRUCT_V, + Dle_STRUCT_NUM}; + + /** \brief Internal storage for DleSolver related data + + @copydoc DLE_doc + \author Joris Gillis + \date 2014 + */ + class CASADI_EXPORT + DleInternal : public FunctionInternal, + public PluginInterface { + public: + /** \brief Constructor + * \param st \structargument{Dle} + */ + explicit DleInternal(const std::map& st, + int nrhs=1, bool transp=false); + + /** \brief Destructor */ + virtual ~DleInternal()=0; + + /** \brief Clone */ + virtual DleInternal* clone() const=0; + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief Create a new solver */ + virtual DleInternal* create(const std::map& st) const = 0; + + /** \brief Print solver statistics */ + virtual void printStats(std::ostream &stream) const {} + + /** \brief evaluate */ + virtual void evaluate()=0; + + /** \brief Initialize */ + virtual void init(); + + /// Problem structure + std::vector st_; + + /// Sparsity of A + Sparsity A_; + + /// List of sparsities of V_i + Sparsity V_; + + /// Assume positive definiteness of P_i + bool pos_def_; + + /// Throw an error when system is unstable + bool error_unstable_; + + /// Margin for instability detection + double eps_unstable_; + + /// Number of right hand sides + int nrhs_; + + /// Tranpose the system? + bool transp_; + + // Creator function for internal class + typedef DleInternal* (*Creator)(const std::map& st); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "dle";} + + /// Get the resulting sparsity + static Sparsity getSparsity(const std::map& st); + + }; + +} // namespace casadi +/// \endcond +#endif // CASADI_DLE_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dle_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dle_solver.hpp new file mode 100755 index 0000000..3c8fce3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dle_solver.hpp @@ -0,0 +1,133 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_DLE_SOLVER_HPP +#define CASADI_DLE_SOLVER_HPP + +#include "function.hpp" + +/** \defgroup DLE_doc Discrete periodic Lyapunov Equation solver + + + Given matrices \f$A\f$ and symmetric \f$V\f$ + + \verbatim + A in R^(n x n) + V in S^n + \endverbatim + + finds \f$P\f$ that satisfies: + + \verbatim + P = A P A' + V + \endverbatim + + +*/ +namespace casadi { +#ifndef SWIG + + /// Input arguments of a \e dle solver [dleIn] + enum DLEInput { + /// A matrix [a] + DLE_A, + /// V matrix [v] + DLE_V, + DLE_NUM_IN + }; + + /// Output arguments of a \e dle solver [dleOut] + enum DLEOutput { + /// P matrix [p] + DLE_P, + DLE_NUM_OUT + }; +#endif // SWIG + + /// Forward declaration of internal class + class DleInternal; + + /** \brief Base class for Discrete Lyapunov Equation Solvers + + @copydoc DLE_doc + + \generalsection{DleSolver} + \pluginssection{DleSolver} + + \author Joris Gillis + \date 2014 + + */ + class CASADI_EXPORT DleSolver : public Function { + public: + /// Default constructor + DleSolver(); + + /// Clone + DleSolver clone() const; + + /** \brief Constructor (new syntax, includes initialization) + * \param solver \pluginargument{DleSolver} + * \param st \structargument{Dle} + */ + DleSolver(const std::string& name, const std::string& solver, + const std::map& st, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor (no initialization) + * \param solver \pluginargument{DleSolver} + * \param st \structargument{Dle} + */ + DleSolver(const std::string& solver, const std::map& st); +#endif // WITH_DEPRECATED_FEATURES + + /// Print solver statistics + void printStats(std::ostream &stream=casadi::userOut()) const; + + /// Access functions of the node + DleInternal* operator->(); + + /// Access functions of the node + const DleInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /// Get the resulting sparsity + static Sparsity getSparsity(const std::map& st); + }; + +} // namespace casadi + +#endif // CASADI_DLE_SOLVER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dple_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dple_internal.hpp new file mode 100755 index 0000000..944b730 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dple_internal.hpp @@ -0,0 +1,148 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_DPLE_INTERNAL_HPP +#define CASADI_DPLE_INTERNAL_HPP + +#include "dple_solver.hpp" +#include "dple_internal.hpp" +#include "lr_dple_internal.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /// Structure specification of a DPLE + enum DpleVecStruct { + /// Sparsities for A_i, block diagonal form + Dple_STRUCT_A, + /// Sparsities for V_i, block diagonal form + Dple_STRUCT_V, + Dple_STRUCT_NUM}; + + /** \brief Internal storage for DpleSolver related data + + @copydoc DPLE_doc + \author Joris Gillis + \date 2014 + */ + class CASADI_EXPORT + DpleInternal : public FunctionInternal, + public PluginInterface { + public: + /** \brief Constructor + * \param st \structargument{Dple} + */ + DpleInternal(const std::map > &st, + int nrhs=1, bool transp=false); + + /** \brief Destructor */ + virtual ~DpleInternal()=0; + + /** \brief Clone */ + virtual DpleInternal* clone() const=0; + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief Create a new solver */ + virtual DpleInternal* create(const std::map > & st) const = 0; + + /** \brief Print solver statistics */ + virtual void printStats(std::ostream &stream) const {} + + /** \brief evaluate */ + virtual void evaluate()=0; + + /** \brief Initialize */ + virtual void init(); + + /// Structure of Dple + std::vector > st_; + + /// List of sparsities of A_i + std::vector< Sparsity > A_; + + /// List of sparsities of V_i + std::vector< Sparsity > V_; + + /// Period + int K_; + + /// Constant dimensions + bool const_dim_; + + /// Assume positive definiteness of P_i + bool pos_def_; + + /// Throw an error when system is unstable + bool error_unstable_; + + /// Margin for instability detection + double eps_unstable_; + + /// Number of right hand sides + int nrhs_; + + /// Tranpose the system? + bool transp_; + + // Creator function for internal class + typedef DpleInternal* (*Creator)(const std::map > & st); + + /// Collection of solvers + static std::map solvers_; + + // Static functions exposed + struct Exposed { + void (*periodic_shur)(const std::vector< Matrix > & A, + std::vector< Matrix > & T, + std::vector< Matrix > & Z, + std::vector &eig_real, + std::vector &eig_imag, + double num_zero); + + // Constructor + Exposed() { periodic_shur = 0; } + }; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "dple";} + + /// Get the resulting sparsity + static std::vector + getSparsity(const std::map >& st); + }; + +} // namespace casadi +/// \endcond +#endif // CASADI_DPLE_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dple_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dple_solver.hpp new file mode 100755 index 0000000..69d4ba4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/dple_solver.hpp @@ -0,0 +1,158 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_DPLE_SOLVER_HPP +#define CASADI_DPLE_SOLVER_HPP + +#include "function.hpp" + +/** \defgroup DPLE_doc Discrete periodic Lyapunov Equation solver + + + Given matrices \f$A_k\f$ and symmetric \f$V_k, k = 0..K-1\f$ + + \verbatim + A_k in R^(n x n) + V_k in R^n + \endverbatim + + provides all of \f$P_k\f$ that satisfy: + + \verbatim + P_0 = A_(K-1)*P_(K-1)*A_(K-1)' + V_k + P_k+1 = A_k*P_k*A_k' + V_k for k = 1..K-1 + \endverbatim + + +*/ +namespace casadi { +#ifndef SWIG + + /// Input arguments of a \e dple solver [dpleIn] + enum DPLEInput { + /// A matrices (horzcat when const_dim, diagcat otherwise) [a] + DPLE_A, + /// V matrices (horzcat when const_dim, diagcat otherwise) [v] + DPLE_V, + DPLE_NUM_IN + }; + + /// Output arguments of a \e dple solver [dpleOut] + enum DPLEOutput { + /// Lyapunov matrix (horzcat when const_dim, diagcat otherwise) (Cholesky of P if pos_def) [p] + DPLE_P, + /// Number of arguments. + DPLE_NUM_OUT + }; +#endif // SWIG + + /// Forward declaration of internal class + class DpleInternal; + + /** \brief Base class for Discrete Periodic Lyapunov Equation Solvers + + @copydoc DPLE_doc + + \generalsection{DpleSolver} + \pluginssection{DpleSolver} + + \author Joris Gillis + \date 2014 + + */ + class CASADI_EXPORT DpleSolver : public Function { + public: + /// Default constructor + DpleSolver(); + + /// Clone + DpleSolver clone() const; + + /** \brief Constructor (new syntax, includes initialization) + * \param solver \pluginargument{DpleSolver} + * \param st \structargument{Dple} + */ + DpleSolver(const std::string& name, const std::string& solver, + const std::map >& st, + const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor (no initialization) + * \param solver \pluginargument{DpleSolver} + * \param st \structargument{Dple} + */ + DpleSolver(const std::string& solver, + const std::map >& st); +#endif // WITH_DEPRECATED_FEATURES + + /// Print solver statistics + void printStats(std::ostream &stream=casadi::userOut()) const; + + /// Access functions of the node + DpleInternal* operator->(); + + /// Access functions of the node + const DpleInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /** \brief Obtain Periodic Schur Form of a set of matrices + * + * Finds Z_i such that + \verbatim + Z_1' * A_1 * Z_2 = T_1, + Z_2' * A_2 * Z_3 = T_2, + ... + Z_K' * A_K * Z_1 = T_K, + \endverbatim + * + * with T_1 in Hessenberg form (upper triangular + one band below + * the diagonal) and T_2..T_K upper diagonal + * + * with Z_k Z_k' = eye(n) = Z_k' Z_k + * + */ + static void periodic_schur(const std::string& name, + const std::vector< Matrix > & A, + std::vector< Matrix > & SWIG_OUTPUT(T), + std::vector< Matrix > & SWIG_OUTPUT(Z), + std::vector &SWIG_OUTPUT(eig_real), + std::vector &SWIG_OUTPUT(eig_imag), + double num_zero=0); + }; + +} // namespace casadi + +#endif // CASADI_DPLE_SOLVER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/external_function.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/external_function.hpp new file mode 100755 index 0000000..6faf9b3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/external_function.hpp @@ -0,0 +1,77 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_EXTERNAL_FUNCTION_HPP +#define CASADI_EXTERNAL_FUNCTION_HPP + +#include "function.hpp" +#include "compiler.hpp" + +namespace casadi { +/** \brief Forward declaration of internal class */ +class ExternalFunctionInternal; + + /** \brief Interface for a function that is not implemented by CasADi symbolics + \author Joel Andersson + \date 2011-2015 + */ + class CASADI_EXPORT ExternalFunction : public Function { + public: + + /** \brief CONSTRUCTORS: */ + /** \brief default constructor */ + ExternalFunction(); + + /** \brief Load an external function + * File name is assumed to be ./.so + */ + explicit ExternalFunction(const std::string& name, const Dict& opts=Dict()); + + /** \brief Load an external function + * File name given + */ + ExternalFunction(const std::string& name, const std::string& bin_name, + const Dict& opts=Dict()); + + /** \brief Load a just-in-time compiled external function + * File name given + */ + ExternalFunction(const std::string& name, const Compiler& compiler, + const Dict& opts=Dict()); + + /** \brief Access functions of the node */ + ExternalFunctionInternal* operator->(); + + /** \brief Const access functions of the node */ + const ExternalFunctionInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; + +} // namespace casadi + + +#endif // CASADI_EXTERNAL_FUNCTION_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/external_function_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/external_function_internal.hpp new file mode 100755 index 0000000..784cf5d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/external_function_internal.hpp @@ -0,0 +1,235 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_EXTERNAL_FUNCTION_INTERNAL_HPP +#define CASADI_EXTERNAL_FUNCTION_INTERNAL_HPP + +#include "external_function.hpp" +#include "function_internal.hpp" + +#ifdef WITH_DL +#ifdef _WIN32 // also for 64-bit +#define NOMINMAX +#include +#else // _WIN32 +#include +#endif // _WIN32 +#endif // WITH_DL + +/// \cond INTERNAL + +namespace casadi { + + /** \brief Structure with information about the library */ + template + class LibInfo {}; + + /** \brief Library given as a dynamically linked library */ + template<> + class LibInfo { + private: +#if defined(WITH_DL) && defined(_WIN32) // also for 64-bit + typedef HINSTANCE handle_t; +#else + typedef void* handle_t; +#endif + + std::string bin_name_; + std::string name_; + handle_t handle_; + + public: + int n_in, n_out, sz_arg, sz_res; + + // Default constructor + LibInfo() : handle_(0) {} + + // Constructor + explicit LibInfo(const std::string& bin_name, const std::string& name); + + // Clear memory + void clear(); + + // Automatic type conversion + operator const std::string&() const { return bin_name_;} + + // Function name + const std::string& name() const { return name_;} + + // Get function pointer + template + void get(FcnPtr& fcnPtr, const std::string& sym); + }; + + /** \brief Library that has been just-in-time compiled */ + template<> + class LibInfo { + private: + Compiler compiler_; + std::string name_; + + public: + int n_in, n_out, sz_arg, sz_res; + + // Default constructor + LibInfo() {} + + // Constructor + explicit LibInfo(const Compiler& compiler, const std::string& name); + + // Clear memory + void clear() {} + + // Automatic type conversion + operator const Compiler&() const { return compiler_;} + + // Function name + const std::string& name() const { return name_;} + + // Get function pointer + template + void get(FcnPtr& fcnPtr, const std::string& sym); + }; + + class CASADI_EXPORT ExternalFunctionInternal : public FunctionInternal { + public: + /** \brief Creator function, dynamically linked library */ + static ExternalFunctionInternal* + create(const std::string& bin_name, const std::string& name); + + /** \brief Creator function, just-in-time compiled library */ + static ExternalFunctionInternal* + create(const Compiler& compiler, const std::string& name); + + /** \brief clone function */ + virtual ExternalFunctionInternal* clone() const; + + /** \brief Destructor */ + virtual ~ExternalFunctionInternal() = 0; + + private: + /** \brief Creator function, use this for creating instances of the class */ + template + static ExternalFunctionInternal* + createGeneric(const LibType& bin_name, const std::string& name); + }; + + template + class CASADI_EXPORT CommonExternal : public ExternalFunctionInternal { + protected: + + /** \brief Information about the library */ + LibInfo li_; + + /** \brief constructor is protected */ + CommonExternal(const LibInfo& li); + public: + /** \brief Destructor */ + virtual ~CommonExternal() = 0; + + ///@{ + /** \brief Forward mode derivatives */ + virtual Function getDerForward(const std::string& name, int nfwd, Dict& opts); + virtual int numDerForward() const; + ///@} + + ///@{ + /** \brief Reverse mode derivatives */ + virtual Function getDerReverse(const std::string& name, int nadj, Dict& opts); + virtual int numDerReverse() const; + ///@} + + ///@{ + /** \brief Full Jacobian */ + virtual bool hasFullJacobian() const; + virtual Function getFullJacobian(const std::string& name, const Dict& opts); + ///@} + }; + + template + class CASADI_EXPORT SimplifiedExternal : public CommonExternal { + friend class ExternalFunctionInternal; + private: + /** \brief Constructor is called from factory */ + SimplifiedExternal(const LibInfo& li); + public: + using CommonExternal::li_; + + /** \brief Destructor */ + virtual ~SimplifiedExternal() {} + + /** \brief Evaluate numerically, work vectors given */ + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /** \brief Add a dependent function */ + virtual void addDependency(CodeGenerator& g) const; + + /** \brief Generate a call to a function (simplified signature) */ + virtual std::string generateCall(const CodeGenerator& g, + const std::string& arg, const std::string& res) const; + + /** \brief Use simplified signature */ + virtual bool simplifiedCall() const { return true;} + protected: + /** \brief Function pointers */ + simplifiedPtr eval_; + }; + + template + class CASADI_EXPORT GenericExternal : public CommonExternal { + friend class ExternalFunctionInternal; + private: + /** \brief Constructor is called from factory */ + GenericExternal(const LibInfo& li); + public: + using CommonExternal::li_; + + /** \brief Destructor */ + virtual ~GenericExternal() {} + + /** \brief Evaluate numerically, work vectors given */ + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /** \brief Add a dependent function */ + virtual void addDependency(CodeGenerator& g) const; + + /** \brief Generate a call to a function (generic signature) */ + virtual std::string generateCall(const CodeGenerator& g, + const std::string& arg, const std::string& res, + const std::string& iw, const std::string& w) const; + + /** \brief All inputs and outputs are scalar (default if sparsity not defined) */ + static int scalarSparsity(int i, int *n_row, int *n_col, + const int **colind, const int **row); + + /** \brief Function pointers */ + evalPtr eval_; + }; + + +} // namespace casadi +/// \endcond + +#endif // CASADI_EXTERNAL_FUNCTION_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/function.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/function.hpp new file mode 100755 index 0000000..a349d58 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/function.hpp @@ -0,0 +1,787 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef CASADI_FUNCTION_HPP +#define CASADI_FUNCTION_HPP + +#include "io_interface.hpp" + +namespace casadi { + + /** Forward declaration of internal class */ + class FunctionInternal; + + /** \brief General function + + A general function \f$f\f$ in casadi can be multi-input, multi-output.\n + Number of inputs: \a nin nIn()\n + Number of outputs: \a nout nOut()\n + + We can view this function as a being composed of a (\a nin, \a nout) grid of single-input, + single-output primitive functions.\n + Each such primitive function \f$f_ {i, j} \forall i \in [0, nin-1], j \in [0, nout-1]\f$ can + map as \f$\mathbf {R}^{n, m}\to\mathbf{R}^{p, q}\f$, + in which n, m, p, q can take different values for every (i, j) pair.\n + + When passing input, you specify which partition \f$i\f$ is active. + You pass the numbers vectorized, as a vector of size \f$(n*m)\f$.\n + When requesting output, you specify which partition \f$j\f$ is active. + You get the numbers vectorized, as a vector of size \f$(p*q)\f$.\n + + To calculate Jacobians, you need to have \f$(m=1, q=1)\f$. + + Write the Jacobian as \f$J_ {i, j} = \nabla f_{i, j} = + \frac {\partial f_{i, j}(\vec{x})}{\partial \vec{x}}\f$. + + We have the following relationships for function mapping from a row vector to a row vector: + + \f$ \vec {s}_f = \nabla f_{i, j} . \vec{v}\f$ \n + \f$ \vec {s}_a = (\nabla f_{i, j})^T . \vec{w}\f$ + + Some quantities in these formulas must be transposed: \n + input col: transpose \f$ \vec {v} \f$ and \f$\vec{s}_a\f$ \n + output col: transpose \f$ \vec {w} \f$ and \f$\vec{s}_f\f$ \n + + NOTE: Functions are allowed to modify their input arguments when evaluating: + implicitFunction, IDAS solver + Further releases may disallow this. + + \internal + \section Notes for developers + + Each function consists of 4 files:\n + 1. public class header file: imported in python\n + 2. public class implementation\n + 3. internal class header file: should only be used by derived classes\n + 4. internal class implementation\n + + python and c++ should be 1-to-1\n + There should be no extra features in 1.\n + All the functionality should exist in 1.\n + If it means that c++ will be more "pythonic", so be it. + \endinternal + + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT Function : public OptionsFunctionality, public IOInterface{ + public: + + /// \cond CLUTTER + /** \brief default constructor */ + Function(); + + /** \brief Destructor */ + ~Function(); + /// \endcond + + /// \cond INTERNAL +#ifndef SWIG + /** \brief Create from node */ + static Function create(FunctionInternal* node); +#endif // SWIG + /// \endcond + + /** \brief Find the index for a string describing a particular entry of an input scheme + * + * example: schemeEntry("x_opt") -> returns NLP_SOLVER_X if FunctionInternal adheres to + * SCHEME_NLPINput + */ + int inputIndex(const std::string &name) const; + + /** \brief Find the index for a string describing a particular entry of an output scheme + * + * example: schemeEntry("x_opt") -> returns NLP_SOLVER_X if FunctionInternal adheres to + * SCHEME_NLPINput + */ + int outputIndex(const std::string &name) const; + + /** \brief Get input scheme name by index */ + std::string inputName(int ind) const; + + /** \brief Get output scheme name by index */ + std::string outputName(int ind) const; + + /** \brief Get input scheme description by index */ + std::string inputDescription(int ind) const; + + /** \brief Get output scheme description by index */ + std::string outputDescription(int ind) const; + + /** \brief Get default input value */ + double defaultInput(int ind) const; + + /** \brief Get sparsity of a given input */ + /// @{ + Sparsity inputSparsity(int ind=0) const; + Sparsity inputSparsity(const std::string& iname) const; + /// @} + + /** \brief Get sparsity of a given output */ + /// @{ + Sparsity outputSparsity(int ind=0) const; + Sparsity outputSparsity(const std::string& iname) const; + /// @} + +#ifndef SWIG + /// \cond UNSAFE + /** \brief [UNSAFE] Obtain reference to inputs + * \sa getInput, setInput + */ + ///@{ + /// Access input argument + const Matrix& input(int i=0) const; + const Matrix& input(const std::string &iname) const; + Matrix& input(int i=0); + Matrix& input(const std::string &iname); + ///@} + + /** \brief [UNSAFE] Obtain reference to outputs + * \sa getOutput, getOutput + */ + ///@{ + /// Access output argument + const Matrix& output(int i=0) const; + const Matrix& output(const std::string &oname) const; + Matrix& output(int i=0); + Matrix& output(const std::string &oname); + ///@} + /// \endcond +#endif + + /** \brief Get the number of function inputs */ + int nIn() const; + + /** \brief Get the number of function outputs */ + int nOut() const; + + /** \brief Get total number of nonzeros in all of the matrix-valued inputs */ + int nnzIn() const; + + /** \brief Get total number of nonzeros in all of the matrix-valued outputs */ + int nnzOut() const; + + /** \brief Get total number of elements in all of the matrix-valued inputs */ + int numelIn() const; + + /** \brief Get total number of elements in all of the matrix-valued outputs */ + int numelOut() const; + + /** \brief Get input scheme */ + std::vector inputScheme() const; + + /** \brief Get output scheme */ + std::vector outputScheme() const; + + /** \brief Evaluate */ + void evaluate(); + + /** \brief Print dimensions of inputs and outputs */ + void printDimensions(std::ostream &stream=casadi::userOut()) const; + + ///@{ + /** \brief Generate a Jacobian function of output \a oind with respect to input \a iind + * \param iind The index of the input + * \param oind The index of the output + * + * The default behavior of this class is defined by the derived class. + * If compact is set to true, only the nonzeros of the input and output expressions are + * considered. + * If symmetric is set to true, the Jacobian being calculated is known to be symmetric + * (usually a Hessian), + * which can be exploited by the algorithm. + * + * The generated Jacobian has one more output than the calling function corresponding + * to the Jacobian and the same number of inputs. + * + */ + Function jacobian(int iind=0, int oind=0, bool compact=false, bool symmetric=false); + Function jacobian(const std::string& iind, int oind=0, bool compact=false, + bool symmetric=false) { + return jacobian(inputIndex(iind), oind, compact, symmetric); + } + Function jacobian(int iind, const std::string& oind, bool compact=false, bool symmetric=false) { + return jacobian(iind, outputIndex(oind), compact, symmetric); + } + Function jacobian(const std::string& iind, const std::string& oind, bool compact=false, + bool symmetric=false) { + return jacobian(inputIndex(iind), outputIndex(oind), compact, symmetric); + } + ///@} + + /** Set the Jacobian function of output \a oind with respect to input \a iind + NOTE: Does _not_ take ownership, only weak references to the Jacobians are kept internally */ + void setJacobian(const Function& jac, int iind=0, int oind=0, bool compact=false); + + ///@{ + /** \brief Generate a gradient function of output \a oind with respect to input \a iind + * \param iind The index of the input + * \param oind The index of the output + * + * The default behavior of this class is defined by the derived class. + * Note that the output must be scalar. In other cases, use the Jacobian instead. + * + */ + Function gradient(int iind=0, int oind=0); + Function gradient(const std::string& iind, int oind=0) { + return gradient(inputIndex(iind), oind); + } + Function gradient(int iind, const std::string& oind) { + return gradient(iind, outputIndex(oind)); + } + Function gradient(const std::string& iind, const std::string& oind) { + return gradient(inputIndex(iind), outputIndex(oind)); + } + ///@} + + ///@{ + /** \brief Generate a tangent function of output \a oind with respect to input \a iind + * \param iind The index of the input + * \param oind The index of the output + * + * The default behavior of this class is defined by the derived class. + * Note that the input must be scalar. In other cases, use the Jacobian instead. + * + */ + Function tangent(int iind=0, int oind=0); + Function tangent(const std::string& iind, int oind=0) + { return tangent(inputIndex(iind), oind); } + Function tangent(int iind, const std::string& oind) + { return tangent(iind, outputIndex(oind)); } + Function tangent(const std::string& iind, const std::string& oind) + { return tangent(inputIndex(iind), outputIndex(oind)); } + ///@} + + ///@{ + /** \brief Generate a Hessian function of output \a oind with respect to input \a iind + * \param iind The index of the input + * \param oind The index of the output + * + * The generated Hessian has two more outputs than the calling function corresponding + * to the Hessian and the gradients. + * + */ + Function hessian(int iind=0, int oind=0); + Function hessian(const std::string& iind, int oind=0) + { return hessian(inputIndex(iind), oind); } + Function hessian(int iind, const std::string& oind) + { return hessian(iind, outputIndex(oind)); } + Function hessian(const std::string& iind, const std::string& oind) + { return hessian(inputIndex(iind), outputIndex(oind)); } + ///@} + + /** \brief Generate a Jacobian function of all the inputs elements with respect to all + * the output elements). + */ + Function fullJacobian(); + + /** Set the Jacobian of all the input nonzeros with respect to all output nonzeros + NOTE: Does _not_ take ownership, only weak references to the Jacobian are kept internally */ + void setFullJacobian(const Function& jac); + + ///@{ + /** \brief Evaluate the function symbolically or numerically */ + void call(const std::vector &arg, std::vector& SWIG_OUTPUT(res), + bool always_inline=false, bool never_inline=false); + void call(const std::vector &arg, std::vector& SWIG_OUTPUT(res), + bool always_inline=false, bool never_inline=false); + void call(const std::vector &arg, std::vector& SWIG_OUTPUT(res), + bool always_inline=false, bool never_inline=false); + ///@} + + ///@{ + /// Functor shorthand for evaluation + std::vector operator()(const std::vector& arg, + bool always_inline=false, bool never_inline=false); + std::vector operator()(const std::vector& arg, + bool always_inline=false, bool never_inline=false); + std::vector operator()(const std::vector& arg, + bool always_inline=false, bool never_inline=false); + const DMatrixDict operator()(const DMatrixDict& arg, + bool always_inline=false, bool never_inline=false); + const SXDict operator()(const SXDict& arg, + bool always_inline=false, bool never_inline=false); + const MXDict operator()(const MXDict& arg, + bool always_inline=false, bool never_inline=false); + ///@} + +#ifndef SWIG + ///@{ + /// Functor shorthand for evaluation, single argument (only C++) + std::vector operator()(const DMatrix& arg0) { return operator()(make_vector(arg0));} + std::vector operator()(const SX& arg0) { return operator()(make_vector(arg0));} + std::vector operator()(const MX& arg0) { return operator()(make_vector(arg0));} + ///@} + + /** \brief Evaluate memory-less, numerically */ + void operator()(const double** arg, double** res, int* iw, double* w); + + /** \brief Evaluate memory-less SXElement + Same syntax as the double version, allowing use in templated code + */ + void operator()(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Propagate sparsity forward */ + void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Alias for spFwd + Same syntax as the double and SXElement versions, allowing use in templated code + */ + void operator()(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w) { + spFwd(arg, res, iw, w); + } +#endif // SWIG + + /** \brief Create call to (cached) derivative function, forward mode */ + void callForward(const std::vector& arg, const std::vector& res, + const std::vector >& fseed, + std::vector >& SWIG_OUTPUT(fsens), + bool always_inline=false, bool never_inline=false); + + /** \brief Create call to (cached) derivative function, reverse mode */ + void callReverse(const std::vector& arg, const std::vector& res, + const std::vector >& aseed, + std::vector >& SWIG_OUTPUT(asens), + bool always_inline=false, bool never_inline=false); + + /** \brief Create call to (cached) derivative function, forward mode */ + void callForward(const std::vector& arg, const std::vector& res, + const std::vector >& fseed, + std::vector >& SWIG_OUTPUT(fsens), + bool always_inline=false, bool never_inline=false); + + /** \brief Create call to (cached) derivative function, reverse mode */ + void callReverse(const std::vector& arg, const std::vector& res, + const std::vector >& aseed, + std::vector >& SWIG_OUTPUT(asens), + bool always_inline=false, bool never_inline=false); + + /** \brief Create call to (cached) derivative function, forward mode */ + void callForward(const std::vector& arg, const std::vector& res, + const std::vector >& fseed, + std::vector >& SWIG_OUTPUT(fsens), + bool always_inline=false, bool never_inline=false); + + /** \brief Create call to (cached) derivative function, reverse mode */ + void callReverse(const std::vector& arg, const std::vector& res, + const std::vector >& aseed, + std::vector >& SWIG_OUTPUT(asens), + bool always_inline=false, bool never_inline=false); + + /// \cond INTERNAL + ///@{ + /** \brief Evaluate the function symbolically or numerically with directional derivatives + * The first two arguments are the nondifferentiated inputs and results of the evaluation, + * the next two arguments are a set of forward directional seeds and the resulting forward + * directional derivatives, the length of the vector being the number of forward directions. + * The next two arguments are a set of adjoint directional seeds and the resulting adjoint + * directional derivatives, the length of the vector being the number of adjoint directions. + */ + void callDerivative(const DMatrixVector& arg, DMatrixVector& SWIG_OUTPUT(res), + const DMatrixVectorVector& fseed, DMatrixVectorVector& SWIG_OUTPUT(fsens), + const DMatrixVectorVector& aseed, DMatrixVectorVector& SWIG_OUTPUT(asens), + bool always_inline=false, bool never_inline=false); + + void callDerivative(const SXVector& arg, SXVector& SWIG_OUTPUT(res), + const SXVectorVector& fseed, SXVectorVector& SWIG_OUTPUT(fsens), + const SXVectorVector& aseed, SXVectorVector& SWIG_OUTPUT(asens), + bool always_inline=false, bool never_inline=false); + + void callDerivative(const MXVector& arg, MXVector& SWIG_OUTPUT(res), + const MXVectorVector& fseed, MXVectorVector& SWIG_OUTPUT(fsens), + const MXVectorVector& aseed, MXVectorVector& SWIG_OUTPUT(asens), + bool always_inline=false, bool never_inline=false); + ///@} + /// \endcond + + /** \brief Evaluate symbolically in parallel (matrix graph) + \param parallelization Type of parallelization used: expand|serial|openmp + */ + std::vector > map(const std::vector > &arg, + const std::string& parallelization="serial"); + + /** \brief Evaluate symbolically in parallel (matrix graph) + \param parallelization Type of parallelization used: expand|serial|openmp + */ + std::vector map(const std::vector &arg, + const std::string& parallelization="serial"); + + /** \brief Evaluate symbolically in parallel and sum (matrix graph) + \param parallelization Type of parallelization used: expand|serial|openmp + */ + std::vector mapsum(const std::vector &arg, + const std::string& parallelization="serial"); + + /** \brief Create a mapaccumulated version of this function + + Suppose the function has a signature of: + \verbatim + f: (x, u) -> (x_next , y ) + \endverbatim + + The the mapaccumulated version has the signature: + \verbatim + F: (x0, U) -> (X , Y ) + + with + U: horzcat([u0, u1, ..., u_(N-1)]) + X: horzcat([x1, x2, ..., x_N]) + Y: horzcat([y0, y1, ..., y_(N-1)]) + + and + x1, y0 <- f(x0, u0) + x2, y1 <- f(x1, u1) + ... + x_N, y_(N-1) <- f(x_(N-1), u_(N-1)) + \endverbatim + + + */ + Function mapaccum(const std::string& name, int N, const Dict & options = Dict()) const; + + + /** \brief Create a mapped version of this function + + Suppose the function has a signature of: + \verbatim + f: (a, p) -> ( s ) + \endverbatim + + The the mapaccumulated version has the signature: + \verbatim + F: (A, P) -> (S ) + + with + a: horzcat([a0, a1, ..., a_(N-1)]) + p: horzcat([p0, p1, ..., p_(N-1)]) + s: horzcat([s0, s1, ..., s_(N-1)]) + and + s0 <- f(a0, p0) + s1 <- f(a1, p1) + ... + s_(N-1) <- f(a_(N-1), p_(N-1)) + \endverbatim + + + */ + Function map(const std::string& name, int N, const Dict & options = Dict()) const; + + /** \brief Get a function that calculates \a nfwd forward derivatives and nadj adjoint derivatives + * Legacy function: Use derForward and derReverse instead. + * + * Returns a function with (1+nfwd)*n_in+nadj*n_out inputs + * and (1+nfwd)*n_out + nadj*n_in outputs. + * The first n_in inputs correspond to nondifferentiated inputs. + * The next nfwd*n_in inputs correspond to forward seeds, + * one direction at a time + * and the last nadj*n_out inputs correspond to adjoint seeds, + * one direction at a time. + * The first n_out outputs correspond to nondifferentiated outputs. + * The next nfwd*n_out outputs correspond to forward sensitivities, + * one direction at a time and the last nadj*n_in outputs corresponds to + * adjoint sensitivities, one direction at a time. + * + * (n_in = nIn(), n_out = nOut()) + * + */ + Function derivative(int nfwd, int nadj); + + /** \brief Get a function that calculates \a nfwd forward derivatives + * + * Returns a function with n_in + n_out +nfwd*n_in inputs + * and nfwd*n_out outputs. + * The first n_in inputs correspond to nondifferentiated inputs. + * The next n_out inputs correspond to nondifferentiated outputs. + * and the last nfwd*n_in inputs correspond to forward seeds, + * one direction at a time + * The nfwd*n_out outputs correspond to forward sensitivities, + * one direction at a time. * + * (n_in = nIn(), n_out = nOut()) + * + * The functions returned are cached, meaning that if called multiple timed + * with the same value, then multiple references to the same function will be returned. + */ + Function derForward(int nfwd); + + /** \brief Get a function that calculates \a nadj adjoint derivatives + * + * Returns a function with n_in + n_out +nadj*n_out inputs + * and nadj*n_in outputs. + * The first n_in inputs correspond to nondifferentiated inputs. + * The next n_out inputs correspond to nondifferentiated outputs. + * and the last nadj*n_out inputs correspond to adjoint seeds, + * one direction at a time + * The nadj*n_in outputs correspond to adjoint sensitivities, + * one direction at a time. * + * (n_in = nIn(), n_out = nOut()) + * + * (n_in = nIn(), n_out = nOut()) + * + * The functions returned are cached, meaning that if called multiple timed + * with the same value, then multiple references to the same function will be returned. + */ + Function derReverse(int nadj); + + /** \brief Set a function that calculates \a nfwd forward derivatives + NOTE: Does _not_ take ownership, only weak references to the derivatives are kept internally */ + void setDerForward(const Function& fcn, int nfwd); + + /** \brief Set a function that calculates \a nadj adjoint derivatives + NOTE: Does _not_ take ownership, only weak references to the derivatives are kept internally */ + void setDerReverse(const Function& fcn, int nadj); + + ///@{ + /// Get, if necessary generate, the sparsity of a Jacobian block + const Sparsity jacSparsity(int iind=0, int oind=0, bool compact=false, bool symmetric=false); + const Sparsity jacSparsity(const std::string &iind, int oind=0, bool compact=false, + bool symmetric=false) { + return jacSparsity(inputIndex(iind), oind, compact, symmetric); } + const Sparsity jacSparsity(int iind, const std::string &oind, bool compact=false, + bool symmetric=false) { + return jacSparsity(iind, outputIndex(oind), compact, symmetric); } + const Sparsity jacSparsity(const std::string &iind, const std::string &oind, + bool compact=false, bool symmetric=false) { + return jacSparsity(inputIndex(iind), outputIndex(oind), compact, symmetric); } + ///@} + + ///@{ + /// Generate the sparsity of a Jacobian block + void setJacSparsity(const Sparsity& sp, int iind, int oind, bool compact=false); + void setJacSparsity(const Sparsity& sp, const std::string &iind, int oind, bool compact=false) { + setJacSparsity(sp, inputIndex(iind), oind, compact); } + void setJacSparsity(const Sparsity& sp, int iind, const std::string &oind, bool compact=false) { + setJacSparsity(sp, iind, outputIndex(oind), compact); } + void setJacSparsity(const Sparsity& sp, const std::string &iind, const std::string &oind, + bool compact=false) { + setJacSparsity(sp, inputIndex(iind), outputIndex(oind), compact); } + ///@} + + /** \brief Export / Generate C code for the function */ + void generate(const std::string& fname, const Dict& opts=Dict()); + + /** \brief Export / Generate C code for the function */ + void generate(const Dict& opts=Dict()); + + /// \cond INTERNAL + /** \brief Access functions of the node */ + FunctionInternal* operator->(); + + /** \brief Const access functions of the node */ + const FunctionInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + /// \endcond + + /// Get all statistics obtained at the end of the last evaluate call + const Dict& getStats() const; + + /// Get a single statistic obtained at the end of the last evaluate call + GenericType getStat(const std::string& name) const; + + /** \brief Get a vector of symbolic variables with the same dimensions as the inputs + * + * There is no guarantee that consecutive calls return identical objects + */ + std::vector symbolicInput(bool unique=false) const; + + /** \brief Get a vector of symbolic variables with the same dimensions as the inputs, SX graph + * + * There is no guarantee that consecutive calls return identical objects + */ + std::vector symbolicInputSX() const; + + /** \brief Get a vector of symbolic variables with the same dimensions as the outputs + * + * There is no guarantee that consecutive calls return identical objects + */ + std::vector symbolicOutput() const; + + /// \cond INTERNAL + /** \brief Is the class able to propagate seeds through the algorithm? + * + * (for usage, see the example propagating_sparsity.cpp) */ + bool spCanEvaluate(bool fwd); + + /** \brief Reset the sparsity propagation + * + * (for usage, see the example propagating_sparsity.cpp) */ + void spInit(bool fwd); + + /** \brief Propagate the sparsity pattern through a set of directional + * + * derivatives forward or backward (for usage, see the example propagating_sparsity.cpp) */ + void spEvaluate(bool fwd); + + /** \brief Get required length of arg field */ + size_t sz_arg() const; + + /** \brief Get required length of res field */ + size_t sz_res() const; + + /** \brief Get required length of iw field */ + size_t sz_iw() const; + + /** \brief Get required length of w field */ + size_t sz_w() const; + +#ifndef SWIG + /** \brief Get number of temporary variables needed */ + void sz_work(size_t& sz_arg, size_t& sz_res, size_t& sz_iw, size_t& sz_w) const; +#endif // SWIG + + /// \endcond + + /** \brief Add modules to be monitored */ + void addMonitor(const std::string& mon); + + /** \brief Remove modules to be monitored */ + void removeMonitor(const std::string& mon); + + /// \cond INTERNAL + /** \brief Check if the numerical values of the supplied bounds make sense */ + void checkInputs() const; +#ifndef SWIG + /** \brief Call using a map */ + template + const std::map callMap(const std::map& arg, + bool always_inline, bool never_inline); + + /** \brief Check if input arguments have correct length and dimensions + * + * \param hcat check if horizontal repetion of the function input is allowed + */ + template + void checkArg(const std::vector& arg, bool hcat=false) const; + + /** \brief Check if output arguments have correct length and dimensions */ + template + void checkRes(const std::vector& res) const; + + /** \brief Check forward mode seeds dimensions */ + template + void checkFwdSeed(const std::vector >& fseed) const; + + /** \brief Check reverse mode seeds dimensions */ + template + void checkAdjSeed(const std::vector >& aseed) const; + + /** \brief Check if input arguments that needs to be replaced + * + * \param hcat check if horizontal repetion of the function input is allowed + */ + template + bool matchingArg(const std::vector& arg, bool hcat=false) const; + + /** \brief Check if output arguments that needs to be replaced */ + template + bool matchingRes(const std::vector& arg) const; + + /** \brief Check if there are 0-by-0 forward seeds that needs to be replaced */ + template + bool matchingFwdSeed(const std::vector >& fseed) const; + + /** \brief Check if there are 0-by-0 reverse seeds that needs to be replaced */ + template + bool matchingAdjSeed(const std::vector >& aseed) const; + + /** \brief Replace 0-by-0 inputs + * + * \param hcat check if horizontal repetion of the function input is allowed + */ + template + std::vector replaceArg(const std::vector& arg, bool hcat=false) const; + + /** \brief Replace 0-by-0 outputs */ + template + std::vector replaceRes(const std::vector& res) const; + + /** \brief Replace 0-by-0 forward seeds */ + template + std::vector > + replaceFwdSeed(const std::vector >& fseed) const; + + /** \brief Replace 0-by-0 reverse seeds */ + template + std::vector > + replaceAdjSeed(const std::vector >& aseed) const; +#endif // SWIG + /// \endcond + +#ifndef SWIG + // Create vector with 1 element + inline friend std::vector make_vector(const Function& x0) { + return std::vector(1, x0); + } + + // Create vector with 2 elements + inline friend std::vector make_vector(const Function& x0, const Function& x1) { + Function x[] = {x0, x1}; + return std::vector(x, x+2); + } + + // Create vector with 3 elements + inline friend std::vector make_vector(const Function& x0, const Function& x1, + const Function& x2) { + Function x[] = {x0, x1, x2}; + return std::vector(x, x+3); + } + + // Create vector with 4 elements + inline friend std::vector make_vector(const Function& x0, const Function& x1, + const Function& x2, const Function& x3) { + Function x[] = {x0, x1, x2, x3}; + return std::vector(x, x+4); + } + + // Create vector with 5 elements + inline friend std::vector make_vector(const Function& x0, const Function& x1, + const Function& x2, const Function& x3, + const Function& x4) { + Function x[] = {x0, x1, x2, x3, x4}; + return std::vector(x, x+5); + } + + // Create vector with 6 elements + inline friend std::vector make_vector(const Function& x0, const Function& x1, + const Function& x2, const Function& x3, + const Function& x4, const Function& x5) { + Function x[] = {x0, x1, x2, x3, x4, x5}; + return std::vector(x, x+6); + } +#endif // SWIG + + /** \brief get function name with all non alphanumeric characters converted to '_' */ + std::string getSanitizedName() const; + + /** \brief get function name with all non alphanumeric characters converted to '_' */ + static std::string sanitizeName(const std::string& name); + }; + +} // namespace casadi + +#endif // CASADI_FUNCTION_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/function_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/function_internal.hpp new file mode 100755 index 0000000..0860c43 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/function_internal.hpp @@ -0,0 +1,736 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_FUNCTION_INTERNAL_HPP +#define CASADI_FUNCTION_INTERNAL_HPP + +#include "function.hpp" +#include "../functor.hpp" +#include "../weak_ref.hpp" +#include +#include "code_generator.hpp" +#include "compiler.hpp" +#include "../matrix/sparse_storage.hpp" + +// This macro is for documentation purposes +#define INPUTSCHEME(name) + +// This macro is for documentation purposes +#define OUTPUTSCHEME(name) + +/// \cond INTERNAL + +namespace casadi { + + ///@{ + /** \brief Function pointer types */ + typedef int (*sparsityPtr)(int i, int *n_row, int *n_col, + const int **colind, const int **row); + typedef int (*workPtr)(int *n_iw, int *n_w); + typedef int (*evalPtr)(const double** arg, double** res, int* iw, double* w); + typedef void (*simplifiedPtr)(const double* arg, double* res); + typedef int (*initPtr)(int *f_type, int *n_in, int *n_out, int *sz_arg, int* sz_res); + ///@} + + class MXFunction; + + /** \brief Internal class for Function + \author Joel Andersson + \date 2010 + A regular user should never work with any Node class. Use Function directly. + */ + class CASADI_EXPORT FunctionInternal : public OptionsFunctionalityNode, + public IOInterface{ + friend class Function; + + protected: + /** \brief Default constructor (accessible from the Function class and derived classes) */ + FunctionInternal(); + + public: + /** \brief Destructor */ + virtual ~FunctionInternal() = 0; + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief Evaluate using internal data structures */ + virtual void evaluate(); + + /** \brief Obtain solver name from Adaptor */ + virtual std::string getAdaptorSolverName() const { return ""; } + + /** \brief Initialize + Initialize and make the object ready for setting arguments and evaluation. + This method is typically called after setting options but before evaluating. + If passed to another class (in the constructor), this class should invoke + this function when initialized. */ + virtual void init(); + + /** \brief Post-initialization + This function, which visits the class hierarchy in reverse order is run after + init() has been completed. + */ + virtual void postinit(); + + /** \brief Propagate the sparsity pattern through a set of directional + derivatives forward or backward */ + virtual void spEvaluate(bool fwd); + + /** \brief Propagate the sparsity pattern through a set of directional derivatives + forward or backward, using the sparsity patterns */ + virtual void spEvaluateViaJacSparsity(bool fwd); + + /** \brief Is the class able to propagate seeds through the algorithm? */ + virtual bool spCanEvaluate(bool fwd) { return false;} + + /** \brief Reset the sparsity propagation */ + virtual void spInit(bool fwd) {} + + /** \brief Evaluate numerically, possibly using just-in-time compilation */ + void eval(const double** arg, double** res, int* iw, double* w); + + /** \brief Evaluate numerically, work vectors given */ + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /** \brief Quickfix to avoid segfault, #1552 */ + virtual bool canEvalSX() const {return false;} + + /** \brief Evaluate symbolically, SXElement type, possibly nonmatching sparsity patterns */ + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Evaluate symbolically, SXElement type, possibly nonmatching sparsity patterns */ + virtual void evalSX(const std::vector& arg, std::vector& res); + + /** \brief Evaluate symbolically, MX type */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Call a function, DMatrix type (overloaded) */ + void call(const DMatrixVector& arg, DMatrixVector& res, + bool always_inline, bool never_inline); + + /** \brief Call a function, MX type (overloaded) */ + void call(const MXVector& arg, MXVector& res, + bool always_inline, bool never_inline); + + /** \brief Call a function, SX type (overloaded) */ + void call(const SXVector& arg, SXVector& res, + bool always_inline, bool never_inline); + + /** \brief Create call to (cached) derivative function, forward mode */ + virtual void callForward(const std::vector& arg, const std::vector& res, + const std::vector >& fseed, + std::vector >& fsens, + bool always_inline, bool never_inline); + + /** \brief Create call to (cached) derivative function, reverse mode */ + virtual void callReverse(const std::vector& arg, const std::vector& res, + const std::vector >& aseed, + std::vector >& asens, + bool always_inline, bool never_inline); + + /** \brief Create call to (cached) derivative function, forward mode */ + virtual void callForward(const std::vector& arg, const std::vector& res, + const std::vector >& fseed, + std::vector >& fsens, + bool always_inline, bool never_inline); + + /** \brief Create call to (cached) derivative function, reverse mode */ + virtual void callReverse(const std::vector& arg, const std::vector& res, + const std::vector >& aseed, + std::vector >& asens, + bool always_inline, bool never_inline); + + /** \brief Create call to (cached) derivative function, forward mode */ + virtual void callForward(const std::vector& arg, const std::vector& res, + const std::vector >& fseed, + std::vector >& fsens, + bool always_inline, bool never_inline); + + /** \brief Create call to (cached) derivative function, reverse mode */ + virtual void callReverse(const std::vector& arg, const std::vector& res, + const std::vector >& aseed, + std::vector >& asens, + bool always_inline, bool never_inline); + ///@{ + /** \brief Return Hessian function */ + Function hessian(int iind, int oind); + virtual Function getHessian(int iind, int oind); + ///@} + + ///@{ + /** \brief Return gradient function */ + Function gradient(int iind, int oind); + virtual Function getGradient(const std::string& name, int iind, int oind, const Dict& opts); + ///@} + + ///@{ + /** \brief Return tangent function */ + Function tangent(int iind, int oind); + virtual Function getTangent(const std::string& name, int iind, int oind, const Dict& opts); + ///@} + + ///@{ + /** \brief Return Jacobian function */ + Function jacobian(int iind, int oind, bool compact, bool symmetric); + void setJacobian(const Function& jac, int iind, int oind, bool compact); + virtual Function getJacobian(const std::string& name, int iind, int oind, + bool compact, bool symmetric, const Dict& opts); + virtual Function getNumericJacobian(const std::string& name, int iind, int oind, + bool compact, bool symmetric, const Dict& opts); + ///@} + + ///@{ + /** \brief Return Jacobian of all input elements with respect to all output elements */ + Function fullJacobian(); + virtual bool hasFullJacobian() const; + virtual Function getFullJacobian(const std::string& name, const Dict& opts); + ///@} + + ///@{ + /** \brief Return function that calculates forward derivatives + * derForward(nfwd) returns a cached instance if available, + * and calls Function getDerForward(int nfwd) + * if no cached version is available. + */ + Function derForward(int nfwd); + virtual Function getDerForward(const std::string& name, int nfwd, Dict& opts); + virtual int numDerForward() const { return hasSetOption("custom_forward") ? 64 : 0;} + void setDerForward(const Function& fcn, int nfwd); + ///@} + + ///@{ + /** \brief Return function that calculates adjoint derivatives + * derReverse(nadj) returns a cached instance if available, + * and calls Function getDerReverse(int nadj) + * if no cached version is available. + */ + Function derReverse(int nadj); + virtual Function getDerReverse(const std::string& name, int nadj, Dict& opts); + virtual int numDerReverse() const { return hasSetOption("custom_reverse") ? 64 : 0;} + void setDerReverse(const Function& fcn, int nadj); + ///@} + + /** \brief Can derivatives be calculated in any way? */ + bool hasDerivative() const; + + /** \brief Weighting factor for chosing forward/reverse mode */ + virtual double adWeight(); + + /** \brief Weighting factor for chosing forward/reverse mode, + sparsity propagation */ + virtual double adWeightSp(); + + /** \brief Create a helper MXFunction with some properties copied + * + * Copied properties: + * + * input/outputscheme + * ad_mode + * + * The function is not initialized + */ + MXFunction wrapMXFunction(); + + /** \brief Generate function call */ + virtual void generate(CodeGenerator& g, const std::vector& arg, + const std::vector& res) const; + + /** \brief Generate code the function */ + virtual void generateFunction(CodeGenerator& g, const std::string& fname, + bool decl_static) const; + + /** \brief Generate meta-information allowing a user to evaluate a generated function */ + void generateMeta(CodeGenerator& g, const std::string& fname) const; + + /** \brief Use simplified signature */ + virtual bool simplifiedCall() const { return false;} + + /** \brief Generate a call to a function (generic signature) */ + virtual std::string generateCall(const CodeGenerator& g, + const std::string& arg, const std::string& res, + const std::string& iw, const std::string& w) const; + + /** \brief Generate a call to a function (simplified signature) */ + virtual std::string generateCall(const CodeGenerator& g, + const std::string& arg, const std::string& res) const; + + /** \brief Add a dependent function */ + virtual void addDependency(CodeGenerator& g) const; + + /** \brief Generate code for the declarations of the C function */ + virtual void generateDeclarations(CodeGenerator& g) const; + + /** \brief Generate code for the function body */ + virtual void generateBody(CodeGenerator& g) const; + + /** \brief Print */ + virtual void print(std::ostream &stream) const; + + /** \brief Print */ + virtual void repr(std::ostream &stream) const; + + /** \brief Check if the numerical values of the supplied bounds make sense */ + virtual void checkInputs() const {} + + /** \brief Print dimensions of inputs and outputs */ + void printDimensions(std::ostream &stream) const; + + /** \brief Get the unidirectional or bidirectional partition */ + void getPartition(int iind, int oind, Sparsity& D1, Sparsity& D2, bool compact, bool symmetric); + + /// Verbose mode? + bool verbose() const; + + /// Is function fcn being monitored + bool monitored(const std::string& mod) const; + + /** \brief Get the number of function inputs */ + inline int nIn() const { return ibuf_.size();} + + /** \brief Get the number of function outputs */ + inline int nOut() const { return obuf_.size();} + + /** \brief Get total number of nonzeros in all of the matrix-valued inputs */ + int nnzIn() const; + + /** \brief Get total number of nonzeros in all of the matrix-valued outputs */ + int nnzOut() const; + + /** \brief Get total number of elements in all of the matrix-valued inputs */ + int numelIn() const; + + /** \brief Get total number of elements in all of the matrix-valued outputs */ + int numelOut() const; + + /// Get all statistics obtained at the end of the last evaluate call + const Dict & getStats() const; + + /// Get single statistic obtained at the end of the last evaluate call + GenericType getStat(const std::string & name) const; + + /// Generate the sparsity of a Jacobian block + virtual Sparsity getJacSparsity(int iind, int oind, bool symmetric); + + /// A flavor of getJacSparsity without any magic + Sparsity getJacSparsityPlain(int iind, int oind); + + /// A flavor of getJacSparsity that does hierarchical block structure recognition + Sparsity getJacSparsityHierarchical(int iind, int oind); + + /** A flavor of getJacSparsity that does hierarchical block + * structure recognition for symmetric Jacobians + */ + Sparsity getJacSparsityHierarchicalSymm(int iind, int oind); + + /// Generate the sparsity of a Jacobian block + void setJacSparsity(const Sparsity& sp, int iind, int oind, bool compact); + + /// Get, if necessary generate, the sparsity of a Jacobian block + Sparsity& jacSparsity(int iind, int oind, bool compact, bool symmetric); + + /// Get a vector of symbolic variables with the same dimensions as the inputs + virtual std::vector symbolicInput() const; + + /// Get a vector of symbolic variables with the same dimensions as the outputs + virtual std::vector symbolicOutput() const; + + /// Get a vector of symbolic variables corresponding to the outputs + virtual std::vector symbolicOutput(const std::vector& arg); + + /// Get a vector of symbolic variables with the same dimensions as the inputs + virtual std::vector symbolicInputSX() const; + + /** \brief Get input scheme index by name */ + virtual int inputIndex(const std::string &name) const { + const std::vector& v=ischeme_; + for (std::vector::const_iterator i=v.begin(); i!=v.end(); ++i) { + size_t col = i->find(':'); + if (i->compare(0, col, name)==0) return i-v.begin(); + } + casadi_error("FunctionInternal::inputIndex: could not find entry \"" + << name << "\". Available names are: " << v << "."); + return -1; + } + + /** \brief Get output scheme index by name */ + virtual int outputIndex(const std::string &name) const { + const std::vector& v=oscheme_; + for (std::vector::const_iterator i=v.begin(); i!=v.end(); ++i) { + size_t col = i->find(':'); + if (i->compare(0, col, name)==0) return i-v.begin(); + } + casadi_error("FunctionInternal::outputIndex: could not find entry \"" + << name << "\". Available names are: " << v << "."); + return -1; + } + + /** \brief Get input scheme name by index */ + virtual std::string inputName(int ind) const { + const std::string& s=ischeme_.at(ind); + size_t col = s.find(':'); // Colon seprates name from description + return s.substr(0, col); + } + + /** \brief Get output scheme name by index */ + virtual std::string outputName(int ind) const { + const std::string& s=oscheme_.at(ind); + size_t col = s.find(':'); // Colon seprates name from description + return s.substr(0, col); + } + + /** \brief Get input scheme description by index */ + virtual std::string inputDescription(int ind) const { + const std::string& s=ischeme_.at(ind); + size_t col = s.find(':'); // Colon seprates name from description + if (col==std::string::npos) { + return std::string("No description available"); + } else { + return s.substr(col+1); + } + } + + /** \brief Get output scheme description by index */ + virtual std::string outputDescription(int ind) const { + const std::string& s=oscheme_.at(ind); + size_t col = s.find(':'); // Colon seprates name from description + if (col==std::string::npos) { + return std::string("No description available"); + } else { + return s.substr(col+1); + } + } + + /** \brief Get default input value */ + virtual double defaultInput(int ind) const { return 0;} + + /** \brief Get sparsity of a given input */ + /// @{ + inline Sparsity inputSparsity(int ind=0) const { + return input(ind).sparsity(); + } + inline Sparsity inputSparsity(const std::string& iname) const { + return input(inputIndex(iname)).sparsity(); + } + /// @} + + /** \brief Get sparsity of a given output */ + /// @{ + inline Sparsity outputSparsity(int ind=0) const { + return output(ind).sparsity(); + } + inline Sparsity outputSparsity(const std::string& iname) const { + return output(outputIndex(iname)).sparsity(); + } + /// @} + + + /// Access input argument by index + inline Matrix& input(int i=0) { + try { + return ibuf_.at(i); + } catch(std::out_of_range&) { + std::stringstream ss; + ss << "In function " << getOption("name") + << ": input " << i << " not in interval [0, " << nIn() << ")"; + if (!isInit()) ss << std::endl << "Did you forget to initialize?"; + throw CasadiException(ss.str()); + } + } + + /// Access input argument by name + inline Matrix& input(const std::string &iname) { + return input(inputIndex(iname)); + } + + /// Const access input argument by index + inline const Matrix& input(int i=0) const { + return const_cast(this)->input(i); + } + + /// Const access input argument by name + inline const Matrix& input(const std::string &iname) const { + return const_cast(this)->input(iname); + } + + /// Access output argument by index + inline Matrix& output(int i=0) { + try { + return obuf_.at(i); + } catch(std::out_of_range&) { + std::stringstream ss; + ss << "In function " << getOption("name") + << ": output " << i << " not in interval [0, " << nOut() << ")"; + if (!isInit()) ss << std::endl << "Did you forget to initialize?"; + throw CasadiException(ss.str()); + } + } + + /// Access output argument by name + inline Matrix& output(const std::string &oname) { + return output(outputIndex(oname)); + } + + /// Const access output argument by index + inline const Matrix& output(int i=0) const { + return const_cast(this)->output(i); + } + + /// Const access output argument by name + inline const Matrix& output(const std::string &oname) const { + return const_cast(this)->output(oname); + } + + /** \brief Log the status of the solver */ + void log(const std::string& msg) const; + + /** \brief Log the status of the solver, function given */ + void log(const std::string& fcn, const std::string& msg) const; + + /// Codegen function + Function dynamicCompilation(Function f, std::string fname, std::string fdescr, + std::string compiler); + + /// The following functions are called internally from EvaluateMX. + /// For documentation, see the MXNode class + ///@{ + /** \brief Propagate sparsity forward */ + virtual void spFwdSwitch(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdjSwitch(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Get number of temporary variables needed */ + void sz_work(size_t& sz_arg, size_t& sz_res, size_t& sz_iw, size_t& sz_w) const; + + /** \brief Get required length of arg field */ + size_t sz_arg() const { return sz_arg_;} + + /** \brief Get required length of res field */ + size_t sz_res() const { return sz_res_;} + + /** \brief Get required length of iw field */ + size_t sz_iw() const { return sz_iw_;} + + /** \brief Get required length of w field */ + size_t sz_w() const { return sz_w_;} + + /** \brief Ensure required length of arg field */ + void alloc_arg(size_t sz_arg); + + /** \brief Ensure required length of res field */ + void alloc_res(size_t sz_res); + + /** \brief Ensure required length of iw field */ + void alloc_iw(size_t sz_iw); + + /** \brief Ensure required length of w field */ + void alloc_w(size_t sz_w); + + /** \brief Ensure work vectors long enough to evaluate function */ + void alloc(const Function& f); + + /** \brief Update lengths of temporary work vectors */ + void alloc(); + ///@} + + /** \brief Prints out a human readable report about possible constraint violations + * - specific constraints + * + * Constraint visualizer strip: + * \verbatim + * o-------=-------o Indicates that the value is nicely inbetween the bounds + * o-=-------------o Indicates that the value is closer to the lower bound + * X---------------o Indicates that the lower bound is active + * 8---------------o Indicates that the lower bound is -infinity + * o------------=--o Indicates that the value is closer to the upper bound + * o---------------X Indicates that the upper bound is active + * o---------------8 Indicates that the upper bound is infinity + * VIOLATED Indicates constraint violation + * \endverbatim + */ + static void reportConstraints(std::ostream &stream, const Matrix &v, + const Matrix &lb, const Matrix &ub, + const std::string &name, double tol=1e-8); + + ///@{ + /** \brief Calculate derivatives by multiplying the full Jacobian and multiplying */ + virtual bool fwdViaJac(int nfwd); + virtual bool adjViaJac(int nadj); + ///@} + + /// Input and output buffers + std::vector ibuf_, obuf_; + + /// Input and output scheme + std::vector ischeme_, oscheme_; + + /** \brief Verbose -- for debugging purposes */ + bool verbose_; + + /** \brief Use just-in-time compiler */ + bool jit_; + evalPtr evalD_; + + /// Set of module names which are extra monitored + std::set monitors_; + + /** \brief Dict of statistics (resulting from evaluate) */ + Dict stats_; + + /** \brief Flag to indicate whether statistics must be gathered */ + bool gather_stats_; + + /// Cache for functions to evaluate directional derivatives (new) + std::vector derivative_fwd_, derivative_adj_; + + /// Cache for full Jacobian + WeakRef full_jacobian_; + + /// Cache for sparsities of the Jacobian blocks + SparseStorage jac_sparsity_, jac_sparsity_compact_; + + /// Cache for Jacobians + SparseStorage jac_, jac_compact_; + + /// User-set field + void* user_data_; + + /// Name + std::string name_; + + /// Just-in-time compiler + std::string compilerplugin_; + Compiler compiler_; + Dict jit_options_; + + bool monitor_inputs_, monitor_outputs_; + + /// Errors are thrown when NaN is produced + bool regularity_check_; + + /// Errors are thrown if numerical values of inputs look bad + bool inputs_check_; + + /** \brief get function name with all non alphanumeric characters converted to '_' */ + std::string getSanitizedName() const; + + /** \brief get function name with all non alphanumeric characters converted to '_' */ + static std::string sanitizeName(const std::string& name); + + /** \brief Can a derivative direction be skipped */ + template + static bool purgable(const std::vector& seed); + + /** \brief Symbolic expressions for the forward seeds */ + template + std::vector > symbolicFwdSeed(int nfwd, const std::vector& v); + + /** \brief Symbolic expressions for the adjoint seeds */ + template + std::vector > symbolicAdjSeed(int nadj, const std::vector& v); + + protected: + /** \brief Temporary vector needed for the evaluation (integer) */ + std::vector iw_tmp_; + + /** \brief Temporary vector needed for the evaluation (real) */ + std::vector w_tmp_; + + private: + /** \brief Sizes of input and output buffers */ + size_t sz_arg_, sz_res_, sz_iw_, sz_w_; + }; + + // Template implementations + template + bool FunctionInternal::purgable(const std::vector& v) { + for (typename std::vector::const_iterator i=v.begin(); i!=v.end(); ++i) { + if (!i->isZero()) return false; + } + return true; + } + + template + std::vector > + FunctionInternal::symbolicFwdSeed(int nfwd, const std::vector& v) { + std::vector > fseed(nfwd, v); + for (int dir=0; dir::iterator i=fseed[dir].begin(); + i!=fseed[dir].end(); + ++i, ++iind) { + // Name of the forward seed + std::stringstream ss; + ss << "f"; + if (nfwd>1) ss << dir; + ss << "_"; + ss << iind; + + // Save to matrix + *i = MatType::sym(ss.str(), i->sparsity()); + + } + } + return fseed; + } + + template + std::vector > + FunctionInternal::symbolicAdjSeed(int nadj, const std::vector& v) { + std::vector > aseed(nadj, v); + for (int dir=0; dir::iterator i=aseed[dir].begin(); + i!=aseed[dir].end(); + ++i, ++oind) { + // Name of the adjoint seed + std::stringstream ss; + ss << "a"; + if (nadj>1) ss << dir << "_"; + ss << oind; + + // Save to matrix + *i = MatType::sym(ss.str(), i->sparsity()); + + } + } + return aseed; + } + +} // namespace casadi + +/// \endcond + +#endif // CASADI_FUNCTION_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/homotopy_nlp_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/homotopy_nlp_internal.hpp new file mode 100755 index 0000000..115c556 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/homotopy_nlp_internal.hpp @@ -0,0 +1,81 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_HOMOTOPY_NLP_SOLVER_INTERNAL_HPP +#define CASADI_HOMOTOPY_NLP_SOLVER_INTERNAL_HPP + +#include "homotopy_nlp_solver.hpp" +#include "nlp_solver.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + + +/// \cond INTERNAL +namespace casadi { + +/** \brief Homotopy NLP solver storage class + \internal + @copydoc HomotopyNlpSolver_doc + \author Joris Gillis + \date 2013-2014 +*/ + class CASADI_EXPORT + HomotopyNLPInternal : public FunctionInternal, + public PluginInterface { + public: + /// Constructor + HomotopyNLPInternal(const Function& hnlp); + + /// Destructor + virtual ~HomotopyNLPInternal() = 0; + + /// Initialize + virtual void init(); + + /// The Homotopy NLP + Function hnlp_; + + int nx_; + int np_; + int ng_; + + // Creator function for internal class + typedef HomotopyNLPInternal* (*Creator)(const Function& hnlp); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_NLP_SOLVER_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/homotopy_nlp_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/homotopy_nlp_solver.hpp new file mode 100755 index 0000000..e2d601e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/homotopy_nlp_solver.hpp @@ -0,0 +1,107 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_HOMOTOPY_NLP_SOLVER_HPP +#define CASADI_HOMOTOPY_NLP_SOLVER_HPP + +#include "function.hpp" + + +/** \defgroup HomotopyNlpSolver_doc + + Solves the following parametric nonlinear program (NLP): + \verbatim + min F(x, p, tau) + x + + subject to + LBX <= x <= UBX + LBG <= G(x, p) <= UBG + p == P + + nx: number of decision variables + ng: number of constraints + np: number of parameters + \endverbatim + + In a homotopy from tau = 0 to tau = 1. + +*/ + +namespace casadi { +#ifndef SWIG + + /// Input arguments of an Homotopy NLP function [hnlpIn] + enum HNLPInput { + /// Decision variable [x] + HNL_X, + /// Fixed parameter [p] + HNL_P, + /// Homotopy parameter [tau] + HNL_TAU, + /// Number of NLP inputs + HNL_NUM_IN + }; +#endif // SWIG + + class HomotopyNLPInternal; + + /** \brief Base class for Homotopy NLP Solvers + + @copydoc HomotopyNlpSolver_doc + + \generalsection{HomotopyNlpSolver} + \pluginssection{HomotopyNlpSolver} + + \author Joris Gillis + \date 2014 + */ + class CASADI_EXPORT HomotopyNlpSolver : public Function { + public: + + /// Default constructor + HomotopyNlpSolver(); + + /// Access functions of the node + HomotopyNLPInternal* operator->(); + const HomotopyNLPInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + }; + +} // namespace casadi + +#endif // CASADI_HOMOTOPY_NLP_SOLVER_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/implicit_function.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/implicit_function.hpp new file mode 100755 index 0000000..3e9f00b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/implicit_function.hpp @@ -0,0 +1,129 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_IMPLICIT_FUNCTION_HPP +#define CASADI_IMPLICIT_FUNCTION_HPP + +#include "function.hpp" +#include "linear_solver.hpp" + +namespace casadi { + // Forward declaration of internal class + class ImplicitFunctionInternal; + + /** + \defgroup ImplicitFunction_doc + + Mathematically, the equation: + + F(z, x1, x2, ..., xn) == 0 + + where d_F/dz is invertible, implicitly defines the equation: + + z := G(x1, x2, ..., xn) + + In CasADi, F is a Function. + The first input presents the variables that need to be solved for. + The first output is the residual that needs to attain zero. + Optional remaining outputs can be supplied; they are output expressions. + + In pseudo-code, we can write: + + G* = ImplicitFunction('solver',F) + + Here, G* is a Function with one extra input over the pure mathematical G: + + z := G*(z0, x1, x2, ..., xn) + + The first input to the ImplicitFunction is the intial guess for z. + + */ + /** \brief Abstract base class for the implicit function classes + + @copydoc ImplicitFunction_doc + + \generalsection{ImplicitFunction} + \pluginssection{ImplicitFunction} + + \author Joel Andersson + \date 2011 + */ + class CASADI_EXPORT ImplicitFunction : public Function { + public: + + /** \brief Default constructor */ + ImplicitFunction(); + + /** \brief Create an implicit function solver (new syntax, includes initialization) + * \param solver \pluginargument{ImplicitFunction} + * \param f Function where one of the inputs (by default the first) is an unknown and + * one of the outputs (by default the first) is a residual. + */ + ImplicitFunction(const std::string& name, const std::string& solver, + const Function& f, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Create an implicit function solver, no initialization + * \param solver \pluginargument{ImplicitFunction} + * \param f Function where one of the inputs (by default the first) is an unknown and + * one of the outputs (by default the first) is a residual. + */ + ImplicitFunction(const std::string& solver, const Function& f, + const Function& jac=Function(), + const LinearSolver& linsol=LinearSolver()); +#endif // WITH_DEPRECATED_FEATURES + + /// Access functions of the node + ImplicitFunctionInternal* operator->(); + + /// Const access functions of the node + const ImplicitFunctionInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /// Access F + Function& getF(); + + /// Access Jacobian + Function& getJac(); + + /// Access linear solver + LinearSolver& getLinsol(); + }; + +} // namespace casadi + +#endif // CASADI_IMPLICIT_FUNCTION_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/implicit_function_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/implicit_function_internal.hpp new file mode 100755 index 0000000..ba00226 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/implicit_function_internal.hpp @@ -0,0 +1,146 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_IMPLICIT_FUNCTION_INTERNAL_HPP +#define CASADI_IMPLICIT_FUNCTION_INTERNAL_HPP + +#include "implicit_function.hpp" +#include "function_internal.hpp" +#include "linear_solver.hpp" +#include "plugin_interface.hpp" + + +/// \cond INTERNAL +namespace casadi { + + /// Internal class + class CASADI_EXPORT + ImplicitFunctionInternal : public FunctionInternal, + public PluginInterface { + public: + /** \brief Constructor + * + * \param f Function mapping from (n+1) inputs to 1 output. + */ + ImplicitFunctionInternal(const Function& f); + + /// Destructor + virtual ~ImplicitFunctionInternal() = 0; + + /** \brief Clone */ + virtual ImplicitFunctionInternal* clone() const=0; + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief Create a new ImplicitFunctionInternal */ + virtual ImplicitFunctionInternal* create(const Function& f) const = 0; + + /// Initialize + virtual void init(); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /// Is the class able to propagate seeds through the algorithm? + virtual bool spCanEvaluate(bool fwd) { return true;} + + /// Solve the system of equations and calculate derivatives + virtual void evaluate(); + + /// Solve the nonlinear system of equations + virtual void solveNonLinear() = 0; + + ///@{ + /** \brief Generate a function that calculates \a nfwd forward derivatives */ + virtual Function getDerForward(const std::string& name, int nfwd, Dict& opts); + virtual int numDerForward() const { return 64;} + ///@} + + ///@{ + /** \brief Generate a function that calculates \a nadj adjoint derivatives */ + virtual Function getDerReverse(const std::string& name, int nadj, Dict& opts); + virtual int numDerReverse() const { return 64;} + ///@} + + /** \brief Create call to (cached) derivative function, forward mode */ + virtual void callForward(const std::vector& arg, const std::vector& res, + const std::vector >& fseed, + std::vector >& fsens, + bool always_inline, bool never_inline); + + /** \brief Create call to (cached) derivative function, reverse mode */ + virtual void callReverse(const std::vector& arg, const std::vector& res, + const std::vector >& aseed, + std::vector >& asens, + bool always_inline, bool never_inline); + + /// Number of equations + int n_; + + /// The function f(z, x1, x2, ..., xn) == 0 + Function f_; + + /// Jacobian of f with respect to z + Function jac_; + + /// Linear solver + LinearSolver linsol_; + + /// Factorization up-to-date? + bool fact_up_to_date_; + + /// Constraints on decision variables + std::vector u_c_; + + /// Indices of the input and output that correspond to the actual root-finding + int iin_, iout_; + + // Creator function for internal class + typedef ImplicitFunctionInternal* (*Creator)(const Function& f); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Short name + static std::string shortname() { return "nlsol";} + + /// Infix + static const std::string infix_; + }; + + + +} // namespace casadi +/// \endcond + +#endif // CASADI_IMPLICIT_FUNCTION_INTERNAL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/integrator.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/integrator.hpp new file mode 100755 index 0000000..7525b97 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/integrator.hpp @@ -0,0 +1,277 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_INTEGRATOR_HPP +#define CASADI_INTEGRATOR_HPP + +#include "function.hpp" +#include "linear_solver.hpp" + +/** \brief Base class for integrators + * + * \defgroup DAE_doc + Solves an initial value problem (IVP) coupled to a terminal value problem + with differential equation given as an implicit ODE coupled to an algebraic + equation and a set of quadratures: + \verbatim + Initial conditions at t=t0 + x(t0) = x0 + q(t0) = 0 + + Forward integration from t=t0 to t=tf + der(x) = function(x, z, p, t) Forward ODE + 0 = fz(x, z, p, t) Forward algebraic equations + der(q) = fq(x, z, p, t) Forward quadratures + + Terminal conditions at t=tf + rx(tf) = rx0 + rq(tf) = 0 + + Backward integration from t=tf to t=t0 + der(rx) = gx(rx, rz, rp, x, z, p, t) Backward ODE + 0 = gz(rx, rz, rp, x, z, p, t) Backward algebraic equations + der(rq) = gq(rx, rz, rp, x, z, p, t) Backward quadratures + + where we assume that both the forward and backwards integrations are index-1 + (i.e. dfz/dz, dgz/drz are invertible) and furthermore that + gx, gz and gq have a linear dependency on rx, rz and rp. + + \endverbatim +*/ +namespace casadi { +#ifndef SWIG + + /// Input arguments of an ODE/DAE function [daeIn] + enum DAEInput { + /// Differential state [x] + DAE_X, + /// Algebraic state [z] + DAE_Z, + /// Parameter [p] + DAE_P, + /// Explicit time dependence [t] + DAE_T, + /// Number of arguments. + DAE_NUM_IN + }; + + /// Output arguments of an DAE function [daeOut] + enum DAEOutput { + /// Right hand side of the implicit ODE [ode] + DAE_ODE, + /// Right hand side of algebraic equations [alg] + DAE_ALG, + /// Right hand side of quadratures equations [quad] + DAE_QUAD, + /// Number of arguments. + DAE_NUM_OUT + }; + + /// Input arguments of an ODE/DAE backward integration function [rdaeIn] + enum RDAEInput { + /// Backward differential state [rx] + RDAE_RX, + /// Backward algebraic state [rz] + RDAE_RZ, + /// Backward parameter vector [rp] + RDAE_RP, + /// Forward differential state [x] + RDAE_X, + /// Forward algebraic state [z] + RDAE_Z, + /// Parameter vector [p] + RDAE_P, + /// Explicit time dependence [t] + RDAE_T, + /// Number of arguments. + RDAE_NUM_IN + }; + + /// Output arguments of an ODE/DAE backward integration function [rdaeOut] + enum RDAEOutput { + /// Right hand side of ODE. [ode] + RDAE_ODE, + /// Right hand side of algebraic equations. [alg] + RDAE_ALG, + /// Right hand side of quadratures. [quad] + RDAE_QUAD, + /// Number of arguments. + RDAE_NUM_OUT + }; + + /// Input arguments of an integrator [integratorIn] + enum IntegratorInput { + /// Differential state at the initial time [x0] + INTEGRATOR_X0, + /// Parameters [p] + INTEGRATOR_P, + /// Initial guess for the algebraic variable [z0] + INTEGRATOR_Z0, + /// Backward differential state at the final time [rx0] + INTEGRATOR_RX0, + /// Backward parameter vector [rp] + INTEGRATOR_RP, + /// Initial guess for the backwards algebraic variable [rz0] + INTEGRATOR_RZ0, + /// Number of input arguments of an integrator + INTEGRATOR_NUM_IN + }; + + /// Output arguments of an integrator [integratorOut] + enum IntegratorOutput { + /// Differential state at the final time [xf] + INTEGRATOR_XF, + /// Quadrature state at the final time [qf] + INTEGRATOR_QF, + /// Algebraic variable at the final time [zf] + INTEGRATOR_ZF, + /// Backward differential state at the initial time [rxf] + INTEGRATOR_RXF, + /// Backward quadrature state at the initial time [rqf] + INTEGRATOR_RQF, + /// Backward algebraic variable at the initial time [rzf] + INTEGRATOR_RZF, + /// Number of output arguments of an integrator + INTEGRATOR_NUM_OUT + }; +#endif // SWIG + + /// Forward declaration of internal class + class IntegratorInternal; + + // grep "addOption" integrator_internal.cpp | + // perl -pe 's/addOption\((.*?),(.*?), (.*?)\);(.*\/\/ (.*))?/* \1 \2 \3 ... \5\\n/' + + /** Integrator abstract base class + + @copydoc DAE_doc + + The Integrator class provides some additional functionality, such as getting the value + of the state and/or sensitivities at certain time points. + + \generalsection{Integrator} + \pluginssection{Integrator} + + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT Integrator : public Function { + public: + /// Default constructor + Integrator(); + + ///@} + /** \brief Integrator factory (new syntax, includes initialization) + * + * \param solver \pluginargument{Integrator} + * \param f dynamical system + * \parblock + * \copydoc scheme_DAEInput + * \copydoc scheme_DAEOutput + * \endparblock + */ + Integrator(const std::string& name, const std::string& solver, const Function& f, + const Dict& opts=Dict()); + Integrator(const std::string& name, const std::string& solver, + const std::pair& fg, const Dict& opts=Dict()); + Integrator(const std::string& name, const std::string& solver, + const SXDict& dae, const Dict& opts=Dict()); + Integrator(const std::string& name, const std::string& solver, + const MXDict& dae, const Dict& opts=Dict()); + ///@} + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Integrator factory, no initialization + * + * \param name \pluginargument{Integrator} + * \param f dynamical system + * \parblock + * \copydoc scheme_DAEInput + * \copydoc scheme_DAEOutput + * \endparblock + * \param g backwards system + * \parblock + * \copydoc scheme_RDAEInput + * \copydoc scheme_RDAEOutput + * \endparblock + */ + Integrator(const std::string& solver, const Function& f, const Function& g=Function()); +#endif // WITH_DEPRECATED_FEATURES + + /// Clone + Integrator clone() const; + + /// Print solver statistics + void printStats(std::ostream &stream=casadi::userOut()) const; + + /// Access functions of the node + IntegratorInternal* operator->(); + + /// Access functions of the node + const IntegratorInternal* operator->() const; + + /** \brief Reset the forward problem + * Time will be set to t0 and state to input(INTEGRATOR_X0) + */ + void reset(); + + /// Integrate forward until a specified time point + void integrate(double t_out); + + /** \brief Reset the backward problem + * + * Time will be set to tf and backward state to input(INTEGRATOR_RX0) + */ + void resetB(); + + /// Integrate backward until a specified time point + void integrateB(double t_out); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /** \brief Generate a augmented DAE system with \a nfwd forward sensitivities + * and \a nadj adjoint sensitivities + */ + std::pair getAugmented(int nfwd, int nadj); + + /// Get the DAE + Function getDAE(); + + /// Set a stop time for the forward integration + void setStopTime(double tf); + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; +} // namespace casadi + +#endif // CASADI_INTEGRATOR_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/integrator_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/integrator_internal.hpp new file mode 100755 index 0000000..896a438 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/integrator_internal.hpp @@ -0,0 +1,187 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_INTEGRATOR_INTERNAL_HPP +#define CASADI_INTEGRATOR_INTERNAL_HPP + +#include "integrator.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** \brief Internal storage for integrator related data + + @copydoc DAE_doc + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT + IntegratorInternal : public FunctionInternal, + public PluginInterface { + public: + /** \brief Constructor */ + IntegratorInternal(const Function& f, const Function& g); + + /** \brief Destructor */ + virtual ~IntegratorInternal()=0; + + /** \brief Clone */ + virtual IntegratorInternal* clone() const=0; + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief Create a new integrator */ + virtual IntegratorInternal* create(const Function& f, const Function& g) const = 0; + + /** \brief Print solver statistics */ + virtual void printStats(std::ostream &stream) const {} + + /** \brief Reset the forward problem and bring the time back to t0 */ + virtual void reset(); + + /** \brief Reset the backward problem and take time to tf */ + virtual void resetB(); + + /** \brief Integrate forward until a specified time point */ + virtual void integrate(double t_out) = 0; + + /** \brief Integrate backward until a specified time point */ + virtual void integrateB(double t_out) = 0; + + /** \brief evaluate */ + virtual void evaluate(); + + /** \brief Initialize */ + virtual void init(); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /// Is the class able to propagate seeds through the algorithm? + virtual bool spCanEvaluate(bool fwd) { return true;} + + ///@{ + /** \brief Generate a function that calculates \a nfwd forward derivatives */ + virtual Function getDerForward(const std::string& name, int nfwd, Dict& opts); + virtual int numDerForward() const { return 64;} + ///@} + + ///@{ + /** \brief Generate a function that calculates \a nadj adjoint derivatives */ + virtual Function getDerReverse(const std::string& name, int nadj, Dict& opts); + virtual int numDerReverse() const { return 64;} + ///@} + + /** \brief Set stop time for the integration */ + virtual void setStopTime(double tf); + + // Helper structure + struct AugOffset { + std::vector x, z, q, p, rx, rz, rq, rp; + }; + + /** \brief Set solver specific options to generated augmented integrators */ + virtual void setDerivativeOptions(Integrator& integrator, const AugOffset& offset); + + /** \brief Generate a augmented DAE system with \a nfwd forward sensitivities + * and \a nadj adjoint sensitivities */ + virtual std::pair getAugmented(int nfwd, int nadj, AugOffset& offset); + + /// Get offsets in augmented problem + AugOffset getAugOffset(int nfwd, int nadj); + + /// Create sparsity pattern of the extended Jacobian (forward problem) + Sparsity spJacF(); + + /// Create sparsity pattern of the extended Jacobian (backward problem) + Sparsity spJacG(); + + ///@{ + // Shorthands + DMatrix& x0() { return input(INTEGRATOR_X0);} + DMatrix& p() { return input(INTEGRATOR_P );} + DMatrix& z0() { return input(INTEGRATOR_Z0);} + DMatrix& rx0() { return input(INTEGRATOR_RX0);} + DMatrix& rp() { return input(INTEGRATOR_RP);} + DMatrix& rz0() { return input(INTEGRATOR_RZ0);} + DMatrix& xf() { return output(INTEGRATOR_XF);} + DMatrix& qf() { return output(INTEGRATOR_QF);} + DMatrix& zf() { return output(INTEGRATOR_ZF);} + DMatrix& rxf() { return output(INTEGRATOR_RXF);} + DMatrix& rqf() { return output(INTEGRATOR_RQF);} + DMatrix& rzf() { return output(INTEGRATOR_RZF);} + ///@} + + /// Number of states for the forward integration + int nx_, nz_, nq_; + + /// Number of states for the backward integration + int nrx_, nrz_, nrq_; + + /// Number of forward and backward parameters + int np_, nrp_; + + /// Integration horizon + double t0_, tf_; + + // Current time + double t_; + + /// ODE/DAE forward integration function + Function f_; + + /// ODE/DAE backward integration function, if any + Function g_; + + /// Integrator for sparsity pattern propagation + LinearSolver linsol_f_, linsol_g_; + + /// Options + bool print_stats_; + + // Creator function for internal class + typedef IntegratorInternal* (*Creator)(const Function& f, const Function& g); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_INTEGRATOR_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/io_interface.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/io_interface.hpp new file mode 100755 index 0000000..d83a2df --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/io_interface.hpp @@ -0,0 +1,290 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_IO_INTERFACE_HPP +#define CASADI_IO_INTERFACE_HPP + +#include "../sx/sx_element.hpp" +#include "../mx/mx.hpp" +#include "../options_functionality.hpp" +#include "../function/schemes_helpers.hpp" +#include "../function/io_scheme.hpp" + +#include + +namespace casadi { + + /** \brief Interface for accessing input and output data structures + \author Joel Andersson + \date 2013 + */ + template + class CASADI_EXPORT IOInterface { +#ifndef SWIG + protected: + // Helper functions + inline const Derived& self() const { return static_cast(*this); } + inline Derived& self() { return static_cast(*this); } +#endif // SWIG + public: + /** + * \defgroup iname + * \param[in] iname input name. Only allowed when an input scheme is set. + */ + + /** + * \defgroup oname + * \param[in] oname output name. Only allowed when an output scheme is set. + */ + + /** + * \defgroup iind + * \param[in] iind index within the range [0..nIn()-1] + */ + + /** + * \defgroup oind + * \param[in] oind index within the range [0..nOut()-1] + */ + + /** + * \defgroup Tvalset + * \param[in] val can be double, const std::vector&, const Matrix&, double * + */ + + /** + * \defgroup Tvalget + * \param[in] val can be double&, std::vector&, Matrix&, double * + */ + + /// \name Simple Getters & Setters + /// + /// @{ + /** \brief Get an input by index + * + * @copydoc iind + */ + Matrix getInput(int iind=0) const { return self().input(iind); } + /** \brief Get an input by name + * + * @copydoc iname + * + */ + Matrix getInput(const std::string &iname) const { return self().input(iname); } + + /** \brief Get an output by index + * + * @copydoc oind + */ + Matrix getOutput(int oind=0) const { return self().output(oind); } + /** \brief Get an output by name + * + * @copydoc oname + * + */ + Matrix getOutput(const std::string &oname) const { return self().output(oname); } + +#ifdef DOXYGENPROC + /** \brief Set an input by index + * + * @copydoc Tvalset + * @copydoc iind + */ + + void setInput(T val, int iind=0); + + /** \brief Set an output by index + * + * @copydoc Tvalset + * @copydoc oind + */ + void setOutput(T val, int oind=0); + + /** \brief Set an input by name + * + * @copydoc Tvalset + * @copydoc iname + * + */ + void setInput(T val, const std::string &iname); + + /** \brief Set an output by name + * + * @copydoc Tvalset + * @copydoc oname + * + */ + void setOutput(T val, const std::string &oname); +#endif + + /// @} + +/// \cond INTERNAL +#ifdef DOXYGENPROC + /// \name Advanced Getters + /// + /// @{ + + /** \brief Get an input by index + * + * @copydoc Tvalget + * @copydoc iind + */ + + void getInput(T val, int iind=0); + + /** \brief Get an output by index + * + * @copydoc Tvalget + * @copydoc oind + */ + void getOutput(T val, int oind=0); + + /** \brief Get an input by name + * + * @copydoc Tvalget + * @copydoc iname + * + */ + void getInput(T val, const std::string &iname); + + /** \brief Get an output by name + * + * @copydoc Tvalget + * @copydoc oname + * + */ + void getOutput(T val, const std::string &oname); + /// @} +#endif +/// \endcond + + +#define SETTERS_SUB_DUMMY(T) \ + void setInput(T val, int iind=0); \ + void setOutput(T val, int oind=0); \ + void setInput(T val, const std::string &iname); \ + void setOutput(T val, const std::string &oname); + +#define SETTERS_NZ(T) \ + void setInputNZ(T val, int iind=0) { \ + self().assertInit(); \ + try { \ + self().input(iind).setNZ(val); \ + } catch(std::exception& e) { \ + casadi_error(e.what() << "Occurred at iind = " << iind << "."); \ + } \ + } \ + void setOutputNZ(T val, int oind=0) { \ + self().assertInit(); self().output(oind).setNZ(val); \ + } \ + void setInputNZ(T val, const std::string &iname) { \ + setInputNZ(val, self().inputIndex(iname)); \ + } \ + void setOutputNZ(T val, const std::string &oname) { \ + setOutputNZ(val, self().outputIndex(oname)); \ + } + +#define SETTERS_SUB(T) \ + void setInput(T val, int iind=0) { \ + self().assertInit(); \ + try { \ + self().input(iind).set(val); \ + } catch(std::exception& e) { \ + casadi_error(e.what() << "Occurred at iind = " << iind << "."); \ + } \ + } \ + void setOutput(T val, int oind=0) { \ + self().assertInit(); self().output(oind).set(val); \ + } \ + void setInput(T val, const std::string &iname) { \ + setInput(val, self().inputIndex(iname)); \ + } \ + void setOutput(T val, const std::string &oname) { \ + setOutput(val, self().outputIndex(oname)); \ + } + +#ifndef DOXYGENPROC +#ifndef SWIG + SETTERS_SUB_DUMMY(const double*) + SETTERS_SUB_DUMMY(const std::vector&) + SETTERS_NZ(const double*) // NOLINT(readability/casting) - false positive +#endif // SWIG + SETTERS_SUB(const Matrix&) + SETTERS_NZ(const Matrix&) +#endif // DOXYGENPROC + +#undef SETTERS_NZ +#undef SETTERS_SUB +#undef SETTERS_SUB_DUMMY + +#define GETTERS_NZ(T) \ + void getInputNZ(T val, int iind=0) const { \ + self().assertInit(); self().input(iind).getNZ(val); \ + } \ + void getOutputNZ(T val, int oind=0) const { \ + self().assertInit(); self().output(oind).getNZ(val); \ + } \ + void getInputNZ(T val, const std::string &iname) const { \ + getInputNZ(val, self().inputIndex(iname)); \ + } \ + void getOutputNZ(T val, const std::string &oname) const { \ + getOutputNZ(val, self().outputIndex(oname)); \ + } + +#define GETTERS_SUB(T) \ + void getInput(T val, int iind=0) const { \ + self().assertInit(); self().input(iind).get(val); \ + } \ + void getOutput(T val, int oind=0) const { \ + self().assertInit(); self().output(oind).get(val); \ + } \ + void getInput(T val, const std::string &iname) const { \ + getInput(val, self().inputIndex(iname)); \ + } \ + void getOutput(T val, const std::string &oname) const { \ + getOutput(val, self().outputIndex(oname)); \ + } + +#ifndef DOXYGENPROC +#ifndef SWIG +GETTERS_SUB(double&) +#ifndef SWIG +GETTERS_NZ(double*) // NOLINT(readability/casting) - false positive +GETTERS_NZ(std::vector&) +#endif // SWIG +GETTERS_SUB(Matrix&) +#endif // SWIG +#endif // DOXYGENPROC +#undef GETTERS_NZ +#undef GETTERS_SUB + + }; + + +} // namespace casadi + + +#endif // CASADI_IO_INTERFACE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/io_scheme.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/io_scheme.hpp new file mode 100755 index 0000000..e36daa0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/io_scheme.hpp @@ -0,0 +1,102 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_IO_SCHEME_HPP +#define CASADI_IO_SCHEME_HPP + +#include "../shared_object.hpp" +#include "schemes_metadata.hpp" +#include +#include +#include + +namespace casadi { + inline std::vector + IOScheme(InputOutputScheme scheme) { + int sz = getSchemeSize(scheme); + std::vector data(sz); + for (int i=0; i + IOScheme(const std::vector &entries=std::vector(), + const std::vector &descriptions=std::vector()) { + if (descriptions.empty()) { + return entries; + } else { + casadi_assert(entries.size()==descriptions.size()); + std::vector data=entries; + for (size_t i=0; i!=entries.size(); ++i) { + data[i] += ":" + descriptions[i]; + } + return data; + } + } + +#ifndef SWIGPYTHON + inline std::vector + IOScheme(const std::string &arg_s0, const std::string &arg_s1="", + const std::string &arg_s2="", const std::string &arg_s3="", + const std::string &arg_s4="", const std::string &arg_s5="", + const std::string &arg_s6="", const std::string &arg_s7="", + const std::string &arg_s8="", const std::string &arg_s9="", + const std::string &arg_s10="", const std::string &arg_s11="", + const std::string &arg_s12="", const std::string &arg_s13="", + const std::string &arg_s14="", const std::string &arg_s15="", + const std::string &arg_s16="", const std::string &arg_s17="", + const std::string &arg_s18="", const std::string &arg_s19="") { + std::vector k; + if (arg_s0!="") { k.push_back(arg_s0);} + if (arg_s1!="") { k.push_back(arg_s1);} + if (arg_s2!="") { k.push_back(arg_s2);} + if (arg_s3!="") { k.push_back(arg_s3);} + if (arg_s4!="") { k.push_back(arg_s4);} + if (arg_s5!="") { k.push_back(arg_s5);} + if (arg_s6!="") { k.push_back(arg_s6);} + if (arg_s7!="") { k.push_back(arg_s7);} + if (arg_s8!="") { k.push_back(arg_s8);} + if (arg_s9!="") { k.push_back(arg_s9);} + if (arg_s10!="") { k.push_back(arg_s10);} + if (arg_s11!="") { k.push_back(arg_s11);} + if (arg_s12!="") { k.push_back(arg_s12);} + if (arg_s13!="") { k.push_back(arg_s13);} + if (arg_s14!="") { k.push_back(arg_s14);} + if (arg_s15!="") { k.push_back(arg_s15);} + if (arg_s16!="") { k.push_back(arg_s16);} + if (arg_s17!="") { k.push_back(arg_s17);} + if (arg_s18!="") { k.push_back(arg_s18);} + if (arg_s19!="") { k.push_back(arg_s19);} + return k; + } +#endif // SWIG + +} // namespace casadi + +#endif // CASADI_IO_SCHEME_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/kernel_sum_2d.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/kernel_sum_2d.hpp new file mode 100755 index 0000000..782aeb8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/kernel_sum_2d.hpp @@ -0,0 +1,90 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_KERNEL_SUM_2D_HPP +#define CASADI_KERNEL_SUM_2D_HPP + +#include "function.hpp" + +namespace casadi { + + /** \brief Forward declaration of internal class */ + class KernelSum2DInternal; + + /** KernelSum2D + + Consider a dense matrix V. + + KernelSum computes + + F(V,X) = sum_i sum_j f ( [i;j], V(i,j), X) + + with X: [x;y] + + where the summation is taken for all entries (i,j) + that are a distance r away from X. + + This function assumes that V is fixed: + sensitivities with respect to it are not computed. + + This allows for improved speed of evaluation. + + Having V fixed is a common use case: + V may be a large bitmap (observation), + onto which a kernel is fitted. + + Summation does not occur outside the image. + Runtime will not grow after distance r grows large enough to contian the whole image. + + + \author Joris Gillis + \date 2015 + */ + class CASADI_EXPORT KernelSum2D : public Function { + public: + /** \brief Default constructor */ + KernelSum2D(); + + /** \brief Constructor (generic kernel_sum_2d) */ + KernelSum2D(const std::string& name, const Function& f, + const std::pair & size, + double r, + int n, + const Dict& opts=Dict()); + + + /** \brief Access functions of the node */ + KernelSum2DInternal* operator->(); + + /** \brief Const access functions of the node */ + const KernelSum2DInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; + +} // namespace casadi + +#endif // CASADI_KERNEL_SUM_2D_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/kernel_sum_2d_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/kernel_sum_2d_internal.hpp new file mode 100755 index 0000000..c41eeba --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/kernel_sum_2d_internal.hpp @@ -0,0 +1,107 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_KERNEL_SUM_2D_INTERNAL_HPP +#define CASADI_KERNEL_SUM_2D_INTERNAL_HPP + +#include "kernel_sum_2d.hpp" +#include "function_internal.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** KernelSum2D statement + \author Joris Gillis + \date 2015 + */ + class CASADI_EXPORT KernelSum2DInternal : public FunctionInternal { + friend class KernelSum2D; + public: + + /** \brief Constructor (generic kernel_sum_2d) */ + KernelSum2DInternal(const Function& f, + const std::pair & size, + double r, + int n); + + /** \brief clone function */ + virtual KernelSum2DInternal* clone() const { return new KernelSum2DInternal(*this);} + + /** \brief Destructor */ + virtual ~KernelSum2DInternal(); + + /** \brief Initialize */ + virtual void init(); + + /** \brief Evaluate numerically, work vectors given */ + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Is the class able to propagate seeds through the algorithm? */ + virtual bool spCanEvaluate(bool fwd) { return fwd; } + + ///@{ + /** \brief Generate a function that calculates \a nfwd forward derivatives */ + virtual Function getDerForward(const std::string& name, int nfwd, Dict& opts); + virtual int numDerForward() const { return 64;} + ///@} + + ///@{ + /** \brief Generate a function that calculates \a nadj adjoint derivatives */ + virtual Function getDerReverse(const std::string& name, int nadj, Dict& opts); + virtual int numDerReverse() const { return 64;} + ///@} + + /** \brief Print description */ + virtual void print(std::ostream &stream) const; + + /** \brief Generate code for the declarations of the C function */ + virtual void generateDeclarations(CodeGenerator& g) const; + + /** \brief Generate code for the body of the C function */ + virtual void generateBody(CodeGenerator& g) const; + + // Default case; + Function f_; + + std::pair size_; + + double r_; + + int n_; + + int nnz_out_; + + /// Nonzero step for outputs + std::vector step_out_; + + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_KERNEL_SUM_2D_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/linear_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/linear_solver.hpp new file mode 100755 index 0000000..ca2c9d1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/linear_solver.hpp @@ -0,0 +1,179 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_LINEAR_SOLVER_HPP +#define CASADI_LINEAR_SOLVER_HPP + +#include "function.hpp" + +/** \defgroup LinearSolver_doc + * + * Solves the linear system A*X = B or A^T*X = B for X + * with A square and non-singular + * + * If A is structurally singular, an error will be thrown during init. + * If A is numerically singular, the prepare step will fail. + * + * The usual procedure to use LinearSolver is: \n + * -# init() + * -# set the first input (A) + * -# prepare() + * -# set the second input (b) + * -# solve() + * -# Repeat steps 4 and 5 to work with other b vectors. + * + * The method evaluate() combines the prepare() and solve() step and is + * therefore more expensive if A is invariant. + * +*/ + +namespace casadi { +#ifndef SWIG + + /// Input arguments of a linear solver [linsolIn] + enum LinsolInput { + /// The square matrix A: sparse, (n x n). [A] + LINSOL_A, + /// The right-hand-side matrix b: dense, (n x m) [B] + LINSOL_B, + LINSOL_NUM_IN}; + + /// Output arguments of a linear solver [linsolOut] + enum LinsolOutput { + /// Solution to the linear system of equations [X] + LINSOL_X, + LINSOL_NUM_OUT}; +#endif // SWIG + + // Forward declaration of internal class + class LinearSolverInternal; + + /** \brief Base class for the linear solver classes + + * @copydoc LinearSolver_doc + + \generalsection{LinearSolver} + \pluginssection{LinearSolver} + + \author Joel Andersson + \date 2010-2013 + */ + class CASADI_EXPORT LinearSolver : public Function { + public: + + /// \cond INTERNAL + /// Default (empty) constructor + LinearSolver(); + /// \endcond + + ///@{ + /** \brief Create a linear solver given a sparsity pattern + * (new syntax, includes initialization) + * \param solver \pluginargument{LinearSolver} + */ + LinearSolver(const std::string& name, const std::string& solver, + const Sparsity& sp, const Dict& opts=Dict()); + LinearSolver(const std::string& name, const std::string& solver, + const Sparsity& sp, int nrhs, const Dict& opts=Dict()); + ///@} + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Create a linear solver given a sparsity pattern + * No initialization + * \param solver \pluginargument{LinearSolver} + */ + LinearSolver(const std::string& solver, const Sparsity& sp, int nrhs=1); +#endif // WITH_DEPRECATED_FEATURES + + /// \cond INTERNAL + /// Access functions of the node + LinearSolverInternal* operator->(); + + /// Const access functions of the node + const LinearSolverInternal* operator->() const; + /// \endcond + + /// Factorize the matrix + void prepare(); + + /// Solve the system of equations, internal vector + void solve(bool transpose=false); + + /// \cond INTERNAL +#ifndef SWIG + /// Solve the factorized system of equations + void solve(double* x, int nrhs=1, bool transpose=false); + + ///@{ + /// Propagate sparsity through a linear solve + void spSolve(bvec_t* X, const bvec_t* B, bool transpose=false) const; + void spSolve(DMatrix& X, const DMatrix& B, bool transpose=false) const; + ///@} + +#endif // SWIG + /// \endcond + + /// Create a solve node + MX solve(const MX& A, const MX& B, bool transpose=false); + + /// Check if prepared + bool prepared() const; + +#ifndef SWIG + /** \brief Solve the system of equations Lx = b + Only when a Cholesky factorization is available + */ + void solveL(double* x, int nrhs, bool transpose); +#endif // SWIG + + /** \brief Obtain a symbolic Cholesky factorization + Only for Cholesky solvers + */ + Sparsity getFactorizationSparsity(bool transpose=false) const; + + /** \brief Obtain a numeric Cholesky factorization + Only for Cholesky solvers + */ + DMatrix getFactorization(bool transpose=false) const; + +#ifndef SWIG + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); +#endif // SWIG + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + }; + +} // namespace casadi + +#endif // CASADI_LINEAR_SOLVER_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/linear_solver_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/linear_solver_internal.hpp new file mode 100755 index 0000000..c26cace --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/linear_solver_internal.hpp @@ -0,0 +1,149 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_LINEAR_SOLVER_INTERNAL_HPP +#define CASADI_LINEAR_SOLVER_INTERNAL_HPP + +#include "linear_solver.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** Internal class + @copydoc LinearSolver_doc + */ + class CASADI_EXPORT + LinearSolverInternal : public FunctionInternal, + public PluginInterface { + public: + /// Constructor + LinearSolverInternal(const Sparsity& sparsity, int nrhs); + + /// Destructor + virtual ~LinearSolverInternal(); + + /// Clone + virtual LinearSolverInternal* clone() const { return new LinearSolverInternal(*this);} + + /// Initialize + virtual void init(); + + /// Solve the system of equations + virtual void evaluate(); + + /// Prepare the factorization + virtual void prepare() {} + + /// Solve the system of equations, using internal vector + virtual void solve(bool transpose); + + /// Solve the system of equations + virtual void solve(double* x, int nrhs, bool transpose); + + /// Create a solve node + MX solve(const MX& A, const MX& B, bool transpose); + + /// Evaluate SX, possibly transposed + virtual void evalSXLinsol(const SXElement** arg, SXElement** res, + int* iw, SXElement* w, bool tr, int nrhs); + + /** \brief Quickfix to avoid segfault, #1552 */ + virtual bool canEvalSX() const {return true;} + + /// Evaluate SX + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w) { + evalSXLinsol(arg, res, iw, w, false, output(LINSOL_X).size2()); + } + + /** \brief Calculate forward mode directional derivatives */ + virtual void callForwardLinsol(const std::vector& arg, const std::vector& res, + const std::vector >& fseed, + std::vector >& fsens, bool tr); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void callReverseLinsol(const std::vector& arg, const std::vector& res, + const std::vector >& aseed, + std::vector >& asens, bool tr); + + /** \brief Propagate sparsity forward */ + virtual void spFwdLinsol(const bvec_t** arg, bvec_t** res, + int* iw, bvec_t* w, bool tr, int nrhs); + + /** \brief Propagate sparsity backwards */ + virtual void spAdjLinsol(bvec_t** arg, bvec_t** res, + int* iw, bvec_t* w, bool tr, int nrhs); + + ///@{ + /// Propagate sparsity through a linear solve + void spSolve(bvec_t* X, const bvec_t* B, bool transpose) const; + void spSolve(DMatrix& X, const DMatrix& B, bool transpose) const; + ///@} + + + /// Solve the system of equations Lx = b + virtual void solveL(double* x, int nrhs, bool transpose); + + /// Obtain a symbolic Cholesky factorization + virtual Sparsity getFactorizationSparsity(bool transpose) const; + + /// Obtain a numeric Cholesky factorization + virtual DMatrix getFactorization(bool transpose) const; + + /// Dulmage-Mendelsohn decomposition + std::vector rowperm_, colperm_, rowblock_, colblock_; + + /// Is prepared + bool prepared_; + + /// Get sparsity pattern + int nrow() const { return input(LINSOL_A).size1();} + int ncol() const { return input(LINSOL_A).size2();} + int nnz() const { return input(LINSOL_A).nnz();} + const int* row() const { return input(LINSOL_A).row();} + const int* colind() const { return input(LINSOL_A).colind();} + + // Creator function for internal class + typedef LinearSolverInternal* (*Creator)(const Sparsity& sp, int nrhs); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + }; + + +} // namespace casadi +/// \endcond + +#endif // CASADI_LINEAR_SOLVER_INTERNAL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lp_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lp_internal.hpp new file mode 100755 index 0000000..979559a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lp_internal.hpp @@ -0,0 +1,104 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_LP_INTERNAL_HPP +#define CASADI_LP_INTERNAL_HPP + +#include "lp_solver.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL + + +namespace casadi { + + /// Structure specification of an LP + enum LPStruct { + /// The matrix A: sparse + LP_STRUCT_A, + LP_STRUCT_NUM}; + + + /// Internal class + class CASADI_EXPORT + LpSolverInternal : public FunctionInternal, + public PluginInterface { + public: + + // Constructor + LpSolverInternal(const std::map &st); + + // Destructor + virtual ~LpSolverInternal() = 0; + + // Initialize + virtual void init(); + + // Solve the system of equations + virtual void evaluate(); + + // Solve the system of equations + virtual void solve(); + + /// \brief Check if the numerical values of the supplied bounds make sense + virtual void checkInputs() const; + + // Creator function for internal class + typedef LpSolverInternal* (*Creator)(const std::map& st); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "lp";} + + /** \brief Get default input value */ + virtual double defaultInput(int ind) const; + + protected: + + /// Problem structure + std::vector st_; + + /// Number of decision variables + int n_; + + /// The number of constraints (counting both equality and inequality) == A.size1() + int nc_; +}; + + +} // namespace casadi +/// \endcond + +#endif // CASADI_LP_INTERNAL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lp_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lp_solver.hpp new file mode 100755 index 0000000..e726fe9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lp_solver.hpp @@ -0,0 +1,145 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_LP_SOLVER_HPP +#define CASADI_LP_SOLVER_HPP + +#include "function.hpp" + + +/** \defgroup LpSolver_doc + + Solves the following linear problem: + + \verbatim + min c' x + x + + subject to + LBA <= A x <= UBA + LBX <= x <= UBX + + with x ( n x 1) + c ( n x 1 ) + A sparse matrix ( nc x n) + LBA, UBA dense vector (nc x 1) + LBX, UBX dense vector (n x 1) + + n: number of decision variables (x) + nc: number of constraints (A) + + \endverbatim + + +*/ + +namespace casadi { +#ifndef SWIG + + /// Input arguments of a LP problem [lpIn] + enum LpSolverInput { + /// The vector c: dense (n x 1) [c] + LP_SOLVER_C, + /// The matrix A: sparse, (nc x n) - product with x must be dense. [a] + LP_SOLVER_A, + /// dense, (nc x 1) [lba] + LP_SOLVER_LBA, + /// dense, (nc x 1) [uba] + LP_SOLVER_UBA, + /// dense, (n x 1) [lbx] + LP_SOLVER_LBX, + /// dense, (n x 1) [ubx] + LP_SOLVER_UBX, + LP_SOLVER_NUM_IN}; + + /// Output arguments of an LP Solver [lpOut] + enum LpSolverOutput { + /// The primal solution [x] + LP_SOLVER_X, + /// The optimal cost [cost] + LP_SOLVER_COST, + /// The dual solution corresponding to linear bounds [lam_a] + LP_SOLVER_LAM_A, + /// The dual solution corresponding to simple bounds [lam_x] + LP_SOLVER_LAM_X, + LP_SOLVER_NUM_OUT}; +#endif // SWIG + + // Forward declaration of internal class + class LpSolverInternal; + + /** \brief LpSolver + + + @copydoc LpSolver_doc + + \generalsection{LpSolver} + \pluginssection{LpSolver} + + \author Joris Gillis + \date 2013 + */ + class CASADI_EXPORT LpSolver : public Function { + public: + + /// Default constructor + LpSolver(); + + /** \brief Constructor (new syntax, includes initialization) + * \param solver \pluginargument{LpSolver} + * \param st \structargument{LP} + */ + LpSolver(const std::string& name, const std::string& solver, + const std::map& st, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief[DEPRECATED] Constructor, no initialization + * \param solver \pluginargument{LpSolver} + * \param st \structargument{LP} + */ + LpSolver(const std::string& solver, const std::map& st); +#endif // WITH_DEPRECATED_FEATURES + + /// Access functions of the node + LpSolverInternal* operator->(); + const LpSolverInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + }; + +} // namespace casadi + +#endif // CASADI_LP_SOLVER_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dle_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dle_internal.hpp new file mode 100755 index 0000000..90ae2a1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dle_internal.hpp @@ -0,0 +1,155 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_LR_DLE_INTERNAL_HPP +#define CASADI_LR_DLE_INTERNAL_HPP + +#include "lr_dle_solver.hpp" +#include "lr_dle_internal.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /// Structure specification of a DLE + enum LrDleStruct { + /// The matrix A + LR_DLE_STRUCT_A, + /// The matrix V + LR_DLE_STRUCT_V, + /// The matrix C (defaults to unity) + LR_DLE_STRUCT_C, + /// H matrix: horizontal stack of all Hi + LR_DLE_STRUCT_H, + LR_DLE_STRUCT_NUM}; + + /** \brief Internal storage for LrDleSolver related data + + @copydoc DLE_doc + \author Joris Gillis + \date 2014 + */ + class CASADI_EXPORT + LrDleInternal : public FunctionInternal, + public PluginInterface { + public: + /** \brief Constructor + * \param st \structargument{Dle} + */ + LrDleInternal(const std::map& st, int nrhs=1, bool transp=false); + + /** \brief Destructor */ + virtual ~LrDleInternal()=0; + + /** \brief Clone */ + virtual LrDleInternal* clone() const=0; + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief Create a new solver */ + virtual LrDleInternal* create(const std::map& st) const = 0; + + /** \brief Print solver statistics */ + virtual void printStats(std::ostream &stream) const {} + + /** \brief evaluate */ + virtual void evaluate()=0; + + /** \brief Initialize */ + virtual void init(); + + /// Problem structure + std::vector st_; + + /// Sparsity of A + Sparsity A_; + + /// Sparsity of V + Sparsity V_; + + /// Sparsity of C + Sparsity C_; + + /// Sparsity of H + Sparsity H_; + + /// Flag if C is given + bool with_C_; + + /// Flag if H is given + bool with_H_; + + /// Assume positive definiteness of P_i + bool pos_def_; + + /// Throw an error when system is unstable + bool error_unstable_; + + /// Margin for instability detection + double eps_unstable_; + + /// Number of right hand sides + int nrhs_; + + /// Tranpose the system? + bool transp_; + + // Creator function for internal class + typedef LrDleInternal* (*Creator)(const std::map& st); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "lrdle";} + + /// List of columnsizes of Hi + std::vector Hs_; + + + std::vector Hv_; + std::vector Hi_; + + std::vector Pv_; + std::vector Pi_; + + /// Get the resulting sparsity + static Sparsity getSparsity(const std::map& st, + const std::vector &Hs=std::vector()); + + }; + +} // namespace casadi +/// \endcond +#endif // CASADI_LR_DLE_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dle_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dle_solver.hpp new file mode 100755 index 0000000..e8bd468 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dle_solver.hpp @@ -0,0 +1,143 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_LR_DLE_SOLVER_HPP +#define CASADI_LR_DLE_SOLVER_HPP + +#include "function.hpp" + +/** \defgroup LR_DLE_doc Low Rank Discrete periodic Lyapunov Equation solver + + + \verbatim + A in R^(n x n) + V in S^m + C in R^(n x m) + Hi in R^(n x Hsi) + \endverbatim + + finds \f$P\f$ that satisfies: + + \verbatim + P = A P A' + C V C' + \endverbatim + + and outputs + + Yi = Hi^T P Hi + + +*/ +namespace casadi { +#ifndef SWIG + + /// Input arguments of a \e dle solver [lrdleIn] + enum LR_DLEInput { + /// A matrix [a] + LR_DLE_A, + /// V matrix [v] + LR_DLE_V, + /// C matrix [c] + LR_DLE_C, + /// H matrix: horizontal stack of all Hi [h] + LR_DLE_H, + LR_DLE_NUM_IN + }; + + /// Output arguments of a \e dle solver [lrdleOut] + enum LR_DLEOutput { + /// Y matrix, block diagonal form [y] + LR_DLE_Y, + LR_DLE_NUM_OUT + }; +#endif // SWIG + + /// Forward declaration of internal class + class LrDleInternal; + + /** \brief Base class for Low-rank Discrete Lyapunov Equation Solvers + + @copydoc LR_DLE_doc + + \generalsection{LrDleSolver} + \pluginssection{LrDleSolver} + + \author Joris Gillis + \date 2014 + + */ + class CASADI_EXPORT LrDleSolver : public Function { + public: + /// Default constructor + LrDleSolver(); + + /// Clone + LrDleSolver clone() const; + + /** \brief Constructor (new syntax, includes initialization) + * \param solver \pluginargument{LrDleSolver} + * \param st \structargument{LrDle} + */ + LrDleSolver(const std::string& name, const std::string& solver, + const std::map& st, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor (no initialization) + * \param solver \pluginargument{LrDleSolver} + * \param st \structargument{LrDle} + */ + LrDleSolver(const std::string& solver, + const std::map& st); +#endif // WITH_DEPRECATED_FEATURES + + /// Print solver statistics + void printStats(std::ostream &stream=casadi::userOut()) const; + + /// Access functions of the node + LrDleInternal* operator->(); + + /// Access functions of the node + const LrDleInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /// Get the resulting sparsity + static Sparsity getSparsity(const std::map& st, + const std::vector &Hs=std::vector()); + }; + +} // namespace casadi + +#endif // CASADI_LR_DLE_SOLVER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dple_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dple_internal.hpp new file mode 100755 index 0000000..bbcc027 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dple_internal.hpp @@ -0,0 +1,163 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_LR_DPLE_INTERNAL_HPP +#define CASADI_LR_DPLE_INTERNAL_HPP + +#include "lr_dple_solver.hpp" +#include "lr_dple_internal.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /// Structure specification of a DPLE + enum LrDpleVecStruct { + /// Sparsities for A_i, block diagonal form + LR_Dple_STRUCT_A, + /// Sparsities for V_i, block diagonal form + LR_Dple_STRUCT_V, + /// Sparsities for C_i (defaults to unity), block diagonal form + LR_Dple_STRUCT_C, + /// Sparsities for H_i (defaults to unity), block diagonal form + LR_Dple_STRUCT_H, + LR_Dple_STRUCT_NUM}; + + /** \brief Internal storage for LrDpleSolver related data + + @copydoc DPLE_doc + \author Joris Gillis + \date 2014 + */ + class CASADI_EXPORT + LrDpleInternal : public FunctionInternal, + public PluginInterface { + public: + /** \brief Constructor + * \param st \structargument{Dple} + */ + LrDpleInternal(const std::map > & st, + int nrhs=1, bool transp=false); + + /** \brief Destructor */ + virtual ~LrDpleInternal()=0; + + /** \brief Clone */ + virtual LrDpleInternal* clone() const=0; + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief Create a new solver */ + virtual LrDpleInternal* create(const std::map > & st) const = 0; + + /** \brief Print solver statistics */ + virtual void printStats(std::ostream &stream) const {} + + /** \brief evaluate */ + virtual void evaluate()=0; + + /** \brief Initialize */ + virtual void init(); + + /// Structure of Dple + std::vector > st_; + + /// List of sparsities of A_i + std::vector< Sparsity > A_; + + /// List of sparsities of V_i + std::vector< Sparsity > V_; + + /// List of sparsities of C_i + std::vector< Sparsity > C_; + + /// List of sparsities of H_i + std::vector< Sparsity > H_; + + /// List of columnsizes of Hi + std::vector< std::vector > Hs_; + + /// List of indices of Hs_i + std::vector Hsi_; + + /// Flattened list of Hs + std::vector Hss_; + + /// Period + int K_; + + /// Constant dimensions + bool const_dim_; + + /// Assume positive definiteness of P_i + bool pos_def_; + + /// Throw an error when system is unstable + bool error_unstable_; + + /// Margin for instability detection + double eps_unstable_; + + /// Number of right hand sides + int nrhs_; + + /// Tranpose the system? + bool transp_; + + /// Flag if C is given + bool with_C_; + + /// Flag if H is given + bool with_H_; + + // Creator function for internal class + typedef LrDpleInternal* (*Creator)(const std::map > & st); + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "lrdple";} + + /// Get the resulting sparsity + static std::vector + getSparsity(const std::map >& st, + const std::vector< std::vector > &Hs + = std::vector< std::vector >()); + }; + +} // namespace casadi +/// \endcond +#endif // CASADI_LR_DPLE_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dple_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dple_solver.hpp new file mode 100755 index 0000000..853b513 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/lr_dple_solver.hpp @@ -0,0 +1,138 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_LR_DPLE_SOLVER_HPP +#define CASADI_LR_DPLE_SOLVER_HPP + +#include "function.hpp" + +/** \defgroup DPLE_doc Discrete periodic Lyapunov Equation solver + + + Given matrices \f$A_k\f$ and symmetric \f$V_k, k = 0..K-1\f$ + + \verbatim + A_k in R^(n x n) + V_k in R^n + \endverbatim + + provides all of \f$P_k\f$ that satisfy: + + \verbatim + P_0 = A_(K-1)*P_(K-1)*A_(K-1)' + V_k + P_k+1 = A_k*P_k*A_k' + V_k for k = 1..K-1 + \endverbatim + + +*/ +namespace casadi { +#ifndef SWIG + + /// Input arguments of a \e dple solver [lrdpleIn] + enum LR_DPLEInput { + /// A matrices (horzcat when const_dim, diagcat otherwise) [a] + LR_DPLE_A, + /// V matrices (horzcat when const_dim, diagcat otherwise) [v] + LR_DPLE_V, + /// C matrix [c] + LR_DPLE_C, + /// H matrix: horizontal stack of all Hi [h] + LR_DPLE_H, + LR_DPLE_NUM_IN + }; + + /// Output arguments of a \e dple solver [lrdpleOut] + enum LR_DPLEOutput { + /// Lyapunov matrix (horzcat when const_dim, diagcat otherwise) (Cholesky of P if pos_def) [y] + LR_DPLE_Y, + /// Number of arguments. + LR_DPLE_NUM_OUT + }; +#endif // SWIG + + /// Forward declaration of internal class + class LrDpleInternal; + + /** \brief Base class for Discrete Periodic Lyapunov Equation Solvers + + @copydoc DPLE_doc + + \generalsection{LrDpleSolver} + \pluginssection{LrDpleSolver} + + \author Joris Gillis + \date 2014 + + */ + class CASADI_EXPORT LrDpleSolver : public Function { + public: + /// Default constructor + LrDpleSolver(); + + /// Clone + LrDpleSolver clone() const; + + /** \brief Constructor (new syntax, includes initialization) + * \param solver \pluginargument{LrDpleSolver} + * \param st \structargument{LrDple} + */ + LrDpleSolver(const std::string& name, const std::string& solver, + const std::map >& st, + const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor (no initialization) + * \param solver \pluginargument{LrDpleSolver} + * \param st \structargument{LrDple} + */ + LrDpleSolver(const std::string& solver, + const std::map >& st); +#endif // WITH_DEPRECATED_FEATURES + + /// Print solver statistics + void printStats(std::ostream &stream=casadi::userOut()) const; + + /// Access functions of the node + LrDpleInternal* operator->(); + + /// Access functions of the node + const LrDpleInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + }; + +} // namespace casadi + +#endif // CASADI_LR_DPLE_SOLVER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/map.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/map.hpp new file mode 100755 index 0000000..b62c91b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/map.hpp @@ -0,0 +1,68 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MAP_HPP +#define CASADI_MAP_HPP + +#include "function.hpp" + +namespace casadi { + + /** \brief Forward declaration of internal class */ + class MapReduce; + + /** Map + \author Joris Gillis + \date 2015 + */ + class CASADI_EXPORT Map : public Function { + public: + /** \brief Default constructor */ + Map(); + + /** \brief Constructor (any type of map) */ + Map(const std::string& name, const Function& f, int n, + const Dict& opts=Dict()); + + /** \brief Constructor (generic map) */ + Map(const std::string& name, const Function& f, + int n, + const std::vector &repeat_in, + const std::vector &repeat_out, + const Dict& opts=Dict()); + + /** \brief Access functions of the node */ + MapReduce* operator->(); + + /** \brief Const access functions of the node */ + const MapReduce* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; + +} // namespace casadi + +#endif // CASADI_MAP_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/map_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/map_internal.hpp new file mode 100755 index 0000000..4cf6e72 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/map_internal.hpp @@ -0,0 +1,224 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MAP_INTERNAL_HPP +#define CASADI_MAP_INTERNAL_HPP + +#include "map.hpp" +#include "function_internal.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** A map Base class for different map operations + \author Joel Andersson + \date 2015 + */ + class CASADI_EXPORT MapBase : public FunctionInternal { + public: + // Create function (use instead of constructor) + static MapBase* create(const Function& f, int n, const Dict& opts); + + /** \brief Destructor */ + virtual ~MapBase(); + + /** \brief Initialize */ + virtual void init(); + + protected: + // Constructor (protected, use create function above) + MapBase(const Function& f, int n); + + // The function which is to be evaluated in parallel + Function f_; + + /// Number of Function inputs + int n_in_; + + /// Number of Function outputs + int n_out_; + + // Number of times to evaluate this function + int n_; + }; + + /** A map Map for evaluating a function serially + \author Joel Andersson + \date 2015 + */ + class CASADI_EXPORT MapSerial : public MapBase { + friend class MapBase; + protected: + // Constructor (protected, use create function in MapBase) + MapSerial(const Function& f, int n) : MapBase(f, n) {} + + /** \brief Destructor */ + virtual ~MapSerial(); + + /** \brief clone function */ + virtual MapSerial* clone() const { return new MapSerial(*this);} + + /** \brief Evaluate or propagate sparsities */ + template + void evalGen(const T** arg, T** res, int* iw, T* w); + + /** \brief Evaluate numerically, work vectors given */ + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /** \brief evaluate symbolically while also propagating directional derivatives */ + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Initialize */ + virtual void init(); + }; + +#ifdef WITH_OPENMP + /** A map Evaluate in parallel using OpenMP + Inherits from MapSerial to allow fallback to serial methods + \author Joel Andersson + \date 2015 + */ + class CASADI_EXPORT MapOmp : public MapSerial { + friend class MapBase; + protected: + // Constructor (protected, use create function in MapBase) + MapOmp(const Function& f, int n) : MapSerial(f, n) {} + + /** \brief clone function */ + virtual MapOmp* clone() const { return new MapOmp(*this);} + + /** \brief Destructor */ + virtual ~MapOmp(); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /** \brief Initialize */ + virtual void init(); + }; +#endif // WITH_OPENMP + + /** A map operation that can also reduce certain arguments + \author Joris Gillis + \date 2015 + */ + class CASADI_EXPORT MapReduce : public MapBase { + public: + /** Types of parallelization supported */ + enum ParallelizationType { + PARALLELIZATION_SERIAL, + PARALLELIZATION_OMP + }; + + /** \brief Constructor (generic map) */ + MapReduce(const Function& f, int n, + const std::vector &repeat_in, const std::vector &repeat_out); + + /** \brief clone function */ + virtual MapReduce* clone() const { return new MapReduce(*this);} + + /** \brief Destructor */ + virtual ~MapReduce(); + + /** \brief Initialize */ + virtual void init(); + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w, + void (FunctionInternal::*ptrEval)(const T** arg, T** res, int* iw, T* w), + R reduction); + + /** \brief Evaluate numerically, work vectors given */ + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /** \brief Quickfix to avoid segfault, #1552 */ + virtual bool canEvalSX() const {return true;} + + /** \brief Evaluate symbolically, SXElement type, possibly nonmatching sparsity patterns */ + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Evaluate symbolically, MX type */ + //virtual void evalMX(const std::vector& arg, std::vector& res); + + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Is the class able to propagate seeds through the algorithm? */ + virtual bool spCanEvaluate(bool fwd) { return true; } + + ///@{ + /** \brief Generate a function that calculates \a nfwd forward derivatives */ + virtual Function getDerForward(const std::string& name, int nfwd, Dict& opts); + virtual int numDerForward() const { return 64;} + ///@} + + ///@{ + /** \brief Generate a function that calculates \a nadj adjoint derivatives */ + virtual Function getDerReverse(const std::string& name, int nadj, Dict& opts); + virtual int numDerReverse() const { return 64;} + ///@} + + /** \brief Print description */ + virtual void print(std::ostream &stream) const; + + /** \brief Generate code for the declarations of the C function */ + virtual void generateDeclarations(CodeGenerator& g) const; + + /** \brief Generate code for the body of the C function */ + virtual void generateBody(CodeGenerator& g) const; + + /// Indicate which inputs are repeated + std::vector repeat_in_; + + /// Indicate which outputs are repeated + std::vector repeat_out_; + + /// Nonzero step for inputs + std::vector step_in_; + + /// Nonzero step for outputs + std::vector step_out_; + + int nnz_out_; + + ParallelizationType parallelization_; + + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_MAP_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mapaccum.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mapaccum.hpp new file mode 100755 index 0000000..9a80937 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mapaccum.hpp @@ -0,0 +1,103 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MAPACCUM_HPP +#define CASADI_MAPACCUM_HPP + +#include "function.hpp" + +namespace casadi { + + /** \brief Forward declaration of internal class */ + class MapAccumInternal; + + /** \brief MapAccum class + + Consider a function: f(x, u) -> xp, y + + MapAccum will evaluate this function repeatedly, + feeding the output back to the input: + + \verbatim + x1, y0 <- f(x0, u0) + x2, y1 <- f(x1, u1) + x3, y2 <- f(x2, u2) + \endverbatim + + The inputs to MapAccum(f) are in this case: + - x0 + - [u0 u1 u2] + The outputs are: + - [x1 x2 x3] + - [y0 y1 y2] + + This class treats the general case: + - n repetitions + - any number of accumulated inputs (x) + - any number of regular inputs (u) + - a boolean list `input_accum` flags which inputs are accumalated. + - An index list `output_accum` indicates the indices of the outputs + that are fed back to the inputs. + + This implementation is optimized for speed. + There is a penalty in memory: + the entire accumulator history is an output. + This allows the forward mode to use this history, + instead of recreating the accumulator. + + In reverse mode, you would need the history anyway. + + For a memory-optimized implementation, see Fold. + + \author Joris Gillis + \date 2015 + */ + class CASADI_EXPORT MapAccum : public Function { + public: + /** \brief Default constructor */ + MapAccum(); + + /** \brief Constructor (generic mapaccum) */ + MapAccum(const std::string& name, const Function& f, + int n, + const std::vector& input_accum, + const std::vector& output_accum, + bool reverse = false, + const Dict& opts=Dict()); + + + /** \brief Access functions of the node */ + MapAccumInternal* operator->(); + + /** \brief Const access functions of the node */ + const MapAccumInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; + +} // namespace casadi + +#endif // CASADI_MAPACCUM_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mapaccum_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mapaccum_internal.hpp new file mode 100755 index 0000000..01c32e1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mapaccum_internal.hpp @@ -0,0 +1,134 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MAPACCUM_INTERNAL_HPP +#define CASADI_MAPACCUM_INTERNAL_HPP + +#include "mapaccum.hpp" +#include "function_internal.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** MapAccum statement + \author Joris Gillis + \date 2015 + */ + class CASADI_EXPORT MapAccumInternal : public FunctionInternal { + friend class MapAccum; + public: + + /** \brief Constructor (generic mapaccum) */ + MapAccumInternal(const Function& f, int n, + const std::vector& input_accum, + const std::vector& output_accum, + bool reverse); + + /** \brief clone function */ + virtual MapAccumInternal* clone() const { return new MapAccumInternal(*this);} + + /** \brief Destructor */ + virtual ~MapAccumInternal(); + + /** \brief Initialize */ + virtual void init(); + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w, R reduction); + + /** \brief Binary or, helper function */ + static inline bvec_t orop(bvec_t x, bvec_t y) { return x | y; } + + /** \brief Evaluate numerically, work vectors given */ + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /** \brief Quickfix to avoid segfault, #1552 */ + virtual bool canEvalSX() const {return true;} + + /** \brief Evaluate symbolically, SXElement type, possibly nonmatching sparsity patterns */ + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Evaluate symbolically, MX type */ + //virtual void evalMX(const std::vector& arg, std::vector& res); + + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Is the class able to propagate seeds through the algorithm? */ + virtual bool spCanEvaluate(bool fwd) { return true; } + + ///@{ + /** \brief Generate a function that calculates \a nfwd forward derivatives */ + virtual Function getDerForward(const std::string& name, int nfwd, Dict& opts); + virtual int numDerForward() const { return 64;} + ///@} + + ///@{ + /** \brief Generate a function that calculates \a nadj adjoint derivatives */ + virtual Function getDerReverse(const std::string& name, int nadj, Dict& opts); + virtual int numDerReverse() const { return 64;} + ///@} + + /** \brief Print description */ + virtual void print(std::ostream &stream) const; + + /** \brief Generate code for the declarations of the C function */ + virtual void generateDeclarations(CodeGenerator& g) const; + + /** \brief Generate code for the body of the C function */ + virtual void generateBody(CodeGenerator& g) const; + + // Default case; + Function f_; + + int n_; + + int nnz_out_; + + /// Nonzero step for inputs + std::vector step_in_; + + /// Nonzero step for outputs + std::vector step_out_; + + std::vector input_accum_; + std::vector output_accum_; + + /// Indicates the order of accumulation + bool reverse_; + + /// Total number of accumulator nonzeros + int nnz_accum_; + + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_MAPACCUM_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mx_function.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mx_function.hpp new file mode 100755 index 0000000..0323180 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mx_function.hpp @@ -0,0 +1,199 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MX_FUNCTION_HPP +#define CASADI_MX_FUNCTION_HPP + +#include +#include +#include "../mx/mx.hpp" +#include "sx_function.hpp" + +namespace casadi { + + /** \brief Forward declaration of internal class */ + class MXFunctionInternal; + + /** \brief General function mapping from/to MX + \author Joel Andersson + \date 2010-2015 + */ + class CASADI_EXPORT MXFunction : public Function { + public: + + /** \brief Default constructor */ + MXFunction(); + + /** \brief Attempt to form an MXFunction out of an Function */ + explicit MXFunction(const Function& function); + + /** \brief Construct from vectors (new syntax, includes initialization) */ + MXFunction(const std::string& name, const std::vector& arg, + const std::vector& res, const Dict& opts=Dict()); + + /** \brief Construct from vectors (new syntax, includes initialization) */ + MXFunction(const std::string& name, const std::pair< MXDict, std::vector >& arg, + const std::vector& res, const Dict& opts=Dict()); + + /** \brief Construct from vectors (new syntax, includes initialization) */ + MXFunction(const std::string& name, const std::vector& arg, + const std::pair< MXDict, std::vector >& res, const Dict& opts=Dict()); + + /** \brief Construct from vectors (new syntax, includes initialization) */ + MXFunction(const std::string& name, const std::pair< MXDict, std::vector >& arg, + const std::pair< MXDict, std::vector >& res, const Dict& opts=Dict()); + +#ifndef SWIG +#ifdef USE_CXX11 + /** \brief Construct from initializer lists (new syntax, includes initialization) */ + MXFunction(const std::string& name, + std::initializer_list arg, + std::initializer_list res, + const Dict& opts=Dict()); + + /** \brief Construct from vector & initializer list (new syntax, includes initialization) */ + MXFunction(const std::string& name, + std::vector arg, + std::initializer_list res, + const Dict& opts=Dict()); + + /** \brief Construct from initializer list & vector (new syntax, includes initialization) */ + MXFunction(const std::string& name, + std::initializer_list arg, + std::vector res, + const Dict& opts=Dict()); +#endif // USE_CXX11 +#endif // SWIG +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Multiple input, multiple output, no initialization */ + MXFunction(const std::vector& arg, + const std::vector& res); + + /** \brief [DEPRECATED] Multiple input, multiple output, no initialization */ + MXFunction(const std::vector& arg, + const std::pair< MXDict, std::vector >& res); + + /** \brief [DEPRECATED] Multiple input, multiple output, no initialization */ + MXFunction(const std::pair< MXDict, std::vector >& arg, + const std::vector& res); + + /** \brief [DEPRECATED] Multiple input, multiple output, no initialization */ + MXFunction(const std::pair< MXDict, std::vector >& arg, + const std::pair< MXDict, std::vector >& res); +#endif // WITH_DEPRECATED_FEATURESS + + /// \cond INTERNAL + /** \brief Access functions of the node */ + MXFunctionInternal* operator->(); + + /** \brief Const access functions of the node */ + const MXFunctionInternal* operator->() const; + /// \endcond + + /** \brief Get function input */ + const MX inputExpr(int ind) const; + const MX inputExpr(const std::string & iname) const { + return inputExpr(inputIndex(iname)); + } + + /** \brief Get function output */ + const MX outputExpr(int ind) const; + const MX outputExpr(const std::string & oname) const { + return outputExpr(outputIndex(oname)); + } + + /** \brief Get all function inputs */ + const std::vector inputExpr() const; + + /** \brief Get all function outputs */ + const std::vector outputExpr() const; + + /// \cond INTERNAL +#ifndef SWIG + /** \brief Called from constructor */ + void construct(const std::string& name, const std::vector& arg, + const std::vector& res, const Dict& opts, + const std::vector& ischeme=std::vector(), + const std::vector& oscheme=std::vector()); +#endif // SWIG + /// \endcond + + /** \brief Number of nodes in the algorithm */ + int countNodes() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + ///@{ + /** \brief Jacobian via source code transformation */ + MX jac(int iind=0, int oind=0, bool compact=false, bool symmetric=false); + MX jac(const std::string & iname, int oind=0, bool compact=false, bool symmetric=false) + { return jac(inputIndex(iname), oind, compact, symmetric); } + MX jac(int iind, const std::string & oname, bool compact=false, bool symmetric=false) + { return jac(iind, outputIndex(oname), compact, symmetric); } + MX jac(const std::string & iname, const std::string & oname, + bool compact=false, bool symmetric=false) + { return jac(inputIndex(iname), outputIndex(oname), compact, symmetric); } + ///@} + + ///@{ + /** \brief Gradient via source code transformation */ + MX grad(int iind=0, int oind=0); + MX grad(const std::string & iname, int oind=0) { return grad(inputIndex(iname), oind); } + MX grad(int iind, const std::string & oname) { return grad(iind, outputIndex(oname)); } + MX grad(const std::string & iname, const std::string & oname) + { return grad(inputIndex(iname), outputIndex(oname)); } + ///@} + + ///@{ + /** \brief Tangent via source code transformation */ + MX tang(int iind=0, int oind=0); + MX tang(const std::string & iname, int oind=0) { return tang(inputIndex(iname), oind); } + MX tang(int iind, const std::string & oname) { return tang(iind, outputIndex(oname)); } + MX tang(const std::string & iname, const std::string & oname) + { return tang(inputIndex(iname), outputIndex(oname)); } + ///@} + + /** \brief Expand the matrix valued graph into a scalar valued graph */ + SXFunction expand(const std::vector& inputv = std::vector()); + + /** \brief Get all the free variables of the function */ + std::vector getFree() const; + + /// \cond INTERNAL + /** \brief Extract the functions needed for the Lifted Newton method */ + void generateLiftingFunctions(MXFunction& SWIG_OUTPUT(vdef_fcn), + MXFunction& SWIG_OUTPUT(vinit_fcn)); + /// \endcond + + /** \brief Get the corresponding matrix type */ + typedef MX MatType; + }; + +} // namespace casadi + + +#endif // CASADI_MX_FUNCTION_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mx_function_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mx_function_internal.hpp new file mode 100755 index 0000000..1e2b0c5 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/mx_function_internal.hpp @@ -0,0 +1,166 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MX_FUNCTION_INTERNAL_HPP +#define CASADI_MX_FUNCTION_INTERNAL_HPP + +#include +#include +#include +#include + +#include "mx_function.hpp" +#include "x_function_internal.hpp" +#include "../mx/mx_node.hpp" + +/// \cond INTERNAL + +namespace casadi { + +#ifndef SWIG + /** \brief An element of the algorithm, namely an MX node */ + struct MXAlgEl { + /// Operator index + int op; + + /// Data associated with the operation + MX data; + + /// Work vector indices of the arguments + std::vector arg; + + /// Work vector indices of the results + std::vector res; + }; +#endif // SWIG + + /** \brief Internal node class for MXFunction + \author Joel Andersson + \date 2010-2015 + */ + class CASADI_EXPORT MXFunctionInternal : + public XFunctionInternal{ + friend class MXFunction; + + public: + /** \brief An element of the algorithm, namely an MX node */ + typedef MXAlgEl AlgEl; + + /** \brief All the runtime elements in the order of evaluation */ + std::vector algorithm_; + + /** \brief Offsets for elements in the w_ vector */ + std::vector workloc_; + + /// Free variables + std::vector free_vars_; + + /** \brief Multiple input, multiple output constructor, only to be accessed from MXFunction, + therefore protected */ + MXFunctionInternal(const std::vector& input, const std::vector& output); + + /** \brief Make a deep copy */ + virtual MXFunctionInternal* clone() const; + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief Destructor */ + virtual ~MXFunctionInternal(); + + /** \brief Evaluate numerically, work vectors given */ + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /** \brief Print description */ + virtual void print(std::ostream &stream) const; + + /** \brief Initialize */ + virtual void init(); + + /** \brief Generate code for the declarations of the C function */ + virtual void generateDeclarations(CodeGenerator& g) const; + + /** \brief Generate code for the body of the C function */ + virtual void generateBody(CodeGenerator& g) const; + + /** \brief Extract the residual function G and the modified function Z out of an expression + * (see Albersmeyer2010 paper) */ + void generateLiftingFunctions(MXFunction& vdef_fcn, MXFunction& vinit_fcn); + + /** \brief Generate a function that calculates a Jacobian function by operator overloading */ + virtual Function getNumericJacobian(const std::string& name, int iind, int oind, + bool compact, bool symmetric, const Dict& opts); + + /** \brief Quickfix to avoid segfault, #1552 */ + virtual bool canEvalSX() const {return true;} + + /** \brief Evaluate symbolically, SX type*/ + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Evaluate symbolically, MX type */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fwdSeed, + std::vector >& fwdSens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& adjSeed, + std::vector >& adjSens); + + /** \brief Expand the matrix valued graph into a scalar valued graph */ + SXFunction expand(const std::vector& inputv); + + /// Get a vector of symbolic variables with the same dimensions as the inputs + virtual std::vector symbolicInput() const { return inputv_;} + + /// Get a vector of symbolic variables corresponding to the outputs + virtual std::vector symbolicOutput(const std::vector& arg); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /// Is the class able to propagate seeds through the algorithm? + virtual bool spCanEvaluate(bool fwd) { return true;} + + /// Reset the sparsity propagation + virtual void spInit(bool fwd); + + /// Print work vector + void printWork(std::ostream &stream=casadi::userOut()); + + // print an element of an algorithm + void print(std::ostream &stream, const AlgEl& el) const; + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_MX_FUNCTION_INTERNAL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nlp_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nlp_solver.hpp new file mode 100755 index 0000000..f4026ea --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nlp_solver.hpp @@ -0,0 +1,313 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_NLP_SOLVER_HPP +#define CASADI_NLP_SOLVER_HPP + +#include "function.hpp" + + +/** \defgroup NlpSolver_doc + + Solves the following parametric nonlinear program (NLP): + \verbatim + min F(x, p) + x + + subject to + LBX <= x <= UBX + LBG <= G(x, p) <= UBG + p == P + + nx: number of decision variables + ng: number of constraints + np: number of parameters + \endverbatim + +*/ + +namespace casadi { +#ifndef SWIG + + /// Input arguments of an NLP function [nlpIn] + enum NLPInput { + /// Decision variable [x] + NL_X, + /// Fixed parameter [p] + NL_P, + /// Number of NLP inputs + NL_NUM_IN + }; + + /// Output arguments of an NLP function [nlpOut] + enum NLPOutput { + /// Objective function [f] + NL_F, + /// Constraint function [g] + NL_G, + /// Number of NLP outputs + NL_NUM_OUT + }; + + /// Input arguments of an NLP objective gradient function [gradFIn] + enum GradFInput { + /// Decision variable [x] + GRADF_X, + /// Fixed parameter [p] + GRADF_P, + /// Number of inputs + GRADF_NUM_IN + }; + + /// Output arguments of an NLP objective gradient function [gradFOut] + enum GradFOutput { + /// Jacobian of the constraints [grad] + GRADF_GRAD, + /// Objective function [f] + GRADF_F, + /// Constraint function [g] + GRADF_G, + /// Number of outputs + GRADF_NUM_OUT + }; + + /// Input arguments of an NLP Jacobian function [jacGIn] + enum JacGInput { + /// Decision variable [x] + JACG_X, + /// Fixed parameter [p] + JACG_P, + /// Number of inputs + JACG_NUM_IN + }; + + /// Output arguments of an NLP Jacobian function [jacGOut] + enum JacGOutput { + /// Jacobian of the constraints [jac] + JACG_JAC, + /// Objective function [f] + JACG_F, + /// Constraint function [g] + JACG_G, + /// Number of outputs + JACG_NUM_OUT + }; + + /// Input arguments of an NLP Hessian function [hessLagIn] + enum HessLagInput { + /// Decision variable [x] + HESSLAG_X, + /// Fixed parameter [p] + HESSLAG_P, + /// Multiplier for f. Just a scalar factor for the objective that the + /// NLP solver might use to scale the objective. [lam_f] + HESSLAG_LAM_F, + /// Multiplier for g [lam_g] + HESSLAG_LAM_G, + /// Number of inputs + HESSLAG_NUM_IN + }; + + /// Output arguments of an NLP Hessian function [hessLagOut] + enum HessLagOutput { + /// Hessian of the Lagrangian [hess] + HESSLAG_HESS, + /// Objective function [f] + HESSLAG_F, + /// Constraint function [g] + HESSLAG_G, + /// Gradient of the Lagrangian with respect to x [grad_x] + HESSLAG_GRAD_X, + /// Gradient of the Lagrangian with respect to p [grad_p] + HESSLAG_GRAD_P, + /// Number of outputs + HESSLAG_NUM_OUT + }; + + /// Input arguments of an NLP Solver [nlpSolverIn] + enum NlpSolverInput { + /// Decision variables, initial guess (nx x 1) [x0] + NLP_SOLVER_X0, + /// Value of fixed parameters (np x 1) [p] + NLP_SOLVER_P, + /// Decision variables lower bound (nx x 1), default -inf [lbx] + NLP_SOLVER_LBX, + /// Decision variables upper bound (nx x 1), default +inf [ubx] + NLP_SOLVER_UBX, + /// Constraints lower bound (ng x 1), default -inf [lbg] + NLP_SOLVER_LBG, + /// Constraints upper bound (ng x 1), default +inf [ubg] + NLP_SOLVER_UBG, + /// Lagrange multipliers for bounds on X, initial guess (nx x 1) [lam_x0] + NLP_SOLVER_LAM_X0, + /// Lagrange multipliers for bounds on G, initial guess (ng x 1) [lam_g0] + NLP_SOLVER_LAM_G0, + NLP_SOLVER_NUM_IN + }; + + /// Output arguments of an NLP Solver [nlpSolverOut] + enum NlpSolverOutput { + /// Decision variables at the optimal solution (nx x 1) [x] + NLP_SOLVER_X, + /// Cost function value at the optimal solution (1 x 1) [f] + NLP_SOLVER_F, + /// Constraints function at the optimal solution (ng x 1) [g] + NLP_SOLVER_G, + /// Lagrange multipliers for bounds on X at the solution (nx x 1) [lam_x] + NLP_SOLVER_LAM_X, + /// Lagrange multipliers for bounds on G at the solution (ng x 1) [lam_g] + NLP_SOLVER_LAM_G, + /// Lagrange multipliers for bounds on P at the solution (np x 1) [lam_p] + NLP_SOLVER_LAM_P, + NLP_SOLVER_NUM_OUT + }; +#endif // SWIG + + class NlpSolverInternal; + + /** \brief NlpSolver + + @copydoc NlpSolver_doc + + \generalsection{NlpSolver} + \pluginssection{NlpSolver} + + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT NlpSolver : public Function { + public: + + /// Default constructor + NlpSolver(); + + /// NLP solver factory (new syntax, includes initialization) + NlpSolver( + const std::string& name, + const std::string& solver, + /**< \pluginargument{NlpSolver} + */ + const Function& nlp, + /**< \parblock + * nlp function: \f$ [\mathbb {R}^{n_x} \times \mathbb{R}^{n_p}] + * \mapsto [\mathbb {R} \times \mathbb{R}^{n_g}]\f$ + * + * @copydoc scheme_NLPInput + * @copydoc scheme_NLPOutput + * + * \endparblock + */ + const Dict& opts=Dict() + ); // NOLINT(whitespace/parens) + + /// Create an NLP solver from a dictionary with SX expressions + NlpSolver(const std::string& name, + const std::string& solver, + const SXDict& nlp, + const Dict& opts=Dict()); + + /// Create an NLP solver from a dictionary with MX expressions + NlpSolver(const std::string& name, + const std::string& solver, + const MXDict& nlp, + const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /// [DEPRECATED] NLP solver factory, no initialization + NlpSolver( + const std::string& solver, + /**< \pluginargument{NlpSolver} + */ + const Function& nlp + /**< \parblock + * nlp function: \f$ [\mathbb {R}^{n_x} \times \mathbb{R}^{n_p}] + * \mapsto [\mathbb {R} \times \mathbb{R}^{n_g}]\f$ + * + * @copydoc scheme_NLPInput + * @copydoc scheme_NLPOutput + * + * \endparblock + */ + ); // NOLINT(whitespace/parens) +#endif // WITH_DEPRECATED_FEATURES + + /// Access functions of the node + NlpSolverInternal* operator->(); + const NlpSolverInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /// Prints out a human readable report about possible constraint violations, after solving + void reportConstraints(std::ostream &stream=casadi::userOut()); + + std::string getReportConstraints() + { std::stringstream s; reportConstraints(s); return s.str(); } + + /** \brief Access the NLP + * \copydoc scheme_NlpSolverInput + * \copydoc scheme_NlpSolverOutput + */ + Function nlp(); + + /** Access the objective gradient function + * \copydoc scheme_GradFInput + * \copydoc scheme_GradFIOutput + */ + Function gradF(); + + /** \brief Access the Hessian of the Lagrangian function + * \copydoc scheme_JacGInput + * \copydoc scheme_JacGOutput + */ + Function jacG(); + + /** \brief Access the Jacobian of the constraint function + * \copydoc scheme_HessLagInput + * \copydoc scheme_HessLagOutput + */ + Function hessLag(); + + /** \brief Get the reduced Hessian. + * Requires a patched sIPOPT installation, see CasADi documentation. */ + DMatrix getReducedHessian(); + + /// Read options from parameter xml + void setOptionsFromFile(const std::string & file); + }; + +} // namespace casadi + +#endif // CASADI_NLP_SOLVER_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nlp_solver_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nlp_solver_internal.hpp new file mode 100755 index 0000000..e7e4760 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nlp_solver_internal.hpp @@ -0,0 +1,182 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_NLP_SOLVER_INTERNAL_HPP +#define CASADI_NLP_SOLVER_INTERNAL_HPP + +#include "nlp_solver.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + + +/// \cond INTERNAL +namespace casadi { + +/** \brief NLP solver storage class + + @copydoc NlpSolver_doc + \author Joel Andersson + \date 2010-2013 +*/ + class CASADI_EXPORT + NlpSolverInternal : public FunctionInternal, + public PluginInterface { + + public: + /// Constructor + NlpSolverInternal(const Function& nlp); + + /// Destructor + virtual ~NlpSolverInternal() = 0; + + /// Initialize + virtual void init(); + + /// Prints out a human readable report about possible constraint violations - all constraints + void reportConstraints(std::ostream &stream=casadi::userOut()); + + /** \brief Check if the numerical values of the supplied bounds make sense */ + virtual void checkInputs() const; + + /// Warns the user about initial bounds, if option 'warn_initial_bounds' is true + virtual void checkInitialBounds(); + + /// Set options that make the NLP solver more suitable for solving QPs + virtual void setDefaultOptions(const std::string& recipe) {} + + /// Get or generate a function to calculate the gradient of the objective function + virtual Function getGradF(); + + /// Get or generate a function to calculate the jacobian of the objective function + virtual Function getJacF(); + + /// Get or generate a function to calculate the Jacobian of the constraint function + virtual Function getJacG(); + + /// Get or generate a function to calculate the gradient of the Lagrangian function + virtual Function getGradLag(); + + /// Get or generate a function to calculate the Hessian of the Lagrangian function + virtual Function getHessLag(); + + /// Get or generate the sparsity pattern of the Hessian of the Lagrangian + virtual Sparsity getSpHessLag(); + + /** \brief Get default input value */ + virtual double defaultInput(int ind) const; + + // Access the objective gradient function + Function& gradF(); + + // Access the objective jacobian function (sparse) + Function& jacF(); + + /// Access the Jacobian of the constraint function + Function& jacG(); + + /// Access the Hessian of the Lagrangian function + Function& hessLag(); + + /// Access the gradient of the Lagrangian function + Function& gradLag(); + + /// Get the sparsity pattern of the Hessian of the Lagrangian + Sparsity& spHessLag(); + + /// Number of variables + int nx_; + + /// Number of constraints + int ng_; + + /// Number of parameters + int np_; + + /// callback function, executed at each iteration + Callback callback_; + + /// Execute the callback function only after this amount of iterations + int callback_step_; + + // Evaluation errors are fatal + bool eval_errors_fatal_; + + /// The NLP + Function nlp_; + + // Gradient of the objective + Function gradF_; + + // Gradient of the objective + Function jacF_; + + // Jacobian of the constraints + Function jacG_; + + // Hessian of the Lagrangian + Function hessLag_; + + // Gradient of the Lagrangian + Function gradLag_; + + // Sparsity pattern of the Hessian of the Lagrangian + Sparsity spHessLag_; + + /// A reference to this object to be passed to the user functions + Function ref_; + + // Creator function for internal class + typedef NlpSolverInternal* (*Creator)(const Function& nlp); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "nlp";} + + // Get reduced Hessian + virtual DMatrix getReducedHessian(); + + /// Read options from parameter xml + virtual void setOptionsFromFile(const std::string & file); + + /// WORKAROUND: Add an element to an std::vector stored in a GenericType: + template static void append_to_vec(GenericType& t, Type el) { + std::vector v = t; + v.push_back(el); + t = v; + } + + }; + +} // namespace casadi +/// \endcond +#endif // CASADI_NLP_SOLVER_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nullspace.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nullspace.hpp new file mode 100755 index 0000000..2e30b4f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nullspace.hpp @@ -0,0 +1,74 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_NULLSPACE_HPP +#define CASADI_NULLSPACE_HPP + +#include "function.hpp" + +/** \defgroup Nullspace_doc + + Constructs a basis for the null-space of a fat matrix A. + i.e. finds Z such that AZ = 0 holds. + + The nullspace is also known as the orthogonal complement of the rowspace of a matrix. + + It is assumed that the matrix A is of full rank. + + Implementations are not required to construct an orthogonal or orthonormal basis + +*/ + +namespace casadi { + + // Forward declaration of internal class + class NullspaceInternal; + + /** \brief Base class for nullspace construction + + @copydoc Nullspace_doc + \author Joris Gillis + \date 2014 + */ + + class CASADI_EXPORT Nullspace : public Function { + public: + + /// Default constructor + Nullspace(); + + /// Access functions of the node. + NullspaceInternal* operator->(); + + /// Const access functions of the node. + const NullspaceInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; + +} // namespace casadi + +#endif // CASADI_NULLSPACE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nullspace_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nullspace_internal.hpp new file mode 100755 index 0000000..1c34b66 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/nullspace_internal.hpp @@ -0,0 +1,77 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_NULLSPACE_INTERNAL_HPP +#define CASADI_NULLSPACE_INTERNAL_HPP + +#include "nullspace.hpp" +#include "function_internal.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** @copydoc Nullspace_doc + \author Joris Gillis + \date 2014 + */ + class CASADI_EXPORT NullspaceInternal : public FunctionInternal { + public: + + /** \brief Constructor */ + NullspaceInternal(const Sparsity & A_sp); + + /** \brief Destructor */ + virtual ~NullspaceInternal(); + + /** \brief Clone */ + virtual NullspaceInternal* clone() const { return new NullspaceInternal(A_sp_);} + + /** \brief initialize */ + virtual void init(); + + /** \brief Integrate */ + virtual void evaluate(); + + protected: + + /// Should the subspace be dense? + bool dense_; + + /// Storage for input structure + Sparsity A_sp_; + + /// number of rows + int m_; + + /// number of columns + int n_; + + }; + +} // namespace casadi + +/// \endcond +#endif // CASADI_NULLSPACE_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/plugin_interface.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/plugin_interface.hpp new file mode 100755 index 0000000..3f53b9f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/plugin_interface.hpp @@ -0,0 +1,373 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010 by Joel Andersson, Moritz Diehl, K.U.Leuven. All rights reserved. + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef CASADI_PLUGIN_INTERFACE_HPP +#define CASADI_PLUGIN_INTERFACE_HPP + +#include "../function/function_internal.hpp" +#include "../casadi_options.hpp" +#include "wrapper.hpp" +#include "adaptor.hpp" + +#include + +/// \cond INTERNAL + +// For dynamic loading +#ifdef WITH_DL +#ifdef _WIN32 // also for 64-bit +#define NOMINMAX +#include +#else // _WIN32 +#include +#endif // _WIN32 + +// Set default shared library prefix +#ifndef SHARED_LIBRARY_PREFIX +#define SHARED_LIBRARY_PREFIX "lib" +#endif // SHARED_LIBRARY_PREFIX + +// Set default shared library suffix +#ifndef SHARED_LIBRARY_SUFFIX +#define SHARED_LIBRARY_SUFFIX ".so" +#endif // SHARED_LIBRARY_SUFFIX + +#endif // WITH_DL + +namespace casadi { + // Avoid segmentation faults when exposed function not implemented + template + T check_exposed(T t) { + casadi_assert_message(t!=0, "Static function not implemented for plugin"); + return t; + } + + /** \brief Interface for accessing input and output data structures + \author Joel Andersson + \date 2013 + */ + template + class CASADI_EXPORT PluginInterface { + public: + + /// Fields + struct Plugin{ + typename Derived::Creator creator; + const char* name; + const char* doc; + int version; + typename Derived::Exposed exposed; + bool (*adaptorHasPlugin)(const std::string& name); + }; + + // Plugin registration function + typedef int (*RegFcn)(Plugin* plugin); + + /// Check if a plugin is available or can be loaded + static bool hasPlugin(const std::string& name, bool verbose=false); + + /// Instantiate a Plugin struct from a factory function + static Plugin pluginFromRegFcn(RegFcn regfcn); + + /// Load a plugin dynamically + static Plugin loadPlugin(const std::string& name, bool register_plugin=true); + + /// Register an integrator in the factory + static void registerPlugin(const Plugin& plugin); + + /// Register an integrator in the factory + static void registerPlugin(RegFcn regfcn); + + /// Load and get the creator function + static Plugin& getPlugin(const std::string& name); + + // Create solver instance + template + static Derived* instantiatePlugin(const std::string& name, Problem problem); + }; + + template + bool PluginInterface::hasPlugin(const std::string& name, bool verbose) { + + // Check if any dot in the name, i.e. an adaptor + std::string::size_type dotpos = name.find("."); + + std::string short_name = name.substr(0, dotpos); + + // Quick return if available + if (Derived::solvers_.find(short_name) != Derived::solvers_.end()) { + return true; + } + + // Try loading the plugin + try { + Plugin plugin = loadPlugin(short_name, false); + // Do a recursion if the name contains dots + if (plugin.adaptorHasPlugin!=0 && dotpos!=std::string::npos) { + return plugin.adaptorHasPlugin(name.substr(dotpos+1)); + } + return true; + } catch (CasadiException& ex) { + if (verbose) { + casadi_warning(ex.what()); + } + return false; + } + + } + + template + typename PluginInterface::Plugin + PluginInterface::pluginFromRegFcn(RegFcn regfcn) { + // Create a temporary struct + Plugin plugin; + plugin.adaptorHasPlugin = 0; + + // Set the fields + int flag = regfcn(&plugin); + casadi_assert(flag==0); + + return plugin; + } + + template + typename PluginInterface::Plugin + PluginInterface::loadPlugin(const std::string& name, bool register_plugin) { + // Issue warning and quick return if already loaded + if (Derived::solvers_.find(name) != Derived::solvers_.end()) { + casadi_warning("PluginInterface: Solver " + name + " is already in use. Ignored."); + return Plugin(); + } + + +#ifndef WITH_DL + casadi_error("WITH_DL option needed for dynamic loading"); +#else // WITH_DL + // Retrieve the registration function + RegFcn reg; + + // Get the name of the shared library + std::string lib = SHARED_LIBRARY_PREFIX "casadi_" + + Derived::infix_ + "_" + name + SHARED_LIBRARY_SUFFIX; + + // Load the dll + std::string regName = "casadi_register_" + Derived::infix_ + "_" + name; + + // Build up search paths; + std::vector search_paths; + + #ifdef _WIN32 + char pathsep = ';'; + const std::string filesep("\\"); + #else + char pathsep = ':'; + const std::string filesep("/"); + #endif + + // Search path: global casadipath option + std::stringstream casadipaths(CasadiOptions::getCasadiPath()); + std::string casadipath; + while (std::getline(casadipaths, casadipath, pathsep)) { + search_paths.push_back(casadipath); + } + + // Search path: CASADIPATH env variable + char* pLIBDIR; + pLIBDIR = getenv("CASADIPATH"); + + if (pLIBDIR!=0) { + std::stringstream casadipaths(pLIBDIR); + std::string casadipath; + while (std::getline(casadipaths, casadipath, pathsep)) { + search_paths.push_back(casadipath); + } + } + + // Search path: bare + search_paths.push_back(""); + + // Search path : PLUGIN_EXTRA_SEARCH_PATH + #ifdef PLUGIN_EXTRA_SEARCH_PATH + search_paths.push_back( + std::string("") + PLUGIN_EXTRA_SEARCH_PATH); + #endif // PLUGIN_EXTRA_SEARCH_PATH + + // Search path : current directory + search_paths.push_back("."); + + // Prepare error string + std::stringstream errors; + errors << "PluginInterface::loadPlugin: Cannot load shared library '" + << lib << "': " << std::endl; + errors << " (\n" + << " Searched directories: 1. casadipath from CasadiOptions\n" + << " 2. CASADIPATH env var\n" + << " 3. PATH env var (Windows)\n" + << " 4. LD_LIBRARY_PATH env var (Linux)\n" + << " A library may be 'not found' even if the file exists:\n" + << " * library is not compatible (different compiler/bitness)\n" + << " * the dependencies are not found\n" + << " )"; + + // Alocate a handle pointer +#ifdef _WIN32 + HINSTANCE handle = 0; +#else // _WIN32 + void * handle = 0; +#endif + + // Alocate a handle pointer +#ifndef _WIN32 + int flag = RTLD_LAZY | RTLD_LOCAL; +#ifdef WITH_DEEPBIND + flag |= RTLD_DEEPBIND; +#endif +#endif + + std::string searchpath; + + // Try getting a handle + for (int i=0;i + void PluginInterface::registerPlugin(RegFcn regfcn) { + registerPlugin(pluginFromRegFcn(regfcn)); + } + + template + void PluginInterface::registerPlugin(const Plugin& plugin) { + + // Check if the solver name is in use + typename std::map::iterator it=Derived::solvers_.find(plugin.name); + casadi_assert_message(it==Derived::solvers_.end(), + "Solver " << plugin.name << " is already in use"); + + // Add to list of solvers + Derived::solvers_[plugin.name] = plugin; + } + + template + typename PluginInterface::Plugin& + PluginInterface::getPlugin(const std::string& name) { + + + // Check if any dot in the name, i.e. an adaptor + std::string::size_type dotpos = name.find("."); + if (dotpos != std::string::npos) return getPlugin(name.substr(0, dotpos)); + + // Check if the solver has been loaded + typename std::map::iterator it=Derived::solvers_.find(name); + + // Load the solver if needed + if (it==Derived::solvers_.end()) { + loadPlugin(name); + it=Derived::solvers_.find(name); + } + casadi_assert(it!=Derived::solvers_.end()); + return it->second; + } + + template + template + Derived* + PluginInterface::instantiatePlugin(const std::string& name, Problem problem) { + + // Assert the plugin exists (needed for adaptors) + if (!hasPlugin(name, true)) { + casadi_error("Plugin '" << name << "' is not found."); + } + + // Check if any dot in the name, i.e. an adaptor + std::string::size_type dotpos = name.find("."); + if (dotpos == std::string::npos) { + // No dot, normal instantiation + return getPlugin(name).creator(problem); + } else { + // Dot present, separate adaptor name from solver name + std::string adaptor_name = name.substr(0, dotpos); + std::string solver_name = name.substr(dotpos+1); + + // Load the adaptor + Derived* adaptor = getPlugin(adaptor_name).creator(problem); + + // Pass solver name to adaptor + if (adaptor->getAdaptorSolverName().size()==0) { + adaptor->setOption(adaptor_name + "_solver", solver_name); + } else { + adaptor->setOption(adaptor->getAdaptorSolverName(), solver_name); + } + return adaptor; + } + } + + +} // namespace casadi + +/// \endcond + +#endif // CASADI_PLUGIN_INTERFACE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qcqp_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qcqp_solver.hpp new file mode 100755 index 0000000..1aa2227 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qcqp_solver.hpp @@ -0,0 +1,160 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_QCQP_SOLVER_HPP +#define CASADI_QCQP_SOLVER_HPP + +#include "function.hpp" + +/** \defgroup QcqpSolver_doc + + Solves the following strictly convex problem: + + \verbatim + min 1/2 x' H x + g' x + x + + subject to + 1/2 x' Pi x + qi' x + ri <= 0 for i=0..nq-1 + LBA <= A x <= UBA + LBX <= x <= UBX + + with : + H, Pi sparse (n x n) positive definite + g, qi dense (n x 1) + ri scalar + + n: number of decision variables (x) + nc: number of linear constraints (A) + nq: number of quadratic constraints + + \endverbatim + + If H, Pi is not positive-definite, the solver should throw an error. + +*/ + +namespace casadi { +#ifndef SWIG + + /// Input arguments of a QP problem [qcqpIn] + enum QcqpSolverInput { + /// The square matrix H: sparse, (n x n). Only the lower triangular part is actually used. + /// The matrix is assumed to be symmetrical. [h] + QCQP_SOLVER_H, + /// The vector g: dense, (n x 1) [g] + QCQP_SOLVER_G, + /// The horizontal stack of all Pi. Each Pi is sparse (n x n). Only the lower + /// triangular part is actually used. The matrix is assumed to be symmetrical. [p] + QCQP_SOLVER_P, + /// The vertical stack of all qi: dense, (nq n x 1) [q] + QCQP_SOLVER_Q, + /// The vertical stack of all scalars ri (nq x 1) [r] + QCQP_SOLVER_R, + /// The matrix A: sparse, (nc x n) - product with x must be dense. [a] + QCQP_SOLVER_A, + /// dense, (nc x 1) [lba] + QCQP_SOLVER_LBA, + /// dense, (nc x 1) [uba] + QCQP_SOLVER_UBA, + /// dense, (n x 1) [lbx] + QCQP_SOLVER_LBX, + /// dense, (n x 1) [ubx] + QCQP_SOLVER_UBX, + /// dense, (n x 1) [x0] + QCQP_SOLVER_X0, + /// dense [lam_x0] + QCQP_SOLVER_LAM_X0, + QCQP_SOLVER_NUM_IN}; + + /// Output arguments of an QP Solver [qcqpOut] + enum QcqpSolverOutput { + /// The primal solution [x] + QCQP_SOLVER_X, + /// The optimal cost [cost] + QCQP_SOLVER_COST, + /// The dual solution corresponding to linear bounds [lam_a] + QCQP_SOLVER_LAM_A, + /// The dual solution corresponding to simple bounds [lam_x] + QCQP_SOLVER_LAM_X, + QCQP_SOLVER_NUM_OUT}; +#endif // SWIG + + // Forward declaration of internal class + class QcqpSolverInternal; + + /** \brief QcqpSolver + + + @copydoc QcqpSolver_doc + + \generalsection{QcqpSolver} + \pluginssection{QcqpSolver} + + \author Joris Gillis + \date 2013 + */ + class CASADI_EXPORT QcqpSolver : public Function { + public: + + /// Default constructor + QcqpSolver(); + + /** \brief Constructor (new syntax, includes initialization) + * \param solver \pluginargument{QcqpSolver} + * \param st \structargument{QCQP} + */ + QcqpSolver(const std::string& name, const std::string& solver, + const std::map& st, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor (no initialization) + * \param solver \pluginargument{QcqpSolver} + * \param st \structargument{QCQP} + */ + QcqpSolver(const std::string& solver, const std::map& st); +#endif // WITH_DEPRECATED_FEATURES + + /// Access functions of the node + QcqpSolverInternal* operator->(); + const QcqpSolverInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + }; + +} // namespace casadi + +#endif // CASADI_QCQP_SOLVER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qcqp_solver_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qcqp_solver_internal.hpp new file mode 100755 index 0000000..3db4159 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qcqp_solver_internal.hpp @@ -0,0 +1,110 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_QCQP_SOLVER_INTERNAL_HPP +#define CASADI_QCQP_SOLVER_INTERNAL_HPP + +#include "qcqp_solver.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL +namespace casadi { + + /// Structure specification of a QP + enum QCQPStruct { + /// The square matrix H: sparse, (n x n). Only the lower triangular part is actually used. + /// The matrix is assumed to be symmetrical. + QCQP_STRUCT_H, + /// The horizontal stack of all Pi. Each Pi is sparse (n x n). Only the lower + /// triangular part is actually used. The matrix is assumed to be symmetrical. + QCQP_STRUCT_P, + /// The matrix A: sparse, (nc x n) - product with x must be dense. + QCQP_STRUCT_A, + QCQP_STRUCT_NUM}; + +/// Internal class + class CASADI_EXPORT + QcqpSolverInternal : public FunctionInternal, + public PluginInterface { + + public: + + // Constructor + QcqpSolverInternal(const std::map &st); + + + + // Destructor + virtual ~QcqpSolverInternal() = 0; + + // Initialize + virtual void init(); + + // Solve the system of equations + virtual void evaluate(); + + // Solve the system of equations + virtual void solve(); + + /// \brief Check if the numerical values of the supplied bounds make sense + virtual void checkInputs() const; + + // Creator function for internal class + typedef QcqpSolverInternal* (*Creator)(const std::map& st); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "qcqp";} + + protected: + + /// Problem structure + std::vector st_; + + /// Number of decision variables + int n_; + + /// The number of linear constraints (counting both equality and inequality) == A.size1() + int nc_; + + /// The number of quadratic constraints + int nq_; +}; + + +} // namespace casadi + +/// \endcond +#endif // CASADI_QCQP_SOLVER_INTERNAL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qp_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qp_solver.hpp new file mode 100755 index 0000000..dea81d2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qp_solver.hpp @@ -0,0 +1,158 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_QP_SOLVER_HPP +#define CASADI_QP_SOLVER_HPP + +#include "function.hpp" + +//#include "../autogenerated.hpp" + + +/** \defgroup QpSolver_doc + + Solves the following strictly convex problem: + + \verbatim + min 1/2 x' H x + g' x + x + + subject to + LBA <= A x <= UBA + LBX <= x <= UBX + + with : + H sparse (n x n) positive definite + g dense (n x 1) + + n: number of decision variables (x) + nc: number of constraints (A) + + \endverbatim + + If H is not positive-definite, the solver should throw an error. + +*/ + +namespace casadi { +#ifndef SWIG + + /// Input arguments of a QP problem [qpIn] + enum QpSolverInput { + /// The square matrix H: sparse, (n x n). Only the lower triangular part is actually used. + /// The matrix is assumed to be symmetrical. [h] + QP_SOLVER_H, + /// The vector g: dense, (n x 1) [g] + QP_SOLVER_G, + /// The matrix A: sparse, (nc x n) - product with x must be dense. [a] + QP_SOLVER_A, + /// dense, (nc x 1) [lba] + QP_SOLVER_LBA, + /// dense, (nc x 1) [uba] + QP_SOLVER_UBA, + /// dense, (n x 1) [lbx] + QP_SOLVER_LBX, + /// dense, (n x 1) [ubx] + QP_SOLVER_UBX, + /// dense, (n x 1) [x0] + QP_SOLVER_X0, + /// dense [lam_x0] + QP_SOLVER_LAM_X0, + QP_SOLVER_NUM_IN}; + + /// Output arguments of an QP Solver [qpOut] + enum QpSolverOutput { + /// The primal solution [x] + QP_SOLVER_X, + /// The optimal cost [cost] + QP_SOLVER_COST, + /// The dual solution corresponding to linear bounds [lam_a] + QP_SOLVER_LAM_A, + /// The dual solution corresponding to simple bounds [lam_x] + QP_SOLVER_LAM_X, + QP_SOLVER_NUM_OUT}; +#endif // SWIG + + // Forward declaration of internal class + class QpSolverInternal; + + /** \brief QpSolver + + + @copydoc QpSolver_doc + + \generalsection{QpSolver} + \pluginssection{QpSolver} + + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT QpSolver : public Function { + public: + + /// Default constructor + QpSolver(); + + /** \brief Constructor (new syntax, includes initialization) + * \param name \pluginargument{QpSolver} + * \param st \structargument{QP} + */ + QpSolver(const std::string& name, const std::string& solver, + const std::map& st, const Dict& opts=Dict()); + + #ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor (no initialization) + * \param name \pluginargument{QpSolver} + * \param st \structargument{QP} + */ + QpSolver(const std::string& solver, const std::map& st); + #endif // WITH_DEPRECATED_FEATURES + + /// Access functions of the node + QpSolverInternal* operator->(); + const QpSolverInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /** Generate native code in the interfaced language for debugging */ + void generateNativeCode(const std::string &filename) const; + + /** Generate native code in the interfaced language for debugging */ + void generateNativeCode(std::ostream &file) const; + }; + +} // namespace casadi + +#endif // CASADI_QP_SOLVER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qp_solver_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qp_solver_internal.hpp new file mode 100755 index 0000000..d7b5b58 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/qp_solver_internal.hpp @@ -0,0 +1,105 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_QP_SOLVER_INTERNAL_HPP +#define CASADI_QP_SOLVER_INTERNAL_HPP + +#include "qp_solver.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL +namespace casadi { + /// Structure specification of a QP + enum QPStruct { + /// The square matrix H: sparse, (n x n). Only the lower triangular part is actually used. + /// The matrix is assumed to be symmetrical. + QP_STRUCT_H, + /// The matrix A: sparse, (nc x n) - product with x must be dense. + QP_STRUCT_A, + QP_STRUCT_NUM}; + + /// Internal class + class CASADI_EXPORT + QpSolverInternal : public FunctionInternal, + public PluginInterface { + public: + + // Constructor + QpSolverInternal(const std::map &st); + + // Destructor + virtual ~QpSolverInternal() = 0; + + // Initialize + virtual void init(); + + // Solve the system of equations + virtual void evaluate(); + + // Solve the system of equations + virtual void solve(); + + /// \brief Check if the numerical values of the supplied bounds make sense + virtual void checkInputs() const; + + /** Generate native code in the interfaced language for debugging */ + virtual void generateNativeCode(std::ostream& file) const; + + // Creator function for internal class + typedef QpSolverInternal* (*Creator)(const std::map& st); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "qp";} + + /** \brief Get default input value */ + virtual double defaultInput(int ind) const; + + protected: + + /// Problem structure + std::vector st_; + + /// Number of decision variables + int n_; + + /// The number of constraints (counting both equality and inequality) == A.size1() + int nc_; + }; + + +} // namespace casadi +/// \endcond +#endif // CASADI_QP_SOLVER_INTERNAL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/schemes_helpers.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/schemes_helpers.hpp new file mode 100755 index 0000000..739a93d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/schemes_helpers.hpp @@ -0,0 +1,1164 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/** All edits to this file will be lost - autogenerated by misc/autogencode.py */ +#ifndef SCHEMES_HELPERS_HPP +#define SCHEMES_HELPERS_HPP +#include +#include +#include +#include +namespace casadi { + +/// Input arguments of a \e cle solver +/// +/// \copydoc scheme_CLEInput +template +std::pair, std::vector > cleIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + std::string s[] = {"a", "v"}; + std::vector sv = std::vector(s, s+2); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'cleIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of a \e cle solver +/// +/// \copydoc scheme_CLEOutput +template +std::pair, std::vector > cleOut( + const std::string &n0 ="", const M &x0 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + std::string s[] = {"p"}; + std::vector sv = std::vector(s, s+1); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'cleOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of an ODE/DAE function +/// +/// \copydoc scheme_ControlledDAEInput +template +std::pair, std::vector > controldaeIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M(), + const std::string &n6 ="", const M &x6 =M(), + const std::string &n7 ="", const M &x7 =M(), + const std::string &n8 ="", const M &x8 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + if (!n6.empty()) m[n6]=x6; + if (!n7.empty()) m[n7]=x7; + if (!n8.empty()) m[n8]=x8; + std::string s[] = {"t", "x", "z", "p", "u", "u_interp", "x_major", "t0", "tf"}; + std::vector sv = std::vector(s, s+9); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'controldaeIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a control simulator +/// +/// \copydoc scheme_ControlSimulatorInput +template +std::pair, std::vector > controlsimulatorIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + std::string s[] = {"x0", "p", "u"}; + std::vector sv = std::vector(s, s+3); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'controlsimulatorIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a \e dle solver +/// +/// \copydoc scheme_DLEInput +template +std::pair, std::vector > dleIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + std::string s[] = {"a", "v"}; + std::vector sv = std::vector(s, s+2); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'dleIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of a \e dle solver +/// +/// \copydoc scheme_DLEOutput +template +std::pair, std::vector > dleOut( + const std::string &n0 ="", const M &x0 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + std::string s[] = {"p"}; + std::vector sv = std::vector(s, s+1); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'dleOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a \e dple solver +/// +/// \copydoc scheme_DPLEInput +template +std::pair, std::vector > dpleIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + std::string s[] = {"a", "v"}; + std::vector sv = std::vector(s, s+2); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'dpleIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of a \e dple solver +/// +/// \copydoc scheme_DPLEOutput +template +std::pair, std::vector > dpleOut( + const std::string &n0 ="", const M &x0 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + std::string s[] = {"p"}; + std::vector sv = std::vector(s, s+1); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'dpleOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of an Homotopy NLP function +/// +/// \copydoc scheme_HNLPInput +template +std::pair, std::vector > hnlpIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + std::string s[] = {"x", "p", "tau"}; + std::vector sv = std::vector(s, s+3); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'hnlpIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of an ODE/DAE function +/// +/// \copydoc scheme_DAEInput +template +std::pair, std::vector > daeIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + std::string s[] = {"x", "z", "p", "t"}; + std::vector sv = std::vector(s, s+4); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'daeIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an DAE function +/// +/// \copydoc scheme_DAEOutput +template +std::pair, std::vector > daeOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + std::string s[] = {"ode", "alg", "quad"}; + std::vector sv = std::vector(s, s+3); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'daeOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of an ODE/DAE backward integration function +/// +/// \copydoc scheme_RDAEInput +template +std::pair, std::vector > rdaeIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M(), + const std::string &n6 ="", const M &x6 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + if (!n6.empty()) m[n6]=x6; + std::string s[] = {"rx", "rz", "rp", "x", "z", "p", "t"}; + std::vector sv = std::vector(s, s+7); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'rdaeIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an ODE/DAE backward integration function +/// +/// \copydoc scheme_RDAEOutput +template +std::pair, std::vector > rdaeOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + std::string s[] = {"ode", "alg", "quad"}; + std::vector sv = std::vector(s, s+3); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'rdaeOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of an integrator +/// +/// \copydoc scheme_IntegratorInput +template +std::pair, std::vector > integratorIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + std::string s[] = {"x0", "p", "z0", "rx0", "rp", "rz0"}; + std::vector sv = std::vector(s, s+6); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'integratorIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an integrator +/// +/// \copydoc scheme_IntegratorOutput +template +std::pair, std::vector > integratorOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + std::string s[] = {"xf", "qf", "zf", "rxf", "rqf", "rzf"}; + std::vector sv = std::vector(s, s+6); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'integratorOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a linear solver +/// +/// \copydoc scheme_LinsolInput +template +std::pair, std::vector > linsolIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + std::string s[] = {"A", "B"}; + std::vector sv = std::vector(s, s+2); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'linsolIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of a linear solver +/// +/// \copydoc scheme_LinsolOutput +template +std::pair, std::vector > linsolOut( + const std::string &n0 ="", const M &x0 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + std::string s[] = {"X"}; + std::vector sv = std::vector(s, s+1); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'linsolOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a LP problem +/// +/// \copydoc scheme_LpSolverInput +template +std::pair, std::vector > lpIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + std::string s[] = {"c", "a", "lba", "uba", "lbx", "ubx"}; + std::vector sv = std::vector(s, s+6); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'lpIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an LP Solver +/// +/// \copydoc scheme_LpSolverOutput +template +std::pair, std::vector > lpOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + std::string s[] = {"x", "cost", "lam_a", "lam_x"}; + std::vector sv = std::vector(s, s+4); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'lpOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a \e dle solver +/// +/// \copydoc scheme_LR_DLEInput +template +std::pair, std::vector > lrdleIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + std::string s[] = {"a", "v", "c", "h"}; + std::vector sv = std::vector(s, s+4); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'lrdleIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of a \e dle solver +/// +/// \copydoc scheme_LR_DLEOutput +template +std::pair, std::vector > lrdleOut( + const std::string &n0 ="", const M &x0 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + std::string s[] = {"y"}; + std::vector sv = std::vector(s, s+1); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'lrdleOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a \e dple solver +/// +/// \copydoc scheme_LR_DPLEInput +template +std::pair, std::vector > lrdpleIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + std::string s[] = {"a", "v", "c", "h"}; + std::vector sv = std::vector(s, s+4); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'lrdpleIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of a \e dple solver +/// +/// \copydoc scheme_LR_DPLEOutput +template +std::pair, std::vector > lrdpleOut( + const std::string &n0 ="", const M &x0 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + std::string s[] = {"y"}; + std::vector sv = std::vector(s, s+1); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'lrdpleOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of an NLP function +/// +/// \copydoc scheme_NLPInput +template +std::pair, std::vector > nlpIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + std::string s[] = {"x", "p"}; + std::vector sv = std::vector(s, s+2); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'nlpIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an NLP function +/// +/// \copydoc scheme_NLPOutput +template +std::pair, std::vector > nlpOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + std::string s[] = {"f", "g"}; + std::vector sv = std::vector(s, s+2); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'nlpOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of an NLP objective gradient function +/// +/// \copydoc scheme_GradFInput +template +std::pair, std::vector > gradFIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + std::string s[] = {"x", "p"}; + std::vector sv = std::vector(s, s+2); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'gradFIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an NLP objective gradient function +/// +/// \copydoc scheme_GradFOutput +template +std::pair, std::vector > gradFOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + std::string s[] = {"grad", "f", "g"}; + std::vector sv = std::vector(s, s+3); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'gradFOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of an NLP Jacobian function +/// +/// \copydoc scheme_JacGInput +template +std::pair, std::vector > jacGIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + std::string s[] = {"x", "p"}; + std::vector sv = std::vector(s, s+2); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'jacGIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an NLP Jacobian function +/// +/// \copydoc scheme_JacGOutput +template +std::pair, std::vector > jacGOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + std::string s[] = {"jac", "f", "g"}; + std::vector sv = std::vector(s, s+3); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'jacGOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of an NLP Hessian function +/// +/// \copydoc scheme_HessLagInput +template +std::pair, std::vector > hessLagIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + std::string s[] = {"x", "p", "lam_f", "lam_g"}; + std::vector sv = std::vector(s, s+4); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'hessLagIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an NLP Hessian function +/// +/// \copydoc scheme_HessLagOutput +template +std::pair, std::vector > hessLagOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + std::string s[] = {"hess", "f", "g", "grad_x", "grad_p"}; + std::vector sv = std::vector(s, s+5); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'hessLagOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of an NLP Solver +/// +/// \copydoc scheme_NlpSolverInput +template +std::pair, std::vector > nlpSolverIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M(), + const std::string &n6 ="", const M &x6 =M(), + const std::string &n7 ="", const M &x7 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + if (!n6.empty()) m[n6]=x6; + if (!n7.empty()) m[n7]=x7; + std::string s[] = {"x0", "p", "lbx", "ubx", "lbg", "ubg", "lam_x0", "lam_g0"}; + std::vector sv = std::vector(s, s+8); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'nlpSolverIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an NLP Solver +/// +/// \copydoc scheme_NlpSolverOutput +template +std::pair, std::vector > nlpSolverOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + std::string s[] = {"x", "f", "g", "lam_x", "lam_g", "lam_p"}; + std::vector sv = std::vector(s, s+6); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'nlpSolverOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a QP problem +/// +/// \copydoc scheme_QcqpSolverInput +template +std::pair, std::vector > qcqpIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M(), + const std::string &n6 ="", const M &x6 =M(), + const std::string &n7 ="", const M &x7 =M(), + const std::string &n8 ="", const M &x8 =M(), + const std::string &n9 ="", const M &x9 =M(), + const std::string &n10 ="", const M &x10 =M(), + const std::string &n11 ="", const M &x11 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + if (!n6.empty()) m[n6]=x6; + if (!n7.empty()) m[n7]=x7; + if (!n8.empty()) m[n8]=x8; + if (!n9.empty()) m[n9]=x9; + if (!n10.empty()) m[n10]=x10; + if (!n11.empty()) m[n11]=x11; + std::string s[] = {"h", "g", "p", "q", "r", "a", "lba", "uba", "lbx", "ubx", "x0", "lam_x0"}; + std::vector sv = std::vector(s, s+12); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'qcqpIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an QP Solver +/// +/// \copydoc scheme_QcqpSolverOutput +template +std::pair, std::vector > qcqpOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + std::string s[] = {"x", "cost", "lam_a", "lam_x"}; + std::vector sv = std::vector(s, s+4); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'qcqpOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a QP problem +/// +/// \copydoc scheme_QpSolverInput +template +std::pair, std::vector > qpIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M(), + const std::string &n6 ="", const M &x6 =M(), + const std::string &n7 ="", const M &x7 =M(), + const std::string &n8 ="", const M &x8 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + if (!n6.empty()) m[n6]=x6; + if (!n7.empty()) m[n7]=x7; + if (!n8.empty()) m[n8]=x8; + std::string s[] = {"h", "g", "a", "lba", "uba", "lbx", "ubx", "x0", "lam_x0"}; + std::vector sv = std::vector(s, s+9); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'qpIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an QP Solver +/// +/// \copydoc scheme_QpSolverOutput +template +std::pair, std::vector > qpOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + std::string s[] = {"x", "cost", "lam_a", "lam_x"}; + std::vector sv = std::vector(s, s+4); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'qpOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a SDP problem +/// +/// \copydoc scheme_SDPInput +template +std::pair, std::vector > sdpIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M(), + const std::string &n6 ="", const M &x6 =M(), + const std::string &n7 ="", const M &x7 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + if (!n6.empty()) m[n6]=x6; + if (!n7.empty()) m[n7]=x7; + std::string s[] = {"f", "c", "g", "a", "lba", "uba", "lbx", "ubx"}; + std::vector sv = std::vector(s, s+8); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'sdpIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an SDP Solver +/// +/// \copydoc scheme_SDPOutput +template +std::pair, std::vector > sdpOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M(), + const std::string &n6 ="", const M &x6 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + if (!n6.empty()) m[n6]=x6; + std::string s[] = {"x", "p", "dual", "cost", "dual_cost", "lam_a", "lam_x"}; + std::vector sv = std::vector(s, s+7); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'sdpOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a SDQP problem +/// +/// \copydoc scheme_SDQPInput +template +std::pair, std::vector > sdqpIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M(), + const std::string &n6 ="", const M &x6 =M(), + const std::string &n7 ="", const M &x7 =M(), + const std::string &n8 ="", const M &x8 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + if (!n6.empty()) m[n6]=x6; + if (!n7.empty()) m[n7]=x7; + if (!n8.empty()) m[n8]=x8; + std::string s[] = {"h", "c", "f", "g", "a", "lba", "uba", "lbx", "ubx"}; + std::vector sv = std::vector(s, s+9); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'sdqpIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an SDQP Solver +/// +/// \copydoc scheme_SDQPOutput +template +std::pair, std::vector > sdqpOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M(), + const std::string &n6 ="", const M &x6 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + if (!n6.empty()) m[n6]=x6; + std::string s[] = {"x", "p", "dual", "cost", "dual_cost", "lam_a", "lam_x"}; + std::vector sv = std::vector(s, s+7); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'sdqpOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a SOCP problem +/// +/// \copydoc scheme_SOCPInput +template +std::pair, std::vector > socpIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M(), + const std::string &n6 ="", const M &x6 =M(), + const std::string &n7 ="", const M &x7 =M(), + const std::string &n8 ="", const M &x8 =M(), + const std::string &n9 ="", const M &x9 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + if (!n6.empty()) m[n6]=x6; + if (!n7.empty()) m[n7]=x7; + if (!n8.empty()) m[n8]=x8; + if (!n9.empty()) m[n9]=x9; + std::string s[] = {"g", "h", "e", "f", "c", "a", "lba", "uba", "lbx", "ubx"}; + std::vector sv = std::vector(s, s+10); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'socpIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Output arguments of an SOCP Solver +/// +/// \copydoc scheme_SOCPOutput +template +std::pair, std::vector > socpOut( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + std::string s[] = {"x", "cost", "dual_cost", "lam_a", "lam_x", "lam_cone"}; + std::vector sv = std::vector(s, s+6); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'socpOut' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Structure specification of an SOCP +/// +/// \copydoc scheme_SOCPStruct +template +std::pair, std::vector > socpStruct( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + std::string s[] = {"g", "e", "a"}; + std::vector sv = std::vector(s, s+3); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'socpStruct' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +/// Input arguments of a QP problem +/// +/// \copydoc scheme_StabilizedQpSolverInput +template +std::pair, std::vector > stabilizedQpIn( + const std::string &n0 ="", const M &x0 =M(), + const std::string &n1 ="", const M &x1 =M(), + const std::string &n2 ="", const M &x2 =M(), + const std::string &n3 ="", const M &x3 =M(), + const std::string &n4 ="", const M &x4 =M(), + const std::string &n5 ="", const M &x5 =M(), + const std::string &n6 ="", const M &x6 =M(), + const std::string &n7 ="", const M &x7 =M(), + const std::string &n8 ="", const M &x8 =M(), + const std::string &n9 ="", const M &x9 =M(), + const std::string &n10 ="", const M &x10 =M(), + const std::string &n11 ="", const M &x11 =M()) { + // This comment lets the haskell bindings know this is a scheme helper + std::map m; + if (!n0.empty()) m[n0]=x0; + if (!n1.empty()) m[n1]=x1; + if (!n2.empty()) m[n2]=x2; + if (!n3.empty()) m[n3]=x3; + if (!n4.empty()) m[n4]=x4; + if (!n5.empty()) m[n5]=x5; + if (!n6.empty()) m[n6]=x6; + if (!n7.empty()) m[n7]=x7; + if (!n8.empty()) m[n8]=x8; + if (!n9.empty()) m[n9]=x9; + if (!n10.empty()) m[n10]=x10; + if (!n11.empty()) m[n11]=x11; + std::string s[] = {"h", "g", "a", "lba", "uba", "lbx", "ubx", "x0", "lam_x0", "muR", "muE", "mu"}; + std::vector sv = std::vector(s, s+12); + for (typename std::map::const_iterator it=m.begin();it!=m.end();++it) { + if (std::find(sv.begin(), sv.end(), it->first)==sv.end()) + casadi_error("Error in 'stabilizedQpIn' arguments. You supplied key '" + << it->first << "'. Allowed keys are: " << sv << "."); + } + return std::make_pair(m, sv); +} +} // namespace casadi +#endif //SCHEMES_HELPERS_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/schemes_metadata.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/schemes_metadata.hpp new file mode 100755 index 0000000..815454f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/schemes_metadata.hpp @@ -0,0 +1,91 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/** All edits to this file will be lost - autogenerated by misc/autogencode.py */ +#ifndef SCHEMES_METADATA_HPP +#define SCHEMES_METADATA_HPP +#include +#include +#include +#include +#include "../casadi_exception.hpp" +namespace casadi { +class Sparsity; +enum InputOutputScheme { + SCHEME_CLEInput, + SCHEME_CLEOutput, + SCHEME_ControlledDAEInput, + SCHEME_ControlSimulatorInput, + SCHEME_DLEInput, + SCHEME_DLEOutput, + SCHEME_DPLEInput, + SCHEME_DPLEOutput, + SCHEME_HNLPInput, + SCHEME_DAEInput, + SCHEME_DAEOutput, + SCHEME_RDAEInput, + SCHEME_RDAEOutput, + SCHEME_IntegratorInput, + SCHEME_IntegratorOutput, + SCHEME_LinsolInput, + SCHEME_LinsolOutput, + SCHEME_LpSolverInput, + SCHEME_LpSolverOutput, + SCHEME_LR_DLEInput, + SCHEME_LR_DLEOutput, + SCHEME_LR_DPLEInput, + SCHEME_LR_DPLEOutput, + SCHEME_NLPInput, + SCHEME_NLPOutput, + SCHEME_GradFInput, + SCHEME_GradFOutput, + SCHEME_JacGInput, + SCHEME_JacGOutput, + SCHEME_HessLagInput, + SCHEME_HessLagOutput, + SCHEME_NlpSolverInput, + SCHEME_NlpSolverOutput, + SCHEME_QcqpSolverInput, + SCHEME_QcqpSolverOutput, + SCHEME_QpSolverInput, + SCHEME_QpSolverOutput, + SCHEME_SDPInput, + SCHEME_SDPOutput, + SCHEME_SDQPInput, + SCHEME_SDQPOutput, + SCHEME_SOCPInput, + SCHEME_SOCPOutput, + SCHEME_SOCPStruct, + SCHEME_StabilizedQpSolverInput }; + +CASADI_EXPORT std::string getSchemeEntryName(InputOutputScheme scheme, int i); +CASADI_EXPORT std::string getSchemeEntryDoc(InputOutputScheme scheme, int i); +CASADI_EXPORT std::string getSchemeEntryEnumName(InputOutputScheme scheme, int i); +CASADI_EXPORT int getSchemeEntryEnum(InputOutputScheme scheme, const std::string &name); +CASADI_EXPORT int getSchemeSize(InputOutputScheme scheme); +CASADI_EXPORT std::string getSchemeName(InputOutputScheme scheme); +CASADI_EXPORT std::string getSchemeEntryNames(InputOutputScheme scheme); +} // namespace casadi +#endif //SCHEMES_METADATA_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdp_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdp_solver.hpp new file mode 100755 index 0000000..db77b29 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdp_solver.hpp @@ -0,0 +1,210 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SDP_SOLVER_HPP +#define CASADI_SDP_SOLVER_HPP + +#include "function.hpp" + + +/** \defgroup SdpSolver_doc + + Solves an SDP problem in standard form. + See http://sdpa.indsys.chuo-u.ac.jp/sdpa/files/sdpa-c.6.2.0.manual.pdf + + Primal: + + \verbatim + min c' x + x + subject to + P = Sum_i^m F_i x_i - G + P negative semidefinite + + LBA <= A x <= UBA + LBX <= x <= UBX + + with x ( n x 1) + c ( n x 1 ) + G, F_i sparse symmetric (m x m) + X dense symmetric ( m x m ) + A sparse matrix ( nc x n) + LBA, UBA dense vector (nc x 1) + LBX, UBX dense vector (n x 1) + + \endverbatim + + This formulation is chosen as primal, because it does not call for a large decision variable space. + + Dual: + + \verbatim + max trace(G Y) + Y + + subject to + trace(F_i Y) = c_i + Y positive semidefinite + + with Y dense symmetric ( m x m) + + \endverbatim + + On generality: you might have formulation with block partitioning: + + Primal: + + \verbatim + min c' x + x + subject to + Pj = Sum_i^m F_ij x_i - gj for all j + Pj negative semidefinite for all j + + with x ( n x 1) + c ( n x 1 ) + G, F_i sparse symmetric (m x m) + X dense symmetric ( m x m ) + + \endverbatim + + Dual: + \verbatim + max Sum_j trace(Gj Yj) + Yj + + subject to + Sum_j trace(F_ij Yj) = c_i for all j + Yj positive semidefinite for all j + + with Y dense symmetric ( m x m) + + \endverbatim + + You can cast this into the standard form with: + G = diagcat(Gj for all j) + Fi = diagcat(F_ij for all j) + + Implementations of SdpSolver are encouraged to exploit this block structure. + +*/ + +namespace casadi { +#ifndef SWIG + + /// Input arguments of a SDP problem [sdpIn] + enum SDPInput { + /// The horizontal stack of all matrices F_i: ( m x nm) [f] + SDP_SOLVER_F, + /// The vector c: ( n x 1) [c] + SDP_SOLVER_C, + /// The matrix G: ( m x m) [g] + SDP_SOLVER_G, + /// The matrix A: ( nc x n) [a] + SDP_SOLVER_A, + /// Lower bounds on Ax ( nc x 1) [lba] + SDP_SOLVER_LBA, + /// Upper bounds on Ax ( nc x 1) [uba] + SDP_SOLVER_UBA, + /// Lower bounds on x ( n x 1 ) [lbx] + SDP_SOLVER_LBX, + /// Upper bounds on x ( n x 1 ) [ubx] + SDP_SOLVER_UBX, + SDP_SOLVER_NUM_IN}; + + /// Output arguments of an SDP Solver [sdpOut] + enum SDPOutput { + /// The primal solution (n x 1) - may be used as initial guess [x] + SDP_SOLVER_X, + /// The solution P (m x m) - may be used as initial guess [p] + SDP_SOLVER_P, + /// The dual solution (m x m) - may be used as initial guess [dual] + SDP_SOLVER_DUAL, + /// The primal optimal cost (1 x 1) [cost] + SDP_SOLVER_COST, + /// The dual optimal cost (1 x 1) [dual_cost] + SDP_SOLVER_DUAL_COST, + /// The dual solution corresponding to the linear constraints (nc x 1) [lam_a] + SDP_SOLVER_LAM_A, + /// The dual solution corresponding to simple bounds (n x 1) [lam_x] + SDP_SOLVER_LAM_X, + SDP_SOLVER_NUM_OUT}; +#endif // SWIG + + // Forward declaration of internal class + class SdpSolverInternal; + + /** \brief SdpSolver + + + @copydoc SdpSolver_doc + + \generalsection{SdpSolver} + \pluginssection{SdpSolver} + + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT SdpSolver : public Function { + public: + + /// Default constructor + SdpSolver(); + + /** \brief Constructor (new syntax, includes initialization) + * \param solver \pluginargument{SdpSolver} + * \param st \structargument{SDP} + */ + SdpSolver(const std::string& name, const std::string& solver, + const std::map& st, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor + * \param solver \pluginargument{SdpSolver} + * \param st \structargument{SDP} + */ + SdpSolver(const std::string& solver, const std::map& st); +#endif // WITH_DEPRECATED_FEATURES + + /// Access functions of the node + SdpSolverInternal* operator->(); + const SdpSolverInternal* operator->() const; + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; + +} // namespace casadi + +#endif // CASADI_SDP_SOLVER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdp_solver_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdp_solver_internal.hpp new file mode 100755 index 0000000..a128aef --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdp_solver_internal.hpp @@ -0,0 +1,142 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SDP_SOLVER_INTERNAL_HPP +#define CASADI_SDP_SOLVER_INTERNAL_HPP + +#include "sdp_solver.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + + +/// \cond INTERNAL +namespace casadi { + /// Structure specification of an SDP + enum SDPStruct { + /// The horizontal stack of all matrices F_i: ( m x nm) + SDP_STRUCT_F, + /// The matrix G: ( m x m) + SDP_STRUCT_G, + /// The matrix A: ( nc x n) + SDP_STRUCT_A, + SDP_STRUCT_NUM}; + + /// Internal class + class CASADI_EXPORT + SdpSolverInternal : public FunctionInternal, + public PluginInterface { + public: + + // Constructor + SdpSolverInternal(const std::map& st); + + // Destructor + virtual ~SdpSolverInternal() = 0; + + // Initialize + virtual void init(); + + // Solve the system of equations + virtual void evaluate(); + + // Solve the system of equations + virtual void solve(); + + /// \brief Check if the numerical values of the supplied bounds make sense + virtual void checkInputs() const; + + /// Print out problem statement for debugging + void printProblem(std::ostream &stream=casadi::userOut()) const; + + // Creator function for internal class + typedef SdpSolverInternal* (*Creator)(const std::map& st); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "sdp";} + + protected: + + /// Problem structure + std::vector st_; + + /// Size of decision variable vector + int n_; + + /// The number of matrices F + int m_; + + /// Number of identified blocks + int nb_; + + /// Number of linear constraints + int nc_; + + /// Block decomposition details + std::vector block_boundaries_; + std::vector block_sizes_; + + /** A mapping from (G, F) -> (G[p, p]_j, F_i[p, p]j) + * input(0) = G + * input(1) = F + * output(j) = Gj + * output((1+i)*nb_+j) = Fj + */ + Function mapping_; + + /** Make a mapping function from dense blocks to inversely-permuted block diagonal P + ** block_j(Pmapper.output()[p, p]) = Pmapper_.input(j) + */ + Function Pmapper_; + + /** \brief Indicate if dual should be allocated and calculated. + * You may want to avoid calculating the dual variable for problems with n large, as the dual (n x n) is always dense. + */ + bool calc_dual_; + + /* \brief indicate if P part of primal solution should be allocated and calculated + * You may want to avoid calculating this variable for problems with n large, as is always dense (n x n). + */ + bool calc_p_; + + /// Indicates whether problem is printed before solving + bool print_problem_; + +}; + + +} // namespace casadi +/// \endcond + +#endif // CASADI_SDP_SOLVER_INTERNAL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdqp_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdqp_solver.hpp new file mode 100755 index 0000000..aecedb3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdqp_solver.hpp @@ -0,0 +1,136 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SDQP_SOLVER_HPP +#define CASADI_SDQP_SOLVER_HPP + +#include "function.hpp" + + +/** \defgroup SdqpSolver_doc + + Same as an SdpSolver, but with a quadratic objective 1/2 x' H x + +*/ + +namespace casadi { +#ifndef SWIG + + /// Input arguments of a SDQP problem [sdqpIn] + enum SDQPInput { + /// The matrix H: sparse ( n x n) [h] + SDQP_SOLVER_H, + /// The vector c: ( n x 1) [c] + SDQP_SOLVER_C, + /// The horizontal stack of all matrices F_i: ( m x nm) [f] + SDQP_SOLVER_F, + /// The matrix G: ( m x m) [g] + SDQP_SOLVER_G, + /// The matrix A: ( nc x n) [a] + SDQP_SOLVER_A, + /// Lower bounds on Ax ( nc x 1) [lba] + SDQP_SOLVER_LBA, + /// Upper bounds on Ax ( nc x 1) [uba] + SDQP_SOLVER_UBA, + /// Lower bounds on x ( n x 1 ) [lbx] + SDQP_SOLVER_LBX, + /// Upper bounds on x ( n x 1 ) [ubx] + SDQP_SOLVER_UBX, + SDQP_SOLVER_NUM_IN}; + + /// Output arguments of an SDQP Solver [sdqpOut] + enum SDQPOutput { + /// The primal solution (n x 1) - may be used as initial guess [x] + SDQP_SOLVER_X, + /// The solution P (m x m) - may be used as initial guess [p] + SDQP_SOLVER_P, + /// The dual solution (m x m) - may be used as initial guess [dual] + SDQP_SOLVER_DUAL, + /// The primal optimal cost (1 x 1) [cost] + SDQP_SOLVER_COST, + /// The dual optimal cost (1 x 1) [dual_cost] + SDQP_SOLVER_DUAL_COST, + /// The dual solution corresponding to the linear constraints (nc x 1) [lam_a] + SDQP_SOLVER_LAM_A, + /// The dual solution corresponding to simple bounds (n x 1) [lam_x] + SDQP_SOLVER_LAM_X, + SDQP_SOLVER_NUM_OUT}; +#endif // SWIG + + // Forward declaration of internal class + class SdqpSolverInternal; + + /** \brief SdqpSolver + + + @copydoc SdqpSolver_doc + + \generalsection{SdqpSolver} + \pluginssection{SdqpSolver} + + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT SdqpSolver : public Function { + public: + + /// Default constructor + SdqpSolver(); + + /** \brief Constructor (new syntax, includes initialization) + * \param solver \pluginargument{SdqpSolver} + * \param st \structargument{SDQP} + */ + SdqpSolver(const std::string& name, const std::string& solver, + const std::map& st, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor (no initialization) + * \param solver \pluginargument{SdqpSolver} + * \param st \structargument{SDQP} + */ + SdqpSolver(const std::string& solver, const std::map& st); +#endif //WITH_DEPRECATED_FEATURES + + /// Access functions of the node + SdqpSolverInternal* operator->(); + const SdqpSolverInternal* operator->() const; + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; + +} // namespace casadi + +#endif // CASADI_SDQP_SOLVER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdqp_solver_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdqp_solver_internal.hpp new file mode 100755 index 0000000..f048e5b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sdqp_solver_internal.hpp @@ -0,0 +1,112 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SDQP_SOLVER_INTERNAL_HPP +#define CASADI_SDQP_SOLVER_INTERNAL_HPP + +#include "sdqp_solver.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /// Structure specification of an SDQP + enum SDQPStruct { + /// The matrix H: sparse ( n x n) + SDQP_STRUCT_H, + /// The horizontal stack of all matrices F_i: ( m x nm) + SDQP_STRUCT_F, + /// The matrix G: ( m x m) + SDQP_STRUCT_G, + /// The matrix A: ( nc x n) + SDQP_STRUCT_A, + SDQP_STRUCT_NUM}; + + /// Internal class + class CASADI_EXPORT + SdqpSolverInternal : public FunctionInternal, + public PluginInterface { + public: + + // Constructor + SdqpSolverInternal(const std::map& st); + + // Destructor + virtual ~SdqpSolverInternal() = 0; + + // Initialize + virtual void init(); + + // Solve the system of equations + virtual void evaluate(); + + // Solve the system of equations + virtual void solve(); + + /// Print out problem statement for debugging + void printProblem(std::ostream &stream=casadi::userOut()) const; + + // Creator function for internal class + typedef SdqpSolverInternal* (*Creator)(const std::map& st); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "sdqp";} + + protected: + + /// Problem structure + std::vector st_; + + /// Size of decision variable vector + int n_; + + /// The number of matrices F + int m_; + + /// Number of identified blocks + int nb_; + + /// Number of linear constraints + int nc_; + +}; + + +} // namespace casadi + +/// \endcond +#endif // CASADI_SDQP_SOLVER_INTERNAL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/simulator.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/simulator.hpp new file mode 100755 index 0000000..a32577e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/simulator.hpp @@ -0,0 +1,96 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SIMULATOR_HPP +#define CASADI_SIMULATOR_HPP + +#include "integrator.hpp" + +namespace casadi { + +// Forward declaration of internal class +class SimulatorInternal; + +/** \brief Integrator class + + An "simulator" integrates an IVP, stopping at a (fixed) number of grid points and + evaluates a set of output functions at these points. + The internal stepsizes of the integrator need not coincide with the gridpoints. + + + Simulator is an casadi::Function mapping from casadi::IntegratorInput to n. \\ + + The output function needs to be a mapping from casadi::DAEInput to n. + The default output has n=1 and the output is the (vectorized) differential + state for each time step. + + \author Joel Andersson + \date 2010 +*/ + +class CASADI_EXPORT Simulator : public Function { +public: + + /// Default constructor + Simulator(); + + /** \brief Constructor + * \param output_fcn output function which maps to n outputs. (new syntax, includes initialization) + * \copydoc scheme_DAEInput + * + */ + Simulator(const std::string& name, const Integrator& integrator, const Function& output_fcn, + const Matrix& grid, const Dict& opts=Dict()); + + /// Output function equal to the state (new syntax, includes initialization) + Simulator(const std::string& name, const Integrator& integrator, + const Matrix& grid, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor, no initialization + * \param output_fcn output function which maps to n outputs. + * \copydoc scheme_DAEInput + * + */ + Simulator(const Integrator& integrator, const Function& output_fcn, + const Matrix& grid); + + /// [DEPRECATED] Output function equal to the state, no initialization + Simulator(const Integrator& integrator, const Matrix& grid); +#endif // WITH_DEPRECATED_FEATURES + + /// Access functions of the node. + SimulatorInternal* operator->(); + + /// Const access functions of the node. + const SimulatorInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); +}; + +} // namespace casadi + +#endif // CASADI_SIMULATOR_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/simulator_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/simulator_internal.hpp new file mode 100755 index 0000000..1318af1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/simulator_internal.hpp @@ -0,0 +1,78 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SIMULATOR_INTERNAL_HPP +#define CASADI_SIMULATOR_INTERNAL_HPP + +#include "simulator.hpp" +#include "function_internal.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** \brief Simulator data storage class + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT SimulatorInternal : public FunctionInternal { + public: + + /** \brief Constructor */ + SimulatorInternal(const Integrator& integrator, const Function& output_fcn, + const DMatrix& grid); + + /** \brief Destructor */ + virtual ~SimulatorInternal(); + + /** \brief Clone */ + virtual SimulatorInternal* clone() const { return new SimulatorInternal(*this);} + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief initialize */ + virtual void init(); + + /** \brief Integrate */ + virtual void evaluate(); + + // Integrator instance + Integrator integrator_; + + // Output function to be evaluated at each grid point + Function output_fcn_; + + // Time grid + std::vector grid_; + + // Iterators to current outputs + std::vector::iterator> output_its_; + }; + +} // namespace casadi + +/// \endcond +#endif // CASADI_SIMULATOR_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/socp_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/socp_solver.hpp new file mode 100755 index 0000000..f58fbf9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/socp_solver.hpp @@ -0,0 +1,169 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SOCP_SOLVER_HPP +#define CASADI_SOCP_SOLVER_HPP + +#include "function.hpp" + + +/** \defgroup SocpSolver_doc + + Solves an Second Order Cone Programming (SOCP) problem in standard form. + + Primal: + + \verbatim + min c' x + x + subject to + || Gi' x + hi ||_2 <= ei' x + fi i = 1..m + + LBA <= A x <= UBA + LBX <= x <= UBX + + with x ( n x 1) + c dense ( n x 1 ) + Gi sparse (n x ni) + hi dense (ni x 1) + ei sparse (n x 1) + fi dense (1 x 1) + N = Sum_i^m ni + A sparse (nc x n) + LBA, UBA dense vector (nc x 1) + LBX, UBX dense vector (n x 1) + + \endverbatim + +*/ + +namespace casadi { +#ifndef SWIG + + /// Input arguments of a SOCP problem [socpIn] + enum SOCPInput { + /// The horizontal stack of all matrices Gi: ( n x N) [g] + SOCP_SOLVER_G, + /// The vertical stack of all vectors hi: ( N x 1) [h] + SOCP_SOLVER_H, + /// The horizontal stack of all vectors ei: ( n x m) [e] + SOCP_SOLVER_E, + /// The vertical stack of all scalars fi: ( m x 1) [f] + SOCP_SOLVER_F, + /// The vector c: ( n x 1) [c] + SOCP_SOLVER_C, + /// The matrix A: ( nc x n) [a] + SOCP_SOLVER_A, + /// Lower bounds on Ax ( nc x 1) [lba] + SOCP_SOLVER_LBA, + /// Upper bounds on Ax ( nc x 1) [uba] + SOCP_SOLVER_UBA, + /// Lower bounds on x ( n x 1 ) [lbx] + SOCP_SOLVER_LBX, + /// Upper bounds on x ( n x 1 ) [ubx] + SOCP_SOLVER_UBX, + SOCP_SOLVER_NUM_IN}; + + /// Output arguments of an SOCP Solver [socpOut] + enum SOCPOutput { + /// The primal solution (n x 1) [x] + SOCP_SOLVER_X, + /// The primal optimal cost (1 x 1) [cost] + SOCP_SOLVER_COST, + /// The dual optimal cost (1 x 1) [dual_cost] + SOCP_SOLVER_DUAL_COST, + /// The dual solution corresponding to the linear constraints (nc x 1) [lam_a] + SOCP_SOLVER_LAM_A, + /// The dual solution corresponding to simple bounds (n x 1) [lam_x] + SOCP_SOLVER_LAM_X, + /// The dual solution correspoding to cone (2-norm) constraints (m x 1) [lam_cone] + SOCP_SOLVER_LAM_CONE, + SOCP_SOLVER_NUM_OUT}; + + /// Structure specification of an SOCP [socpStruct] + enum SOCPStruct { + /// The horizontal stack of all matrices Gi: ( n x N) [g] + SOCP_STRUCT_G, + /// The horizontal stack of all vectors ei: ( n x m) [e] + SOCP_STRUCT_E, + /// The matrix A: ( nc x n) [a] + SOCP_STRUCT_A, + SOCP_STRUCT_NUM}; +#endif // SWIG + + // Forward declaration of internal class + class SocpSolverInternal; + + /** \brief SocpSolver + + + @copydoc SocpSolver_doc + + \generalsection{SocpSolver} + \pluginssection{SocpSolver} + + \author Joris Gillis + \date 2013 + */ + class CASADI_EXPORT SocpSolver : public Function { + public: + + /// Default constructor + SocpSolver(); + + /** \brief Constructor (new syntax, includes initialization) + * \param solver \pluginargument{SocpSolver} + * \param st \structargument{SOCP} + */ + SocpSolver(const std::string& name, const std::string& solver, + const std::map& st, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor (no initialization) + * \param solver \pluginargument{SocpSolver} + * \param st \structargument{SOCP} + */ + SocpSolver(const std::string& solver, const std::map& st); +#endif // WITH_DEPRECATED_FEATURES + /// Access functions of the node + SocpSolverInternal* operator->(); + const SocpSolverInternal* operator->() const; + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; + +} // namespace casadi + +#endif // CASADI_SOCP_SOLVER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/socp_solver_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/socp_solver_internal.hpp new file mode 100755 index 0000000..aaed1ce --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/socp_solver_internal.hpp @@ -0,0 +1,171 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SOCP_SOLVER_INTERNAL_HPP +#define CASADI_SOCP_SOLVER_INTERNAL_HPP + +#include "socp_solver.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /// Internal class + class CASADI_EXPORT + SocpSolverInternal : public FunctionInternal, + public PluginInterface { + public: + + // Constructor + SocpSolverInternal(const std::map& st); + + // Destructor + virtual ~SocpSolverInternal() = 0; + + // Initialize + virtual void init(); + + // Solve the system of equations + virtual void evaluate(); + + // Solve the system of equations + virtual void solve(); + + /// \brief Check if the numerical values of the supplied bounds make sense + virtual void checkInputs() const; + + /// Print out problem statement for debugging + void printProblem(std::ostream &stream=casadi::userOut()) const; + + // Creator function for internal class + typedef SocpSolverInternal* (*Creator)(const std::map& st); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "socp";} + + protected: + + /// Problem structure + std::vector st_; + + /// Sizes of each block + std::vector ni_; + + /// Total size of G + int N_; + + /// Size of decision variable vector + int n_; + + /// The number SOC constraints + int m_; + + /// Number of linear constraints + int nc_; + + /// Indicates whether problem is printed before solving + bool print_problem_; + + /** \brief Convert Second Order Cone Programming (SOCP) problem in standard form to one in a conic form. + \verbatim + Dual: + + max c' x + x + subject to + || yi ||_2 <= ti i = 1..m + A x + b == 0 + lbx <= x + + Dimensions | Meaning in terms of primal variables + ------------------------------------------------------------------------------------------------------------ + with x ( nx x 1) | [lag_ti' lag_yi' lag_lba' lag_uba' lag_lbx' lag_ubx']' + c dense ( nx x 1 ) | [-fi' hi' LBA' -UBA' LBX' -UBX']' + yi dense ( ni ) | Lagrange multipliers for equality constraints: yi = Gi' x + hi + ti dense ( m ) | Lagrange multipliers for equality constraint: ti = ei' x + fi + A sparse ( n x nx ) | [-ei Gi -Alba' Auba' -Ilbx Iubx] + b dense ( n x 1 ) | [c] + lbx dense ( nx x 1 ) | [-inf' 0']' + nx = m + N + nlba + nuba + nlbx + nubx (alias: dual_n_) + \endverbatim + */ + void convertToDualSocp(); + + /// Linear objective in dual SOCP + std::vector dual_c_; + + /// Sparse representation linear inequality constraints in dual SOCP + /// @{ + std::vector dual_A_data_; + std::vector dual_A_row_; + std::vector dual_A_colind_; + /// @} + + /// Vector of affine terms in linear inequality constraint in dual SOCP + std::vector dual_b_; + + /// Size of dual decision variable vector + int dual_n_; + + /// Number of linear constraints in dual problem + int dual_nc_; + + /// Transpose of A matrix in primal problem definition (fixed sparsity pattern) + DMatrix primal_A_T_; + std::vector primal_A_T_temp_int_; + + /** Indices of lower bounded linear inequality constraints (LBA != -inf), + used to set up dual SOCP variables */ + std::vector primal_idx_lba_; + + /** Indices of upper bounded linear inequality constraints (UBA != inf), + used to set up dual SOCP variables */ + std::vector primal_idx_uba_; + + /// Indices of simple lower bounds (LBX != -inf), used to set up dual SOCP variables + std::vector primal_idx_lbx_; + + /// Indices of simple upper bounds (UBX != inf), used to set up dual SOCP variables + std::vector primal_idx_ubx_; +}; + + +} // namespace casadi + +/// \endcond + +#endif // CASADI_SOCP_SOLVER_INTERNAL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/stabilized_qp_solver.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/stabilized_qp_solver.hpp new file mode 100755 index 0000000..ef2c0e9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/stabilized_qp_solver.hpp @@ -0,0 +1,150 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_STABILIZED_QP_HPP +#define CASADI_STABILIZED_QP_HPP + +#include "function.hpp" +#include "qp_solver.hpp" + +/** \defgroup StabilizedQpSolver_doc + + Solves the following strictly convex problem: + + \verbatim + min 1/2 x' H x + g' x + x + + subject to + LBA <= A x <= UBA + LBX <= x <= UBX + + with : + H sparse (n x n) positive definite + g dense (n x 1) + + n: number of decision variables (x) + nc: number of constraints (A) + + \endverbatim + + If H is not positive-definite, the solver should throw an error. + +*/ + +namespace casadi { +#ifndef SWIG + + /// Input arguments of a QP problem [stabilizedQpIn] + enum StabilizedQpSolverInput { + /// The square matrix H: sparse, (n x n). Only the lower triangular part is actually used. + /// The matrix is assumed to be symmetrical. [h] + STABILIZED_QP_SOLVER_H, + /// The vector g: dense, (n x 1) [g] + STABILIZED_QP_SOLVER_G, + /// The matrix A: sparse, (nc x n) - product with x must be dense. [a] + STABILIZED_QP_SOLVER_A, + /// dense, (nc x 1) [lba] + STABILIZED_QP_SOLVER_LBA, + /// dense, (nc x 1) [uba] + STABILIZED_QP_SOLVER_UBA, + /// dense, (n x 1) [lbx] + STABILIZED_QP_SOLVER_LBX, + /// dense, (n x 1) [ubx] + STABILIZED_QP_SOLVER_UBX, + /// dense, (n x 1) [x0] + STABILIZED_QP_SOLVER_X0, + /// dense [lam_x0] + STABILIZED_QP_SOLVER_LAM_X0, + /// dense (1 x 1) [muR] + STABILIZED_QP_SOLVER_MUR, + /// dense (nc x 1) [muE] + STABILIZED_QP_SOLVER_MUE, + /// dense (nc x 1) [mu] + STABILIZED_QP_SOLVER_MU, + STABILIZED_QP_SOLVER_NUM_IN}; +#endif // SWIG + + // Forward declaration of internal class + class StabilizedQpSolverInternal; + + /** \brief StabilizedQpSolver + + + @copydoc StabilizedQpSolver_doc + + \generalsection{StabilizedQpSolver} + \pluginssection{StabilizedQpSolver} + + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT StabilizedQpSolver : public Function { + public: + + /// Default constructor + StabilizedQpSolver(); + + /** \brief Constructor (new syntax, includes initialization) + * \param solver \pluginargument{StabilizedQpSolver} + * \param st Problem structure + * \copydoc scheme_QPStruct + */ + StabilizedQpSolver(const std::string& name, const std::string& solver, + const std::map& st, const Dict& opts=Dict()); + +#ifdef WITH_DEPRECATED_FEATURES + /** \brief [DEPRECATED] Constructor (no initialization) + * \param solver \pluginargument{StabilizedQpSolver} + * \param st Problem structure + * \copydoc scheme_QPStruct + */ + StabilizedQpSolver(const std::string& solver, const std::map& st); +#endif // WITH_DEPRECATED_FEATURES + + /// Access functions of the node + StabilizedQpSolverInternal* operator->(); + const StabilizedQpSolverInternal* operator->() const; + + /// Check if a plugin is available + static bool hasPlugin(const std::string& name); + + /// Explicitly load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + + /** Generate native code in the interfaced language for debugging */ + void generateNativeCode(const std::string &filename) const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; + +} // namespace casadi + +#endif // CASADI_STABILIZED_QP_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/stabilized_qp_solver_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/stabilized_qp_solver_internal.hpp new file mode 100755 index 0000000..b0c5c78 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/stabilized_qp_solver_internal.hpp @@ -0,0 +1,97 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_STABILIZED_QP_INTERNAL_HPP +#define CASADI_STABILIZED_QP_INTERNAL_HPP + +#include "stabilized_qp_solver.hpp" +#include "function_internal.hpp" +#include "plugin_interface.hpp" +#include "qp_solver_internal.hpp" + +/// \cond INTERNAL +namespace casadi { + + /// Internal class + class CASADI_EXPORT + StabilizedQpSolverInternal : public FunctionInternal, + public PluginInterface { + public: + + // Constructor + StabilizedQpSolverInternal(const std::map &st); + + // Destructor + virtual ~StabilizedQpSolverInternal() = 0; + + // Initialize + virtual void init(); + + // Solve the system of equations + virtual void evaluate(); + + // Solve the system of equations + virtual void solve(); + + /// \brief Check if the numerical values of the supplied bounds make sense + virtual void checkInputs() const; + + /** Generate native code in the interfaced language for debugging */ + virtual void generateNativeCode(std::ostream& file) const {} + + // Creator function for internal class + typedef StabilizedQpSolverInternal* (*Creator)(const std::map& st); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + + /// Short name + static std::string shortname() { return "stabqp";} + + protected: + + /// Problem structure + std::vector st_; + + /// Number of decision variables + int n_; + + /// The number of constraints (counting both equality and inequality) == A.size1() + int nc_; +}; + + +} // namespace casadi + + +/// \endcond +#endif // CASADI_STABILIZED_QP_INTERNAL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/switch.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/switch.hpp new file mode 100755 index 0000000..bdded5e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/switch.hpp @@ -0,0 +1,65 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SWITCH_HPP +#define CASADI_SWITCH_HPP + +#include "function.hpp" + +namespace casadi { + + /** \brief Forward declaration of internal class */ + class SwitchInternal; + + /** Switch statement + \author Joel Andersson + \date 2015 + */ + class CASADI_EXPORT Switch : public Function { + public: + /** \brief Default constructor */ + Switch(); + + /** \brief Constructor (generic switch) */ + Switch(const std::string& name, const std::vector& f, + const Function& f_def, const Dict& opts=Dict()); + + /** \brief Constructor (if-else) */ + Switch(const std::string& name, const Function& f_true, + const Function& f_false, const Dict& opts=Dict()); + + /** \brief Access functions of the node */ + SwitchInternal* operator->(); + + /** \brief Const access functions of the node */ + const SwitchInternal* operator->() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; + +} // namespace casadi + +#endif // CASADI_SWITCH_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/switch_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/switch_internal.hpp new file mode 100755 index 0000000..3eff411 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/switch_internal.hpp @@ -0,0 +1,90 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SWITCH_INTERNAL_HPP +#define CASADI_SWITCH_INTERNAL_HPP + +#include "switch.hpp" +#include "function_internal.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** Switch statement + \author Joel Andersson + \date 2015 + */ + class CASADI_EXPORT SwitchInternal : public FunctionInternal { + friend class Switch; + public: + + /** \brief Constructor (generic switch) */ + SwitchInternal(const std::vector& f, const Function& f_def); + + /** \brief clone function */ + virtual SwitchInternal* clone() const { return new SwitchInternal(*this);} + + /** \brief Destructor */ + virtual ~SwitchInternal(); + + /** \brief Initialize */ + virtual void init(); + + /** \brief Evaluate numerically, work vectors given */ + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + ///@{ + /** \brief Generate a function that calculates \a nfwd forward derivatives */ + virtual Function getDerForward(const std::string& name, int nfwd, Dict& opts); + virtual int numDerForward() const { return 64;} + ///@} + + ///@{ + /** \brief Generate a function that calculates \a nadj adjoint derivatives */ + virtual Function getDerReverse(const std::string& name, int nadj, Dict& opts); + virtual int numDerReverse() const { return 64;} + ///@} + + /** \brief Print description */ + virtual void print(std::ostream &stream) const; + + /** \brief Generate code for the declarations of the C function */ + virtual void generateDeclarations(CodeGenerator& g) const; + + /** \brief Generate code for the body of the C function */ + virtual void generateBody(CodeGenerator& g) const; + + // Function to be evaluated for each case + std::vector f_; + + // Default case; + Function f_def_; + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_SWITCH_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sx_function.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sx_function.hpp new file mode 100755 index 0000000..39a8bb7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sx_function.hpp @@ -0,0 +1,252 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SX_FUNCTION_HPP +#define CASADI_SX_FUNCTION_HPP + +#include "function.hpp" +#ifdef USE_CXX11 +#include +#endif // USE_CXX11 + +namespace casadi { + +/// \cond INTERNAL +#ifndef SWIG + + /** \brief An atomic operation for the SXElement virtual machine */ + struct ScalarAtomic { + int op; /// Operator index + int i0; + union { + double d; + struct { int i1, i2; }; + }; + }; + +#endif // SWIG + +/// \endcond + + /// Forward declaration of internal class + class SXFunctionInternal; + + /// Forward declaration of MXFunction + class MXFunction; + + /** \brief Dynamically created function that can be expanded into a series of scalar operations. + + \author Joel Andersson + \date 2010-2013 + */ + class CASADI_EXPORT SXFunction : public Function { + + public: + /// Default constructor + SXFunction(); + + /// Expand an MXFunction + explicit SXFunction(const MXFunction &f); + + /// Expand an Function + explicit SXFunction(const Function &f); + + /** \brief Construct from vectors (new syntax, includes initialization) */ + SXFunction(const std::string& name, const std::vector& arg, + const std::vector& res, const Dict& opts=Dict()); + + /** \brief Construct from vectors (new syntax, includes initialization) */ + SXFunction(const std::string& name, const std::pair< SXDict, std::vector >& arg, + const std::vector& res, const Dict& opts=Dict()); + + /** \brief Construct from vectors (new syntax, includes initialization) */ + SXFunction(const std::string& name, const std::vector& arg, + const std::pair< SXDict, std::vector >& res, const Dict& opts=Dict()); + + /** \brief Construct from vectors (new syntax, includes initialization) */ + SXFunction(const std::string& name, const std::pair< SXDict, std::vector >& arg, + const std::pair< SXDict, std::vector >& res, const Dict& opts=Dict()); +#ifndef SWIG +#ifdef USE_CXX11 + /** \brief Construct from initializer lists (new syntax, includes initialization) */ + SXFunction(const std::string& name, + std::initializer_list arg, + std::initializer_list res, + const Dict& opts=Dict()); + + /** \brief Construct from vector & nitializer list (new syntax, includes initialization) */ + SXFunction(const std::string& name, + std::vector arg, + std::initializer_list res, + const Dict& opts=Dict()); + + /** \brief Construct from initializer list & vector (new syntax, includes initialization) */ + SXFunction(const std::string& name, + std::initializer_list arg, + std::vector res, + const Dict& opts=Dict()); +#endif // USE_CXX11 +#endif // SWIG + +#ifdef WITH_DEPRECATED_FEATURES + /// [DEPRECATED] Multiple input, multiple output, no initialization + SXFunction(const std::vector& arg, + const std::vector& res); + + /// [DEPRECATED] Multiple input, multiple output, no initialization + SXFunction(const std::vector& arg, + const std::pair< SXDict, std::vector >& res); + + /// [DEPRECATED] Multiple input, multiple output, no initialization + SXFunction(const std::pair< SXDict, std::vector >& arg, + const std::vector& res); + + /// [DEPRECATED] Multiple input, multiple output, no initialization + SXFunction(const std::pair< SXDict, std::vector >& arg, + const std::pair< SXDict, std::vector >& res); +#endif // WITH_DEPRECATED_FEATURES + +/// \cond INTERNAL + /// Access functions of the node + SXFunctionInternal* operator->(); + + /// Const access functions of the node + const SXFunctionInternal* operator->() const; +/// \endcond + + ///@{ + /** \brief Jacobian via source code transformation + * + * \see casadi::Jacobian for an AD approach + */ + SX jac(int iind=0, int oind=0, bool compact=false, bool symmetric=false); + SX jac(const std::string& iname, int oind=0, bool compact=false, bool symmetric=false) + { return jac(inputIndex(iname), oind, compact, symmetric); } + SX jac(int iind, const std::string& oname, bool compact=false, bool symmetric=false) + { return jac(iind, outputIndex(oname), compact, symmetric); } + SX jac(const std::string& iname, const std::string& oname, + bool compact=false, bool symmetric=false) + { return jac(inputIndex(iname), outputIndex(oname), compact, symmetric); } + ///@} + + ///@{ + /// Gradient via source code transformation + SX grad(int iind=0, int oind=0); + SX grad(const std::string& iname, int oind=0) { return grad(inputIndex(iname), oind); } + SX grad(int iind, const std::string& oname) { return grad(iind, outputIndex(oname)); } + SX grad(const std::string& iname, const std::string& oname) + { return grad(inputIndex(iname), outputIndex(oname)); } + ///@} + + ///@{ + /// Tangent via source code transformation + SX tang(int iind=0, int oind=0); + SX tang(const std::string& iname, int oind=0) { return tang(inputIndex(iname), oind); } + SX tang(int iind, const std::string& oname) { return tang(iind, outputIndex(oname)); } + SX tang(const std::string& iname, const std::string& oname) + { return tang(inputIndex(iname), outputIndex(oname)); } + ///@} + + ///@{ + /// Hessian (forward over adjoint) via source code transformation + SX hess(int iind=0, int oind=0); + SX hess(const std::string& iname, int oind=0) { return hess(inputIndex(iname), oind); } + SX hess(int iind, const std::string& oname) { return hess(iind, outputIndex(oname)); } + SX hess(const std::string& iname, const std::string& oname) { + return hess(inputIndex(iname), outputIndex(oname)); + } + ///@} + + /** \brief Get function input */ + const SX inputExpr(int iind) const; + const SX inputExpr(const std::string& iname) const { + return inputExpr(inputIndex(iname)); + } + + /** \brief Get function output */ + const SX outputExpr(int oind) const; + const SX outputExpr(const std::string& oname) const { + return outputExpr(outputIndex(oname)); + } + + /** \brief Get all function inputs */ + const std::vector inputExpr() const; + + /** \brief Get all function outputs */ + const std::vector outputExpr() const; + +/// \cond INTERNAL +#ifndef SWIG + /** \brief Access the algorithm directly */ + const std::vector& algorithm() const; + + /** \brief Called from constructor */ + void construct(const std::string& name, const std::vector& arg, + const std::vector& res, const Dict& opts, + const std::vector& ischeme=std::vector(), + const std::vector& oscheme=std::vector()); +#endif // SWIG +/// \endcond + + /** \brief Get the number of atomic operations */ + int getAlgorithmSize() const { return algorithm().size();} + + /** \brief Get the length of the work vector */ + int getWorkSize() const; + + /** \brief Get an atomic operation operator index */ + int getAtomicOperation(int k) const { return algorithm().at(k).op;} + + /** \brief Get the (integer) input arguments of an atomic operation */ + std::pair getAtomicInput(int k) const { + const ScalarAtomic& atomic = algorithm().at(k); + return std::pair(atomic.i1, atomic.i2);} + + /** \brief Get the floating point output argument of an atomic operation */ + double getAtomicInputReal(int k) const { return algorithm().at(k).d;} + + /** \brief Get the (integer) output argument of an atomic operation */ + int getAtomicOutput(int k) const { return algorithm().at(k).i0;} + + /** \brief Number of nodes in the algorithm */ + int countNodes() const; + + /** \brief Clear the function from its symbolic representation, to free up memory, + * no symbolic evaluations are possible after this */ + void clearSymbolic(); + + /** \brief Get all the free variables of the function */ + SX getFree() const; + + /** \brief Get the corresponding matrix type */ + typedef SX MatType; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + }; + +} // namespace casadi + +#endif // CASADI_SX_FUNCTION_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sx_function_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sx_function_internal.hpp new file mode 100755 index 0000000..0f3b279 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/sx_function_internal.hpp @@ -0,0 +1,242 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SX_FUNCTION_INTERNAL_HPP +#define CASADI_SX_FUNCTION_INTERNAL_HPP + +#include "sx_function.hpp" +#include "x_function_internal.hpp" + +#ifdef WITH_OPENCL +#ifdef __APPLE__ +#include +#else +#include +#endif +#endif // WITH_OPENCL +/// \cond INTERNAL + +namespace casadi { +#ifdef WITH_OPENCL + /** \brief Singleton for the sparsity propagation kernel + TODO: Move to a separate file and make non sparsity pattern specific + \author Joel Andersson + \date 2013 + */ + class SparsityPropagationKernel { + public: + // Default constructor + SparsityPropagationKernel(); + + // Destructor + ~SparsityPropagationKernel(); + + // Copy constructor and equality operator + // (not implemented, declared to prevent use of the default ones) + SparsityPropagationKernel(const SparsityPropagationKernel& sparsityPropagationKernel); + SparsityPropagationKernel& + operator=(const SparsityPropagationKernel& sparsityPropagationKernel); + + // Data members (all public) + cl_device_id device_id; + cl_context context; + cl_command_queue command_queue; + cl_platform_id platform_id; + cl_uint ret_num_devices; + cl_uint ret_num_platforms; + }; +#endif // WITH_OPENCL + +/** \brief Internal node class for SXFunction + A regular user should never work with any Node class. Use SXFunction directly. + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT SXFunctionInternal : + public XFunctionInternal, SXNode>{ + friend class SXFunction; + + protected: + /** \brief Constructor (only to be called from SXFunction, therefore protected) */ + SXFunctionInternal(const std::vector >& inputv, + const std::vector >& outputv); + + public: + + /** \brief Make a deep copy */ + virtual SXFunctionInternal* clone() const; + + /** \brief Destructor */ + virtual ~SXFunctionInternal(); + + /** \brief Evaluate numerically, work vectors given */ + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /** \brief Quickfix to avoid segfault, #1552 */ + virtual bool canEvalSX() const {return true;} + + /** \brief evaluate symbolically while also propagating directional derivatives */ + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Create call to (cached) derivative function, forward mode */ + virtual void callForward(const std::vector& arg, const std::vector& res, + const std::vector >& fseed, + std::vector >& fsens, + bool always_inline, bool never_inline); + + /** \brief Create call to (cached) derivative function, reverse mode */ + virtual void callReverse(const std::vector& arg, const std::vector& res, + const std::vector >& aseed, + std::vector >& asens, + bool always_inline, bool never_inline); + + + /** \brief Check if smooth */ + bool isSmooth() const; + + /** \brief Print the algorithm */ + virtual void print(std::ostream &stream) const; + + /** \brief Hessian (forward over adjoint) via source code transformation */ + SX hess(int iind=0, int oind=0); + + /** \brief DATA MEMBERS */ + + /** \brief An element of the algorithm, namely a binary operation */ + typedef ScalarAtomic AlgEl; + + /** \brief An element of the tape */ + template + struct TapeEl { + T d[2]; + }; + + /** \brief all binary nodes of the tree in the order of execution */ + std::vector algorithm_; + + /// work vector for symbolic calculations (allocated first time) + std::vector s_work_; + std::vector free_vars_; + + /// The expressions corresponding to each binary operation + std::vector operations_; + + /// The expressions corresponding to each constant + std::vector constants_; + + /** \brief Initialize */ + virtual void init(); + + /** \brief Generate code for the declarations of the C function */ + virtual void generateDeclarations(CodeGenerator& g) const; + + /** \brief Generate code for the body of the C function */ + virtual void generateBody(CodeGenerator& g) const; + + /** \brief Clear the function from its symbolic representation, to free up memory, + * no symbolic evaluations are possible after this */ + void clearSymbolic(); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /// Is the class able to propagate seeds through the algorithm? + virtual bool spCanEvaluate(bool fwd) { return true;} + + /// Reset the sparsity propagation + virtual void spInit(bool fwd); + + /** \brief Return Jacobian of all input elements with respect to all output elements */ + virtual Function getFullJacobian(); + + /// With just-in-time compilation using OpenCL + bool just_in_time_opencl_; + + /// With just-in-time compilation for the sparsity propagation + bool just_in_time_sparsity_; + +#ifdef WITH_OPENCL + // Initialize sparsity propagation using OpenCL + void allocOpenCL(); + + // Propagate sparsity using OpenCL + void evaluateOpenCL(); + + // Free memory for sparsity propagation using OpenCL + void freeOpenCL(); + + // Initialize sparsity propagation using OpenCL + void spAllocOpenCL(); + + // Propagate sparsity using OpenCL + void spEvaluateOpenCL(bool fwd); + + // Free memory for sparsity propagation using OpenCL + void spFreeOpenCL(); + + // Compile OpenCL program + static void compileProgram(cl_program program); + + // Execute OpenCL kernel + static void executeKernel(cl_kernel kernel); + + // OpenCL memory object for the numerical evaluation + cl_program program_; + + // OpenCL memory object for the sparsity propagation + cl_program sp_program_; + + // Buffers and kernels for numerical evaluation + std::vector input_memobj_, output_memobj_; + cl_kernel kernel_; + + // Buffers and kernels for sparsity propagation + std::vector sp_input_memobj_, sp_output_memobj_; + cl_kernel sp_fwd_kernel_, sp_adj_kernel_; + + // OpenCL context. TODO: Nothing class specific in this class, move to a central location + static SparsityPropagationKernel sparsity_propagation_kernel_; + +#endif // WITH_OPENCL + +}; + + +} // namespace casadi + +/// \endcond +#endif // CASADI_SX_FUNCTION_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/wrapper.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/wrapper.hpp new file mode 100755 index 0000000..b6d23ea --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/wrapper.hpp @@ -0,0 +1,99 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_WRAPPER_HPP +#define CASADI_WRAPPER_HPP + +#include "../function/function_internal.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** \brief A helper class for a Function that wrap another Function + * + * + * \author Joris Gillis + * \date 2014 + */ + template< class Derived> + class Wrapper { + public: + /// Check the dimensions of the internal function after initialization + void checkDimensions(); + /// Evaluate the internal function and make it external + void evaluate(); + protected: + /// The internal function that is being wrapped + Function f_; + }; + +#ifndef SWIG +template< class Derived> +void Wrapper::checkDimensions() { + + Derived* d = static_cast(this); + + // Check number of inputs/outputs + casadi_assert(d->nIn()==f_.nIn()); + casadi_assert(d->nOut()==f_.nOut()); + + // Check sparsities of inputs/outputs + for (int i=0;i< d->nIn();++i) { + casadi_assert_message(d->input(i).sparsity()==f_.input(i).sparsity(), + "Sparsity mismatch for input " << i << ":" << + d->input(i).dimString() << " <-> " << f_.input(i).dimString() << "."); + } + for (int i=0;i< d->nOut();++i) { + casadi_assert_message(d->output(i).sparsity()==f_.output(i).sparsity(), + "Sparsity mismatch for output " << i << ":" << + d->output(i).dimString() << " <-> " << f_.output(i).dimString() << "."); + } + +} + +template< class Derived> +void Wrapper::evaluate() { + Derived* d = static_cast(this); + + // Copy the inputs from external to internal + for (int i=0;i< d->nIn();++i) { + std::copy(d->input(i).begin(), d->input(i).end(), f_.input(i).begin()); + } + + // Evaluate the internal function + f_.evaluate(); + + // Copy the outputs from internal to external + for (int i=0;i< d->nOut();++i) { + std::copy(f_.output(i).begin(), f_.output(i).end(), d->output(i).begin()); + } +} +#endif +} // namespace casadi + +/// \endcond + +#endif // CASADI_WRAPPER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/x_function_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/x_function_internal.hpp new file mode 100755 index 0000000..20362a5 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/function/x_function_internal.hpp @@ -0,0 +1,1143 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_X_FUNCTION_INTERNAL_HPP +#define CASADI_X_FUNCTION_INTERNAL_HPP + +#include +#include "function_internal.hpp" +#include "../casadi_options.hpp" + +// To reuse variables we need to be able to sort by sparsity pattern (preferably using a hash map) +#ifdef USE_CXX11 +#include +#define SPARSITY_MAP std::unordered_map +#else // USE_CXX11 +// Falling back to std::map (binary search tree) +#include +#define SPARSITY_MAP std::map +#endif // USE_CXX11 + +/// \cond INTERNAL + +namespace casadi { + + /** \brief Internal node class for the base class of SXFunctionInternal and MXFunctionInternal + (lacks a public counterpart) + The design of the class uses the curiously recurring template pattern (CRTP) idiom + \author Joel Andersson + \date 2011 + */ + template + class CASADI_EXPORT XFunctionInternal : public FunctionInternal { + public: + + /** \brief Constructor */ + XFunctionInternal(const std::vector& inputv, const std::vector& outputv); + + /** \brief Destructor */ + virtual ~XFunctionInternal() {} + + /** \brief Topological sorting of the nodes based on Depth-First Search (DFS) */ + static void sort_depth_first(std::stack& s, std::vector& nodes); + + /** \brief Topological (re)sorting of the nodes based on Breadth-First Search (BFS) + (Kahn 1962) */ + static void resort_breadth_first(std::vector& algnodes); + + /** \brief Topological (re)sorting of the nodes with the purpose of postponing every + calculation as much as possible, as long as it does not influence a dependent node */ + static void resort_postpone(std::vector& algnodes, std::vector& lind); + + /** \brief Gradient via source code transformation */ + MatType grad(int iind=0, int oind=0); + + /** \brief Tangent via source code transformation */ + MatType tang(int iind=0, int oind=0); + + /** \brief Construct a complete Jacobian by compression */ + MatType jac(int iind=0, int oind=0, bool compact=false, bool symmetric=false, + bool always_inline=true, bool never_inline=false); + + /** \brief Return gradient function */ + virtual Function getGradient(const std::string& name, int iind, int oind, const Dict& opts); + + /** \brief Return tangent function */ + virtual Function getTangent(const std::string& name, int iind, int oind, const Dict& opts); + + /** \brief Return Jacobian function */ + virtual Function getJacobian(const std::string& name, int iind, int oind, + bool compact, bool symmetric, const Dict& opts); + + ///@{ + /** \brief Generate a function that calculates \a nfwd forward derivatives */ + virtual Function getDerForward(const std::string& name, int nfwd, Dict& opts); + virtual int numDerForward() const { return 64;} + ///@} + + ///@{ + /** \brief Generate a function that calculates \a nadj adjoint derivatives */ + virtual Function getDerReverse(const std::string& name, int nadj, Dict& opts); + virtual int numDerReverse() const { return 64;} + ///@} + + /** \brief Generate code for the declarations of the C function */ + virtual void generateDeclarations(CodeGenerator& g) const = 0; + + /** \brief Generate code for the body of the C function */ + virtual void generateBody(CodeGenerator& g) const = 0; + + /** \brief Helper function: Check if a vector equals inputv */ + virtual bool isInput(const std::vector& arg) const; + + /** \brief Create call to (cached) derivative function, forward mode */ + virtual void callForward(const std::vector& arg, const std::vector& res, + const std::vector >& fseed, + std::vector >& fsens, + bool always_inline, bool never_inline); + + /** \brief Create call to (cached) derivative function, reverse mode */ + virtual void callReverse(const std::vector& arg, const std::vector& res, + const std::vector >& aseed, + std::vector >& asens, + bool always_inline, bool never_inline); + + // Data members (all public) + + /** \brief Inputs of the function (needed for symbolic calculations) */ + std::vector inputv_; + + /** \brief Outputs of the function (needed for symbolic calculations) */ + std::vector outputv_; + }; + +#ifdef casadi_implementation + // Template implementations + + template + XFunctionInternal::XFunctionInternal( + const std::vector& inputv, + const std::vector& outputv) : inputv_(inputv), outputv_(outputv) { + addOption("topological_sorting", OT_STRING, "depth-first", "Topological sorting algorithm", + "depth-first|breadth-first"); + addOption("live_variables", OT_BOOLEAN, true, "Reuse variables in the work vector"); + + // Make sure that inputs are symbolic + for (int i=0; i::iterator it = inputv_.begin(); + it != inputv_.end(); ++it) { + has_duplicates = it->hasDuplicates() || has_duplicates; + } + + // Reset temporaries + for (typename std::vector::iterator it = inputv_.begin(); + it != inputv_.end(); ++it) { + it->resetInput(); + } + + if (has_duplicates) { + userOut() << "Input expressions:" << std::endl; + for (int iind=0; iind() << iind << ": " << inputv_[iind] << std::endl; + } + casadi_error("The input expressions are not independent (or were not reset properly)."); + } + } + + + template + void XFunctionInternal::sort_depth_first( + std::stack& s, std::vector& nodes) { + while (!s.empty()) { + + // Get the topmost element + NodeType* t = s.top(); + + // If the last element on the stack has not yet been added + if (t && !t->temp) { + + // Initialize the node + t->init(); + + // Find out which not yet added dependency has most number of dependencies + int max_deps = -1, dep_with_max_deps = -1; + for (int i=0; indep(); ++i) { + if (t->dep(i).get() !=0 && static_cast(t->dep(i).get())->temp == 0) { + int ndep_i = t->dep(i)->ndep(); + if (ndep_i>max_deps) { + max_deps = ndep_i; + dep_with_max_deps = i; + } + } + } + + // If there is any dependency which has not yet been added + if (dep_with_max_deps>=0) { + + // Add to the stack the dependency with the most number of dependencies + // (so that constants, inputs etc are added last) + s.push(static_cast(t->dep(dep_with_max_deps).get())); + + } else { + + // if no dependencies need to be added, we can add the node to the algorithm + nodes.push_back(t); + + // Mark the node as found + t->temp = 1; + + // Remove from stack + s.pop(); + } + } else { + // If the last element on the stack has already been added + s.pop(); + } + } + } + + template + void XFunctionInternal::resort_postpone( + std::vector& algnodes, std::vector& lind) { + // Number of levels + int nlevels = lind.size()-1; + + // Set the counter to be the corresponding place in the algorithm + for (int i=0; itemp = i; + + // Save the level of each element + std::vector level(algnodes.size()); + for (int i=0; i numref(algnodes.size(), 0); + for (int i=0; indep(); ++c) { // for both children + NodeType* child = static_cast(algnodes[i]->dep(c).get()); + if (child && child->hasDep()) + numref[child->temp]++; + } + } + + // Stacks of additional nodes at the current and previous level + std::stack extra[2]; + + // Loop over the levels in reverse order + for (int i=nlevels-1; i>=0; --i) { + + // The stack for the current level (we are removing elements from this stack) + std::stack& extra_this = extra[i%2]; // i odd -> use extra[1] + + // The stack for the previous level (we are adding elements to this stack) + std::stack& extra_prev = extra[1-i%2]; // i odd -> use extra[0] + + // Loop over the nodes of the level + for (int j=lind[i]; j i) continue; + + // for both children + for (int c=0; cndep(); ++c) { + + NodeType* child = static_cast(algnodes[el]->dep(c).get()); + + if (child && child->hasDep()) { + // Decrease the reference count of the children + numref[child->temp]--; + + // If this was the last time the child was referenced ... + // ... and it is not the previous level... + if (numref[child->temp]==0 && level[child->temp] != i-1) { + + // ... then assign a new level ... + level[child->temp] = i-1; + + // ... and add to stack + extra_prev.push(child->temp); + + } // if no more references + } // if binary + } // for c = ... + } // for j + } // for i + + // Count the number of elements on each level + for (std::vector::iterator it=lind.begin(); it!=lind.end(); ++it) + *it = 0; + for (std::vector::const_iterator it=level.begin(); it!=level.end(); ++it) + lind[*it + 1]++; + + // Cumsum to get the index corresponding to the first element of each level + for (int i=0; i runind = lind; // running index for each level + std::vector newind(algnodes.size()); + for (int i=0; itemp]]++; + + // Resort the algorithm and reset the temporary + std::vector oldalgnodes = algnodes; + for (int i=0; itemp = 0; + } + + } + + template + void XFunctionInternal::resort_breadth_first( + std::vector& algnodes) { + // We shall assign a "level" to each element of the algorithm. + // A node which does not depend on other binary nodes are assigned + // level 0 and for nodes that depend on other nodes of the algorithm, + // the level will be the maximum level of any of the children plus 1. + // Note that all nodes of a level can be evaluated in parallel. + // The level will be saved in the temporary variable + + // Total number of levels + int nlevels = 0; + + // Get the earliest possible level + for (typename std::vector::iterator it=algnodes.begin(); it!=algnodes.end(); ++it) { + // maximum level of any of the children + int maxlevel = -1; + for (int c=0; c<(*it)->ndep(); ++c) { // Loop over the children + NodeType* child = static_cast((*it)->dep(c).get()); + if (child->hasDep() && child->temp > maxlevel) + maxlevel = child->temp; + } + + // Save the level of this element + (*it)->temp = 1 + maxlevel; + + // Save if new maximum reached + if (1 + maxlevel > nlevels) + nlevels = 1 + maxlevel; + } + nlevels++; + + // Index of the first node on each level + std::vector lind; + + // Count the number of elements on each level + lind.resize(nlevels+1, 0); // all zeros to start with + for (int i=0; itemp+1]++; + + // Cumsum to get the index of the first node on each level + for (int i=0; i runind = lind; // running index for each level + std::vector newind(algnodes.size()); + for (int i=0; itemp]++; + + // Resort the algorithm accordingly and reset the temporary + std::vector oldalgnodes = algnodes; + for (int i=0; itemp = 0; + } + +#if 0 + + int maxl=-1; + for (int i=0; i10) userOut() << "#level " << i << ": " << l << std::endl; + userOut() << l << ", "; + if (l>maxl) maxl= l; + } + userOut() << std::endl << "maxl = " << maxl << std::endl; + + for (int i=0; itemp = i; + } + + + maxl=-1; + for (int i=0; i::const_iterator it = algnodes.begin() + j; + + userOut() << " "<< ii++ << ": "; + + int op = (*it)->op; + stringstream s, s0, s1; + s << "i_" << (*it)->temp; + + int i0 = (*it)->child[0].get()->temp; + int i1 = (*it)->child[1].get()->temp; + + if ((*it)->child[0]->hasDep()) s0 << "i_" << i0; + else s0 << (*it)->child[0]; + if ((*it)->child[1]->hasDep()) s1 << "i_" << i1; + else s1 << (*it)->child[1]; + + userOut() << s.str() << " = "; + print_c[op](userOut(), s0.str(), s1.str()); + userOut() << ";" << std::endl; + + + + + } + + userOut() << l << ", "; + if (l>maxl) maxl= l; + } + userOut() << std::endl << "maxl (before) = " << maxl << std::endl; + + + for (int i=0; itemp = 0; + } + + +#endif + + // Resort in order to postpone all calculations as much as possible, thus saving cache + resort_postpone(algnodes, lind); + + +#if 0 + + for (int i=0; itemp = i; + } + + + + maxl=-1; + for (int i=0; i::const_iterator it = algnodes.begin() + j; + + userOut() << " "<< ii++ << ": "; + + int op = (*it)->op; + stringstream s, s0, s1; + s << "i_" << (*it)->temp; + + int i0 = (*it)->child[0].get()->temp; + int i1 = (*it)->child[1].get()->temp; + + if ((*it)->child[0]->hasDep()) s0 << "i_" << i0; + else s0 << (*it)->child[0]; + if ((*it)->child[1]->hasDep()) s1 << "i_" << i1; + else s1 << (*it)->child[1]; + + userOut() << s.str() << " = "; + print_c[op](userOut(), s0.str(), s1.str()); + userOut() << ";" << std::endl; + + + + + } + + userOut() << l << ", "; + if (l>maxl) maxl= l; + } + userOut() << std::endl << "maxl = " << maxl << std::endl; + + + // return; + + + + + for (int i=0; itemp = 0; + } + + + + /*assert(0);*/ +#endif + + } + + template + MatType XFunctionInternal::grad(int iind, int oind) { + casadi_assert_message(output(oind).isscalar(), + "Only gradients of scalar functions allowed. Use jacobian instead."); + + // Quick return if trivially empty + if (input(iind).nnz()==0 || output(oind).nnz()==0 || + jacSparsity(iind, oind, true, false).nnz()==0) { + return MatType(input(iind).shape()); + } + + // Adjoint seeds + typename std::vector > aseed(1, std::vector(outputv_.size())); + for (int i=0; i > asens(1, std::vector(inputv_.size())); + for (int i=0; i(this)->callReverse(inputv_, outputv_, aseed, asens, true, false); + + int dir = 0; + for (int i=0; i + MatType XFunctionInternal::tang(int iind, int oind) { + casadi_assert_message(input(iind).isscalar(), + "Only tangent of scalar input functions allowed. Use jacobian instead."); + + // Forward seeds + typename std::vector > fseed(1, std::vector(inputv_.size())); + for (int i=0; i > fsens(1, std::vector(outputv_.size())); + for (int i=0; i(this)->callForward(inputv_, outputv_, fseed, fsens, true, false); + + // Return adjoint directional derivative + return fsens[0].at(oind); + } + + template + MatType XFunctionInternal + ::jac(int iind, int oind, bool compact, bool symmetric, bool always_inline, bool never_inline) { + using namespace std; + if (verbose()) userOut() << "XFunctionInternal::jac begin" << std::endl; + + // Quick return if trivially empty + if (input(iind).nnz()==0 || output(oind).nnz()==0) { + std::pair jac_shape; + jac_shape.first = compact ? output(oind).nnz() : output(oind).numel(); + jac_shape.second = compact ? input(iind).nnz() : input(iind).numel(); + return MatType(jac_shape); + } + + if (symmetric) { + casadi_assert(output(oind).isdense()); + } + + // Create return object + MatType ret = MatType::zeros(jacSparsity(iind, oind, compact, symmetric).T()); + if (verbose()) userOut() << "XFunctionInternal::jac allocated return value" << std::endl; + + // Quick return if empty + if (ret.nnz()==0) { + return ret.T(); + } + + // Get a bidirectional partition + Sparsity D1, D2; + getPartition(iind, oind, D1, D2, true, symmetric); + if (verbose()) userOut() << "XFunctionInternal::jac graph coloring completed" << std::endl; + + // Get the number of forward and adjoint sweeps + int nfdir = D1.isNull() ? 0 : D1.size2(); + int nadir = D2.isNull() ? 0 : D2.size2(); + + // Number of derivative directions supported by the function + int max_nfdir = CasadiOptions::optimized_num_dir; + int max_nadir = CasadiOptions::optimized_num_dir; + + // Current forward and adjoint direction + int offset_nfdir = 0, offset_nadir = 0; + + // Evaluation result (known) + std::vector res(outputv_); + + // Forward and adjoint seeds and sensitivities + std::vector > fseed, aseed, fsens, asens; + + // Get the sparsity of the Jacobian block + Sparsity jsp = jacSparsity(iind, oind, true, symmetric).T(); + const int* jsp_colind = jsp.colind(); + const int* jsp_row = jsp.row(); + + // Input sparsity + std::vector input_col = input(iind).sparsity().getCol(); + const int* input_row = input(iind).row(); + + // Output sparsity + std::vector output_col = output(oind).sparsity().getCol(); + const int* output_row = output(oind).row(); + + // Get transposes and mappings for jacobian sparsity pattern if we are using forward mode + if (verbose()) userOut() << "XFunctionInternal::jac transposes and mapping" << std::endl; + std::vector mapping; + Sparsity jsp_trans; + if (nfdir>0) { + jsp_trans = jsp.transpose(mapping); + } + + // The nonzeros of the sensitivity matrix + std::vector nzmap, nzmap2; + + // Additions to the jacobian matrix + std::vector adds, adds2; + + // Temporary vector + std::vector tmp; + + // Progress + int progress = -10; + + // Number of sweeps + int nsweep_fwd = nfdir/max_nfdir; // Number of sweeps needed for the forward mode + if (nfdir%max_nfdir>0) nsweep_fwd++; + int nsweep_adj = nadir/max_nadir; // Number of sweeps needed for the adjoint mode + if (nadir%max_nadir>0) nsweep_adj++; + int nsweep = std::max(nsweep_fwd, nsweep_adj); + if (verbose()) userOut() << "XFunctionInternal::jac " << nsweep << " sweeps needed for " + << nfdir << " forward and " << nadir << " adjoint directions" + << std::endl; + + // Sparsity of the seeds + vector seed_col, seed_row; + + // Evaluate until everything has been determined + for (int s=0; s progress / 10) { + progress = progress_new; + userOut() << progress << " %" << std::endl; + } + } + + // Number of forward and adjoint directions in the current "batch" + int nfdir_batch = std::min(nfdir - offset_nfdir, max_nfdir); + int nadir_batch = std::min(nadir - offset_nadir, max_nadir); + + // Forward seeds + fseed.resize(nfdir_batch); + for (int d=0; d0) { + casadi_assert(aseed.size()==0); + static_cast(this)->callForward(inputv_, outputv_, + fseed, fsens, always_inline, never_inline); + } else if (aseed.size()>0) { + casadi_assert(fseed.size()==0); + static_cast(this)->callReverse(inputv_, outputv_, + aseed, asens, always_inline, never_inline); + } + + // Carry out the forward sweeps + for (int d=0; d=0) { + adds[sz] = adds[i]; + tmp[sz++] = i; + } + } + adds.resize(sz); + tmp.resize(sz); + + // Add contribution to the Jacobian + ret[adds] = fsens[d][oind][tmp]; + + if (symmetric) { + // Get entries in fsens[d][oind] with nonnegative indices + tmp.resize(adds2.size()); + sz = 0; + for (int i=0; i=0) { + adds2[sz] = adds2[i]; + tmp[sz++] = i; + } + } + adds2.resize(sz); + tmp.resize(sz); + + // Add contribution to the Jacobian + ret[adds2] = fsens[d][oind][tmp]; + } + } + + // Add elements to the Jacobian matrix + for (int d=0; d + Function XFunctionInternal + ::getGradient(const std::string& name, int iind, int oind, const Dict& opts) { + // Create expressions for the gradient + std::vector ret_out; + ret_out.reserve(1+outputv_.size()); + ret_out.push_back(grad(iind, oind)); + ret_out.insert(ret_out.end(), outputv_.begin(), outputv_.end()); + + // Return function + return PublicType(name, inputv_, ret_out, opts); + } + + template + Function XFunctionInternal + ::getTangent(const std::string& name, int iind, int oind, const Dict& opts) { + // Create expressions for the gradient + std::vector ret_out; + ret_out.reserve(1+outputv_.size()); + ret_out.push_back(tang(iind, oind)); + ret_out.insert(ret_out.end(), outputv_.begin(), outputv_.end()); + + // Return function + return PublicType(name, inputv_, ret_out, opts); + } + + template + Function XFunctionInternal + ::getJacobian(const std::string& name, int iind, int oind, bool compact, bool symmetric, + const Dict& opts) { + // Return function expression + std::vector ret_out; + ret_out.reserve(1+outputv_.size()); + ret_out.push_back(jac(iind, oind, compact, symmetric)); + ret_out.insert(ret_out.end(), outputv_.begin(), outputv_.end()); + + // Return function + return PublicType(name, inputv_, ret_out, opts); + } + + template + Function XFunctionInternal + ::getDerForward(const std::string& name, int nfwd, Dict& opts) { + // Seeds + std::vector > fseed = symbolicFwdSeed(nfwd, inputv_), fsens; + + // Evaluate symbolically + static_cast(this)->evalFwd(fseed, fsens); + casadi_assert(fsens.size()==fseed.size()); + + // Number inputs and outputs + int num_in = nIn(); + int num_out = nOut(); + + // All inputs of the return function + std::vector ret_in; + ret_in.reserve(num_in + num_out + nfwd*num_in); + ret_in.insert(ret_in.end(), inputv_.begin(), inputv_.end()); + for (int i=0; i ret_out; + ret_out.reserve(num_out*nfwd); + for (int d=0; d + Function XFunctionInternal + ::getDerReverse(const std::string& name, int nadj, Dict& opts) { + // Seeds + std::vector > aseed = symbolicAdjSeed(nadj, outputv_), asens; + + // Evaluate symbolically + static_cast(this)->evalAdj(aseed, asens); + + // Number inputs and outputs + int num_in = nIn(); + int num_out = nOut(); + + // All inputs of the return function + std::vector ret_in; + ret_in.reserve(num_in + num_out + nadj*num_out); + ret_in.insert(ret_in.end(), inputv_.begin(), inputv_.end()); + for (int i=0; i ret_out; + ret_out.reserve(num_in*nadj); + for (int d=0; d + bool XFunctionInternal + ::isInput(const std::vector& arg) const { + // Check if arguments matches the input expressions, in which case + // the output is known to be the output expressions + const int checking_depth = 2; + for (int i=0; i + void XFunctionInternal:: + callForward(const std::vector& arg, const std::vector& res, + const std::vector >& fseed, + std::vector >& fsens, + bool always_inline, bool never_inline) { + casadi_assert_message(!(always_inline && never_inline), "Inconsistent options"); + bool inline_function = always_inline; // TODO(@jaeandersson): Add logic for inlining + + // Quick return if no seeds + if (fseed.empty()) { + fsens.clear(); + return; + } + + // The non-inlining version is implemented in the base class + if (!inline_function) { + return FunctionInternal::callForward(arg, res, fseed, fsens, always_inline, never_inline); + } + + if (isInput(arg)) { + // Argument agrees with inputv_, call evalFwd directly + static_cast(this)->evalFwd(fseed, fsens); + } else { + // Need to create a temporary function + PublicType f("tmp", arg, res); + f->evalFwd(fseed, fsens); + } + } + + template + void XFunctionInternal:: + callReverse(const std::vector& arg, const std::vector& res, + const std::vector >& aseed, + std::vector >& asens, + bool always_inline, bool never_inline) { + casadi_assert_message(!(always_inline && never_inline), "Inconsistent options"); + bool inline_function = always_inline; // TODO(@jaeandersson): Add logic for inlining + + // Quick return if no seeds + if (aseed.empty()) { + asens.clear(); + return; + } + + // The non-inlining version is implemented in the base class + if (!inline_function) { + return FunctionInternal::callReverse(arg, res, aseed, asens, always_inline, never_inline); + } + + if (isInput(arg)) { + // Argument agrees with inputv_, call evalAdj directly + static_cast(this)->evalAdj(aseed, asens); + } else { + // Need to create a temporary function + PublicType f("tmp", arg, res); + f->evalAdj(aseed, asens); + } + } + +#endif + +} // namespace casadi +/// \endcond + +#endif // CASADI_X_FUNCTION_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/functor.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/functor.hpp new file mode 100755 index 0000000..c9f4af3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/functor.hpp @@ -0,0 +1,150 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_FUNCTOR_HPP +#define CASADI_FUNCTOR_HPP + +#include "casadi_types.hpp" + +#include "shared_object.hpp" + +namespace casadi { + + /// Function pointer to a derivative generator function + typedef Function (*DerivativeGeneratorCPtr)(Function& fcn, int ndir, void* user_data); + + /// Wrapper around functions + typedef void (*CustomEvaluateCPtr)(CustomFunction &f, void* user_data); + + /// Wrapper around callback + typedef int (*CallbackCPtr)(Function &f, void* user_data); + + /** \brief Functor + \author Joris Gillis + \date 2013 + */ + class CASADI_EXPORT Functor : public SharedObject { + }; + + /** \brief Derivative Generator Functor + * + * In C++, supply a DerivativeGeneratorCPtr function pointer + * + * In python, supply a callable, annotated with derivativegenerator decorator + * \code + * + * @derivativegenerator + * def c(f, nadj, nadir): + * print f + * + * ff.setOption("derivative_generator", c) + * \endcode + * + */ + class CASADI_EXPORT DerivativeGenerator : public Functor { + public: + /// Default constructor + DerivativeGenerator() { } + + /// Construct from C pointer + DerivativeGenerator(DerivativeGeneratorCPtr ptr); + + /// Call + Function operator() (Function& fcn, int ndir, void* user_data); + }; + + /** \brief CustomEvaluate + * + * In C++, supply a CustomEvaluateCPtr function pointer + * + * In python, supply a callable, annotated with pyevaluate decorator + * \code + * + * @pyevaluate + * def c(f, ndir): + * print f + * + * f = CustomFunction(c, ...) + * \endcode + * + */ + class CASADI_EXPORT CustomEvaluate : public Functor { + public: + /// Default constructor + CustomEvaluate() {} + + /// Construct from C pointer + CustomEvaluate(CustomEvaluateCPtr ptr); + + /// Call + void operator() (CustomFunction& fcn, void* user_data); + }; + + class CASADI_EXPORT IterationCallback { + public: + IterationCallback() {} + + virtual int operator() (Function& fcn); + + virtual ~IterationCallback() { } + }; + + /** \brief Callback + * + * In C++, supply a CallbackCPtr function pointer + * When the callback function returns a non-zero integer, the host is signalled of a problem. + * E.g. an NlpSolver may halt iterations if the Callback is something else than 0 + * + * In python, supply a callable, annotated with pycallback decorator + * \code + * + * @pycallback + * def c(f): + * print f + * return 0 + * + * solver.setOption("iteration_callback", c) + * \endcode + * + */ + class CASADI_EXPORT Callback : public Functor { + public: + /// Default constructor + Callback() {} + + /// Construct from C pointer + Callback(CallbackCPtr ptr); + + /// Construct from an IterationCallback object + Callback(IterationCallback & cb); + + /// Call + int operator() (Function& fcn, void* user_data); + }; + +} // namespace casadi + + +#endif // CASADI_FUNCTOR_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/functor_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/functor_internal.hpp new file mode 100755 index 0000000..2b633d3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/functor_internal.hpp @@ -0,0 +1,108 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_FUNCTOR_INTERNAL_HPP +#define CASADI_FUNCTOR_INTERNAL_HPP + +#include "functor.hpp" +/// \cond INTERNAL + +namespace casadi { + + + /** \brief Internal class for Callback + \author Joris Gillis + \date 2013 + */ + class CASADI_EXPORT FunctorInternal : public SharedObjectNode { + friend class Functor; + + }; + + template + class FunctorCInternal { + public: + FunctorCInternal(P ptr) : ptr_(ptr) {} + protected: + P ptr_; + }; + + class CASADI_EXPORT DerivativeGeneratorInternal : public FunctorInternal { + friend class DerivativeGenerator; + virtual Function call(Function& fcn, int ndir, void* user_data)=0; + }; + + class CASADI_EXPORT DerivativeGeneratorCInternal : + public DerivativeGeneratorInternal, FunctorCInternal { + friend class DerivativeGenerator; + + DerivativeGeneratorCInternal(DerivativeGeneratorCPtr ptr); + virtual Function call(Function& fcn, int ndir, void* user_data); + virtual DerivativeGeneratorCInternal* clone() const; + }; + + class CASADI_EXPORT CustomEvaluateInternal : public FunctorInternal { + friend class CustomEvaluate; + virtual void call(CustomFunction& fcn, void* user_data)=0; + }; + + class CASADI_EXPORT CustomEvaluateCInternal : + public CustomEvaluateInternal, FunctorCInternal { + friend class CustomEvaluate; + + CustomEvaluateCInternal(CustomEvaluateCPtr ptr); + virtual void call(CustomFunction& fcn, void* user_data); + virtual CustomEvaluateCInternal* clone() const; + }; + + class CASADI_EXPORT CallbackInternal : public FunctorInternal { + friend class Callback; + virtual int call(Function& fcn, void* user_data)=0; + }; + + class CASADI_EXPORT CallbackCInternal : + public CallbackInternal, FunctorCInternal { + friend class Callback; + + CallbackCInternal(CallbackCPtr ptr); + virtual int call(Function& fcn, void* user_data); + virtual CallbackCInternal* clone() const; + }; + + class CASADI_EXPORT IterationCallbackInternal : + public CallbackInternal { + friend class Callback; + + IterationCallbackInternal(IterationCallback & cb); + virtual int call(Function& fcn, void* user_data); + virtual IterationCallbackInternal* clone() const; + + IterationCallback& cb_; + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_FUNCTOR_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/generic_type.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/generic_type.hpp new file mode 100755 index 0000000..9c583b9 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/generic_type.hpp @@ -0,0 +1,250 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_GENERIC_TYPE_HPP +#define CASADI_GENERIC_TYPE_HPP + +#include "shared_object.hpp" +#include "casadi_types.hpp" +#include +#include + +namespace casadi { + + /** \brief Types of options */ + enum TypeID { + OT_NULL, + OT_BOOLEAN, + OT_INTEGER, + OT_REAL, + OT_STRING, + OT_INTEGERVECTOR, + OT_INTEGERVECTORVECTOR, + OT_BOOLVECTOR, + OT_REALVECTOR, + OT_STRINGVECTOR, + OT_DICT, + OT_DERIVATIVEGENERATOR, + OT_FUNCTION, + OT_CALLBACK, + OT_VOIDPTR, + OT_UNKNOWN}; + + /** \brief Generic data type, can hold different types such as bool, int, string etc. + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT GenericType : public SharedObject { + public: + /// C++ equivalent of Python's dict or MATLAB's struct + typedef std::map Dict; + + /// Default constructor + GenericType(); + + /// Constructors (implicit type conversion) + GenericType(bool b); + GenericType(int i); + GenericType(double d); + GenericType(const std::string& s); + GenericType(const std::vector& iv); + GenericType(const std::vector& iv); + GenericType(const std::vector< std::vector >& ivv); + GenericType(const std::vector& dv); + GenericType(const std::vector& sv); + GenericType(const char s[]); + GenericType(const Function& f); + GenericType(const DerivativeGenerator& c); + GenericType(const Callback& c); + GenericType(const Dict& dict); + #ifndef SWIG + GenericType(void* ptr); + #endif // SWIG + + /// Get a description of a type + static std::string get_type_description(TypeID type); + + /// Get a description of the object's type + std::string get_description() const { return get_type_description(getType()); } + + /// Construct a GenericType given an TypeID + static GenericType from_type(TypeID type); + + #ifndef SWIG + ///@{ + /// Implicit typecasting + operator bool() const { return toBool();} + operator int() const { return toInt();} + operator double() const { return toDouble();} + operator std::string() const { return toString();} + operator std::vector() const { return toIntVector();} + operator std::vector >() const { return toIntVectorVector();} + operator std::vector() const { return toDoubleVector();} + operator std::vector() const { return toStringVector();} + operator const Function&() const { return asFunction();} + operator const Dict&() const { return asDict();} + operator const DerivativeGenerator& () const { return asDerivativeGenerator();} + operator const Callback& () const { return asCallback();} + ///@} + #endif // SWIG + + // Get type of object + TypeID getType() const; + + bool can_cast_to(TypeID other) const; + bool can_cast_to(const GenericType& other) const { return can_cast_to(other.getType()) ;} + + ///@{ + /** \brief Check if a particular type */ + bool isBool() const; + bool isInt() const; + bool isDouble() const; + bool isString() const; + bool isemptyVector() const; + bool isIntVector() const; + bool isIntVectorVector() const; + bool isDoubleVector() const; + bool isStringVector() const; + bool isDict() const; + bool isFunction() const; + bool isVoidPointer() const; + bool isCallback() const; + bool isDerivativeGenerator() const; + ///@} + +#ifndef SWIG + ///@{ + /** \brief Cast to the internal type */ + const bool& asBool() const; + const int& asInt() const; + const double& asDouble() const; + const std::string& asString() const; + const std::vector& asIntVector() const; + const std::vector >& asIntVectorVector() const; + const std::vector& asDoubleVector() const; + const std::vector& asStringVector() const; + const Dict& asDict() const; + const Function& asFunction() const; + void* const & asVoidPointer() const; + const DerivativeGenerator& asDerivativeGenerator() const; + const Callback& asCallback() const; + ///@} +#endif // SWIG + + ///@{ + //! \brief Convert to a type + bool toBool() const; + int toInt() const; + double toDouble() const; + std::string toString() const; + std::vector toIntVector() const; + std::vector< std::vector > toIntVectorVector() const; + std::vector toDoubleVector() const; + std::vector toStringVector() const; + Dict toDict() const; + Function toFunction() const; + void* toVoidPointer() const; + ///@} + + //! \brief Equality + bool operator==(const GenericType& op2) const; + bool operator!=(const GenericType& op2) const; + +#ifndef SWIG + //! \brief Print + CASADI_EXPORT friend std::ostream& operator<<(std::ostream &stream, + const GenericType& ref); +#endif // SWIG + }; + + /// C++ equivalent of Python's dict or MATLAB's struct + typedef GenericType::Dict Dict; + +#ifndef SWIG + // Create dictionary with 1 element + inline Dict + make_dict(const std::string& n0, const GenericType& x0) { + Dict ret; + ret[n0]=x0; + return ret; + } + + // Create dictionary with 2 elements + inline Dict make_dict(const std::string& n0, const GenericType& x0, + const std::string& n1, const GenericType& x1) { + Dict ret=make_dict(n0, x0); + ret[n1]=x1; + return ret; + } + + // Create dictionary with 3 elements + inline Dict make_dict(const std::string& n0, const GenericType& x0, + const std::string& n1, const GenericType& x1, + const std::string& n2, const GenericType& x2) { + Dict ret=make_dict(n0, x0, n1, x1); + ret[n2]=x2; + return ret; + } + + // Create dictionary with 4 elements + inline Dict make_dict(const std::string& n0, const GenericType& x0, + const std::string& n1, const GenericType& x1, + const std::string& n2, const GenericType& x2, + const std::string& n3, const GenericType& x3) { + Dict ret=make_dict(n0, x0, n1, x1, n2, x2); + ret[n3]=x3; + return ret; + } + + // Create dictionary with 5 elements + inline Dict make_dict(const std::string& n0, const GenericType& x0, + const std::string& n1, const GenericType& x1, + const std::string& n2, const GenericType& x2, + const std::string& n3, const GenericType& x3, + const std::string& n4, const GenericType& x4) { + Dict ret=make_dict(n0, x0, n1, x1, n2, x2, n3, x3); + ret[n4]=x4; + return ret; + } + + // Create dictionary with 6 elements + inline Dict make_dict(const std::string& n0, const GenericType& x0, + const std::string& n1, const GenericType& x1, + const std::string& n2, const GenericType& x2, + const std::string& n3, const GenericType& x3, + const std::string& n4, const GenericType& x4, + const std::string& n5, const GenericType& x5) { + Dict ret=make_dict(n0, x0, n1, x1, n2, x2, n3, x3, n4, x4); + ret[n5]=x5; + return ret; + } + +#endif // SWIG + + +} // namespace casadi + + +#endif // CASADI_GENERIC_TYPE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/generic_type_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/generic_type_internal.hpp new file mode 100755 index 0000000..3e2bd0c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/generic_type_internal.hpp @@ -0,0 +1,56 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_GENERIC_TYPE_INTERNAL_HPP +#define CASADI_GENERIC_TYPE_INTERNAL_HPP + +#include "generic_type.hpp" +#include "std_vector_tools.hpp" + +/// \cond INTERNAL + +namespace casadi { + + class CASADI_EXPORT GenericTypeBase : public SharedObjectNode { + public: + virtual ~GenericTypeBase() {} + virtual TypeID getType() const = 0; + }; + + template + class CASADI_EXPORT GenericTypeInternal : public GenericTypeBase { + public: + explicit GenericTypeInternal(const T& d) : d_(d) {} + virtual ~GenericTypeInternal() {} + virtual GenericTypeInternal* clone() const { return new GenericTypeInternal(d_);} + virtual void print(std::ostream &stream) const { stream << d_; } + virtual TypeID getType() const { return ID;} + T d_; + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_GENERIC_TYPE_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/generic_expression.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/generic_expression.hpp new file mode 100755 index 0000000..f90c9a7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/generic_expression.hpp @@ -0,0 +1,342 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_GENERIC_EXPRESSION_HPP +#define CASADI_GENERIC_EXPRESSION_HPP + +#include "../casadi_math.hpp" + +namespace casadi { + + /** \brief Empty Base + This class is extended in SWIG. + */ + struct CASADI_EXPORT GenericExpressionCommon {}; + + /** \brief Expression interface + * + This is a common base class for SX, MX and Matrix<>, introducing a uniform syntax and implementing + common functionality using the curiously recurring template pattern (CRTP) idiom.\n + + \author Joel Andersson + \date 2012 +*/ +template +class CASADI_EXPORT GenericExpression : public GenericExpressionCommon { +#ifndef SWIG + protected: + // Helper functions + inline const ExType& self() const { return static_cast(*this); } + inline ExType& self() { return static_cast(*this); } +#endif // SWIG + public: + +#if !defined(SWIG) || defined(DOXYGEN) +/** +\ingroup expression_tools +@{ +*/ + /// Addition + friend inline ExType operator+(const ExType &x, const ExType &y) { + return x.zz_plus(y); + } + + /// Subtraction + friend inline ExType operator-(const ExType &x, const ExType &y) { + return x.zz_minus(y); + } + + /// Elementwise multiplication + friend inline ExType operator*(const ExType &x, const ExType &y) { + return x.zz_times(y); + } + + /// Elementwise division + friend inline ExType operator/(const ExType &x, const ExType &y) { + return x.zz_rdivide(y); + } + + /// Logic less than + friend inline ExType operator<(const ExType &x, const ExType &y) { + return x.zz_lt(y); + } + + /// Logic less or equal to + friend inline ExType operator<=(const ExType &x, const ExType &y) { + return x.zz_le(y); + } + + /// Logic greater than + friend inline ExType operator>(const ExType &x, const ExType &y) { + return y.zz_lt(x); + } + + /// Logic greater or equal to + friend inline ExType operator>=(const ExType &x, const ExType &y) { + return y.zz_le(x); + } + + /// Logic equal to + friend inline ExType operator==(const ExType &x, const ExType &y) { + return x.zz_eq(y); + } + + /// Logic not equal to + friend inline ExType operator!=(const ExType &x, const ExType &y) { + return x.zz_ne(y); + } + + /** \brief Logical `and` + * Returns (an expression evaluating to) 1 if both + * expressions are nonzero and 0 otherwise + */ + friend inline ExType operator&&(const ExType &x, const ExType &y) { + return x.zz_and(y); + } + + /** \brief Logical `or` + * returns (an expression evaluating to) 1 if at + * least one expression is nonzero and 0 otherwise + */ + friend inline ExType operator||(const ExType &x, const ExType &y) { + return x.zz_or(y); + } + + /// Absolute value + friend inline ExType fabs(const ExType& x) { + return x.zz_abs(); + } + + /// Absolute value + friend inline ExType abs(const ExType& x) { + return x.zz_abs(); + } + + /// Square root + friend inline ExType sqrt(const ExType& x) { + return x.zz_sqrt(); + } + + /// Sine + friend inline ExType sin(const ExType& x) { + return x.zz_sin(); + } + + /// Cosine + friend inline ExType cos(const ExType& x) { + return x.zz_cos(); + } + + /// Tangent + friend inline ExType tan(const ExType& x) { + return x.zz_tan(); + } + + /// Arc tangent + friend inline ExType atan(const ExType& x) { + return x.zz_atan(); + } + + /// Arc sine + friend inline ExType asin(const ExType& x) { + return x.zz_asin(); + } + + /// Arc cosine + friend inline ExType acos(const ExType& x) { + return x.zz_acos(); + } + + /// Hyperbolic tangent + friend inline ExType tanh(const ExType& x) { + return x.zz_tanh(); + } + + /// Hyperbolic sine + friend inline ExType sinh(const ExType& x) { + return x.zz_sinh(); + } + + /// Hyperbolic cosine + friend inline ExType cosh(const ExType& x) { + return x.zz_cosh(); + } + + /// Inverse hyperbolic tangent + friend inline ExType atanh(const ExType& x) { + return x.zz_atanh(); + } + + /// Inverse hyperbolic sine + friend inline ExType asinh(const ExType& x) { + return x.zz_asinh(); + } + + /// Inverse hyperbolic cosine + friend inline ExType acosh(const ExType& x) { + return x.zz_acosh(); + } + + /// Exponential function + friend inline ExType exp(const ExType& x) { + return x.zz_exp(); + } + + /// Natural logarithm + friend inline ExType log(const ExType& x) { + return x.zz_log(); + } + + /// Base-10 logarithm + friend inline ExType log10(const ExType& x) { + return x.zz_log10(); + } + + /// Round down to nearest integer + friend inline ExType floor(const ExType& x) { + return x.zz_floor(); + } + + /// Round up to nearest integer + friend inline ExType ceil(const ExType& x) { + return x.zz_ceil(); + } + + /// Error function + friend inline ExType erf(const ExType& x) { + return x.zz_erf(); + } + + /// Invers error function + friend inline ExType erfinv(const ExType& x) { + return x.zz_erfinv(); + } + + /** Sine function + sign(x) := -1 for x<0 + sign(x) := 1 for x>0, + sign(0) := 0 + sign(NaN) := NaN + */ + friend inline ExType sign(const ExType& x) { + return x.zz_sign(); + } + + /// Elementwise power + friend inline ExType pow(const ExType& x, const ExType& n) { + return x.zz_power(n); + } + + /// Remainder after division + friend inline ExType fmod(const ExType& x, const ExType& y) { + return x.zz_mod(y); + } + + /// Two argument arc tangent + friend inline ExType atan2(const ExType& x, const ExType& y) { + return x.zz_atan2(y); + } + + /// Smallest of two values + friend inline ExType fmin(const ExType& x, const ExType& y) { + return x.zz_min(y); + } + + /// Largest of two values + friend inline ExType fmax(const ExType& x, const ExType& y) { + return x.zz_max(y); + } + + /// Simplify an expression + friend inline ExType simplify(const ExType &x) { + return x.zz_simplify(); + } + + /** \brief Check if two nodes are equivalent up to a given depth. + * Depth=0 checks if the expressions are identical, i.e. points to the same node. + * + * a = x*x + * b = x*x + * + * a.isEqual(b, 0) will return false, but a.isEqual(b, 1) will return true + */ + friend inline bool isEqual(const ExType& x, const ExType& y, int depth=0) { + return x.zz_isEqual(y, depth); + } + + friend inline bool iszero(const ExType& x) { + return x.isZero(); + } + + /// Copy sign + friend inline ExType copysign(const ExType& x, const ExType& n) { + return x.zz_copysign(n); + } + + /// Elementwise power with const power + friend inline ExType constpow(const ExType& x, const ExType& n) { + return x.zz_constpow(n); + } + + /// In-place addition + inline ExType& operator+=(const ExType &y) { return self() = self().zz_plus(y); } + + /// In-place subtraction + inline ExType& operator-=(const ExType &y) { return self() = self().zz_minus(y); } + + /// In-place elementwise multiplication + inline ExType& operator*=(const ExType &y) {return self() = self().zz_times(y);} + + /// In-place elementwise division + inline ExType& operator/=(const ExType &y) {return self() = self().zz_rdivide(y);} + + /** \brief Logical `not` + * Returns (an expression evaluating to) 1 if + * expression is zero and 0 otherwise + */ + inline ExType operator!() const { return self().zz_not(); } + + /// Logical not, alternative syntax + friend inline ExType logic_not(const ExType& x) { + return !x; + } + + /// Logical and, alternative syntax + friend inline ExType logic_and(const ExType& x, const ExType& y) { + return x && y; + } + + /// Logical or, alterntive syntax + friend inline ExType logic_or(const ExType& x, const ExType& y) { + return x || y; + } +/** @} */ +#endif // SWIG + +}; + +} // namespace casadi + +#endif // CASADI_GENERIC_EXPRESSION_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/generic_matrix.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/generic_matrix.hpp new file mode 100755 index 0000000..e298699 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/generic_matrix.hpp @@ -0,0 +1,850 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_GENERIC_MATRIX_HPP +#define CASADI_GENERIC_MATRIX_HPP + +#include "slice.hpp" +#include "submatrix.hpp" +#include "nonzeros.hpp" +#include "sparsity.hpp" +#include "../casadi_math.hpp" +#include "sparsity_interface.hpp" +#include "../generic_type.hpp" + +namespace casadi { + /** \brief Empty Base + This class is extended in SWIG. + */ + struct CASADI_EXPORT GenericMatrixCommon {}; + + /** \brief Matrix base class + + This is a common base class for MX and Matrix<>, introducing a uniform syntax and implementing + common functionality using the curiously recurring template pattern (CRTP) idiom.\n + + The class is designed with the idea that "everything is a matrix", + that is, also scalars and vectors.\n + This philosophy makes it easy to use and to interface in particularly + with Python and Matlab/Octave.\n + + The syntax tries to stay as close as possible to the ublas syntax + when it comes to vector/matrix operations.\n + + Index starts with 0.\n + Index vec happens as follows: (rr, cc) -> k = rr+cc*size1()\n + Vectors are column vectors.\n + + The storage format is Compressed Column Storage (CCS), + similar to that used for sparse matrices in Matlab, \n + but unlike this format, we do allow for elements to be structurally non-zero + but numerically zero.\n + + The sparsity pattern, which is reference counted and cached, + can be accessed with Sparsity& sparsity()\n + + \author Joel Andersson + \date 2012 + */ + template + class CASADI_EXPORT GenericMatrix + : public GenericMatrixCommon, + public SparsityInterface { + using SparsityInterface::self; + public: + + /** \brief Get the number of (structural) non-zero elements */ + int nnz() const; + + /** \brief [DEPRECATED] Alias for nnz + The meaning of this function will change in future revision. + \see nnz() + */ + int size() const { return nnz();} + + /** \brief Get the number of non-zeros in the lower triangular half */ + int sizeL() const; + + /** \brief Get the number of non-zeros in the upper triangular half */ + int sizeU() const; + + /** \brief Get get the number of non-zeros on the diagonal */ + int sizeD() const; + + /** \brief Get the number of elements */ + int numel() const; + + /** \brief Get the number of elements in slice (cf. MATLAB) */ + int numel(int i) const { return 1;} + + /** \brief Get the first dimension (i.e. number of rows) */ + int size1() const; + + /** \brief Get the second dimension (i.e. number of columns) */ + int size2() const; + + /** \brief Get string representation of dimensions. + The representation is (nrow x ncol = numel | size) + */ + std::string dimString() const; + + /** \brief Get the shape */ + std::pair shape() const; + + /** \brief Get the size along a particular dimensions */ + int shape(int axis) const; + + /** \brief Check if the sparsity is empty, i.e. if one of the dimensions is zero + * (or optionally both dimensions) */ + bool isempty(bool both=false) const { return sparsity().isempty(both);} + + /** \brief Check if the matrix expression is dense */ + bool isdense() const { return sparsity().isdense();} + + /** \brief Check if the matrix expression is scalar */ + bool isscalar(bool scalar_and_dense=false) const; + + /** \brief Check if the matrix expression is square */ + bool issquare() const { return sparsity().issquare();} + + /** \brief Check if the matrix is a row or column vector */ + bool isvector() const { return sparsity().isvector();} + + /** \brief Check if the matrix is a row vector (i.e. size1()==1) */ + bool isrow() const { return sparsity().isrow();} + + /** \brief Check if the matrix is a column vector (i.e. size2()==1) */ + bool iscolumn() const { return sparsity().iscolumn();} + + /** \brief Check if the matrix is upper triangular */ + bool istriu() const { return sparsity().istriu();} + + /** \brief Check if the matrix is lower triangular */ + bool istril() const { return sparsity().istril();} + + ///@{ + /** \brief Get the sparsity pattern. See the Sparsity class for details. */ + std::vector getRow() const { return sparsity().getRow(); } + std::vector getColind() const { return sparsity().getColind(); } +#ifndef SWIG + const int* row() const { return sparsity().row(); } + const int* colind() const { return sparsity().colind(); } +#endif + int row(int el) const { return sparsity().row(el); } + int colind(int col) const { return sparsity().colind(col); } + ///@} + + /** \brief Get the location of all non-zero elements as they would appear in a Dense matrix + A : DenseMatrix 4 x 3 + B : SparseMatrix 4 x 3 , 5 structural non-zeros + + k = A.find() + A[k] will contain the elements of A that are non-zero in B + */ + std::vector find(bool ind1=SWIG_IND1) const { return sparsity().find(ind1);} + + /** \brief Get the sparsity pattern */ + SWIG_CONSTREF(Sparsity) sparsity() const; + +#ifndef SWIG + /// \cond INTERNAL + /** \brief Access the sparsity, make a copy if there are multiple references to it */ + Sparsity& sparsityRef(); + /// \endcond + + + /// \cond CLUTTER + /** @{ */ + /** \brief Accessed by friend functions */ + int zz_sprank() const { return sprank(sparsity());} + int zz_norm_0_mul(const MatType &A) const { return norm_0_mul(sparsity(), A.sparsity());} + MatType zz_tril(bool includeDiagonal=true) const { + return project(self(), tril(sparsity(), includeDiagonal)); + } + MatType zz_triu(bool includeDiagonal=true) const { + return project(self(), triu(sparsity(), includeDiagonal)); + } + MatType zz_quad_form(const MatType &A) const { + casadi_assert(isvector()); + if (!iscolumn()) return quad_form(self().T(), A); + return inner_prod(self(), mul(A, self())); + } + MatType zz_quad_form() const { + casadi_assert(isvector()); + return inner_prod(self(), self()); + } + MatType zz_sum_square() const { return inner_prod(self(), self());} + MatType zz_linspace(const MatType &b, int nsteps) const; + MatType zz_cross(const MatType &b, int dim=-1) const; + MatType zz_tril2symm() const; + MatType zz_triu2symm() const; + MatType zz_densify() const { + MatType ret = self(); + ret.makeDense(); + return ret; + } + MatType zz_repsum(int n, int m=1) const; + /** @} */ + /// \endcond + + /** \brief Get vector nonzero or slice of nonzeros */ + template + const MatType operator[](const K& k) const { + MatType ret; + self().getNZ(ret, false, k); + return ret; + } + + /** \brief Access vector nonzero or slice of nonzeros */ + template + NonZeros operator[](const K& k) { + return NonZeros(self(), k); + } + + /** \brief Get vector element or slice */ + template + const MatType operator()(const RR& rr) const { + MatType ret; + self().get(ret, false, rr); + return ret; + } + + /** \brief Get Matrix element or slice */ + template + const MatType operator()(const RR& rr, const CC& cc) const { + MatType ret; + self().get(ret, false, rr, cc); + return ret; + } + + /** \brief Access Matrix elements (one argument) */ + template + SubIndex operator()(const RR& rr) { + return SubIndex(self(), rr); + } + + /** \brief Access Matrix elements (two arguments) */ + template + SubMatrix operator()(const RR& rr, const CC& cc) { + return SubMatrix(self(), rr, cc); + } +#endif // SWIG + +#if !defined(SWIG) || defined(DOXYGEN) +/** +\ingroup expression_tools +@{ +*/ + /** \brief Matrix power x^n + */ + inline friend MatType mpower(const MatType& x, const MatType& n) { + return x.zz_mpower(n); + } + + /** \brief Matrix divide (cf. slash '/' in MATLAB) + */ + inline friend MatType mrdivide(const MatType& x, const MatType& n) { + return x.zz_mrdivide(n); + } + + /** \brief Matrix divide (cf. backslash '\' in MATLAB) + */ + inline friend MatType mldivide(const MatType& x, const MatType& n) { + return x.zz_mldivide(n); + } + + /** \brief Get all symbols contained in the supplied expression + * Get all symbols on which the supplied expression depends + * \see SXFunction::getFree(), MXFunction::getFree() + */ + inline friend std::vector symvar(const MatType& x) { + return x.zz_symvar(); + } + + /** \brief Calculate quadratic form X^T A X + */ + inline friend MatType quad_form(const MatType &X, const MatType &A) { + return X.zz_quad_form(A); + } + + /** \brief Calculate quadratic form X^T X + */ + inline friend MatType quad_form(const MatType &X) { + return X.zz_quad_form(); + } + + /** \brief Calculate some of squares: sum_ij X_ij^2 + */ + inline friend MatType sum_square(const MatType &X) { + return X.zz_sum_square(); + } + + /** \brief Matlab's \c linspace command + */ + inline friend MatType linspace(const MatType &a, const MatType &b, int nsteps) { + return a.zz_linspace(b, nsteps); + } + + /** \brief Matlab's \c cross command + */ + inline friend MatType cross(const MatType &a, const MatType &b, int dim = -1) { + return a.zz_cross(b, dim); + } + + /** \brief Matrix determinant (experimental) */ + inline friend MatType det(const MatType& A) { return A.zz_det();} + + /** \brief Matrix inverse (experimental) */ + inline friend MatType inv(const MatType& A) { return A.zz_inv();} + + /** \brief Matrix trace */ + inline friend MatType trace(const MatType& a) { return a.zz_trace();} + + /** \brief Convert a lower triangular matrix to a symmetric one + */ + inline friend MatType tril2symm(const MatType &a) { return a.zz_tril2symm();} + + /** \brief Convert a upper triangular matrix to a symmetric one + */ + inline friend MatType triu2symm(const MatType &a) { return a.zz_triu2symm();} + + /** \brief Frobenius norm */ + inline friend MatType norm_F(const MatType &x) { return x.zz_norm_F();} + + /** \brief 2-norm */ + inline friend MatType norm_2(const MatType &x) { return x.zz_norm_2();} + + /** \brief 1-norm */ + inline friend MatType norm_1(const MatType &x) { return x.zz_norm_1();} + + /** \brief Infinity-norm */ + inline friend MatType norm_inf(const MatType &x) { return x.zz_norm_inf();} + + /** \brief Return a col-wise summation of elements */ + inline friend MatType sumCols(const MatType &x) { return x.zz_sumCols();} + + /** \brief Return a row-wise summation of elements */ + inline friend MatType sumRows(const MatType &x) { return x.zz_sumRows();} + + /** \brief Inner product of two matrices + with x and y matrices of the same dimension + */ + inline friend MatType inner_prod(const MatType &x, const MatType &y) { + return x.zz_inner_prod(y); + } + + /** \brief Take the outer product of two vectors + Equals + \code + x*y.T() + \endcode + with x and y vectors + */ + inline friend MatType outer_prod(const MatType &x, const MatType &y) { + return x.zz_outer_prod(y); + } + + /** \brief Computes the nullspace of a matrix A + * + * Finds Z m-by-(m-n) such that AZ = 0 + * with A n-by-m with m > n + * + * Assumes A is full rank + * + * Inspired by Numerical Methods in Scientific Computing by Ake Bjorck + */ + inline friend MatType nullspace(const MatType& A) { + return A.zz_nullspace(); + } + + /** \brief Evaluate a polynomial with coefficients p in x + */ + inline friend MatType polyval(const MatType& p, const MatType& x) { + return p.zz_polyval(x); + } + + /** \brief Get the diagonal of a matrix or construct a diagonal + When the input is square, the diagonal elements are returned. + If the input is vector-like, a diagonal matrix is constructed with it. */ + inline friend MatType diag(const MatType &A) { + return A.zz_diag(); + } + + /** \brief Unite two matrices no overlapping sparsity + */ + inline friend MatType unite(const MatType& A, const MatType& B) { + return A.zz_unite(B); + } + + /** \brief Make the matrix dense if not already + */ + inline friend MatType densify(const MatType& x) { + return x.zz_densify(); + } + + /** \brief Create a new matrix with a given sparsity pattern but with the + * nonzeros taken from an existing matrix + */ + inline friend MatType project(const MatType& A, const Sparsity& sp, + bool intersect=false) { + return A.zz_project(sp, intersect); + } + + /** \brief Branching on MX nodes + Ternary operator, "cond ? if_true : if_false" + */ + inline friend MatType if_else(const MatType &cond, const MatType &if_true, + const MatType &if_false, bool short_circuit=true) { + return cond.zz_if_else(if_true, if_false, short_circuit); + } + + /** \brief Create a switch + * + * If the condition \param ind evaluates to the integer k, where 0<=k &x, + const MatType &x_default, bool short_circuit=true) { + return ind.zz_conditional(x, x_default, short_circuit); + } + + /** \brief Check if expression depends on the argument + The argument must be symbolic + */ + inline friend bool dependsOn(const MatType& f, const MatType &arg) { + return f.zz_dependsOn(arg); + } + + /** \brief Substitute variable v with expression vdef in an expression ex */ + friend inline MatType substitute(const MatType& ex, const MatType& v, + const MatType& vdef) { + return ex.zz_substitute(v, vdef); + } + + /** \brief Substitute variable var with expression expr in multiple expressions */ + friend inline std::vector + substitute(const std::vector& ex, const std::vector& v, + const std::vector& vdef) { + return MatType::zz_substitute(ex, v, vdef); + } + + /** \brief Inplace substitution with piggyback expressions + * Substitute variables v out of the expressions vdef sequentially, + * as well as out of a number of other expressions piggyback */ + inline friend void + substituteInPlace(const std::vector& v, + std::vector& inout_vdef, + std::vector& inout_ex, bool reverse=false) { + return MatType::zz_substituteInPlace(v, inout_vdef, inout_ex, reverse); + } + + /** \brief Solve a system of equations: A*x = b + The solve routine works similar to Matlab's backslash when A is square and nonsingular. + The algorithm used is the following: + 1. A simple forward or backward substitution if A is upper or lower triangular + 2. If the linear system is at most 3-by-3, form the inverse via minor expansion and multiply + 3. Permute the variables and equations as to get a (structurally) nonzero diagonal, + then perform a QR factorization without pivoting and solve the factorized system. + + Note 1: If there are entries of the linear system known to be zero, these will be removed. + Elements that are very small, or will evaluate to be zero, can still cause numerical errors, + due to the lack of pivoting (which is not possible since cannot compare the size of entries) + + Note 2: When permuting the linear system, a BLT (block lower triangular) transformation is + formed. Only the permutation part of this is however used. An improvement would be to solve + block-by-block if there are multiple BLT blocks. + */ + friend inline MatType solve(const MatType& A, const MatType& b) { + return A.zz_solve(b); + } + + /** \brief Solve a system of equations: A*x = b + */ + friend inline MatType solve(const MatType& A, const MatType& b, + const std::string& lsolver, + const Dict& dict = Dict()) { + return A.zz_solve(b, lsolver, dict); + } + + /** \brief Computes the Moore-Penrose pseudo-inverse + * + * If the matrix A is fat (size1size2), mul(pinv(A), A) is unity. + * + * pinv(A) = (A'A)^(-1) A' + * + */ + friend inline MatType pinv(const MatType& A) { + return A.zz_pinv(); + } + + /** \brief Computes the Moore-Penrose pseudo-inverse + * + * If the matrix A is fat (size1>size2), mul(A, pinv(A)) is unity. + * If the matrix A is slender (size2& args) { + return xb.zz_getOperatorRepresentation(args); + } + + /** \brief Extract shared subexpressions from an set of expressions */ + inline friend void extractShared(std::vector& ex, + std::vector& v, + std::vector& vdef, + const std::string& v_prefix="v_", + const std::string& v_suffix="") { + MatType::zz_extractShared(ex, v, vdef, v_prefix, v_suffix); + } + + /** \brief Extract shared subexpressions from an set of expressions */ + inline friend void extractShared(const std::vector& ex, + std::vector& ex_output, + std::vector& v, + std::vector& vdef, + const std::string& v_prefix="v_", + const std::string& v_suffix="") { + ex_output = ex; + extractShared(ex_output, v, vdef, v_prefix, v_suffix); + } + + /** \brief Given a repeated matrix, computes the sum of repeated parts + */ + inline friend MatType repsum(const MatType &A, int n, int m=1) { + return A.zz_repsum(n, m); + } + + +/** @} */ +#endif // SWIG + + /** @name Construct symbolic primitives + The "sym" function is intended to work in a similar way as "sym" used + in the Symbolic Toolbox for Matlab but instead creating a + CasADi symbolic primitive. + */ + ///@{ + + /** \brief Create an nrow-by-ncol symbolic primitive */ + static MatType sym(const std::string& name, int nrow=1, int ncol=1) { + return sym(name, Sparsity::dense(nrow, ncol)); + } + + /** \brief Construct a symbolic primitive with given dimensions */ + static MatType sym(const std::string& name, const std::pair &rc) { + return sym(name, rc.first, rc.second); + } + + /** \brief Create symbolic primitive with a given sparsity pattern */ + static MatType sym(const std::string& name, const Sparsity& sp); + + /** \brief Create a vector of length p with with matrices + * with symbolic primitives of given sparsity */ + static std::vector sym(const std::string& name, const Sparsity& sp, int p); + + /** \brief Create a vector of length p with nrow-by-ncol symbolic primitives */ + static std::vector sym(const std::string& name, int nrow, int ncol, int p) { + return sym(name, Sparsity::dense(nrow, ncol), p); + } + + /** \brief Create a vector of length r of vectors of length p with + * symbolic primitives with given sparsity*/ + static std::vector > + sym(const std::string& name, const Sparsity& sp, int p, int r); + + /** \brief Create a vector of length r of vectors of length p + * with nrow-by-ncol symbolic primitives */ + static std::vector > + sym(const std::string& name, int nrow, int ncol, int p, int r) { + return sym(name, Sparsity::dense(nrow, ncol), p, r); + } + ///@} + +#if !defined(SWIG) || !defined(SWIGMATLAB) + ///@{ + /** \brief [DEPRECATED] Create a sparse matrix with all zeros + Use MatType(nrow, ncol) instead **/ + static MatType sparse(int nrow=1, int ncol=1) { return MatType(nrow, ncol);} + static MatType sparse(const std::pair& rc) { return MatType(rc);} + ///@} + + /** \brief [DEPRECATED] Create a sparse matrix with nonzeros given as a (dense) vector + Use MatType(Sparsity, nz) instead **/ + static MatType sparse(const Sparsity& sp, const MatType& nz) { return MatType(sp, nz); } +#endif // !defined(SWIG) || !defined(SWIGMATLAB) + + ///@{ + /** \brief Create a dense matrix or a matrix with specified sparsity with all entries zero */ + static MatType zeros(int nrow=1, int ncol=1) { return zeros(Sparsity::dense(nrow, ncol)); } + static MatType zeros(const Sparsity& sp) { return MatType(sp, 0, false);} + static MatType zeros(const std::pair& rc) { return zeros(rc.first, rc.second);} + ///@} + + ///@{ + /** \brief Create a dense matrix or a matrix with specified sparsity with all entries one */ + static MatType ones(int nrow=1, int ncol=1) { return ones(Sparsity::dense(nrow, ncol)); } + static MatType ones(const Sparsity& sp) { return MatType(sp, 1, false);} + static MatType ones(const std::pair& rc) { return ones(rc.first, rc.second);} + ///@} + }; + +#ifndef SWIG +#ifdef casadi_implementation + // Implementations + + template + const Sparsity& GenericMatrix::sparsity() const { + return self().sparsity(); + } + + template + Sparsity& GenericMatrix::sparsityRef() { + return self().sparsityRef(); + } + + template + int GenericMatrix::nnz() const { + return sparsity().nnz(); + } + + template + int GenericMatrix::sizeL() const { + return sparsity().sizeL(); + } + + template + int GenericMatrix::sizeU() const { + return sparsity().sizeU(); + } + + template + int GenericMatrix::sizeD() const { + return sparsity().sizeD(); + } + + template + int GenericMatrix::numel() const { + return sparsity().numel(); + } + + template + int GenericMatrix::size1() const { + return sparsity().size1(); + } + + template + int GenericMatrix::size2() const { + return sparsity().size2(); + } + + template + std::pair GenericMatrix::shape() const { + return sparsity().shape(); + } + + template + int GenericMatrix::shape(int axis) const { + if (axis==1) + return sparsity().size1(); + if (axis==2) + return sparsity().size2(); + casadi_error("Axis must be 1 or 2."); + } + + template + std::string GenericMatrix::dimString() const { + return sparsity().dimString(); + } + + template + bool GenericMatrix::isscalar(bool scalar_and_dense) const { + return sparsity().isscalar(scalar_and_dense); + } + +#endif +#endif // SWIG + +#ifdef casadi_implementation + template + std::vector GenericMatrix::sym(const std::string& name, + const Sparsity& sp, int p) { + std::vector ret(p); + std::stringstream ss; + for (int k=0; k + std::vector > GenericMatrix::sym(const std::string& name, + const Sparsity& sp, int p, int r) { + std::vector > ret(r); + for (int k=0; k + MatType GenericMatrix::sym(const std::string& name, const Sparsity& sp) { + throw CasadiException("\"sym\" not defined for instantiation"); + } + + template + MatType GenericMatrix::zz_linspace(const MatType &b, int nsteps) const { + std::vector ret(nsteps); + ret[0] = self(); + MatType step = (b-self())/(nsteps-1); + + for (int i=1; i + MatType GenericMatrix::zz_cross(const MatType &b, int dim) const { + const MatType &a = self(); + casadi_assert_message(a.size1()==b.size1() && a.size2()==b.size2(), + "cross(a, b): Inconsistent dimensions. Dimension of a (" + << a.dimString() << " ) must equal that of b (" + << b.dimString() << ")."); + + casadi_assert_message(a.size1()==3 || a.size2()==3, + "cross(a, b): One of the dimensions of a should have length 3, but got " + << a.dimString() << "."); + casadi_assert_message(dim==-1 || dim==1 || dim==2, + "cross(a, b, dim): Dim must be 1, 2 or -1 (automatic)."); + + std::vector ret(3); + + bool t = a.size1()==3; + + if (dim==1) t = true; + if (dim==2) t = false; + + MatType a1 = t ? a(0, ALL) : a(ALL, 0); + MatType a2 = t ? a(1, ALL) : a(ALL, 1); + MatType a3 = t ? a(2, ALL) : a(ALL, 2); + + MatType b1 = t ? b(0, ALL) : b(ALL, 0); + MatType b2 = t ? b(1, ALL) : b(ALL, 1); + MatType b3 = t ? b(2, ALL) : b(ALL, 2); + + ret[0] = a2*b3-a3*b2; + ret[1] = a3*b1-a1*b3; + ret[2] = a1*b2-a2*b1; + + return t ? vertcat(ret) : horzcat(ret); + } + + template + MatType GenericMatrix::zz_tril2symm() const { + casadi_assert_message(self().issquare(), + "Shape error in tril2symm. Expecting square shape but got " + << self().dimString()); + casadi_assert_message(self().sizeU()-self().sizeD()==0, + "Sparsity error in tril2symm. Found above-diagonal entries in argument: " + << self().dimString()); + return self() + self().T() - diag(diag(self())); + } + + template + MatType GenericMatrix::zz_repsum(int n, int m) const { + casadi_assert(self().size1() % n==0); + casadi_assert(self().size2() % m==0); + std::vector< std::vector< MatType> > s = + blocksplit(self(), self().size1()/n, self().size2()/m); + MatType sum = 0; + for (int i=0;i + MatType GenericMatrix::zz_triu2symm() const { + casadi_assert_message(self().issquare(), + "Shape error in triu2symm. Expecting square shape but got " + << self().dimString()); + casadi_assert_message(self().sizeL()-self().sizeD()==0, + "Sparsity error in triu2symm. Found below-diagonal entries in argument: " + << self().dimString()); + return self() + self().T() - diag(diag(self())); + } + +#endif + +} // namespace casadi + +#endif // CASADI_GENERIC_MATRIX_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/matrix.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/matrix.hpp new file mode 100755 index 0000000..23c1c48 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/matrix.hpp @@ -0,0 +1,1170 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MATRIX_HPP +#define CASADI_MATRIX_HPP + +#include +#include +#include "../casadi_exception.hpp" +#include "../printable_object.hpp" +#include "../casadi_limits.hpp" +#include "../std_vector_tools.hpp" +#include "../runtime/runtime.hpp" +#include "generic_matrix.hpp" +#include "generic_expression.hpp" + +namespace casadi { + + /** \brief Empty Base + This class is extended in SWIG. + */ + struct CASADI_EXPORT MatrixCommon {}; + +/// \cond CLUTTER + ///@{ + /** \brief Get typename */ + template inline std::string matrixName() + { return std::string("Matrix<") + typeid(DataType).name() + std::string(">");} + template<> inline std::string matrixName() { return "DMatrix"; } + template<> inline std::string matrixName() { return "IMatrix"; } + ///@} +/// \endcond + + /** \brief Sparse matrix class. SX and DMatrix are specializations. + + General sparse matrix class that is designed with the idea that "everything is a matrix", + that is, also scalars and vectors.\n + This philosophy makes it easy to use and to interface in particularly + with Python and Matlab/Octave.\n + + Index starts with 0.\n + Index vec happens as follows: (rr, cc) -> k = rr+cc*size1()\n + Vectors are column vectors.\n + + The storage format is Compressed Column Storage (CCS), similar to that used for + sparse matrices in Matlab, \n + but unlike this format, we do allow for elements to be structurally non-zero + but numerically zero.\n + + Matrix is polymorphic with a std::vector that contain + all non-identical-zero elements.\n + The sparsity can be accessed with Sparsity& sparsity()\n + + \author Joel Andersson + \date 2010-2014 + */ + template + class CASADI_EXPORT Matrix : + public MatrixCommon, + public GenericExpression >, + public GenericMatrix >, + public PrintableObject > { + public: + + /** \brief constructors */ + /// empty 0-by-0 matrix constructor + Matrix(); + + /// Copy constructor + Matrix(const Matrix& m); + +#ifndef SWIG + /// Assignment (normal) + Matrix& operator=(const Matrix& m); +#endif // SWIG + + /** \brief Create a sparse matrix with all structural zeros */ + Matrix(int nrow, int ncol); + +#ifndef SWIG + /** \brief Create a sparse matrix with all structural zeros */ + explicit Matrix(const std::pair& rc); +#endif // SWIG + + /** \brief Create a sparse matrix from a sparsity pattern. + Same as Matrix::ones(sparsity) + */ + explicit Matrix(const Sparsity& sp); + + /** \brief Construct matrix with a given sparsity and nonzeros */ + Matrix(const Sparsity& sp, const Matrix& d); + + /** \brief Check if the dimensions and colind, row vectors are compatible. + * \param complete set to true to also check elementwise + * throws an error as possible result + */ + void sanityCheck(bool complete=false) const; + + /// This constructor enables implicit type conversion from a numeric type + Matrix(double val); + + /// Dense matrix constructor with data given as vector of vectors + explicit Matrix(const std::vector< std::vector >& m); + + /** \brief Create a matrix from another matrix with a different entry type + * Assumes that the scalar conversion is valid. + */ + template + Matrix(const Matrix& x) : sparsity_(x.sparsity()), data_(std::vector(x.nnz())) { + copy(x.begin(), x.end(), begin()); + } + + /** \brief Create an expression from a vector */ + template + Matrix(const std::vector& x) : sparsity_(Sparsity::dense(x.size(), 1)), + data_(std::vector(x.size())) { + copy(x.begin(), x.end(), begin()); + } + +#ifndef SWIG + /// Construct from a vector + Matrix(const std::vector& x); + + /// Convert to scalar type + const DataType toScalar() const; + + /// Scalar type + typedef DataType ScalarType; + + /// Base class + typedef GenericMatrix > B; + + /// Expose base class functions + using B::nnz; + using B::sizeL; + using B::sizeU; + using B::numel; + using B::size1; + using B::size2; + using B::shape; + using B::isempty; + using B::isscalar; + using B::isdense; + using B::isvector; + using B::isrow; + using B::iscolumn; + using B::istril; + using B::istriu; + using B::colind; + using B::row; + using B::dimString; + using B::sym; + using B::zeros; + using B::ones; + using B::operator[]; + using B::operator(); + using B::zz_horzsplit; + using B::zz_vertsplit; + using B::zz_diagsplit; + + /// \cond INTERNAL + /// Expose iterators + typedef typename std::vector::iterator iterator; + typedef typename std::vector::const_iterator const_iterator; + + /// References + typedef DataType& reference; + typedef const DataType& const_reference; + + /// Get iterators to beginning and end + iterator begin() { return data().begin();} + const_iterator begin() const { return data().begin();} + iterator end() { return data().end();} + const_iterator end() const { return data().end();} + + /// Get references to beginning and end + reference front() { return data().front();} + const_reference front() const { return data().front();} + reference back() { return data().back();} + const_reference back() const { return data().back();} + /// \endcond + + /// Get a non-zero element + inline const DataType& at(int k) const { + return const_cast*>(this)->at(k); + } + + /// Access a non-zero element + inline DataType& at(int k) { + try { + if (k<0) k+=nnz(); + return data().at(k); + } catch(std::out_of_range& /* unnamed */) { + std::stringstream ss; + ss << "Out of range error in Matrix<>::at: " << k << " not in range [0, " << nnz() << ")"; + throw CasadiException(ss.str()); + } + } + + /// get an element + const DataType& elem(int rr, int cc=0) const; + + /// get a reference to an element + DataType& elem(int rr, int cc=0); + + /// get an element, do not allocate + const DataType getElement(int rr, int cc=0) const { return elem(rr, cc);} +#endif // SWIG + + /// Returns true if the matrix has a non-zero at location rr, cc + bool hasNZ(int rr, int cc) const { return sparsity().hasNZ(rr, cc); } + + /// Returns the truth value of a Matrix + bool __nonzero__() const; + + /// Is the Matrix a Slice (only for IMatrix) + bool isSlice(bool ind1=false) const; + + /// Convert to Slice (only for IMatrix) + Slice toSlice(bool ind1=false) const; + + /** \brief Set all the entries without changing sparsity pattern */ + void set(const Matrix& val); + +#ifndef SWIG + /** \brief Get all the entries without changing sparsity pattern */ + void get(Matrix& val) const; +#endif // SWIG + + ///@{ + /** \brief Get the elements numerically */ + void set(double val); + void set(const double* val, bool tr=false); + void set(const std::vector& val, bool tr=false); + ///@} + + ///@{ + /** \brief Get the elements numerically */ +#ifndef SWIG + void get(double& val) const; + void get(double* val, bool tr=false) const; +#endif // SWIG + void get(std::vector& SWIG_OUTPUT(m)) const; + ///@} + + ///@{ + /// Get a submatrix, single argument + void get(Matrix& SWIG_OUTPUT(m), bool ind1, const Slice& rr) const; + void get(Matrix& SWIG_OUTPUT(m), bool ind1, const Matrix& rr) const; + void get(Matrix& SWIG_OUTPUT(m), bool ind1, const Sparsity& sp) const; + ///@} + + /// Get a submatrix, two arguments + ///@{ + void get(Matrix& SWIG_OUTPUT(m), bool ind1, + const Slice& rr, const Slice& cc) const; + void get(Matrix& SWIG_OUTPUT(m), bool ind1, + const Slice& rr, const Matrix& cc) const; + void get(Matrix& SWIG_OUTPUT(m), bool ind1, + const Matrix& rr, const Slice& cc) const; + void get(Matrix& SWIG_OUTPUT(m), bool ind1, + const Matrix& rr, const Matrix& cc) const; + ///@} + + ///@{ + /// Set a submatrix, single argument + void set(const Matrix& m, bool ind1, const Slice& rr); + void set(const Matrix& m, bool ind1, const Matrix& rr); + void set(const Matrix& m, bool ind1, const Sparsity& sp); + ///@} + + ///@{ + /// Set a submatrix, two arguments + void set(const Matrix& m, bool ind1, const Slice& rr, const Slice& cc); + void set(const Matrix& m, bool ind1, const Slice& rr, const Matrix& cc); + void set(const Matrix& m, bool ind1, const Matrix& rr, const Slice& cc); + void set(const Matrix& m, bool ind1, const Matrix& rr, const Matrix& cc); + ///@} + + ///@{ + /// Add a submatrix to an existing matrix (TODO: remove memory allocation) + template + void addSub(const Matrix& m, RR rr, CC cc, bool ind1) { + set(m+sub(rr, cc, ind1), rr, cc, ind1); + } + ///@} + +#ifndef SWIG + /** \brief Set all the nonzeros without changing sparsity pattern */ + void setNZ(const Matrix& val); + + /** \brief Get all the nonzeros without changing sparsity pattern */ + void getNZ(Matrix& val) const; +#endif // SWIG + + ///@{ + /** \brief Set the elements numerically */ + void setNZ(double val); + void setNZ(const double* val); + void setNZ(const std::vector& val); + ///@} + + ///@{ + /** \brief Get the elements numerically */ +#ifndef SWIG + void getNZ(double& val) const; + void getNZ(double* val) const; +#endif // SWIG + void getNZ(std::vector& SWIG_OUTPUT(m)) const; + ///@} + + ///@{ + /** \brief Set upper triangular elements */ + void setSym(const double* val); + void setSym(const std::vector& val); + ///@} + + ///@{ + /** \brief Get upper triangular elements */ +#ifndef SWIG + void getSym(double* val) const; +#endif // SWIG + void getSym(std::vector& SWIG_OUTPUT(m)) const; + ///@} + + ///@{ + /// Get a set of nonzeros + void getNZ(Matrix& SWIG_OUTPUT(m), bool ind1, const Slice& k) const; + void getNZ(Matrix& SWIG_OUTPUT(m), bool ind1, const Matrix& k) const; + ///@} + + ///@{ + /// Set a set of nonzeros + void setNZ(const Matrix& m, bool ind1, const Slice& k); + void setNZ(const Matrix& m, bool ind1, const Matrix& k); + ///@} + + /// [DEPRECATED] Append a matrix vertically (NOTE: only efficient if vector) + void append(const Matrix& y); + + /// [DEPRECATED] Append a matrix horizontally + void appendColumns(const Matrix& y); + + /// [DEPRECATED] Set all elements to zero + void setZero(); + +#ifndef SWIG + /// Set all elements to a value + void setAll(const DataType& val); + + /// Make the matrix dense + void makeDense(const DataType& val = 0); +#endif // SWIG + + + /** \brief [DEPRECATED: use sparsify instead] + Make a matrix sparse by removing numerical zeros smaller + * in absolute value than a specified tolerance */ + void makeSparse(double tol=0); + + Matrix operator+() const; + Matrix operator-() const; + + /// \cond INTERNAL + ///@{ + /** \brief Create nodes by their ID */ + static Matrix binary(int op, const Matrix &x, const Matrix &y); + static Matrix unary(int op, const Matrix &x); + static Matrix scalar_matrix(int op, + const Matrix &x, const Matrix &y); + static Matrix matrix_scalar(int op, + const Matrix &x, const Matrix &y); + static Matrix matrix_matrix(int op, + const Matrix &x, const Matrix &y); + ///@} + /// \endcond + +#ifndef SWIG + /// \cond CLUTTER + ///@{ + /// Functions called by friend functions defined for GenericExpression + Matrix zz_plus(const Matrix &y) const; + Matrix zz_minus(const Matrix &y) const; + Matrix zz_times(const Matrix &y) const; + Matrix zz_rdivide(const Matrix &y) const; + Matrix zz_lt(const Matrix &y) const; + Matrix zz_le(const Matrix &y) const; + Matrix zz_eq(const Matrix &y) const; + Matrix zz_ne(const Matrix &y) const; + Matrix zz_atan2(const Matrix& y) const; + Matrix zz_min(const Matrix& y) const; + Matrix zz_max(const Matrix& y) const; + Matrix zz_and(const Matrix& y) const; + Matrix zz_or(const Matrix& y) const; + Matrix zz_abs() const; + Matrix zz_sqrt() const; + Matrix zz_sin() const; + Matrix zz_cos() const; + Matrix zz_tan() const; + Matrix zz_asin() const; + Matrix zz_acos() const; + Matrix zz_atan() const; + Matrix zz_sinh() const; + Matrix zz_cosh() const; + Matrix zz_tanh() const; + Matrix zz_asinh() const; + Matrix zz_acosh() const; + Matrix zz_atanh() const; + Matrix zz_exp() const; + Matrix zz_log() const; + Matrix zz_log10() const; + Matrix zz_floor() const; + Matrix zz_ceil() const; + Matrix zz_erf() const; + Matrix zz_erfinv() const; + Matrix zz_sign() const; + Matrix zz_power(const Matrix &y) const; + Matrix zz_mod(const Matrix& y) const; + Matrix zz_simplify() const; + bool zz_isEqual(const Matrix &ex2, int depth=0) const; + Matrix zz_copysign(const Matrix& y) const; + Matrix zz_constpow(const Matrix &y) const; + Matrix zz_not() const; + ///@} + + ///@{ + /// Functions called by friend functions defined for GenericMatrix + Matrix zz_jacobian(const Matrix &arg) const; + Matrix zz_gradient(const Matrix &arg) const; + Matrix zz_tangent(const Matrix &arg) const; + Matrix zz_hessian(const Matrix &arg) const; + Matrix zz_hessian(const Matrix &arg, Matrix& g) const; + Matrix zz_substitute(const Matrix& v, const Matrix& vdef) const; + static std::vector > + zz_substitute(const std::vector >& ex, + const std::vector >& v, + const std::vector >& vdef); + static void zz_substituteInPlace(const std::vector >& v, + std::vector >& vdef, + std::vector >& ex, + bool revers); + Matrix zz_pinv() const; + Matrix zz_pinv(const std::string& lsolver, const Dict& opts) const; + Matrix zz_solve(const Matrix& b) const; + Matrix zz_solve(const Matrix& b, + const std::string& lsolver, const Dict& opts) const; + int zz_countNodes() const; + std::string zz_getOperatorRepresentation(const std::vector& args) const; + static void zz_extractShared(std::vector >& ex, + std::vector >& v, + std::vector >& vdef, + const std::string& v_prefix, + const std::string& v_suffix); + Matrix zz_quad_form() const { return B::zz_quad_form();} + Matrix zz_quad_form(const Matrix& A) const; + Matrix zz_if_else(const Matrix &if_true, + const Matrix &if_false, + bool short_circuit) const; + Matrix zz_conditional(const std::vector > &x, + const Matrix &x_default, + bool short_circuit) const; + bool zz_dependsOn(const Matrix &arg) const; + Matrix zz_mpower(const Matrix &y) const; + Matrix zz_mrdivide(const Matrix &y) const; + Matrix zz_mldivide(const Matrix &y) const; + std::vector > zz_symvar() const; + Matrix zz_det() const; + Matrix zz_inv() const; + Matrix zz_trace() const; + Matrix zz_norm_1() const; + Matrix zz_norm_2() const; + Matrix zz_norm_F() const; + Matrix zz_norm_inf() const; + Matrix zz_sumCols() const; + Matrix zz_sumRows() const; + Matrix zz_inner_prod(const Matrix &y) const; + Matrix zz_outer_prod(const Matrix &y) const; + Matrix zz_nullspace() const; + Matrix zz_diag() const; + Matrix zz_unite(const Matrix& B) const; + Matrix zz_project(const Sparsity& sp, bool intersect) const; + Matrix zz_if_else_zero(const Matrix& y) const; + Matrix zz_polyval(const Matrix& x) const; + ///@} + + ///@{ + /// Functions called by friend functions defined for SparsityInterface + static Matrix zz_blockcat(const std::vector< std::vector > > &v); + static Matrix zz_horzcat(const std::vector > &v); + std::vector > zz_horzsplit(const std::vector& offset) const; + static Matrix zz_vertcat(const std::vector > &v); + std::vector< Matrix > zz_vertsplit(const std::vector& offset) const; + std::vector< Matrix > zz_diagsplit(const std::vector& offset1, + const std::vector& offset2) const; + Matrix zz_reshape(int nrow, int ncol) const; + Matrix zz_reshape(const Sparsity& sp) const; + Matrix zz_vecNZ() const; + Matrix zz_kron(const Matrix& b) const; + Matrix zz_mtimes(const Matrix &y) const; + Matrix zz_mac(const Matrix &y, const Matrix &z) const; + ///@} + + ///@{ + /// Functions called by friend functions defined here + Matrix zz_sparsify(double tol=0) const; + void zz_expand(Matrix &weights, Matrix& terms) const; + Matrix zz_pw_const(const Matrix &tval, const Matrix &val) const; + Matrix zz_pw_lin(const Matrix &tval, const Matrix &val) const; + Matrix zz_heaviside() const; + Matrix zz_rectangle() const; + Matrix zz_triangle() const; + Matrix zz_ramp() const; + Matrix zz_gauss_quadrature(const Matrix &x, const Matrix &a, + const Matrix &b, int order=5) const; + Matrix zz_gauss_quadrature(const Matrix &x, const Matrix &a, + const Matrix &b, int order, + const Matrix& w) const; + Matrix zz_jacobianTimesVector(const Matrix &arg, const Matrix &v, + bool transpose_jacobian=false) const; + Matrix zz_taylor(const Matrix& x, + const Matrix& a, int order) const; + Matrix zz_mtaylor(const Matrix& x, + const Matrix& a, int order) const; + Matrix zz_mtaylor(const Matrix& x, const Matrix& a, int order, + const std::vector& order_contributions) const; + Matrix zz_poly_coeff(const Matrix&x) const; + Matrix zz_poly_roots() const; + Matrix zz_eig_symbolic() const; + void zz_qr(Matrix& Q, Matrix& R) const; + Matrix zz_all() const; + Matrix zz_any() const; + Matrix zz_adj() const; + Matrix zz_getMinor(int i, int j) const; + Matrix zz_cofactor(int i, int j) const; + Matrix zz_chol() const; + Matrix zz_norm_inf_mul(const Matrix &y) const; + static Matrix zz_diagcat(const std::vector< Matrix > &A); + ///@} + /// \endcond +#endif // SWIG + + Matrix printme(const Matrix& y) const; + + /// Transpose the matrix + Matrix T() const; + +#if !defined(SWIG) || defined(DOXYGEN) +/** +\ingroup expression_tools +@{ +*/ + /** \brief Matrix adjoint + */ + friend inline Matrix adj(const Matrix& A) { + return A.zz_adj(); + } + + /** \brief Get the (i,j) minor matrix + */ + friend inline Matrix getMinor(const Matrix &x, int i, int j) { + return x.zz_getMinor(i, j); + } + + /** \brief Get the (i,j) cofactor matrix + */ + friend inline Matrix cofactor(const Matrix &x, int i, int j) { + return x.zz_cofactor(i, j); + } + + /** \brief QR factorization using the modified Gram-Schmidt algorithm + * More stable than the classical Gram-Schmidt, but may break down if the rows of A + * are nearly linearly dependent + * See J. Demmel: Applied Numerical Linear Algebra (algorithm 3.1.). + * Note that in SWIG, Q and R are returned by value. + */ + friend inline void qr(const Matrix& A, Matrix& Q, Matrix& R) { + return A.zz_qr(Q, R); + } + + /** \brief Obtain a Cholesky factorisation of a matrix + * Returns an upper triangular R such that R'R = A. + * Matrix A must be positive definite. + * + * At the moment, the algorithm is dense (Cholesky-Banachiewicz). + * There is an open ticket #1212 to make it sparse. + */ + friend inline Matrix chol(const Matrix& A) { + return A.zz_chol(); + } + + /** \brief Returns true only if any element in the matrix is true + */ + friend inline Matrix any(const Matrix &x) { + return x.zz_any(); + } + + /** \brief Returns true only if every element in the matrix is true + */ + friend inline Matrix all(const Matrix &x) { + return x.zz_all(); + } + + /** \brief Inf-norm of a Matrix-Matrix product + */ + friend inline Matrix + norm_inf_mul(const Matrix &x, const Matrix &y) { + return x.zz_norm_inf_mul(y); + } + + /** \brief Make a matrix sparse by removing numerical zeros + */ + friend inline Matrix + sparsify(const Matrix& A, double tol=0) { + return A.zz_sparsify(tol); + } + + /** \brief Expand the expression as a weighted sum (with constant weights) + */ + friend inline void expand(const Matrix& ex, Matrix &weights, + Matrix& terms) { + ex.zz_expand(weights, terms); + } + + /** \brief Create a piecewise constant function + Create a piecewise constant function with n=val.size() intervals + + Inputs: + \param t a scalar variable (e.g. time) + \param tval vector with the discrete values of t at the interval transitions (length n-1) + \param val vector with the value of the function for each interval (length n) + */ + friend inline Matrix pw_const(const Matrix &t, + const Matrix &tval, + const Matrix &val) { + return t.zz_pw_const(tval, val); + } + + /** Create a piecewise linear function + Create a piecewise linear function: + + Inputs: + \brief t a scalar variable (e.g. time) + \brief tval vector with the the discrete values of t (monotonically increasing) + \brief val vector with the corresponding function values (same length as tval) + */ + friend inline Matrix + pw_lin(const Matrix &t, const Matrix &tval, + const Matrix &val) { + return t.zz_pw_lin(tval, val); + } + + /** \brief Heaviside function + * + * \f[ + * \begin {cases} + * H(x) = 0 & x<0 \\ + * H(x) = 1/2 & x=0 \\ + * H(x) = 1 & x>0 \\ + * \end {cases} + * \f] + */ + friend inline Matrix heaviside(const Matrix &x) { + return x.zz_heaviside(); + } + + /** + * \brief rectangle function + * + * \f[ + * \begin {cases} + * \Pi(x) = 1 & |x| < 1/2 \\ + * \Pi(x) = 1/2 & |x| = 1/2 \\ + * \Pi(x) = 0 & |x| > 1/2 \\ + * \end {cases} + * \f] + * + * Also called: gate function, block function, band function, pulse function, window function + */ + friend inline Matrix rectangle(const Matrix &x) { + return x.zz_rectangle(); + } + + /** + * \brief triangle function + * + * \f[ + * \begin {cases} + * \Lambda(x) = 0 & |x| >= 1 \\ + * \Lambda(x) = 1-|x| & |x| < 1 + * \end {cases} + * \f] + * + */ + friend inline Matrix triangle(const Matrix &x) { + return x.zz_triangle(); + } + + /** + * \brief ramp function + * + * + * \f[ + * \begin {cases} + * R(x) = 0 & x <= 1 \\ + * R(x) = x & x > 1 \\ + * \end {cases} + * \f] + * + * Also called: slope function + */ + friend inline Matrix ramp(const Matrix &x) { + return x.zz_ramp(); + } + + ///@{ + /** \brief Integrate f from a to b using Gaussian quadrature with n points */ + friend inline Matrix + gauss_quadrature(const Matrix &f, const Matrix &x, + const Matrix &a, const Matrix &b, + int order=5) { + return f.zz_gauss_quadrature(x, a, b, order); + } + friend inline Matrix + gauss_quadrature(const Matrix &f, const Matrix &x, + const Matrix &a, const Matrix &b, + int order, const Matrix& w) { + return f.zz_gauss_quadrature(x, a, b, order, w); + } + ///@} + + /** \brief Calculate the Jacobian and multiply by a vector from the right + This is equivalent to mul(jacobian(ex, arg), v) or + mul(jacobian(ex, arg).T, v) for + transpose_jacobian set to false and true respectively. If contrast to these + expressions, it will use directional derivatives which is typically (but + not necessarily) more efficient if the complete Jacobian is not needed and v has few rows. + */ + friend inline Matrix jacobianTimesVector(const Matrix &ex, + const Matrix &arg, + const Matrix &v, + bool transpose_jacobian=false) { + return ex.zz_jacobianTimesVector(arg, v, transpose_jacobian); + } + + ///@{ + /** + * \brief univariate Taylor series expansion + * + * Calculate the Taylor expansion of expression 'ex' up to order 'order' with + * respect to variable 'x' around the point 'a' + * + * \f$(x)=f(a)+f'(a)(x-a)+f''(a)\frac {(x-a)^2}{2!}+f'''(a)\frac{(x-a)^3}{3!}+\ldots\f$ + * + * Example usage: + * \code + * taylor(sin(x), x) + * \endcode + * \verbatim >> x \endverbatim + */ + friend inline Matrix taylor(const Matrix& ex, const Matrix& x, + const Matrix& a, int order=1) { + return ex.zz_taylor(x, a, order); + } + friend inline Matrix taylor(const Matrix& ex, const Matrix& x) { + return ex.zz_taylor(x, 0, 1); + } + ///@} + + /** + * \brief multivariate Taylor series expansion + * + * Do Taylor expansions until the aggregated order of a term is equal to 'order'. + * The aggregated order of \f$x^n y^m\f$ equals \f$n+m\f$. + * + */ + friend inline Matrix mtaylor(const Matrix& ex, const Matrix& x, + const Matrix& a, int order=1) { + return ex.zz_mtaylor(x, a, order); + } + + /** + * \brief multivariate Taylor series expansion + * + * Do Taylor expansions until the aggregated order of a term is equal to 'order'. + * The aggregated order of \f$x^n y^m\f$ equals \f$n+m\f$. + * + * The argument order_contributions can denote how match each variable contributes + * to the aggregated order. If x=[x, y] and order_contributions=[1, 2], then the + * aggregated order of \f$x^n y^m\f$ equals \f$1n+2m\f$. + * + * Example usage + * + * \code + * taylor(sin(x+y),[x, y],[a, b], 1) + * \endcode + * \f$ \sin(b+a)+\cos(b+a)(x-a)+\cos(b+a)(y-b) \f$ + * \code + * taylor(sin(x+y),[x, y],[0, 0], 4) + * \endcode + * \f$ y+x-(x^3+3y x^2+3 y^2 x+y^3)/6 \f$ + * \code + * taylor(sin(x+y),[x, y],[0, 0], 4,[1, 2]) + * \endcode + * \f$ (-3 x^2 y-x^3)/6+y+x \f$ + * + */ + friend inline Matrix mtaylor(const Matrix& ex, const Matrix& x, + const Matrix& a, int order, + const std::vector& order_contributions) { + return ex.zz_mtaylor(x, a, order, order_contributions); + } + + /** \brief extracts polynomial coefficients from an expression + * + * \param ex Scalar expression that represents a polynomial + * \param x Scalar symbol that the polynomial is build up with + */ + friend inline Matrix poly_coeff(const Matrix& ex, + const Matrix&x) { + return ex.zz_poly_coeff(x); + } + + /** \brief Attempts to find the roots of a polynomial + * + * This will only work for polynomials up to order 3 + * It is assumed that the roots are real. + * + */ + friend inline Matrix poly_roots(const Matrix& p) { + return p.zz_poly_roots(); + } + + /** \brief Attempts to find the eigenvalues of a symbolic matrix + * This will only work for up to 3x3 matrices + */ + friend inline Matrix eig_symbolic(const Matrix& m) { + return m.zz_eig_symbolic(); + } +/** @} */ +#endif + + /** \brief Set or reset the depth to which equalities are being checked for simplifications */ + static void setEqualityCheckingDepth(int eq_depth=1); + + /** \brief Get the depth to which equalities are being checked for simplifications */ + static int getEqualityCheckingDepth(); + + /// Get name of the class + static std::string className(); + + /// Print a description of the object + void print(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Get strings corresponding to the nonzeros and the interdependencies + void printSplit(std::vector& SWIG_OUTPUT(nz), + std::vector& SWIG_OUTPUT(inter)) const; + + /// Print a representation of the object + void repr(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Print scalar + void printScalar(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Print vector-style + void printVector(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Print dense matrix-stype + void printDense(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Print sparse matrix style + void printSparse(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + void clear(); + void resize(int nrow, int ncol); + void reserve(int nnz); + void reserve(int nnz, int ncol); + + /** \brief Erase a submatrix (leaving structural zeros in its place) + Erase rows and/or columns of a matrix */ + void erase(const std::vector& rr, const std::vector& cc, bool ind1=false); + + /** \brief Erase a submatrix (leaving structural zeros in its place) + Erase elements of a matrix */ + void erase(const std::vector& rr, bool ind1=false); + + /** \brief Remove columns and rows + Remove/delete rows and/or columns of a matrix */ + void remove(const std::vector& rr, const std::vector& cc); + + /** \brief Enlarge matrix + Make the matrix larger by inserting empty rows and columns, + keeping the existing non-zeros */ + void enlarge(int nrow, int ncol, + const std::vector& rr, const std::vector& cc, bool ind1=false); + +#ifndef SWIG + /// Access the non-zero elements + std::vector& data(); + + /// Const access the non-zero elements + const std::vector& data() const; + + /// \cond INTERNAL + /// Get a pointer to the data + DataType* ptr() { return isempty() ? static_cast(0) : &front();} + friend inline DataType* getPtr(Matrix& v) { return v.ptr();} + + /// Get a const pointer to the data + const DataType* ptr() const { return isempty() ? static_cast(0) : &front();} + friend inline const DataType* getPtr(const Matrix& v) { return v.ptr();} + /// \endcond + + /// Const access the sparsity - reference to data member + const Sparsity& sparsity() const { return sparsity_; } + + /// Access the sparsity, make a copy if there are multiple references to it + Sparsity& sparsityRef(); +#endif // SWIG + + /** \brief Get an owning reference to the sparsity pattern */ + Sparsity getSparsity() const { return sparsity();} + +#ifndef SWIG + /// \cond INTERNAL + /** Bitwise set, reinterpreting the data as a bvec_t array */ + void setZeroBV(); + + /** Bitwise set, reinterpreting the data as a bvec_t array */ + void setBV(const Matrix& val); + + /** Bitwise set, reinterpreting the data as a bvec_t array */ + void getBV(Matrix& val) const { val.setBV(*this);} + + /** Bitwise or, reinterpreting the data as a bvec_t array */ + void borBV(const Matrix& val); + + /** \brief Bitwise get the non-zero elements, array */ + void getArrayBV(bvec_t* val, int len) const; + + /** \brief Bitwise set the non-zero elements, array */ + void setArrayBV(const bvec_t* val, int len); + + /** \brief Bitwise or the non-zero elements, array */ + void borArrayBV(const bvec_t* val, int len); + + /** \brief Save the result to the LAPACK banded format -- see LAPACK documentation + kl: The number of subdiagonals in res + ku: The number of superdiagonals in res + ldres: The leading dimension in res + res: The number of superdiagonals */ + void getBand(int kl, int ku, int ldres, DataType *res) const; +/// \endcond +#endif + + /* \brief Construct a sparse matrix from triplet form + * Default matrix size is max(col) x max(row) + */ + ///@{ + static Matrix triplet(const std::vector& row, const std::vector& col, + const Matrix& d); + static Matrix triplet(const std::vector& row, const std::vector& col, + const Matrix& d, int nrow, int ncol); + static Matrix triplet(const std::vector& row, const std::vector& col, + const Matrix& d, const std::pair& rc); + ///@} + + ///@{ + /** \brief create a matrix with all inf */ + static Matrix inf(const Sparsity& sp); + static Matrix inf(int nrow=1, int ncol=1); + static Matrix inf(const std::pair& rc); + ///@} + + ///@{ + /** \brief create a matrix with all nan */ + static Matrix nan(const Sparsity& sp); + static Matrix nan(int nrow=1, int ncol=1); + static Matrix nan(const std::pair& rc); + ///@} + + /** \brief create an n-by-n identity matrix */ + static Matrix eye(int ncol); + + /** \brief Returns a number that is unique for a given symbolic scalar + * + * Only defined if symbolic scalar. + */ + size_t getElementHash() const; + + /// Checks if expression does not contain NaN or Inf + bool isRegular() const; + + /** \brief Check if smooth */ + bool isSmooth() const; + + /** \brief Check if SX is a leaf of the SX graph + + Only defined if symbolic scalar. + */ + bool isLeaf() const; + + /** \brief Check whether a binary SX is commutative + + Only defined if symbolic scalar. + */ + bool isCommutative() const; + + /** \brief Check if symbolic (Dense) + Sparse matrices invariable return false + */ + bool isSymbolic() const; + + /** \brief Check if matrix can be used to define function inputs. + Sparse matrices can return true if all non-zero elements are symbolic + */ + bool isValidInput() const; + + /// \cond INTERNAL + /** \brief Detect duplicate symbolic expressions + If there are symbolic primitives appearing more than once, the function will return + true and the names of the duplicate expressions will be printed to userOut(). + Note: Will mark the node using SXElement::setTemp. + Make sure to call resetInput() after usage. + */ + bool hasDuplicates(); + + /** \brief Reset the marker for an input expression */ + void resetInput(); + /// \endcond + + /** \brief Check if the matrix is constant (note that false negative answers are possible)*/ + bool isConstant() const; + + /** \brief Check if the matrix is integer-valued + * (note that false negative answers are possible)*/ + bool isInteger() const; + + /** \brief check if the matrix is 0 (note that false negative answers are possible)*/ + bool isZero() const; + + /** \brief check if the matrix is 1 (note that false negative answers are possible)*/ + bool isOne() const; + + /** \brief check if the matrix is -1 (note that false negative answers are possible)*/ + bool isMinusOne() const; + + /** \brief check if the matrix is an identity matrix (note that false negative answers + * are possible)*/ + bool isIdentity() const; + + /** \brief Check if the matrix has any zero entries which are not structural zeros */ + bool hasNonStructuralZeros() const; + + /** \brief Get double value (only if constant) */ + double getValue() const; + + /** \brief Get double value (particular nonzero) */ + double getValue(int k) const; + + /** \brief Set double value (only if constant) */ + void setValue(double m); + + /** \brief Set double value (particular nonzero) */ + void setValue(double m, int k); + + /** \brief Get double value (only if integer constant) */ + int getIntValue() const; + + /** \brief Get all nonzeros */ + std::vector nonzeros() const; + + /** \brief Get all nonzeros */ + std::vector nonzeros_int() const; + +#ifndef SWIG +#ifdef USE_CXX11 + /** \brief Type conversion to double */ + explicit operator double() const; + + /** \brief Type conversion to double vector */ + explicit operator std::vector() const; + + /** \brief Type conversion to int */ + explicit operator int() const; +#endif // USE_CXX11 +#endif // SWIG + + /** \brief Get name (only if symbolic scalar) */ + std::string getName() const; + + /** \brief Get expressions of the children of the expression + Only defined if symbolic scalar. + Wraps SXElement SXElement::getDep(int ch=0) const. + */ + Matrix getDep(int ch=0) const; + + /** \brief Get the number of dependencies of a binary SXElement + Only defined if symbolic scalar. + */ + int getNdeps() const; + + // @{ + /// Set the 'precision, width & scientific' used in printing and serializing to streams + static void setPrecision(int precision) { stream_precision_ = precision; } + static void setWidth(int width) { stream_width_ = width; } + static void setScientific(bool scientific) { stream_scientific_ = scientific; } + // @} + +#ifndef SWIG + /// Sparse matrix with a given sparsity with all values same + Matrix(const Sparsity& sp, const DataType& val, bool dummy); + + /// Sparse matrix with a given sparsity and non-zero elements. + Matrix(const Sparsity& sp, const std::vector& d, bool dummy); + + private: + /// Sparsity of the matrix in a compressed column storage (CCS) format + Sparsity sparsity_; + + /// Nonzero elements + std::vector data_; + + /// Precision used in streams + static int stream_precision_; + static int stream_width_; + static bool stream_scientific_; +#endif // SWIG + }; + + // Template specialization declarations + template<> bool Matrix::isSlice(bool ind1) const; + template<> Slice Matrix::toSlice(bool ind1) const; + + ///@{ + /// Readability typedefs + typedef Matrix IMatrix; + typedef Matrix DMatrix; + typedef std::vector DMatrixVector; + typedef std::vector DMatrixVectorVector; + typedef std::map DMatrixDict; + ///@} +} // namespace casadi + +#ifdef casadi_implementation +#include "matrix_impl.hpp" +#endif + +#endif // CASADI_MATRIX_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/matrix_impl.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/matrix_impl.hpp new file mode 100755 index 0000000..4324ab3 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/matrix_impl.hpp @@ -0,0 +1,3018 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MATRIX_IMPL_HPP +#define CASADI_MATRIX_IMPL_HPP + +// The declaration of the class is in a separate file +#include "matrix.hpp" + +#include "../casadi_interrupt.hpp" + +/// \cond INTERNAL + +namespace casadi { + // Implementations + + template + const DataType& Matrix::elem(int rr, int cc) const { + int ind = sparsity().getNZ(rr, cc); + if (ind==-1) + return casadi_limits::zero; + else + return at(ind); + } + + template + int Matrix::stream_precision_ = 6; + template + int Matrix::stream_width_ = 0; + template + bool Matrix::stream_scientific_ = false; + + template + DataType& Matrix::elem(int rr, int cc) { + int oldsize = sparsity().nnz(); + int ind = sparsityRef().addNZ(rr, cc); + if (oldsize != sparsity().nnz()) + data().insert(begin()+ind, DataType(0)); + return at(ind); + } + + template + bool Matrix::__nonzero__() const { + if (numel()!=1) {casadi_error("Only scalar Matrix could have a truth value, but you " + "provided a shape" << dimString());} + return at(0)!=0; + } + + template + bool Matrix::isSlice(bool ind1) const { + throw CasadiException("\"isSlice\" not defined for instantiation"); + return false; + } + + template + Slice Matrix::toSlice(bool ind1) const { + throw CasadiException("\"toSlice\" not defined for instantiation"); + return Slice(); + } + + template + void Matrix::get(Matrix& m, bool ind1, + const Slice& rr, const Slice& cc) const { + // Both are scalar + if (rr.isscalar(size1()) && cc.isscalar(size2())) { + int k = sparsity().getNZ(rr.toScalar(size1()), cc.toScalar(size2())); + if (k>=0) { + m = at(k); + } else { + m = Matrix(1, 1); + } + return; + } + + // Fall back on IMatrix-IMatrix + get(m, ind1, rr.getAll(size1(), ind1), cc.getAll(size2(), ind1)); + } + + template + void Matrix::get(Matrix& m, bool ind1, + const Slice& rr, const Matrix& cc) const { + // Fall back on IMatrix-IMatrix + get(m, ind1, rr.getAll(size1(), ind1), cc); + } + + template + void Matrix::get(Matrix& m, bool ind1, + const Matrix& rr, const Slice& cc) const { + // Fall back on IMatrix-IMatrix + get(m, ind1, rr, cc.getAll(size2(), ind1)); + } + + template + void Matrix::get(Matrix& m, bool ind1, + const Matrix& rr, const Matrix& cc) const { + // Scalar + if (rr.isscalar(true) && cc.isscalar(true)) { + return get(m, ind1, rr.toSlice(ind1), cc.toSlice(ind1)); + } + + // Make sure dense vectors + casadi_assert_message(rr.isdense() && rr.isvector(), + "Marix::get: First index must be a dense vector"); + casadi_assert_message(cc.isdense() && cc.isvector(), + "Marix::get: Second index must be a dense vector"); + + // Get the sparsity pattern - does bounds checking + std::vector mapping; + Sparsity sp = sparsity().sub(rr.data(), cc.data(), mapping, ind1); + + // Copy nonzeros + m = Matrix::zeros(sp); + for (int k=0; k + void Matrix::get(Matrix& m, bool ind1, const Slice& rr) const { + // Scalar + if (rr.isscalar(numel())) { + int r = rr.toScalar(numel()); + int k = sparsity().getNZ(r % size1(), r / size1()); + if (k>=0) { + m = at(k); + } else { + m = Matrix(1, 1); + } + return; + } + + // Fall back on IMatrix + get(m, ind1, rr.getAll(numel(), ind1)); + } + + template + void Matrix::get(Matrix& m, bool ind1, const Matrix& rr) const { + // Scalar + if (rr.isscalar(true)) { + return get(m, ind1, rr.toSlice(ind1)); + } + + // If the indexed matrix is dense, use nonzero indexing + if (isdense()) { + return getNZ(m, ind1, rr); + } + + // Get the sparsity pattern - does bounds checking + std::vector mapping; + Sparsity sp = sparsity().sub(rr.data(), rr.sparsity(), mapping, ind1); + + // If indexed matrix was a row/column vector, make sure that the result is too + bool tr = (iscolumn() && rr.isrow()) || (isrow() && rr.iscolumn()); + + // Copy nonzeros + m = Matrix::zeros(tr ? sp.T() : sp); + for (int k=0; k + void Matrix::get(Matrix& m, bool ind1, const Sparsity& sp) const { + casadi_assert_message(shape()==sp.shape(), + "get(Sparsity sp): shape mismatch. This matrix has shape " + << shape() << ", but supplied sparsity index has shape " + << sp.shape() << "."); + m = project(*this, sp); + } + + template + void Matrix::set(const Matrix& m, bool ind1, + const Slice& rr, const Slice& cc) { + // Both are scalar + if (rr.isscalar(size1()) && cc.isscalar(size2()) && m.isdense()) { + elem(rr.toScalar(size1()), cc.toScalar(size2())) = m.toScalar(); + return; + } + + // Fall back on (IMatrix, IMatrix) + set(m, ind1, rr.getAll(size1(), ind1), cc.getAll(size2(), ind1)); + } + + template + void Matrix::set(const Matrix& m, bool ind1, + const Slice& rr, const Matrix& cc) { + // Fall back on (IMatrix, IMatrix) + set(m, ind1, rr.getAll(size1(), ind1), cc); + } + + template + void Matrix::set(const Matrix& m, bool ind1, + const Matrix& rr, const Slice& cc) { + // Fall back on (IMatrix, IMatrix) + set(m, ind1, rr, cc.getAll(size2(), ind1)); + } + + template + void Matrix::set(const Matrix& m, bool ind1, + const Matrix& rr, const Matrix& cc) { + // Scalar + if (rr.isscalar(true) && cc.isscalar(true) && m.isdense()) { + return set(m, ind1, rr.toSlice(ind1), cc.toSlice(ind1)); + } + + // Row vector rr (e.g. in MATLAB) is transposed to column vector + if (rr.size1()==1 && rr.size2()>1) { + return set(m, ind1, rr.T(), cc); + } + + // Row vector cc (e.g. in MATLAB) is transposed to column vector + if (cc.size1()==1 && cc.size2()>1) { + return set(m, ind1, rr, cc.T()); + } + + // Make sure rr and cc are dense vectors + casadi_assert_message(rr.isdense() && rr.iscolumn(), + "Matrix::set: First index not dense vector"); + casadi_assert_message(cc.isdense() && cc.iscolumn(), + "Matrix::set: Second index not dense vector"); + + // Assert dimensions of assigning matrix + if (rr.size1() != m.size1() || cc.size1() != m.size2()) { + if (m.isscalar()) { + // m scalar means "set all" + return set(repmat(m, rr.size1(), cc.size1()), ind1, rr, cc); + } else if (rr.size1() == m.size2() && cc.size1() == m.size1() + && std::min(m.size1(), m.size2()) == 1) { + // m is transposed if necessary + return set(m.T(), ind1, rr, cc); + } else { + // Error otherwise + casadi_error("Dimension mismatch." << "lhs is " << rr.size1() << "-by-" + << cc.size1() << ", while rhs is " << m.shape()); + } + } + + // Dimensions + int sz1 = size1(), sz2 = size2(); + + // Report out-of-bounds + if (!inBounds(rr.data(), -sz1+ind1, sz1+ind1)) { + casadi_error("set[., r, c] out of bounds. Your rr contains " + << *std::min_element(rr.begin(), rr.end()) << " up to " + << *std::max_element(rr.begin(), rr.end()) + << ", which is outside the range [" << -sz1+ind1 << ","<< sz1+ind1 << ")."); + } + if (!inBounds(cc.data(), -sz2+ind1, sz2+ind1)) { + casadi_error("set [., r, c] out of bounds. Your cc contains " + << *std::min_element(cc.begin(), cc.end()) << " up to " + << *std::max_element(cc.begin(), cc.end()) + << ", which is outside the range [" << -sz2+ind1 << ","<< sz2+ind1 << ")."); + } + + // If we are assigning with something sparse, first remove existing entries + if (!m.isdense()) { + erase(rr.data(), cc.data(), ind1); + } + + // Collect all assignments + IMatrix el = IMatrix::zeros(m.sparsity()); + for (int j=0; j + void Matrix::set(const Matrix& m, bool ind1, const Slice& rr) { + // Scalar + if (rr.isscalar(numel()) && m.isdense()) { + int r = rr.toScalar(numel()); + elem(r % size1(), r / size1()) = m.toScalar(); + return; + } + + // Fall back on IMatrix + set(m, ind1, rr.getAll(numel(), ind1)); + } + + template + void Matrix::set(const Matrix& m, bool ind1, const Matrix& rr) { + // Scalar + if (rr.isscalar(true) && m.isdense()) { + return set(m, ind1, rr.toSlice(ind1)); + } + + // Assert dimensions of assigning matrix + if (rr.sparsity() != m.sparsity()) { + if (rr.shape() == m.shape()) { + // Remove submatrix to be replaced + erase(rr.data(), ind1); + + // Find the intersection between rr's and m's sparsity patterns + Sparsity sp = rr.sparsity() * m.sparsity(); + + // Project both matrices to this sparsity + return set(project(m, sp), ind1, project(rr, sp)); + } else if (m.isscalar()) { + // m scalar means "set all" + if (m.isdense()) { + return set(Matrix(rr.sparsity(), m), ind1, rr); + } else { + return set(Matrix(rr.shape()), ind1, rr); + } + } else if (rr.size1() == m.size2() && rr.size2() == m.size1() + && std::min(m.size1(), m.size2()) == 1) { + // m is transposed if necessary + return set(m.T(), ind1, rr); + } else { + // Error otherwise + casadi_error("Dimension mismatch." << "lhs is " << rr.shape() + << ", while rhs is " << m.shape()); + } + } + + // Dimensions of this + int sz1 = size1(), sz2 = size2(), sz = nnz(), nel = numel(), rrsz = rr.nnz(); + + // Quick return if nothing to set + if (rrsz==0) return; + + // Check bounds + if (!inBounds(rr.data(), -nel+ind1, nel+ind1)) { + casadi_error("set[rr] out of bounds. Your rr contains " + << *std::min_element(rr.begin(), rr.end()) << " up to " + << *std::max_element(rr.begin(), rr.end()) + << ", which is outside the range [" << -nel+ind1 << ","<< nel+ind1 << ")."); + } + + // Dense mode + if (isdense() && m.isdense()) { + return setNZ(m, ind1, rr); + } + + // Construct new sparsity pattern + std::vector new_row=sparsity().getRow(), new_col=sparsity().getCol(), nz(rr.data()); + new_row.reserve(sz+rrsz); + new_col.reserve(sz+rrsz); + nz.reserve(rrsz); + for (std::vector::iterator i=nz.begin(); i!=nz.end(); ++i) { + if (ind1) (*i)--; + if (*i<0) *i += nel; + new_row.push_back(*i % sz1); + new_col.push_back(*i / sz1); + } + Sparsity sp = Sparsity::triplet(sz1, sz2, new_row, new_col); + + // If needed, update pattern + if (sp != sparsity()) *this = project(*this, sp); + + // Find the nonzeros corresponding to rr + sparsity().getNZ(nz); + + // Carry out the assignments + for (int i=0; i + void Matrix::set(const Matrix& m, bool ind1, const Sparsity& sp) { + casadi_assert_message(shape()==sp.shape(), + "set(Sparsity sp): shape mismatch. This matrix has shape " + << shape() << ", but supplied sparsity index has shape " + << sp.shape() << "."); + std::vector ii = sp.find(); + if (m.isscalar()) { + (*this)(ii) = densify(m); + } else { + (*this)(ii) = densify(m(ii)); + } + } + + template + void Matrix::getNZ(Matrix& m, bool ind1, const Slice& kk) const { + // Scalar + if (kk.isscalar(nnz())) { + m = at(kk.toScalar(nnz())); + return; + } + + // Fall back on IMatrix + getNZ(m, ind1, kk.getAll(nnz(), ind1)); + } + + template + void Matrix::getNZ(Matrix& m, bool ind1, const Matrix& kk) const { + // Scalar + if (kk.isscalar(true)) { + return getNZ(m, ind1, kk.toSlice(ind1)); + } + + // Get nonzeros of kk + const std::vector& k = kk.data(); + int sz = nnz(); + + // Check bounds + if (!inBounds(k, -sz+ind1, sz+ind1)) { + casadi_error("getNZ[kk] out of bounds. Your kk contains " + << *std::min_element(k.begin(), k.end()) << " up to " + << *std::max_element(k.begin(), k.end()) + << ", which is outside the range [" << -sz+ind1 << ","<< sz+ind1 << ")."); + } + + // If indexed matrix was a row/column vector, make sure that the result is too + bool tr = (iscolumn() && kk.isrow()) || (isrow() && kk.iscolumn()); + + // Copy nonzeros + m = zeros(tr ? kk.sparsity().T() : kk.sparsity()); + for (int el=0; el=0 ? k_el : k_el+sz); + } + } + + template + void Matrix::setNZ(const Matrix& m, bool ind1, const Slice& kk) { + // Scalar + if (kk.isscalar(nnz())) { + at(kk.toScalar(nnz())) = m.toScalar(); + return; + } + + // Fallback on IMatrix + setNZ(m, ind1, kk.getAll(nnz(), ind1)); + } + + template + void Matrix::setNZ(const Matrix& m, bool ind1, const Matrix& kk) { + // Scalar + if (kk.isscalar(true)) { + return setNZ(m, ind1, kk.toSlice(ind1)); + } + + // Assert dimensions of assigning matrix + if (kk.sparsity() != m.sparsity()) { + if (m.isscalar()) { + // m scalar means "set all" + if (!m.isdense()) return; // Nothing to set + return setNZ(Matrix(kk.sparsity(), m), ind1, kk); + } else if (kk.shape() == m.shape()) { + // Project sparsity if needed + return setNZ(project(m, kk.sparsity()), ind1, kk); + } else if (kk.size1() == m.size2() && kk.size2() == m.size1() + && std::min(m.size1(), m.size2()) == 1) { + // m is transposed if necessary + return setNZ(m.T(), ind1, kk); + } else { + // Error otherwise + casadi_error("Dimension mismatch." << "lhs is " << kk.shape() + << ", while rhs is " << m.shape()); + } + } + + // Get nonzeros + const std::vector& k = kk.data(); + int sz = nnz(); + + // Check bounds + if (!inBounds(k, -sz+ind1, sz+ind1)) { + casadi_error("setNZ[kk] out of bounds. Your kk contains " + << *std::min_element(k.begin(), k.end()) << " up to " + << *std::max_element(k.begin(), k.end()) + << ", which is outside the range [" << -sz+ind1 << ","<< sz+ind1 << ")."); + } + + // Set nonzeros, ignoring negative indices + for (int el=0; el=0 ? k_el : k_el+sz) = m.at(el); + } + } + + template + void Matrix::makeDense(const DataType& val) { + // Quick return if possible + if (isdense()) return; + + // Get sparsity pattern + int nrow = size1(); + int ncol = size2(); + const int* colind = this->colind(); + const int* row = this->row(); + + // Resize data and copy + data_.resize(nrow*ncol, val); + + // Loop over the columns in reverse order + for (int cc=ncol-1; cc>=0; --cc) { + // Loop over nonzero elements of the column in reverse order + for (int el=colind[cc+1]-1; el>=colind[cc]; --el) { + int rr = row[el]; + int new_el = cc*nrow + rr; + if (el==new_el) break; // Already done, the rest of the elements must be in the same place + std::swap(data_[new_el], data_[el]); + } + } + + // Update the sparsity pattern + sparsity_ = Sparsity::dense(shape()); + } + + template + void Matrix::makeSparse(double tol) { + // Quick return if there are no entries to be removed + bool remove_nothing = true; + for (typename std::vector::iterator it=begin(); it!=end() && remove_nothing; ++it) { + remove_nothing = !casadi_limits::isAlmostZero(*it, tol); + } + if (remove_nothing) return; + + // Get the current sparsity pattern + int size1 = this->size1(); + int size2 = this->size2(); + const int* colind = this->colind(); + const int* row = this->row(); + + // Construct the new sparsity pattern + std::vector new_colind(1, 0), new_row; + + // Loop over the columns + for (int cc=0; cc::isAlmostZero(data_[el], tol)) { + // Save the nonzero in its new location + data_[new_row.size()] = data_[el]; + + // Add to pattern + new_row.push_back(row[el]); + } + } + // Save the new column offset + new_colind.push_back(new_row.size()); + } + + // Trim the data vector + data_.resize(new_row.size()); + + // Update the sparsity pattern + sparsity_ = Sparsity(size1, size2, new_colind, new_row); + } + + template + Matrix::Matrix() : sparsity_(Sparsity(0, 0)) { + } + + template + Matrix::Matrix(const Matrix& m) : sparsity_(m.sparsity_), data_(m.data_) { + } + + template + Matrix::Matrix(const std::vector& x) : + sparsity_(Sparsity::dense(x.size(), 1)), data_(x) { + } + + template + Matrix& Matrix::operator=(const Matrix& m) { + sparsity_ = m.sparsity_; + data_ = m.data_; + return *this; + } + + template + std::string Matrix::className() { return matrixName(); } + + template + void Matrix::printScalar(std::ostream &stream, bool trailing_newline) const { + casadi_assert_message(numel()==1, "Not a scalar"); + + std::streamsize precision = stream.precision(); + std::streamsize width = stream.width(); + std::ios_base::fmtflags flags = stream.flags(); + + stream.precision(stream_precision_); + stream.width(stream_width_); + if (stream_scientific_) { + stream.setf(std::ios::scientific); + } else { + stream.unsetf(std::ios::scientific); + } + + if (nnz()==0) { + stream << "00"; + } else { + stream << toScalar(); + } + + if (trailing_newline) stream << std::endl; + stream << std::flush; + stream.precision(precision); + stream.width(width); + stream.flags(flags); + } + + template + void Matrix::printVector(std::ostream &stream, bool trailing_newline) const { + casadi_assert_message(iscolumn(), "Not a vector"); + + // Get components + std::vector nz, inter; + printSplit(nz, inter); + + // Print intermediate expressions + for (int i=0; i + void Matrix::printDense(std::ostream &stream, bool trailing_newline) const { + // Print as a single line + bool oneliner=this->size1()<=1; + + // Get components + std::vector nz, inter; + printSplit(nz, inter); + + // Print intermediate expressions + for (int i=0; icolind(); + int ncol = size2(); + std::vector cind(cptr, cptr+ncol+1); + + // Loop over rows + for (int rr=0; rr0) stream << ", "; + + // Check if nonzero + if (cind[cc] + void Matrix::printSparse(std::ostream &stream, bool trailing_newline) const { + if (nnz()==0) { + stream << "all zero sparse: " << size1() << "-by-" << size2(); + } else { + // Print header + stream << "sparse: " << size1() << "-by-" << size2() << ", " << nnz() << " nnz"; + + // Get components + std::vector nz, inter; + printSplit(nz, inter); + + // Print intermediate expressions + for (int i=0; i " << nz.at(el); + InterruptHandler::check(); + } + } + } + if (trailing_newline) stream << std::endl; + stream << std::flush; + } + + template + void Matrix::printSplit(std::vector& nz, + std::vector& inter) const { + nz.resize(nnz()); + inter.resize(0); + + // Temporary + std::stringstream ss; + ss.precision(stream_precision_); + ss.width(stream_width_); + if (stream_scientific_) { + ss.setf(std::ios::scientific); + } else { + ss.unsetf(std::ios::scientific); + } + + // Print nonzeros + for (int i=0; i + void Matrix::print(std::ostream &stream, bool trailing_newline) const { + if (isempty()) { + stream << "[]"; + } else if (numel()==1) { + printScalar(stream, false); + } else if (iscolumn()) { + printVector(stream, false); + } else if (std::max(size1(), size2())<=10 || static_cast(nnz())/numel()>=0.5) { + // if "small" or "dense" + printDense(stream, false); + } else { + printSparse(stream, false); + } + if (trailing_newline) stream << std::endl; + } + + template + void Matrix::repr(std::ostream &stream, bool trailing_newline) const { + stream << className() << "("; + print(stream, false); + stream << ")"; + if (trailing_newline) stream << std::endl; + stream << std::flush; + } + + template + void Matrix::reserve(int nnz) { + reserve(nnz, size2()); + } + + template + void Matrix::reserve(int nnz, int ncol) { + data().reserve(nnz); + } + + template + void Matrix::resize(int nrow, int ncol) { + sparsity_.resize(nrow, ncol); + } + + template + void Matrix::clear() { + sparsity_ = Sparsity(0, 0); + data().clear(); + } + + template + Matrix::Matrix(double val) : + sparsity_(Sparsity::dense(1, 1)), data_(std::vector(1, val)) { + } + + template + Matrix::Matrix(const std::vector< std::vector >& d) { + // Get dimensions + int nrow=d.size(); + int ncol=d.empty() ? 1 : d.front().size(); + + // Assert consistency + for (int rr=0; rr::Matrix(const std::vector< std::vector >& d): " + "shape mismatch" << std::endl + << "Attempting to construct a matrix from a nested list." << std::endl + << "I got convinced that the desired size is ("<< nrow << " x " << ncol + << " ), but now I encounter a vector of size (" + << d[rr].size() << " )" << std::endl); + } + + // Form matrix + sparsity_ = Sparsity::dense(nrow, ncol); + data().resize(nrow*ncol); + typename std::vector::iterator it=begin(); + for (int cc=0; cc + Matrix::Matrix(const Sparsity& sp) : sparsity_(sp), data_(sp.nnz(), 1) { + } + + template + Matrix::Matrix(int nrow, int ncol) : sparsity_(nrow, ncol) { + } + + template + Matrix::Matrix(const std::pair& rc) : sparsity_(rc) { + } + + template + Matrix::Matrix(const Sparsity& sp, const DataType& val, bool dummy) : + sparsity_(sp), data_(sp.nnz(), val) { + } + + template + Matrix::Matrix(const Sparsity& sp, const std::vector& d, bool dummy) : + sparsity_(sp), data_(d) { + casadi_assert_message(sp.nnz()==d.size(), "Size mismatch." << std::endl + << "You supplied a sparsity of " << sp.dimString() + << ", but the supplied vector is of length " << d.size()); + } + + template + Matrix::Matrix(const Sparsity& sp, const Matrix& d) { + if (d.isscalar()) { + *this = Matrix(sp, d.toScalar(), false); + } else if (d.iscolumn() || d.size1()==1) { + casadi_assert(sp.nnz()==d.numel()); + if (d.isdense()) { + *this = Matrix(sp, d.data(), false); + } else { + *this = Matrix(sp, densify(d).data(), false); + } + } else { + casadi_error("Matrix(Sparsisty, Matrix): Only allowed for scalars and vectors"); + } + } + + template + void Matrix::setZero() { + setAll(0); + } + + template + void Matrix::setAll(const DataType& val) { + std::fill(begin(), end(), val); + } + + template + Matrix Matrix::unary(int op, const Matrix &x) { + // Return value + Matrix ret = Matrix::zeros(x.sparsity()); + + // Nonzeros + std::vector& ret_data = ret.data(); + const std::vector& x_data = x.data(); + + // Do the operation on all non-zero elements + for (int el=0; el::fun(op, x_data[el], x_data[el], ret_data[el]); + } + + // Check the value of the structural zero-entries, if there are any + if (!x.isdense() && !operation_checker(op)) { + // Get the value for the structural zeros + DataType fcn_0; + casadi_math::fun(op, 0, 0, fcn_0); + if (!casadi_limits::isZero(fcn_0)) { // Remove this if? + ret.makeDense(fcn_0); + } + } + + return ret; + } + + template + Matrix Matrix::operator-() const { + return unary(OP_NEG, *this); + } + + template + Matrix Matrix::operator+() const { + return *this; + } + + template + Matrix Matrix::zz_plus(const Matrix &y) const { + return binary(OP_ADD, *this, y); + } + + template + Matrix Matrix::zz_minus(const Matrix &y) const { + return binary(OP_SUB, *this, y); + } + + template + Matrix Matrix::zz_times(const Matrix &y) const { + return binary(OP_MUL, *this, y); + } + + template + Matrix Matrix::zz_rdivide(const Matrix &y) const { + return binary(OP_DIV, *this, y); + } + + template + Matrix Matrix::zz_lt(const Matrix &y) const { + return binary(OP_LT, *this, y); + } + + template + Matrix Matrix::zz_le(const Matrix &y) const { + return binary(OP_LE, *this, y); + } + + template + Matrix Matrix::zz_eq(const Matrix &y) const { + return binary(OP_EQ, *this, y); + } + + template + Matrix Matrix::zz_ne(const Matrix &y) const { + return binary(OP_NE, *this, y); + } + + template + Matrix Matrix::zz_mrdivide(const Matrix& b) const { + casadi_assert_message(isscalar() || b.isscalar(), "Not implemented"); + return *this/b; + } + + template + Matrix Matrix::zz_mldivide(const Matrix& b) const { + casadi_assert_message(isscalar() || b.isscalar(), "Not implemented"); + return b/ *this; + } + + template + Matrix Matrix::zz_mpower(const Matrix& b) const { + casadi_assert_message(isscalar() || b.isscalar(), "Not implemented"); + return pow(*this, b); + } + + template + Sparsity& Matrix::sparsityRef() { + sparsity_.makeUnique(); // NOTE: Remove? + return sparsity_; + } + + template + void Matrix::getBand(int kl, int ku, int ldres, DataType *res) const { + // delete the content of the matrix + for (int j=0; ji+ku) break; + + // Get the subdiagonal + int s = i - j + ku; + + // Store the element + res[s + ldres*j] = data()[el]; + } + } + } + + template + void Matrix::set(const Matrix& val) { + sparsity().set(getPtr(data()), getPtr(val.data()), val.sparsity()); + } + + template + void Matrix::setBV(const Matrix& val) { + bvec_t* bw_this = reinterpret_cast(getPtr(data())); + const bvec_t* bw_val = reinterpret_cast(getPtr(val.data())); + sparsity().set(bw_this, bw_val, val.sparsity()); + } + + template + void Matrix::setZeroBV() { + bvec_t* bw_this = reinterpret_cast(getPtr(data())); + std::fill(bw_this, bw_this+nnz(), bvec_t(0)); + } + + template + void Matrix::borBV(const Matrix& val) { + bvec_t* bw_this = reinterpret_cast(getPtr(data())); + const bvec_t* bw_val = reinterpret_cast(getPtr(val.data())); + sparsity().bor(bw_this, bw_val, val.sparsity()); + } + + template + void Matrix::getArrayBV(bvec_t* val, int len) const { + casadi_assert(len==nnz()); + const bvec_t* bw_this = reinterpret_cast(getPtr(data())); + std::copy(bw_this, bw_this+len, val); + } + + template + void Matrix::setArrayBV(const bvec_t* val, int len) { + casadi_assert(len==nnz()); + bvec_t* bw_this = reinterpret_cast(getPtr(data())); + std::copy(val, val+len, bw_this); + } + + template + void Matrix::borArrayBV(const bvec_t* val, int len) { + casadi_assert(len==nnz()); + bvec_t* bw_this = reinterpret_cast(getPtr(data())); + for (int i=0; i + void Matrix::get(Matrix& val) const { + val.set(*this); + } + + template + Matrix Matrix::zz_power(const Matrix& y) const { + return binary(OP_POW, *this, y); + } + + template + Matrix Matrix::zz_constpow(const Matrix& y) const { + return binary(OP_CONSTPOW, *this, y); + } + + template + Matrix Matrix::zz_sin() const { + return unary(OP_SIN, *this); + } + + template + Matrix Matrix::zz_cos() const { + return unary(OP_COS, *this); + } + + template + Matrix Matrix::zz_tan() const { + return unary(OP_TAN, *this); + } + + template + Matrix Matrix::zz_erf() const { + return unary(OP_ERF, *this); + } + + template + Matrix Matrix::zz_asin() const { + return unary(OP_ASIN, *this); + } + + template + Matrix Matrix::zz_acos() const { + return unary(OP_ACOS, *this); + } + + template + Matrix Matrix::zz_atan() const { + return unary(OP_ATAN, *this); + } + + template + Matrix Matrix::zz_sinh() const { + return unary(OP_SINH, *this); + } + + template + Matrix Matrix::zz_cosh() const { + return unary(OP_COSH, *this); + } + + template + Matrix Matrix::zz_tanh() const { + return unary(OP_TANH, *this); + } + + template + Matrix Matrix::zz_asinh() const { + return unary(OP_ASINH, *this); + } + + template + Matrix Matrix::zz_acosh() const { + return unary(OP_ACOSH, *this); + } + + template + Matrix Matrix::zz_atanh() const { + return unary(OP_ATANH, *this); + } + + template + Matrix Matrix::zz_exp() const { + return unary(OP_EXP, *this); + } + + template + Matrix Matrix::zz_log() const { + return unary(OP_LOG, *this); + } + + template + Matrix Matrix::zz_log10() const { + return log(*this)*(1/std::log(10.)); + } + + template + Matrix Matrix::zz_sqrt() const { + return unary(OP_SQRT, *this); + } + + template + Matrix Matrix::zz_floor() const { + return unary(OP_FLOOR, *this); + } + + template + Matrix Matrix::zz_ceil() const { + return unary(OP_CEIL, *this); + } + + template + Matrix Matrix::zz_mod(const Matrix& y) const { + return binary(OP_FMOD, *this, y); + } + + template + Matrix Matrix::zz_abs() const { + return unary(OP_FABS, *this); + } + + template + Matrix Matrix::zz_sign() const { + return unary(OP_SIGN, *this); + } + + template + Matrix Matrix::zz_copysign(const Matrix& y) const { + return binary(OP_COPYSIGN, *this, y); + } + + template + Matrix Matrix::zz_erfinv() const { + return unary(OP_ERFINV, *this); + } + + template + Matrix Matrix::zz_min(const Matrix& y) const { + return binary(OP_FMIN, *this, y); + } + + template + Matrix Matrix::zz_atan2(const Matrix& y) const { + return binary(OP_ATAN2, *this, y); + } + + template + Matrix Matrix::zz_max(const Matrix& y) const { + return binary(OP_FMAX, *this, y); + } + + template + Matrix Matrix::printme(const Matrix& y) const { + return binary(OP_PRINTME, *this, y); + } + + template + Matrix Matrix::zz_not() const { + return unary(OP_NOT, *this); + } + + template + Matrix Matrix::zz_and(const Matrix& y) const { + return binary(OP_AND, *this, y); + } + + template + Matrix Matrix::zz_or(const Matrix& y) const { + return binary(OP_OR, *this, y); + } + + template + Matrix Matrix::zz_if_else_zero(const Matrix& y) const { + return binary(OP_IF_ELSE_ZERO, *this, y); + } + + template + std::vector& Matrix::data() { + return data_; + } + + template + const std::vector& Matrix::data() const { + return data_; + } + + template + void Matrix::erase(const std::vector& rr, const std::vector& cc, bool ind1) { + // Erase from sparsity pattern + std::vector mapping = sparsityRef().erase(rr, cc, ind1); + + // Update non-zero entries + for (int k=0; k + void Matrix::erase(const std::vector& rr, bool ind1) { + // Erase from sparsity pattern + std::vector mapping = sparsityRef().erase(rr, ind1); + + // Update non-zero entries + for (int k=0; k + void Matrix::remove(const std::vector& rr, const std::vector& cc) { + if (!inBounds(rr, size1())) { + casadi_error("Remove(rr, cc) out of bounds. Your rr contains " + << *std::min_element(rr.begin(), rr.end()) << " up to " + << *std::max_element(rr.begin(), rr.end()) + << ", which is outside of the matrix shape " << dimString() << "."); + } + if (!inBounds(cc, size2())) { + casadi_error("Remove(rr, cc) out of bounds. Your cc contains " + << *std::min_element(cc.begin(), cc.end()) << " up to " + << *std::max_element(cc.begin(), cc.end()) + << ", which is outside of the matrix shape " << dimString() << "."); + } + + // Remove by performing a complementary slice + std::vector rrc = complement(rr, size1()); + std::vector ccc = complement(cc, size2()); + + Matrix ret = (*this)(rrc, ccc); + + operator=(ret); + + } + + template + void Matrix::enlarge(int nrow, int ncol, const std::vector& rr, + const std::vector& cc, bool ind1) { + sparsityRef().enlarge(nrow, ncol, rr, cc, ind1); + } + + template + void Matrix::sanityCheck(bool complete) const { + sparsity_.sanityCheck(complete); + if (data_.size()!=sparsity_.nnz()) { + std::stringstream s; + s << "Matrix is not sane. The following must hold:" << std::endl; + s << " data().size() = sparsity().nnz(), but got data().size() = " << data_.size() + << " and sparsity().nnz() = " << sparsity_.nnz() << std::endl; + casadi_error(s.str()); + } + } + + template + Matrix Matrix::zz_mtimes(const Matrix &y) const { + if (isscalar() || y.isscalar()) { + // Use element-wise multiplication if at least one factor scalar + return *this*y; + } else { + Matrix z = Matrix::zeros(mul(sparsity(), y.sparsity())); + return mac(*this, y, z); + } + } + + template + Matrix Matrix::zz_mac(const Matrix &y, + const Matrix &z) const { + if (isscalar() || y.isscalar()) { + // Use element-wise multiplication if at least one factor scalar + return z + *this*y; + } + + // Check matching dimensions + casadi_assert_message(size2()==y.size1(), + "Matrix product with incompatible dimensions. Lhs is " + << dimString() << " and rhs is " << y.dimString() << "."); + + casadi_assert_message(y.size2()==z.size2(), + "Matrix addition with incompatible dimensions. Lhs is " + << mul(*this, y).dimString() << " and rhs is " << z.dimString() << "."); + + casadi_assert_message(size1()==z.size1(), + "Matrix addition with incompatible dimensions. Lhs is " + << mul(*this, y).dimString() << " and rhs is " << z.dimString() << "."); + + // Check if we can simplify the product + if (isIdentity()) { + return y + z; + } else if (y.isIdentity()) { + return *this + z; + } else if (isZero() || y.isZero()) { + return z; + } else { + // Carry out the matrix product + Matrix ret = z; + std::vector work(size1()); + casadi_mm_sparse(ptr(), sparsity(), y.ptr(), y.sparsity(), + ret.ptr(), ret.sparsity(), getPtr(work)); + return ret; + } + } + + template + Matrix Matrix::zz_quad_form(const Matrix& A) const { + casadi_assert(isvector()); + if (!iscolumn()) return quad_form(this->T(), A); + + // Call recursively if vector not dense + if (!isdense()) return densify(*this).zz_quad_form(A); + + // Assert dimensions + casadi_assert_message(size1()==A.size2() && size1()==A.size1(), + "Dimension mismatch. Got x.size1 = " << size1() + << " and A.shape = " << A.shape()); + + // Calculate using runtime function + return casadi_quad_form(A.ptr(), A.sparsity(), ptr()); + } + + template + Matrix Matrix::T() const { + // quick return if empty or scalar + if ((size1()==0 && size2()==0) || isscalar()) return *this; + + // Create the new sparsity pattern and the mapping + std::vector mapping; + Sparsity s = sparsity().transpose(mapping); + + // create the return matrix + Matrix ret = zeros(s); + + // Copy the content + for (int i=0; i + const DataType Matrix::toScalar() const { + // Make sure that the matrix is 1-by-1 + casadi_assert_message(isscalar(), "Can only convert 1-by-1 matrices to scalars"); + + // return zero or the nonzero element + if (nnz()==1) + return data()[0]; + else + return casadi_limits::zero; + } + + template + Matrix Matrix::binary(int op, + const Matrix &x, + const Matrix &y) { + if (x.numel()==1) + return scalar_matrix(op, x, y); + else if (y.numel()==1) + return matrix_scalar(op, x, y); + else + return matrix_matrix(op, x, y); + } + + template + Matrix Matrix::scalar_matrix(int op, + const Matrix &x, + const Matrix &y) { + // Return value + Matrix ret = Matrix::zeros(y.sparsity()); + + // Nonzeros + std::vector& ret_data = ret.data(); + const std::vector& x_data = x.data(); + const DataType& x_val = x_data.empty() ? casadi_limits::zero : x.front(); + const std::vector& y_data = y.data(); + + // Do the operation on all non-zero elements + for (int el=0; el::fun(op, x_val, y_data[el], ret_data[el]); + } + + // Check the value of the structural zero-entries, if there are any + if (!y.isdense() && !operation_checker(op)) { + // Get the value for the structural zeros + DataType fcn_0; + casadi_math::fun(op, x_val, casadi_limits::zero, fcn_0); + if (!casadi_limits::isZero(fcn_0)) { // Remove this if? + ret.makeDense(fcn_0); + } + } + + return ret; + } + + template + Matrix Matrix::matrix_scalar(int op, + const Matrix &x, + const Matrix &y) { + // Return value + Matrix ret = Matrix::zeros(x.sparsity()); + + // Nonzeros + std::vector& ret_data = ret.data(); + const std::vector& x_data = x.data(); + const std::vector& y_data = y.data(); + const DataType& y_val = y_data.empty() ? casadi_limits::zero : y.front(); + + // Do the operation on all non-zero elements + for (int el=0; el::fun(op, x_data[el], y_val, ret_data[el]); + } + + // Check the value of the structural zero-entries, if there are any + if (!x.isdense() && !operation_checker(op)) { + // Get the value for the structural zeros + DataType fcn_0; + casadi_math::fun(op, casadi_limits::zero, y_val, fcn_0); + if (!casadi_limits::isZero(fcn_0)) { // Remove this if? + ret.makeDense(fcn_0); + } + } + + return ret; + } + + template + Matrix Matrix::matrix_matrix(int op, + const Matrix &x, + const Matrix &y) { + + if (!(x.size2() == y.size2() && x.size1() == y.size1())) { + std::stringstream ss; + casadi_math::print(op, ss, "lhs", "rhs"); + casadi_error("matrix_matrix: dimension mismatch in element-wise matrix operation " + << ss.str() <<"." << std::endl << "Left argument has shape " << x.dimString() + << ", right has shape " << y.dimString() << ". They should be equal."); + } + + // Get the sparsity pattern of the result + // (ignoring structural zeros giving rise to nonzero result) + const Sparsity& x_sp = x.sparsity(); + const Sparsity& y_sp = y.sparsity(); + Sparsity r_sp = x_sp.patternCombine(y_sp, + operation_checker(op), + operation_checker(op)); + + // Return value + Matrix r = zeros(r_sp); + + // Perform the operations elementwise + if (x_sp==y_sp) { + // Matching sparsities + casadi_math::fun(op, getPtr(x.data()), getPtr(y.data()), + getPtr(r.data()), r_sp.nnz()); + } else if (y_sp==r_sp) { + // Project first argument + Matrix x_mod = x(r_sp); + casadi_math::fun(op, getPtr(x_mod.data()), getPtr(y.data()), + getPtr(r.data()), r_sp.nnz()); + } else if (x_sp==r_sp) { + // Project second argument + Matrix y_mod = y(r_sp); + casadi_math::fun(op, getPtr(x.data()), + getPtr(y_mod.data()), getPtr(r.data()), r_sp.nnz()); + } else { + // Project both arguments + Matrix x_mod = x(r_sp); + Matrix y_mod = y(r_sp); + casadi_math::fun(op, getPtr(x_mod.data()), getPtr(y_mod.data()), + getPtr(r.data()), r_sp.nnz()); + } + + // Handle structural zeros giving rise to nonzero result, e.g. cos(0) == 1 + if (!r.isdense() && !operation_checker(op)) { + // Get the value for the structural zeros + DataType fcn_0; + casadi_math::fun(op, casadi_limits::zero, + casadi_limits::zero, fcn_0); + r.makeDense(fcn_0); + } + + return r; + } + + template + Matrix Matrix::triplet(const std::vector& row, + const std::vector& col, + const Matrix& d) { + return triplet(row, col, d, *std::max_element(row.begin(), row.end()), + *std::max_element(col.begin(), col.end())); + } + + template + Matrix Matrix::triplet(const std::vector& row, + const std::vector& col, + const Matrix& d, + const std::pair& rc) { + return triplet(row, col, d, rc.first, rc.second); + } + + template + Matrix Matrix::triplet(const std::vector& row, + const std::vector& col, + const Matrix& d, + int nrow, int ncol) { + casadi_assert_message(col.size()==row.size() && col.size()==d.nnz(), + "Argument error in Matrix::triplet(row, col, d): " + "supplied lists must all be of equal length, but got: " + << row.size() << ", " << col.size() << " and " << d.nnz()); + std::vector mapping; + Sparsity sp = Sparsity::triplet(nrow, ncol, row, col, mapping); + return Matrix(sp, d[mapping]); + } + + template + Matrix Matrix::eye(int n) { + return Matrix::ones(Sparsity::diag(n)); + } + + template + Matrix Matrix::inf(const Sparsity& sp) { + casadi_assert_message(std::numeric_limits::has_infinity, + "Datatype cannot represent infinity"); + return Matrix(sp, std::numeric_limits::infinity(), false); + } + + + template + Matrix Matrix::inf(const std::pair& rc) { + return inf(rc.first, rc.second); + } + + template + Matrix Matrix::inf(int nrow, int ncol) { + return inf(Sparsity::dense(nrow, ncol)); + } + + template + Matrix Matrix::nan(const Sparsity& sp) { + casadi_assert_message(std::numeric_limits::has_quiet_NaN, + "Datatype cannot represent not-a-number"); + return Matrix(sp, std::numeric_limits::quiet_NaN(), false); + } + + template + Matrix Matrix::nan(const std::pair& rc) { + return nan(rc.first, rc.second); + } + + template + Matrix Matrix::nan(int nrow, int ncol) { + return nan(Sparsity::dense(nrow, ncol)); + } + + template + void Matrix::append(const Matrix& y) { + // Quick return if expr is empty + if (size2()==0 && size1()==0) { + *this=y; + return; + } + + // Quick return if empty + if (y.size2()==0 && y.size1()==0) return; + + // Appending can be done efficiently if column vectors + if (iscolumn()) { + // Append the sparsity pattern vertically + sparsityRef().append(y.sparsity()); + + // Add the non-zeros at the end + data().insert(end(), y.begin(), y.end()); + } else { + // Fall back on vertical concatenation + *this = vertcat(*this, y); + } + } + + template + void Matrix::appendColumns(const Matrix& y) { + + // Quick return if expr is empty + if (size2()==0 && size1()==0) { + *this=y; + return; + } + + // Quick return if empty + if (y.size2()==0 && y.size1()==0) return; + + // Append the sparsity pattern + sparsityRef().appendColumns(y.sparsity()); + + // Add the non-zeros at the end + data().insert(end(), y.begin(), y.end()); + } + + template + bool Matrix::isRegular() const { + return casadi::isRegular(data_); + } + + template + bool Matrix::isSmooth() const { + return true; + } + + template + size_t Matrix::getElementHash() const { + throw CasadiException("\"getElementHash\" not defined for instantiation"); + } + + template + bool Matrix::isLeaf() const { + throw CasadiException("\"isLeaf\" not defined for instantiation"); + } + + template + bool Matrix::isCommutative() const { + throw CasadiException("\"isCommutative\" not defined for instantiation"); + } + + template + bool Matrix::isSymbolic() const { + return false; + } + + template + bool Matrix::isValidInput() const { + return false; + } + + template + bool Matrix::hasDuplicates() { + throw CasadiException("\"hasDuplicates\" not defined for instantiation"); + } + + template + void Matrix::resetInput() { + throw CasadiException("\"resetInput\" not defined for instantiation"); + } + + template + bool Matrix::isInteger() const { + // loop over non-zero elements + for (int k=0; k::isInteger(at(k))) // if an element is not integer + return false; + + // Integer if reached this point + return true; + } + + template + bool Matrix::isConstant() const { + // loop over non-zero elements + for (int k=0; k::isConstant(at(k))) // if an element is not constant + return false; + + // Constant if we reach this point + return true; + } + + template + bool Matrix::isOne() const { + if (!isdense()) { + return false; + } + + // loop over non-zero elements + for (int el=0; el::isOne(at(el))) + return false; + + return true; + } + + template + bool Matrix::isMinusOne() const { + if (!isdense()) { + return false; + } + + // loop over non-zero elements + for (int el=0; el::isMinusOne(at(el))) + return false; + + return true; + } + + template + bool Matrix::isZero() const { + + // loop over (potentially) non-zero elements + for (int el=0; el::isZero(at(el))) + return false; + + return true; + } + + template + bool Matrix::isIdentity() const { + + // Make sure that the matrix is diagonal + if (!sparsity().isdiag()) + return false; + + // Make sure that all entries are one + for (typename Matrix::const_iterator it=begin(); it!=end(); ++it) { + if (!casadi_limits::isOne(*it)) + return false; + } + + return true; + } + + template + bool Matrix::zz_isEqual(const Matrix &ex2, int depth) const { + // Assert matching dimensions + casadi_assert_message(shape() == ex2.shape(), "Dimension mismatch"); + + // Project to union of patterns and call recursively if different sparsity + if (sparsity() != ex2.sparsity()) { + Sparsity sp = sparsity() + ex2.sparsity(); + return isEqual(project(*this, sp), project(ex2, sp), depth); + } + + // Check individual elements + for (int k=0; k + bool Matrix::hasNonStructuralZeros() const { + // Check if the structural nonzero is known to be zero + for (int el=0; el::isZero(at(el))) + return true; + } + + // No known zeros amongst the structurally nonzero entries + return false; + } + + template + double Matrix::getValue() const { + casadi_assert(isscalar()); + if (nnz()==0) { + return 0; + } else { + return getValue(0); + } + } + + template + double Matrix::getValue(int k) const { + return static_cast(at(k)); + } + + template + void Matrix::setValue(double m) { + casadi_assert(isscalar()); + if (nnz()!=0) { + setValue(m, 0); + } + } + + template + void Matrix::setValue(double m, int k) { + at(k) = m; + } + + template + int Matrix::getIntValue() const { + return static_cast(toScalar()); + } + + template + std::vector Matrix::nonzeros() const { + std::vector ret(nnz()); + std::copy(begin(), end(), ret.begin()); + return ret; + } + + template + std::vector Matrix::nonzeros_int() const { + std::vector ret(nnz()); + std::copy(begin(), end(), ret.begin()); + return ret; + } + + template + std::string Matrix::getName() const { + throw CasadiException("\"getName\" not defined for instantiation"); + } + + template + Matrix Matrix::getDep(int ch) const { + throw CasadiException("\"getDep\" not defined for instantiation"); + } + + template + int Matrix::getNdeps() const { + throw CasadiException("\"getNdeps\" not defined for instantiation"); + } + + template + Matrix Matrix::zz_project(const Sparsity& sp, bool intersect) const { + if (intersect) { + return project(*this, sp.patternIntersection(sparsity()), false); + } else { + Matrix ret = Matrix::zeros(sp); + ret.set(*this); + return ret; + } + } + + template + void Matrix::setEqualityCheckingDepth(int eq_depth) { + throw CasadiException("\"setEqualityCheckingDepth\" not defined for instantiation"); + } + + template + int Matrix::getEqualityCheckingDepth() { + throw CasadiException("\"getEqualityCheckingDepth\" not defined for instantiation"); + } + + template + Matrix Matrix::zz_det() const { + int n = size2(); + casadi_assert_message(n == size1(), "matrix must be square"); + + // Trivial return if scalar + if (isscalar()) return toScalar(); + + // Trivial case 2 x 2 + if (n==2) return elem(0, 0) * elem(1, 1) - elem(0, 1) * elem(1, 0); + + // Return expression + Matrix ret = 0; + + // Find out which is the best direction to expand along + + // Build up an IMatrix with ones on the non-zeros + Matrix sp = IMatrix::ones(sparsity()); + + // Have a count of the nonzeros for each row + Matrix row_count = sp.zz_sumCols(); + + // A blank row? determinant is structurally zero + if (!row_count.isdense()) return 0; + + // Have a count of the nonzeros for each col + Matrix col_count = sp.zz_sumRows().T(); + + // A blank col? determinant is structurally zero + if (!row_count.isdense()) return 0; + + int min_row = std::distance(row_count.data().begin(), + std::min_element(row_count.data().begin(), + row_count.data().end())); + int min_col = std::distance(col_count.data().begin(), + std::min_element(col_count.data().begin(), + col_count.data().end())); + + if (min_row <= min_col) { + // Expand along row j + int j = row_count.sparsity().row(min_row); + + Matrix row = (*this)(j, Slice(0, n)); + + std::vector< int > col_i = row.sparsity().getCol(); + + for (int k=0; k col = (*this)(Slice(0, n), i); + + const int* row_i = col.row(); + + for (int k=0; k + Matrix Matrix::zz_sumCols() const { + return mul(*this, Matrix::ones(size2(), 1)); + } + + template + Matrix Matrix::zz_sumRows() const { + return mul(Matrix::ones(1, size1()), *this); + } + + template + Matrix Matrix::zz_getMinor(int i, int j) const { + int n = size2(); + casadi_assert_message(n == size1(), "getMinor: matrix must be square"); + + // Trivial return if scalar + if (n==1) return 1; + + // Remove col i and row j + Matrix M = Matrix(n-1, n-1); + + std::vector col = sparsity().getCol(); + const int* row = sparsity().row(); + + for (int k=0;k + Matrix Matrix::zz_cofactor(int i, int j) const { + + // Calculate the i, j minor + Matrix minor_ij = getMinor(*this, i, j); + // Calculate the cofactor + int sign_i = 1-2*((i+j) % 2); + + return sign_i * minor_ij; + } + + template + Matrix Matrix::zz_adj() const { + int n = size2(); + casadi_assert_message(n == size1(), "adj: matrix must be square"); + + // Temporary placeholder + Matrix temp; + + // Cofactor matrix + Matrix C = Matrix(n, n); + for (int i=0; i + Matrix Matrix::zz_inv() const { + // laplace formula + return adj(*this)/det(*this); + } + + template + Matrix Matrix::zz_reshape(int nrow, int ncol) const { + Sparsity sp = reshape(sparsity(), nrow, ncol); + return Matrix(sp, data(), false); + } + + template + Matrix Matrix::zz_reshape(const Sparsity& sp) const { + // quick return if already the right shape + if (sp==sparsity()) return *this; + + // make sure that the patterns match + casadi_assert(sp.isReshape(sparsity())); + + return Matrix(sp, data(), false); + } + + template + Matrix Matrix::zz_trace() const { + casadi_assert_message(size2() == size1(), "trace: must be square"); + DataType res=0; + for (int i=0; i< size2(); i ++) { + res += elem(i, i); + } + return res; + } + + template + Matrix Matrix::zz_vecNZ() const { + return Matrix(data()); + } + + template + Matrix + Matrix::zz_blockcat(const std::vector< std::vector > > &v) { + std::vector< Matrix > ret; + for (int i=0; i + Matrix Matrix::zz_horzcat(const std::vector > &v) { + // Concatenate sparsity patterns + std::vector sp(v.size()); + for (int i=0; i ret = zeros(horzcat(sp)); + + // Copy nonzeros + typename Matrix::iterator i=ret.begin(); + for (typename std::vector >::const_iterator j=v.begin(); + j!=v.end(); ++j) { + std::copy(j->begin(), j->end(), i); + i += j->nnz(); + } + return ret; + } + + template + std::vector > + Matrix::zz_horzsplit(const std::vector& offset) const { + // Split up the sparsity pattern + std::vector sp = horzsplit(sparsity(), offset); + + // Return object + std::vector > ret; + ret.reserve(sp.size()); + + // Copy data + typename std::vector::const_iterator data_start=begin(), data_stop; + for (std::vector::const_iterator j=sp.begin(); j!=sp.end(); ++j) { + data_stop = data_start + j->nnz(); + ret.push_back(Matrix(*j, std::vector(data_start, + data_stop), false)); + data_start = data_stop; + } + + // Return the assembled matrix + casadi_assert(data_stop==end()); + return ret; + } + + template + Matrix Matrix::zz_vertcat(const std::vector > &v) { + std::vector > vT(v.size()); + for (int i=0; i + std::vector< Matrix > + Matrix::zz_vertsplit(const std::vector& offset) const { + std::vector< Matrix > ret = horzsplit(this->T(), offset); + for (typename std::vector< Matrix >::iterator it=ret.begin(); + it!=ret.end(); ++it) { + *it = it->T(); + } + return ret; + } + + template + std::vector< Matrix > + Matrix::zz_diagsplit(const std::vector& offset1, + const std::vector& offset2) const { + // Consistency check + casadi_assert(offset1.size()>=1); + casadi_assert(offset1.front()==0); + casadi_assert(offset1.back()==size1()); + casadi_assert(isMonotone(offset1)); + + // Consistency check + casadi_assert(offset2.size()>=1); + casadi_assert(offset2.front()==0); + casadi_assert(offset2.back()==size2()); + casadi_assert(isMonotone(offset2)); + + // Number of outputs + int n = offset1.size()-1; + + // Return value + std::vector< Matrix > ret; + + // Caveat: this is a very silly implementation + for (int i=0; i + Matrix Matrix::zz_inner_prod(const Matrix &y) const { + casadi_assert_message(shape()==y.shape(), "inner_prod: Dimension mismatch"); + if (sparsity()!=y.sparsity()) { + Sparsity sp = sparsity() * y.sparsity(); + return inner_prod(project(*this, sp), project(y, sp)); + } + Matrix ret(0); + for (int k=0; k + Matrix Matrix::zz_outer_prod(const Matrix &y) const { + return mul(*this, y.T()); + } + + template + Matrix Matrix::zz_all() const { + if (!isdense()) return false; + DataType ret=1; + for (int i=0;i + Matrix Matrix::zz_any() const { + if (!isdense()) return false; + DataType ret=0; + for (int i=0;i + Matrix Matrix::zz_norm_1() const { + return inner_prod(fabs(*this), Matrix::ones(sparsity())); + } + + template + Matrix Matrix::zz_norm_2() const { + if (isvector()) { + return norm_F(*this); + } else { + casadi_error("2-norms currently only supported for vectors. " + "Did you intend to calculate a Frobenius norms (norm_F)?"); + } + } + + template + Matrix Matrix::zz_norm_F() const { + return sqrt(sum_square(*this)); + } + + template + Matrix Matrix::zz_norm_inf() const { + // Get largest element by absolute value + Matrix s = 0; + for (typename std::vector::const_iterator i=begin(); i!=end(); ++i) { + s = fmax(s, fabs(Matrix(*i))); + } + return s; + } + + template + void Matrix::zz_qr(Matrix& Q, Matrix &R) const { + // The following algorithm is taken from J. Demmel: + // Applied Numerical Linear Algebra (algorithm 3.1.) + casadi_assert_message(size1()>=size2(), "qr: fewer rows than columns"); + + // compute Q and R column by column + Q = R = Matrix(); + for (int i=0; i ai = (*this)(ALL, i); + Matrix qi = ai; + // The i-th column of R + Matrix ri = Matrix(size2(), 1); + + // subtract the projection of qi in the previous directions from ai + for (int j=0; j qj = Q(ALL, j); + + ri(j, 0) = mul(qi.T(), qj); // Modified Gram-Schmidt + // ri[j] = inner_prod(qj, ai); // Classical Gram-Schmidt + + // Remove projection in direction j + if (ri.hasNZ(j, 0)) + qi -= ri(j, 0) * qj; + } + + // Normalize qi + ri(i, 0) = norm_2(qi); + qi /= ri(i, 0); + + // Update R and Q + Q.appendColumns(qi); + R.appendColumns(ri); + } + } + + template + Matrix Matrix::zz_nullspace() const { + int n = size1(); + int m = size2(); + + Matrix X = *this; + + casadi_assert_message(m>=n, "nullspace(): expecting a flat matrix (more columns than rows), " + "but got " << dimString() << "."); + + Matrix seed = DMatrix::eye(m)(Slice(0, m), Slice(n, m)); + + std::vector< Matrix > us; + std::vector< Matrix > betas; + + Matrix beta; + + for (int i=0;i x = X(i, Slice(i, m)); + Matrix u = Matrix(x); + Matrix sigma = sqrt(sumCols(x*x)); + const Matrix& x0 = x(0, 0); + u(0, 0) = 1; + + Matrix b = -copysign(sigma, x0); + + u(Slice(0), Slice(1, m-i))*= 1/(x0-b); + beta = 1-x0/b; + + X(Slice(i, n), Slice(i, m)) -= + beta*mul(mul(X(Slice(i, n), Slice(i, m)), u.T()), u); + us.push_back(u); + betas.push_back(beta); + } + + for (int i=n-1;i>=0;--i) { + seed(Slice(i, m), Slice(0, m-n)) -= + betas[i]*mul(us[i].T(), mul(us[i], seed(Slice(i, m), Slice(0, m-n)))); + } + + return seed; + + } + + template + Matrix Matrix::zz_chol() const { + // Cholesky-Banachiewicz algorithm + // Naive, dense implementation O(n^3) + + // check dimensions + casadi_assert_message(size1() == size2(), "Cholesky decomposition requires square matrix." + "Got " << dimString() << " instead."); + + Matrix ret = Matrix(Sparsity::lower(size1())); + + for (int i=0; i sum=0; + for (int k=0;k sum = 0; + for (int k=0;k + Matrix Matrix::zz_solve(const Matrix& b) const { + // check dimensions + casadi_assert_message(size1() == b.size1(), "solve Ax=b: dimension mismatch: b has " + << b.size1() << " rows while A has " << size1() << "."); + casadi_assert_message(size1() == size2(), "solve: A not square but " << dimString()); + + if (istril()) { + // forward substitution if lower triangular + Matrix x = b; + const int* Arow = row(); + const int* Acolind = colind(); + const std::vector & Adata = data(); + for (int i=0; i=Acolind[i] && Arow[kk]>i; --kk) { + int j = Arow[kk]; + x(j, k) -= Adata[kk]*x(i, k); + } + } + } + return x; + } else if (istriu()) { + // backward substitution if upper triangular + Matrix x = b; + const int* Arow = row(); + const int* Acolind = colind(); + const std::vector & Adata = data(); + for (int i=size2()-1; i>=0; --i) { // loop over columns backwards + for (int k=0; k A_sparse = *this; + A_sparse.makeSparse(); + return solve(A_sparse, b); + + } else { + + // Make a BLT transformation of A + std::vector rowperm, colperm, rowblock, colblock, coarse_rowblock, coarse_colblock; + sparsity().dulmageMendelsohn(rowperm, colperm, rowblock, colblock, + coarse_rowblock, coarse_colblock); + + // Permute the right hand side + Matrix bperm = b(rowperm, ALL); + + // Permute the linear system + Matrix Aperm = (*this)(rowperm, colperm); + + // Solution + Matrix xperm; + + // Solve permuted system + if (Aperm.istril()) { + + // Forward substitution if lower triangular + xperm = solve(Aperm, bperm); + + } else if (size2()<=3) { + + // Form inverse by minor expansion and multiply if very small (up to 3-by-3) + xperm = mul(inv(Aperm), bperm); + + } else { + + // Make a QR factorization + Matrix Q, R; + qr(Aperm, Q, R); + + // Solve the factorized system (note that solve will now be fast since it is triangular) + xperm = solve(R, mul(Q.T(), bperm)); + } + + // get the inverted column permutation + std::vector inv_colperm(colperm.size()); + for (int k=0; k x = xperm(inv_colperm, ALL); + return x; + } + } + + template + Matrix Matrix:: + zz_solve(const Matrix& b, + const std::string& lsolver, const Dict& dict) const { + throw CasadiException("\"solve\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_pinv() const { + if (size2()>=size1()) { + return solve(mul(*this, T()), *this).T(); + } else { + return solve(mul(this->T(), *this), this->T()); + } + } + + template + Matrix Matrix:: + zz_pinv(const std::string& lsolver, const Dict& dict) const { + throw CasadiException("\"solve\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_kron(const Matrix& b) const { + const Sparsity &a_sp = sparsity(); + Matrix filler = Matrix(b.shape()); + std::vector< std::vector< Matrix > > + blocks(size1(), std::vector< Matrix >(size2(), filler)); + for (int i=0;i + Matrix Matrix::zz_diag() const { + // Nonzero mapping + std::vector mapping; + // Get the sparsity + Sparsity sp = sparsity().getDiag(mapping); + + Matrix ret = zeros(sp); + + for (int k=0;k + Matrix Matrix::zz_diagcat(const std::vector< Matrix > &A) { + std::vector data; + + std::vector sp; + for (int i=0;i(diagcat(sp), data, false); + } + + template + Matrix Matrix::zz_unite(const Matrix& B) const { + // Join the sparsity patterns + std::vector mapping; + Sparsity sp = sparsity().patternUnion(B.sparsity(), mapping); + + // Create return matrix + Matrix ret = zeros(sp); + + // Copy sparsity + int elA=0, elB=0; + for (int k=0; k + Matrix Matrix::zz_polyval(const Matrix& x) const { + casadi_assert_message(isdense(), "polynomial coefficients vector must be dense"); + casadi_assert_message(isvector() && nnz()>0, "polynomial coefficients must be a vector"); + Matrix ret = (*this)[0]; + for (int i=1; i + Matrix Matrix::zz_norm_inf_mul(const Matrix &A) const { + int n_row = A.size2(); + int n_col = size1(); + casadi_assert_message(A.size1()==size2(), "Dimension error. Got " << dimString() + << " times " << A.dimString() << "."); + + // Allocate work vectors + std::vector dwork(n_col); + std::vector iwork(n_row+1+n_col); + + // Call C runtime + return casadi_norm_inf_mul(ptr(), sparsity(), A.ptr(), A.sparsity(), + getPtr(dwork), getPtr(iwork)); + } + + template + void Matrix::zz_expand(Matrix &weights, Matrix& terms) const { + throw CasadiException("\"expand\" not defined for instantiation"); + } + + template + Matrix Matrix::zz_pw_const(const Matrix &tval, + const Matrix &val) const { + throw CasadiException("\"pw_const\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_pw_lin(const Matrix &tval, + const Matrix &val) const { + throw CasadiException("\"pw_lin\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_if_else(const Matrix &if_true, + const Matrix &if_false, + bool short_circuit) const { + return *this*if_true + !*this*if_false; + } + + template + Matrix Matrix::zz_conditional(const std::vector > &x, + const Matrix &x_default, + bool short_circuit) const { + Matrix ret = x_default; + for (int k=0; k + Matrix Matrix::zz_heaviside() const { + return (1+sign(*this))/2; + } + + template + Matrix Matrix::zz_rectangle() const { + return 0.5*(sign(*this+0.5)-sign(*this-0.5)); + } + + template + Matrix Matrix::zz_triangle() const { + return rectangle(*this/2)*(1-fabs(*this)); + } + + template + Matrix Matrix::zz_ramp() const { + return *this*heaviside(*this); + } + + template + Matrix Matrix:: + zz_gauss_quadrature(const Matrix &x, const Matrix &a, + const Matrix &b, int order) const { + return zz_gauss_quadrature(x, a, b, order, Matrix()); + } + + template + Matrix Matrix::zz_gauss_quadrature(const Matrix &x, + const Matrix &a, + const Matrix &b, int order, + const Matrix& w) const { + throw CasadiException("\"gauss_quadrature\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_simplify() const { + throw CasadiException("\"simplify\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_substitute(const Matrix& v, + const Matrix& vdef) const { + throw CasadiException("\"substitute\" not defined for instantiation"); + return Matrix(); + } + + template + std::vector > + Matrix::zz_substitute(const std::vector >& ex, + const std::vector >& v, + const std::vector >& vdef) { + throw CasadiException("\"substitute\" not defined for instantiation"); + return std::vector >(); + } + + template + void Matrix::zz_substituteInPlace(const std::vector >& v, + std::vector >& vdef, + std::vector >& ex, + bool reverse) { + throw CasadiException("\"substituteInPlace\" not defined for instantiation"); + } + + template + bool Matrix::zz_dependsOn(const Matrix &arg) const { + throw CasadiException("\"dependsOn\" not defined for instantiation"); + return false; + } + + template + Matrix Matrix::zz_jacobian(const Matrix &arg) const { + throw CasadiException("\"jacobian\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_gradient(const Matrix &arg) const { + throw CasadiException("\"gradient\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_tangent(const Matrix &arg) const { + throw CasadiException("\"tangent\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_hessian(const Matrix &arg) const { + throw CasadiException("\"hessian\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_hessian(const Matrix &arg, + Matrix &g) const { + throw CasadiException("\"hessian\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_jacobianTimesVector(const Matrix &arg, + const Matrix &v, + bool transpose_jacobian) const { + throw CasadiException("\"jacobianTimesVector\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_taylor(const Matrix& x, + const Matrix& a, int order) const { + throw CasadiException("\"taylor\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_mtaylor(const Matrix& x, + const Matrix& a, int order) const { + throw CasadiException("\"mtaylor\" not defined for instantiation"); + return Matrix(); + } + + template + Matrix Matrix::zz_mtaylor(const Matrix& x, + const Matrix& a, int order, + const std::vector&order_contributions) const { + throw CasadiException("\"mtaylor\" not defined for instantiation"); + return Matrix(); + } + + template + int Matrix::zz_countNodes() const { + throw CasadiException("\"countNodes\" not defined for instantiation"); + return 0; + } + + template + std::string + Matrix::zz_getOperatorRepresentation(const std::vector& args) const { + throw CasadiException("\"getOperatorRepresentation\" not defined for instantiation"); + return std::string(); + } + + template + std::vector > Matrix::zz_symvar() const { + throw CasadiException("\"symvar\" not defined for instantiation"); + return std::vector >(); + } + + template + void Matrix::zz_extractShared(std::vector >& ex, + std::vector >& v, + std::vector >& vdef, + const std::string& v_prefix, + const std::string& v_suffix) { + throw CasadiException("\"extractShared\" not defined for instantiation"); + } + + template + Matrix Matrix::zz_poly_coeff(const Matrix&x) const { + throw CasadiException("\"poly_coeff\" not defined for instantiation"); + } + + template + Matrix Matrix::zz_poly_roots() const { + throw CasadiException("\"poly_roots\" not defined for instantiation"); + } + + template + Matrix Matrix::zz_eig_symbolic() const { + throw CasadiException("\"eig_symbolic\" not defined for instantiation"); + } + + template + Matrix Matrix::zz_sparsify(double tol) const { + Matrix ret = *this; + ret.makeSparse(tol); + return ret; + } + + + template + void Matrix::setNZ(const Matrix& val) { + setNZ(val, false, Slice()); + } + + template + void Matrix::getNZ(Matrix& val) const { + getNZ(val, false, Slice()); + } + + template + void Matrix::set(double val) { + std::fill(this->begin(), this->end(), val); + } + + template + void Matrix::set(const double* val, bool tr) { + // Get sparsity pattern + int size1 = this->size1(); + int size2 = this->size2(); + const int* colind = this->colind(); + const int* row = this->row(); + + // Fetch nonzeros + for (int cc=0; cc + void Matrix::set(const std::vector& val, bool tr) { + casadi_assert(val.size()==this->numel()); + set(getPtr(val), tr); + } + + template + void Matrix::get(double& val) const { + casadi_assert(isscalar()); + get(&val); + } + + template + void Matrix::get(double* val, bool tr) const { + // Get sparsity pattern + int size1 = this->size1(); + int size2 = this->size2(); + const int* colind = this->colind(); + const int* row = this->row(); + + // Initialize to zero + if (!this->isdense()) { + std::fill(val, val+size1*size2, 0); + } + + // Set nonzeros + for (int cc=0; cc + void Matrix::get(std::vector& val) const { + val.resize(this->numel()); + get(getPtr(val), false); + } + + template + void Matrix::setNZ(double val) { + std::fill(this->begin(), this->end(), val); + } + + template + void Matrix::setNZ(const double* val) { + int nnz = this->nnz(); + for (int el=0; el + void Matrix::setNZ(const std::vector& val) { + casadi_assert(val.size()==this->nnz()); + setNZ(getPtr(val)); + } + + template + void Matrix::setSym(const std::vector& val) { + casadi_assert(val.size()==this->sizeU()); + setSym(getPtr(val)); + } + + template + void Matrix::getNZ(double& val) const { + casadi_assert(1==this->nnz()); + getNZ(&val); + } + + template + void Matrix::getNZ(double* val) const { + int nnz = this->nnz(); + for (int el=0; el + void Matrix::getNZ(std::vector& val) const { + val.resize(this->nnz()); + getNZ(getPtr(val)); + } + + template + void Matrix::getSym(std::vector& val) const { + val.resize(this->sizeU()); + getSym(getPtr(val)); + } + + template + void Matrix::setSym(const double* val) { + const int* colind = this->colind(); + const int* row = this->row(); + int size2 = this->size2(); + for (int cc=0; cc ind = this->getColind(); + for (int cc=0; cccc) { + at(el) = at(ind[rr]++); + } + } + } + } + + template + void Matrix::getSym(double* val) const { + const int* colind = this->colind(); + const int* row = this->row(); + int size2 = this->size2(); + for (int cc=0; cc + Matrix::operator double() const { + casadi_assert(isscalar()); + if (isdense()) { + return nonzeros().at(0); + } else { + return 0; + } + } + + template + Matrix::operator std::vector() const { + casadi_assert(isvector()); + if (isdense()) { + return nonzeros(); + } else { + std::vector ret(numel(), 0), nz=nonzeros(); + int size1 = this->size1(), size2 = this->size2(); + const int *colind = this->colind(), *row = this->row(); + for (int cc=0; cc + Matrix::operator int() const { + casadi_assert(isscalar()); + if (isdense()) { + return nonzeros_int().at(0); + } else { + return 0; + } + } +#endif // USE_CXX11 + +} // namespace casadi + +/// \endcond + +#endif // CASADI_MATRIX_IMPL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/nonzeros.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/nonzeros.hpp new file mode 100755 index 0000000..2e46269 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/nonzeros.hpp @@ -0,0 +1,116 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_NONZEROS_HPP +#define CASADI_NONZEROS_HPP + +namespace casadi { + + +/** NonZeros class for Matrix + NonZeros is the return type for operator[] of the Matrix class, it allows access to the value as well as changing the parent object + \author Joel Andersson + \date 2011 +*/ + +/// Access to a set of nonzeros +template +class CASADI_EXPORT NonZeros : public M { + public: + /// Constructor + NonZeros(M& mat, const K& k) : mat_(mat), k_(k) { mat.getNZ(*this, false, k); } + + ///@{ + /// Methods that modify a part of the parent object (A[k] = ?, A[k] += ?, etc.) + const M& operator=(const NonZeros &y); + const M& operator=(const M &y); + M operator+=(const M &y); + M operator-=(const M &y); + M operator*=(const M &y); + M operator/=(const M &y); + ///@} + + private: + /// A reference to the matrix that is allowed to be modified + M& mat_; + + /// The element of the matrix that is allowed to be modified + K k_; +}; + +#ifdef casadi_implementation +// Implementation +template +const M& NonZeros::operator=(const NonZeros &y) { + mat_.setNZ(y, false, k_); + return y; +} + +// Implementation +template +const M& NonZeros::operator=(const M &y) { + mat_.setNZ(y, false, k_); + return y; +} + +template +M NonZeros::operator+=(const M &y) { + M s = *this+y; + mat_.setNZ(s, false, k_); + return s; +} + +template +M NonZeros::operator-=(const M &y) { + M s = *this-y; + mat_.setNZ(s, false, k_); + return s; +} + +template +M NonZeros::operator*=(const M &y) { + M s = *this*y; + mat_.setNZ(s, false, k_); + return s; +} + +template +M NonZeros::operator/=(const M &y) { + M s = *this/y; + mat_.setNZ(s, false, k_); + return s; +} +#endif + +#define INSTANTIATE_NONZEROS(Mt) \ +template class NonZeros< Mt , std::vector >;\ +template class NonZeros< Mt , int >;\ +template class NonZeros< Mt , Matrix >;\ +template class NonZeros< Mt , Slice >; + +} // namespace casadi + + +#endif // CASADI_NONZEROS_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/slice.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/slice.hpp new file mode 100755 index 0000000..bee7b4f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/slice.hpp @@ -0,0 +1,103 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SLICE_HPP +#define CASADI_SLICE_HPP + +#include +#include "../casadi_exception.hpp" +#include "../printable_object.hpp" +#include +#include + +namespace casadi { + + /** \brief Class representing a Slice + * + * Note that Python or Octave do not need to use this class. + * They can just use slicing utility from the host language ( M[0:6] in Python, M(1:7) ) + */ + class CASADI_EXPORT Slice : public PrintableObject { + public: + /// Default constructor - all elements + Slice(); + + /// A single element (explicit to avoid ambiguity with IMatrix overload + explicit Slice(int i, bool ind1=false); + + /// A slice + Slice(int start, int stop, int step=1); + + /// Construct from an index vector (requires isSlice(v) to be true) + explicit Slice(const std::vector& v, bool ind1=false); + + /// Construct nested slices from an index vector (requires isSlice2(v) to be true) + explicit Slice(const std::vector& v, Slice& outer); + + /// Check if an index vector can be represented more efficiently as a slice + static bool isSlice(const std::vector& v, bool ind1=false); + + /// Check if an index vector can be represented more efficiently as two nested slices + static bool isSlice2(const std::vector& v); + + /// Get a vector of indices + std::vector getAll(int len, bool ind1=false) const; + + /// Get a vector of indices (nested slice) + std::vector getAll(const Slice& outer, int len) const; + + /// Is the slice a scalar + bool isscalar(int len) const; + + /// Get scalar (if isscalar) + int toScalar(int len) const; + + /// Check equality + bool operator==(const Slice& other) const + { return start_==other.start_ && stop_==other.stop_ && step_==other.step_;} + + /// Check inequality + bool operator!=(const Slice& other) const { return !(*this == other);} + + /// Print a representation of the object + void repr(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Print a description of the object + void print(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// start value: negative values will get added to length + int start_; + /// stop value: use std::numeric_limits::max() to indicate unboundedness + int stop_; + int step_; + }; + +#ifndef SWIG + static Slice ALL; +#endif // SWIG + +} // namespace casadi + +#endif // CASADI_SLICE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparse_storage.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparse_storage.hpp new file mode 100755 index 0000000..5e8d051 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparse_storage.hpp @@ -0,0 +1,99 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SPARSE_STORAGE_HPP +#define CASADI_SPARSE_STORAGE_HPP + +#include +#include +#include "../casadi_exception.hpp" + +/// \cond INTERNAL + +namespace casadi { + + template + class CASADI_EXPORT SparseStorage { + public: + + /** \brief constructors */ + /// empty 0-by-0 matrix constructor + SparseStorage(); + + /// Copy constructor + SparseStorage(const SparseStorage& m); + + ///@{ + /// Sparse matrix with a given sparsity + explicit SparseStorage(const Sparsity& sparsity, const DataType& val=DataType(0)); + ///@} + + /// Assignment (normal) + SparseStorage& operator=(const SparseStorage& m); + + /// Convert to scalar type + const DataType toScalar() const; + + /// Scalar type + typedef DataType ScalarType; + + /// get a reference to an element + DataType& elem(int rr, int cc); + + /// Returns true if the matrix has a non-zero at location rr, cc + bool hasNZ(int rr, int cc) const { return sparsity().hasNZ(rr, cc); } + + // Get the sparsity pattern + void clear(); + void resize(int nrow, int ncol); + void reserve(int nnz); + void reserve(int nnz, int ncol); + + /// Access the non-zero elements + std::vector& data(); + + /// Const access the non-zero elements + const std::vector& data() const; + + /// Const access the sparsity - reference to data member + const Sparsity& sparsity() const { return sparsity_; } + + /// Access the sparsity, make a copy if there are multiple references to it + Sparsity& sparsityRef(); + + private: + /// Sparsity of the matrix in a compressed column storage (CCS) format + Sparsity sparsity_; + + /// Nonzero elements + std::vector data_; + + }; + +} // namespace casadi + +/// \endcond + +#endif // CASADI_SPARSE_STORAGE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparse_storage_impl.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparse_storage_impl.hpp new file mode 100755 index 0000000..349564d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparse_storage_impl.hpp @@ -0,0 +1,103 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SPARSE_STORAGE_IMPL_HPP +#define CASADI_SPARSE_STORAGE_IMPL_HPP + +/// \cond INTERNAL + +namespace casadi { + // Implementations + + template + DataType& SparseStorage::elem(int rr, int cc) { + int oldsize = sparsity().nnz(); + int ind = sparsityRef().addNZ(rr, cc); + if (oldsize != sparsity().nnz()) + data().insert(data().begin()+ind, DataType(0)); + return data().at(ind); + } + + template + SparseStorage::SparseStorage(const Sparsity& sparsity, const DataType& val) : + sparsity_(sparsity), data_(sparsity.nnz(), val) {} + + template + SparseStorage::SparseStorage() : sparsity_(Sparsity(0, 0)) { + } + + template + SparseStorage::SparseStorage(const SparseStorage& m) : + sparsity_(m.sparsity_), data_(m.data_) {} + + template + SparseStorage& SparseStorage::operator=(const SparseStorage& m) { + sparsity_ = m.sparsity_; + data_ = m.data_; + return *this; + } + + template + void SparseStorage::reserve(int nnz) { + reserve(nnz, sparsity_.size2()); + } + + template + void SparseStorage::reserve(int nnz, int ncol) { + data().reserve(nnz); + } + + template + void SparseStorage::resize(int nrow, int ncol) { + sparsity_.resize(nrow, ncol); + } + + template + void SparseStorage::clear() { + sparsity_ = Sparsity(0, 0); + data().clear(); + } + + template + std::vector& SparseStorage::data() { + return data_; + } + + template + const std::vector& SparseStorage::data() const { + return data_; + } + + template + Sparsity& SparseStorage::sparsityRef() { + sparsity_.makeUnique(); // NOTE: Remove? + return sparsity_; + } + +} // namespace casadi + +/// \endcond + +#endif // CASADI_SPARSE_STORAGE_IMPL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparsity.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparsity.hpp new file mode 100755 index 0000000..f5c317f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparsity.hpp @@ -0,0 +1,1091 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SPARSITY_HPP +#define CASADI_SPARSITY_HPP + +#include "../shared_object.hpp" +#include "../casadi_types.hpp" +#include "sparsity_interface.hpp" +#include +#include +#include + +// Cashing requires a multimap (preferably a hash map) +#ifdef USE_CXX11 +// Using C++11 unordered_multimap (hash map) +#include +#define CACHING_MULTIMAP std::unordered_multimap +#else // USE_CXX11 +// Falling back to std::multimap (binary search tree) +#include +#define CACHING_MULTIMAP std::multimap +#endif // USE_CXX11 +#include "../weak_ref.hpp" + +namespace casadi { + + // Forward declaration + class SparsityInternal; + + /** \brief General sparsity class + * + * The storage format is a compressed column storage (CCS) format.\n + * + In this format, the structural non-zero elements are stored in column-major order, starting from + the upper left corner of the matrix and ending in the lower right corner. + + In addition to the dimension (size1(), size2()), (i.e. the number of rows and the number of + columns respectively), there are also two vectors of integers: + + 1. "colind" [length size2()+1], which contains the index to the first non-zero element on or + after the corresponding column. All the non-zero elements of a particular i are thus the elements + with index el that fulfills: colind[i] <= el < colind[i+1]. + + 2. "row" [same length as the number of non-zero elements, nnz()] The rows for each of the + structural non-zeros. + + Note that with this format, it is cheap to loop over all the non-zero elements of a particular + column, at constant time per element, but expensive to jump to access a location (i, j). + + If the matrix is dense, i.e. length(row) == size1()*size2(), the format reduces to standard dense + column major format, which allows access to an arbitrary element in constant time. + + Since the object is reference counted (it inherits from SharedObject), several matrices are + allowed to share the same sparsity pattern. + + The implementations of some methods of this class has been taken from the CSparse package and + modified to use C++ standard library and CasADi data structures. + + * \see Matrix + * + * \author Joel Andersson + * \date 2010 + */ + class CASADI_EXPORT Sparsity : public SharedObject, + public SparsityInterface { + public: + + /// Default constructor + explicit Sparsity(int dummy=0); + + /** \brief Pattern with all structural zeros */ + Sparsity(int nrow, int ncol); + +#ifndef SWIG + /** \brief Create a sparse matrix with all structural zeros */ + explicit Sparsity(const std::pair& rc); +#endif // SWIG + + /// Construct from sparsity pattern vectors given in compressed column storage format + Sparsity(int nrow, int ncol, const std::vector& colind, const std::vector& row); + +#ifndef SWIG + /** \brief Create from node */ + static Sparsity create(SparsityInternal *node); + + /// Base class + typedef SparsityInterface B; + + /// Expose base class functions + using B::zz_horzsplit; + using B::zz_diagsplit; + using B::zz_vertsplit; +#endif + + /** \brief Create a scalar sparsity pattern **/ + ///@{ + static Sparsity scalar(bool dense_scalar=true) + { return dense_scalar ? dense(1, 1) : Sparsity(1, 1); } + ///@} + + /** \brief Create a dense rectangular sparsity pattern **/ + ///@{ + static Sparsity dense(int nrow, int ncol=1); + static Sparsity dense(const std::pair &rc) { return dense(rc.first, rc.second);} + ///@} + +#if !defined(SWIG) || !defined(SWIGMATLAB) + /** \brief [DEPRECATED] Create a sparse (empty) rectangular sparsity pattern + Use Sparse(nrow, ncol) instead **/ + ///@{ + static Sparsity sparse(int nrow, int ncol=1); + static Sparsity sparse(const std::pair &rc) { return sparse(rc.first, rc.second);} + ///@} +#endif // !defined(SWIG) || !defined(SWIGMATLAB) + + /** \brief Create the sparsity pattern for a unit vector of length n and a nonzero on + * position el **/ + ///@{ + static Sparsity unit(int n, int el); + ///@} + + /** \brief Create a upper triangular square sparsity pattern **/ + static Sparsity upper(int n); + + /** \brief Create a lower triangular square sparsity pattern **/ + static Sparsity lower(int n); + + /** \brief Create diagonal sparsity pattern **/ + ///@{ + static Sparsity diag(int nrow) { return diag(nrow, nrow);} + static Sparsity diag(int nrow, int ncol); + static Sparsity diag(const std::pair &rc) { return diag(rc.first, rc.second);} + ///@} + + /** \brief Create a single band in a square sparsity pattern + * + * band(n, 0) is equivalent to diag(n) \n + * band(n, -1) has a band below the diagonal \n + * \param p indicate + **/ + static Sparsity band(int n, int p); + + /** \brief Create banded square sparsity pattern + * + * banded(n, 0) is equivalent to diag(n) \n + * banded(n, 1) is tri-diagonal matrix \n + **/ + static Sparsity banded(int n, int p); + + /** \brief Construct a block sparsity pattern from (row, col) vectors */ + static Sparsity rowcol(const std::vector& row, + const std::vector& col, + int nrow, int ncol); + + /** \brief Create a sparsity pattern given the nonzeros in sparse triplet form + **/ + static Sparsity triplet(int nrow, int ncol, + const std::vector& row, const std::vector& col, + std::vector& mapping, bool invert_mapping=false); + + /** \brief Create a sparsity pattern given the nonzeros in sparse triplet form + (no nonzero mapping) + rows_are_sorted==true means that the row entries already in increasing order + for each col and without any duplicates + **/ + static Sparsity triplet(int nrow, int ncol, const std::vector& row, + const std::vector& col); + + /** Create from a single vector containing the pattern in compressed column storage format: + * The format: + * The first two entries are the number of rows (nrow) and columns (ncol) + * The next ncol+1 entries are the column offsets (colind). + Note that the last element, colind[ncol], gives the number of nonzeros + * The last colind[ncol] entries are the row indices + **/ + ///@{ + static Sparsity compressed(const std::vector& v); +#ifndef SWIG + static Sparsity compressed(const int* v); +#endif // SWIG + ///@} + + /// \cond INTERNAL + /** \brief Check if there is an identical copy of the sparsity pattern in the cache, + * and if so, make a shallow copy of that one */ + void reCache(); + + /** \brief Clear the cache */ + static void clearCache(); + /// \endcond + + /** \brief Check if the dimensions and colind, row vectors are compatible. + * \param complete set to true to also check elementwise + * throws an error as possible result + */ + void sanityCheck(bool complete=false) const; + /** Get the diagonal of the matrix/create a diagonal matrix + (mapping will contain the nonzero mapping) + When the input is square, the diagonal elements are returned. + If the input is vector-like, a diagonal matrix is constructed with it. + */ + Sparsity getDiag(std::vector& SWIG_OUTPUT(mapping)) const; + + /// Compress a sparsity pattern + std::vector compress() const; + +#ifndef SWIG + /// @{ + /// Access a member function or object + SparsityInternal* operator->(); + const SparsityInternal* operator->() const; + /// @} + + /// Reference to internal structure + /// @{ + SparsityInternal& operator*(); + const SparsityInternal& operator*() const; + /// @} +#endif // SWIG + /// \name Check if two sparsity patterns are identical + /// @{ + bool isEqual(const Sparsity& y) const; + bool isEqual(int nrow, int ncol, const std::vector& colind, + const std::vector& row) const; +#ifndef SWIG + bool isEqual(int nrow, int ncol, const int* colind, const int* row) const; +#endif // SWIG + + bool operator==(const Sparsity& y) const { return isEqual(y);} + /// @} + + /// Check if two sparsity patterns are difference + bool operator!=(const Sparsity& y) const {return !isEqual(y);} + +#ifndef SWIG + /** \brief Implicit or explicit type conversion to C representation + In the C runtime, sparsity patterns are represented as a "const int*". + This enables using the C runtime functions using a natural syntax. + */ + operator const int*() const; +#endif // SWIG + + /// \name Size and element counting + /// @{ + + /// Get the number of rows + int size1() const; + + /// Get the number of columns + int size2() const; + + /** \brief The total number of elements, including structural zeros, i.e. size2()*size1() + \see nnz() */ + int numel() const; + + /** \brief Check if the sparsity is empty + * + * A sparsity is considered empty if one of the dimensions is zero + * (or optionally both dimensions) + */ + bool isempty(bool both=false) const; + + /** \brief Get the number of (structural) non-zeros + \see numel() */ + int nnz() const; + + /** \brief Number of non-zeros in the upper triangular half, + * i.e. the number of elements (i, j) with j>=i */ + int sizeU() const; + + /** \brief Number of non-zeros in the lower triangular half, + * i.e. the number of elements (i, j) with j<=i */ + int sizeL() const; + + /** \brief Number of non-zeros on the diagonal, i.e. the number of elements (i, j) with j==i */ + int sizeD() const; + + /** \brief Upper half-bandwidth */ + int bandwidthU() const; + + /** \brief Lower half-bandwidth */ + int bandwidthL() const; + + /** \brief Get the shape */ + std::pair shape() const; + /// @} + +#ifndef SWIG + /** \brief Get a reference to row-vector, + * containing rows for all non-zero elements (see class description) */ + const int* row() const; + + /** \brief Get a reference to the colindex of all column element (see class description) */ + const int* colind() const; +#endif + + /** \brief Get the row for each non-zero entry + Together with the column-vector, this vector gives the sparsity of the matrix in + sparse triplet format, and together with the colind vector, one obtains the sparsity + in column compressed format. */ + std::vector getRow() const; + + /** \brief Get the column index for each column + Together with the row-vector, one obtains the sparsity pattern in the + column compressed format. */ + std::vector getColind() const; + + /** \brief Get a reference to the colindex of column cc (see class description) */ + int colind(int cc) const; + + /** \brief Get the row of a non-zero element */ + int row(int el) const; + + /** \brief Get the column for each non-zero entry + Together with the row-vector, this vector gives the sparsity of the matrix in + sparse triplet format, i.e. the column and row for each non-zero elements */ + std::vector getCol() const; + + /// Resize + void resize(int nrow, int ncol); + + /** \brief Get the index of a non-zero element + Add the element if it does not exist and copy object if it's not unique */ + int addNZ(int rr, int cc); + + /** \brief Get the index of an existing non-zero element + return -1 if the element does not exist */ + int getNZ(int rr, int cc) const; + + /// Returns true if the pattern has a non-zero at location rr, cc + bool hasNZ(int rr, int cc) const; + + /** \brief Get a set of non-zero element + return -1 if the element does not exist */ + std::vector getNZ(const std::vector& rr, const std::vector& cc) const; + + /** \brief Get the nonzero index for a set of elements + The index vector is used both for input and outputs and must be sorted by increasing + nonzero index, i.e. column-wise. + Elements not found in the sparsity pattern are set to -1. + */ + void getNZ(std::vector& SWIG_INOUT(indices)) const; + + /// Get nonzeros in lower triangular part + std::vector getLowerNZ() const; + + /// Get nonzeros in upper triangular part + std::vector getUpperNZ() const; + + /// Get the sparsity in compressed column storage (CCS) format + void getCCS(std::vector& SWIG_OUTPUT(colind), + std::vector& SWIG_OUTPUT(row)) const; + + /// Get the sparsity in compressed row storage (CRS) format + void getCRS(std::vector& SWIG_OUTPUT(rowind), + std::vector& SWIG_OUTPUT(col)) const; + + /// Get the sparsity in sparse triplet format + void getTriplet(std::vector& SWIG_OUTPUT(row), + std::vector& SWIG_OUTPUT(col)) const; + + /** \brief Get a submatrix + * + * Returns the sparsity of the submatrix, with a mapping such that + * submatrix[k] = originalmatrix[mapping[k]] + */ + Sparsity sub(const std::vector& rr, + const std::vector& cc, + std::vector& SWIG_OUTPUT(mapping), bool ind1=false) const; + + /** \brief Get a set of elements + * + * Returns the sparsity of the corresponding elements, with a mapping such that + * submatrix[k] = originalmatrix[mapping[k]] + */ + Sparsity sub(const std::vector& rr, const Sparsity& sp, + std::vector& SWIG_OUTPUT(mapping), bool ind1=false) const; + + /// Transpose the matrix + Sparsity T() const; + + /** \brief Transpose the matrix and get the reordering of the non-zero entries + * + * \param[out] mapping the non-zeros of the original matrix + * for each non-zero of the new matrix + */ + Sparsity transpose(std::vector& mapping, bool invert_mapping=false) const; + + /// Check if the sparsity is the transpose of another + bool isTranspose(const Sparsity& y) const; + + /// Check if the sparsity is a reshape of another + bool isReshape(const Sparsity& y) const; + + /// @{ + /** \brief Combine two sparsity patterns + Returns the new sparsity pattern as well as a mapping with the same length as + the number of non-zero elements + The mapping matrix contains the arguments for each nonzero, the first bit indicates + if the first argument is nonzero, + the second bit indicates if the second argument is nonzero (note that none of, + one of or both of the arguments can be nonzero) */ +#ifndef SWIG + Sparsity patternCombine(const Sparsity& y, bool f0x_is_zero, bool fx0_is_zero, + std::vector& mapping) const; +#endif // SWIG + Sparsity patternCombine(const Sparsity& y, bool f0x_is_zero, bool fx0_is_zero) const; + /// @} + + /// @{ + /** \brief Union of two sparsity patterns */ +#ifndef SWIG + Sparsity patternUnion(const Sparsity& y, std::vector& mapping) const; +#endif // SWIG + Sparsity patternUnion(const Sparsity& y) const; + Sparsity operator+(const Sparsity& b) const; + /// @} + + /// @{ + /** \brief Intersection of two sparsity patterns + Returns the new sparsity pattern as well as a mapping with the same length as the + number of non-zero elements + The value is 1 if the non-zero comes from the first (i.e. this) object, 2 if it is from + the second and 3 (i.e. 1 | 2) if from both */ +#ifndef SWIG + Sparsity patternIntersection(const Sparsity& y, + std::vector& mapping) const; +#endif // SWIG + Sparsity patternIntersection(const Sparsity& y) const; + Sparsity operator*(const Sparsity& b) const; + /// @} + + /// @{ + /** \brief Sparsity pattern for a matrix-matrix product + Returns the sparsity pattern resulting from multiplying the pattern with + another pattern y from the right. + */ + Sparsity patternProduct(const Sparsity& y) const; + /// @} + + /// Take the inverse of a sparsity pattern; flip zeros and non-zeros + Sparsity patternInverse() const; + +#ifndef SWIG + /** \brief Propagate sparsity using 0-1 logic through a matrix product, + * no memory allocation: z = mul(x, y) with work vector + * Forward mode. + */ + static void mul_sparsityF(const bvec_t* x, const Sparsity& x_sp, + const bvec_t* y, const Sparsity& y_sp, + bvec_t* z, const Sparsity& z_sp, + bvec_t* w); + + /** \brief Propagate sparsity using 0-1 logic through a matrix product, + * no memory allocation: z = mul(x, y) with work vector + * Reverse mode. + */ + static void mul_sparsityR(bvec_t* x, const Sparsity& x_sp, + bvec_t* y, const Sparsity& y_sp, + bvec_t* z, const Sparsity& z_sp, + bvec_t* w); + + /// \cond INTERNAL + /// @{ + /** \brief Accessed by SparsityInterface */ + static Sparsity zz_horzcat(const std::vector & sp); + static Sparsity zz_vertcat(const std::vector & sp); + static Sparsity zz_blockcat(const std::vector< std::vector< Sparsity > > &v); + static Sparsity zz_diagcat(const std::vector< Sparsity > &v); + std::vector zz_horzsplit(const std::vector& output_offset) const; + std::vector zz_vertsplit(const std::vector& output_offset) const; + std::vector zz_diagsplit(const std::vector& offset1, + const std::vector& offset2) const; + Sparsity zz_mtimes(const Sparsity& y) const { + if (isscalar()) { + return isdense() ? y : Sparsity(y.shape()); + } else if (y.isscalar()) { + return y.isdense() ? *this : Sparsity(shape()); + } else { + // Check dimensions + casadi_assert_message(size2()==y.size1(), + "Matrix product with incompatible dimensions. Lhs is " + << dimString() << " and rhs is " << y.dimString() << "."); + return patternProduct(y); + } + } + Sparsity zz_mac(const Sparsity& Y, const Sparsity& Z) const { return Z;} + Sparsity zz_vecNZ() const; + Sparsity zz_reshape(int nrow, int ncol) const; + Sparsity zz_reshape(const Sparsity& sp) const; + int zz_sprank() const; + int zz_norm_0_mul(const Sparsity& B) const; + Sparsity zz_kron(const Sparsity& b) const; + Sparsity zz_repmat(int n, int m=1) const; + /// @} + /// \endcond + +#endif //SWIG + + /** \brief Enlarge matrix + Make the matrix larger by inserting empty rows and columns, keeping the existing non-zeros + + For the matrices A to B + A(m, n) + length(jj)=m , length(ii)=n + B(nrow, ncol) + + A=enlarge(m, n, ii, jj) makes sure that + + B[jj, ii] == A + */ + void enlarge(int nrow, int ncol, + const std::vector& rr, const std::vector& cc, bool ind1=false); + + /** \brief Enlarge the matrix along the first dimension (i.e. insert rows) */ + void enlargeRows(int nrow, const std::vector& rr, bool ind1=false); + + /** \brief Enlarge the matrix along the second dimension (i.e. insert columns) */ + void enlargeColumns(int ncol, const std::vector& cc, bool ind1=false); + + /** \brief Make a patten dense */ + Sparsity makeDense(std::vector& mapping) const; + + /** \brief Erase rows and/or columns of a matrix */ + std::vector erase(const std::vector& rr, const std::vector& cc, bool ind1=false); + + /** \brief Erase elements of a matrix */ + std::vector erase(const std::vector& rr, bool ind1=false); + + /// Append another sparsity patten vertically (NOTE: only efficient if vector) + void append(const Sparsity& sp); + + /// Append another sparsity patten horizontally + void appendColumns(const Sparsity& sp); + + /// [DEPRECATED]: Reserve space + void reserve(int nnz, int ncol) { + casadi_warning("Sparsity::reserve: Deprecated function. Ignored."); + } + + /// Is scalar? + bool isscalar(bool scalar_and_dense=false) const; + + /// Is dense? + bool isdense() const; + + /** \brief Check if the pattern is a row vector (i.e. size1()==1) */ + bool isrow() const; + + /** \brief Check if the pattern is a column vector (i.e. size2()==1) */ + bool iscolumn() const; + + /** \brief Check if the pattern is a row or column vector */ + bool isvector() const; + + /// Is diagonal? + bool isdiag() const; + + /// Is square? + bool issquare() const; + + /// Is symmetric? + bool issymmetric() const; + + /// Is upper triangular? + bool istriu() const; + + /// Is lower triangular? + bool istril() const; + + /// Check whether the sparsity-pattern indicates structural singularity + bool issingular() const; + +#if !defined(SWIG) || !defined(SWIGMATLAB) + + /// \cond INTERNAL + /// Get upper triangular part + Sparsity zz_triu(bool includeDiagonal=true) const; + + /// Get lower triangular part + Sparsity zz_tril(bool includeDiagonal=true) const; + /// \endcond +#endif // !defined(SWIG) || !defined(SWIGMATLAB) + + /** \brief Do the rows appear sequentially on each column + * + * \param[in] strictly if true, then do not allow multiple entries + */ + bool rowsSequential(bool strictly=true) const; + + /** \brief Remove duplicate entries + * + * The same indices will be removed from the \a mapping vector, + * which must have the same length as the number of nonzeros + */ + void removeDuplicates(std::vector& mapping); + +/// \cond INTERNAL +#ifndef SWIG + typedef CACHING_MULTIMAP CachingMap; + + /// Cached sparsity patterns + static CachingMap& getCache(); + + /// (Dense) scalar + static const Sparsity& getScalar(); + + /// (Sparse) scalar + static const Sparsity& getScalarSparse(); + + /// Empty zero-by-zero + static const Sparsity& getEmpty(); + +#endif //SWIG +/// \endcond + + /** \brief Calculate the elimination tree + See Direct Methods for Sparse Linear Systems by Davis (2006). + If the parameter ata is false, the algorithm is equivalent to Matlab's etree(A), except that + the indices are zero-based. If ata is true, the algorithm is equivalent to Matlab's + etree(A, 'row'). + */ + std::vector eliminationTree(bool ata=false) const; + + /** \brief Depth-first search on the adjacency graph of the sparsity + See Direct Methods for Sparse Linear Systems by Davis (2006). + */ + int depthFirstSearch(int j, int top, std::vector& xi, std::vector& pstack, + const std::vector& pinv, std::vector& marked) const; + + /** \brief Find the strongly connected components of the bigraph defined by the sparsity pattern + of a square matrix + + See Direct Methods for Sparse Linear Systems by Davis (2006). + Returns: + - Number of components + - Offset for each components (length: 1 + number of components) + - Indices for each components, component i has indices + index[offset[i]], ..., index[offset[i+1]] + + In the case that the matrix is symmetric, the result has a particular interpretation: + Given a symmetric matrix A and + n = A.stronglyConnectedComponents(p, r) + + => A[p, p] will appear block-diagonal with n blocks and + with the indices of the block boundaries to be found in r. + + */ + int stronglyConnectedComponents(std::vector& SWIG_OUTPUT(index), + std::vector& SWIG_OUTPUT(offset)) const; + + /** \brief Compute the Dulmage-Mendelsohn decomposition + See Direct Methods for Sparse Linear Systems by Davis (2006). + + Dulmage-Mendelsohn will try to bring your matrix into lower block-triangular (LBT) form. + It will not care about the distance of off-diagonal elements to the diagonal: + there is no guarantee you will get a block-diagonal matrix if you supply a randomly + permuted block-diagonal matrix. + + If your matrix is symmetrical, this method is of limited use; permutation can make it + non-symmetric. + + \sa stronglyConnectedComponents + + */ + + int dulmageMendelsohn( + std::vector& SWIG_OUTPUT(rowperm), std::vector& SWIG_OUTPUT(colperm), + std::vector& SWIG_OUTPUT(rowblock), std::vector& SWIG_OUTPUT(colblock), + std::vector& SWIG_OUTPUT(coarse_rowblock), + std::vector& SWIG_OUTPUT(coarse_colblock), + int seed=0) const; + + /** \brief Get the location of all non-zero elements as they would appear in a Dense matrix + A : DenseMatrix 4 x 3 + B : SparseMatrix 4 x 3 , 5 structural non-zeros + + k = A.find() + A[k] will contain the elements of A that are non-zero in B + */ + std::vector find(bool ind1=SWIG_IND1) const; + +#ifndef SWIG + /// Get the location of all nonzero elements (inplace version) + void find(std::vector& loc, bool ind1=false) const; +#endif // SWIG + + /** \brief Perform a unidirectional coloring: A greedy distance-2 coloring algorithm + (Algorithm 3.1 in A. H. GEBREMEDHIN, F. MANNE, A. POTHEN) */ + Sparsity unidirectionalColoring(const Sparsity& AT=Sparsity(), + int cutoff = std::numeric_limits::max()) const; + + /** \brief Perform a star coloring of a symmetric matrix: + A greedy distance-2 coloring algorithm + Algorithm 4.1 in + What Color Is Your Jacobian? Graph Coloring for Computing Derivatives + A. H. GEBREMEDHIN, F. MANNE, A. POTHEN + SIAM Rev., 47(4), 629–705 (2006) + + Ordering options: None (0), largest first (1) + */ + Sparsity starColoring(int ordering = 1, int cutoff = std::numeric_limits::max()) const; + + /** \brief Perform a star coloring of a symmetric matrix: + A new greedy distance-2 coloring algorithm + Algorithm 4.1 in + NEW ACYCLIC AND STAR COLORING ALGORITHMS WITH APPLICATION TO COMPUTING HESSIANS + A. H. GEBREMEDHIN, A. TARAFDAR, F. MANNE, A. POTHEN + SIAM J. SCI. COMPUT. Vol. 29, No. 3, pp. 1042–1072 (2007) + + Ordering options: None (0), largest first (1) + */ + Sparsity starColoring2(int ordering = 1, int cutoff = std::numeric_limits::max()) const; + + /** \brief Order the cols by decreasing degree */ + std::vector largestFirstOrdering() const; + + /** \brief Permute rows and/or columns + Multiply the sparsity with a permutation matrix from the left and/or from the right + P * A * trans(P), A * trans(P) or A * trans(P) with P defined by an index vector + containing the row for each col. As an alternative, P can be transposed (inverted). + */ + Sparsity pmult(const std::vector& p, bool permute_rows=true, bool permute_cols=true, + bool invert_permutation=false) const; + + /// Get the dimension as a string + std::string dimString() const; + + /** \brief Print a textual representation of sparsity + */ + void spy(std::ostream &stream=casadi::userOut()) const; + + /** \brief Generate a script for Matlab or Octave which visualizes + * the sparsity using the spy command */ + void spyMatlab(const std::string& mfile) const; + + /** \brief Print a compact description of the sparsity pattern */ + void printCompact(std::ostream &stream=casadi::userOut()) const; + + // Hash the sparsity pattern + std::size_t hash() const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + +#ifndef SWIG + /** \brief Assign the nonzero entries of one sparsity pattern to the nonzero + * entries of another sparsity pattern */ + template + void set(T* data, const T* val_data, const Sparsity& val_sp) const; + + /** \brief Add the nonzero entries of one sparsity pattern to the nonzero entries + * of another sparsity pattern */ + template + void add(T* data, const T* val_data, const Sparsity& val_sp) const; + + /** \brief Bitwise or of the nonzero entries of one sparsity pattern and the nonzero + * entries of another sparsity pattern */ + template + void bor(T* data, const T* val_data, const Sparsity& val_sp) const; + + + private: + /// Construct a sparsity pattern from vectors, reuse cached pattern if possible + void assignCached(int nrow, int ncol, const std::vector& colind, + const std::vector& row); + + /// Construct a sparsity pattern from vectors, reuse cached pattern if possible + void assignCached(int nrow, int ncol, const int* colind, const int* row); + +#endif //SWIG + }; + + /// \cond INTERNAL + /** \brief Hash value of an integer */ + template + inline size_t hash_value(T v) { return size_t(v);} + + /** \brief Generate a hash value incrementally (function taken from boost) */ + template + inline void hash_combine(std::size_t& seed, T v) { + seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); + } + + /** \brief Generate a hash value incrementally, array */ + inline void hash_combine(std::size_t& seed, const int* v, int sz) { + for (int i=0; i& v) { + hash_combine(seed, getPtr(v), v.size()); + } + + /** \brief Hash a sparsity pattern */ + CASADI_EXPORT std::size_t hash_sparsity(int nrow, int ncol, + const std::vector& colind, + const std::vector& row); + + CASADI_EXPORT std::size_t hash_sparsity(int nrow, int ncol, + const int* colind, + const int* row); + /// \endcond + +#ifndef SWIG + // Template instantiations + template + void Sparsity::set(DataType* data, const DataType* val_data, const Sparsity& val_sp) const { + // Get dimensions of this + const int sz = nnz(); + const int sz1 = size1(); + const int sz2 = size2(); + + // Get dimensions of assigning matrix + const int val_sz = val_sp.nnz(); + const int val_sz1 = val_sp.size1(); + const int val_sz2 = val_sp.size2(); + const int val_nel = val_sz1*val_sz2; + + // Check if sparsity matches + if (val_sp==*this) { + std::copy(val_data, val_data+sz, data); + } else if (this->isempty()) { + // Quick return + return; + } else if (val_sp.isempty()) { + // Quick return + return; + } else if (val_nel==1) { // if scalar + std::fill(data, data+sz, val_sz==0 ? DataType(0) : val_data[0]); + } else if (sz2==val_sz2 && sz1==val_sz1) { + // Matching dimensions + // Sparsity + const int* c = row(); + const int* rind = colind(); + const int* v_c = val_sp.row(); + const int* v_rind = val_sp.colind(); + + // For all columns + for (int i=0; i: shape mismatch. lhs is matrix of shape " + << dimString() << ", while rhs is shape " << val_sp.dimString() << "."); + } + } + + template + void Sparsity::add(DataType* data, const DataType* val_data, const Sparsity& val_sp) const { + // Get dimensions of this + const int sz = nnz(); + const int sz1 = size1(); + const int sz2 = size2(); + const int nel = sz1*sz2; + + // Get dimensions of assigning matrix + const int val_sz = val_sp.nnz(); + const int val_sz1 = val_sp.size1(); + const int val_sz2 = val_sp.size2(); + const int val_nel = val_sz1*val_sz2; + + // Check if sparsity matches + if (val_sp==*this) { + for (int k=0; kisempty()) { + // Quick return + return; + } else if (val_sp.isempty()) { + // Quick return + return; + } else if (val_nel==1) { // if scalar + if (val_sz!=0) { + for (int k=0; k: shape mismatch. lhs is matrix of shape " + << dimString() << ", while rhs is shape " + << val_sp.dimString() << "."); + + // Sparsity + const int* c = row(); + const int* rind = colind(); + const int* v_c = val_sp.row(); + const int* v_rind = val_sp.colind(); + + // For all cols + for (int i=0; i + void Sparsity::bor(DataType* data, const DataType* val_data, const Sparsity& val_sp) const { + // Get dimensions of this + const int sz = nnz(); + const int sz1 = size1(); + const int sz2 = size2(); + const int nel = sz1*sz2; + + // Get dimensions of assigning matrix + const int val_sz = val_sp.nnz(); + const int val_sz1 = val_sp.size1(); + const int val_sz2 = val_sp.size2(); + const int val_nel = val_sz1*val_sz2; + + // Check if sparsity matches + if (val_sp==*this) { + for (int k=0; kisempty()) { + // Quick return + return; + } else if (val_sp.isempty()) { + // Quick return + return; + } else if (val_nel==1) { // if scalar + if (val_sz!=0) { + for (int k=0; k: shape mismatch. lhs is matrix of shape " + << dimString() << ", while rhs is shape " << val_sp.dimString() << "."); + + // Sparsity + const int* c = row(); + const int* rind = colind(); + const int* v_c = val_sp.row(); + const int* v_rind = val_sp.colind(); + + // For all columns + for (int i=0; i SparsityDict; + ///@} + +} // namespace casadi + +#endif // CASADI_SPARSITY_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparsity_interface.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparsity_interface.hpp new file mode 100755 index 0000000..ff08cea --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparsity_interface.hpp @@ -0,0 +1,810 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SPARSITY_INTERFACE_HPP +#define CASADI_SPARSITY_INTERFACE_HPP + +#include "../std_vector_tools.hpp" + +namespace casadi { + /** \brief Empty Base + This class is extended in SWIG. + */ + struct CASADI_EXPORT SparsityInterfaceCommon {}; + + /** \brief Sparsity interface class + + This is a common base class for GenericMatrix (i.e. MX and Matrix<>) and Sparsity, introducing a + uniform syntax and implementing common functionality using the curiously recurring template pattern + (CRTP) idiom.\n + + \author Joel Andersson + \date 2014 + */ + template + class CASADI_EXPORT SparsityInterface : public SparsityInterfaceCommon { +#ifndef SWIG + protected: + // Helper functions + inline const MatType& self() const { return static_cast(*this); } + inline MatType& self() { return static_cast(*this); } + public: + // Create vector with 1 element + inline friend std::vector make_vector(const MatType& x0) { + return std::vector(1, x0); + } + + // Create vector with 2 elements + inline friend std::vector make_vector(const MatType& x0, const MatType& x1) { + MatType x[] = {x0, x1}; + return std::vector(x, x+2); + } + + // Create vector with 3 elements + inline friend std::vector make_vector(const MatType& x0, const MatType& x1, + const MatType& x2) { + MatType x[] = {x0, x1, x2}; + return std::vector(x, x+3); + } + + // Create vector with 4 elements + inline friend std::vector make_vector(const MatType& x0, const MatType& x1, + const MatType& x2, const MatType& x3) { + MatType x[] = {x0, x1, x2, x3}; + return std::vector(x, x+4); + } + + // Create vector with 5 elements + inline friend std::vector make_vector(const MatType& x0, const MatType& x1, + const MatType& x2, const MatType& x3, + const MatType& x4) { + MatType x[] = {x0, x1, x2, x3, x4}; + return std::vector(x, x+5); + } + + // Create vector with 6 elements + inline friend std::vector make_vector(const MatType& x0, const MatType& x1, + const MatType& x2, const MatType& x3, + const MatType& x4, const MatType& x5) { + MatType x[] = {x0, x1, x2, x3, x4, x5}; + return std::vector(x, x+6); + } + + // Create vector from map and vector with key order + inline friend std::vector make_vector(const std::map& m, + const std::vector& s) { + std::vector ret(s.size()); + for (size_t i=0; i!=s.size(); ++i) { + typename std::map::const_iterator it=m.find(s[i]); + if (it!=m.end()) { + ret[i]=it->second; + } + } + return ret; + } + + // Create vector from map and vector with key order + inline friend std::vector > + make_vector(const std::map >& m, + const std::vector& s) { + std::vector > ret(s.size()); + for (size_t i=0; i!=s.size(); ++i) { + typename std::map >::const_iterator it=m.find(s[i]); + if (it!=m.end()) { + ret[i]=it->second; + } + } + return ret; + } + + // Create vector from map and vector with key order + inline friend std::vector + make_vector(const std::pair, std::vector >& ms) { + return make_vector(ms.first, ms.second); + } + + // Create vector from map and vector with key order + inline friend std::vector > + make_vector(const std::pair >, + std::vector >& ms) { + return make_vector(ms.first, ms.second); + } + + // Assign 1 element from a vector + template + inline friend void assign_vector(T0& x0, + const std::vector& x) { + x.at(0).get(x0); + } + + // Assign 2 elements from a vector + template + inline friend void assign_vector(T0& x0, T1& x1, + const std::vector& x) { + assign_vector(x0, x); + x.at(1).get(x1); + } + + // Assign 3 elements from a vector + template + inline friend void assign_vector(T0& x0, T1& x1, T2& x2, + const std::vector& x) { + assign_vector(x0, x1, x); + x.at(2).get(x2); + } + + // Assign 4 elements from a vector + template + inline friend void assign_vector(T0& x0, T1& x1, T2& x2, T3& x3, + const std::vector& x) { + assign_vector(x0, x1, x2, x); + x.at(3).get(x3); + } + + // Assign 5 elements from a vector + template + inline friend void assign_vector(T0& x0, T1& x1, T2& x2, T3& x3, T4& x4, + const std::vector& x) { + assign_vector(x0, x1, x2, x3, x); + x.at(4).get(x4); + } + + // Assign 6 elements from a vector + template + inline friend void assign_vector(T0& x0, T1& x1, T2& x2, T3& x3, T4& x4, T5& x5, + const std::vector& x) { + assign_vector(x0, x1, x2, x3, x4, x); + x.at(5).get(x5); + } + + // Create map with 1 element + inline friend std::map + make_map(const std::string& n0, const MatType& x0) { + std::map ret; + ret[n0]=x0; + return ret; + } + + // Create map with 2 elements + inline friend std::map + make_map(const std::string& n0, const MatType& x0, + const std::string& n1, const MatType& x1) { + std::map ret=make_map(n0, x0); + ret[n1]=x1; + return ret; + } + + // Create map with 3 elements + inline friend std::map + make_map(const std::string& n0, const MatType& x0, + const std::string& n1, const MatType& x1, + const std::string& n2, const MatType& x2) { + std::map ret=make_map(n0, x0, n1, x1); + ret[n2]=x2; + return ret; + } + + // Create map with 4 elements + inline friend std::map + make_map(const std::string& n0, const MatType& x0, + const std::string& n1, const MatType& x1, + const std::string& n2, const MatType& x2, + const std::string& n3, const MatType& x3) { + std::map ret=make_map(n0, x0, n1, x1, n2, x2); + ret[n3]=x3; + return ret; + } + + // Create map with 5 elements + inline friend std::map + make_map(const std::string& n0, const MatType& x0, + const std::string& n1, const MatType& x1, + const std::string& n2, const MatType& x2, + const std::string& n3, const MatType& x3, + const std::string& n4, const MatType& x4) { + std::map ret=make_map(n0, x0, n1, x1, n2, x2, n3, x3); + ret[n4]=x4; + return ret; + } + + // Create map with 6 elements + inline friend std::map + make_map(const std::string& n0, const MatType& x0, + const std::string& n1, const MatType& x1, + const std::string& n2, const MatType& x2, + const std::string& n3, const MatType& x3, + const std::string& n4, const MatType& x4, + const std::string& n5, const MatType& x5) { + std::map ret=make_map(n0, x0, n1, x1, n2, x2, n3, x3, n4, x4); + ret[n5]=x5; + return ret; + } + + // Assign 1 element from a map + template + inline friend void assign_map(const std::string& n0, T0& x0, + const std::map& x) { + x.at(n0).get(x0); + } + + // Assign 2 elements from a map + template + inline friend void assign_map(const std::string& n0, T0& x0, + const std::string& n1, T0& x1, + const std::vector& x) { + assign_map(n0, x0, x); + x.at(n1).get(x1); + } + + // Assign 3 elements from a map + template + inline friend void assign_map(const std::string& n0, T0& x0, + const std::string& n1, T0& x1, + const std::string& n2, T0& x2, + const std::vector& x) { + assign_map(n0, x0, n1, x1, x); + x.at(n2).get(x2); + } + + // Assign 4 elements from a map + template + inline friend void assign_map(const std::string& n0, T0& x0, + const std::string& n1, T0& x1, + const std::string& n2, T0& x2, + const std::string& n3, T0& x3, + const std::vector& x) { + assign_map(n0, x0, n1, x1, n2, x2, x); + x.at(n3).get(x3); + } + + // Assign 5 elements from a map + template + inline friend void assign_map(const std::string& n0, T0& x0, + const std::string& n1, T0& x1, + const std::string& n2, T0& x2, + const std::string& n3, T0& x3, + const std::string& n4, T0& x4, + const std::vector& x) { + assign_map(n0, x0, n1, x1, n2, x2, n3, x3, x); + x.at(n4).get(x4); + } + + // Assign 6 elements from a map + template + inline friend void assign_map(const std::string& n0, T0& x0, + const std::string& n1, T0& x1, + const std::string& n2, T0& x2, + const std::string& n3, T0& x3, + const std::string& n4, T0& x4, + const std::string& n5, T0& x5, + const std::vector& x) { + assign_map(n0, x0, n1, x1, n2, x2, n3, x3, n4, x4, x); + x.at(n5).get(x5); + } +#endif // SWIG + + public: + +#ifndef SWIG + + /// \cond CLUTTER + std::vector< std::vector< MatType > > + zz_blocksplit(const std::vector& vert_offset, + const std::vector& horz_offset) const; + std::vector< std::vector< MatType > > + zz_blocksplit(int vert_incr, int horz_incr) const; + static MatType zz_veccat(const std::vector< MatType >& x); + MatType zz_vec() const; + MatType zz_repmat(int n, int m=1) const; + static std::vector zz_offset(const std::vector< MatType > &v, bool vert=true); + std::vector< MatType > zz_diagsplit(const std::vector& output_offset) const; + std::vector< MatType > zz_diagsplit(int incr) const; + std::vector< MatType > zz_diagsplit(int incr1, int incr2) const; + static MatType zz_mul(const std::vector &args); + std::vector zz_horzsplit(int incr) const; + std::vector zz_vertsplit(int incr) const; + /// \endcond +#endif + +#if !defined(SWIG) || defined(DOXYGEN) +/** \defgroup expression_tools Expression tools +* Functions for manipulating DMatrix, SX, MX or Sparsity +* +*/ +/** +\ingroup expression_tools +@{ +*/ + /** \brief Concatenate a list of matrices horizontally + * Alternative terminology: horizontal stack, hstack, horizontal append, [a b] + * + * horzcat(horzsplit(x, ...)) = x + */ + inline friend MatType horzcat(const std::vector &v) { + return MatType::zz_horzcat(v); + } + + /** \brief Concatenate a list of matrices vertically + * Alternative terminology: vertical stack, vstack, vertical append, [a;b] + * + * vertcat(vertsplit(x, ...)) = x + */ + friend MatType vertcat(const std::vector &v) { + return MatType::zz_vertcat(v); + } + + /** \brief split horizontally, retaining groups of columns + * \param offset List of all start columns for each group + * the last column group will run to the end. + * + * horzcat(horzsplit(x, ...)) = x + */ + inline friend std::vector + horzsplit(const MatType &v, const std::vector& offset) { + return v.zz_horzsplit(offset); + } + + /** \brief split horizontally, retaining fixed-sized groups of columns + * \param incr Size of each group of columns + * + * horzcat(horzsplit(x, ...)) = x + */ + inline friend std::vector horzsplit(const MatType &v, int incr=1) { + return v.zz_horzsplit(incr); + } + + /** * \brief split vertically, retaining groups of rows + * \param output_offset List of all start rows for each group + * the last row group will run to the end. + * + * vertcat(vertsplit(x, ...)) = x + */ + friend std::vector + vertsplit(const MatType &v, const std::vector& offset) { + return v.zz_vertsplit(offset); + } + + /** \brief Helper function, get offsets corresponding to a vector of matrices + */ + inline friend std::vector offset(const std::vector &v, bool vert=true) { + return MatType::zz_offset(v, vert); + } + + /** \brief split vertically, retaining fixed-sized groups of rows + * \param incr Size of each group of rows + * + * vertcat(vertsplit(x, ...)) = x + + \doctest + print vertsplit(SX.sym("a",4)) + \doctestout + [SX(a_0), SX(a_1), SX(a_2), SX(a_3)] + \enddoctest + + \doctest + print vertsplit(SX.sym("a",4),2) + \doctestout + [SX([a_0, a_1]), SX([a_2, a_3])] + \enddoctest + + If the number of rows is not a multiple of \p incr, + the last entry returned will have a size smaller than \p incr. + + \doctest + print vertsplit(DMatrix([0,1,2,3,4]),2) + \doctestout + [DMatrix([0, 1]), DMatrix([2, 3]), DMatrix(4)] + \enddoctest + * + */ + inline friend std::vector vertsplit(const MatType &v, int incr=1) { + return v.zz_vertsplit(incr); + } + + /** \brief Construct a matrix from a list of list of blocks. + */ + inline friend MatType blockcat(const std::vector< std::vector > &v) { + return MatType::zz_blockcat(v); + } + + /** \brief Construct a matrix from 4 blocks + */ + inline friend MatType + blockcat(const MatType &A, const MatType &B, const MatType &C, const MatType &D) { + return vertcat(horzcat(A, B), horzcat(C, D)); + } + + /** \brief chop up into blocks + * \param vert_offset Defines the boundaries of the block rows + * \param horz_offset Defines the boundaries of the block columns + * + * blockcat(blocksplit(x,..., ...)) = x + */ + inline friend std::vector< std::vector< MatType > > + blocksplit(const MatType& x, + const std::vector& vert_offset, + const std::vector& horz_offset) { + return x.zz_blocksplit(vert_offset, horz_offset); + } + + /** \brief chop up into blocks + * \param vert_incr Defines the increment for block boundaries in row dimension + * \param horz_incr Defines the increment for block boundaries in column dimension + * + * blockcat(blocksplit(x,..., ...)) = x + */ + inline friend std::vector< std::vector< MatType > > + blocksplit(const MatType& x, int vert_incr=1, int horz_incr=1) { + return x.zz_blocksplit(vert_incr, horz_incr); + } + + /** \brief Construct a matrix with given block on the diagonal + */ + inline friend MatType diagcat(const std::vector &A) { + return MatType::zz_diagcat(A); + } + + /** \brief split diagonally, retaining square matrices + * \param output_offset1 List of all start locations (row) for each group + * the last matrix will run to the end. + * \param output_offset2 List of all start locations (row) for each group + * the last matrix will run to the end. + * + * diagcat(diagsplit(x, ...)) = x + */ + friend std::vector< MatType > + diagsplit(const MatType& x, + const std::vector& output_offset1, + const std::vector& output_offset2) { + return x.zz_diagsplit(output_offset1, output_offset2); + } + + /** \brief split diagonally, retaining square matrices + * \param output_offset List of all start locations for each group + * the last matrix will run to the end. + * + * diagcat(diagsplit(x, ...)) = x + */ + inline friend std::vector< MatType > + diagsplit(const MatType& x, const std::vector& output_offset) { + return x.zz_diagsplit(output_offset); + } + + /** \brief split diagonally, retaining groups of square matrices + * \param incr Size of each matrix + * + * diagsplit(diagsplit(x, ...)) = x + */ + inline friend std::vector< MatType > + diagsplit(const MatType& x, int incr=1) { + return x.zz_diagsplit(incr); + } + + /** \brief split diagonally, retaining fixed-sized matrices + * \param incr1 Row dimension of each matrix + * \param incr2 Column dimension of each matrix + * + * diagsplit(diagsplit(x, ...)) = x + */ + inline friend std::vector< MatType > + diagsplit(const MatType& x, int incr1, int incr2) { + return x.zz_diagsplit(incr1, incr2); + } + + /** \brief concatenate vertically while vectorizing all arguments with vec + */ + inline friend MatType veccat(const std::vector< MatType >& x) { + return MatType::zz_veccat(x); + } + + /** \brief Matrix product of two matrices + */ + inline friend MatType mul(const MatType &X, const MatType &Y) { + return X.zz_mtimes(Y); + } + + /** \brief Matrix product of n matrices + */ + inline friend MatType mul(const std::vector &args) { + return MatType::zz_mul(args); + } + + /** \brief Multiply-accumulate operation + Matrix product of two matrices (X and Y), adding the result to + a third matrix Z. The result has the same sparsity pattern as + C meaning that other entries of (X*Y) are ignored. + The operation is equivalent to: Z+mul(X,Y).project(Z.sparsity()). + */ + inline friend MatType + mac(const MatType &X, const MatType &Y, const MatType &Z) { + return X.zz_mac(Y, Z); + } + + /** \brief Transpose + */ + inline friend MatType transpose(const MatType& X) { + return X.T(); + } + + /** \brief make a vector + Reshapes/vectorizes the matrix such that the shape becomes (expr.numel(), 1). + Columns are stacked on top of each other. + Same as reshape(expr, expr.numel(), 1) + + a c \n + b d \n + + turns into + + a \n + b \n + c \n + d \n + */ + inline friend MatType vec(const MatType& a) { + return a.zz_vec(); + } + + /** \brief Returns a flattened version of the matrix, preserving only nonzeros + */ + inline friend MatType vecNZ(const MatType& a) { + return a.zz_vecNZ(); + } + + /** \brief Returns a reshaped version of the matrix + */ + inline friend MatType reshape(const MatType& a, int nrow, int ncol) { + return a.zz_reshape(nrow, ncol); + } + + /** \brief Returns a reshaped version of the matrix, dimensions as a vector + */ + inline friend MatType reshape(const MatType& a, std::pair rc) { + return reshape(a, rc.first, rc.second); + } + + /** \brief Reshape the matrix + */ + inline friend MatType reshape(const MatType& a, const Sparsity& sp) { + return a.zz_reshape(sp); + } + + /** \brief Obtain the structural rank of a sparsity-pattern + */ + inline friend int sprank(const MatType& A) { + return A.zz_sprank(); + } + + /** \brief 0-norm (nonzero count) of a Matrix-matrix product + */ + inline friend int norm_0_mul(const MatType &x, const MatType &y) { + return x.zz_norm_0_mul(y); + } + + /** \brief Get the upper triangular part of a matrix + */ + inline friend MatType triu(const MatType& a, bool includeDiagonal=true) { + return a.zz_triu(includeDiagonal); + } + + /** \brief Get the lower triangular part of a matrix + */ + inline friend MatType tril(const MatType& a, bool includeDiagonal=true) { + return a.zz_tril(includeDiagonal); + } + + /** \brief Kronecker tensor product + * + * Creates a block matrix in which each element (i, j) is a_ij*b + */ + inline friend MatType kron(const MatType& a, const MatType& b) { + return a.zz_kron(b); + } + + /** \brief Repeat matrix A n times vertically and m times horizontally + */ + inline friend MatType repmat(const MatType &A, int n, int m=1) { + return A.zz_repmat(n, m); + } + + /** \brief Repeat matrix A n times vertically and m times horizontally + */ + inline friend MatType repmat(const MatType &A, const std::pair& rc) { + return A.zz_repmat(rc.first, rc.second); + } + + /** \brief Concatenate horizontally, two matrices */ + inline friend MatType horzcat(const MatType &x, const MatType &y) { + return horzcat(make_vector(x, y)); + } + + /** \brief Concatenate horizontally, three matrices */ + inline friend MatType horzcat(const MatType &x, const MatType &y, const MatType &z) { + return horzcat(make_vector(x, y, z)); + } + + /** \brief Concatenate horizontally, four matrices */ + inline friend MatType horzcat(const MatType &x, const MatType &y, const MatType &z, + const MatType &w) { + return horzcat(make_vector(x, y, z, w)); + } + + /** \brief Concatenate vertically, two matrices */ + inline friend MatType vertcat(const MatType &x, const MatType &y) { + return vertcat(make_vector(x, y)); + } + + /** \brief Concatenate vertically, three matrices */ + inline friend MatType vertcat(const MatType &x, const MatType &y, const MatType &z) { + return vertcat(make_vector(x, y, z)); + } + + /** \brief Concatenate vertically, four matrices */ + inline friend MatType vertcat(const MatType &x, const MatType &y, const MatType &z, + const MatType &w) { + return vertcat(make_vector(x, y, z, w)); + } + + /** \brief Concatenate along diagonal, two matrices */ + inline friend MatType diagcat(const MatType &x, const MatType &y) { + return diagcat(make_vector(x, y)); + } + + /** \brief Concatenate along diagonal, three matrices */ + inline friend MatType diagcat(const MatType &x, const MatType &y, const MatType &z) { + return diagcat(make_vector(x, y, z)); + } + + /** \brief Concatenate along diagonal, four matrices */ + inline friend MatType diagcat(const MatType &x, const MatType &y, const MatType &z, + const MatType &w) { + return diagcat(make_vector(x, y, z, w)); + } +/** \@} */ +#endif // SWIG + }; + +#ifndef SWIG + template + MatType SparsityInterface::zz_vec() const { + return reshape(self(), self().numel(), 1); + } + + template + MatType SparsityInterface::zz_repmat(int n, int m) const { + MatType allrows = vertcat(std::vector(n, self())); + return horzcat(std::vector(m, allrows)); + } + + template + std::vector< std::vector< MatType > > + SparsityInterface::zz_blocksplit(const std::vector& vert_offset, + const std::vector& horz_offset) const { + std::vector< MatType > rows = vertsplit(self(), vert_offset); + std::vector< std::vector< MatType > > ret; + for (int i=0;i + std::vector< std::vector< MatType > > + SparsityInterface::zz_blocksplit(int vert_incr, int horz_incr) const { + casadi_assert(horz_incr>=1); + casadi_assert(vert_incr>=1); + int sz1 = self().size1(); + std::vector offset1 = range(0, sz1, vert_incr); + offset1.push_back(sz1); + int sz2 = self().size2(); + std::vector offset2 = range(0, sz2, horz_incr); + offset2.push_back(sz2); + return blocksplit(self(), offset1, offset2); + } + + template + std::vector + SparsityInterface::zz_offset(const std::vector< MatType > &v, bool vert) { + std::vector ret(v.size()+1); + ret[0]=0; + for (int i=0; i + MatType SparsityInterface::zz_veccat(const std::vector< MatType >& x) { + std::vector< MatType > x_vec = x; + for (typename std::vector< MatType >::iterator it=x_vec.begin(); + it!=x_vec.end(); ++it) { + *it = vec(*it); + } + return vertcat(x_vec); + } + + template + std::vector< MatType > + SparsityInterface::zz_diagsplit(const std::vector& output_offset) const { + casadi_assert_message(self().issquare(), "diagsplit(x,incr)::input must be square but got " + << self().dimString() << "."); + return diagsplit(self(), output_offset, output_offset); + } + + template + std::vector< MatType > + SparsityInterface::zz_diagsplit(int incr) const { + casadi_assert(incr>=1); + casadi_assert_message(self().issquare(), "diagsplit(x,incr)::input must be square but got " + << self().dimString() << "."); + std::vector offset2 = range(0, self().size2(), incr); + offset2.push_back(self().size2()); + return diagsplit(self(), offset2); + } + + template + std::vector< MatType > + SparsityInterface::zz_diagsplit(int incr1, int incr2) const { + casadi_assert(incr1>=1); + casadi_assert(incr2>=1); + std::vector offset1 = range(0, self().size1(), incr1); + offset1.push_back(self().size1()); + std::vector offset2 = range(0, self().size2(), incr2); + offset2.push_back(self().size2()); + return diagsplit(self(), offset1, offset2); + } + + template + MatType SparsityInterface::zz_mul(const std::vector &args) { + casadi_assert_message(args.size()>=1, + "mul(std::vector &args): " + "supplied list must not be empty."); + MatType ret = args[0]; + for (int i=1; i + std::vector SparsityInterface::zz_horzsplit(int incr) const { + casadi_assert(incr>=1); + int sz2 = self().size2(); + std::vector offset2 = range(0, sz2, incr); + offset2.push_back(sz2); + return horzsplit(self(), offset2); + } + + template + std::vector SparsityInterface::zz_vertsplit(int incr) const { + casadi_assert(incr>=1); + int sz1 = self().size1(); + std::vector offset1 = range(0, sz1, incr); + offset1.push_back(sz1); + return vertsplit(self(), offset1); + } +#endif // SWIG + +} // namespace casadi + +#endif // CASADI_SPARSITY_INTERFACE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparsity_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparsity_internal.hpp new file mode 100755 index 0000000..b08782e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/sparsity_internal.hpp @@ -0,0 +1,449 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SPARSITY_INTERNAL_HPP +#define CASADI_SPARSITY_INTERNAL_HPP + +#include "sparsity.hpp" +/// \cond INTERNAL + +namespace casadi { + + class CASADI_EXPORT SparsityInternal : public SharedObjectNode { + private: + /* \brief Sparsity pattern in compressed column storage (CCS) format + The first two entries are the number of rows (nrow) and columns (ncol). + The next (ncol+1) entries are the column offsets (colind). This means that + the number of nonzeros (nnz) is given as sp_[sp_[1]+2]. + The last nnz entries are the rows of the nonzeros (row). See public class + for more info about the CCS format used in CasADi. */ + std::vector sp_; + + public: + /// Construct a sparsity pattern from arrays + SparsityInternal(int nrow, int ncol, const int* colind, const int* row) : + sp_(2 + ncol+1 + colind[ncol]) { + sp_[0] = nrow; + sp_[1] = ncol; + std::copy(colind, colind+ncol+1, sp_.begin()+2); + std::copy(row, row+colind[ncol], sp_.begin()+2+ncol+1); + sanityCheck(false); + } + + /** \brief Get number of rows (see public class) */ + inline const std::vector& sp() const { return sp_;} + + /** \brief Get number of rows (see public class) */ + inline int size1() const { return sp_[0];} + + /** \brief Get number of columns (see public class) */ + inline int size2() const { return sp_[1];} + + /** \brief Get column offsets (see public class) */ + inline const int* colind() const { return &sp_.front()+2;} + + /** \brief Get row indices (see public class) */ + inline const int* row() const { return colind()+size2()+1;} + + /// Number of structural non-zeros + inline int nnz() const { return colind()[size2()];} + + /// Check if the dimensions and colind, row vectors are compatible + void sanityCheck(bool complete=false) const; + + /** \brief Get the diagonal of the matrix/create a diagonal matrix + * + * \param[out] mapping will contain the nonzero mapping + */ + Sparsity getDiag(std::vector& mapping) const; + + /// Calculate the elimination tree: See cs_etree in CSparse + std::vector eliminationTree(bool ata) const; + + /// Find strongly connected components: See cs_dfs in CSparse + int depthFirstSearch(int j, int top, std::vector& xi, std::vector& pstack, + const std::vector& pinv, std::vector& marked) const; + + /// Find the strongly connected components of a square matrix: See cs_scc in CSparse + int stronglyConnectedComponents(std::vector& p, std::vector& r) const; + + /// Transpose the matrix + Sparsity T() const; + + /** \brief Transpose the matrix and get the reordering of the non-zero entries, + * + * \param[out] mapping the non-zeros of the original matrix for each non-zero of the new matrix + */ + Sparsity transpose(std::vector& mapping, bool invert_mapping=false) const; + + /// Check if the sparsity is the transpose of another + bool isTranspose(const SparsityInternal& y) const; + + /// Check if the sparsity is a reshape of another + bool isReshape(const SparsityInternal& y) const; + + /// Breadth-first search for coarse decomposition: see cs_bfs in CSparse + void breadthFirstSearch(int n, std::vector& wi, std::vector& wj, + std::vector& queue, const std::vector& imatch, + const std::vector& jmatch, int mark) const; + + /// Collect matched cols and rows into p and q: see cs_matched in CSparse + static void matched(int n, const std::vector& wj, const std::vector& imatch, + std::vector& p, std::vector& q, std::vector& cc, + std::vector& rr, int set, int mark); + + /// Collect unmatched cols into the permutation vector p : see cs_unmatched in CSparse + static void unmatched(int m, const std::vector& wi, std::vector& p, + std::vector& rr, int set); + + /// return 1 if col i is in R2 : see cs_rprune in CSparse + static int rprune(int i, int j, double aij, void *other); + + /** \brief drop entries for which fkeep(A(i, j)) is false; return nz if OK, else -1: : + * see cs_fkeep in CSparse + */ + static int drop(int (*fkeep)(int, int, double, void *), void *other, + int nrow, int ncol, + std::vector& colind, std::vector& row); + + /// Compute the Dulmage-Mendelsohn decomposition : see cs_dmperm in CSparse + int dulmageMendelsohn(std::vector& rowperm, std::vector& colperm, + std::vector& rowblock, std::vector& colblock, + std::vector& coarse_rowblock, std::vector& coarse_colblock, + int seed) const { + return T()->dulmageMendelsohnUpper(colperm, rowperm, colblock, rowblock, + coarse_colblock, coarse_rowblock, seed); + } + + /** \brief Compute the Dulmage-Mendelsohn decomposition + * + * -- upper triangular TODO: refactor and merge with the above + */ + int dulmageMendelsohnUpper(std::vector& rowperm, std::vector& colperm, + std::vector& rowblock, std::vector& colblock, + std::vector& coarse_rowblock, + std::vector& coarse_colblock, int seed) const; + + /// Compute the maximum transversal (maximum matching): see cs_maxtrans in CSparse + void maxTransversal(std::vector& imatch, + std::vector& jmatch, Sparsity& trans, int seed) const; + + /// Find an augmenting path: see cs_augment in CSparse + void augmentingPath(int k, std::vector& jmatch, + int *cheap, std::vector& w, int *js, int *is, int *ps) const; + + /** + * return a random permutation vector, the identity perm, or p = n-1:-1:0. + * seed = -1 means p = n-1:-1:0. seed = 0 means p = identity. + * otherwise p = random permutation. See cs_randperm in CSparse + */ + static std::vector randomPermutation(int n, int seed); + + /// Invert a permutation matrix: see cs_pinv in CSparse + static std::vector invertPermutation(const std::vector& p); + + /// C = A(p, q) where p and q are permutations of 0..m-1 and 0..n-1.: see cs_permute in CSparse + Sparsity permute(const std::vector& pinv, const std::vector& q, int values) const; + + /// C = A(p, q) where p and q are permutations of 0..m-1 and 0..n-1.: see cs_permute in CSparse + void permute(const std::vector& pinv, + const std::vector& q, int values, + std::vector& colind_C, + std::vector& row_C) const; + + /// consider A(i, j), node j in ith col subtree and return lca(jprev, j): See cs_leaf in CSparse + static int leaf(int i, int j, const int *first, int *maxfirst, + int *prevleaf, int *ancestor, int *jleaf); + + /** compute nnz(V) = S->lnz, S->pinv, S->leftmost, S->m2 from A and S->parent: + * See cs_vcount in CSparse + */ + int vcount(std::vector& pinv, std::vector& parent, std::vector& leftmost, + int& S_m2, double& S_lnz) const; + + /// post order a forest: See cs_post in CSparse + static std::vector postorder(const std::vector& parent, int n); + + /// Depth-first search and postorder of a tree rooted at node j: See cs_tdfs in CSparse + static int depthFirstSearchAndPostorder(int j, int k, int *head, + const int *next, int *post, int *stack); + + /// row counts of LL'=A or LL'=A'A, given parent & post ordering: see init_ata in CSparse + void init_ata(const int *post, int *w, int **head, int **next) const; + + /// Row counts: See cs_counts in CSparse + std::vector counts(const int *parent, const int *post, int ata) const; + + /** Approximate minimal degree, p = amd(A+A') if symmetric is true, or amd(A'A) otherwise. + * order 0:natural, 1:Chol, 2:LU, 3:QR. See cs_amd in CSparse + */ + std::vector approximateMinimumDegree(int order) const; + + /// symbolic ordering and analysis for QR or LU: See cs_sqr in CSparse + void prefactorize(int order, int qr, std::vector& pinv, std::vector& q, + std::vector& parent, std::vector& cp, std::vector& leftmost, + int& m2, double& lnz, double& unz) const; + + /// clear w: cs_wclear in CSparse + static int wclear(int mark, int lemax, int *w, int n); + + /// keep off-diagonal entries; drop diagonal entries: See cs_diag in CSparse + static int diag(int i, int j, double aij, void *other); + + /// C = A*B: See cs_multiply in CSparse + Sparsity multiply(const Sparsity& B) const; + + /** x = x + beta * A(:, j), where x is a dense vector and A(:, j) is sparse: + * See cs_scatter in CSparse + */ + int scatter(int j, std::vector& w, int mark, int* Ci, int nz) const; + + /// Get row() as a vector + std::vector getRow() const; + + /// Get colind() as a vector + std::vector getColind() const; + + /// Get the column for each nonzero + std::vector getCol() const; + + /// Resize + Sparsity zz_resize(int nrow, int ncol) const; + + /// Reshape a sparsity, order of nonzeros remains the same + Sparsity zz_reshape(int nrow, int ncol) const; + + /// Number of elements + int numel() const; + + /// Number of non-zeros in the lower triangular half + int sizeL() const; + + /// Number of non-zeros in the upper triangular half + int sizeU() const; + + /// Number of non-zeros on the diagonal + int sizeD() const; + + /** \brief Upper half-bandwidth */ + int bandwidthU() const; + + /** \brief Lower half-bandwidth */ + int bandwidthL() const; + + /// Shape + std::pair shape() const; + + /// Is scalar? + bool isscalar(bool scalar_and_dense) const; + + /** \brief Check if the sparsity is empty + * + * A sparsity is considered empty if one of the dimensions is zero + * (or optionally both dimensions) + */ + bool isempty(bool both=false) const; + + /// Is dense? + bool isdense() const; + + /** \brief Check if the pattern is a row vector (i.e. size1()==1) */ + bool isrow() const; + + /** \brief Check if the pattern is a column vector (i.e. size2()==1) */ + bool iscolumn() const; + + /** \brief Check if the pattern is a row or column vector */ + bool isvector() const; + + /// Is diagonal? + bool isdiag() const; + + /// Is square? + bool issquare() const; + + /// Is symmetric? + bool issymmetric() const; + + /// Is lower triangular? + bool istril() const; + + /// is upper triangular? + bool istriu() const; + + /// Get upper triangular part + Sparsity zz_triu(bool includeDiagonal) const; + + /// Get lower triangular part + Sparsity zz_tril(bool includeDiagonal) const; + + /// Get nonzeros in lower triangular part + std::vector getLowerNZ() const; + + /// Get nonzeros in upper triangular part + std::vector getUpperNZ() const; + + /// Get the dimension as a string + std::string dimString() const; + + /// Sparsity pattern for a matrix-matrix product (details in public class) + Sparsity patternProduct(const Sparsity& y) const; + + ///@{ + /// Union of two sparsity patterns + Sparsity patternCombine(const Sparsity& y, bool f0x_is_zero, bool function0_is_zero, + std::vector& mapping) const; + Sparsity patternCombine(const Sparsity& y, bool f0x_is_zero, bool function0_is_zero) const; + + template + Sparsity patternCombineGen1(const Sparsity& y, bool f0x_is_zero, bool function0_is_zero, + std::vector& mapping) const; + + template + Sparsity patternCombineGen(const Sparsity& y, std::vector& mapping) const; + ///@} + + /// Take the inverse of a sparsity pattern; flip zeros and non-zeros + Sparsity patternInverse() const; + + /// Check if two sparsity patterns are the same + bool isEqual(const Sparsity& y) const; + + /// Check if two sparsity patterns are the same + bool isEqual(int y_nrow, int y_ncol, const std::vector& y_colind, + const std::vector& y_row) const; + + /// Check if two sparsity patterns are the same + bool isEqual(int y_nrow, int y_ncol, const int* y_colind, const int* y_row) const; + + /// Enlarge the matrix along the first dimension (i.e. insert rows) + Sparsity zz_enlargeRows(int nrow, const std::vector& rr, bool ind1) const; + + /// Enlarge the matrix along the second dimension (i.e. insert columns) + Sparsity zz_enlargeColumns(int ncol, const std::vector& cc, bool ind1) const; + + /// Make a patten dense + Sparsity makeDense(std::vector& mapping) const; + + /// Erase rows and/or columns - does bounds checking + Sparsity zz_erase(const std::vector& rr, const std::vector& cc, + bool ind1, std::vector& mapping) const; + + /// Erase elements + Sparsity zz_erase(const std::vector& rr, bool ind1, + std::vector& mapping) const; + + /// Append another sparsity patten vertically (vectors only) + Sparsity zz_appendVector(const SparsityInternal& sp) const; + + /// Append another sparsity patten horizontally + Sparsity zz_appendColumns(const SparsityInternal& sp) const; + + /** \brief Get a submatrix + * Does bounds checking + * rr and rr are not required to be monotonous + */ + Sparsity sub(const std::vector& rr, const std::vector& cc, + std::vector& mapping, bool ind1) const; + + /** \brief Get a set of elements + * Does bounds checking + * rr is not required to be monotonous + */ + Sparsity sub(const std::vector& rr, const SparsityInternal& sp, + std::vector& mapping, bool ind1) const; + + /// Get the index of an existing non-zero element + int getNZ(int rr, int cc) const; + + /// Get a set of non-zero element - does bounds checking + std::vector getNZ(const std::vector& rr, const std::vector& cc) const; + + /// Get the nonzero index for a set of elements (see description in public class) + void getNZ(std::vector& indices) const; + + /// Does the rows appear sequentially on each col + bool rowsSequential(bool strictly) const; + + /** \brief Remove duplicate entries + * + * The same indices will be removed from the mapping vector, + * which must have the same length as the number of nonzeros + */ + Sparsity zz_removeDuplicates(std::vector& mapping) const; + + /// Get element index for each nonzero + void find(std::vector& loc, bool ind1) const; + + /// Hash the sparsity pattern + std::size_t hash() const; + + /// Clone + virtual SparsityInternal* clone() const { return new SparsityInternal(*this); } + + /// Print representation + virtual void repr(std::ostream &stream) const; + + /// Print description + virtual void print(std::ostream &stream) const; + + /** \brief Perform a unidirectional coloring + * + * A greedy distance-2 coloring algorithm + * (Algorithm 3.1 in A. H. GEBREMEDHIN, F. MANNE, A. POTHEN) + */ + Sparsity unidirectionalColoring(const Sparsity& AT, int cutoff) const; + + /** \brief A greedy distance-2 coloring algorithm + * See description in public class. + */ + Sparsity starColoring(int ordering, int cutoff) const; + + /** \brief An improved distance-2 coloring algorithm + * See description in public class. + */ + Sparsity starColoring2(int ordering, int cutoff) const; + + /// Order the columns by decreasing degree + std::vector largestFirstOrdering() const; + + /// Permute rows and/or columns + Sparsity pmult(const std::vector& p, bool permute_rows=true, bool permute_cols=true, + bool invert_permutation=false) const; + + /** \brief Print a textual representation of sparsity */ + void spy(std::ostream &stream) const; + + /** \brief Print a compact description of the sparsity pattern */ + void printCompact(std::ostream &stream) const; + + /// Generate a script for Matlab or Octave which visualizes the sparsity using the spy command + void spyMatlab(const std::string& mfile) const; +}; + +} // namespace casadi +/// \endcond + +#endif // CASADI_SPARSITY_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/submatrix.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/submatrix.hpp new file mode 100755 index 0000000..cc84802 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/matrix/submatrix.hpp @@ -0,0 +1,170 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SUBMATRIX_HPP +#define CASADI_SUBMATRIX_HPP + +namespace casadi { + + + /** SubMatrix class for Matrix + SubMatrix is the return type for operator() of the Matrix class, it allows access to the value as well as changing the parent object + \author Joel Andersson + \date 2011-2014 + */ + template + class CASADI_EXPORT SubMatrix : public M { + private: + /// A reference to the matrix that is allowed to be modified + M& mat_; + + /// The element of the matrix that is allowed to be modified + I i_; + J j_; + public: + /// Constructor + SubMatrix(M& mat, const I& i, const J& j) : mat_(mat), i_(i), j_(j) { + mat.get(*this, false, i, j); + } + + ///@{ + /// Methods that modify a part of the parent object (A(i, j) = ?, A(i, j) += ?, etc.) + inline const M& operator=(const SubMatrix &y) { + mat_.set(y, false, i_, j_); + return y; + } + + inline const M& operator=(const M &y) { + mat_.set(y, false, i_, j_); + return y; + } + + inline M operator+=(const M &y) { + M s = *this+y; + mat_.set(s, false, i_, j_); + return s; + } + + inline M operator-=(const M &y) { + M s = *this-y; + mat_.set(s, false, i_, j_); + return s; + } + + inline M operator*=(const M &y) { + M s = *this*y; + mat_.set(s, false, i_, j_); + return s; + } + + inline M operator/=(const M &y) { + M s = *this/y; + mat_.set(s, false, i_, j_); + return s; + } + ///@} + }; + + /** SubIndex class for Matrix + Same as the above class but for single argument return for operator() + \author Joel Andersson + \date 2011-2014 + */ + template + class CASADI_EXPORT SubIndex : public M { + private: + /// A reference to the matrix that is allowed to be modified + M& mat_; + + /// The element of the matrix that is allowed to be modified + I i_; + public: + /// Constructor + SubIndex(M& mat, const I& i) : mat_(mat), i_(i) { + mat.get(*this, false, i); + } + + ///@{ + /// Methods that modify a part of the parent object (A(i) = ?, A(i) += ?, etc.) + inline const M& operator=(const SubIndex &y) { + mat_.set(y, false, i_); + return y; + } + + inline const M& operator=(const M &y) { + mat_.set(y, false, i_); + return y; + } + + inline M operator+=(const M &y) { + M s = *this+y; + mat_.set(s, false, i_); + return s; + } + + inline M operator-=(const M &y) { + M s = *this-y; + mat_.set(s, false, i_); + return s; + } + + inline M operator*=(const M &y) { + M s = *this*y; + mat_.set(s, false, i_); + return s; + } + + inline M operator/=(const M &y) { + M s = *this/y; + mat_.set(s, false, i_); + return s; + } + ///@} + }; + +#define INSTANTIATE_SUBMATRIX(Mt)\ +template class SubMatrix< Mt , int, int >;\ +template class SubMatrix< Mt , int, std::vector >;\ +template class SubMatrix< Mt , int, Slice >;\ +template class SubMatrix< Mt , std::vector , int >;\ +template class SubMatrix< Mt , std::vector , std::vector >;\ +template class SubMatrix< Mt , std::vector , Matrix >;\ +template class SubMatrix< Mt , std::vector , Slice >;\ +template class SubMatrix< Mt , int , Matrix >;\ +template class SubMatrix< Mt , Slice, int >;\ +template class SubMatrix< Mt , Slice, Slice >;\ +template class SubMatrix< Mt , Matrix , int >;\ +template class SubMatrix< Mt , Matrix , std::vector >;\ +template class SubMatrix< Mt , Matrix , Matrix >;\ +template class SubIndex< Mt , int >;\ +template class SubIndex< Mt , std::vector >;\ +template class SubIndex< Mt , Slice >;\ +template class SubIndex< Mt , Matrix >;\ +template class SubIndex< Mt , Sparsity>; + +} // namespace casadi + + +#endif // CASADI_SUBMATRIX_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/dae_builder.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/dae_builder.hpp new file mode 100755 index 0000000..652f069 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/dae_builder.hpp @@ -0,0 +1,471 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_DAE_BUILDER_HPP +#define CASADI_DAE_BUILDER_HPP + +#include "variable.hpp" + +namespace casadi { + + // Forward declarations + class XmlNode; + + /** \brief An initial-value problem in differential-algebraic equations +

Independent variables:

+ \verbatim + t: time + \endverbatim + +

Time-continuous variables:

+ \verbatim + x: states defined by ODE + s: implicitly defined states + z: algebraic variables + u: control signals + q: quadrature states + y: outputs + \endverbatim + +

Time-constant variables:

+ \verbatim + p: free parameters + d: dependent parameters + \endverbatim + +

Dynamic constraints (imposed everywhere):

+ \verbatim + ODE \dot{x} == ode(t, x, s, z, u, p, d) + DAE or implicit ODE: 0 == dae(t, x, s, z, u, p, d, sdot) + algebraic equations: 0 == alg(t, x, s, z, u, p, d) + quadrature equations: \dot{q} == quad(t, x, s, z, u, p, d) + deppendent parameters: d == ddef(t, x, s, z, u, p, d) + output equations: y == ydef(t, x, s, z, u, p, d) + \endverbatim + +

Point constraints (imposed pointwise):

+ \verbatim + Initial equations: 0 == init(t, x, s, z, u, p, d, sdot) + \endverbatim + + \date 2012-2015 + \author Joel Andersson + */ + class CASADI_EXPORT DaeBuilder : public PrintableObject { + public: + + /// Default constructor + DaeBuilder(); + + /** @name Variables and equations + * Public data members + */ + ///@{ + /** \brief Independent variable (usually time) */ + MX t; + + /** \brief Differential states defined by ordinary differential equations (ODE) + */ + std::vector x, ode, lam_ode; + + /** \brief Differential-algebraic equation (DAE) with corresponding state vector, + * state derivatives. + */ + std::vector s, sdot, dae, lam_dae; + + /** \brief Algebraic equations and corresponding algebraic variables + * \a alg and \a z have matching dimensions and + * 0 == alg(z, ...) implicitly defines \a z. + */ + std::vector z, alg, lam_alg; + + /** \brief Quadrature states + * Quadrature states are defined by ODEs whose state does not enter in the right-hand-side. + */ + std::vector q, quad, lam_quad; + + + /** \brief Local variables and corresponding definitions + */ + std::vector w, wdef, lam_wdef; + + /** \brief Output variables and corresponding definitions + */ + std::vector y, ydef, lam_ydef; + + /** \brief Free controls + * The trajectories of the free controls are decision variables of the optimal control problem. + * They are chosen by the optimization algorithm in order to minimize the cost functional. + */ + std::vector u; + + /** \brief Parameters + * A parameter is constant over time, but whose value is chosen by e.g. an + * optimization algorithm. + */ + std::vector p; + + /** \brief Named constants */ + std::vector c, cdef; + + /** \brief Dependent parameters and corresponding definitions + * Interdependencies are allowed but must be non-cyclic. + */ + std::vector d, ddef, lam_ddef; + ///@} + + /** \brief Initial conditions + * At t==0, 0 == init(sdot, s, ...) holds in addition to + * the ode and/or dae. + */ + std::vector init; + ///@} + + /** @name Symbolic modeling + * Formulate an optimal control problem + */ + ///@{ + /// Add a new parameter + MX add_p(const std::string& name=std::string(), int n=1); + + /// Add a new control + MX add_u(const std::string& name=std::string(), int n=1); + + /// Add a new differential state + MX add_x(const std::string& name=std::string(), int n=1); + + /// Add a implicit state + std::pair add_s(const std::string& name=std::string(), int n=1); + + /// Add a new algebraic variable + MX add_z(const std::string& name=std::string(), int n=1); + + /// Add a new quadrature state + MX add_q(const std::string& name=std::string(), int n=1); + + /// Add a new dependent parameter + MX add_d(const MX& new_ddef, const std::string& name=std::string()); + + /// Add a new output + MX add_y(const MX& new_ydef, const std::string& name=std::string()); + + /// Add an ordinary differential equation + void add_ode(const MX& new_ode, const std::string& name=std::string()); + + /// Add a differential-algebraic equation + void add_dae(const MX& new_dae, const std::string& name=std::string()); + + /// Add an algebraic equation + void add_alg(const MX& new_alg, const std::string& name=std::string()); + + /// Add a quadrature equation + void add_quad(const MX& new_quad, const std::string& name=std::string()); + + /// Check if dimensions match + void sanityCheck() const; + ///@} + + /** @name Manipulation + * Reformulate the dynamic optimization problem. + */ + ///@{ + + /// Identify and separate the algebraic variables and equations in the DAE + void split_dae(); + + /// Eliminate algebraic variables and equations transforming them into outputs + void eliminate_alg(); + + /// Transform the implicit DAE to a semi-explicit DAE + void makeSemiExplicit(); + + /// Transform the implicit DAE or semi-explicit DAE into an explicit ODE + void makeExplicit(); + + /// Sort dependent parameters + void sort_d(); + + /// Eliminate interdependencies amongst dependent parameters + void split_d(); + + /// Eliminate dependent parameters + void eliminate_d(); + + /// Eliminate quadrature states and turn them into ODE states + void eliminate_quad(); + + /// Sort the DAE and implicitly defined states + void sort_dae(); + + /// Sort the algebraic equations and algebraic states + void sort_alg(); + + /// Scale the variables + void scaleVariables(); + + /// Scale the implicit equations + void scaleEquations(); + ///@} + + /** @name Import and export + */ + ///@{ + /// Import existing problem from FMI/XML + void parseFMI(const std::string& filename); + +#ifndef SWIG + // Input convension in codegen + enum DaeBuilderIn { + DAE_BUILDER_T, + DAE_BUILDER_C, + DAE_BUILDER_P, + DAE_BUILDER_D, + DAE_BUILDER_U, + DAE_BUILDER_X, + DAE_BUILDER_S, + DAE_BUILDER_SDOT, + DAE_BUILDER_Z, + DAE_BUILDER_Q, + DAE_BUILDER_W, + DAE_BUILDER_Y, + DAE_BUILDER_NUM_IN + }; + + // Output convension in codegen + enum DaeBuilderOut { + DAE_BUILDER_DDEF, + DAE_BUILDER_WDEF, + DAE_BUILDER_ODE, + DAE_BUILDER_DAE, + DAE_BUILDER_ALG, + DAE_BUILDER_QUAD, + DAE_BUILDER_YDEF, + DAE_BUILDER_NUM_OUT + }; + + // Get string representation for input, given enum + static std::string inputString(DaeBuilderIn ind); + + // Get string representation for all inputs + static std::string inputString(); + + // Get enum representation for input, given string + static DaeBuilderIn inputEnum(const std::string& id); + + // Get enum representation for input, given vector of strings + static std::vector inputEnum(const std::vector& id); + + // Get string representation for output, given enum + static std::string outputString(DaeBuilderOut ind); + + // Get string representation for all outputs + static std::string outputString(); + + // Get enum representation for output, given string + static DaeBuilderOut outputEnum(const std::string& id); + + // Get enum representation for output, given vector of strings + static std::vector outputEnum(const std::vector& id); + + // Get input expression, given enum + std::vector input(DaeBuilderIn ind) const; + + // Get output expression, given enum + std::vector output(DaeBuilderOut ind) const; + + // Get input expression, given enum + std::vector input(std::vector& ind) const; + + // Get output expression, given enum + std::vector output(std::vector& ind) const; + + // Get multiplier corresponding to an output expression, given enum + std::vector multiplier(DaeBuilderOut ind) const; +#endif // SWIG + + /// Add a named linear combination of output expressions + MX addLinearCombination(const std::string& name, + const std::vector& f_out); + + /// Construct a function object + MXFunction create(const std::string& fname, + const std::vector& s_in, + const std::vector& s_out) const; + ///@} + + /// Get variable expression by name + MX operator()(const std::string& name) const; + + /// Get a derivative expression by name + MX der(const std::string& name) const; + + /// Get a derivative expression by non-differentiated expression + MX der(const MX& var) const; + + /// Get the nominal value by name + double nominal(const std::string& name) const; + + /// Get the nominal value(s) by expression + std::vector nominal(const MX& var) const; + + /// Set the nominal value by name + void setNominal(const std::string& name, double val); + + /// Set the nominal value(s) by expression + void setNominal(const MX& var, const std::vector& val); + + /// Get the lower bound by name + double min(const std::string& name, bool normalized=false) const; + + /// Get the lower bound(s) by expression + std::vector min(const MX& var, bool normalized=false) const; + + /// Set the lower bound by name + void setMin(const std::string& name, double val, bool normalized=false); + + /// Set the lower bound(s) by expression + void setMin(const MX& var, const std::vector& val, bool normalized=false); + + /// Get the upper bound by name + double max(const std::string& name, bool normalized=false) const; + + /// Get the upper bound(s) by expression + std::vector max(const MX& var, bool normalized=false) const; + + /// Set the upper bound by name + void setMax(const std::string& name, double val, bool normalized=false); + + /// Set the upper bound(s) by expression + void setMax(const MX& var, const std::vector& val, bool normalized=false); + + /// Get the initial guess by name + double initialGuess(const std::string& name, bool normalized=false) const; + + /// Get the initial guess(es) by expression + std::vector initialGuess(const MX& var, bool normalized=false) const; + + /// Set the initial guess by name + void setInitialGuess(const std::string& name, double val, bool normalized=false); + + /// Set the initial guess(es) by expression + void setInitialGuess(const MX& var, const std::vector& val, bool normalized=false); + + /// Get the (optionally normalized) value at time 0 by name + double start(const std::string& name, bool normalized=false) const; + + /// Get the (optionally normalized) value(s) at time 0 by expression + std::vector start(const MX& var, bool normalized=false) const; + + /// Set the (optionally normalized) value at time 0 by name + void setStart(const std::string& name, double val, bool normalized=false); + + /// Set the (optionally normalized) value(s) at time 0 by expression + void setStart(const MX& var, const std::vector& val, bool normalized=false); + + /// Get the (optionally normalized) derivative value at time 0 by name + double derivativeStart(const std::string& name, bool normalized=false) const; + + /// Get the (optionally normalized) derivative value(s) at time 0 by expression + std::vector derivativeStart(const MX& var, bool normalized=false) const; + + /// Set the (optionally normalized) derivative value at time 0 by name + void setDerivativeStart(const std::string& name, double val, bool normalized=false); + + /// Set the (optionally normalized) derivative value(s) at time 0 by expression + void setDerivativeStart(const MX& var, const std::vector& val, bool normalized=false); + + /// Get the unit for a component + std::string unit(const std::string& name) const; + + /// Get the unit given a vector of symbolic variables (all units must be identical) + std::string unit(const MX& var) const; + + /// Set the unit for a component + void setUnit(const std::string& name, const std::string& val); + + /// Print representation + void repr(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Print description + void print(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Add a variable + void addVariable(const std::string& name, const Variable& var); + + /// Add a new variable: returns corresponding symbolic expression + MX addVariable(const std::string& name, int n=1); + + /// Add a new variable: returns corresponding symbolic expression + MX addVariable(const std::string& name, const Sparsity& sp); + + ///@{ + /// Access a variable by name + Variable& variable(const std::string& name); + const Variable& variable(const std::string& name) const; + ///@} + +#ifndef SWIG + // Internal methods + protected: + + /// Get the qualified name + static std::string qualifiedName(const XmlNode& nn); + + /// Find of variable by name + typedef std::map VarMap; + VarMap varmap_; + + /// Linear combinations of output expressions + std::map lin_comb_; + + /// Read an equation + MX readExpr(const XmlNode& odenode); + + /// Read a variable + Variable& readVariable(const XmlNode& node); + + /// Get an attribute by expression + typedef double (DaeBuilder::*getAtt)(const std::string& name, bool normalized) const; + std::vector attribute(getAtt f, const MX& var, bool normalized) const; + + /// Get a symbolic attribute by expression + typedef MX (DaeBuilder::*getAttS)(const std::string& name) const; + MX attribute(getAttS f, const MX& var) const; + + /// Set an attribute by expression + typedef void (DaeBuilder::*setAtt)(const std::string& name, double val, bool normalized); + void setAttribute(setAtt f, const MX& var, const std::vector& val, bool normalized); + + /// Set a symbolic attribute by expression + typedef void (DaeBuilder::*setAttS)(const std::string& name, const MX& val); + void setAttribute(setAttS f, const MX& var, const MX& val); + +#endif // SWIG + + }; + +} // namespace casadi + +#endif // CASADI_DAE_BUILDER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/integration_tools.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/integration_tools.hpp new file mode 100755 index 0000000..bcfcbaf --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/integration_tools.hpp @@ -0,0 +1,114 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_INTEGRATION_TOOLS_HPP +#define CASADI_INTEGRATION_TOOLS_HPP + +#include "casadi/core/function/mx_function.hpp" + +namespace casadi { + + ///@{ + /** \brief Obtain collocation points of specific order and scheme + \param scheme 'radau' or 'legendre' + **/ + CASADI_EXPORT + std::vector collocationPoints(int order, const std::string& scheme="radau"); +#ifndef SWIG + CASADI_EXPORT + std::vector collocationPointsL(int order, const std::string& scheme="radau"); +#endif // SWIG + ///@} + + /** \brief Obtain collocation interpolating matrices + \param tau_root location of collocation points, as obtained from collocationPoints + \param[out] C interpolating coefficients to obtain derivatives + Length: order+1, order + 1 + + \verbatim + dX/dt @collPoint(j) ~ Sum_i C[j][i]*X@collPoint(i) + \endverbatim + + \param[out] D interpolating coefficients to obtain end state + Length: order+1 + */ +#ifndef SWIG + CASADI_EXPORT + void collocationInterpolators(const std::vector & tau_root, + std::vector< std::vector > &C, + std::vector< double > &D); +#else // SWIG + CASADI_EXPORT + void collocationInterpolators(const std::vector & tau_root, + std::vector< std::vector > &OUTPUT, + std::vector< double > &OUTPUT); +#endif // SWIG + + // Type of collocation points + enum CollocationPoints {LEGENDRE, RADAU}; + + /** \brief Construct an explicit Runge-Kutta integrator + * The constructed function (which is of type MXFunction), has three inputs, + * corresponding to initial state (x0), parameter (p) and integration time (h) + * and one output, corresponding to final state (xf). + * + * \param f ODE function with two inputs (x and p) and one output (xdot) + * \param N Number of integrator steps + * \param order Order of interpolating polynomials + */ + CASADI_EXPORT MXFunction simpleRK(Function f, int N=10, int order=4); + + /** \brief Construct an implicit Runge-Kutta integrator using a collocation scheme + * The constructed function (which is of type MXFunction), has three inputs, + * corresponding to initial state (x0), parameter (p) and integration time (h) + * and one output, corresponding to final state (xf). + * + * \param f ODE function with two inputs (x and p) and one output (xdot) + * \param N Number of integrator steps + * \param order Order of interpolating polynomials + * \param scheme Collocation scheme, as excepted by collocationPoints function. + */ + CASADI_EXPORT + MXFunction simpleIRK(Function f, int N=10, int order=4, const std::string& scheme="radau", + const std::string& solver="newton", + const Dict& solver_options = Dict()); + + /** \brief Simplified wrapper for the Integrator class + * Constructs an integrator using the same syntax as simpleRK and simpleIRK. + * The constructed function (which is of type MXFunction), has three inputs, + * corresponding to initial state (x0), parameter (p) and integration time (h) + * and one output, corresponding to final state (xf). + * + * \param f ODE function with two inputs (x and p) and one output (xdot) + * \param N Number of integrator steps + * \param order Order of interpolating polynomials + * \param scheme Collocation scheme, as excepted by collocationPoints function. + */ + CASADI_EXPORT + MXFunction simpleIntegrator(Function f, const std::string& integrator="cvodes", + const Dict& integrator_options = Dict()); +} // namespace casadi + +#endif // CASADI_INTEGRATION_TOOLS_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/nlp_builder.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/nlp_builder.hpp new file mode 100755 index 0000000..fcfe8cd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/nlp_builder.hpp @@ -0,0 +1,88 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_NLP_BUILDER_HPP +#define CASADI_NLP_BUILDER_HPP + +#include "../sx/sx_element.hpp" + +namespace casadi { + +/** \brief A symbolic NLP representation + \date 2012-2015 + \author Joel Andersson +*/ +class CASADI_EXPORT NlpBuilder : public PrintableObject { + public: + + /** @name Symbolic representation of the NLP + * Data members + */ + ///@{ + + /// Variables + SX x; + + /// Objective functions + SX f; + + /// Constraint functions + SX g; + + /// Bounds on x + DMatrix x_lb, x_ub; + + /// Bounds on g + DMatrix g_lb, g_ub; + + /// Primal initial guess + DMatrix x_init; + + /// Dual initial guess + DMatrix lambda_init; + + ///@} + + /// Parse an AMPL och PyOmo NL-file + void parseNL(const std::string& filename, const Dict& options = Dict()); + + /// Print a description of the object + void print(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Print a representation of the object + void repr(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + +#ifndef SWIG + protected: + + /// Read an expression from an NL-file (Polish infix format) + static SXElement readExpressionNL(std::istream &stream, const std::vector& v); + +#endif // SWIG +}; + +} // namespace casadi + +#endif // CASADI_NLP_BUILDER_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/variable.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/variable.hpp new file mode 100755 index 0000000..33a3483 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/variable.hpp @@ -0,0 +1,141 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_VARIABLE_HPP +#define CASADI_VARIABLE_HPP + +#include +#include "../function/sx_function.hpp" +#include "../mx/mx.hpp" + +namespace casadi { + + /// Time variability of a variable (see Fritzon page 89) + enum Variability {CONSTANT, PARAMETER, DISCRETE, CONTINUOUS}; + + /// Causality of a variable + enum Causality {INPUT, OUTPUT, INTERNAL}; + + /// Dynamics of the variable + enum Dynamics {ALGEBRAIC, DIFFERENTIAL}; + + /// Dynamics of the variable + enum Alias {NO_ALIAS, ALIAS, NEGATED_ALIAS}; + + /// Variable category + enum Category { + /** Unknown, not set */ + CAT_UNKNOWN, + /** A state derivative */ + CAT_DERIVATIVE, + /** A differential state, i.e. a variable that appears differentiated in the model */ + CAT_STATE, + /** An independent constant: constant Real c1 = 3 */ + CAT_DEPENDENT_CONSTANT, + /** A dependent constant constant Real c2=c1*3. */ + CAT_INDEPENDENT_CONSTANT, + /** A dependent parameter parameter Real p1=p2*/ + CAT_DEPENDENT_PARAMETER, + /** An independent parameter parameter Real p2=3*/ + CAT_INDEPENDENT_PARAMETER, + /** An algebraic variable or input */ + CAT_ALGEBRAIC + }; + + /** \brief Holds expressions and meta-data corresponding to a physical quantity evolving in time + \date 2012-2014 + \author Joel Andersson + */ + struct CASADI_EXPORT Variable : public PrintableObject { + /// Default constructor + Variable() {} + + /// Constructor + explicit Variable(const std::string& name, const Sparsity& sp = Sparsity::scalar()); + + /// Variable name + std::string name() const; + + /// Variable expression + MX v; + + /// Derivative expression + MX d; + + /// Nominal value + double nominal; + + /// Value at time 0 + double start; + + /// Lower bound + double min; + + /// Upper bound + double max; + + /// Initial guess + double initialGuess; + + /// Derivative at time 0 + double derivativeStart; + + /// Variability (see Fritzon) + Variability variability; + + /// Causality (see Fritzon) + Causality causality; + + /// Variable category + Category category; + + /// Is the variable is an alias variable? + Alias alias; + + /// Description + std::string description; + + /// Variable reference (XML) + int valueReference; + + /// Unit + std::string unit; + + /// Display unit + std::string displayUnit; + + /// Free attribute + bool free; + + /// Print a description of the object + void print(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Print a representation of the object + void repr(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + }; +} // namespace casadi + +#endif // CASADI_VARIABLE_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/xml_file.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/xml_file.hpp new file mode 100755 index 0000000..89f1a50 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/xml_file.hpp @@ -0,0 +1,75 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_XML_FILE_HPP +#define CASADI_XML_FILE_HPP + +#include "xml_file.hpp" +#include "../options_functionality.hpp" +#include "xml_node.hpp" + +namespace casadi { + + /** Forward declaration of internal class */ + class XmlFileInternal; + + /** \brief XML parser + Can be used for parsing XML files into CasADi data structures. + + \author Joel Andersson + \date 2014 + */ + class CASADI_EXPORT XmlFile : public OptionsFunctionality { + public: + // Default constructor + XmlFile(); + + // Constructor + XmlFile(const std::string& name); + + // Destructor + ~XmlFile(); + + /// Load a plugin dynamically + static void loadPlugin(const std::string& name); + + /// Get solver specific documentation + static std::string doc(const std::string& name); + +#ifndef SWIG + /** \brief Access functions of the node */ + XmlFileInternal* operator->(); + + /** \brief Const access functions of the node */ + const XmlFileInternal* operator->() const; + + // Parse an XML file + XmlNode parse(const std::string& filename); +#endif // SWIG + }; + +} // namespace casadi + +#endif // CASADI_XML_FILE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/xml_file_internal.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/xml_file_internal.hpp new file mode 100755 index 0000000..b25a9ba --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/xml_file_internal.hpp @@ -0,0 +1,68 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_XML_FILE_INTERNAL_HPP +#define CASADI_XML_FILE_INTERNAL_HPP + +#include "xml_file.hpp" +#include "../function/plugin_interface.hpp" + +/// \cond INTERNAL +namespace casadi { + + class CASADI_EXPORT + XmlFileInternal : public OptionsFunctionalityNode, + public PluginInterface { + public: + // Constructor + XmlFileInternal(); + + // Destructor + virtual ~XmlFileInternal(); + + /** \brief Print */ + virtual void print(std::ostream &stream) const; + + // Parse an XML file + virtual XmlNode parse(const std::string& filename); + + // Creator function for internal class + typedef XmlFileInternal* (*Creator)(); + + // No static functions exposed + struct Exposed{ }; + + /// Collection of solvers + static std::map solvers_; + + /// Infix + static const std::string infix_; + }; + +} // namespace casadi + +/// \endcond + +#endif // CASADI_XML_FILE_INTERNAL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/xml_node.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/xml_node.hpp new file mode 100755 index 0000000..79f32b8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/misc/xml_node.hpp @@ -0,0 +1,136 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_XML_NODE_HPP +#define CASADI_XML_NODE_HPP + +#include +#include +#include +#include "../casadi_exception.hpp" + +/// \cond INTERNAL + +namespace casadi { + + class CASADI_EXPORT XmlNode { + public: + XmlNode(); + ~XmlNode(); + + /** \brief Add an attribute */ + void setAttribute(const std::string& attribute_name, const std::string& attribute); + + /** \brief Get an attribute by its name */ + std::string getAttribute(const std::string& attribute_name) const { + std::string ret; + readAttribute(attribute_name, ret, true); + return ret; + } + + /** \brief Read the value of an attribute */ + template + void readAttribute(const std::string& attribute_name, T& val, + bool assert_existance=true) const { + // find the attribute + std::map::const_iterator it = attributes_.find(attribute_name); + + // check if the attribute exists + if (it == attributes_.end()) { + casadi_assert_message(!assert_existance, + "Error in XmlNode::readAttribute: could not find " + attribute_name); + } else { + readString(it->second, val); + } + } + + /** \brief Get a reference to a child by its index */ + const XmlNode& operator[](int i) const; + + /** \brief Get a reference to a child by its index */ + XmlNode& operator[](int i); + + /** \brief Get a reference to a child by its name */ + const XmlNode& operator[](const std::string& childname) const; + + /** \brief Get a reference to a child by its name */ + XmlNode& operator[](const std::string& childname); + + /** \brief Check if a child is present */ + bool hasChild(const std::string& childname) const; + + /** \brief Check if an attribute is present */ + bool hasAttribute(const std::string& attribute_name) const; + + /** \brief Get the number of children */ + int size() const; + + /** \brief Get the name of the node */ + const std::string& getName() const; + + /** \brief Set the name of the node */ + void setName(const std::string& name); + + /** \brief check if the name is equal to something */ + bool checkName(const std::string& str) const; + + /** \brief Get the text field */ + std::string getText() const { return text_; } + + /** \brief Get value of text field */ + template + void getText(T& val) const { readString(text_, val);} + + /** \brief Read the string value of a string (i.e. copy) */ + static void readString(const std::string& str, std::string& val); + + /** \brief Read the boolean value of a string */ + static void readString(const std::string& str, bool& val); + + /** \brief Read the integer value of a string */ + static void readString(const std::string& str, int& val); + + /** \brief Read the double value of a string */ + static void readString(const std::string& str, double& val); + + CASADI_EXPORT friend std::ostream& operator<<(std::ostream &stream, + const XmlNode& node); + + void dump(std::ostream &stream, int indent=0) const; + + std::map attributes_; + std::vector children_; + std::map child_indices_; // the index of the children + // sorted by their name + + std::string name_; + std::string comment_; + std::string text_; + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_XML_NODE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/assertion.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/assertion.hpp new file mode 100755 index 0000000..1e55a02 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/assertion.hpp @@ -0,0 +1,96 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_ASSERTION_HPP +#define CASADI_ASSERTION_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL +namespace casadi { + /** \brief Assertion + \author Joris Gillis + \date 2013 + */ + class CASADI_EXPORT Assertion : public MXNode { + public: + + /// Constructor + Assertion(const MX& x, const MX& y, const std::string & s); + + /// Clone function + virtual Assertion* clone() const { return new Assertion(*this);} + + /// Destructor + virtual ~Assertion() {} + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_ASSERTION;} + + /// Can the operation be performed inplace (i.e. overwrite the result) + virtual int numInplace() const { return 1;} + + private: + std::string fail_message_; + }; + + +} // namespace casadi + +/// \endcond + +#endif // CASADI_ASSERTION_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/binary_mx.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/binary_mx.hpp new file mode 100755 index 0000000..fa2cbc0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/binary_mx.hpp @@ -0,0 +1,123 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_BINARY_MX_HPP +#define CASADI_BINARY_MX_HPP + +#include "mx_node.hpp" + +/// \cond INTERNAL + +namespace casadi { + /** \brief Represents any binary operation that involves two matrices + \author Joel Andersson + \date 2010 + */ + template + class CASADI_EXPORT BinaryMX : public MXNode { + public: + /** \brief Constructor */ + BinaryMX(Operation op, const MX& x, const MX& y); + + /** \brief Destructor */ + virtual ~BinaryMX(); + + /** \brief Clone function */ + virtual BinaryMX* clone() const { return new BinaryMX(*this);} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return op_;} + + /** \brief Check if binary operation */ + virtual bool isBinaryOp() const { return true;} + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /// Evaluate the function (template) + template + void evalGen(const T* const* arg, T* const* res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /// Can the operation be performed inplace (i.e. overwrite the result) + virtual int numInplace() const { return 2;} + + /** \brief Generate code for the operation */ + void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /// Get a unary operation + virtual MX getUnary(int op) const; + + /// Get a binary operation operation + virtual MX getBinary(int op, const MX& y, bool scX, bool scY) const; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const { + if (op_==node->getOp()) { + if (isEqual(dep(0), node->dep(0), depth-1) && isEqual(dep(1), node->dep(1), depth-1)) { + // If arguments are equal + return true; + } else { + // If arguments are flipped + return operation_checker(op_) && isEqual(dep(1), node->dep(0), depth-1) && + isEqual(dep(0), node->dep(1), depth-1); + } + } else { + return false; + } + } + + //! \brief Operation + Operation op_; + + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_BINARY_MX_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/binary_mx_impl.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/binary_mx_impl.hpp new file mode 100755 index 0000000..5b9892a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/binary_mx_impl.hpp @@ -0,0 +1,276 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_BINARY_MX_IMPL_HPP +#define CASADI_BINARY_MX_IMPL_HPP + +#include "binary_mx.hpp" +#include +#include +#include "../std_vector_tools.hpp" +#include "../casadi_options.hpp" + +using namespace std; + +namespace casadi { + + template + BinaryMX::BinaryMX(Operation op, const MX& x, const MX& y) : op_(op) { + setDependencies(x, y); + if (ScX) { + setSparsity(y.sparsity()); + } else { + setSparsity(x.sparsity()); + } + } + + template + BinaryMX::~BinaryMX() { + } + + template + std::string BinaryMX::print(const std::vector& arg) const { + stringstream ss; + casadi_math::printPre(op_, ss); + ss << arg.at(0); + casadi_math::printSep(op_, ss); + ss << arg.at(1); + casadi_math::printPost(op_, ss); + return ss.str(); + } + + template + void BinaryMX::evalMX(const std::vector& arg, std::vector& res) { + casadi_math::fun(op_, arg[0], arg[1], res[0]); + } + + template + void BinaryMX::evalFwd(const std::vector >& fseed, + std::vector >& fsens) { + // Get partial derivatives + MX pd[2]; + casadi_math::der(op_, dep(0), dep(1), shared_from_this(), pd); + + // Propagate forward seeds + for (int d=0; d + void BinaryMX::evalAdj(const std::vector >& aseed, + std::vector >& asens) { + // Get partial derivatives + MX pd[2]; + casadi_math::der(op_, dep(0), dep(1), shared_from_this(), pd); + + // Propagate adjoint seeds + for (int d=0; d + void BinaryMX::generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const { + // Quick return if nothing to do + if (nnz()==0) return; + + // Check if inplace + bool inplace; + switch (op_) { + case OP_ADD: + case OP_SUB: + case OP_MUL: + case OP_DIV: + inplace = res[0]==arg[0]; + break; + default: + inplace = false; + break; + } + + // Print indent + g.body << " "; + + // Scalar names of arguments (start assuming all scalars) + string r = g.workel(res[0]); + string x = g.workel(arg[0]); + string y = g.workel(arg[1]); + + // Codegen loop, if needed + if (nnz()>1) { + // Iterate over result + g.body << "for (i=0, " << "rr=" << g.work(res[0], nnz()); + r = "(*rr++)"; + + // Iterate over first argument? + if (!ScX && !inplace) { + g.body << ", cr=" << g.work(arg[0], dep(0).nnz()); + x = "(*cr++)"; + } + + // Iterate over second argument? + if (!ScY) { + g.body << ", cs=" << g.work(arg[1], dep(1).nnz()); + y = "(*cs++)"; + } + + // Close loop + g.body << "; i<" << nnz() << "; ++i) "; + } + + // Perform operation + g.body << r << " "; + if (inplace) { + casadi_math::printSep(op_, g.body); + g.body << "= " << y; + } else { + g.body << " = "; + casadi_math::printPre(op_, g.body); + g.body << x; + casadi_math::printSep(op_, g.body); + g.body << y; + casadi_math::printPost(op_, g.body); + } + g.body << ";" << endl; + } + + template + void BinaryMX::evalD(const double** arg, double** res, + int* iw, double* w) { + evalGen(arg, res, iw, w); + } + + template + void BinaryMX::evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w) { + evalGen(arg, res, iw, w); + } + + template + template + void BinaryMX::evalGen(const T* const* arg, T* const* res, + int* iw, T* w) { + // Get data + T* output0 = res[0]; + const T* input0 = arg[0]; + const T* input1 = arg[1]; + + if (!ScX && !ScY) { + casadi_math::fun(op_, input0, input1, output0, nnz()); + } else if (ScX) { + casadi_math::fun(op_, *input0, input1, output0, nnz()); + } else { + casadi_math::fun(op_, input0, *input1, output0, nnz()); + } + } + + template + void BinaryMX::spFwd(const bvec_t** arg, + bvec_t** res, + int* iw, bvec_t* w) { + const bvec_t *a0=arg[0], *a1=arg[1]; + bvec_t *r=res[0]; + int n=nnz(); + for (int i=0; i + void BinaryMX::spAdj(bvec_t** arg, + bvec_t** res, + int* iw, bvec_t* w) { + bvec_t *a0=arg[0], *a1=arg[1], *r = res[0]; + int n=nnz(); + for (int i=0; i + MX BinaryMX::getUnary(int op) const { + switch (op_) { + default: break; // no rule + } + + // Fallback to default implementation + return MXNode::getUnary(op); + } + + template + MX BinaryMX::getBinary(int op, const MX& y, bool scX, bool scY) const { + if (!CasadiOptions::simplification_on_the_fly) return MXNode::getBinary(op, y, scX, scY); + + switch (op_) { + case OP_ADD: + if (op==OP_SUB && isEqual(y, dep(0), maxDepth())) return dep(1); + if (op==OP_SUB && isEqual(y, dep(1), maxDepth())) return dep(0); + break; + case OP_SUB: + if (op==OP_SUB && isEqual(y, dep(0), maxDepth())) return -dep(1); + if (op==OP_ADD && isEqual(y, dep(1), maxDepth())) return dep(0); + break; + default: break; // no rule + } + + // Fallback to default implementation + return MXNode::getBinary(op, y, scX, scY); + } + + +} // namespace casadi + +#endif // CASADI_BINARY_MX_IMPL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/casadi_call.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/casadi_call.hpp new file mode 100755 index 0000000..5485b2d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/casadi_call.hpp @@ -0,0 +1,154 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CALL_HPP +#define CASADI_CALL_HPP + +#include "multiple_output.hpp" +#include "../function/function.hpp" + +/// \cond INTERNAL + +namespace casadi { + + /** Base class for nodes involving function calls + \author Joel Andersson + \date 2015 + */ + class CASADI_EXPORT GenericCall : public MultipleOutput { + public: + + /** \brief Constructor */ + GenericCall() {} + + /** \brief Destructor */ + virtual ~GenericCall() {} + + /** \brief Number of functions */ + virtual int numFunctions() const = 0; + + /** \brief Get function reference */ + virtual const Function& getFunction(int i) const = 0; + + /** \brief Project a function input to a particular sparsity */ + static MX projectArg(const MX& x, const Sparsity& sp, int i); + }; + + /** Embeds a function call in an expression graph + \author Joel Andersson + \date 2010-2015 + */ + class CASADI_EXPORT Call : public GenericCall { + public: + /** \brief Create function call node */ + static std::vector create(const Function& fcn, const std::vector& arg); + + /** \brief Destructor */ + virtual ~Call() {} + + /** \brief Clone function */ + virtual Call* clone() const; + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Add a dependent function */ + virtual void addDependency(CodeGenerator& g) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Number of functions */ + virtual int numFunctions() const {return 1;} + + /** \brief Get function reference */ + virtual const Function& getFunction(int i) const { return fcn_;} + + /** \brief Get function input */ + virtual int getFunctionInput() const { return -1;} + + /** \brief Get function output */ + virtual int getFunctionOutput() const { return -1;} + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief Number of outputs */ + virtual int nout() const; + + /** \brief Get the sparsity of output oind */ + virtual const Sparsity& sparsity(int oind) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_CALL;} + + /** \brief Get required length of arg field */ + virtual size_t sz_arg() const; + + /** \brief Get required length of res field */ + virtual size_t sz_res() const; + + /** \brief Get required length of iw field */ + virtual size_t sz_iw() const; + + /** \brief Get required length of w field */ + virtual size_t sz_w() const; + + protected: + /** \brief Constructor (should not be used directly) */ + explicit Call(const Function& fcn, const std::vector& arg); + + // Function to be evaluated + Function fcn_; + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_CALL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/casadi_find.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/casadi_find.hpp new file mode 100755 index 0000000..b039d0a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/casadi_find.hpp @@ -0,0 +1,83 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_FIND_HPP +#define CASADI_FIND_HPP + +#include "mx_node.hpp" +/// \cond INTERNAL + +namespace casadi { + /** \brief Finds the first nonzero element in a vector + \author Joel Andersson + \date 2015 + */ + class CASADI_EXPORT Find : public MXNode { + public: + /** \brief Constructor */ + Find(const MX& x); + + /** \brief Destructor */ + virtual ~Find() {} + + /** \brief Clone function */ + virtual Find* clone() const { return new Find(*this);} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Get the operation */ + virtual int getOp() const { return OP_FIND;} + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + }; + +} // namespace casadi + +/// \endcond + +#endif // CASADI_FIND_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/concat.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/concat.hpp new file mode 100755 index 0000000..68ecba7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/concat.hpp @@ -0,0 +1,230 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CONCAT_HPP +#define CASADI_CONCAT_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + /** \brief Concatenation: Join multiple expressions stacking the nonzeros + \author Joel Andersson + \date 2014 + */ + class CASADI_EXPORT Concat : public MXNode { + public: + + /// Constructor + Concat(const std::vector& x); + + /// Destructor + virtual ~Concat() = 0; + + /// Evaluate the function (template) + template + void evalGen(const T* const* arg, T* const* res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, + int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /// Get the nonzeros of matrix + virtual MX getGetNonzeros(const Sparsity& sp, const std::vector& nz) const; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const { + return sameOpAndDeps(node, depth); + } + + /** \brief Check if valid function input */ + virtual bool isValidInput() const; + + /** \brief Get the number of symbolic primitives */ + virtual int numPrimitives() const; + + /** \brief Get symbolic primitives */ + virtual void getPrimitives(std::vector::iterator& it) const; + + /** \brief Detect duplicate symbolic expressions */ + virtual bool hasDuplicates(); + + /** \brief Reset the marker for an input expression */ + virtual void resetInput(); + }; + + + /** \brief Horizontal concatenation + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT Horzcat : public Concat { + public: + + /// Constructor + Horzcat(const std::vector& x); + + /// Clone function + virtual Horzcat* clone() const { return new Horzcat(*this);} + + /// Destructor + virtual ~Horzcat() {} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Get the operation */ + virtual int getOp() const { return OP_HORZCAT;} + + /** \brief Split up an expression along symbolic primitives */ + virtual void splitPrimitives(const MX& x, std::vector::iterator& it) const; + + /** \brief Join an expression along symbolic primitives */ + virtual MX joinPrimitives(std::vector::const_iterator& it) const; + + /** \brief Get offsets for split */ + std::vector offset() const; + }; + + /** \brief Vertical concatenation of vectors + \author Joel Andersson + \date 2014 + */ + class CASADI_EXPORT Vertcat : public Concat { + public: + + /// Constructor + Vertcat(const std::vector& x); + + /// Clone function + virtual Vertcat* clone() const { return new Vertcat(*this);} + + /// Destructor + virtual ~Vertcat() {} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Get the operation */ + virtual int getOp() const { return OP_VERTCAT;} + + /** \brief Split up an expression along symbolic primitives */ + virtual void splitPrimitives(const MX& x, std::vector::iterator& it) const; + + /** \brief Join an expression along symbolic primitives */ + virtual MX joinPrimitives(std::vector::const_iterator& it) const; + + /** \brief Get offsets for split */ + std::vector offset() const; + }; + + /** \brief Diagonal concatenation of matrices + \author Joris Gillis + \date 2014 + */ + class CASADI_EXPORT Diagcat : public Concat { + public: + + /// Constructor + Diagcat(const std::vector& x); + + /// Clone function + virtual Diagcat* clone() const { return new Diagcat(*this);} + + /// Destructor + virtual ~Diagcat() {} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Get the operation */ + virtual int getOp() const { return OP_DIAGCAT;} + + /** \brief Split up an expression along symbolic primitives */ + virtual void splitPrimitives(const MX& x, std::vector::iterator& it) const; + + /** \brief Join an expression along symbolic primitives */ + virtual MX joinPrimitives(std::vector::const_iterator& it) const; + + /** \brief Get offsets for split */ + std::pair, std::vector > offset() const; + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_CONCAT_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/constant_mx.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/constant_mx.hpp new file mode 100755 index 0000000..e6249f1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/constant_mx.hpp @@ -0,0 +1,574 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CONSTANT_MX_HPP +#define CASADI_CONSTANT_MX_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + +/** \brief Represents an MX that is only composed of a constant. + \author Joel Andersson + \date 2010-2013 + + A regular user is not supposed to work with this Node class. + This user can call MX(double) directly, or even rely on implicit typecasting. + \sa zeros , ones +*/ + class CASADI_EXPORT ConstantMX : public MXNode { + public: + /// Destructor + explicit ConstantMX(const Sparsity& sp); + + /// Destructor + virtual ~ConstantMX() = 0; + + // Creator (all values are the same integer) + static ConstantMX* create(const Sparsity& sp, int val); + + // Creator (all values are the same floating point value) + static ConstantMX* create(const Sparsity& sp, double val); + + // Creator (values may be different) + static ConstantMX* create(const Matrix& val); + + /** \brief Clone function */ + virtual ConstantMX* clone() const = 0; + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w) = 0; + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w) = 0; + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Get the operation */ + virtual int getOp() const { return OP_CONST;} + + /// Get the value (only for scalar constant nodes) + virtual double getValue() const = 0; + + /// Get the value (only for constant nodes) + virtual Matrix getMatrixValue() const = 0; + + /// Matrix multiplication + // virtual MX getMultiplication(const MX& y) const; + + /// Inner product + virtual MX getInnerProd(const MX& y) const; + + /// Return truth value of an MX + virtual bool __nonzero__() const; + }; + + /// A constant given as a DMatrix + class CASADI_EXPORT ConstantDMatrix : public ConstantMX { + public: + + /** \brief Constructor */ + explicit ConstantDMatrix(const Matrix& x) : ConstantMX(x.sparsity()), x_(x) {} + + /// Destructor + virtual ~ConstantDMatrix() {} + + /** \brief Clone function */ + virtual ConstantDMatrix* clone() const { return new ConstantDMatrix(*this);} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const { + return x_.getDescription(); + } + + /** \brief Evaluate the function numerically */ + virtual void evalD(const double** arg, double** res, int* iw, double* w) { + std::copy(x_.begin(), x_.end(), res[0]); + } + + /** \brief Evaluate the function symbolically (SX) */ + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w) { + std::copy(x_.begin(), x_.end(), res[0]); + } + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Check if a particular integer value */ + virtual bool isZero() const; + virtual bool isOne() const; + virtual bool isMinusOne() const; + virtual bool isIdentity() const; + + /// Get the value (only for scalar constant nodes) + virtual double getValue() const {return x_.toScalar();} + + /// Get the value (only for constant nodes) + virtual Matrix getMatrixValue() const { return x_;} + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const; + + /** \brief data member */ + Matrix x_; + }; + + /// A zero-by-zero matrix + class CASADI_EXPORT ZeroByZero : public ConstantMX { + private: + /** \brief Private constructor (singleton design pattern) */ + explicit ZeroByZero() : ConstantMX(Sparsity(0, 0)) { + initSingleton(); + } + + public: + /** \brief Get a pointer to the singleton */ + static ZeroByZero* getInstance() { + static ZeroByZero instance; + return &instance; + } + + /// Destructor + virtual ~ZeroByZero() { + destroySingleton(); + } + + /** \brief Clone function */ + virtual ZeroByZero* clone() const { return getInstance();} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Evaluate the function numerically */ + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w) {} + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w) {} + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const {} + + /// Get the value (only for scalar constant nodes) + virtual double getValue() const { return 0;} + + /// Get the value (only for constant nodes) + virtual DMatrix getMatrixValue() const { return DMatrix(); } + + /// Get densification + virtual MX getProject(const Sparsity& sp) const; + + /// Get the nonzeros of matrix + virtual MX getGetNonzeros(const Sparsity& sp, const std::vector& nz) const; + + /// Assign the nonzeros of a matrix to another matrix + virtual MX getSetNonzeros(const MX& y, const std::vector& nz) const; + + /// Transpose + virtual MX getTranspose() const; + + /// Get a unary operation + virtual MX getUnary(int op) const; + + /// Get a binary operation operation + virtual MX getBinary(int op, const MX& y, bool ScX, bool ScY) const; + + /// Reshape + virtual MX getReshape(const Sparsity& sp) const; + + /** \brief Check if valid function input */ + virtual bool isValidInput() const { return true;} + + /** \brief Get the number of symbolic primitives */ + virtual int numPrimitives() const { return 0;} + + /** \brief Get symbolic primitives */ + virtual void getPrimitives(std::vector::iterator& it) const {} + + /** \brief Split up an expression along symbolic primitives */ + virtual void splitPrimitives(const MX& x, std::vector::iterator& it) const {} + + /** \brief Join an expression along symbolic primitives */ + virtual MX joinPrimitives(std::vector::const_iterator& it) const { return MX();} + + /** \brief Detect duplicate symbolic expressions */ + virtual bool hasDuplicates() { return false;} + + /** \brief Reset the marker for an input expression */ + virtual void resetInput() {} + + /** \brief Get the name */ + virtual const std::string& getName() const { + static std::string dummyname; + return dummyname; + } + }; + + /** \brief Constant known at runtime */ + template + struct RuntimeConst { + const T value; + RuntimeConst() {} + RuntimeConst(T v) : value(v) {} + }; + + /** \brief Constant known at compiletime */ + template + struct CompiletimeConst { + static const int value = v; + }; + + /// A constant with all entries identical + template + class CASADI_EXPORT Constant : public ConstantMX { + public: + + /** \brief Constructor */ + explicit Constant(const Sparsity& sp, Value v = Value()) : ConstantMX(sp), v_(v) {} + + /// Destructor + virtual ~Constant() {} + + /** \brief Clone function */ + virtual Constant* clone() const { return new Constant(*this);} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Evaluate the function numerically */ + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Check if a particular integer value */ + virtual bool isZero() const { return v_.value==0;} + virtual bool isOne() const { return v_.value==1;} + virtual bool isIdentity() const { return v_.value==1 && sparsity().isdiag();} + virtual bool isValue(double val) const { return v_.value==val;} + + /// Get the value (only for scalar constant nodes) + virtual double getValue() const { + return v_.value; + } + + /// Get the value (only for constant nodes) + virtual Matrix getMatrixValue() const { + return Matrix(sparsity(), v_.value, false); + } + + /// Get densification + virtual MX getProject(const Sparsity& sp) const; + + /// Get the nonzeros of matrix + virtual MX getGetNonzeros(const Sparsity& sp, const std::vector& nz) const; + + /// Assign the nonzeros of a matrix to another matrix + virtual MX getSetNonzeros(const MX& y, const std::vector& nz) const; + + /// Transpose + virtual MX getTranspose() const; + + /// Get a unary operation + virtual MX getUnary(int op) const; + + /// Get a binary operation operation + virtual MX getBinary(int op, const MX& y, bool ScX, bool ScY) const; + + /// Reshape + virtual MX getReshape(const Sparsity& sp) const; + + /// Create a horizontal concatenation node + virtual MX getHorzcat(const std::vector& x) const; + + /// Create a vertical concatenation node (vectors only) + virtual MX getVertcat(const std::vector& x) const; + + /** \brief The actual numerical value */ + Value v_; + }; + + template + MX Constant::getHorzcat(const std::vector& x) const { + // Check if all arguments have the same constant value + for (std::vector::const_iterator i=x.begin()+1; i!=x.end(); ++i) { + if (!(*i)->isValue(v_.value)) { + // Not all the same value, fall back to base class + return ConstantMX::getHorzcat(x); + } + } + + // Assemble the sparsity pattern + Sparsity sp = sparsity(); + for (std::vector::const_iterator i=x.begin()+1; i!=x.end(); ++i) { + sp.appendColumns(i->sparsity()); + } + return MX(sp, v_.value, false); + } + + template + MX Constant::getVertcat(const std::vector& x) const { + // Check if all arguments have the same constant value + for (std::vector::const_iterator i=x.begin()+1; i!=x.end(); ++i) { + if (!(*i)->isValue(v_.value)) { + // Not all the same value, fall back to base class + return ConstantMX::getVertcat(x); + } + } + + // Assemble the sparsity pattern + Sparsity sp = sparsity(); + for (std::vector::const_iterator i=x.begin()+1; i!=x.end(); ++i) { + sp.append(i->sparsity()); + } + return MX(sp, v_.value, false); + } + + template + MX Constant::getReshape(const Sparsity& sp) const { + return MX::create(new Constant(sp, v_)); + } + + template + MX Constant::getTranspose() const { + return MX::create(new Constant(sparsity().T(), v_)); + } + + template + MX Constant::getUnary(int op) const { + // Constant folding + double ret(0); + casadi_math::fun(op, v_.value, 0.0, ret); + if (operation_checker(op) || sparsity().isdense()) { + return MX(sparsity(), ret); + } else { + if (v_.value==0) { + if (isZero() && operation_checker(op)) { + return MX(sparsity(), ret, false); + } else { + return repmat(MX(ret), size1(), size2()); + } + } + double ret2; + casadi_math::fun(op, 0, 0.0, ret2); + return DMatrix(sparsity(), ret, false) + + DMatrix(sparsity().patternInverse(), ret2, false); + } + } + + template + MX Constant::getBinary(int op, const MX& y, bool ScX, bool ScY) const { + casadi_assert(sparsity()==y.sparsity() || ScX || ScY); + + if (ScX && !operation_checker(op)) { + double ret; + casadi_math::fun(op, nnz()> 0 ? v_.value: 0, 0, ret); + + if (ret!=0) { + Sparsity f = Sparsity::dense(y.size1(), y.size2()); + MX yy = project(y, f); + return MX(f, shared_from_this())->getBinary(op, yy, false, false); + } + } else if (ScY && !operation_checker(op)) { + bool grow = true; + if (y->getOp()==OP_CONST && dynamic_cast(y.get())==0) { + double ret; + casadi_math::fun(op, 0, y.nnz()>0 ? y->getValue() : 0, ret); + grow = ret!=0; + } + if (grow) { + Sparsity f = Sparsity::dense(size1(), size2()); + MX xx = project(shared_from_this(), f); + return xx->getBinary(op, MX(f, y), false, false); + } + } + + switch (op) { + case OP_ADD: + if (v_.value==0) return ScY && !y->isZero() ? repmat(y, size1(), size2()) : y; + break; + case OP_SUB: + if (v_.value==0) return ScY && !y->isZero() ? repmat(-y, size1(), size2()) : -y; + break; + case OP_MUL: + if (v_.value==1) return y; + if (v_.value==-1) return -y; + if (v_.value==2) return y->getUnary(OP_TWICE); + break; + case OP_DIV: + if (v_.value==1) return y->getUnary(OP_INV); + if (v_.value==-1) return -y->getUnary(OP_INV); + break; + case OP_POW: + if (v_.value==0) return MX::zeros(y.sparsity()); + if (v_.value==1) return MX::ones(y.sparsity()); + if (v_.value==std::exp(1.0)) return y->getUnary(OP_EXP); + break; + default: break; //no rule + } + + // Constant folding + // NOTE: ugly, should use a function instead of a cast + if (y->getOp()==OP_CONST && dynamic_cast(y.get())==0) { + double y_value = y.nnz()>0 ? y->getValue() : 0; + double ret; + casadi_math::fun(op, nnz()> 0 ? v_.value: 0, y_value, ret); + + return MX(y.sparsity(), ret, false); + } + + // Fallback + return MXNode::getBinary(op, y, ScX, ScY); + } + + template + void Constant::evalD(const double** arg, double** res, int* iw, double* w) { + std::fill(res[0], res[0]+nnz(), static_cast(v_.value)); + } + + template + void Constant::evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w) { + std::fill(res[0], res[0]+nnz(), SXElement(v_.value)); + } + + template + void Constant::generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const { + if (nnz()==0) { + // Quick return + } else if (nnz()==1) { + g.body << " " << g.workel(res[0]) << " = " << g.constant(v_.value) + << ";" << std::endl; + } else { + g.body << " " << g.fill_n(g.work(res[0], nnz()), nnz(), g.constant(v_.value)) << std::endl; + } + } + + template + MX Constant::getGetNonzeros(const Sparsity& sp, const std::vector& nz) const { + if (v_.value!=0) { + // Check if any "holes" + for (std::vector::const_iterator k=nz.begin(); k!=nz.end(); ++k) { + if (*k<0) { + // Do not simplify + return MXNode::getGetNonzeros(sp, nz); + } + } + } + return MX::create(new Constant(sp, v_)); + } + + template + MX Constant::getSetNonzeros(const MX& y, const std::vector& nz) const { + if (y.isConstant() && y->isZero() && v_.value==0) { + return y; + } + + // Fall-back + return MXNode::getSetNonzeros(y, nz); + } + + template + MX Constant::getProject(const Sparsity& sp) const { + if (isZero()) { + return MX::create(new Constant(sp, v_)); + } else if (sp.isdense()) { + DMatrix v = getMatrixValue(); + v.makeDense(); + return v; + } else { + return MXNode::getProject(sp); + } + } + + template + std::string + Constant::print(const std::vector& arg) const { + std::stringstream ss; + if (sparsity().isscalar()) { + // Print scalar + if (sparsity().nnz()==0) { + ss << "00"; + } else { + ss << v_.value; + } + } else if (sparsity().isempty()) { + // Print empty + sparsity().printCompact(ss); + } else { + // Print value + if (v_.value==0) { + ss << "zeros("; + } else if (v_.value==1) { + ss << "ones("; + } else if (v_.value!=v_.value) { + ss << "nan("; + } else if (v_.value==std::numeric_limits::infinity()) { + ss << "inf("; + } else if (v_.value==-std::numeric_limits::infinity()) { + ss << "-inf("; + } else { + ss << "all_" << v_.value << "("; + } + + // Print sparsity + sparsity().printCompact(ss); + ss << ")"; + } + return ss.str(); + } + +} // namespace casadi +/// \endcond + + +#endif // CASADI_CONSTANT_MX_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/determinant.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/determinant.hpp new file mode 100755 index 0000000..92eb7fa --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/determinant.hpp @@ -0,0 +1,74 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_DETERMINANT_HPP +#define CASADI_DETERMINANT_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + /** \brief Matrix determinant + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT Determinant : public MXNode { + public: + + /// Constructor + Determinant(const MX& x); + + /// Clone function + virtual Determinant* clone() const { return new Determinant(*this);} + + /// Destructor + virtual ~Determinant() {} + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_DETERMINANT;} + }; + + +} // namespace casadi +/// \endcond + +#endif // CASADI_DETERMINANT_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/getnonzeros.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/getnonzeros.hpp new file mode 100755 index 0000000..9ed55ea --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/getnonzeros.hpp @@ -0,0 +1,227 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_GETNONZEROS_HPP +#define CASADI_GETNONZEROS_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + /** \brief Get nonzeros of a matrix + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT GetNonzeros : public MXNode { + public: + + /// Constructor + GetNonzeros(const Sparsity& sp, const MX& x); + + /// Destructor + virtual ~GetNonzeros() {} + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /// Get an IMatrix representation of a GetNonzeros or SetNonzeros node + virtual Matrix mapping() const; + + /// Get all the nonzeros + virtual std::vector getAll() const = 0; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_GETNONZEROS;} + + /// Get the nonzeros of matrix + virtual MX getGetNonzeros(const Sparsity& sp, const std::vector& nz) const; + }; + + class CASADI_EXPORT GetNonzerosVector : public GetNonzeros { + public: + /// Constructor + GetNonzerosVector(const Sparsity& sp, const MX& x, + const std::vector& nz) : GetNonzeros(sp, x), nz_(nz) {} + + /// Clone function + virtual GetNonzerosVector* clone() const { return new GetNonzerosVector(*this);} + + /// Destructor + virtual ~GetNonzerosVector() {} + + /// Get all the nonzeros + virtual std::vector getAll() const { return nz_;} + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /// Evaluate the function (template) + template + void evalGen(const T* const* arg, T* const* res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const; + + /// Operation sequence + std::vector nz_; + }; + + // Specialization of the above when nz_ is a Slice + class CASADI_EXPORT GetNonzerosSlice : public GetNonzeros { + public: + + /// Constructor + GetNonzerosSlice(const Sparsity& sp, const MX& x, const Slice& s) : GetNonzeros(sp, x), s_(s) {} + + /// Clone function + virtual GetNonzerosSlice* clone() const { return new GetNonzerosSlice(*this);} + + /// Destructor + virtual ~GetNonzerosSlice() {} + + /// Get all the nonzeros + virtual std::vector getAll() const { return s_.getAll(s_.stop_);} + + /// Check if the instance is in fact an identity mapping (that can be simplified) + bool isIdentity() const; + + /// Simplify + virtual void simplifyMe(MX& ex); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /// Evaluate the function (template) + template + void evalGen(const T* const* arg, T* const* res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const; + + // Data member + Slice s_; + }; + + // Specialization of the above when nz_ is a nested Slice + class CASADI_EXPORT GetNonzerosSlice2 : public GetNonzeros { + public: + + /// Constructor + GetNonzerosSlice2(const Sparsity& sp, const MX& x, const Slice& inner, + const Slice& outer) : GetNonzeros(sp, x), inner_(inner), outer_(outer) {} + + /// Clone function + virtual GetNonzerosSlice2* clone() const { return new GetNonzerosSlice2(*this);} + + /// Destructor + virtual ~GetNonzerosSlice2() {} + + /// Get all the nonzeros + virtual std::vector getAll() const { return inner_.getAll(outer_, outer_.stop_);} + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /// Evaluate the function (template) + template + void evalGen(const T* const* arg, T* const* res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const; + + // Data members + Slice inner_, outer_; + }; + + +} // namespace casadi +/// \endcond + +#endif // CASADI_GETNONZEROS_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/inner_prod.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/inner_prod.hpp new file mode 100755 index 0000000..329217a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/inner_prod.hpp @@ -0,0 +1,94 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_INNER_PROD_HPP +#define CASADI_INNER_PROD_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + /** \brief Matrix inner_prod + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT InnerProd : public MXNode { + public: + + /// Constructor + InnerProd(const MX& x, const MX& y); + + /// Clone function + virtual InnerProd* clone() const { return new InnerProd(*this);} + + /// Destructor + virtual ~InnerProd() {} + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Generate code for the operation */ + void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_INNER_PROD;} + }; + + +} // namespace casadi +/// \endcond + +#endif // CASADI_INNER_PROD_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/inverse.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/inverse.hpp new file mode 100755 index 0000000..3e40768 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/inverse.hpp @@ -0,0 +1,74 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_INVERSE_HPP +#define CASADI_INVERSE_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + /** \brief Matrix inverse + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT Inverse : public MXNode { + public: + + /// Constructor + Inverse(const MX& x); + + /// Clone function + virtual Inverse* clone() const { return new Inverse(*this);} + + /// Destructor + virtual ~Inverse() {} + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_INVERSE;} + }; + + +} // namespace casadi +/// \endcond + +#endif // CASADI_INVERSE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/monitor.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/monitor.hpp new file mode 100755 index 0000000..cf79836 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/monitor.hpp @@ -0,0 +1,96 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MONITOR_HPP +#define CASADI_MONITOR_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL +namespace casadi { + /** \brief Monitor + \author Joel Andersson + \date 2015 + */ + class CASADI_EXPORT Monitor : public MXNode { + public: + + /// Constructor + Monitor(const MX& x, const std::string& comment); + + /// Clone function + virtual Monitor* clone() const { return new Monitor(*this);} + + /// Destructor + virtual ~Monitor() {} + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_MONITOR;} + + /// Can the operation be performed inplace (i.e. overwrite the result) + virtual int numInplace() const { return 1;} + + private: + std::string comment_; + }; + + +} // namespace casadi + +/// \endcond + +#endif // CASADI_MONITOR_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/multiple_output.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/multiple_output.hpp new file mode 100755 index 0000000..1b8c162 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/multiple_output.hpp @@ -0,0 +1,111 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MULTIPLE_OUTPUT_HPP +#define CASADI_MULTIPLE_OUTPUT_HPP + +#include "mx_node.hpp" +#include "../function/function.hpp" +#include + +/// \cond INTERNAL + +namespace casadi { + + /// Forward declaration + class OutputNode; + + /** + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT MultipleOutput : public MXNode { + friend class OutputNode; + public: + + /** \brief Constructor */ + MultipleOutput(); + + /** \brief Destructor */ + virtual ~MultipleOutput(); + + /** \brief Number of outputs */ + virtual int nout() const=0; + + /** \brief Get an output */ + virtual MX getOutput(int oind) const; + + /** \brief Get the sparsity of output oind */ + virtual const Sparsity& sparsity(int oind) const=0; + + /** \brief Check if a multiple output node */ + virtual bool isMultipleOutput() const {return true;} + + }; + + class CASADI_EXPORT OutputNode : public MXNode { + public: + + /** \brief Constructor */ + OutputNode(const MX& parent, int oind); + + /** \brief Destructor */ + virtual ~OutputNode(); + + /** \brief Clone function */ + virtual OutputNode* clone() const { return new OutputNode(*this);} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Is the node nonlinear */ + virtual bool isNonLinear() {return true;} + + /** \brief Check if evaluation output */ + virtual bool isOutputNode() const {return true;} + + /** \brief Get function input */ + virtual int getFunctionInput() const { return -1;} + + /** \brief Get function output */ + virtual int getFunctionOutput() const { return oind_;} + + /** \brief Get the operation */ + virtual int getOp() const { return -1;} + + /// Create a horizontal concatenation node + virtual MX getHorzcat(const std::vector& x) const { return dep()->getHorzcat(x);} + + /// Create a vertical concatenation node (vectors only) + virtual MX getVertcat(const std::vector& x) const { return dep()->getVertcat(x);} + + /** \brief Output index */ + int oind_; + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_MULTIPLE_OUTPUT_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/multiplication.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/multiplication.hpp new file mode 100755 index 0000000..15f7eb8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/multiplication.hpp @@ -0,0 +1,130 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MULTIPLICATION_HPP +#define CASADI_MULTIPLICATION_HPP + +#include "mx_node.hpp" + +/// \cond INTERNAL + +namespace casadi { + /** \brief An MX atomic for matrix-matrix product, + note that the first factor must be provided transposed + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT Multiplication : public MXNode { + public: + + /** \brief Constructor */ + Multiplication(const MX& z, const MX& x, const MX& y); + + /** \brief Destructor */ + virtual ~Multiplication() {} + + /** \brief Clone function */ + virtual Multiplication* clone() const { return new Multiplication(*this);} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Get the operation */ + virtual int getOp() const { return OP_MATMUL;} + + /// Can the operation be performed inplace (i.e. overwrite the result) + virtual int numInplace() const { return 1;} + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const { + return sameOpAndDeps(node, depth) && dynamic_cast(node)!=0; + } + + /** \brief Get required length of w field */ + virtual size_t sz_w() const { return sparsity().size1();} + }; + + + /** \brief An MX atomic for matrix-matrix product, + note that the factor must be provided transposed + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT DenseMultiplication : public Multiplication{ + public: + + /** \brief Constructor */ + DenseMultiplication(const MX& z, const MX& x, const MX& y) + : Multiplication(z, x, y) {} + + /** \brief Destructor */ + virtual ~DenseMultiplication() {} + + /** \brief Clone function */ + virtual DenseMultiplication* clone() const { return new DenseMultiplication(*this);} + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + }; + + +} // namespace casadi +/// \endcond + +#endif // CASADI_MULTIPLICATION_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/mx.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/mx.hpp new file mode 100755 index 0000000..27e9222 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/mx.hpp @@ -0,0 +1,633 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MX_HPP +#define CASADI_MX_HPP +#include "../shared_object.hpp" +#include "../matrix/matrix.hpp" +#include "../matrix/generic_expression.hpp" +#include "../generic_type.hpp" +#include +namespace casadi { + + /** \brief Forward declaration */ + class MXNode; + class Function; + + + /** \brief MX - Matrix expression + + The MX class is used to build up trees made up from MXNodes. It is a more general + graph representation than the scalar expression, SX, and much less efficient for small + objects. On the other hand, the class allows much more general operations than does SX, + in particular matrix valued operations and calls to arbitrary differentiable functions. + + The MX class is designed to have identical syntax with the Matrix<> template class, + and uses Matrix as its internal representation of the values at a node. By keeping + the syntaxes identical, it is possible to switch from one class to the other, + as well as inlining MX functions to SXElement functions. + + Note that an operation is always "lazy", making a matrix multiplication will create a + matrix multiplication node, not perform the actual multiplication. + + \author Joel Andersson + \date 2010-2011 + */ + class CASADI_EXPORT MX : + public GenericExpression, + public GenericMatrix, + public SharedObject { + public: + + /** \brief Default constructor */ + MX(); + + /** \brief Create a sparse matrix with all structural zeros */ + MX(int nrow, int ncol); + +#ifndef SWIG + /** \brief Create a sparse matrix with all structural zeros */ + explicit MX(const std::pair& rc); +#endif // SWIG + + /** \brief Create a sparse matrix from a sparsity pattern. + Same as MX::ones(sparsity) + */ + explicit MX(const Sparsity& sp); + + /** \brief Construct matrix with a given sparsity and nonzeros */ + MX(const Sparsity& sp, const MX& val); + + /** \brief Create scalar constant (also implicit type conversion) */ + MX(double x); + + /** \brief Copy constructor */ + MX(const MX& x); + + /** \brief Create vector constant (also implicit type conversion) */ + MX(const std::vector &x); + + /** \brief Create sparse matrix constant (also implicit type conversion) */ + MX(const Matrix &x); + +/// \cond INTERNAL + /** \brief Destructor */ + ~MX(); +/// \endcond + +#ifndef SWIG +/// \cond INTERNAL + /** \brief Create from node */ + static MX create(MXNode* node); + + /** \brief Create from node (multiple-outputs) */ + static std::vector createMultipleOutput(MXNode* node); +/// \endcond + + /// Get a non-zero element, with bounds checking + const MX at(int k) const; + + /// Access a non-zero element, with bounds checking + NonZeros at(int k); + + /** \brief Get the sparsity pattern */ + const Sparsity& sparsity() const; + + /// Access the sparsity, make a copy if there are multiple references to it + Sparsity& sparsityRef(); + + /// \cond INTERNAL + /// Scalar type + typedef MX ScalarType; + /// \endcond + + /// Base class + typedef GenericMatrix B; + + /// Expose base class functions + using B::zz_horzsplit; + using B::zz_diagsplit; + using B::zz_vertsplit; +#endif // SWIG + + /// Returns the truth value of an MX expression + bool __nonzero__() const; + + /** \brief Get an owning reference to the sparsity pattern */ + Sparsity getSparsity() const { return sparsity();} + + /** \brief Erase a submatrix (leaving structural zeros in its place) + Erase rows and/or columns of a matrix */ + void erase(const std::vector& rr, const std::vector& cc, bool ind1=false); + + /** \brief Erase a submatrix (leaving structural zeros in its place) + Erase elements of a matrix */ + void erase(const std::vector& rr, bool ind1=false); + + /** \brief Enlarge matrix + Make the matrix larger by inserting empty rows and columns, keeping the existing non-zeros */ + void enlarge(int nrow, int ncol, + const std::vector& rr, const std::vector& cc, bool ind1=false); + + MX operator-() const; + +#ifndef SWIG + /// \cond INTERNAL + ///@{ + /** \brief Access a member of the node */ + MXNode* operator->(); + + /** \brief Const access a member of the node */ + const MXNode* operator->() const; + ///@} + /// \endcond +#endif // SWIG + + /** \brief Get the nth dependency as MX */ + MX getDep(int ch=0) const; + + /** \brief Number of outputs */ + int nOut() const; + + /** \brief Get an output */ + MX getOutput(int oind=0) const; + + /** \brief Get the number of dependencies of a binary SXElement */ + int getNdeps() const; + + /// Get the name. + std::string getName() const; + + /// Get the value (only for scalar constant nodes) + double getValue() const; + + /// Get the value (only for constant nodes) + Matrix getMatrixValue() const; + + /// Check if symbolic + bool isSymbolic() const; + + /// Check if constant + bool isConstant() const; + + /// Check if evaluation + bool isEvaluation() const; + + /// Check if evaluation output + bool isEvaluationOutput() const; + + /// Get the index of evaluation output - only valid when isEvaluationoutput() is true + int getEvaluationOutput() const; + + /// Is it a certain operation + bool isOperation(int op) const; + + /// Check if multiplication + bool isMultiplication() const; + + /// Check if commutative operation + bool isCommutative() const; + + /// Check if norm + bool isNorm() const; + + /** \brief Check if matrix can be used to define function inputs. + Valid inputs for MXFunctions are combinations of Reshape, concatenations and SymbolicMX + */ + bool isValidInput() const; + + /** \brief Get the number of symbolic primitive + Assumes isValidInput() returns true. + */ + int numPrimitives() const; + + /** \brief Get symbolic primitives */ + std::vector getPrimitives() const; + + /** \brief Split up an expression along symbolic primitives */ + std::vector splitPrimitives(const MX& x) const; + + /** \brief Join an expression along symbolic primitives */ + MX joinPrimitives(std::vector& v) const; + + /// \cond INTERNAL + /** \brief Detect duplicate symbolic expressions + If there are symbolic primitives appearing more than once, the function will return + true and the names of the duplicate expressions will be printed to userOut(). + Note: Will mark the node using MX::setTemp. + Make sure to call resetInput() after usage. + */ + bool hasDuplicates(); + + /** \brief Reset the marker for an input expression */ + void resetInput(); + /// \endcond + + /** \brief check if identity */ + bool isIdentity() const; + + /** \brief check if zero (note that false negative answers are possible) */ + bool isZero() const; + + /** \brief check if zero (note that false negative answers are possible) */ + bool isOne() const; + + /** \brief check if zero (note that false negative answers are possible) */ + bool isMinusOne() const; + + /** \brief Is the expression a transpose? */ + bool isTranspose() const; + + /// Checks if expression does not contain NaN or Inf + bool isRegular() const; + + /** \brief Number of functions */ + int numFunctions() const; + + /// Get function + Function getFunction(int i=0); + + /// Is binary operation + bool isBinary() const; + + /// Is unary operation + bool isUnary() const; + + /// Get operation type + int getOp() const; + + /// \cond INTERNAL + /// Get the temporary variable + int getTemp() const; + + /// Set the temporary variable + void setTemp(int t); + /// \endcond + + ///@{ + /** \brief Create nodes by their ID */ + static MX binary(int op, const MX &x, const MX &y); + static MX unary(int op, const MX &x); + ///@} + + ///@{ + /** \brief create a matrix with all inf */ + static MX inf(const Sparsity& sp); + static MX inf(int nrow=1, int ncol=1); + static MX inf(const std::pair& rc); + ///@} + + ///@{ + /** \brief create a matrix with all nan */ + static MX nan(const Sparsity& sp); + static MX nan(int nrow=1, int ncol=1); + static MX nan(const std::pair& rc); + ///@} + + /** \brief Identity matrix */ + static MX eye(int ncol); + +#ifndef SWIG + /** \brief Avoid shadowing SharedObject::get() */ + using SharedObject::get; +#endif // SWIG + + ///@{ + /// Get a submatrix, single argument + void get(MX& SWIG_OUTPUT(m), bool ind1, const Slice& rr) const; + void get(MX& SWIG_OUTPUT(m), bool ind1, const Matrix& rr) const; + void get(MX& SWIG_OUTPUT(m), bool ind1, const Sparsity& sp) const; + ///@} + + /// Get a submatrix, two arguments + ///@{ + void get(MX& SWIG_OUTPUT(m), bool ind1, const Slice& rr, const Slice& cc) const; + void get(MX& SWIG_OUTPUT(m), bool ind1, const Slice& rr, const Matrix& cc) const; + void get(MX& SWIG_OUTPUT(m), bool ind1, const Matrix& rr, const Slice& cc) const; + void get(MX& SWIG_OUTPUT(m), bool ind1, const Matrix& rr, const Matrix& cc) const; + ///@} + + ///@{ + /// Set a submatrix, single argument + void set(const MX& m, bool ind1, const Slice& rr); + void set(const MX& m, bool ind1, const Matrix& rr); + void set(const MX& m, bool ind1, const Sparsity& sp); + ///@} + + ///@{ + /// Set a submatrix, two arguments + ///@} + void set(const MX& m, bool ind1, const Slice& rr, const Slice& cc); + void set(const MX& m, bool ind1, const Slice& rr, const Matrix& cc); + void set(const MX& m, bool ind1, const Matrix& rr, const Slice& cc); + void set(const MX& m, bool ind1, const Matrix& rr, const Matrix& cc); + ///@} + + ///@{ + /// Get a set of nonzeros + void getNZ(MX& SWIG_OUTPUT(m), bool ind1, const Slice& kk) const; + void getNZ(MX& SWIG_OUTPUT(m), bool ind1, const Matrix& kk) const; + ///@} + + ///@{ + /// Set a set of nonzeros + void setNZ(const MX& m, bool ind1, const Slice& kk); + void setNZ(const MX& m, bool ind1, const Matrix& kk); + ///@} + + /** \brief [DEPRECATED] Append a matrix vertically (NOTE: only efficient if vector) */ + void append(const MX& y); + + /** \brief [DEPRECATED] Append a matrix horizontally */ + void appendColumns(const MX& y); + +#ifndef SWIG + /// \cond CLUTTER + ///@{ + /// Functions called by friend functions defined for GenericExpression + MX zz_plus(const MX& y) const; + MX zz_minus(const MX& y) const; + MX zz_times(const MX& y) const; + MX zz_rdivide(const MX& y) const; + MX zz_lt(const MX& y) const; + MX zz_le(const MX& y) const; + MX zz_eq(const MX& y) const; + MX zz_ne(const MX& y) const; + MX zz_atan2(const MX& y) const; + MX zz_min(const MX& y) const; + MX zz_max(const MX& y) const; + MX zz_and(const MX& y) const; + MX zz_or(const MX& y) const; + MX zz_abs() const; + MX zz_sqrt() const; + MX zz_sin() const; + MX zz_cos() const; + MX zz_tan() const; + MX zz_asin() const; + MX zz_acos() const; + MX zz_atan() const; + MX zz_sinh() const; + MX zz_cosh() const; + MX zz_tanh() const; + MX zz_asinh() const; + MX zz_acosh() const; + MX zz_atanh() const; + MX zz_exp() const; + MX zz_log() const; + MX zz_log10() const; + MX zz_floor() const; + MX zz_ceil() const; + MX zz_erf() const; + MX zz_erfinv() const; + MX zz_sign() const; + MX zz_power(const MX& b) const; + MX zz_mod(const MX& y) const; + MX zz_simplify() const; + bool zz_isEqual(const MX& y, int depth) const; + bool zz_isEqual(const MXNode* y, int depth) const; + MX zz_copysign(const MX& y) const; + MX zz_constpow(const MX& y) const; + ///@} + + ///@{ + /// Functions called by friend functions defined for GenericExpression + MX zz_jacobian(const MX& arg) const; + MX zz_gradient(const MX& arg) const; + MX zz_tangent(const MX& arg) const; + MX zz_hessian(const MX& arg) const; + MX zz_hessian(const MX& arg, MX& g) const; + MX zz_substitute(const MX& v, const MX& vdef) const; + static std::vector zz_substitute(const std::vector &ex, + const std::vector &v, + const std::vector &vdef); + static void zz_substituteInPlace(const std::vector& v, + std::vector& vdef, + std::vector& ex, bool reverse); + MX zz_solve(const MX& b, const std::string& lsolver="symbolicqr", + const Dict& dict = Dict()) const; + MX zz_pinv(const std::string& lsolver="symbolicqr", + const Dict& dict = Dict()) const; + int zz_countNodes() const; + std::string zz_getOperatorRepresentation(const std::vector& args) const; + static void zz_extractShared(std::vector& ex, std::vector& v, + std::vector& vdef, const std::string& v_prefix, + const std::string& v_suffix); + MX zz_if_else(const MX& if_true, const MX& if_false, bool short_circuit=true) const; + MX zz_conditional(const std::vector &x, const MX& x_default, + bool short_circuit=true) const; + bool zz_dependsOn(const MX& arg) const; + MX zz_not() const; + ///@} + + ///@{ + /// Functions called by friend functions defined for SparsityInterface + static MX zz_horzcat(const std::vector& x); + static MX zz_diagcat(const std::vector& x); + static MX zz_vertcat(const std::vector& x); + std::vector zz_horzsplit(const std::vector& offset) const; + std::vector zz_diagsplit(const std::vector& offset1, + const std::vector& offset2) const; + std::vector zz_vertsplit(const std::vector& offset) const; + static MX zz_blockcat(const std::vector< std::vector > &v); + MX zz_mtimes(const MX& y) const; + MX zz_mac(const MX& y, const MX& z) const; + MX zz_reshape(int nrow, int ncol) const; + MX zz_reshape(const Sparsity& sp) const; + MX zz_vecNZ() const; + MX zz_kron(const MX& b) const; + MX zz_repmat(int n, int m=1) const; + ///@} + + ///@{ + /// Functions called by friend functions defined for GenericMatrix + MX zz_mpower(const MX& b) const; + MX zz_inner_prod(const MX& y) const; + MX zz_outer_prod(const MX& y) const; + MX zz_mrdivide(const MX& b) const; + MX zz_mldivide(const MX& b) const; + MX zz_if_else_zero(const MX& y) const; + MX zz_norm_2() const; + MX zz_norm_F() const; + MX zz_norm_1() const; + MX zz_norm_inf() const; + MX zz_unite(const MX& B) const; + MX zz_trace() const; + MX zz_diag() const; + MX zz_sumCols() const; + MX zz_sumRows() const; + MX zz_polyval(const MX& x) const; + MX zz_det() const; + MX zz_inv() const; + std::vector zz_symvar() const; + MX zz_nullspace() const; + MX zz_repsum(int n, int m=1) const; + ///@} + + ///@{ + /// Functions called by friend functions defined for this class + MX zz_find() const; + + MX zz_graph_substitute(const std::vector &v, const std::vector &vdef) const; + static std::vector zz_graph_substitute(const std::vector &ex, + const std::vector &expr, + const std::vector &exprs); + static MX zz_matrix_expand(const MX& e, const std::vector &boundary, + const Dict& options); + static std::vector zz_matrix_expand(const std::vector& e, + const std::vector& boundary, + const Dict& options); + ///@} + /// \endcond + +#endif // SWIG + + MX printme(const MX& y) const; + +#if !defined(SWIG) || defined(DOXYGEN) +/** +\ingroup expression_tools +@{ +*/ + /** \brief Find first nonzero + * If failed, returns the number of rows + */ + inline friend MX find(const MX& x) { + return x.zz_find(); + } + + /** \brief Substitute single expression in graph + * Substitute variable v with expression vdef in an expression ex, preserving nodes + */ + inline friend MX graph_substitute(const MX& ex, const std::vector &v, + const std::vector &vdef) { + return ex.zz_graph_substitute(v, vdef); + } + + /** \brief Substitute multiple expressions in graph + * Substitute variable var with expression expr in + * multiple expressions, preserving nodes + */ + inline friend std::vector + graph_substitute(const std::vector &ex, + const std::vector &v, + const std::vector &vdef) { + return MX::zz_graph_substitute(ex, v, vdef); + } + + /** \brief Expand MX graph to SXFunction call + * + * Expand the given expression e, optionally + * supplying expressions contained in it at which expansion should stop. + * + */ + inline friend MX + matrix_expand(const MX& e, const std::vector &boundary = std::vector(), + const Dict& options = Dict()) { + return MX::zz_matrix_expand(e, boundary, options); + } + + /** \brief Expand MX graph to SXFunction call + * + * Expand the given expression e, optionally + * supplying expressions contained in it at which expansion should stop. + * + */ + inline friend std::vector + matrix_expand(const std::vector& e, + const std::vector &boundary = std::vector(), + const Dict& options = Dict()) { + return MX::zz_matrix_expand(e, boundary, options); + } +/** @} */ +#endif // SWIG + + /** \brief returns itself, but with an assertion attached + * + * If y does not evaluate to 1, a runtime error is raised + */ + MX attachAssert(const MX& y, const std::string& fail_message="") const; + + /** \brief Monitor an expression + * Returns itself, but with the side effect of printing the nonzeros along with a comment + */ + MX monitor(const std::string& comment) const; + +#if !defined(SWIG) || !defined(SWIGMATLAB) + + /** \brief Set sparse */ + MX zz_project(const Sparsity& sp, bool intersect=false) const; + +#endif // !defined(SWIG) || !defined(SWIGMATLAB) + + /// [DEPRECATED: Use densify instead] Make the matrix dense + void makeDense(const MX& val = 0); + + /// [DEPRECATED] Lift an expression + void lift(const MX& x_guess); + + /// Transpose the matrix + MX T() const; + + /** \brief Get an IMatrix representation of a GetNonzeros or SetNonzeros node */ + Matrix mapping() const; + + /** \brief Set or reset the depth to which equalities are being checked for simplifications */ + static void setEqualityCheckingDepth(int eq_depth=1); + + /** \brief Get the depth to which equalities are being checked for simplifications */ + static int getEqualityCheckingDepth(); + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + +#ifndef SWIG + /// Construct constant matrix with a given sparsity and all + MX(const Sparsity& sp, int val, bool dummy); + MX(const Sparsity& sp, double val, bool dummy); + private: + + /// Create an expression from a node: extra dummy arguments to avoid ambiguity for 0/NULL + MX(MXNode* node, bool dummy1, bool dummy2, bool dummy3, bool dummy4); + + // Depth when checking equalities + static int eq_depth_; + +#endif // SWIG + }; + + // Create matrix symbolic primitive + template<> + MX GenericMatrix::sym(const std::string& name, const Sparsity& sp); + + ///@{ + /// Readability typedefs + typedef std::vector MXVector; + typedef std::vector MXVectorVector; + typedef std::map MXDict; + ///@} + +} // namespace casadi + +#endif // CASADI_MX_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/mx_node.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/mx_node.hpp new file mode 100755 index 0000000..cf4a88a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/mx_node.hpp @@ -0,0 +1,434 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_MX_NODE_HPP +#define CASADI_MX_NODE_HPP + +#include "mx.hpp" +#include "../sx/sx_element.hpp" +#include "../casadi_math.hpp" +#include "../function/code_generator.hpp" +#include "../function/linear_solver.hpp" +#include +#include + +namespace casadi { + /// \cond INTERNAL + ///@{ + /** \brief Convenience function, convert vectors to vectors of pointers */ + template + std::vector ptrVec(std::vector& v) { + std::vector ret(v.size()); + for (int i=0; i + const std::vector ptrVec(const std::vector& v) { + std::vector ret(v.size()); + for (int i=0; i(&v[i]); + return ret; + } + + template + std::vector > ptrVec(std::vector >& v) { + std::vector > ret(v.size()); + for (int i=0; i + const std::vector > ptrVec(const std::vector >& v) { + std::vector > ret(v.size()); + for (int i=0; i& already_copied); + + /** \brief Print a representation */ + virtual void repr(std::ostream &stream) const; + + /** \brief Print a description */ + virtual void print(std::ostream &stream) const; + + /** \brief Find out which nodes can be inlined */ + void canInline(std::map& nodeind) const; + + /** \brief Print compact */ + std::string printCompact(std::map& nodeind, + std::vector& intermed) const; + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const = 0; + + /** \brief Add a dependent function */ + virtual void addDependency(CodeGenerator& g) const {} + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Evaluate numerically */ + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /** \brief Evaluate symbolically (SX) */ + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Get the name */ + virtual const std::string& getName() const; + + /** \brief Check if valid function input */ + virtual bool isValidInput() const { return false;} + + /** \brief Get the number of symbolic primitives */ + virtual int numPrimitives() const; + + /** \brief Get symbolic primitives */ + virtual void getPrimitives(std::vector::iterator& it) const; + + /** \brief Split up an expression along symbolic primitives */ + virtual void splitPrimitives(const MX& x, std::vector::iterator& it) const; + + /** \brief Join an expression along symbolic primitives */ + virtual MX joinPrimitives(std::vector::const_iterator& it) const; + + /** \brief Detect duplicate symbolic expressions */ + virtual bool hasDuplicates(); + + /** \brief Reset the marker for an input expression */ + virtual void resetInput(); + + /** \brief Check if evaluation output */ + virtual bool isOutputNode() const {return false;} + + /** \brief Check if a multiple output node */ + virtual bool isMultipleOutput() const {return false;} + + /** \brief Number of functions */ + virtual int numFunctions() const {return 0;} + + /** \brief Get function reference */ + virtual const Function& getFunction(int i) const; + + /** \brief Get function input */ + virtual int getFunctionInput() const; + + /** \brief Get function output */ + virtual int getFunctionOutput() const; + + /** \brief Get the operation */ + virtual int getOp() const = 0; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const { return false;} + + /** \brief Get equality checking depth */ + inline static bool maxDepth() { return MX::getEqualityCheckingDepth();} + + /** \brief Checks if two nodes have the same operation and have + * equivalent dependencies up to a given depth */ + bool sameOpAndDeps(const MXNode* node, int depth) const; + + /** \brief dependencies - functions that have to be evaluated before this one */ + const MX& dep(int ind=0) const; + MX& dep(int ind=0); + + /** \brief Number of dependencies */ + int ndep() const; + + /** \brief Does the node depend on other nodes*/ + virtual bool hasDep() const {return ndep()>0; } + + /** \brief Number of outputs */ + virtual int nout() const { return 1;} + + /** \brief Get an output */ + virtual MX getOutput(int oind) const; + + /// Get the sparsity + const Sparsity& sparsity() const { return sparsity_;} + + /// Get the sparsity of output oind + virtual const Sparsity& sparsity(int oind) const; + + /// Get shape + int numel() const { return sparsity().numel(); } + int nnz(int i=0) const { return sparsity(i).nnz(); } + int size1() const { return sparsity().size1(); } + int size2() const { return sparsity().size2(); } + std::pair shape() const { return sparsity().shape();} + + /** \brief Is the node nonlinear */ + virtual bool isNonLinear() {return false;} + + /// Set the sparsity + void setSparsity(const Sparsity& sparsity); + + /** \brief Get required length of arg field */ + virtual size_t sz_arg() const { return ndep();} + + /** \brief Get required length of res field */ + virtual size_t sz_res() const { return nout();} + + /** \brief Get required length of iw field */ + virtual size_t sz_iw() const { return 0;} + + /** \brief Get required length of w field */ + virtual size_t sz_w() const { return 0;} + + /// Set unary dependency + void setDependencies(const MX& dep); + + /// Set binary dependencies + void setDependencies(const MX& dep1, const MX& dep2); + + /// Set ternary dependencies + void setDependencies(const MX& dep1, const MX& dep2, const MX& dep3); + + /// Set multiple dependencies + void setDependencies(const std::vector& dep); + + /// Add a dependency + int addDependency(const MX& dep); + + /// Assign nonzeros (mapping matrix) + virtual void assign(const MX& d, const std::vector& inz, + const std::vector& onz, bool add=false); + + /// Assign nonzeros (mapping matrix), output indices sequential + virtual void assign(const MX& d, const std::vector& inz, bool add=false); + + /// Convert scalar to matrix + inline static MX toMatrix(const MX& x, const Sparsity& sp) { + if (x.shape()==sp.shape()) { + return x; + } else { + return MX(sp, x); + } + } + + /// Get the value (only for scalar constant nodes) + virtual double getValue() const; + + /// Get the value (only for constant nodes) + virtual Matrix getMatrixValue() const; + + /// Can the operation be performed inplace (i.e. overwrite the result) + virtual int numInplace() const { return 0;} + + /// Simplify the expression (ex is a reference to the node) + virtual void simplifyMe(MX& ex) {} + + /// Get an IMatrix representation of a GetNonzeros or SetNonzeros node + virtual Matrix mapping() const; + + /// Create a horizontal concatenation node + virtual MX getHorzcat(const std::vector& x) const; + + /// Create a horizontal split node + virtual std::vector getHorzsplit(const std::vector& output_offset) const; + + /// Create a repeated matrix node + virtual MX getRepmat(int m, int n) const; + + /// Create a repeated sum node + virtual MX getRepsum(int m, int n) const; + + /// Create a vertical concatenation node (vectors only) + virtual MX getVertcat(const std::vector& x) const; + + /// Create a vertical split node (vectors only) + virtual std::vector getVertsplit(const std::vector& output_offset) const; + + /// Create a diagonal concatenation node + virtual MX getDiagcat(const std::vector& x) const; + + /// Create a diagonal split node + virtual std::vector getDiagsplit(const std::vector& offset1, + const std::vector& offset2) const; + + /// Transpose + virtual MX getTranspose() const; + + /// Reshape + virtual MX getReshape(const Sparsity& sp) const; + + /** \brief Matrix multiplication and addition */ + virtual MX getMultiplication(const MX& y, const MX& z) const; + + /** \brief Solve a system of linear equations + * + * For system Ax = b: + * + * A->getSolve(b) + * + */ + virtual MX getSolve(const MX& r, bool tr, const LinearSolver& linear_solver) const; + + /// Get the nonzeros of matrix + virtual MX getGetNonzeros(const Sparsity& sp, const std::vector& nz) const; + + /// Assign the nonzeros of a matrix to another matrix + virtual MX getSetNonzeros(const MX& y, const std::vector& nz) const; + + /// Add the nonzeros of a matrix to another matrix + virtual MX getAddNonzeros(const MX& y, const std::vector& nz) const; + + /// Get submatrix reference + virtual MX getRef(const Slice& i, const Slice& j) const; + + /// Get submatrix assignment + virtual MX getAssign(const MX& y, const Slice& i, const Slice& j) const; + + /// Create set sparse + virtual MX getProject(const Sparsity& sp) const; + + /// Get a unary operation + virtual MX getUnary(int op) const; + + /// Get a binary operation operation + MX getBinarySwitch(int op, const MX& y) const; + + /// Get a binary operation operation (matrix-matrix) + virtual MX getBinary(int op, const MX& y, bool scX, bool scY) const; + + /// Determinant + virtual MX getDeterminant() const; + + /// Inverse + virtual MX getInverse() const; + + /// Inner product + virtual MX getInnerProd(const MX& y) const; + + /// Frobenius norm + virtual MX getNormF() const; + + /// Spectral norm + virtual MX getNorm2() const; + + /// Infinity norm + virtual MX getNormInf() const; + + /// 1-norm + virtual MX getNorm1() const; + + /// Assertion + MX getAssertion(const MX& y, const std::string& fail_message) const; + + /// Monitor + MX getMonitor(const std::string& comment) const; + + /// Find + MX getFind() const; + + /** Temporary variables to be used in user algorithms like sorting, + the user is responsible of making sure that use is thread-safe + The variable is initialized to zero + */ + int temp; + + /** \brief dependencies - functions that have to be evaluated before this one */ + std::vector dep_; + + /** \brief The sparsity pattern */ + Sparsity sparsity_; + + /** \brief Propagate sparsities forward through a copy operation */ + static void copyFwd(const bvec_t* arg, bvec_t* res, int len); + + /** \brief Propagate sparsities backwards through a copy operation */ + static void copyAdj(bvec_t* arg, bvec_t* res, int len); + }; + + /// \endcond +} // namespace casadi + +#endif // CASADI_MX_NODE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/norm.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/norm.hpp new file mode 100755 index 0000000..a47bd95 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/norm.hpp @@ -0,0 +1,170 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_NORM_HPP +#define CASADI_NORM_HPP + +#include "mx_node.hpp" + +/// \cond INTERNAL +namespace casadi { + + /** \brief Matrix and vector norms + + \author Joel Andersson + \date 2010-2013 + */ + class CASADI_EXPORT Norm : public MXNode { + public: + + /** \brief Constructor */ + explicit Norm(const MX& x); + + /** \brief Destructor */ + virtual ~Norm() {} + }; + + /** \brief Represents a Frobenius norm + \author Joel Andersson + \date 2010-2013 + */ + class CASADI_EXPORT NormF : public Norm { + public: + + /** \brief Constructor */ + explicit NormF(const MX& x) : Norm(x) {} + + /** \brief Destructor */ + virtual ~NormF() {} + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Generate code for the operation */ + void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Clone function */ + virtual NormF* clone() const { return new NormF(*this);} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_NORMF;} + }; + + /** \brief Represents a 2-norm (spectral norm) + \author Joel Andersson + \date 2010-2013 + */ + class CASADI_EXPORT Norm2 : public Norm { + public: + + /** \brief Constructor */ + explicit Norm2(const MX& x): Norm(x) {} + + /** \brief Destructor */ + virtual ~Norm2() {} + + /** \brief Clone function */ + virtual Norm2* clone() const { return new Norm2(*this);} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_NORM2;} + }; + + /** \brief 1-norm + \author Joel Andersson + \date 2010-2013 + */ + class CASADI_EXPORT Norm1 : public Norm { + public: + + /** \brief Constructor */ + Norm1(const MX& x) : Norm(x) {} + + /** \brief Destructor */ + virtual ~Norm1() {} + + /** \brief Clone function */ + virtual Norm1* clone() const { return new Norm1(*this);} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_NORM1;} + }; + + /** \brief Represents an infinity-norm operation on a MX + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT NormInf : public Norm { + public: + + /** \brief Constructor */ + NormInf(const MX& x) : Norm(x) {} + + /** \brief Destructor */ + virtual ~NormInf() {} + + /** \brief Clone function */ + virtual NormInf* clone() const { return new NormInf(*this);} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_NORMINF;} + }; + +} // namespace casadi + +/// \endcond + +#endif // CASADI_NORM_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/project.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/project.hpp new file mode 100755 index 0000000..2d3b14d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/project.hpp @@ -0,0 +1,95 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_PROJECT_HPP +#define CASADI_PROJECT_HPP + +#include "mx_node.hpp" +/// \cond INTERNAL + +namespace casadi { + /** \brief Change the sparsity of an expression + \author Joel Andersson + \date 2011-2013 + */ + class CASADI_EXPORT Project : public MXNode { + public: + + /** \brief Constructor */ + Project(const MX& x, const Sparsity& sp); + + /** \brief Destructor */ + virtual ~Project() {} + + /** \brief Clone function */ + virtual Project * clone() const; + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Generate code for the operation */ + void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Get the operation */ + virtual int getOp() const { return OP_PROJECT;} + + /** \brief Get required length of w field */ + virtual size_t sz_w() const { return size1();} + }; + +} // namespace casadi + +/// \endcond + +#endif // CASADI_PROJECT_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/repmat.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/repmat.hpp new file mode 100755 index 0000000..d703421 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/repmat.hpp @@ -0,0 +1,153 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_REPMAT_HPP +#define CASADI_REPMAT_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + + /** \brief Horizontal repmat + \author Joris Gillis + \date 2015 + */ + class CASADI_EXPORT HorzRepmat : public MXNode { + public: + + /// Constructor + HorzRepmat(const MX& x, int n); + + /// Clone function + virtual HorzRepmat* clone() const { return new HorzRepmat(*this);} + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w); + + /// Destructor + virtual ~HorzRepmat() {} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Generate code for the operation */ + void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_HORZREPMAT;} + + int n_; + }; + + /** \brief Horizontal repsum + \author Joris Gillis + \date 2015 + */ + class CASADI_EXPORT HorzRepsum : public MXNode { + public: + + /// Constructor + HorzRepsum(const MX& x, int n); + + /// Clone function + virtual HorzRepsum* clone() const { return new HorzRepsum(*this);} + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w, + R reduction); + + /// Destructor + virtual ~HorzRepsum() {} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Generate code for the operation */ + void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_HORZREPSUM;} + + int n_; + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_REPMAT_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/reshape.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/reshape.hpp new file mode 100755 index 0000000..e146e51 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/reshape.hpp @@ -0,0 +1,127 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_RESHAPE_HPP +#define CASADI_RESHAPE_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + /** \brief Reshape an expression + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT Reshape : public MXNode { + public: + + /// Constructor + Reshape(const MX& x, Sparsity sp); + + /// Clone function + virtual Reshape* clone() const; + + /// Destructor + virtual ~Reshape() {} + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_RESHAPE;} + + /// Can the operation be performed inplace (i.e. overwrite the result) + virtual int numInplace() const { return 1;} + + /// Reshape + virtual MX getReshape(const Sparsity& sp) const; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const + { return sameOpAndDeps(node, depth) && sparsity()==node->sparsity();} + + /// Transpose (if a dimension is one) + virtual MX getTranspose() const; + + /** \brief Check if valid function input */ + virtual bool isValidInput() const; + + /** \brief Get the number of symbolic primitives */ + virtual int numPrimitives() const; + + /** \brief Get symbolic primitives */ + virtual void getPrimitives(std::vector::iterator& it) const; + + /** \brief Split up an expression along symbolic primitives */ + virtual void splitPrimitives(const MX& x, std::vector::iterator& it) const; + + /** \brief Join an expression along symbolic primitives */ + virtual MX joinPrimitives(std::vector::const_iterator& it) const; + + /** \brief Detect duplicate symbolic expressions */ + virtual bool hasDuplicates(); + + /** \brief Reset the marker for an input expression */ + virtual void resetInput(); + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_RESHAPE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/setnonzeros.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/setnonzeros.hpp new file mode 100755 index 0000000..18f8144 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/setnonzeros.hpp @@ -0,0 +1,240 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SETNONZEROS_HPP +#define CASADI_SETNONZEROS_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + + /** \brief Assign or add entries to a matrix + \author Joel Andersson + \date 2013 + */ + template + class CASADI_EXPORT SetNonzeros : public MXNode { + public: + + /// Constructor + SetNonzeros(const MX& y, const MX& x); + + /// Destructor + virtual ~SetNonzeros() = 0; + + /// Get all the nonzeros + virtual std::vector getAll() const = 0; + + /// Clone function + virtual SetNonzeros* clone() const = 0; + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Get the operation */ + virtual int getOp() const { return Add ? OP_ADDNONZEROS : OP_SETNONZEROS;} + + /// Get an IMatrix representation of a GetNonzeros or SetNonzeros node + virtual Matrix mapping() const; + + /// Can the operation be performed inplace (i.e. overwrite the result) + virtual int numInplace() const { return 1;} + }; + + + /** \brief Add the nonzeros of a matrix to another matrix + \author Joel Andersson + \date 2013 + */ + template + class CASADI_EXPORT SetNonzerosVector : public SetNonzeros{ + public: + + /// Constructor + SetNonzerosVector(const MX& y, const MX& x, const std::vector& nz); + + /// Clone function + virtual SetNonzerosVector* clone() const { return new SetNonzerosVector(*this);} + + /// Destructor + virtual ~SetNonzerosVector() {} + + /// Get all the nonzeros + virtual std::vector getAll() const { return nz_;} + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const; + + /// Operation sequence + std::vector nz_; + }; + + // Specialization of the above when nz_ is a Slice + template + class CASADI_EXPORT SetNonzerosSlice : public SetNonzeros{ + public: + + /// Constructor + SetNonzerosSlice(const MX& y, const MX& x, const Slice& s) : SetNonzeros(y, x), s_(s) {} + + /// Clone function + virtual SetNonzerosSlice* clone() const { return new SetNonzerosSlice(*this);} + + /// Destructor + virtual ~SetNonzerosSlice() {} + + /// Get all the nonzeros + virtual std::vector getAll() const { return s_.getAll(s_.stop_);} + + /// Check if the instance is in fact a simple assignment + bool isAssignment() const; + + /// Simplify + virtual void simplifyMe(MX& ex); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const; + + // Data member + Slice s_; + }; + + // Specialization of the above when nz_ is a nested Slice + template + class CASADI_EXPORT SetNonzerosSlice2 : public SetNonzeros{ + public: + + /// Constructor + SetNonzerosSlice2(const MX& y, const MX& x, const Slice& inner, const Slice& outer) : + SetNonzeros(y, x), inner_(inner), outer_(outer) {} + + /// Clone function + virtual SetNonzerosSlice2* clone() const { return new SetNonzerosSlice2(*this);} + + /// Destructor + virtual ~SetNonzerosSlice2() {} + + /// Get all the nonzeros + virtual std::vector getAll() const { return inner_.getAll(outer_, outer_.stop_);} + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const; + + // Data members + Slice inner_, outer_; + }; + +} // namespace casadi +/// \endcond + +#endif // CASADI_SETNONZEROS_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/setnonzeros_impl.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/setnonzeros_impl.hpp new file mode 100755 index 0000000..a0c9332 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/setnonzeros_impl.hpp @@ -0,0 +1,820 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SETNONZEROS_IMPL_HPP +#define CASADI_SETNONZEROS_IMPL_HPP + +#include "setnonzeros.hpp" +#include "../std_vector_tools.hpp" +#include "../function/sx_function.hpp" + +/// \cond INTERNAL + +using namespace std; + +namespace casadi { + + template + SetNonzeros::SetNonzeros(const MX& y, const MX& x) { + this->setSparsity(y.sparsity()); + this->setDependencies(y, x); + } + + template + SetNonzerosVector::SetNonzerosVector(const MX& y, const MX& x, const std::vector& nz) : + SetNonzeros(y, x), nz_(nz) { + // Ignore duplicate assignments + if (!Add) { + vector already_set(this->nnz(), false); + for (vector::reverse_iterator i=nz_.rbegin(); i!=nz_.rend(); ++i) { + if (*i>=0) { + if (already_set[*i]) { + *i = -1; + } else { + already_set[*i] = true; + } + } + } + } + } + + template + SetNonzeros:: ~SetNonzeros() { + } + + template + void SetNonzeros::evalMX(const std::vector& arg, std::vector& res) { + // Get all the nonzeros + vector nz = getAll(); + + // Output sparsity + const Sparsity &osp = sparsity(); + const int* orow = osp.row(); + vector ocol = osp.getCol(); + + // Input sparsity (first input same as output) + const Sparsity &isp = dep(1).sparsity(); + vector icol = isp.getCol(); + + // We next need to resort the assignment vector by outputs instead of inputs + // Start by counting the number of output nonzeros corresponding to each input nonzero + vector onz_count(osp.nnz()+2, 0); + for (vector::const_iterator it=nz.begin(); it!=nz.end(); ++it) { + onz_count[*it+2]++; + } + + // Cumsum to get index offset for output nonzero + for (int i=0; i nz_order(nz.size()); + for (int k=0; k& with_duplicates = onz_count; // Reuse memory + onz_count.resize(nz.size()); + for (int k=0; k=0) { + with_duplicates[k] = ocol[onz_k]*osp.size1() + orow[onz_k]; + } else { + with_duplicates[k] = -1; + } + } + + // Get all output elements (this time without duplicates) + vector el_output; + osp.find(el_output); + + // Sparsity pattern being formed and corresponding nonzero mapping + vector r_colind, r_row, r_nz, r_ind; + + // Get references to arguments and results + res[0] = arg[0]; + + // Entries in res with elements zero'ed out + if (!Add) { + + // Get the nz locations in res corresponding to the output sparsity pattern + r_nz.resize(with_duplicates.size()); + copy(with_duplicates.begin(), with_duplicates.end(), r_nz.begin()); + res[0].sparsity().getNZ(r_nz); + + // Zero out the corresponding entries + res[0] = MX::zeros(isp)->getSetNonzeros(res[0], r_nz); + } + + // Get the nz locations of the elements in arg corresponding to the argument sparsity pattern + arg[1].sparsity().find(r_nz); + isp.getNZ(r_nz); + + // Filter out ignored entries and check if there is anything to add at all + bool elements_to_add = false; + for (vector::iterator k=r_nz.begin(); k!=r_nz.end(); ++k) { + if (*k>=0) { + if (nz[*k]>=0) { + elements_to_add = true; + } else { + *k = -1; + } + } + } + + // Quick continue of no elements to set/add + if (!elements_to_add) return; + + // Get the nz locations in the argument corresponding to the inputs + r_ind.resize(el_output.size()); + copy(el_output.begin(), el_output.end(), r_ind.begin()); + res[0].sparsity().getNZ(r_ind); + + // Enlarge the sparsity pattern of the arguments if not all assignments fit + for (vector::iterator k=r_nz.begin(); k!=r_nz.end(); ++k) { + if (*k>=0 && nz[*k]>=0 && r_ind[nz[*k]]<0) { + + // Create a new pattern which includes both the the previous seed + // and the addition/assignment + Sparsity sp = res[0].sparsity().patternUnion(osp); + res[0] = res[0]->getProject(sp); + + // Recalculate the nz locations in the arguments corresponding to the inputs + copy(el_output.begin(), el_output.end(), r_ind.begin()); + res[0].sparsity().getNZ(r_ind); + + break; + } + } + + // Have r_nz point to locations in the result instead of the output + for (vector::iterator k=r_nz.begin(); k!=r_nz.end(); ++k) { + if (*k>=0) { + *k = r_ind[nz[*k]]; + } + } + + // Add to the element to the sensitivity, if any + res[0] = arg[1]->getAddNonzeros(res[0], r_nz); + } + + template + void SetNonzeros::evalFwd(const std::vector >& fseed, + std::vector >& fsens) { + // Get all the nonzeros + vector nz = getAll(); + + // Number of derivative directions + int nfwd = fsens.size(); + + // Output sparsity + const Sparsity &osp = sparsity(); + const int* orow = osp.row(); + vector ocol = osp.getCol(); + + // Input sparsity (first input same as output) + const Sparsity &isp = dep(1).sparsity(); + vector icol = isp.getCol(); + + // We next need to resort the assignment vector by outputs instead of inputs + // Start by counting the number of output nonzeros corresponding to each input nonzero + vector onz_count(osp.nnz()+2, 0); + for (vector::const_iterator it=nz.begin(); it!=nz.end(); ++it) { + onz_count[*it+2]++; + } + + // Cumsum to get index offset for output nonzero + for (int i=0; i nz_order(nz.size()); + for (int k=0; k& with_duplicates = onz_count; // Reuse memory + onz_count.resize(nz.size()); + for (int k=0; k=0) { + with_duplicates[k] = ocol[onz_k]*osp.size1() + orow[onz_k]; + } else { + with_duplicates[k] = -1; + } + } + + // Get all output elements (this time without duplicates) + vector el_output; + osp.find(el_output); + + // Sparsity pattern being formed and corresponding nonzero mapping + vector r_colind, r_row, r_nz, r_ind; + + // Nondifferentiated function and forward sensitivities + for (int d=0; dgetSetNonzeros(res, r_nz); + } + + // Get the nz locations of the elements in arg corresponding to the argument sparsity pattern + arg.sparsity().find(r_nz); + isp.getNZ(r_nz); + + // Filter out ignored entries and check if there is anything to add at all + bool elements_to_add = false; + for (vector::iterator k=r_nz.begin(); k!=r_nz.end(); ++k) { + if (*k>=0) { + if (nz[*k]>=0) { + elements_to_add = true; + } else { + *k = -1; + } + } + } + + // Quick continue of no elements to set/add + if (!elements_to_add) continue; + + // Get the nz locations in the argument corresponding to the inputs + r_ind.resize(el_output.size()); + copy(el_output.begin(), el_output.end(), r_ind.begin()); + res.sparsity().getNZ(r_ind); + + // Enlarge the sparsity pattern of the arguments if not all assignments fit + for (vector::iterator k=r_nz.begin(); k!=r_nz.end(); ++k) { + if (*k>=0 && nz[*k]>=0 && r_ind[nz[*k]]<0) { + + // Create a new pattern which includes both the the previous seed + // and the addition/assignment + Sparsity sp = res.sparsity().patternUnion(osp); + res = res->getProject(sp); + + // Recalculate the nz locations in the arguments corresponding to the inputs + copy(el_output.begin(), el_output.end(), r_ind.begin()); + res.sparsity().getNZ(r_ind); + + break; + } + } + + // Have r_nz point to locations in the result instead of the output + for (vector::iterator k=r_nz.begin(); k!=r_nz.end(); ++k) { + if (*k>=0) { + *k = r_ind[nz[*k]]; + } + } + + // Add to the element to the sensitivity, if any + res = arg->getAddNonzeros(res, r_nz); + } + } + + template + void SetNonzeros::evalAdj(const std::vector >& aseed, + std::vector >& asens) { + // Get all the nonzeros + vector nz = getAll(); + + // Number of derivative directions + int nadj = aseed.size(); + + // Output sparsity + const Sparsity &osp = sparsity(); + const int* orow = osp.row(); + vector ocol = osp.getCol(); + + // Input sparsity (first input same as output) + const Sparsity &isp = dep(1).sparsity(); + const int* irow = isp.row(); + vector icol = isp.getCol(); + + // We next need to resort the assignment vector by outputs instead of inputs + // Start by counting the number of output nonzeros corresponding to each input nonzero + vector onz_count(osp.nnz()+2, 0); + for (vector::const_iterator it=nz.begin(); it!=nz.end(); ++it) { + onz_count[*it+2]++; + } + + // Cumsum to get index offset for output nonzero + for (int i=0; i nz_order(nz.size()); + for (int k=0; k& with_duplicates = onz_count; // Reuse memory + onz_count.resize(nz.size()); + for (int k=0; k=0) { + with_duplicates[k] = ocol[onz_k]*osp.size1() + orow[onz_k]; + } else { + with_duplicates[k] = -1; + } + } + + // Get all output elements (this time without duplicates) + vector el_output; + osp.find(el_output); + + // Sparsity pattern being formed and corresponding nonzero mapping + vector r_colind, r_row, r_nz, r_ind; + + for (int d=0; d col offset + for (int i=1; igetGetNonzeros(f_sp, r_nz); + if (!Add) { + asens[d][0] += MX::zeros(f_sp)->getSetNonzeros(aseed[d][0], r_nz); + } else { + asens[d][0] += aseed[d][0]; + } + } else { + asens[d][0] += aseed[d][0]; + } + } + } + + template + void SetNonzerosVector::evalD(const double** arg, double** res, + int* iw, double* w) { + evalGen(arg, res, iw, w); + } + + template + void SetNonzerosVector::evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w) { + evalGen(arg, res, iw, w); + } + + template + template + void SetNonzerosVector::evalGen(const T** arg, T** res, + int* iw, T* w) { + const T* idata0 = arg[0]; + const T* idata = arg[1]; + T* odata = res[0]; + if (idata0 != odata) { + copy(idata0, idata0+this->dep(0).nnz(), odata); + } + for (vector::const_iterator k=this->nz_.begin(); k!=this->nz_.end(); ++k, ++idata) { + if (Add) { + if (*k>=0) odata[*k] += *idata; + } else { + if (*k>=0) odata[*k] = *idata; + } + } + } + + template + void SetNonzerosSlice::evalD(const double** arg, double** res, + int* iw, double* w) { + evalGen(arg, res, iw, w); + } + + template + void SetNonzerosSlice::evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w) { + evalGen(arg, res, iw, w); + } + + template + template + void SetNonzerosSlice::evalGen(const T** arg, T** res, + int* iw, T* w) { + const T* idata0 = arg[0]; + const T* idata = arg[1]; + T* odata = res[0]; + if (idata0 != odata) { + copy(idata0, idata0+this->dep(0).nnz(), odata); + } + T* odata_stop = odata + s_.stop_; + for (odata += s_.start_; odata != odata_stop; odata += s_.step_) { + if (Add) { + *odata += *idata++; + } else { + *odata = *idata++; + } + } + } + + template + void SetNonzerosSlice2::evalD(const double** arg, double** res, + int* iw, double* w) { + evalGen(arg, res, iw, w); + } + + template + void SetNonzerosSlice2::evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w) { + evalGen(arg, res, iw, w); + } + + template + template + void SetNonzerosSlice2::evalGen(const T** arg, T** res, + int* iw, T* w) { + const T* idata0 = arg[0]; + const T* idata = arg[1]; + T* odata = res[0]; + if (idata0 != odata) { + copy(idata0, idata0 + this->dep(0).nnz(), odata); + } + T* outer_stop = odata + outer_.stop_; + T* outer = odata + outer_.start_; + for (; outer != outer_stop; outer += outer_.step_) { + for (T* inner = outer+inner_.start_; + inner != outer+inner_.stop_; + inner += inner_.step_) { + if (Add) { + *inner += *idata++; + } else { + *inner = *idata++; + } + } + } + } + + template + void SetNonzerosVector:: + spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w) { + const bvec_t *a0 = arg[0]; + const bvec_t *a = arg[1]; + bvec_t *r = res[0]; + int n = this->nnz(); + + // Propagate sparsity + if (r != a0) copy(a0, a0+n, r); + for (vector::const_iterator k=this->nz_.begin(); k!=this->nz_.end(); ++k, ++a) { + if (Add) { + if (*k>=0) r[*k] |= *a; + } else { + if (*k>=0) r[*k] = *a; + } + } + } + + template + void SetNonzerosVector:: + spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w) { + bvec_t *a = arg[1]; + bvec_t *r = res[0]; + for (vector::const_iterator k=this->nz_.begin(); k!=this->nz_.end(); ++k, ++a) { + if (*k>=0) { + *a |= r[*k]; + if (!Add) { + r[*k] = 0; + } + } + } + MXNode::copyAdj(arg[0], r, this->nnz()); + } + + template + void SetNonzerosSlice:: + spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w) { + const bvec_t *a0 = arg[0]; + const bvec_t *a = arg[1]; + bvec_t *r = res[0]; + int n = this->nnz(); + + // Propagate sparsity + if (r != a0) copy(a0, a0+n, r); + for (int k=s_.start_; k!=s_.stop_; k+=s_.step_) { + if (Add) { + r[k] |= *a++; + } else { + r[k] = *a++; + } + } + } + + template + void SetNonzerosSlice:: + spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w) { + bvec_t *a = arg[1]; + bvec_t *r = res[0]; + for (int k=s_.start_; k!=s_.stop_; k+=s_.step_) { + *a++ |= r[k]; + if (!Add) { + r[k] = 0; + } + } + MXNode::copyAdj(arg[0], r, this->nnz()); + } + + template + void SetNonzerosSlice2:: + spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w) { + const bvec_t *a0 = arg[0]; + const bvec_t *a = arg[1]; + bvec_t *r = res[0]; + int n = this->nnz(); + + // Propagate sparsity + if (r != a0) copy(a0, a0+n, r); + for (int k1=outer_.start_; k1!=outer_.stop_; k1+=outer_.step_) { + for (int k2=k1+inner_.start_; k2!=k1+inner_.stop_; k2+=inner_.step_) { + if (Add) { + r[k2] |= *a++; + } else { + r[k2] = *a++; + } + } + } + } + + template + void SetNonzerosSlice2:: + spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w) { + bvec_t *a = arg[1]; + bvec_t *r = res[0]; + for (int k1=outer_.start_; k1!=outer_.stop_; k1+=outer_.step_) { + for (int k2=k1+inner_.start_; k2!=k1+inner_.stop_; k2+=inner_.step_) { + *a++ |= r[k2]; + if (!Add) { + r[k2] = 0; + } + } + } + MXNode::copyAdj(arg[0], r, this->nnz()); + } + + template + std::string SetNonzerosVector::print(const std::vector& arg) const { + stringstream ss; + ss << arg.at(0) << nz_ << (Add ? " += " : " = ") << arg.at(1) << ")"; + return ss.str(); + } + + template + std::string SetNonzerosSlice::print(const std::vector& arg) const { + stringstream ss; + ss << arg.at(0) << "[" << s_ << "]" << (Add ? " += " : " = ") << arg.at(1) << ")"; + return ss.str(); + } + + template + std::string SetNonzerosSlice2::print(const std::vector& arg) const { + stringstream ss; + ss << arg.at(0) << "[" << outer_ << ";" << inner_ << "]" << (Add ? " += " : " = ") + << arg.at(1) << ")"; + return ss.str(); + } + + template + Matrix SetNonzeros::mapping() const { + vector nz = getAll(); + return Matrix(this->dep(1).sparsity(), nz, false); + } + + template + bool SetNonzerosVector::zz_isEqual(const MXNode* node, int depth) const { + // Check dependencies + if (!this->sameOpAndDeps(node, depth)) return false; + + // Check if same node + const SetNonzerosVector* n = dynamic_cast*>(node); + if (n==0) return false; + + // Check sparsity + if (this->sparsity()!=node->sparsity()) return false; + + // Check indices + if (this->nz_.size()!=n->nz_.size()) return false; + if (!std::equal(this->nz_.begin(), this->nz_.end(), n->nz_.begin())) return false; + + return true; + } + + template + bool SetNonzerosSlice::zz_isEqual(const MXNode* node, int depth) const { + // Check dependencies + if (!this->sameOpAndDeps(node, depth)) return false; + + // Check if same node + const SetNonzerosSlice* n = dynamic_cast*>(node); + if (n==0) return false; + + // Check sparsity + if (this->sparsity()!=node->sparsity()) return false; + + // Check indices + if (this->s_ != n->s_) return false; + + return true; + } + + template + bool SetNonzerosSlice2::zz_isEqual(const MXNode* node, int depth) const { + // Check dependencies + if (!this->sameOpAndDeps(node, depth)) return false; + + // Check if same node + const SetNonzerosSlice2* n = dynamic_cast*>(node); + if (n==0) return false; + + // Check sparsity + if (this->sparsity()!=node->sparsity()) return false; + + // Check indices + if (this->inner_ != n->inner_ || this->outer_!=n->outer_) return false; + + return true; + } + + template + bool SetNonzerosSlice::isAssignment() const { + // Check sparsity + if (!(this->sparsity() == this->dep(1).sparsity())) + return false; + + // Check if the nonzeros follow in increasing order + if (s_.start_ != 0) return false; + if (s_.step_ != 1) return false; + if (s_.stop_ != this->nnz()) return false; + + // True if reached this point + return true; + } + + template + void SetNonzerosVector::generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const { + // Copy first argument if not inplace + if (arg[0]!=res[0]) { + g.body << " " << g.copy_n(g.work(arg[0], this->dep(0).nnz()), this->nnz(), + g.work(res[0], this->nnz())) << endl; + } + + // Condegen the indices + int ind = g.getConstant(this->nz_, true); + + // Perform the operation inplace + g.body << " for (cii=s" << ind << ", rr=" << g.work(res[0], this->nnz()) << ", " + << "ss=" << g.work(arg[1], this->dep(1).nnz()) << "; cii!=s" << ind + << "+" << this->nz_.size() << "; ++cii, ++ss)"; + g.body << " if (*cii>=0) rr[*cii] " << (Add?"+=":"=") << " *ss;" << endl; + } + + template + void SetNonzerosSlice::generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const { + // Copy first argument if not inplace + if (arg[0]!=res[0]) { + g.body << " " << g.copy_n(g.work(arg[0], this->dep(0).nnz()), this->nnz(), + g.work(res[0], this->nnz())) << endl; + } + + // Perform the operation inplace + g.body << " for (rr=" << g.work(res[0], this->nnz()) << "+" << s_.start_ << ", ss=" + << g.work(arg[1], this->dep(1).nnz()) << "; rr!=" + << g.work(res[0], this->nnz()) << "+" << s_.stop_ + << "; rr+=" << s_.step_ << ")"; + g.body << " *rr " << (Add?"+=":"=") << " *ss++;" << endl; + } + + template + void SetNonzerosSlice2::generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const { + // Copy first argument if not inplace + if (arg[0]!=res[0]) { + g.body << " " << g.copy_n(g.work(arg[0], this->dep(0).nnz()), this->nnz(), + g.work(res[0], this->nnz())) << endl; + } + + // Perform the operation inplace + g.body << " for (rr=" << g.work(res[0], this->nnz()) << "+" << outer_.start_ + << ", ss=" << g.work(arg[1], this->dep(1).nnz()) << "; rr!=" + << g.work(res[0], this->nnz()) << "+" << outer_.stop_ + << "; rr+=" << outer_.step_ << ")"; + g.body << " for (tt=rr+" << inner_.start_ << "; tt!=rr+" << inner_.stop_ + << "; tt+=" << inner_.step_ << ")"; + g.body << " *tt " << (Add?"+=":"=") << " *ss++;" << endl; + } + + template + void SetNonzerosSlice::simplifyMe(MX& ex) { + // Simplify if addition + if (isAssignment()) { + MX t = this->dep(1); + if (Add) { + ex += t; + } else { + ex = t; + } + } + } + +} // namespace casadi + +/// \endcond + +#endif // CASADI_SETNONZEROS_IMPL_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/solve.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/solve.hpp new file mode 100755 index 0000000..cb338c1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/solve.hpp @@ -0,0 +1,113 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SOLVE_HPP +#define CASADI_SOLVE_HPP + +#include "mx_node.hpp" +#include "casadi_call.hpp" +#include "../function/linear_solver.hpp" +/// \cond INTERNAL + +namespace casadi { + /** \brief An MX atomic for linear solver solution: x = r * A^-1 or x = r * A^-T + + Forward derivatives: + x_dot = (r_dot - x * A_dot) * A^-1 + + Adjoint derivatives: + r_bar = x_bar * A^-T + A_bar = -x^T * r_bar + + \author Joel Andersson + \date 2013 + */ + template + class CASADI_EXPORT Solve : public MXNode { + public: + + /** \brief Constructor */ + Solve(const MX& r, const MX& A, const LinearSolver& linear_solver); + + /** \brief Destructor */ + virtual ~Solve() {} + + /** \brief Clone function */ + virtual Solve* clone() const { return new Solve(*this);} + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Get the operation */ + virtual int getOp() const { return OP_SOLVE;} + + /// Can the operation be performed inplace (i.e. overwrite the result) + virtual int numInplace() const { return 1;} + + /** \brief Number of functions */ + virtual int numFunctions() const {return 1;} + + /** \brief Get function reference */ + virtual const Function& getFunction(int i) const { return linear_solver_;} + + /** \brief Deep copy data members */ + virtual void deepCopyMembers(std::map& already_copied); + + /** \brief Get required length of w field */ + virtual size_t sz_w() const { return sparsity().size1();} + + /// Linear Solver (may be shared between multiple nodes) + LinearSolver linear_solver_; + }; + + +} // namespace casadi + +/// \endcond + +#endif // CASADI_SOLVE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/solve_impl.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/solve_impl.hpp new file mode 100755 index 0000000..6f22b63 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/solve_impl.hpp @@ -0,0 +1,124 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SOLVE_IMPL_HPP +#define CASADI_SOLVE_IMPL_HPP + +#include "solve.hpp" +#include "../function/linear_solver_internal.hpp" +/// \cond INTERNAL + +using namespace std; + +namespace casadi { + + template + Solve::Solve(const MX& r, const MX& A, const LinearSolver& linear_solver) : + linear_solver_(linear_solver) { + casadi_assert_message(r.size1() == A.size2(), "Solve::Solve: dimension mismatch."); + setDependencies(r, A); + setSparsity(r.sparsity()); + } + + template + std::string Solve::print(const std::vector& arg) const { + std::stringstream ss; + ss << "(" << arg.at(1); + if (Tr) ss << "'"; + ss << "\\" << arg.at(0) << ")"; + return ss.str(); + } + + template + void Solve::evalD(const double** arg, double** res, + int* iw, double* w) { + if (arg[0]!=res[0]) copy(arg[0], arg[0]+dep(0).nnz(), res[0]); + linear_solver_.setInputNZ(arg[1], LINSOL_A); + linear_solver_.prepare(); + linear_solver_.solve(res[0], dep(0).size2(), Tr); + } + + template + void Solve::evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w) { + linear_solver_->evalSXLinsol(arg, res, iw, w, Tr, dep(0).size2()); + } + + template + void Solve::evalMX(const std::vector& arg, std::vector& res) { + if (arg[0].isZero()) { + res[0] = MX(arg[0].shape()); + } else { + res[0] = linear_solver_->solve(arg[1], arg[0], Tr); + } + } + + template + void Solve::evalFwd(const std::vector >& fseed, + std::vector >& fsens) { + // Nondifferentiated inputs and outputs + vector arg(ndep()); + for (int i=0; i res(nout()); + for (int i=0; icallForwardLinsol(arg, res, fseed, fsens, Tr); + } + + template + void Solve::evalAdj(const std::vector >& aseed, + std::vector >& asens) { + // Nondifferentiated inputs and outputs + vector arg(ndep()); + for (int i=0; i res(nout()); + for (int i=0; icallReverseLinsol(arg, res, aseed, asens, Tr); + } + + template + void Solve::spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w) { + linear_solver_->spFwdLinsol(arg, res, iw, w, Tr, dep(0).size2()); + } + + template + void Solve::spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w) { + linear_solver_->spAdjLinsol(arg, res, iw, w, Tr, dep(0).size2()); + } + + template + void Solve::deepCopyMembers(std::map& already_copied) { + MXNode::deepCopyMembers(already_copied); + linear_solver_ = deepcopy(linear_solver_, already_copied); + } + +} // namespace casadi + +/// \endcond + +#endif // CASADI_SOLVE_IMPL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/split.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/split.hpp new file mode 100755 index 0000000..3742cc8 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/split.hpp @@ -0,0 +1,195 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SPLIT_HPP +#define CASADI_SPLIT_HPP + +#include "multiple_output.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + + /** \brief Split: Split into multiple expressions splitting the nonzeros + \author Joel Andersson + \date 2014 + */ + class CASADI_EXPORT Split : public MultipleOutput { + public: + /// Constructor + Split(const MX& x, const std::vector& offset); + + /// Destructor + virtual ~Split() = 0; + + /** \brief Number of outputs */ + virtual int nout() const { return output_sparsity_.size(); } + + /** \brief Get the sparsity of output oind */ + virtual const Sparsity& sparsity(int oind) const { return output_sparsity_.at(oind);} + + /// Evaluate the function (template) + template + void evalGen(const T** arg, T** res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + // Sparsity pattern of the outputs + std::vector offset_; + std::vector output_sparsity_; + }; + + /** \brief Horizontal split, x -> x0, x1, ... + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT Horzsplit : public Split { + public: + + /// Constructor + Horzsplit(const MX& x, const std::vector& offset); + + /// Destructor + virtual ~Horzsplit() {} + + /// Clone function + virtual Horzsplit* clone() const { return new Horzsplit(*this);} + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_HORZSPLIT;} + + /// Create a horizontal concatenation node + virtual MX getHorzcat(const std::vector& x) const; + }; + + /** \brief Diag split, x -> x0, x1, ... + \author Joris Gillis + \date 2014 + */ + class CASADI_EXPORT Diagsplit : public Split { + public: + + /// Constructor + Diagsplit(const MX& x, const std::vector& offset1, const std::vector& offset2); + + /// Destructor + virtual ~Diagsplit() {} + + /// Clone function + virtual Diagsplit* clone() const { return new Diagsplit(*this);} + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_DIAGSPLIT;} + + /// Create a diagonal concatenation node + virtual MX getDiagcat(const std::vector& x) const; + }; + + /** \brief Vertical split of vectors, x -> x0, x1, ... + \author Joel Andersson + \date 2014 + */ + class CASADI_EXPORT Vertsplit : public Split { + public: + + /// Constructor + Vertsplit(const MX& x, const std::vector& offset); + + /// Destructor + virtual ~Vertsplit() {} + + /// Clone function + virtual Vertsplit* clone() const { return new Vertsplit(*this);} + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_VERTSPLIT;} + + /// Create a vertical concatenation node (vectors only) + virtual MX getVertcat(const std::vector& x) const; + }; + +} // namespace casadi + +/// \endcond + +#endif // CASADI_SPLIT_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/subassign.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/subassign.hpp new file mode 100755 index 0000000..d033327 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/subassign.hpp @@ -0,0 +1,98 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SUBASSIGN_HPP +#define CASADI_SUBASSIGN_HPP + +#include "mx_node.hpp" +#include +#include +/// \cond INTERNAL + +namespace casadi { + /** \brief Reference to a submatrix + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT SubAssign : public MXNode { + public: + + /// Constructor + SubAssign(const MX& x, const MX& y, const Slice& i, const Slice& j); + + /// Clone function + virtual SubAssign* clone() const; + + /// Destructor + virtual ~SubAssign() {} + + /// Evaluate the function (template) + template + void evalGen(const T* const* arg, T* const* res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_SUBASSIGN;} + + /// Data members + Slice i_, j_; + }; + +} // namespace casadi + +/// \endcond + +#endif // CASADI_SUBASSIGN_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/subref.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/subref.hpp new file mode 100755 index 0000000..f9e72bf --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/subref.hpp @@ -0,0 +1,98 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SUBREF_HPP +#define CASADI_SUBREF_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + /** \brief Reference to a submatrix + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT SubRef : public MXNode { + public: + + /// Constructor + SubRef(const MX& x, const Slice& i, const Slice& j); + + /// Clone function + virtual SubRef* clone() const; + + /// Destructor + virtual ~SubRef() {} + + /// Evaluate the function (template) + template + void evalGen(const T* const* arg, T* const* res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_SUBREF;} + + /// Data members + Slice i_, j_; + }; + +} // namespace casadi + +/// \endcond + +#endif // CASADI_SUBREF_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/symbolic_mx.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/symbolic_mx.hpp new file mode 100755 index 0000000..af0a707 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/symbolic_mx.hpp @@ -0,0 +1,117 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SYMBOLIC_MX_HPP +#define CASADI_SYMBOLIC_MX_HPP + +#include "mx_node.hpp" + +/// \cond INTERNAL + +namespace casadi { + /** \brief Represents a symbolic MX + \author Joel Andersson + \date 2010 + A regular user is not supposed to work with this Node class. + This user can call MX(name, n, m) directly. + */ + class CASADI_EXPORT SymbolicMX : public MXNode { + public: + + /** \brief Constructors */ + explicit SymbolicMX(const std::string& name, int nrow=1, int ncol=1); + + /** \brief Constructors */ + explicit SymbolicMX(const std::string& name, const Sparsity & sp); + + /// Destructor + virtual ~SymbolicMX() {} + + /** \brief Clone function */ + virtual SymbolicMX* clone() const; + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Get the name */ + virtual const std::string& getName() const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_PARAMETER;} + + /** \brief Check if valid function input */ + virtual bool isValidInput() const { return true;} + + /** \brief Get the number of symbolic primitives */ + virtual int numPrimitives() const { return 1;} + + /** \brief Get symbolic primitives */ + virtual void getPrimitives(std::vector::iterator& it) const; + + /** \brief Split up an expression along symbolic primitives */ + virtual void splitPrimitives(const MX& x, std::vector::iterator& it) const; + + /** \brief Join an expression along symbolic primitives */ + virtual MX joinPrimitives(std::vector::const_iterator& it) const; + + /** \brief Detect duplicate symbolic expressions */ + virtual bool hasDuplicates(); + + /** \brief Reset the marker for an input expression */ + virtual void resetInput(); + + protected: + // Name of the variable + std::string name_; + }; + +} // namespace casadi + +/// \endcond + +#endif // CASADI_SYMBOLIC_MX_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/transpose.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/transpose.hpp new file mode 100755 index 0000000..b96bd30 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/transpose.hpp @@ -0,0 +1,154 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_TRANSPOSE_HPP +#define CASADI_TRANSPOSE_HPP + +#include "mx_node.hpp" +#include +#include + +/// \cond INTERNAL + +namespace casadi { + /** \brief Matrix transpose + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT Transpose : public MXNode { + public: + + /// Constructor + Transpose(const MX& x); + + /// Clone function + virtual Transpose* clone() const { return new Transpose(*this);} + + /// Destructor + virtual ~Transpose() {} + + /// Evaluate the function (template) + template + void evalGen(const T* const* arg, T* const* res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, + bvec_t** res, int* iw, bvec_t* w); + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Get the operation */ + virtual int getOp() const { return OP_TRANSPOSE;} + + /** \brief Get required length of iw field */ + virtual size_t sz_iw() const { return size2()+1;} + + /// Transpose + virtual MX getTranspose() const { return dep();} + + /// Solve for square linear system + //virtual MX getSolve(const MX& r, bool tr, const LinearSolver& linear_solver) const { + // return dep()->getSolve(r, !tr, linear_solver);} // FIXME #1001 + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const { + return sameOpAndDeps(node, depth); + } + }; + + /** \brief Matrix transpose (dense) + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT DenseTranspose : public Transpose { + public: + + /// Constructor + DenseTranspose(const MX& x) : Transpose(x) {} + + /// Clone function + virtual DenseTranspose* clone() const { return new DenseTranspose(*this);} + + /// Destructor + virtual ~DenseTranspose() {} + + /// Evaluate the function (template) + template + void evalGen(const T* const* arg, T* const* res, int* iw, T* w); + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /** \brief Get required length of iw field */ + virtual size_t sz_iw() const { return 0;} + }; + + + +} // namespace casadi + +/// \endcond + +#endif // CASADI_TRANSPOSE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/unary_mx.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/unary_mx.hpp new file mode 100755 index 0000000..4b5d35e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/mx/unary_mx.hpp @@ -0,0 +1,108 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_UNARY_MX_HPP +#define CASADI_UNARY_MX_HPP + +#include "mx_node.hpp" +/// \cond INTERNAL + +namespace casadi { + /** \brief Represents a general unary operation on an MX + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT UnaryMX : public MXNode { + public: + + /** \brief Constructor is private, use "create" below */ + UnaryMX(Operation op, MX x); + + /** \brief Destructor */ + virtual ~UnaryMX() {} + + /** \brief Clone function */ + virtual UnaryMX * clone() const; + + /** \brief Print expression */ + virtual std::string print(const std::vector& arg) const; + + /// Evaluate the function numerically + virtual void evalD(const double** arg, double** res, int* iw, double* w); + + /// Evaluate the function symbolically (SX) + virtual void evalSX(const SXElement** arg, SXElement** res, + int* iw, SXElement* w); + + /** \brief Evaluate symbolically (MX) */ + virtual void evalMX(const std::vector& arg, std::vector& res); + + /** \brief Calculate forward mode directional derivatives */ + virtual void evalFwd(const std::vector >& fseed, + std::vector >& fsens); + + /** \brief Calculate reverse mode directional derivatives */ + virtual void evalAdj(const std::vector >& aseed, + std::vector >& asens); + + /** \brief Propagate sparsity forward */ + virtual void spFwd(const bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Propagate sparsity backwards */ + virtual void spAdj(bvec_t** arg, bvec_t** res, int* iw, bvec_t* w); + + /** \brief Check if unary operation */ + virtual bool isUnaryOp() const { return true;} + + /** \brief Get the operation */ + virtual int getOp() const { return op_;} + + /** \brief Generate code for the operation */ + virtual void generate(const std::vector& arg, const std::vector& res, + CodeGenerator& g) const; + + /// Can the operation be performed inplace (i.e. overwrite the result) + virtual int numInplace() const { return 1;} + + /// Get a unary operation + virtual MX getUnary(int op) const; + + /// Get a binary operation operation + virtual MX getBinary(int op, const MX& y, bool scX, bool scY) const; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const MXNode* node, int depth) const { + return sameOpAndDeps(node, depth); + } + + //! \brief operation + Operation op_; + }; + +} // namespace casadi + +/// \endcond + +#endif // CASADI_UNARY_MX_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/options_functionality.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/options_functionality.hpp new file mode 100755 index 0000000..569ed9e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/options_functionality.hpp @@ -0,0 +1,322 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_OPTIONS_FUNCTIONALITY_HPP +#define CASADI_OPTIONS_FUNCTIONALITY_HPP + +#include "generic_type.hpp" +#include "shared_object.hpp" +#include + +namespace casadi { + + // Forward declaration + class OptionsFunctionalityNode; + +/** \brief Provides options setting/getting functionality + + Gives a derived class the ability to set and retrieve options in a convenient way. + It also contains error checking, making sure that the option exists + and that the value type is correct. + + A derived class should add option names, types and default values to the corresponding vectors. + + + \author Joel Andersson + \date 2010 + Joel Andersson, K.U. Leuven 2010 + joel.andersson@esat.kuleuven.be +*/ +class CASADI_EXPORT OptionsFunctionality : public SharedObject { + public: + /// Default constructor + OptionsFunctionality(); + + /// Destructor + ~OptionsFunctionality(); + + /// Access a member function or object + OptionsFunctionalityNode* operator->(); + + /// Const access a member function or object + const OptionsFunctionalityNode* operator->() const; + +/// \name Option Functionality +/// @{ + + /** \brief [DEPRECATED: pass option dictionary to function constructor] + Set an option. + For a list of options, check the class documentation of this class. + + The setOptions are only considered before the init function. + If properties changes, the init function should be called again. + */ + void setOption(const std::string &str, const GenericType& val); + + /** \brief [DEPRECATED: pass option dictionary to function constructor] + Set a set of options. + For a list of options, check the class documentation of this class. + + The setOptions are only considered before the init function. + If properties changes, the init function should be called again. + */ + void setOption(const Dict& dict, bool skipUnknown = false); + + /** \brief get an option value */ + GenericType getOption(const std::string &str) const; + + /** \brief check if there is an option str */ + bool hasOption(const std::string &str) const; + + /** \brief check if the user has there is an option str */ + bool hasSetOption(const std::string &str) const; + + /** \brief Print options to a stream */ + void printOptions(std::ostream &stream=casadi::userOut()) const; + + /** \brief Copy all options from another object*/ + void copyOptions(const OptionsFunctionality& obj, bool skipUnknown = false); + + /** \brief Get the dictionary */ + const Dict& dictionary() const; + +/// @} + /** \brief Get a list of all option names */ + std::vector getOptionNames() const; + + /** \brief Get the description of a certain option */ + std::string getOptionDescription(const std::string &str) const; + + /** \brief Get the type of a certain option */ + TypeID getOptionType(const std::string &str) const; + + /** \brief Get the type name of a certain option */ + std::string getOptionTypeName(const std::string &str) const; + + /** \brief Get the allowed values of a certain option */ + std::vector getOptionAllowed(const std::string &str) const; + + /// \cond INTERNAL + /** \brief Get the index into allowed options of a certain option */ + int getOptionAllowedIndex(const std::string &name) const; + + /** \brief Set a certain option by giving its index into the allowed values */ + void setOptionByAllowedIndex(const std::string &name, int i); + + /** \brief Get the enum value corresponding to th certain option */ + int getOptionEnumValue(const std::string &name) const; + + /** \brief Set a certain option by giving an enum value */ + void setOptionByEnumValue(const std::string &name, int v); + /// \endcond + + /** \brief Get the default of a certain option */ + GenericType getOptionDefault(const std::string &str) const; + + /// Check if a particular cast is allowed + static bool testCast(const SharedObjectNode* ptr); + + // Add an option to the recipe list + static Dict addOptionRecipe(const Dict& dict, const std::string& recipe); + +}; + +/// \cond INTERNAL +#ifndef SWIG + +/** \brief Internal class + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT OptionsFunctionalityNode : public SharedObjectNode { + friend class OptionsFunctionality; + public: + +/// Constructor, destructor +OptionsFunctionalityNode(); +virtual ~OptionsFunctionalityNode(); + + /** \brief set an option. + The setOptions are in general only considered before the init function, if any. + If properties changes, the init function should be called again. + (Ticket #54) + */ + void setOption(const std::string &str, const GenericType& val); + + /** \brief set a set of options. + The setOptions are in general only considered before the init function, if any. + If properties changes, the init function should be called again. + (Ticket #54) + */ + void setOption(const Dict& dict, bool skipUnknown = false); + + /** \brief Get a list of all option names */ + std::vector getOptionNames() const; + + /** \brief Get the description of a certain option */ + std::string getOptionDescription(const std::string &str) const; + + /** \brief Get the type of a certain option */ + TypeID getOptionType(const std::string &str) const; + + /** \brief Get the type name of a certain option */ + std::string getOptionTypeName(const std::string &str) const; + + /** \brief Get the default of a certain option */ + GenericType getOptionDefault(const std::string &str) const; + + #ifndef SWIG + /** \brief Get the allowed values of a certain option */ + std::vector getOptionAllowed(const std::string &str) const; + #endif // SWIG + + /** \brief Get the index into allowed options of a certain option */ + int getOptionAllowedIndex(const std::string &name) const; + + /** \brief Set a certain option by giving its index into the allowed values */ + void setOptionByAllowedIndex(const std::string &name, int i); + + /** \brief Get the enum value corresponding to th certain option */ + int getOptionEnumValue(const std::string &name) const; + + /** \brief Set a certain option by giving an enum value */ + void setOptionByEnumValue(const std::string &name, int v); + + /** \brief check if there is an option str */ + bool hasOption(const std::string &str) const; + + /** \brief check if the user has there is an option str */ + bool hasSetOption(const std::string &str) const; + + /** \brief Print options to a stream */ + void printOptions(std::ostream &stream=casadi::userOut()) const; + + /** \brief Print all information there is to know about a certain option */ + void printOption(const std::string &name, std::ostream &stream = userOut()) const; + + /** \brief get an option value */ + GenericType getOption(const std::string &str) const; + + /** \brief Print description */ + virtual void print(std::ostream &stream) const = 0; + + /** \brief Print representation */ + virtual void repr(std::ostream &stream) const; + + /** \brief Copy all options from another object*/ + void copyOptions(const OptionsFunctionality& obj, bool skipUnknown = false); + + /** \brief Get the dictionary */ + const Dict& dictionary() const; + + /** \brief Get the best suggestions for a misspelled word using a dictionary + * + * \param[in] word The word that is misspelled + * \param[in] dictionary A list of correct words + * \param[out] suggestions The list of suggestions generated. This list will be cleared and filled. + * \param[in] amount Maximum number of suggestions + * + * \return Some metric for confidence about the best match + */ + static double getBestMatches(const std::string & word, + const std::vector &dictionary, + std::vector &suggestions, int amount = 5); + + /** \brief Get th ebest suggestions of option names + */ + double getBestMatches(const std::string & name, std::vector &suggestions, + int amount = 5) const; + + + /** \brief A distance metric between two words */ + static double wordDistance(const std::string &a, const std::string &b); + + + void addOption( + const std::string &str, const TypeID& type, + const GenericType &def_val=GenericType(), const std::string& desc="n/a", + const std::vector &allowed_vals = std::vector(), + bool inherit = false, std::vector enum_values= std::vector(), + std::vector enum_descr= std::vector()); + /** \brief Add an option + * + * allowed_vals can take multiple forms: + * "foo|bar" -> specifies that the values "foo" and "bar" are allowed + * "foo:5|bar:6" -> specifies that the values "foo" and "bar" are allowed and map + * to 5 and 6 respectively + * "foo:5:description_foo|bar:6:description_bar|" -> same as above, but specifies documentation + * + **/ + void addOption(const std::string &str, const TypeID& type, const GenericType &def_val, + const std::string& desc, const std::string &allowed_vals, bool inherit = false); + + // Set default options according to defaults_recipe + void setDefaultOptions(); + + /// Set a recipe to populate default options + virtual void setDefaultOptions(const std::vector& recipes) {} + +protected: + +void assert_exists(const std::string &str) const; + + +/** \brief Sets the default value for an option without changing the current value +*/ +void setDefault(const std::string &str, const GenericType &def_val); + +private: + +/** \brief Allowed options */ + std::map allowed_options; + +/** \brief User-set options */ + Dict dictionary_; + +/** \brief Option defaults */ + Dict defaults_; + +/** \brief Description for the options */ + std::map description_; + +/** \brief Allowed values for the options */ + std::map > allowed_vals_; + +/** \brief Enum values */ + std::map > enum_values_; + +/** \brief Enum descriptions */ + std::map > enum_descr_; + +}; + +#endif // SWIG + +/// \endcond + +} // namespace casadi + + +#endif // OPTIONS_FUNCTIONALITY diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/polynomial.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/polynomial.hpp new file mode 100755 index 0000000..fd180e6 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/polynomial.hpp @@ -0,0 +1,124 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_POLYNOMIAL_HPP +#define CASADI_POLYNOMIAL_HPP + +# include "printable_object.hpp" + +namespace casadi { + + /** \brief Helper class for differentiating and integrating polynomials + \author Joel Andersson + \date 2014 + */ + class CASADI_EXPORT Polynomial : public PrintableObject { + public: + /// Floating point type + typedef long double real_t; + + /// Construct a constant polynomial + Polynomial(real_t scalar=1); + + /// Construct a linear polynomial + Polynomial(real_t p0, real_t p1); + + /// Construct a quadratic polynomial + Polynomial(real_t p0, real_t p1, real_t p2); + + /// Construct a cubic polynomial + Polynomial(real_t p0, real_t p1, real_t p2, real_t p3); + + /// Construct from a vector of polynomial coefficients + template + Polynomial(const std::vector& coeff) : p_(coeff.begin(), coeff.end()) {} + + /// Evaluate numerically + template + T operator()(const T& x) const { + std::vector::const_reverse_iterator it = p_.rbegin(); + T ret = *it++; + while (it!=p_.rend()) { + ret *= x; + ret += *it++; + } + return ret; + } + + /// Degree of the polynomial + int degree() const; + + /// Get scalar value (error if degree()!=0) + real_t toScalar() const; + + /// Create a new polynomial for the derivative + Polynomial derivative() const; + + /// Create a new polynomial for the anti-derivative (primitive function) + Polynomial anti_derivative() const; + + /// Remove excess zeros + void trim(); + + /// Print a description of the object + void print(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Print a representation of the object + void repr(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + // Add + Polynomial operator+(const Polynomial& b) const; + + // Add (in-place) + Polynomial& operator+=(const Polynomial& b); + + // Subtract + Polynomial operator-(const Polynomial& b) const; + + // Subtract (in-place) + Polynomial& operator-=(const Polynomial& b); + + // Multiply + Polynomial operator*(const Polynomial& b) const; + + // Multiply (in-place) + Polynomial& operator*=(const Polynomial& b); + + // Divide by constant + Polynomial operator/(real_t b) const; + + // Divide by constant (in-place) + Polynomial& operator/=(real_t b); + + + protected: + std::vector p_; + }; + +} // namespace casadi + + +#endif // CASADI_POLYNOMIAL_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/printable_object.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/printable_object.hpp new file mode 100755 index 0000000..680af88 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/printable_object.hpp @@ -0,0 +1,92 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_PRINTABLE_OBJECT_HPP +#define CASADI_PRINTABLE_OBJECT_HPP + +#include +#include +#include +#include +#include + +#include "casadi_common.hpp" +#include "casadi_types.hpp" + +namespace casadi { + + /** \brief Base class for objects that have a natural string representation + \author Joel Andersson + \date 2010-2014 + */ + template + class CASADI_EXPORT PrintableObject { + public: + + /// Return a string with a description (for SWIG) + std::string getDescription() const { + std::stringstream ss; + static_cast(this)->print(ss, false); + return ss.str(); + } + + /// Return a string with a representation (for SWIG) + std::string getRepresentation() const { + std::stringstream ss; + static_cast(this)->repr(ss, false); + return ss.str(); + } + +#ifndef SWIG + /// Print a representation of the object to a stream (shorthand) + inline friend + std::ostream& operator<<(std::ostream &stream, const PrintableObject& obj) { + static_cast(obj).repr(stream, false); + return stream; + } +#endif // SWIG +/** +\ingroup expression_tools +@{ +*/ + +#if !defined(SWIG) || defined(DOXYGEN) + /// Return a string with a description of the object, cf. str(Object) in Python + inline friend std::string str(const PrintableObject& obj) { + return obj.getDescription(); + } + + /// Return a string with a representation of the object, cf. repr(Object) in Python + inline friend std::string repr(const PrintableObject& obj) { + return obj.getRepresentation(); + } +/** @} */ +#endif // + + }; +} // namespace casadi + + +#endif // CASADI_PRINTABLE_OBJECT_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/profiling.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/profiling.hpp new file mode 100755 index 0000000..f7546fa --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/profiling.hpp @@ -0,0 +1,270 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_PROFILING_HPP +#define CASADI_PROFILING_HPP + +#include +#include +#include + +#include "casadi_common.hpp" + +namespace casadi { +/// \cond INTERNAL + +/* + * Author: David Robert Nadeau + * Site: http://NadeauSoftware.com/ + * License: Creative Commons Attribution 3.0 Unported License + * http://creativecommons.org/licenses/by/3.0/deed.en_US + */ + +/** + * Returns the real time, in seconds, or -1.0 if an error occurred. + * + * Time is measured since an arbitrary and OS-dependent start time. + * The returned real time is only useful for computing an elapsed time + * between two calls to this function. + */ +CASADI_EXPORT double getRealTime(); + +enum ProfilingData_Type { ProfilingData_Type_TIMELINE, + ProfilingData_Type_SOURCE, + ProfilingData_Type_NAME, + ProfilingData_Type_ENTRY, + ProfilingData_Type_EXIT, + ProfilingData_Type_IO }; + +enum ProfilingData_FunctionType { ProfilingData_FunctionType_MXFunction, + ProfilingData_FunctionType_SXFunction, + ProfilingData_FunctionType_Other }; + +struct ProfilingHeader { + ProfilingData_Type type; +}; + +struct ProfilingData_TIMELINE { + double local; + double total; + long thisp; + int line_number; +}; + +struct ProfilingData_SOURCE { + long thisp; + int line_number; + int length; + int opcode; + long dependency; +}; + +struct ProfilingData_NAME { + long thisp; + int length; + ProfilingData_FunctionType type; + int algorithm_size; + int numin; + int numout; +}; + +struct ProfilingData_IO { + int nrow; + int ncol; + int ndata; +}; + +struct ProfilingData_ENTRY { + long thisp; +}; + +struct ProfilingData_EXIT { + double total; + long thisp; +}; + +template +ProfilingData_Type ProfilingType(); + +template<> +inline ProfilingData_Type ProfilingType() +{ return ProfilingData_Type_TIMELINE; } +template<> +inline ProfilingData_Type ProfilingType() +{ return ProfilingData_Type_SOURCE; } +template<> +inline ProfilingData_Type ProfilingType() +{ return ProfilingData_Type_NAME; } +template<> +inline ProfilingData_Type ProfilingType() +{ return ProfilingData_Type_ENTRY; } +template<> +inline ProfilingData_Type ProfilingType() +{ return ProfilingData_Type_EXIT; } +template<> +inline ProfilingData_Type ProfilingType() +{ return ProfilingData_Type_IO; } + + +template +void profileWrite(std::ofstream &f, const T& s) { + ProfilingHeader hd; + hd.type = ProfilingType(); + f.write(reinterpret_cast(&hd), sizeof(hd)); + f.write(reinterpret_cast(&s), sizeof(s)); +} + +template +void profileWriteBare(std::ofstream &f, const T& s) { + f.write(reinterpret_cast(&s), sizeof(s)); +} + +template +long ptrToLong(T *a) { + long r; + std::memcpy(&r, &a, sizeof(T*)); + return r; +} + +template +void profileWriteName(std::ofstream &f, T *a, const std::string &name, + ProfilingData_FunctionType type, int algorithm_size) { + ProfilingData_NAME s; + s.thisp=ptrToLong(a); + s.length=name.size(); + s.type = type; + s.algorithm_size = algorithm_size; + s.numin = a->nIn(); + s.numout = a->nOut(); + profileWrite(f, s); + f << name; + for (int i=0;iinput(i).size1(); + ss.ncol = a->input(i).size2(); + ss.ndata = a->input(i).nnz(); + profileWriteBare(f, ss); + } + for (int i=0;ioutput(i).size1(); + ss.ncol = a->output(i).size2(); + ss.ndata = a->output(i).nnz(); + profileWriteBare(f, ss); + } +} + +template +void profileWriteEntry(std::ofstream &f, T *a) { + ProfilingData_ENTRY s; + s.thisp=ptrToLong(a); + profileWrite(f, s); +} + +template +void profileWriteExit(std::ofstream &f, T *a, double total) { + ProfilingData_EXIT s; + s.thisp=ptrToLong(a); + s.total=total; + profileWrite(f, s); +} + +template +void profileWriteTime(std::ofstream &f, T *a, int line_number, double local, double total) { + ProfilingData_TIMELINE s; + s.local = local; + s.total = total; + s.thisp = ptrToLong(a); + s.line_number = line_number; + profileWrite(f, s); +} + +template +void profileWriteTime(std::ofstream &f, T *a, int line_number, double local) { + ProfilingData_TIMELINE s; + s.local = local; + s.total = 0; + s.thisp = ptrToLong(a); + s.line_number = line_number; + profileWrite(f, s); +} + + +template +void profileWriteSourceLineDep(std::ofstream &f, T *a, int line_number, + const std::string &sourceline, int opcode, T2 *dependency) { + ProfilingData_SOURCE s; + s.thisp = ptrToLong(a); + s.line_number = line_number; + s.length = sourceline.size(); + s.opcode = opcode; + s.dependency = ptrToLong(dependency); + profileWrite(f, s); + f << sourceline; +} + +template +void profileWriteSourceLineDep(std::ofstream &f, T *a, int line_number, + const std::string &sourceline, T2 *dependency) { + ProfilingData_SOURCE s; + s.thisp = ptrToLong(a); + s.line_number = line_number; + s.length = sourceline.size(); + s.opcode = -1; + s.dependency = ptrToLong(dependency); + profileWrite(f, s); + f << sourceline; +} + +template +void profileWriteSourceLine(std::ofstream &f, T *a, int line_number, + const std::string &sourceline, int opcode) { + ProfilingData_SOURCE s; + s.thisp = ptrToLong(a); + s.line_number = line_number; + s.length = sourceline.size(); + s.opcode = opcode; + s.dependency = 0; + profileWrite(f, s); + f << sourceline; +} + +template +void profileWriteSourceLine(std::ofstream &f, T *a, int line_number, + const std::string &sourceline) { + ProfilingData_SOURCE s; + s.thisp = ptrToLong(a); + s.line_number = line_number; + s.length = sourceline.size(); + s.opcode = -1; + s.dependency = 0; + profileWrite(f, s); + f << sourceline; +} + +/// \endcond +} // namespace casadi + +#endif // CASADI_PROFILING_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/runtime/runtime.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/runtime/runtime.hpp new file mode 100755 index 0000000..940f225 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/runtime/runtime.hpp @@ -0,0 +1,453 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CASADI_RUNTIME_HPP +#define CASADI_CASADI_RUNTIME_HPP + +#include +#define CASADI_PREFIX(ID) casadi_##ID + +/// \cond INTERNAL +namespace casadi { + /// COPY: y <-x + template + void CASADI_PREFIX(copy_n)(const real_t* x, int n, real_t* y); + + /// SWAP: x <-> y + template + void CASADI_PREFIX(swap)(int n, real_t* x, int inc_x, real_t* y, int inc_y); + + /// Sparse copy: y <- x, w work vector (length >= number of rows) + template + void CASADI_PREFIX(project)(const real_t* x, const int* sp_x, real_t* y, const int* sp_y, real_t* w); + + /// SCAL: x <- alpha*x + template + void CASADI_PREFIX(scal)(int n, real_t alpha, real_t* x, int inc_x); + + /// AXPY: y <- a*x + y + template + void CASADI_PREFIX(axpy)(int n, real_t alpha, const real_t* x, int inc_x, real_t* y, int inc_y); + + /// Inner product + template + real_t CASADI_PREFIX(inner_prod)(int n, const real_t* x, const real_t* y); + + /// ASUM: ||x||_1 -> return + template + real_t CASADI_PREFIX(asum)(int n, const real_t* x, int inc_x); + + /// IAMAX: index corresponding to the entry with the largest absolute value + template + int CASADI_PREFIX(iamax)(int n, const real_t* x, int inc_x); + + /// FILL: x <- alpha + template + void CASADI_PREFIX(fill_n)(real_t* x, int n, real_t alpha); + + /// Sparse matrix-matrix multiplication: z <- z + x*y + template + void CASADI_PREFIX(mm_sparse)(const real_t* x, const int* sp_x, const real_t* y, const int* sp_y, real_t* z, const int* sp_z, real_t* w); + + /// Sparse matrix-matrix multiplication, first factor transposed: z <- z + trans(x)*y + template + void CASADI_PREFIX(mm_sparse_t)(const real_t* x, const int* sp_x, const real_t* y, const int* sp_y, real_t* z, const int* sp_z, real_t* w); + + /// Sparse matrix-vector multiplication: z <- z + x*y + template + void CASADI_PREFIX(mv)(const real_t* x, const int* sp_x, const real_t* y, real_t* z); + + /// Sparse matrix-vector multiplication, first factor transposed: z <- z + trans(x)*y + template + void CASADI_PREFIX(mv_t)(const real_t* x, const int* sp_x, const real_t* y, real_t* z); + + /// NRM2: ||x||_2 -> return + template + real_t CASADI_PREFIX(nrm2)(int n, const real_t* x, int inc_x); + + /// TRANS: y <- trans(x) + template + void CASADI_PREFIX(trans)(const real_t* x, const int* sp_x, real_t* y, const int* sp_y, int *tmp); + + /** Inf-norm of a Matrix-matrix product,* + * \param dwork A real work vector that you must allocate + * Minimum size: y.size1() + * \param iwork A integer work vector that you must allocate + * Minimum size: y.size1()+x.size2()+1 + */ + template + real_t CASADI_PREFIX(norm_inf_mul)(const real_t* x, const int* sp_x, const real_t* y, const int* sp_y, + real_t *dwork, int *iwork); + + /// Calculates inner_prod(x, mul(A, x)) + template + real_t CASADI_PREFIX(quad_form)(const real_t* A, const int* sp_A, const real_t* x); +} + +// Helper functions +namespace casadi { + /// Check if entry is zero (false negative allowed) + inline bool iszero(double x) { return x==0;} +} + +// Implementations + +// Note: due to restrictions of cmake IO processing, make sure that +// 1) semicolons (;) are never immediately preceded by whitespace +// 2) line continuation slashes (\) are always immediately preceded by whitespace +#define CASADI_GEMM_NT(M, N, K, A, LDA, B, LDB, C, LDC) \ + for (i=0, rr=C; i + void CASADI_PREFIX(copy_n)(const real_t* x, int n, real_t* y) { + int i; + for (i=0; i + void CASADI_PREFIX(swap)(int n, real_t* x, int inc_x, real_t* y, int inc_y) { + real_t t; + int i; + for (i=0; i + void CASADI_PREFIX(project)(const real_t* x, const int* sp_x, real_t* y, const int* sp_y, real_t* w) { + int ncol_x = sp_x[1]; + const int *colind_x = sp_x+2, *row_x = sp_x + 2 + ncol_x+1; + int ncol_y = sp_y[1]; + const int *colind_y = sp_y+2, *row_y = sp_y + 2 + ncol_y+1; + /* Loop over columns of x and y */ + int i, el; + for (i=0; i + void CASADI_PREFIX(scal)(int n, real_t alpha, real_t* x, int inc_x) { + int i; + for (i=0; i + void CASADI_PREFIX(axpy)(int n, real_t alpha, const real_t* x, int inc_x, real_t* y, int inc_y) { + int i; + for (i=0; i + real_t CASADI_PREFIX(inner_prod)(int n, const real_t* x, const real_t* y) { + real_t r = 0; + int i; + for (i=0; i + real_t CASADI_PREFIX(asum)(int n, const real_t* x, int inc_x) { + real_t r = 0; + int i; + for (i=0; i + int CASADI_PREFIX(iamax)(int n, const real_t* x, int inc_x) { + real_t t; + real_t largest_value = -1.0; + int largest_index = -1; + int i; + for (i=0; ilargest_value) { + largest_value = t; + largest_index = i; + } + } + return largest_index; + } + + template + void CASADI_PREFIX(fill_n)(real_t* x, int n, real_t alpha) { + int i; + for (i=0; i + void CASADI_PREFIX(mm_sparse)(const real_t* x, const int* sp_x, const real_t* y, const int* sp_y, real_t* z, const int* sp_z, real_t* w) { + /* Get sparsities */ + int ncol_x = sp_x[1]; + const int *colind_x = sp_x+2, *row_x = sp_x + 2 + ncol_x+1; + int ncol_y = sp_y[1]; + const int *colind_y = sp_y+2, *row_y = sp_y + 2 + ncol_y+1; + int ncol_z = sp_z[1]; + const int *colind_z = sp_z+2, *row_z = sp_z + 2 + ncol_z+1; + + int cc,kk, kk1; + /* Loop over the columns of y and z */ + for (cc=0; cc + void CASADI_PREFIX(mm_sparse_t)(const real_t* x, const int* sp_x, const real_t* y, const int* sp_y, real_t* z, const int* sp_z, real_t* w) { + /* Get sparsities */ + int ncol_x = sp_x[1]; + const int *colind_x = sp_x+2, *row_x = sp_x + 2 + ncol_x+1; + int ncol_y = sp_y[1]; + const int *colind_y = sp_y+2, *row_y = sp_y + 2 + ncol_y+1; + int ncol_z = sp_z[1]; + const int *colind_z = sp_z+2, *row_z = sp_z + 2 + ncol_z+1; + + int cc,kk, kk1; + /* Loop over the columns of y and z */ + for (cc=0; cc + void CASADI_PREFIX(mv)(const real_t* x, const int* sp_x, const real_t* y, real_t* z) { + /* Get sparsities */ + int ncol_x = sp_x[1]; + const int *colind_x = sp_x+2, *row_x = sp_x + 2 + ncol_x+1; + + int i, el; + /* loop over the columns of x */ + for (i=0; i + void CASADI_PREFIX(mv_t)(const real_t* x, const int* sp_x, const real_t* y, real_t* z) { + /* Get sparsities */ + int ncol_x = sp_x[1]; + const int *colind_x = sp_x+2, *row_x = sp_x + 2 + ncol_x+1; + + int i, el; + /* loop over the columns of x */ + for (i=0; i + real_t CASADI_PREFIX(nrm2)(int n, const real_t* x, int inc_x) { + real_t r = 0; + int i; + for (i=0; i + void CASADI_PREFIX(trans)(const real_t* x, const int* sp_x, real_t* y, const int* sp_y, int *tmp) { + int ncol_x = sp_x[1]; + int nnz_x = sp_x[2 + ncol_x]; + const int* row_x = sp_x + 2 + ncol_x+1; + int ncol_y = sp_y[1]; + const int* colind_y = sp_y+2; + int k; + for (k=0; k + real_t CASADI_PREFIX(norm_inf_mul)(const real_t* x, const int* sp_x, const real_t* y, const int* sp_y, real_t* dwork, int* iwork) { + real_t res = 0; + /* Get sparsities */ + int nrow_x = sp_x[0], ncol_x = sp_x[1]; + const int *colind_x = sp_x+2, *row_x = sp_x + 2 + ncol_x+1; + int ncol_y = sp_y[1]; + const int *colind_y = sp_y+2, *row_y = sp_y + 2 + ncol_y+1; + + /* Implementation borrowed from Scipy's sparsetools/csr.h */ + /* method that uses O(n) temp storage */ + int *mask = iwork + ncol_y+1; + + int i,jj,kk; + // Pass 1 + for (i=0; i + real_t CASADI_PREFIX(quad_form)(const real_t* A, const int* sp_A, const real_t* x) { + /* Get sparsities */ + int ncol_A = sp_A[1]; + const int *colind_A = sp_A+2, *row_A = sp_A + 2 + ncol_A+1; + + // Return value + real_t ret=0; + + int cc, el; + // Loop over the columns of A + for (cc=0; cc +#include + +namespace casadi { + + // Forward declaration of weak reference class + class WeakRef; + + /// \cond INTERNAL + // Forward declaration of internal class + class SharedObjectNode; + /// \endcond + + /** \brief SharedObject implements a reference counting framework similar for efficient and + easily-maintained memory management. + + To use the class, both the SharedObject class (the public class), and the SharedObjectNode + class (the internal class) must be inherited from. It can be done in two different files + and together with memory management, this approach provides a clear distinction of which + methods of the class are to be considered "public", i.e. methods for public use that can + be considered to remain over time with small changes, and the internal memory. + + When interfacing a software, which typically includes including some header file, + this is best done only in the file where the internal class is defined, to avoid polluting + the global namespace and other side effects. + + The default constructor always means creating a null pointer to an internal class only. + To allocate an internal class (this works only when the internal class isn't abstract), + use the constructor with arguments. + + The copy constructor and the assignment operator perform shallow copies only, + to make a deep copy you must use the clone method explicitly. + This will give a shared pointer instance. + + In an inheritance hierarchy, you can cast down automatically, + e.g. (SXFunction is a child class of Function): + SXFunction derived(...); + Function base = derived; + + To cast up, use the shared_cast template function, which works analogously to + dynamic_cast, static_cast, const_cast etc, e.g.: + SXFunction derived(...); + Function base = derived; + SXFunction derived_from_base = shared_cast(base); + + A failed shared_cast will result in a null pointer (cf. dynamic_cast) + + \author Joel Andersson + \date 2010 + */ + class CASADI_EXPORT SharedObject : public PrintableObject { +#ifndef SWIG + template friend B shared_cast(SharedObject& A); + template friend const B shared_cast(const SharedObject& A); +#endif // SWIG + + public: +#ifndef SWIG + /// Default constructor + SharedObject(); + + /// Copy constructor (shallow copy) + SharedObject(const SharedObject& ref); + + /// Deep copy + SharedObject clone() const; + + /// Destructor + ~SharedObject(); + + /// Assignment operator + SharedObject& operator=(const SharedObject& ref); + + /// \cond INTERNAL + /// Assign the node to a node class pointer (or null) + void assignNode(SharedObjectNode* node); + + /** \brief Assign the node to a node class pointer without reference counting + * + * improper use will cause memory leaks! + */ + void assignNodeNoCount(SharedObjectNode* node); + + /// Get a const pointer to the node + const SharedObjectNode* get() const; + + /// Get a pointer to the node + SharedObjectNode* get(); + + /// Get the reference count + int getCount() const; + + /// Swap content with another instance + void swap(SharedObject& other); + + /// Access a member function or object + SharedObjectNode* operator->(); + + /// Const access a member function or object + const SharedObjectNode* operator->() const; + /// \endcond +#endif // SWIG + + /// Print a representation of the object + void repr(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Print a description of the object + void print(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// \cond INTERNAL + /// Print the pointer to the internal class + void printPtr(std::ostream &stream=casadi::userOut()) const; + /// \endcond + + /** \brief [DEPRECATED] Initialize or re-initialize the object: + * + * more documentation in the node class (SharedObjectNode and derived classes) + */ + void init(bool allow_reinit=true); + + /// Is initialized? + bool isInit() const; + + /// \cond INTERNAL + /// Assert that it is initialized + void assertInit() const; + /// \endcond + + /// Is a null pointer? + bool isNull() const; + + ///@{ + /// \cond SWIGINTERNAL + /** \brief Make unique + * + * If there are other references to the object, then make a deep copy of it + * and point to this new object + */ + void makeUnique(bool clone_members=true); + /// \endcond + /// \cond INTERNAL +#ifndef SWIG + void makeUnique(std::map& already_copied, + bool clone_members=true); +#endif + /// \endcond + ///@} + +/// \cond INTERNAL +#ifndef SWIG + /** \brief Get a weak reference to the object */ + WeakRef* weak(); +#endif // SWIG +/// \endcond + + /** \brief Returns a number that is unique for a given Node. + * If the Object does not point to any node, "0" is returned. + */ + size_t __hash__() const; + + private: + SharedObjectNode *node; + void count_up(); // increase counter of the node + void count_down(); // decrease counter of the node + + }; + +#ifndef SWIG + /// \cond INTERNAL + /// Internal class for the reference counting framework, see comments on the public class. + class CASADI_EXPORT SharedObjectNode { + friend class SharedObject; + public: + + /// Default constructor + SharedObjectNode(); + + /// Copy constructor + SharedObjectNode(const SharedObjectNode& node); + + /// Assignment operator + SharedObjectNode& operator=(const SharedObjectNode& node); + + /// Destructor + virtual ~SharedObjectNode() = 0; + + /// Make a deep copy of the instance + virtual SharedObjectNode* clone() const=0; + + /// Deep copy data members + virtual void deepCopyMembers(std::map& already_copied); + + /// Get the reference count + int getCount() const; + + /// Initialize the object + virtual void init(); + + /// Second pass of the initialization. To be run when init has been completed. + virtual void postinit(); + + /// Check if the object has been initialized + bool isInit() const; + + /// Assert that the object has been initialized + void assertInit() const; + + /// Print a representation of the object + virtual void repr(std::ostream &stream) const; + + /// Print a description of the object + virtual void print(std::ostream &stream) const; + + /** \brief Get a weak reference to the object */ + WeakRef* weak(); + + protected: + /** Called in the constructor of singletons to avoid that the counter reaches zero */ + void initSingleton() { + casadi_assert(count==0); + count++; + } + + /** Called in the destructor of singletons */ + void destroySingleton() { + count--; + } + + /// Get a shared object from the current internal object + template + B shared_from_this(); + + /// Get a shared object from the current internal object + template + const B shared_from_this() const; + + /// Has the function been initialized? + bool is_init_; + + private: + /// Number of references pointing to the object + unsigned int count; + + /// Weak pointer (non-owning) object for the object + WeakRef* weak_ref_; + }; + /// \endcond + + /// \cond INTERNAL + /** \brief Typecast a shared object to a base class to a shared object to a derived class, + * cf. dynamic_cast + */ + template + B shared_cast(SharedObject& A) { + + /// Get a pointer to the node + SharedObjectNode* ptr = A.get(); + + /// Create a return object + B ret; + + /// Quick return if not allowed + if (!B::testCast(ptr)) return ret; + + /// Assign node of B and return + ret.assignNode(ptr); + return ret; + } + + /** \brief Typecast a shared object to a base class to a shared object to a derived class, + * cf. dynamic_cast (const) + */ + template + const B shared_cast(const SharedObject& A) { + SharedObject A_copy = A; + return shared_cast(A_copy); + } + /// \endcond + + /// Check if a shared object is of a certain type + template + bool is_a(const SharedObject& A) { + casadi_assert(!A.isNull()); + return !shared_cast(A).isNull(); + } + + ///@{ + /// Make a deep copy of an object (Note: default is a shallow copy!) + template + A deepcopy(const A& a) { + A ret = a; + ret.makeUnique(); + return ret; + } + + /// \cond INTERNAL + template + A deepcopy(const A& a, std::map& already_copied) { + A ret = a; + ret.makeUnique(already_copied); + return ret; + } + + template + A getcopy(const A& a, std::map& already_copied) { + A ret; + if (!a.isNull()) { + std::map::iterator it = + already_copied.find(const_cast(a.get())); + if (it!=already_copied.end()) { + ret.assignNode(it->second.get()); + } + } + return ret; + } + + template + std::vector
deepcopy(const std::vector& a, + std::map& already_copied) { + std::vector ret = a; + for (typename std::vector::iterator it=ret.begin(); it!=ret.end(); ++it) { + it->makeUnique(already_copied); + } + return ret; + } + /// \endcond + ///@} + + /// \cond INTERNAL + /// Template function implementations + template + B SharedObjectNode::shared_from_this() { + casadi_assert(B::testCast(this)); + B ret; + ret.assignNode(this); + return ret; + } + + template + const B SharedObjectNode::shared_from_this() const { + casadi_assert(B::testCast(this)); + B ret; + ret.assignNode(const_cast(this)); + return ret; + } + /// \endcond + +#endif // SWIG + + +} // namespace casadi + + +#endif // CASADI_SHARED_OBJECT_HPP + diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/std_vector_tools.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/std_vector_tools.hpp new file mode 100755 index 0000000..674b1ca --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/std_vector_tools.hpp @@ -0,0 +1,787 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_STD_VECTOR_TOOLS_HPP +#define CASADI_STD_VECTOR_TOOLS_HPP + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "casadi_exception.hpp" +#include "casadi_types.hpp" + +/** \brief Convenience tools for C++ Standard Library vectors + \author Joel Andersson + \date 2010-2011 +*/ + +namespace std { + +#ifndef SWIG + /// Enables flushing an std::vector to a stream (prints representation) + template + ostream& operator<<(ostream &stream, const vector &v); + + /// Enables flushing an std::pair to a stream (prints representation) + template + ostream& operator<<(ostream &stream, const pair &p); + + /// Enables flushing an std::map to a stream (prints representation) + template + ostream& operator<<(ostream &stream, const std::map &p); + +#endif //SWIG + +} // namespace std + +namespace casadi { + +#ifndef SWIG + /** \brief Range function + * \param start + * \param stop + * \param step + * \param len + * + * Consider a infinitely long list [start, start+step, start+2*step, ...] + * Elements larger than or equal to stop are chopped off. + * + */ + CASADI_EXPORT std::vector range(int start, int stop, int step=1, + int len=std::numeric_limits::max()); + + /** \brief Range function + * \param stop + * + * \return list [0, 1, 2...stop-1] + */ + CASADI_EXPORT std::vector range(int stop); + + /** \brief Slicing vector + * \param v Vector to slice + * \param i List of indices + */ + template + std::vector vector_slice(const std::vector &v, const std::vector &i); + + /** \brief Reverse a list + */ + template + std::vector reverse(const std::vector &v); + + /// Print representation + template + void repr(const std::vector &v, std::ostream &stream=casadi::userOut()); + + /// Print description + template + void print(const std::vector &v, std::ostream &stream=casadi::userOut()); + #endif // SWIG + + /// Check if for each element of v holds: v_i < upper + template + bool inBounds(const std::vector &v, int upper); + + /// Check if for each element of v holds: lower <= v_i < upper + template + bool inBounds(const std::vector &v, int lower, int upper); + + /** \brief swap inner and outer indices of list of lists + * + * \verbatim + * [[apple0,apple1,...],[pear0,pear1,...]] -> + * [[apple0,pear0],[apple1,pear1],...] + * \endverbatim + */ + template + std::vector< std::vector > swapIndices(const std::vector< std::vector > &m); + + /** \brief Returns the list of all i in [0, size[ not found in supplied list + * + * The supplied vector may contain duplicates and may be non-monotonous + * The supplied vector will be checked for bounds + * The result vector is guaranteed to be monotonously increasing + */ + CASADI_EXPORT std::vector complement(const std::vector &v, int size); + + /** \brief Returns a vector for quickly looking up entries of supplied list + * + * lookupvector[i]!=-1 <=> v contains i + * v[lookupvector[i]] == i <=> v contains i + * + * Duplicates are treated by looking up last occurrence + */ + CASADI_EXPORT std::vector lookupvector(const std::vector &v, int size); + + + /// \cond INTERNAL +#ifndef SWIG + /** + Apply a function f to each element in a vector + */ + template + std::vector applymap(T (*f)(const T&), const std::vector&); + + /** + Apply a function f to each element in a vector + */ + template + void applymap(void (*f)(T&), std::vector&); +#endif // SWIG + /// \endcond + + + /// Check if the vector is strictly increasing + template + bool isIncreasing(const std::vector &v); + + /// Check if the vector is strictly decreasing + template + bool isDecreasing(const std::vector &v); + + /// Check if the vector is non-increasing + template + bool isNonIncreasing(const std::vector &v); + + /// Check if the vector is non-decreasing + template + bool isNonDecreasing(const std::vector &v); + + /// Check if the vector is monotone + template + bool isMonotone(const std::vector &v); + + /// Check if the vector is strictly monotone + template + bool isStrictlyMonotone(const std::vector &v); + + /// Check if the vector has negative entries + template + bool hasNegative(const std::vector &v); + +#ifndef SWIG + /// Print representation to string + template + std::string getRepresentation(const std::vector &v); + + /// Print description to string + template + std::string getDescription(const std::vector &v); +#endif //SWIG + + /// Print vector, matlab style + template + void write_matlab(std::ostream &stream, const std::vector &v); + + /// Print matrix, matlab style + template + void write_matlab(std::ostream &stream, const std::vector > &v); + + /// Read vector, matlab style + template + void read_matlab(std::istream &stream, std::vector &v); + + /// Read matrix, matlab style + template + void read_matlab(std::ifstream &file, std::vector > &v); + +#ifndef SWIG + /// Matlab's linspace + template + void linspace(std::vector &v, const F& first, const L& last); + + /// \cond INTERNAL + /// Get an pointer of sets of booleans from a double vector + CASADI_EXPORT bvec_t* get_bvec_t(std::vector& v); + + /// Get an pointer of sets of booleans from a double vector + CASADI_EXPORT const bvec_t* get_bvec_t(const std::vector& v); + + /// Get an pointer of sets of booleans from a double vector + template + bvec_t* get_bvec_t(std::vector& v); + + /// Get an pointer of sets of booleans from a double vector + template + const bvec_t* get_bvec_t(const std::vector& v); + + /// Get a pointer to the data contained in the vector + template + T* getPtr(std::vector &v); + + /// Get a pointer to the data contained in the vector + template + const T* getPtr(const std::vector &v); + + /// \endcond + + /** \brief Sort the data in a vector + * + * \param[in] values the vector that needs sorting + * \param[out] sorted_values the sorted vector + * \param[out] indices The indices such that 'sorted_values= values[indices]' + * \param[in] invert_indices Output indices such that 'sorted_values[indices=values' + **/ + template + void sort(const std::vector &values, std::vector &sorted_values, std::vector &indices, + bool invert_indices =false); + + + /** \brief cumulative sum + * + */ + template + std::vector cumsum(const std::vector &values); + + /** \brief cumulative sum, starting with zero + * + */ + template + std::vector cumsum0(const std::vector &values); +#endif //SWIG + + /// Checks if vector does not contain NaN or Inf + template + bool isRegular(const std::vector &v); + +} // namespace casadi + +// Implementations +#ifndef SWIG +//#ifdef casadi_EXPORTS +namespace std { + + /// Enables flushing an std::vector to a stream (prints representation) + template + ostream& operator<<(ostream &stream, const vector &v) { + casadi::repr(v, stream); + return stream; + } + + template + ostream& operator<<(ostream &stream, const pair &p) { + stream << "(" << p.first << ", " << p.second << ")"; + return stream; + } + + template + ostream& operator<<(ostream &stream, const std::map &p) { + stream << "{"; + typedef typename std::map::const_iterator it_type; + int count = 0; + for (it_type it = p.begin();it!=p.end();++it) { + stream << it->first << ": " << it->second; + if (count++ < p.size()-1) stream << ", "; + } + stream << "}"; + return stream; + } + + template + ostream& operator<<(ostream &stream, const std::map &p) { + stream << "{"; + typedef typename std::map::const_iterator it_type; + int count = 0; + for (it_type it = p.begin();it!=p.end();++it) { + stream << '"' << it->first << '"' << ": " << it->second; + if (count++ < p.size()-1) stream << ", "; + } + stream << "}"; + return stream; + } + +} // namespace std + +namespace casadi { + + template + std::vector vector_slice(const std::vector &v, const std::vector &i) { + std::vector ret; + ret.reserve(i.size()); + for (int k=0;k=0, + "vector_slice: Indices should be larger than zero." + << "You have " << j << " at location " << k << "."); + casadi_assert_message(j + std::vector reverse(const std::vector &v) { + std::vector ret(v.size()); + std::reverse_copy(v.begin(), v.end(), ret.begin()); + return ret; + } + + template + void repr(const std::vector &v, std::ostream &stream) { + if (v.empty()) { + stream << "[]"; + } else { + // Print elements, python style + stream << "["; + stream << v.front(); + for (unsigned int i=1; i + void print(const std::vector &v, std::ostream &stream) { + // print vector style + stream << "[" << v.size() << "]"; // Print dimension + + if (v.empty()) { + stream << "()"; + } else { + // Print elements, ublas stype + stream << "("; + for (unsigned int i=0; i + std::vector applymap(T (*f)(const T&) , const std::vector& comp) { + std::vector ret(comp.size()); + std::transform(comp.begin(), comp.end(), ret.begin(), f); + return ret; + } + + template + void applymap(void (*f)(T &), std::vector& comp) { + std::for_each(comp.begin(), comp.end(), f); + } +#endif //SWIG + + template + bool inBounds(const std::vector &v, int upper) { + return inBounds(v, 0, upper); + } + + template + bool inBounds(const std::vector &v, int lower, int upper) { + if (v.size()==0) return true; + int max = *std::max_element(v.begin(), v.end()); + if (max >= upper) return false; + int min = *std::min_element(v.begin(), v.end()); + return (min >= lower); + } + + template + bool isIncreasing(const std::vector &v) { + if (v.size()==0) return true; + T el = v[0]; + for (int i=1;i el)) return false; + el = v[i]; + } + return el==el; // nan -> false + } + + template + bool isDecreasing(const std::vector &v) { + if (v.size()==0) return true; + T el = v[0]; + for (int i=1;i false + } + + template + bool isNonIncreasing(const std::vector &v) { + if (v.size()==0) return true; + T el = v[0]; + for (int i=1;i false + } + + template + bool isNonDecreasing(const std::vector &v) { + if (v.size()==0) return true; + T el = v[0]; + for (int i=1;i= el)) return false; + el = v[i]; + } + return el==el; // nan -> false + } + + template + bool isMonotone(const std::vector &v) { + return isNonDecreasing(v) || isNonIncreasing(v); + } + + template + bool isStrictlyMonotone(const std::vector &v) { + return isDecreasing(v) || isIncreasing(v); + } + + template + bool hasNegative(const std::vector &v) { + for (std::size_t i=0; i + std::string getRepresentation(const std::vector &v) { + std::stringstream ss; + repr(v, ss); + return ss.str(); + } + + template + std::string getDescription(const std::vector &v) { + std::stringstream ss; + print(v, ss); + return ss.str(); + } + + template + void write_matlab(std::ostream &stream, const std::vector &v) { + std::copy(v.begin(), v.end(), std::ostream_iterator(stream, " ")); + } + + template + void write_matlab(std::ostream &stream, const std::vector > &v) { + for (unsigned int i=0; i(stream, " ")); + stream << std::endl; + } + } + + template + void read_matlab(std::istream &stream, std::vector &v) { + v.clear(); + + while (!stream.eof()) { + T val; + stream >> val; + if (stream.fail()) { + stream.clear(); + std::string s; + stream >> s; + if (s.compare("inf") == 0) + val = std::numeric_limits::infinity(); + else + break; + } + v.push_back(val); + } + } + + template + void read_matlab(std::ifstream &file, std::vector > &v) { + v.clear(); + std::string line; + while (!getline(file, line, '\n').eof()) { + std::istringstream reader(line); + std::vector lineData; + + while (!reader.eof()) { + T val; + reader >> val; + if (reader.fail()) { + reader.clear(); + std::string s; + reader >> s; + if (s.compare("inf") == 0) + val = std::numeric_limits::infinity(); + else + break; + } + lineData.push_back(val); + } + v.push_back(lineData); + } + } + + template + void linspace(std::vector &v, const F& first, const L& last) { + if (v.size()<2) + throw CasadiException("std::linspace: vector must contain at least two elements"); + + // Increment + T increment = (last-first)/T(v.size()-1); + + v[0] = first; + for (unsigned i=1; i + T* getPtr(std::vector &v) { + if (v.empty()) + return 0; + else + return &v.front(); + } + + template + const T* getPtr(const std::vector &v) { + if (v.empty()) + return 0; + else + return &v.front(); + } + + // Helper class + template + struct sortCompare { + const std::vector &v_; + sortCompare(const std::vector &v) : v_(v) {} + bool operator() (int i, int j) const { return v_[i] + void sort(const std::vector &values, std::vector &sorted_values, + std::vector &indices, bool invert_indices) { + // Call recursively if indices need to be inverted + if (invert_indices) { + std::vector inverted; + sort(values, sorted_values, inverted, false); + indices.resize(inverted.size()); + for (size_t i=0; i(values)); + + // Sort the values accordingly + sorted_values.resize(values.size()); + for (size_t i=0; i + std::vector cumsum(const std::vector &values) { + std::vector ret(values.size()); + T acc = 0; + for (int i=0;i + std::vector cumsum0(const std::vector &values) { + std::vector ret(values.size()+1, 0); + T acc = 0; + for (int i=0;i + std::vector makeVector(int size, + int ind0, const T& val0, + int ind1, const T& val1, + int ind2, const T& val2, + int ind3, const T& val3, + int ind4, const T& val4, + int ind5, const T& val5, + int ind6, const T& val6, + int ind7, const T& val7, + int ind8, const T& val8, + int ind9, const T& val9, + int ind10, const T& val10, + int ind11, const T& val11, + int ind12, const T& val12, + int ind13, const T& val13, + int ind14, const T& val14, + int ind15, const T& val15, + int ind16, const T& val16, + int ind17, const T& val17, + int ind18, const T& val18, + int ind19, const T& val19) { + + // Maximum size supported + const int max_size = 20; + + // Collect all arguments + int ind[max_size] = {ind0, ind1, ind2, ind3, ind4, ind5, ind6, ind7, ind8, ind9, + ind10, ind11, ind12, ind13, ind14, ind15, ind16, ind17, ind18, ind19}; + T val[max_size] = {val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, + val10, val11, val12, val13, val14, val15, val16, val17, val18, val19}; + + // Return value + std::vector ret(size); + + // Assign all values + for (int i=0; i + bool isRegular(const std::vector &v) { + for (int k=0;k::infinity() || + v[k]==-std::numeric_limits::infinity()) return false; + } + return true; + } + + template + T inner_prod(const std::vector& a, const std::vector& b) { + T ret = 0; + for (int k=0; k + T norm_inf(const std::vector& x) { + T ret = 0; + for (int k=0; k + T norm_1(const std::vector& x) { + T ret = 0; + for (int k=0; k + T norm_2(const std::vector& x) { + T ret = 0; + for (int k=0; k + std::vector toVector(const T& v0) { + return std::vector(1, v0); + } + + template + std::vector toVector(const T& v0, const T& v1) { + std::vector ret(2); + ret[0] = v0; + ret[1] = v1; + return ret; + } + + template + std::vector toVector(const T& v0, const T& v1, const T& v2) { + std::vector ret(3); + ret[0] = v0; + ret[1] = v1; + ret[2] = v2; + return ret; + } + + template + bvec_t* get_bvec_t(std::vector& v) { + casadi_assert_message(0, "get_bvec_t only supported for double"); + } + + template + const bvec_t* get_bvec_t(const std::vector& v) { + casadi_assert_message(0, "get_bvec_t only supported for double"); + } + + template + std::vector< std::vector > swapIndices(const std::vector< std::vector > &mat) { + + // Get the matrix dimensions + int n = mat.size(); + int m = -1; + for (int i=0;i) dimension mismatch."); + if (m==-1) m = mat[i].size(); + } + + // Allocate the result + std::vector< std::vector > ret(m); + for (int i=0;i + + +/// \cond INTERNAL +namespace casadi { + +/** \brief Represents a basic binary operation on two SXElement nodes + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT BinarySX : public SXNode { + private: + + /** \brief Constructor is private, use "create" below */ + BinarySX(unsigned char op, const SXElement& dep0, const SXElement& dep1) : + op_(op), dep0_(dep0), dep1_(dep1) {} + + public: + + /** \brief Create a binary expression */ + inline static SXElement create(unsigned char op, const SXElement& dep0, const SXElement& dep1) { + if (dep0.isConstant() && dep1.isConstant()) { + // Evaluate constant + double dep0_val = dep0.getValue(); + double dep1_val = dep1.getValue(); + double ret_val; + casadi_math::fun(op, dep0_val, dep1_val, ret_val); + return ret_val; + } else { + // Expression containing free variables + return SXElement::create(new BinarySX(op, dep0, dep1)); + } + } + + /** \brief Destructor + This is a rather complex destructor which is necessary since the default destructor + can cause stack overflow due to recursive calling. + */ + virtual ~BinarySX() { + // Start destruction method if any of the dependencies has dependencies + for (int c1=0; c1<2; ++c1) { + // Get the node of the dependency and remove it from the smart pointer + SXNode* n1 = dep(c1).assignNoDelete(casadi_limits::nan); + + // Check if this was the last reference + if (n1->count==0) { + + // Check if binary + if (!n1->hasDep()) { // n1 is not binary + + delete n1; // Delete straight away + + } else { // n1 is binary + + // Stack of expressions to be deleted + std::stack deletion_stack; + + // Add the node to the deletion stack + deletion_stack.push(n1); + + // Process stack + while (!deletion_stack.empty()) { + + // Top element + SXNode *t = deletion_stack.top(); + + // Check if the top element has dependencies with dependencies + bool added_to_stack = false; + for (int c2=0; c2ndep(); ++c2) { // for all dependencies of the dependency + + // Get the node of the dependency of the top element + // and remove it from the smart pointer + SXNode *n2 = t->dep(c2).assignNoDelete(casadi_limits::nan); + + // Check if this is the only reference to the element + if (n2->count == 0) { + + // Check if binary + if (!n2->hasDep()) { + + // Delete straight away if not binary + delete n2; + + } else { + + // Add to deletion stack + deletion_stack.push(n2); + added_to_stack = true; + } + } + } + + // Delete and pop from stack if nothing added to the stack + if (!added_to_stack) { + delete deletion_stack.top(); + deletion_stack.pop(); + } + } // while + } + } + } + } + + virtual bool isSmooth() const { return operation_checker(op_);} + + virtual bool hasDep() const { return true; } + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const SXNode* node, int depth) const { + const BinarySX* n = dynamic_cast(node); + if (n==0) return false; + if (n->op_ != op_) return false; + if (n->dep0_.zz_isEqual(dep0_, depth-1) && n->dep1_.zz_isEqual(dep1_, depth-1)) return true; + if (operation_checker(op_) && n->dep1_.zz_isEqual(dep0_, depth-1) && + n->dep0_.zz_isEqual(dep1_, depth-1)) return true; + return false; + } + + /** \brief Number of dependencies */ + virtual int ndep() const { return 2;} + + /** \brief get the reference of a dependency */ + virtual const SXElement& dep(int i) const { return i==0 ? dep0_ : dep1_;} + virtual SXElement& dep(int i) { return i==0 ? dep0_ : dep1_;} + + /** \brief Get the operation */ + virtual int getOp() const { return op_;} + + /** \brief Print expression */ + virtual std::string print(const std::string& arg1, const std::string& arg2) const { + std::stringstream ss; + + // Print the prefix + casadi_math::printPre(op_, ss); + + // Print the first dependency + ss << arg1; + + //Print the infix + casadi_math::printSep(op_, ss); + + // Print the second dependency + ss << arg2; + + // Print the suffix + casadi_math::printPost(op_, ss); + + return ss.str(); + } + + /** \brief The binary operation as an 1 byte integer (allows 256 values) */ + unsigned char op_; + + /** \brief The dependencies of the node */ + SXElement dep0_, dep1_; +}; + +} // namespace casadi +/// \endcond + +#endif // CASADI_BINARY_SX_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/constant_sx.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/constant_sx.hpp new file mode 100755 index 0000000..dcf1cdd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/constant_sx.hpp @@ -0,0 +1,328 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_CONSTANT_SX_HPP +#define CASADI_CONSTANT_SX_HPP + +#include "sx_node.hpp" +#include + +/// \cond INTERNAL + +// Cashing of constants requires a map (preferably a hash map) +#ifdef USE_CXX11 +// Using C++11 unordered_map (hash map) +#include +#define CACHING_MAP std::unordered_map +#else // USE_CXX11 +// Falling back to std::map (binary search tree) +#include +#define CACHING_MAP std::map +#endif // USE_CXX11 + +namespace casadi { + +/** \brief Represents a constant SX + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT ConstantSX : public SXNode { +public: + +// Destructor +virtual ~ConstantSX() {} + +/** \brief Get the value must be defined */ +virtual double getValue() const = 0; + +/** \brief Properties */ +virtual bool isConstant() const { return true; } + +/** \brief Get the operation */ +virtual int getOp() const { return OP_CONST;} + +/** \brief Check if two nodes are equivalent up to a given depth */ +virtual bool zz_isEqual(const SXNode* node, int depth) const { + const ConstantSX* n = dynamic_cast(node); + return n && n->getValue()==getValue(); +} + +protected: + +/** \brief Print expression */ + virtual std::string print(const std::string& arg1, const std::string& arg2) const { + std::stringstream ss; + ss << getValue(); + return ss.str(); + } + +}; + +/** \brief DERIVED CLASSES */ + +/** \brief Represents a constant real SX + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT RealtypeSX : public ConstantSX { + private: + /// Constructor is private, use "create" below + explicit RealtypeSX(double value) : value(value) {} + + public: + + /// Destructor + virtual ~RealtypeSX() { + size_t num_erased = cached_constants_.erase(value); + assert(num_erased==1); + (void)num_erased; + } + + /// Static creator function (use instead of constructor) + inline static RealtypeSX* create(double value) { + // Try to find the constant + CACHING_MAP::iterator it = cached_constants_.find(value); + + // If not found, add it, + if (it==cached_constants_.end()) { + // Allocate a new object + RealtypeSX* n = new RealtypeSX(value); + + // Add to hash_table + cached_constants_.insert(it, std::make_pair(value, n)); + + // Return it to caller + return n; + } else { // Else, returned the object + return it->second; + } + } + + ///@{ + /** \brief Get the value */ + virtual double getValue() const { return value;} + virtual int getIntValue() const { return static_cast(value);} + ///@} + + virtual bool isAlmostZero(double tol) const { return fabs(value)<=tol; } + + protected: + /** \brief Hash map of all constants currently allocated + * (storage is allocated for it in sx_element.cpp) */ + static CACHING_MAP cached_constants_; + + /** \brief Data members */ + double value; +}; + + +/** \brief Represents a constant integer SX + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT IntegerSX : public ConstantSX { + private: + /// Constructor is private, use "create" below + explicit IntegerSX(int value) : value(value) {} + + public: + + /// Destructor + virtual ~IntegerSX() { + size_t num_erased = cached_constants_.erase(value); + assert(num_erased==1); + (void)num_erased; + } + + /// Static creator function (use instead of constructor) + inline static IntegerSX* create(int value) { + // Try to find the constant + CACHING_MAP::iterator it = cached_constants_.find(value); + + // If not found, add it, + if (it==cached_constants_.end()) { + // Allocate a new object + IntegerSX* n = new IntegerSX(value); + + // Add to hash_table + cached_constants_.insert(it, std::make_pair(value, n)); + + // Return it to caller + return n; + } else { // Else, returned the object + return it->second; + } + } + + ///@{ + /** \brief evaluate function */ + virtual double getValue() const { return value; } + virtual int getIntValue() const { return value; } + ///@} + + /** \brief Properties */ + virtual bool isInteger() const { return true; } + + protected: + + /** \brief Hash map of all constants currently allocated + * (storage is allocated for it in sx_element.cpp) */ + static CACHING_MAP cached_constants_; + + /** \brief Data members */ + int value; +}; + +/** \brief Represents a zero SX + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT ZeroSX : public ConstantSX { +public: + + virtual ~ZeroSX() {} + explicit ZeroSX() {} + + ///@{ + /** \brief Get the value */ + virtual double getValue() const { return 0;} + virtual int getIntValue() const { return 0;} + ///@} + + ///@{ + /** \brief Properties */ + virtual bool isInteger() const { return true; } + virtual bool isZero() const { return true; } + virtual bool isAlmostZero(double tol) const { return true; } + ///@} +}; + + +/** \brief Represents a one SX + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT OneSX : public ConstantSX { +public: + + explicit OneSX() {} + virtual ~OneSX() {} + + /** \brief Get the value */ + virtual double getValue() const { return 1;} + virtual int getIntValue() const { return 1;} + + /** \brief Properties */ + virtual bool isInteger() const { return true; } + virtual bool isOne() const { return true; } + +}; + + +/** \brief Represents a minus one SX + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT MinusOneSX : public ConstantSX { +public: + + explicit MinusOneSX() {} + virtual ~MinusOneSX() {} + + ///@{ + /** \brief Get the value */ + virtual double getValue() const { return -1;} + virtual int getIntValue() const { return -1;} + ///@} + + ///@{ + /** \brief Properties */ + virtual bool isInteger() const { return true; } + virtual bool isMinusOne() const { return true; } + ///@} + +}; + + +/** \brief Represents an infinity SX + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT InfSX : public ConstantSX { +public: + + explicit InfSX() {} + virtual ~InfSX() {} + + /** \brief Get the value */ + virtual double getValue() const { return std::numeric_limits::infinity();} + + /** \brief Properties */ + virtual bool isInf() const { return true; } + +}; + + +/** \brief Represents a minus infinity SX + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT MinusInfSX : public ConstantSX { +public: + + explicit MinusInfSX() {} + virtual ~MinusInfSX() {} + + /** \brief Get the value */ + virtual double getValue() const { return -std::numeric_limits::infinity();} + + /** \brief Properties */ + virtual bool isMinusInf() const { return true; } + +}; + + +/** \brief Represents a not-a-number SX + \author Joel Andersson + \date 2010 +*/ +class CASADI_EXPORT NanSX : public ConstantSX { +public: + + explicit NanSX() {this->count++;} + virtual ~NanSX() {this->count--;} + + /** \brief Get the value */ + virtual double getValue() const { return std::numeric_limits::quiet_NaN();} + + /** \brief Properties */ + virtual bool isNan() const { return true; } + +}; + +} // namespace casadi +/// \endcond + +#endif // CASADI_CONSTANT_SX_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/sx_element.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/sx_element.hpp new file mode 100755 index 0000000..27124cb --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/sx_element.hpp @@ -0,0 +1,448 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SX_ELEMENT_HPP +#define CASADI_SX_ELEMENT_HPP + +// exception class +#include "../printable_object.hpp" +#include "../casadi_exception.hpp" +#include "../casadi_limits.hpp" +#include "../matrix/matrix.hpp" +#include "../matrix/generic_expression.hpp" + +/** \brief C/C++ */ +#include +#include +#include +#include +#include +#include + +namespace casadi { + + /** \brief forward declaration of Node and Matrix */ + class SXNode; // include will follow in the end + + /** SXElement is exposed only as an empty struct to SWIG */ +#ifdef SWIG + struct SXElement {}; +#else // SWIG + + /** \brief The basic scalar symbolic class of CasADi + \author Joel Andersson + \date 2010-2014 + */ + class CASADI_EXPORT SXElement : public GenericExpression, + public PrintableObject { + friend class SXNode; + friend class BinarySXNode; + friend class Matrix; + public: + + /// \cond CLUTTER + /** \brief Default constructor (not-a-number) + Object is initialized as not-a-number. + */ + SXElement(); + /// \endcond + + /** \brief Numerical constant constructor + \param val Numerical value + */ + SXElement(double val); + + /** \brief Create a symbolic primitive + \param name Name of the symbolic primitive + + This is the name that will be used by the "operator<<" and "toString" methods. + The name is not used as identifier; you may construct distinct + SXElement objects with non-unique names. + */ + static SXElement sym(const std::string& name); + + /// \cond INTERNAL + /// Create an expression from a node: extra dummy argument to avoid ambiguity for 0/NULL + SXElement(SXNode* node, bool dummy); + /// \endcond + + /** \brief Copy constructor */ + SXElement(const SXElement& scalar); // copy constructor + + /// Destructor + ~SXElement(); + + /// \cond INTERNAL + /// Create an object given a node + static SXElement create(SXNode* node); + /// \endcond + + /// Assignment + SXElement& operator=(const SXElement& scalar); + SXElement& operator=(double scalar); // needed since otherwise both a = SXElement(double) + // and a = Matrix(double) would be ok + + /// Convert to a 1-by-1 Matrix + operator Matrix() const; + + /// Print a representation of the object + void repr(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// Print a description of the object + void print(std::ostream &stream=casadi::userOut(), bool trailing_newline=true) const; + + /// \cond INTERNAL + /** \brief Get a pointer to the node */ + SXNode* get() const; // note: constant pointer, not pointer to constant object! + // (to allow access to the counter) + + /** \brief Access functions of the node */ + const SXNode* operator->() const; + SXNode* operator->(); + /// \endcond + + /** \brief Perform operations by ID */ + static SXElement binary(int op, const SXElement& x, const SXElement& y); + static SXElement unary(int op, const SXElement& x); + + /** \brief Check the truth value of this node + * Introduced to catch bool(x) situations in python + */ + bool __nonzero__() const; + + /** \brief check if this SXElement is a leaf of the SX graph + * + * An SXElement qualifies as leaf when it has no dependencies. + */ + bool isLeaf() const; + bool isConstant() const; + bool isInteger() const; + bool isSymbolic() const; + bool hasDep() const; + /** \brief Check whether a binary SXElement is commutative*/ + bool isCommutative() const; + bool isZero() const; + bool isAlmostZero(double tol) const; + bool isOne() const; + bool isMinusOne() const; + bool isNan() const; + bool isInf() const; + bool isMinusInf() const; + const std::string& getName() const; + int getOp() const; + bool isOp(int op) const; + + /// Checks if expression does not contain NaN or Inf + bool isRegular() const; + + /** \brief Check if a value is always nonnegative (false negatives are allowed) */ + bool isNonNegative() const; + + double getValue() const; + int getIntValue() const; + SXElement getDep(int ch=0) const; + + /** \brief Check if the node is the sum of two equal expressions */ + bool isDoubled() const; + + /** \brief Get the number of dependencies of a binary SXElement */ + int getNdeps() const; + + /** \brief Returns a number that is unique for a given SXNode. + * If the SXElement does not point to any node, 0 is returned. + */ + size_t __hash__() const; + + /** \brief Negation */ + SXElement operator-() const; + + // all binary operations + SXElement zz_plus(const SXElement& y) const; + SXElement zz_minus(const SXElement& y) const; + SXElement zz_times(const SXElement& y) const; + SXElement zz_rdivide(const SXElement& y) const; + SXElement zz_lt(const SXElement& y) const; + SXElement zz_le(const SXElement& y) const; + SXElement zz_eq(const SXElement& y) const; + SXElement zz_ne(const SXElement& y) const; + SXElement zz_power(const SXElement& b) const; + SXElement zz_constpow(const SXElement& b) const; + + SXElement __mrdivide__(const SXElement& b) const { return *this / b;} + SXElement zz_mpower(const SXElement& b) const {return pow(*this, b);} + + // The following functions serves two purposes: + // Numpy compatibility and to allow unambiguous access + SXElement zz_mul(const SXElement& y) const { return zz_times(y);} + SXElement zz_exp() const; + SXElement zz_log() const; + SXElement zz_sqrt() const; + SXElement sq() const; + SXElement zz_sin() const; + SXElement zz_cos() const; + SXElement zz_tan() const; + SXElement zz_asin() const; + SXElement zz_acos() const; + SXElement zz_atan() const; + SXElement zz_floor() const; + SXElement zz_ceil() const; + SXElement zz_mod(const SXElement &y) const; + SXElement zz_erf() const; + SXElement zz_erfinv() const; + SXElement zz_abs() const; + SXElement zz_min(const SXElement &y) const; + SXElement zz_max(const SXElement &y) const; + SXElement inv() const; + SXElement zz_sinh() const; + SXElement zz_cosh() const; + SXElement zz_tanh() const; + SXElement zz_asinh() const; + SXElement zz_acosh() const; + SXElement zz_atanh() const; + SXElement zz_atan2(const SXElement &y) const; + SXElement zz_log10() const; + SXElement printme(const SXElement &y) const; + SXElement zz_sign() const; + SXElement zz_copysign(const SXElement &y) const; + SXElement zz_not() const; + SXElement zz_and(const SXElement& y) const; + SXElement zz_or(const SXElement& y) const; + SXElement zz_if_else_zero(const SXElement& y) const; + + Matrix zz_min(const Matrix& b) const; + Matrix zz_max(const Matrix& b) const; + Matrix zz_constpow(const Matrix& n) const; + Matrix zz_copysign(const Matrix& n) const; + Matrix zz_atan2(const Matrix& b) const; + bool zz_isEqual(const SXElement& scalar, int depth=0) const; + SXElement zz_simplify() const; + + /// \cond INTERNAL + /// Get the temporary variable + int getTemp() const; + + /// Set the temporary variable + void setTemp(int t); + + /// Check if marked (i.e. temporary is negative) + bool marked() const; + + /// Mark by flipping the sign of the temporary and decreasing by one + void mark(); + + /** \brief Assign to another expression, if a duplicate. + * Check for equality up to a given depth */ + void assignIfDuplicate(const SXElement& scalar, int depth=1); + + /** \brief Assign the node to something, without invoking the deletion of the node, + * if the count reaches 0 */ + SXNode* assignNoDelete(const SXElement& scalar); + /// \endcond + + /** \brief SXElement nodes are not allowed to be null */ + inline bool isNull() {return false;} + + private: + /// Pointer to node (SXElement is only a reference class) + SXNode* node; + + /** + \ingroup expression_tools + @{ + */ + /** \brief inline if-test */ + /// replaces the ternary conditional operator "?:", which cannot be overloaded + friend SXElement if_else(const SXElement& cond, const SXElement& if_true, + const SXElement& if_false, bool short_circuit); + /** @} */ + }; + + /// \cond INTERNAL + // Template specializations + template<> + CASADI_EXPORT Matrix Matrix:: + zz_solve(const Matrix& b, + const std::string& lsolver, const Dict& dict) const; + + template<> + CASADI_EXPORT Matrix Matrix:: + zz_pinv(const std::string& lsolver, const Dict& dict) const; + + template<> + CASADI_EXPORT bool Matrix::__nonzero__() const; + + template<> + class CASADI_EXPORT casadi_limits{ + public: + static bool isZero(const SXElement& val); + static bool isAlmostZero(const SXElement& val, double tol); + static bool isOne(const SXElement& val); + static bool isMinusOne(const SXElement& val); + static bool isConstant(const SXElement& val); + static bool isInteger(const SXElement& val); + static bool isInf(const SXElement& val); + static bool isMinusInf(const SXElement& val); + static bool isNaN(const SXElement& val); + + static const SXElement zero; + static const SXElement one; + static const SXElement two; + static const SXElement minus_one; + static const SXElement nan; + static const SXElement inf; + static const SXElement minus_inf; + }; + +#endif // SWIG +/// \endcond + + ///@{ + /// Readability typedefs + typedef Matrix SX; + typedef std::vector SXVector; + typedef std::vector SXVectorVector; + typedef std::map SXDict; + ///@} + + // Specialize functions in GenericMatrix and SX + template<> SX GenericMatrix::sym(const std::string& name, const Sparsity& sp); + template<> bool SX::isRegular() const; + template<> bool SX::isSmooth() const; + template<> bool SX::isLeaf() const; + template<> bool SX::isCommutative() const; + template<> bool SX::isSymbolic() const; + template<> bool SX::isValidInput() const; + template<> bool SX::hasDuplicates(); + template<> void SX::resetInput(); + template<> double SX::getValue(int k) const; + template<> int SX::getIntValue() const; + template<> std::vector SX::nonzeros() const; + template<> std::vector SX::nonzeros_int() const; + template<> SX SX::getDep(int ch) const; + template<> int SX::getNdeps() const; + template<> std::string SX::getName() const; + template<> void SX::setEqualityCheckingDepth(int eq_depth); + template<> int SX::getEqualityCheckingDepth(); + template<> size_t SX::getElementHash() const; + template<> void SX::zz_expand(SX &weights, SX& terms) const; + template<> SX SX::zz_pw_const(const SX &tval, const SX &val) const; + template<> SX SX::zz_pw_lin(const SX &tval, const SX &val) const; + template<> SX SX::zz_if_else(const SX &if_true, const SX &if_false, + bool short_circuit) const; + template<> SX SX::zz_gauss_quadrature(const SX &x, const SX &a, + const SX &b, int order, + const SX& w) const; + template<> SX SX::zz_simplify() const; + template<> SX SX::zz_substitute(const SX& v, const SX& vdef) const; + template<> std::vector SX::zz_substitute(const std::vector& ex, + const std::vector& v, + const std::vector& vdef); + template<> void SX::zz_substituteInPlace(const std::vector& v, + std::vector& vdef, + std::vector& ex, + bool reverse); + template<> bool SX::zz_dependsOn(const SX &arg) const; + template<> std::vector SX::zz_symvar() const; + template<> SX SX::zz_jacobian(const SX &arg) const; + template<> SX SX::zz_gradient(const SX &arg) const; + template<> SX SX::zz_tangent(const SX &arg) const; + template<> SX SX::zz_hessian(const SX &arg) const; + template<> SX SX::zz_hessian(const SX &arg, SX &g) const; + template<> SX SX::zz_jacobianTimesVector(const SX &arg, const SX &v, + bool transpose_jacobian) const; + template<> SX SX::zz_taylor(const SX& x, const SX& a, int order) const; + template<> SX SX::zz_mtaylor(const SX& x, const SX& a, int order) const; + template<> SX SX::zz_mtaylor(const SX& x, const SX& a, int order, + const std::vector& order_contributions) const; + template<> int SX::zz_countNodes() const; + template<> std::string + SX::zz_getOperatorRepresentation(const std::vector& args) const; + template<> void SX::zz_extractShared(std::vector& ex, + std::vector& v, + std::vector& vdef, + const std::string& v_prefix, + const std::string& v_suffix); + template<> SX SX::zz_poly_coeff(const SX&x) const; + template<> SX SX::zz_poly_roots() const; + template<> SX SX::zz_eig_symbolic() const; + template<> void SX::printSplit(std::vector& nz, + std::vector& inter) const; +} // namespace casadi + +#ifndef SWIG + +/// \cond INTERNAL +// Template specialization +namespace casadi { + template<> inline std::string matrixName() { return "SX"; } +} // namespace casadi +/// \endcond + +namespace std { + template<> + class CASADI_EXPORT numeric_limits{ + public: + static const bool is_specialized = true; + static casadi::SXElement min() throw(); + static casadi::SXElement max() throw(); + static const int digits = 0; + static const int digits10 = 0; + static const bool is_signed = false; + static const bool is_integer = false; + static const bool is_exact = false; + static const int radix = 0; + static casadi::SXElement epsilon() throw(); + static casadi::SXElement round_error() throw(); + static const int min_exponent = 0; + static const int min_exponent10 = 0; + static const int max_exponent = 0; + static const int max_exponent10 = 0; + + static const bool has_infinity = true; + static const bool has_quiet_NaN = true; + static const bool has_signaling_NaN = false; + // static const float_denorm_style has_denorm = denorm absent; + static const bool has_denorm_loss = false; + static casadi::SXElement infinity() throw(); + static casadi::SXElement quiet_NaN() throw(); + // static SXElement signaling_NaN() throw(); + // static SXElement denorm_min() throw(); + static const bool is_iec559 = false; + static const bool is_bounded = false; + static const bool is_modulo = false; + + static const bool traps = false; + static const bool tinyness_before = false; + static const float_round_style round_style = round_toward_zero; + }; +} //namespace std + +/** \brief The following functions needs the class so they cannot be included + * in the beginning of the header */ +#include "sx_node.hpp" + +#endif // SWIG + +#endif // CASADI_SX_ELEMENT_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/sx_node.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/sx_node.hpp new file mode 100755 index 0000000..ff9fd77 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/sx_node.hpp @@ -0,0 +1,136 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_SX_NODE_HPP +#define CASADI_SX_NODE_HPP + +#include +#include +#include +#include + +/** \brief Scalar expression (which also works as a smart pointer class to this class) */ +#include "sx_element.hpp" + + +/// \cond INTERNAL +namespace casadi { + + /** \brief Internal node class for SX + \author Joel Andersson + \date 2010 + */ + class SXNode { + friend class SXElement; + friend class Matrix; + + public: + + /** \brief constructor */ + SXNode(); + + /** \brief destructor */ + virtual ~SXNode(); + + ///@{ + /** \brief check properties of a node */ + virtual bool isConstant() const; // check if constant + virtual bool isInteger() const; // check if integer + virtual bool isSymbolic() const; // check if symbolic + virtual bool hasDep() const; // check if binary + virtual bool isZero() const; // check if zero + virtual bool isAlmostZero(double tol) const; // check if almost zero + virtual bool isOne() const; // check if one + virtual bool isMinusOne() const; // check if minus one + virtual bool isNan() const; // check if not a number + virtual bool isInf() const; // check if infinity + virtual bool isMinusInf() const; // check if minus infinity + ///@} + + ///@{ + /** \brief Get value of a constant node */ + virtual double getValue() const; // only works for constant nodes + virtual int getIntValue() const; // only works for integer nodes + ///@} + + virtual const std::string& getName() const; // get the name + + /** \brief get the operation */ + virtual int getOp() const=0; + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const SXNode* node, int depth) const; + + /** \brief Number of dependencies */ + virtual int ndep() const { return 0;} + + /** \brief get the reference of a child */ + virtual const SXElement& dep(int i) const; + + /** \brief get the reference of a child */ + virtual SXElement& dep(int i); + + /** \brief Initialize the node (currently used only to give a similar interface to MXNode) */ + void init() {} + + /** \brief Check if smooth */ + virtual bool isSmooth() const; + + /** \brief print */ + virtual void print(std::ostream &stream) const; + + /** \brief Find out which nodes can be inlined */ + void canInline(std::map& nodeind) const; + + /** \brief Print compact */ + std::string printCompact(std::map& nodeind, + std::vector& intermed) const; + + /** \brief Print expression */ + virtual std::string print(const std::string& arg1, const std::string& arg2) const = 0; + + // Check if marked (i.e. temporary is negative) + bool marked() const; + + // Mark by flipping the sign of the temporary and decreasing by one + void mark(); + + // Depth when checking equalities + static int eq_depth_; + + /** Temporary variables to be used in user algorithms like sorting, + the user is responsible of making sure that use is thread-safe + The variable is initialized to zero + */ + int temp; + + // Reference counter -- counts the number of parents of the node + unsigned int count; + + }; + +} // namespace casadi +/// \endcond +#endif // CASADI_SX_NODE_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/symbolic_sx.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/symbolic_sx.hpp new file mode 100755 index 0000000..fbc187c --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/symbolic_sx.hpp @@ -0,0 +1,65 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef SYMBOLIC_SXElement_HPP +#define SYMBOLIC_SXElement_HPP + +#include "sx_node.hpp" +/// \cond INTERNAL + +namespace casadi { + +/** \brief Represents a scalar symbolic expression + \author Joel Andersson + \date 2010 + A regular user is not supposed to work with this Node class. + This user can call SX(name) instead. +*/ +class CASADI_EXPORT SymbolicSX : public SXNode { +public: + explicit SymbolicSX(const std::string &name) : name(name) {} + virtual ~SymbolicSX() {} + + virtual bool isSymbolic() const { return true; } + + virtual const std::string& getName() const { return name; } + + /** \brief Get the operation */ + virtual int getOp() const { return OP_PARAMETER;} + + /** \brief Name */ + std::string name; + +protected: + + /** \brief Print expression */ + virtual std::string print(const std::string& arg1, const std::string& arg2) const { + return name; + } +}; + +} // namespace casadi +/// \endcond +#endif // SYMBOLIC_SXElement_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/unary_sx.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/unary_sx.hpp new file mode 100755 index 0000000..3139bf4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/sx/unary_sx.hpp @@ -0,0 +1,111 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef UNARY_SXElement_HPP +#define UNARY_SXElement_HPP + +#include "sx_node.hpp" +#include + +/// \cond INTERNAL + +namespace casadi { + +/** \brief Represents a basic unary operation on an SXElement node + \author Joel Andersson + \date 2012 +*/ +class CASADI_EXPORT UnarySX : public SXNode { + private: + + /** \brief Constructor is private, use "create" below */ + UnarySX(unsigned char op, const SXElement& dep) : op_(op), dep_(dep) {} + + public: + + /** \brief Create a unary expression */ + inline static SXElement create(unsigned char op, const SXElement& dep) { + if (dep.isConstant()) { + // Evaluate constant + double dep_val = dep.getValue(); + double ret_val; + casadi_math::fun(op, dep_val, dep_val, ret_val); + return ret_val; + } else { + // Expression containing free variables + return SXElement::create(new UnarySX(op, dep)); + } + } + + /** \brief Destructor */ + virtual ~UnarySX() {} + + virtual bool isSmooth() const { return operation_checker(op_);} + + virtual bool hasDep() const { return true; } + + /** \brief Check if two nodes are equivalent up to a given depth */ + virtual bool zz_isEqual(const SXNode* node, int depth) const { + const UnarySX* n = dynamic_cast(node); + return n && n->op_ == op_ && n->dep_.zz_isEqual(dep_, depth-1); + } + + /** \brief Number of dependencies */ + virtual int ndep() const { return 1;} + + /** \brief get the reference of a dependency */ + virtual const SXElement& dep(int i) const { return dep_; } + virtual SXElement& dep(int i) { return dep_; } + + /** \brief Get the operation */ + virtual int getOp() const { return op_;} + + /** \brief Print expression */ + virtual std::string print(const std::string& arg1, const std::string& arg2) const { + std::stringstream ss; + + // Print the prefix + casadi_math::printPre(op_, ss); + + // Print the dependency + ss << arg1; + + // Print the suffix + casadi_math::printPost(op_, ss); + + return ss.str(); + } + + /** \brief The binary operation as an 1 byte integer (allows 256 values) */ + unsigned char op_; + + /** \brief The dependencies of the node */ + SXElement dep_; +}; + +} // namespace casadi + +/// \endcond +#endif // UNARY_SXElement_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/weak_ref.hpp b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/weak_ref.hpp new file mode 100755 index 0000000..21582a0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/core/weak_ref.hpp @@ -0,0 +1,99 @@ +/* + * This file is part of CasADi. + * + * CasADi -- A symbolic framework for dynamic optimization. + * Copyright (C) 2010-2014 Joel Andersson, Joris Gillis, Moritz Diehl, + * K.U. Leuven. All rights reserved. + * Copyright (C) 2011-2014 Greg Horn + * + * CasADi is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * CasADi is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with CasADi; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef CASADI_WEAK_REF_HPP +#define CASADI_WEAK_REF_HPP + +#include "shared_object.hpp" + + +/// \cond INTERNAL +namespace casadi { + + // Forward declaration + class WeakRefInternal; + + + /** \brief Weak reference type + A weak reference to a SharedObject + \author Joel Andersson + \date 2013 + */ + class CASADI_EXPORT WeakRef : public SharedObject { + public: + friend class SharedObjectNode; + + /** \brief Default constructor */ + WeakRef(int dummy=0); + + /** \brief Construct from a shared object (also implicit type conversion) */ + WeakRef(SharedObject shared); + + /** \brief Get a shared (owning) reference */ + SharedObject shared(); + + /** \brief Check if alive */ + bool alive() const; + + /** \brief Access functions of the node */ + WeakRefInternal* operator->(); + + /** \brief Const access functions of the node */ + const WeakRefInternal* operator->() const; + +#ifndef SWIG + private: + /** \brief Construct from a shared object (internal) */ + explicit WeakRef(SharedObjectNode* raw); + + /** \brief The shared object has been deleted */ + void kill(); +#endif // SWIG + }; + +#ifndef SWIG + class CASADI_EXPORT WeakRefInternal : public SharedObjectNode { + public: + // Constructor + WeakRefInternal(SharedObjectNode* raw); + + // Destructor + ~WeakRefInternal(); + + // Clone (should never be used) + virtual WeakRefInternal* clone() const { return new WeakRefInternal(*this);} + + // Raw pointer to the cached object + SharedObjectNode* raw_; + }; + +#endif // SWIG + +} // namespace casadi + +/// \endcond + + +#endif // CASADI_WEAK_REF_HPP diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/CSparse/Include/cs.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/CSparse/Include/cs.h new file mode 100755 index 0000000..5f8d620 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/CSparse/Include/cs.h @@ -0,0 +1,154 @@ +#ifndef _CS_H +#define _CS_H +#include +#include +#include +#include +#ifdef MATLAB_MEX_FILE +#include "mex.h" +#endif +#define CS_VER 2 /* CSparse Version */ +#define CS_SUBVER 2 +#define CS_SUBSUB 4 +#define CS_DATE "Nov 30, 2009" /* CSparse release date */ +#define CS_COPYRIGHT "Copyright (c) Timothy A. Davis, 2006-2009" + +#include + + +/* --- primary CSparse routines and data structures ------------------------- */ +typedef struct cs_sparse /* matrix in compressed-column or triplet form */ +{ + int nzmax ; /* maximum number of entries */ + int m ; /* number of rows */ + int n ; /* number of columns */ + int *p ; /* column pointers (size n+1) or col indices (size nzmax) */ + int *i ; /* row indices, size nzmax */ + double *x ; /* numerical values, size nzmax */ + int nz ; /* # of entries in triplet matrix, -1 for compressed-col */ +} cs ; + +#ifdef __cplusplus +extern "C" { +#endif + +CASADI_CSPARSE_EXPORT cs *cs_add (const cs *A, const cs *B, double alpha, double beta) ; +CASADI_CSPARSE_EXPORT int cs_cholsol (int order, const cs *A, double *b) ; +CASADI_CSPARSE_EXPORT cs *cs_compress (const cs *T) ; +CASADI_CSPARSE_EXPORT int cs_dupl (cs *A) ; +CASADI_CSPARSE_EXPORT int cs_entry (cs *T, int i, int j, double x) ; +CASADI_CSPARSE_EXPORT int cs_gaxpy (const cs *A, const double *x, double *y) ; +CASADI_CSPARSE_EXPORT cs *cs_load (FILE *f) ; +CASADI_CSPARSE_EXPORT int cs_lusol (int order, const cs *A, double *b, double tol) ; +CASADI_CSPARSE_EXPORT cs *cs_multiply (const cs *A, const cs *B) ; +CASADI_CSPARSE_EXPORT double cs_norm (const cs *A) ; +CASADI_CSPARSE_EXPORT int cs_print (const cs *A, int brief) ; +CASADI_CSPARSE_EXPORT int cs_qrsol (int order, const cs *A, double *b) ; +CASADI_CSPARSE_EXPORT cs *cs_transpose (const cs *A, int values) ; +/* utilities */ +CASADI_CSPARSE_EXPORT void *cs_calloc (int n, size_t size) ; +CASADI_CSPARSE_EXPORT void *cs_free (void *p) ; +CASADI_CSPARSE_EXPORT void *cs_realloc (void *p, int n, size_t size, int *ok) ; +CASADI_CSPARSE_EXPORT cs *cs_spalloc (int m, int n, int nzmax, int values, int triplet) ; +CASADI_CSPARSE_EXPORT cs *cs_spfree (cs *A) ; +CASADI_CSPARSE_EXPORT int cs_sprealloc (cs *A, int nzmax) ; +CASADI_CSPARSE_EXPORT void *cs_malloc (int n, size_t size) ; + +/* --- secondary CSparse routines and data structures ----------------------- */ +typedef struct cs_symbolic /* symbolic Cholesky, LU, or QR analysis */ +{ + int *pinv ; /* inverse row perm. for QR, fill red. perm for Chol */ + int *q ; /* fill-reducing column permutation for LU and QR */ + int *parent ; /* elimination tree for Cholesky and QR */ + int *cp ; /* column pointers for Cholesky, row counts for QR */ + int *leftmost ; /* leftmost[i] = min(find(A(i,:))), for QR */ + int m2 ; /* # of rows for QR, after adding fictitious rows */ + double lnz ; /* # entries in L for LU or Cholesky; in V for QR */ + double unz ; /* # entries in U for LU; in R for QR */ +} css ; + +typedef struct cs_numeric /* numeric Cholesky, LU, or QR factorization */ +{ + cs *L ; /* L for LU and Cholesky, V for QR */ + cs *U ; /* U for LU, R for QR, not used for Cholesky */ + int *pinv ; /* partial pivoting for LU */ + double *B ; /* beta [0..n-1] for QR */ +} csn ; + +typedef struct cs_dmperm_results /* cs_dmperm or cs_scc output */ +{ + int *p ; /* size m, row permutation */ + int *q ; /* size n, column permutation */ + int *r ; /* size nb+1, block k is rows r[k] to r[k+1]-1 in A(p,q) */ + int *s ; /* size nb+1, block k is cols s[k] to s[k+1]-1 in A(p,q) */ + int nb ; /* # of blocks in fine dmperm decomposition */ + int rr [5] ; /* coarse row decomposition */ + int cc [5] ; /* coarse column decomposition */ +} csd ; + +CASADI_CSPARSE_EXPORT int *cs_amd (int order, const cs *A) ; +CASADI_CSPARSE_EXPORT csn *cs_chol (const cs *A, const css *S) ; +CASADI_CSPARSE_EXPORT csd *cs_dmperm (const cs *A, int seed) ; +CASADI_CSPARSE_EXPORT int cs_droptol (cs *A, double tol) ; +CASADI_CSPARSE_EXPORT int cs_dropzeros (cs *A) ; +CASADI_CSPARSE_EXPORT int cs_happly (const cs *V, int i, double beta, double *x) ; +CASADI_CSPARSE_EXPORT int cs_ipvec (const int *p, const double *b, double *x, int n) ; +CASADI_CSPARSE_EXPORT int cs_lsolve (const cs *L, double *x) ; +CASADI_CSPARSE_EXPORT int cs_ltsolve (const cs *L, double *x) ; +CASADI_CSPARSE_EXPORT csn *cs_lu (const cs *A, const css *S, double tol) ; +CASADI_CSPARSE_EXPORT cs *cs_permute (const cs *A, const int *pinv, const int *q, int values) ; +CASADI_CSPARSE_EXPORT int *cs_pinv (const int *p, int n) ; +CASADI_CSPARSE_EXPORT int cs_pvec (const int *p, const double *b, double *x, int n) ; +CASADI_CSPARSE_EXPORT csn *cs_qr (const cs *A, const css *S) ; +CASADI_CSPARSE_EXPORT css *cs_schol (int order, const cs *A) ; +CASADI_CSPARSE_EXPORT css *cs_sqr (int order, const cs *A, int qr) ; +CASADI_CSPARSE_EXPORT cs *cs_symperm (const cs *A, const int *pinv, int values) ; +CASADI_CSPARSE_EXPORT int cs_updown (cs *L, int sigma, const cs *C, const int *parent) ; +CASADI_CSPARSE_EXPORT int cs_usolve (const cs *U, double *x) ; +CASADI_CSPARSE_EXPORT int cs_utsolve (const cs *U, double *x) ; +/* utilities */ +CASADI_CSPARSE_EXPORT css *cs_sfree (css *S) ; +CASADI_CSPARSE_EXPORT csn *cs_nfree (csn *N) ; +CASADI_CSPARSE_EXPORT csd *cs_dfree (csd *D) ; + +/* --- tertiary CSparse routines -------------------------------------------- */ +CASADI_CSPARSE_EXPORT int *cs_counts (const cs *A, const int *parent, const int *post, int ata) ; +CASADI_CSPARSE_EXPORT double cs_cumsum (int *p, int *c, int n) ; +CASADI_CSPARSE_EXPORT int cs_dfs (int j, cs *G, int top, int *xi, int *pstack, const int *pinv) ; +CASADI_CSPARSE_EXPORT int cs_ereach (const cs *A, int k, const int *parent, int *s, int *w) ; +CASADI_CSPARSE_EXPORT int *cs_etree (const cs *A, int ata) ; +CASADI_CSPARSE_EXPORT int cs_fkeep (cs *A, int (*fkeep) (int, int, double, void *), void *other) ; +CASADI_CSPARSE_EXPORT double cs_house (double *x, double *beta, int n) ; +CASADI_CSPARSE_EXPORT int cs_leaf (int i, int j, const int *first, int *maxfirst, int *prevleaf, + int *ancestor, int *jleaf) ; +CASADI_CSPARSE_EXPORT int *cs_maxtrans (const cs *A, int seed) ; +CASADI_CSPARSE_EXPORT int *cs_post (const int *parent, int n) ; +CASADI_CSPARSE_EXPORT int *cs_randperm (int n, int seed) ; +CASADI_CSPARSE_EXPORT int cs_reach (cs *G, const cs *B, int k, int *xi, const int *pinv) ; +CASADI_CSPARSE_EXPORT int cs_scatter (const cs *A, int j, double beta, int *w, double *x, int mark, + cs *C, int nz) ; +CASADI_CSPARSE_EXPORT csd *cs_scc (cs *A) ; +CASADI_CSPARSE_EXPORT int cs_spsolve (cs *G, const cs *B, int k, int *xi, double *x, + const int *pinv, int lo) ; +CASADI_CSPARSE_EXPORT int cs_tdfs (int j, int k, int *head, const int *next, int *post, + int *stack) ; +/* utilities */ +CASADI_CSPARSE_EXPORT csd *cs_dalloc (int m, int n) ; +CASADI_CSPARSE_EXPORT csd *cs_ddone (csd *D, cs *C, void *w, int ok) ; +CASADI_CSPARSE_EXPORT cs *cs_done (cs *C, void *w, void *x, int ok) ; +CASADI_CSPARSE_EXPORT int *cs_idone (int *p, cs *C, void *w, int ok) ; +CASADI_CSPARSE_EXPORT csn *cs_ndone (csn *N, cs *C, void *w, void *x, int ok) ; + +#ifdef __cplusplus +} +#endif + +#define CS_MAX(a,b) (((a) > (b)) ? (a) : (b)) +#define CS_MIN(a,b) (((a) < (b)) ? (a) : (b)) +#define CS_FLIP(i) (-(i)-2) +#define CS_UNFLIP(i) (((i) < 0) ? CS_FLIP(i) : (i)) +#define CS_MARKED(w,j) (w [j] < 0) +#define CS_MARK(w,j) { w [j] = CS_FLIP (w [j]) ; } +#define CS_CSC(A) (A && (A->nz == -1)) +#define CS_TRIPLET(A) (A && (A->nz >= 0)) +#endif diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdp5.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdp5.h new file mode 100755 index 0000000..60df2ba --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdp5.h @@ -0,0 +1,221 @@ +#if !defined(__DSDP_INTERFACE_H) +#define __DSDP_INTERFACE_H +/*! + \file dsdp5.h + \brief The API to DSDP for those applications using DSDP as a subroutine library +*/ + +#include "dsdpbasictypes.h" +#include "dsdpsys.h" + +/*! +\typedef struct SDPCone_C* SDPCone; +\brief The SDPCone object points to blocks of data that specify +semidefinite matrix inequalities. +*/ +/*! +\typedef struct LPCone_C* LPCone; +\brief The LPCone object points to blocks of data that specify +linear scalar inequality constraints. +*/ +/*! +\typedef struct BCone_C* BCone; +\brief The BCone object points to lower and upper bounds on +the variable y in (D). +*/ +typedef struct SDPCone_C* SDPCone; +typedef struct LPCone_C* LPCone; +typedef struct BCone_C* BCone; +extern FILE *dsdpoutputfile; + +#ifdef __cplusplus +extern "C" { +#endif + + +extern int DSDPCreate(int, DSDP *); +extern int DSDPSetup(DSDP); +extern int DSDPSolve(DSDP); +extern int DSDPComputeX(DSDP); +extern int DSDPComputeAndFactorS(DSDP,DSDPTruth*); +extern int DSDPDestroy(DSDP); + +extern int DSDPCreateBCone(DSDP, BCone*); +extern int BConeAllocateBounds(BCone,int); +extern int BConeSetLowerBound(BCone,int, double); +extern int BConeSetUpperBound(BCone,int, double); +extern int BConeSetUnboundedLower(BCone,int); +extern int BConeSetUnboundedUpper(BCone,int); +extern int BConeSetPSlackVariable(BCone,int); +extern int BConeSetPSurplusVariable(BCone,int); +extern int BConeScaleBarrier(BCone,double); +extern int BConeView(BCone); +extern int BConeSetXArray(BCone,double[], int); +extern int BConeCopyXSingle(BCone,double [], int m); +extern int BConeCopyX(BCone,double[],double[],int); + +extern int DSDPBoundDualVariables(DSDP,double, double); +extern int DSDPSetYBounds(DSDP,double,double); +extern int DSDPGetYBounds(DSDP,double*,double*); + +extern int DSDPCreateLPCone(DSDP,LPCone*); +extern int LPConeSetData(LPCone,int,const int[],const int[],const double[]); +extern int LPConeSetData2(LPCone,int,const int[],const int[],const double[]); +extern int LPConeSetDataC(LPCone lpcone,int n, const double vals[]); +extern int LPConeGetData(LPCone,int,double[],int); +extern int LPConeScaleBarrier(LPCone,double); +extern int LPConeGetXArray(LPCone,double*[], int*); +extern int LPConeGetSArray(LPCone,double*[], int*); +extern int LPConeGetDimension(LPCone,int*); +extern int LPConeView(LPCone lpcone); +extern int LPConeView2(LPCone lpcone); +extern int LPConeCopyS(LPCone,double[],int); + +extern int DSDPCreateSDPCone(DSDP, int, SDPCone*); +extern int SDPConeSetBlockSize(SDPCone, int, int); +extern int SDPConeGetBlockSize(SDPCone, int, int*); +extern int SDPConeSetStorageFormat(SDPCone, int, char); +extern int SDPConeGetStorageFormat(SDPCone, int, char*); +extern int SDPConeCheckStorageFormat(SDPCone, int, char); +extern int SDPConeSetSparsity(SDPCone, int, int); +extern int SDPConeView(SDPCone); +extern int SDPConeView2(SDPCone); +extern int SDPConeView3(SDPCone); + +extern int SDPConeSetASparseVecMat(SDPCone,int,int,int,double,int,const int[],const double[],int); +extern int SDPConeSetADenseVecMat(SDPCone,int,int,int,double,double[],int); +/* extern int SDPConeSetDenseMatWSparseData(SDPCone,int, int, int, double*, int*, int*); */ +extern int SDPConeSetARankOneMat(SDPCone,int,int,int,double,int,const int[],const double[],int); +extern int SDPConeSetConstantMat(SDPCone,int,int,int,double); +extern int SDPConeSetZeroMat(SDPCone,int,int,int); +extern int SDPConeSetIdentity(SDPCone,int,int,int,double); +extern int SDPConeViewDataMatrix(SDPCone,int,int); +extern int SDPConeMatrixView(SDPCone,int); + +extern int SDPConeAddASparseVecMat(SDPCone,int,int,int,double,int,const int[],const double[],int); +extern int SDPConeAddADenseVecMat(SDPCone,int,int,int,double,double[],int); +extern int SDPConeAddConstantMat(SDPCone,int,int,int,double); +extern int SDPConeAddIdentity(SDPCone,int,int,int,double); +extern int SDPConeAddARankOneMat(SDPCone,int,int,int,double,int,const int[],const double[],int); + +/* For backward compatibility */ +extern int SDPConeAddSparseVecMat(SDPCone,int,int,int,int,const int[],const double[],int); +extern int SDPConeAddDenseVecMat(SDPCone,int,int,int,double[],int); +extern int SDPConeSetSparseVecMat(SDPCone,int,int,int,int,const int[],const double[],int); +extern int SDPConeSetDenseVecMat(SDPCone,int,int,int,double[],int); + +extern int SDPConeSetXMat(SDPCone,int,int); +extern int SDPConeSetXArray(SDPCone,int,int,double[], int); +extern int SDPConeGetXArray(SDPCone,int,double*[],int*); +extern int SDPConeRestoreXArray(SDPCone,int,double*[],int*); +extern int SDPConeCheckData(SDPCone); +extern int SDPConeRemoveDataMatrix(SDPCone,int,int); +extern int SDPConeGetNumberOfBlocks(SDPCone, int*); +extern int SDPConeComputeS(SDPCone, int, double,double[], int, double,int,double[],int); +extern int SDPConeComputeX(SDPCone,int,int,double[],int); +extern int SDPConeAddADotX(SDPCone,int,double,double[],int,double[],int); +extern int SDPConeViewX(SDPCone,int,int,double[],int); +extern int SDPConeSetLanczosIterations(SDPCone,int); +extern int SDPConeScaleBarrier(SDPCone,int,double); +extern int SDPConeXVMultiply(SDPCone,int,double[],double[],int); +extern int SDPConeComputeXV(SDPCone,int,int*); +extern int SDPConeAddXVAV(SDPCone,int,double[],int,double[],int); +extern int SDPConeUseLAPACKForDualMatrix(SDPCone,int); + +extern int DSDPSetDualObjective(DSDP,int,double); +extern int DSDPAddObjectiveConstant(DSDP,double); +extern int DSDPGetDObjective(DSDP,double*); +extern int DSDPGetDDObjective(DSDP,double*); +extern int DSDPGetPObjective(DSDP,double*); +extern int DSDPGetPPObjective(DSDP,double*); +/* +extern int DSDPGetDualObjective(DSDP,double*); +extern int DSDPGetPrimalObjective(DSDP,double*); +*/ +#define DSDPGetDualObjective DSDPGetDDObj +#define DSDPGetPrimalObjective DSDPGetPPObj +extern int DSDPGetDualityGap(DSDP,double*); +extern int DSDPGetScale(DSDP,double*); +extern int DSDPSetScale(DSDP,double); +extern int DSDPGetPenaltyParameter(DSDP,double*); +extern int DSDPGetPenalty(DSDP,double*); +extern int DSDPCopyB(DSDP,double[], int); + +extern int DSDPSetR0(DSDP,double); +extern int DSDPGetR(DSDP, double *); +extern int DSDPSetRTolerance(DSDP,double); +extern int DSDPGetRTolerance(DSDP,double*); + +extern int DSDPSetY0(DSDP,int, double); +extern int DSDPGetY(DSDP, double[], int); +extern int DSDPGetYMakeX(DSDP, double[], int); +extern int DSDPGetDYMakeX(DSDP, double[], int); +extern int DSDPGetMuMakeX(DSDP, double*); + +#define DSDPSetInitialBarrierParameter DSDPSetBarrierParameter +#define DSDPGetInitialBarrierParameter DSDPGetBarrierParameter +extern int DSDPGetBarrierParameter(DSDP, double *); +extern int DSDPSetBarrierParameter(DSDP, double); +extern int DSDPReuseMatrix(DSDP,int); +extern int DSDPGetReuseMatrix(DSDP,int*); +extern int DSDPGetDimension(DSDP, double*); + +extern int DSDPSetMaxIts(DSDP,int); +extern int DSDPGetMaxIts(DSDP,int*); +extern int DSDPSetStepTolerance(DSDP,double); +extern int DSDPGetStepTolerance(DSDP,double*); +extern int DSDPSetGapTolerance(DSDP,double); +extern int DSDPGetGapTolerance(DSDP,double*); +extern int DSDPSetPNormTolerance(DSDP,double); +extern int DSDPGetPNormTolerance(DSDP,double*); +extern int DSDPSetDualBound(DSDP,double); +extern int DSDPGetDualBound(DSDP,double*); +extern int DSDPSetPTolerance(DSDP,double); +extern int DSDPGetPTolerance(DSDP,double*); +extern int DSDPGetPInfeasibility(DSDP,double*); +extern int DSDPSetMaxTrustRadius(DSDP,double); +extern int DSDPGetMaxTrustRadius(DSDP,double*); +extern int DSDPStopReason(DSDP,DSDPTerminationReason *); +extern int DSDPGetSolutionType(DSDP,DSDPSolutionType*); +extern int DSDPSetPotentialParameter(DSDP, double); +extern int DSDPGetPotentialParameter(DSDP, double*); +extern int DSDPUseDynamicRho(DSDP, int); +extern int DSDPGetPotential(DSDP,double*); +extern int DSDPUseLAPACKForSchur(DSDP,int); +extern int DSDPGetNumberOfVariables(DSDP,int*); +extern int DSDPGetFinalErrors(DSDP,double[6]); +extern int DSDPGetGapHistory(DSDP, double[], int); +extern int DSDPGetRHistory(DSDP, double[], int); +extern int DSDPGetIts(DSDP,int *); +extern int DSDPGetPnorm(DSDP, double *); +extern int DSDPGetStepLengths(DSDP, double*,double*); +extern int DSDPSetMonitor(DSDP, int (*)(DSDP,void*),void*); +extern int DSDPSetStandardMonitor(DSDP,int); +extern int DSDPSetFileMonitor(DSDP,int); +extern int DSDPSetPenaltyParameter(DSDP,double); +extern int DSDPUsePenalty(DSDP,int); +extern int DSDPPrintLogInfo(int); +extern int DSDPComputeMinimumXEigenvalue(DSDP, double*); +extern int DSDPGetTraceX(DSDP dsdp, double*); +extern int DSDPSetZBar(DSDP,double); +extern int DSDPSetDualLowerBound(DSDP, double); +extern int DSDPGetDataNorms(DSDP, double[3]); +extern int DSDPGetYMaxNorm(DSDP, double*); +extern int SDPConeUseFullSymmetricFormat(SDPCone, int); +extern int SDPConeUsePackedFormat(SDPCone, int); +extern int DSDPSetFixedVariable(DSDP,int,double); +extern int DSDPSetFixedVariables(DSDP,double[],double[],double[],int); +extern int DSDPGetFixedYX(DSDP,int,double*); +extern int DSDPView(DSDP); +extern int DSDPPrintOptions(); +extern int DSDPPrintData(DSDP,SDPCone,LPCone); +extern int DSDPPrintSolution(FILE*,DSDP,SDPCone, LPCone); +extern int DSDPSetOptions(DSDP,char*[], int); +extern int DSDPReadOptions(DSDP, char[]); +extern int DSDPSetDestroyRoutine(DSDP, int (*)(void*), void*); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdpbasictypes.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdpbasictypes.h new file mode 100755 index 0000000..aa45651 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdpbasictypes.h @@ -0,0 +1,63 @@ +#ifndef __DSDP_BASIC_TYPES +#define __DSDP_BASIC_TYPES +/*! + \file dsdpbasictypes.h + \brief Solver, solution types, termination codes, +*/ + +/*! +\typedef struct DSDP_C* DSDP; +\brief An implementation of +the dual-scaling algorithm for semidefinite programming. +*/ +typedef struct DSDP_C* DSDP; + +/*! +\typedef enum DSDPTruth +\brief Boolean variables +*/ +typedef enum { DSDP_FALSE = 0, /*!< 0*/ DSDP_TRUE = 1/*!< 1 */} DSDPTruth; + +/*! +\typedef enum DSDPDualFactorMatrix +\brief DSDP requires two instances of the data structures S. +*/ +typedef enum { + DUAL_FACTOR = 1, /*!< First instance for dual variable S */ + PRIMAL_FACTOR = 2 /*!< Second instance used to compute X */ +} DSDPDualFactorMatrix; + +typedef enum { DSDPAlways=1, DSDPNever=2, DSDPInfeasible=0} DSDPPenalty; + +/*! +\typedef enum DSDPSolutionType +\brief Formulations (P) and (D) can be feasible and bounded, feasible +and unbounded, or infeasible. +\sa DSDPGetSolutionType() +*/ +typedef enum {/* converged */ + DSDP_PDUNKNOWN = 0, /*!< Not sure whether (D) or (P) is feasible, check y bounds */ + DSDP_PDFEASIBLE = 1, /*!< Both (D) and (P) are feasible and bounded */ + DSDP_UNBOUNDED = 3, /*!< (D) is unbounded and (P) is infeasible */ + DSDP_INFEASIBLE = 4 /*!< (D) in infeasible and (P) is unbounded */ +} DSDPSolutionType; + +/*! +\typedef enum DSDPTerminationReason +\brief There are many reasons to terminate the solver. +\sa DSDPStopReason() +*/ +typedef enum { + DSDP_CONVERGED = 1, /*!< Good news: Solution found. */ + DSDP_INFEASIBLE_START = -6, /*!< The initial points y and r imply that S is not positive*/ + DSDP_SMALL_STEPS = -2, /*!< Short step lengths created by numerical difficulties prevent progress */ + DSDP_INDEFINITE_SCHUR_MATRIX = -8, /*!< Theoretically this matrix is positive definite */ + DSDP_MAX_IT = -3, /*!< Reached maximum number of iterations */ + DSDP_NUMERICAL_ERROR = -9, /*!< Another numerical error occurred. Check solution */ + DSDP_UPPERBOUND = 5, /*!< Objective (DD) big enough to stop */ + DSDP_USER_TERMINATION = 7, /*!< DSDP didn't stop it, did you? */ + CONTINUE_ITERATING = 0 /*!< Don't Stop */ } DSDPTerminationReason; + +extern int DSDPSetConvergenceFlag(DSDP,DSDPTerminationReason); + +#endif diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdplapack.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdplapack.h new file mode 100755 index 0000000..fa5dfec --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdplapack.h @@ -0,0 +1,217 @@ +#if !defined(DSDPLAPACK) +#define DSDPLAPACK +/*! +\file dsdplapack.h +\brief DSDP uses BLAS and LAPACK for many of its operations. +*/ + +typedef long int ffinteger; +/* +typedef int ffinteger; +*/ +/* +#define __DSDP_NONAMEMANGLING +#undef __DSDP_NONAMEMANGLING +*/ + + +#ifdef __cplusplus +#define __DSDP_NONAMEMANGLING +#endif + + +#ifdef __DSDP_NONAMEMANGLING +#define EXTERN_C_BEGIN extern "C" { +#define EXTERN_C_END } +#else +#define EXTERN_C_BEGIN +#define EXTERN_C_END +#endif + +/* +#define NOUNDERBLAS +#define CAPSBLAS +*/ + +#ifdef NOUNDERBLAS +#ifdef CAPSBLAS +#define dstev DSTEV +#define dpotrf DPOTRF +#define dtrsm DTRSM +#define dsyev DSYEV +#define dpotrs DPOTRS +#define daxpy DAXPY +#define dgemv DGEMV +#define dscal DSCAL +#define dger DGER +#define dsymv DSYMV +#define dasum DASUM +#define ddot DDOT +#define dnrm2 DNRM2 +#define dspmv DSPMV +#define dspr DSPR +#define dpptrf DPPTRF +#define dpptrs DPPTRS +#define dtpsv DTPSV +#define dspevd DSPEVD +#define dtrsv DTRSV +#define dsyr DSYR +#define dtrmv DTRMV +#define dpotri DPOTRI +#define dpptri DPPTRI +#define dsyevx DSYEVX +#define dsyevd DSYEVD +#define dspevx DSPEVX +#define dsyevr DSYEVR +#define dstevr DSTEVR +#endif +#endif + +#ifndef NOUNDERBLAS +#ifdef CAPSBLAS +#define dstev DSTEV_ +#define dpotrf DPOTRF_ +#define dtrsm DTRSM_ +#define dsyev DSYEV_ +#define dpotrs DPOTRS_ +#define daxpy DAXPY_ +#define dgemv DGEMV_ +#define dscal DSCAL_ +#define dger DGER_ +#define dsymv DSYMV_ +#define ddot DDOT_ +#define dnrm2 DNRM2_ +#define dasum DASUM_ +#define dspmv DSPMV_ +#define dspr DSPR_ +#define dpptrf DPPTRF_ +#define dpptrs DPPTRS_ +#define dtpsv DTPSV_ +#define dspevd DSPEVD_ +#define dtrsv DTRSV_ +#define dsyr DSYR_ +#define dtrmv DTRMV_ +#define dpotri DPOTRI_ +#define dpptri DPPTRI_ +#define dsyevx DSYEVX_ +#define dsyevd DSYEVD_ +#define dspevx DSPEVX_ +#define dsyevr DSYEVR_ +#define dstevr DSTEVR_ +#endif +#endif + +#ifdef NOUNDERBLAS +#ifndef CAPSBLAS +#define dstev dstev +#define dpotrf dpotrf +#define dtrsm dtrsm +#define dsyev dsyev +#define dpotrs dpotrs +#define daxpy daxpy +#define dgemv dgemv +#define dscal dscal +#define dger dger +#define dsymv dsymv +#define dasum dasum +#define ddot ddot +#define dnrm2 dnrm2 +#define dspmv dspmv +#define dspr dspr +#define dpptrf dpptrf +#define dpptrs dpptrs +#define dtpsv dtpsv +#define dspevd dspevd +#define dtrsv dtrsv +#define dsyr dsyr +#define dtrmv dtrmv +#define dpotri dpotri +#define dpptri dpptri +#define dsyevx dsyevx +#define dsyevd dsyevd +#define dspevx dspevx +#define dsyevr dsyevr +#define dstevr dstevr +#endif +#endif + +#ifndef NOUNDERBLAS +#ifndef CAPSBLAS +#define dstev dstev_ +#define dpotrf dpotrf_ +#define dtrsm dtrsm_ +#define dsyev dsyev_ +#define dpotrs dpotrs_ +#define daxpy daxpy_ +#define dgemv dgemv_ +#define dscal dscal_ +#define dger dger_ +#define dsymv dsymv_ +#define dasum dasum_ +#define ddot ddot_ +#define dnrm2 dnrm2_ +#define dspmv dspmv_ +#define dspr dspr_ +#define dpptrf dpptrf_ +#define dpptrs dpptrs_ +#define dtpsv dtpsv_ +#define dspevd dspevd_ +#define dtrsv dtrsv_ +#define dsyr dsyr_ +#define dtrmv dtrmv_ +#define dpotri dpotri_ +#define dpptri dpptri_ +#define dsyevx dsyevx_ +#define dsyevd dsyevd_ +#define dspevx dspevx_ +#define dsyevr dsyevr_ +#define dstevr dstevr_ +#endif +#endif + +EXTERN_C_BEGIN + +void dpotrs(char*,ffinteger*,ffinteger*,double*,ffinteger*,double*,ffinteger*,ffinteger*); /* Cholesky Solve */ +void dpotrf(char*,ffinteger*,double*,ffinteger*,ffinteger*); /* Cholesky Factor */ +void dtrsm(char*,char*,char*,char*,ffinteger*,ffinteger*,double*,double*,ffinteger*,double*,ffinteger*); /* Cholesky trianglular solve */ +void dsyev(char*,char*,ffinteger*,double*,ffinteger*,double*,double*,ffinteger*,ffinteger*); /* Compute eigenvalues/vectors */ +void dstev(char*,ffinteger*,double*,double*,double*,ffinteger*,double*,ffinteger*); /* Compute eigenvalues/vectors */ +void dgemv(char*,ffinteger*,ffinteger*,double*,double*,ffinteger*,double*,ffinteger*,double*,double*,ffinteger*); +void dspmv(char*,ffinteger*,double*,double*,double*,ffinteger*,double*,double*,ffinteger*); + +void dspr(char*,ffinteger*,double*,double*,ffinteger*,double*); +void dpptrs(char*,ffinteger*,ffinteger*,double*,double*,ffinteger*,ffinteger*); +void dpptrf(char*,ffinteger*,double*,ffinteger*); + +void dtrsv(char*,char*,char*,ffinteger*,double*,ffinteger*,double*,ffinteger*); +void dsyr(char*,ffinteger*,double*,double*,ffinteger*,double*,ffinteger*); +void dtrmv(char*,char*,char*,ffinteger*,double*,ffinteger*,double*,ffinteger*); + +void dtpsv(char*,char*,char*,ffinteger*,double*,double*,ffinteger*); +void dger(ffinteger*,ffinteger*,double*,double*,ffinteger*,double*,ffinteger*,double*,ffinteger*); +void dsymv(char*,ffinteger*,double*,double*,ffinteger*,double*,ffinteger*, double*,double*,ffinteger*); +void dspevd(char*,char*,ffinteger*,double*,double*,double*,ffinteger*,double*,ffinteger*,ffinteger*,ffinteger*,ffinteger*); + +double dasum(ffinteger*,double*,ffinteger*); +void dscal(ffinteger*,double*,double*,ffinteger*); +void daxpy(ffinteger*,double*,double*,ffinteger*,double*,ffinteger*); +double ddot(ffinteger*,double*,ffinteger*,double*,ffinteger*); +double dnrm2(ffinteger*,double*,ffinteger*); + +void dpotri(char*,ffinteger*,double*,ffinteger*,ffinteger*); +void dpptri(char*,ffinteger*,double*,ffinteger*); + +void dsyevx(char*, char*, char*, ffinteger*,double*, ffinteger*, double*, double*, ffinteger*, ffinteger*, double*, ffinteger*, double *,double*, ffinteger *, double *, ffinteger*, ffinteger*, ffinteger*, ffinteger*); + +void dspevx(char*, char*, char*, ffinteger*,double*, double*, double*, ffinteger*, ffinteger*, double*, ffinteger*, double *,double*, ffinteger *, double *, ffinteger*, ffinteger*, ffinteger*); + +void dsdevx(char*, char*, char*, ffinteger*,double*, double*, double*, ffinteger*, ffinteger*, double*, ffinteger*, double *,double*, ffinteger *, double *, ffinteger*, ffinteger*, ffinteger*, ffinteger*); + + +void dsyevr(char*, char*, char*, ffinteger*, double*, ffinteger*, double*, double*, ffinteger*, ffinteger*,double*, ffinteger*, double*, double*, ffinteger*, ffinteger*, double*, ffinteger*, ffinteger*, ffinteger*, ffinteger*); + +void dstevr(char*, char*, ffinteger*, double*, double*, double*, double*, ffinteger*, ffinteger*,double*, ffinteger*, double*, double*, ffinteger*, ffinteger*, double*, ffinteger*, ffinteger*, ffinteger*, ffinteger*); + +EXTERN_C_END + +#endif diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdpmem.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdpmem.h new file mode 100755 index 0000000..448f51e --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdpmem.h @@ -0,0 +1,95 @@ + +#if !defined(__DSDP_MEM_H) +#define __DSDP_MEM_H +/*! \file dsdpmem.h + \brief Memory allocation in DSDP +*/ +#include +#include +#include +#include +#include + +extern int DSDPMMalloc(const char*, size_t, void**); +extern int DSDPFFree(void**); +/* Define some macros for memory management */ + +/* +#define DSDPFree(a) 0;printf("FREE: %s\n",__FUNCT__); free((*a)) +#define DSDPMalloc(a,b) 0;printf("Malloc: %s\n",__FUNCT__); if (b){*(b)=malloc((a)); } +*/ + +#ifdef DSDPMATLAB + +#define DSDPCALLOC1(VAR,TYPE,MERR) { \ + *(VAR) = (TYPE*)mxMalloc(sizeof(TYPE)); \ + *MERR=0; \ + if ( *(VAR)==0){*(MERR)=1;} \ + else {memset(*(VAR),0,sizeof(TYPE));} } + +#define DSDPCALLOC2(VAR,TYPE,SIZE,MERR) { \ + *MERR=0; \ + *VAR=0; \ + if (SIZE>0){ \ + *(VAR) = (TYPE*)mxMalloc((SIZE)*sizeof(TYPE)); \ + if (*(VAR)==0){ *(MERR)=1;} \ + else {memset(*(VAR),0,(SIZE)*sizeof(TYPE));} \ + } \ +} + +#define DSDPFREE(VAR,MERR) {if (*(VAR)){mxFree(*(VAR));}*(VAR)=0;*(MERR)=0;} +#endif + +/* +#ifndef DSDPCALLOC1 +#define DSDPCALLOC1(VAR,TYPE,MERR) { (*MERR)=DSDPMMalloc(__FUNCT__,sizeof(TYPE),(void**)(VAR));} +#endif + +#ifndef DSDPCALLOC2 +#define DSDPCALLOC2(VAR,TYPE,SIZE,MERR) { (*MERR)=DSDPMMalloc(__FUNCT__,(SIZE)*sizeof(TYPE),(void**)(VAR));} +#endif + +#ifndef DSDPFREE +#define DSDPFREE(a,b) {*(b)=DSDPFFree((void**)(a));} +#endif +*/ + +#ifndef DSDPCALLOC1 +#define DSDPCALLOC1(VAR,TYPE,MERR) { \ + *(VAR) = (TYPE*)calloc(1, sizeof(TYPE)); \ + *MERR=0; \ + if ( *(VAR)==0){*(MERR)=1;} \ + else { memset(*(VAR),0,sizeof(TYPE)); } \ +} +#endif + +#ifndef DSDPCALLOC2 +#define DSDPCALLOC2(VAR,TYPE,SIZE,MERR) { \ + *MERR=0; \ + *VAR=0; \ + if (SIZE>0){ \ + *(VAR) = (TYPE*)calloc(SIZE, sizeof(TYPE)); \ + if (*(VAR)==0){ *(MERR)=1;} \ + else { memset(*(VAR),0,(SIZE)*sizeof(TYPE)); } \ + } \ +} +#endif + +#ifndef DSDPFREE +#define DSDPFREE(VAR,MERR) {if (*(VAR)){free(*(VAR));}*(VAR)=0;*(MERR)=0;} +#endif + +/* +#ifndef DSDPCALLOC1 +#define DSDPCALLOC1(VAR,TYPE,SIZE,MERR) {*(VAR) = new TYPE;*MERR=0;} +#endif +#ifndef DSDPCALLOC2 +#define DSDPCALLOC2(VAR,TYPE,SIZE,MERR) {*(VAR) = new TYPE[SIZE];*MERR=0;} +#endif +#ifndef DSDPFREE +#define DSDPFREE(a,b) {delete(*(a));*(a)=0;*(b)=0;} +#endif +*/ + + +#endif diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdpsys.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdpsys.h new file mode 100755 index 0000000..e0b4ecc --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/DSDP/include/dsdpsys.h @@ -0,0 +1,103 @@ +#if !defined(__DSDP_KERNAL_H) +#define __DSDP_KERNAL_H + +/*! +\file dsdpsys.h +\brief Error handling, printing, and profiling +*/ +#include +#include +#include +#include +#include + +/* Define some macros for error checking */ +#ifdef __FUNCT__ +#undef __FUNCT__ +#endif +#define __FUNCT__ "DSDPUnknownFunction" + +/* +#ifdef __cplusplus +#define DSDPBEGINCROUTINES extern "C" { +#define DSDPENDCROUTINES } +#else +#define DSDPBEGINCROUTINES { +#define DSDPENDCROUTINES } +#endif +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +extern void DSDPTime(double*); + + +extern int DSDPLogInfoAllow(int, char*); + +extern void DSDPError(const char*, int, const char*); +extern void DSDPLogFInfo(void *vobj, int outlevel, const char message[], ...); +extern int DSDPFError(void *vobj, const char *func, int linen,const char *filef, const char message[], ...); + +extern void DSDPMemoryLog(void); +extern int DSDPEventLogBegin(int); +extern int DSDPEventLogEnd(int); +extern int DSDPEventLogRegister(const char*, int*); +extern int DSDPEventLogInitialize(void); +extern int DSDPEventLogSummary(void); +extern int DSDPEventLogInitialize(void); + +#ifdef __cplusplus +} +#endif + + +#ifndef DSDPCHKERR +#define DSDPCHKERR(a) { if (a){ DSDPError(__FUNCT__,__LINE__,__FILE__); return a; } } +#endif + +#ifdef DSDPFunctionReturn +#undef DSDPFunctionReturn +#endif +#define DSDPFunctionReturn return + +#ifdef DSDPFunctionBegin +#undef DSDPFunctionBegin +#endif +#define DSDPFunctionBegin { } + +#ifdef DSDPMATLAB +#include "mex.h" +#define DSDPPrintf mexPrintf +#define DSDPErrorPrintf mexPrintf +#endif + +#include "dsdpmem.h" + +#ifndef DSDPPrintf +#define DSDPPrintf printf +#endif + +#ifndef DSDPErrorPrintf +#define DSDPErrorPrintf printf +#endif + +#define DSDPLogInfo DSDPLogFInfo +/*#define DSDPLogInfo if(0)DSDPLogFInfo */ + + + +#define DSDPSETERR(a,b) {DSDPFError(0,__FUNCT__,__LINE__,__FILE__,b); return (a); } +#define DSDPSETERR1(a,b,c) {DSDPFError(0,__FUNCT__,__LINE__,__FILE__,b,c); return (a); } +#define DSDPSETERR2(a,b,c,d) {DSDPFError(0,__FUNCT__,__LINE__,__FILE__,b,c,d); return (a); } +#define DSDPSETERR3(a,b,c,d,e) {DSDPFError(0,__FUNCT__,__LINE__,__FILE__,b,c,d,e); return (a); } + + +/* +*/ +#define DSDPMin(a,b) ((a <= b)? (a) : (b)) +#define DSDPMax(a,b) ((a >= b)? (a) : (b)) + + +#endif diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/tinyxml-2.6.2/tinystr.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/tinyxml-2.6.2/tinystr.h new file mode 100755 index 0000000..89cca33 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/tinyxml-2.6.2/tinystr.h @@ -0,0 +1,305 @@ +/* +www.sourceforge.net/projects/tinyxml + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + + +#ifndef TIXML_USE_STL + +#ifndef TIXML_STRING_INCLUDED +#define TIXML_STRING_INCLUDED + +#include +#include + +/* The support for explicit isn't that universal, and it isn't really + required - it is used to check that the TiXmlString class isn't incorrectly + used. Be nice to old compilers and macro it here: +*/ +#if defined(_MSC_VER) && (_MSC_VER >= 1200 ) + // Microsoft visual studio, version 6 and higher. + #define TIXML_EXPLICIT explicit +#elif defined(__GNUC__) && (__GNUC__ >= 3 ) + // GCC version 3 and higher.s + #define TIXML_EXPLICIT explicit +#else + #define TIXML_EXPLICIT +#endif + + +/* + TiXmlString is an emulation of a subset of the std::string template. + Its purpose is to allow compiling TinyXML on compilers with no or poor STL support. + Only the member functions relevant to the TinyXML project have been implemented. + The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase + a string and there's no more room, we allocate a buffer twice as big as we need. +*/ +class TiXmlString +{ + public : + // The size type used + typedef size_t size_type; + + // Error value for find primitive + static const size_type npos; // = -1; + + + // TiXmlString empty constructor + TiXmlString () : rep_(&nullrep_) + { + } + + // TiXmlString copy constructor + TiXmlString ( const TiXmlString & copy) : rep_(0) + { + init(copy.length()); + memcpy(start(), copy.data(), length()); + } + + // TiXmlString constructor, based on a string + TIXML_EXPLICIT TiXmlString ( const char * copy) : rep_(0) + { + init( static_cast( strlen(copy) )); + memcpy(start(), copy, length()); + } + + // TiXmlString constructor, based on a string + TIXML_EXPLICIT TiXmlString ( const char * str, size_type len) : rep_(0) + { + init(len); + memcpy(start(), str, len); + } + + // TiXmlString destructor + ~TiXmlString () + { + quit(); + } + + TiXmlString& operator = (const char * copy) + { + return assign( copy, (size_type)strlen(copy)); + } + + TiXmlString& operator = (const TiXmlString & copy) + { + return assign(copy.start(), copy.length()); + } + + + // += operator. Maps to append + TiXmlString& operator += (const char * suffix) + { + return append(suffix, static_cast( strlen(suffix) )); + } + + // += operator. Maps to append + TiXmlString& operator += (char single) + { + return append(&single, 1); + } + + // += operator. Maps to append + TiXmlString& operator += (const TiXmlString & suffix) + { + return append(suffix.data(), suffix.length()); + } + + + // Convert a TiXmlString into a null-terminated char * + const char * c_str () const { return rep_->str; } + + // Convert a TiXmlString into a char * (need not be null terminated). + const char * data () const { return rep_->str; } + + // Return the length of a TiXmlString + size_type length () const { return rep_->size; } + + // Alias for length() + size_type size () const { return rep_->size; } + + // Checks if a TiXmlString is empty + bool empty () const { return rep_->size == 0; } + + // Return capacity of string + size_type capacity () const { return rep_->capacity; } + + + // single char extraction + const char& at (size_type index) const + { + assert( index < length() ); + return rep_->str[ index ]; + } + + // [] operator + char& operator [] (size_type index) const + { + assert( index < length() ); + return rep_->str[ index ]; + } + + // find a char in a string. Return TiXmlString::npos if not found + size_type find (char lookup) const + { + return find(lookup, 0); + } + + // find a char in a string from an offset. Return TiXmlString::npos if not found + size_type find (char tofind, size_type offset) const + { + if (offset >= length()) return npos; + + for (const char* p = c_str() + offset; *p != '\0'; ++p) + { + if (*p == tofind) return static_cast< size_type >( p - c_str() ); + } + return npos; + } + + void clear () + { + //Lee: + //The original was just too strange, though correct: + // TiXmlString().swap(*this); + //Instead use the quit & re-init: + quit(); + init(0,0); + } + + /* Function to reserve a big amount of data when we know we'll need it. Be aware that this + function DOES NOT clear the content of the TiXmlString if any exists. + */ + void reserve (size_type cap); + + TiXmlString& assign (const char* str, size_type len); + + TiXmlString& append (const char* str, size_type len); + + void swap (TiXmlString& other) + { + Rep* r = rep_; + rep_ = other.rep_; + other.rep_ = r; + } + + private: + + void init(size_type sz) { init(sz, sz); } + void set_size(size_type sz) { rep_->str[ rep_->size = sz ] = '\0'; } + char* start() const { return rep_->str; } + char* finish() const { return rep_->str + rep_->size; } + + struct Rep + { + size_type size, capacity; + char str[1]; + }; + + void init(size_type sz, size_type cap) + { + if (cap) + { + // Lee: the original form: + // rep_ = static_cast(operator new(sizeof(Rep) + cap)); + // doesn't work in some cases of new being overloaded. Switching + // to the normal allocation, although use an 'int' for systems + // that are overly picky about structure alignment. + const size_type bytesNeeded = sizeof(Rep) + cap; + const size_type intsNeeded = ( bytesNeeded + sizeof(int) - 1 ) / sizeof( int ); + rep_ = reinterpret_cast( new int[ intsNeeded ] ); + + rep_->str[ rep_->size = sz ] = '\0'; + rep_->capacity = cap; + } + else + { + rep_ = &nullrep_; + } + } + + void quit() + { + if (rep_ != &nullrep_) + { + // The rep_ is really an array of ints. (see the allocator, above). + // Cast it back before delete, so the compiler won't incorrectly call destructors. + delete [] ( reinterpret_cast( rep_ ) ); + } + } + + Rep * rep_; + static Rep nullrep_; + +} ; + + +inline bool operator == (const TiXmlString & a, const TiXmlString & b) +{ + return ( a.length() == b.length() ) // optimization on some platforms + && ( strcmp(a.c_str(), b.c_str()) == 0 ); // actual compare +} +inline bool operator < (const TiXmlString & a, const TiXmlString & b) +{ + return strcmp(a.c_str(), b.c_str()) < 0; +} + +inline bool operator != (const TiXmlString & a, const TiXmlString & b) { return !(a == b); } +inline bool operator > (const TiXmlString & a, const TiXmlString & b) { return b < a; } +inline bool operator <= (const TiXmlString & a, const TiXmlString & b) { return !(b < a); } +inline bool operator >= (const TiXmlString & a, const TiXmlString & b) { return !(a < b); } + +inline bool operator == (const TiXmlString & a, const char* b) { return strcmp(a.c_str(), b) == 0; } +inline bool operator == (const char* a, const TiXmlString & b) { return b == a; } +inline bool operator != (const TiXmlString & a, const char* b) { return !(a == b); } +inline bool operator != (const char* a, const TiXmlString & b) { return !(b == a); } + +TiXmlString operator + (const TiXmlString & a, const TiXmlString & b); +TiXmlString operator + (const TiXmlString & a, const char* b); +TiXmlString operator + (const char* a, const TiXmlString & b); + + +/* + TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString. + Only the operators that we need for TinyXML have been developped. +*/ +class TiXmlOutStream : public TiXmlString +{ +public : + + // TiXmlOutStream << operator. + TiXmlOutStream & operator << (const TiXmlString & in) + { + *this += in; + return *this; + } + + // TiXmlOutStream << operator. + TiXmlOutStream & operator << (const char * in) + { + *this += in; + return *this; + } + +} ; + +#endif // TIXML_STRING_INCLUDED +#endif // TIXML_USE_STL diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/tinyxml-2.6.2/tinyxml.h b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/tinyxml-2.6.2/tinyxml.h new file mode 100755 index 0000000..12a7750 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/include/casadi/external_packages/tinyxml-2.6.2/tinyxml.h @@ -0,0 +1,1809 @@ +/* +www.sourceforge.net/projects/tinyxml +Original code by Lee Thomason (www.grinninglizard.com) + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any +damages arising from the use of this software. + +Permission is granted to anyone to use this software for any +purpose, including commercial applications, and to alter it and +redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must +not claim that you wrote the original software. If you use this +software in a product, an acknowledgment in the product documentation +would be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and +must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source +distribution. +*/ + + +#ifndef TINYXML_INCLUDED +#define TINYXML_INCLUDED + +#ifndef TIXML_USE_STL + #define TIXML_USE_STL +#endif + +#ifdef _MSC_VER +#pragma warning( push ) +#pragma warning( disable : 4530 ) +#pragma warning( disable : 4786 ) +#endif + +#include +#include +#include +#include +#include + +// Help out windows: +#if defined( _DEBUG ) && !defined( DEBUG ) +#define DEBUG +#endif + +#ifdef TIXML_USE_STL + #include + #include + #include + #define TIXML_STRING std::string +#else + #include "tinystr.h" + #define TIXML_STRING TiXmlString +#endif + +// Deprecated library function hell. Compilers want to use the +// new safe versions. This probably doesn't fully address the problem, +// but it gets closer. There are too many compilers for me to fully +// test. If you get compilation troubles, undefine TIXML_SAFE +#define TIXML_SAFE + +#ifdef TIXML_SAFE + #if defined(_MSC_VER) && (_MSC_VER >= 1400 ) + // Microsoft visual studio, version 2005 and higher. + #define TIXML_SNPRINTF _snprintf_s + #define TIXML_SSCANF sscanf_s + #elif defined(_MSC_VER) && (_MSC_VER >= 1200 ) + // Microsoft visual studio, version 6 and higher. + //#pragma message( "Using _sn* functions." ) + #define TIXML_SNPRINTF _snprintf + #define TIXML_SSCANF sscanf + #elif defined(__GNUC__) && (__GNUC__ >= 3 ) + // GCC version 3 and higher.s + //#warning( "Using sn* functions." ) + #define TIXML_SNPRINTF snprintf + #define TIXML_SSCANF sscanf + #else + #define TIXML_SNPRINTF snprintf + #define TIXML_SSCANF sscanf + #endif +#endif + +class TiXmlDocument; +class TiXmlElement; +class TiXmlComment; +class TiXmlUnknown; +class TiXmlAttribute; +class TiXmlText; +class TiXmlDeclaration; +class TiXmlParsingData; + +const int TIXML_MAJOR_VERSION = 2; +const int TIXML_MINOR_VERSION = 6; +const int TIXML_PATCH_VERSION = 2; + +/* Internal structure for tracking location of items + in the XML file. +*/ +struct TiXmlCursor +{ + TiXmlCursor() { Clear(); } + void Clear() { row = col = -1; } + + int row; // 0 based. + int col; // 0 based. +}; + + +/** + Implements the interface to the "Visitor pattern" (see the Accept() method.) + If you call the Accept() method, it requires being passed a TiXmlVisitor + class to handle callbacks. For nodes that contain other nodes (Document, Element) + you will get called with a VisitEnter/VisitExit pair. Nodes that are always leaves + are simply called with Visit(). + + If you return 'true' from a Visit method, recursive parsing will continue. If you return + false, no children of this node or its sibilings will be Visited. + + All flavors of Visit methods have a default implementation that returns 'true' (continue + visiting). You need to only override methods that are interesting to you. + + Generally Accept() is called on the TiXmlDocument, although all nodes suppert Visiting. + + You should never change the document from a callback. + + @sa TiXmlNode::Accept() +*/ +class TiXmlVisitor +{ +public: + virtual ~TiXmlVisitor() {} + + /// Visit a document. + virtual bool VisitEnter( const TiXmlDocument& /*doc*/ ) { return true; } + /// Visit a document. + virtual bool VisitExit( const TiXmlDocument& /*doc*/ ) { return true; } + + /// Visit an element. + virtual bool VisitEnter( const TiXmlElement& /*element*/, const TiXmlAttribute* /*firstAttribute*/ ) { return true; } + /// Visit an element. + virtual bool VisitExit( const TiXmlElement& /*element*/ ) { return true; } + + /// Visit a declaration + virtual bool Visit( const TiXmlDeclaration& /*declaration*/ ) { return true; } + /// Visit a text node + virtual bool Visit( const TiXmlText& /*text*/ ) { return true; } + /// Visit a comment node + virtual bool Visit( const TiXmlComment& /*comment*/ ) { return true; } + /// Visit an unknown node + virtual bool Visit( const TiXmlUnknown& /*unknown*/ ) { return true; } +}; + +// Only used by Attribute::Query functions +enum +{ + TIXML_SUCCESS, + TIXML_NO_ATTRIBUTE, + TIXML_WRONG_TYPE +}; + + +// Used by the parsing routines. +enum TiXmlEncoding +{ + TIXML_ENCODING_UNKNOWN, + TIXML_ENCODING_UTF8, + TIXML_ENCODING_LEGACY +}; + +const TiXmlEncoding TIXML_DEFAULT_ENCODING = TIXML_ENCODING_UNKNOWN; + +/** TiXmlBase is a base class for every class in TinyXml. + It does little except to establish that TinyXml classes + can be printed and provide some utility functions. + + In XML, the document and elements can contain + other elements and other types of nodes. + + @verbatim + A Document can contain: Element (container or leaf) + Comment (leaf) + Unknown (leaf) + Declaration( leaf ) + + An Element can contain: Element (container or leaf) + Text (leaf) + Attributes (not on tree) + Comment (leaf) + Unknown (leaf) + + A Decleration contains: Attributes (not on tree) + @endverbatim +*/ +class TiXmlBase +{ + friend class TiXmlNode; + friend class TiXmlElement; + friend class TiXmlDocument; + +public: + TiXmlBase() : userData(0) {} + virtual ~TiXmlBase() {} + + /** All TinyXml classes can print themselves to a filestream + or the string class (TiXmlString in non-STL mode, std::string + in STL mode.) Either or both cfile and str can be null. + + This is a formatted print, and will insert + tabs and newlines. + + (For an unformatted stream, use the << operator.) + */ + virtual void Print( FILE* cfile, int depth ) const = 0; + + /** The world does not agree on whether white space should be kept or + not. In order to make everyone happy, these global, static functions + are provided to set whether or not TinyXml will condense all white space + into a single space or not. The default is to condense. Note changing this + value is not thread safe. + */ + static void SetCondenseWhiteSpace( bool condense ) { condenseWhiteSpace = condense; } + + /// Return the current white space setting. + static bool IsWhiteSpaceCondensed() { return condenseWhiteSpace; } + + /** Return the position, in the original source file, of this node or attribute. + The row and column are 1-based. (That is the first row and first column is + 1,1). If the returns values are 0 or less, then the parser does not have + a row and column value. + + Generally, the row and column value will be set when the TiXmlDocument::Load(), + TiXmlDocument::LoadFile(), or any TiXmlNode::Parse() is called. It will NOT be set + when the DOM was created from operator>>. + + The values reflect the initial load. Once the DOM is modified programmatically + (by adding or changing nodes and attributes) the new values will NOT update to + reflect changes in the document. + + There is a minor performance cost to computing the row and column. Computation + can be disabled if TiXmlDocument::SetTabSize() is called with 0 as the value. + + @sa TiXmlDocument::SetTabSize() + */ + int Row() const { return location.row + 1; } + int Column() const { return location.col + 1; } ///< See Row() + + void SetUserData( void* user ) { userData = user; } ///< Set a pointer to arbitrary user data. + void* GetUserData() { return userData; } ///< Get a pointer to arbitrary user data. + const void* GetUserData() const { return userData; } ///< Get a pointer to arbitrary user data. + + // Table that returs, for a given lead byte, the total number of bytes + // in the UTF-8 sequence. + static const int utf8ByteTable[256]; + + virtual const char* Parse( const char* p, + TiXmlParsingData* data, + TiXmlEncoding encoding /*= TIXML_ENCODING_UNKNOWN */ ) = 0; + + /** Expands entities in a string. Note this should not contian the tag's '<', '>', etc, + or they will be transformed into entities! + */ + static void EncodeString( const TIXML_STRING& str, TIXML_STRING* out ); + + enum + { + TIXML_NO_ERROR = 0, + TIXML_ERROR, + TIXML_ERROR_OPENING_FILE, + TIXML_ERROR_PARSING_ELEMENT, + TIXML_ERROR_FAILED_TO_READ_ELEMENT_NAME, + TIXML_ERROR_READING_ELEMENT_VALUE, + TIXML_ERROR_READING_ATTRIBUTES, + TIXML_ERROR_PARSING_EMPTY, + TIXML_ERROR_READING_END_TAG, + TIXML_ERROR_PARSING_UNKNOWN, + TIXML_ERROR_PARSING_COMMENT, + TIXML_ERROR_PARSING_DECLARATION, + TIXML_ERROR_DOCUMENT_EMPTY, + TIXML_ERROR_EMBEDDED_NULL, + TIXML_ERROR_PARSING_CDATA, + TIXML_ERROR_DOCUMENT_TOP_ONLY, + + TIXML_ERROR_STRING_COUNT + }; + +protected: + + static const char* SkipWhiteSpace( const char*, TiXmlEncoding encoding ); + + inline static bool IsWhiteSpace( char c ) + { + return ( isspace( (unsigned char) c ) || c == '\n' || c == '\r' ); + } + inline static bool IsWhiteSpace( int c ) + { + if ( c < 256 ) + return IsWhiteSpace( (char) c ); + return false; // Again, only truly correct for English/Latin...but usually works. + } + + #ifdef TIXML_USE_STL + static bool StreamWhiteSpace( std::istream * in, TIXML_STRING * tag ); + static bool StreamTo( std::istream * in, int character, TIXML_STRING * tag ); + #endif + + /* Reads an XML name into the string provided. Returns + a pointer just past the last character of the name, + or 0 if the function has an error. + */ + static const char* ReadName( const char* p, TIXML_STRING* name, TiXmlEncoding encoding ); + + /* Reads text. Returns a pointer past the given end tag. + Wickedly complex options, but it keeps the (sensitive) code in one place. + */ + static const char* ReadText( const char* in, // where to start + TIXML_STRING* text, // the string read + bool ignoreWhiteSpace, // whether to keep the white space + const char* endTag, // what ends this text + bool ignoreCase, // whether to ignore case in the end tag + TiXmlEncoding encoding ); // the current encoding + + // If an entity has been found, transform it into a character. + static const char* GetEntity( const char* in, char* value, int* length, TiXmlEncoding encoding ); + + // Get a character, while interpreting entities. + // The length can be from 0 to 4 bytes. + inline static const char* GetChar( const char* p, char* _value, int* length, TiXmlEncoding encoding ) + { + assert( p ); + if ( encoding == TIXML_ENCODING_UTF8 ) + { + *length = utf8ByteTable[ *((const unsigned char*)p) ]; + assert( *length >= 0 && *length < 5 ); + } + else + { + *length = 1; + } + + if ( *length == 1 ) + { + if ( *p == '&' ) + return GetEntity( p, _value, length, encoding ); + *_value = *p; + return p+1; + } + else if ( *length ) + { + //strncpy( _value, p, *length ); // lots of compilers don't like this function (unsafe), + // and the null terminator isn't needed + for( int i=0; p[i] && i<*length; ++i ) { + _value[i] = p[i]; + } + return p + (*length); + } + else + { + // Not valid text. + return 0; + } + } + + // Return true if the next characters in the stream are any of the endTag sequences. + // Ignore case only works for english, and should only be relied on when comparing + // to English words: StringEqual( p, "version", true ) is fine. + static bool StringEqual( const char* p, + const char* endTag, + bool ignoreCase, + TiXmlEncoding encoding ); + + static const char* errorString[ TIXML_ERROR_STRING_COUNT ]; + + TiXmlCursor location; + + /// Field containing a generic user pointer + void* userData; + + // None of these methods are reliable for any language except English. + // Good for approximation, not great for accuracy. + static int IsAlpha( unsigned char anyByte, TiXmlEncoding encoding ); + static int IsAlphaNum( unsigned char anyByte, TiXmlEncoding encoding ); + inline static int ToLower( int v, TiXmlEncoding encoding ) + { + if ( encoding == TIXML_ENCODING_UTF8 ) + { + if ( v < 128 ) return tolower( v ); + return v; + } + else + { + return tolower( v ); + } + } + static void ConvertUTF32ToUTF8( unsigned long input, char* output, int* length ); + +private: + TiXmlBase( const TiXmlBase& ); // not implemented. + void operator=( const TiXmlBase& base ); // not allowed. + + struct Entity + { + const char* str; + unsigned int strLength; + char chr; + }; + enum + { + NUM_ENTITY = 5, + MAX_ENTITY_LENGTH = 6 + + }; + static Entity entity[ NUM_ENTITY ]; + static bool condenseWhiteSpace; +}; + + +/** The parent class for everything in the Document Object Model. + (Except for attributes). + Nodes have siblings, a parent, and children. A node can be + in a document, or stand on its own. The type of a TiXmlNode + can be queried, and it can be cast to its more defined type. +*/ +class TiXmlNode : public TiXmlBase +{ + friend class TiXmlDocument; + friend class TiXmlElement; + +public: + #ifdef TIXML_USE_STL + + /** An input stream operator, for every class. Tolerant of newlines and + formatting, but doesn't expect them. + */ + friend std::istream& operator >> (std::istream& in, TiXmlNode& base); + + /** An output stream operator, for every class. Note that this outputs + without any newlines or formatting, as opposed to Print(), which + includes tabs and new lines. + + The operator<< and operator>> are not completely symmetric. Writing + a node to a stream is very well defined. You'll get a nice stream + of output, without any extra whitespace or newlines. + + But reading is not as well defined. (As it always is.) If you create + a TiXmlElement (for example) and read that from an input stream, + the text needs to define an element or junk will result. This is + true of all input streams, but it's worth keeping in mind. + + A TiXmlDocument will read nodes until it reads a root element, and + all the children of that root element. + */ + friend std::ostream& operator<< (std::ostream& out, const TiXmlNode& base); + + /// Appends the XML node or attribute to a std::string. + friend std::string& operator<< (std::string& out, const TiXmlNode& base ); + + #endif + + /** The types of XML nodes supported by TinyXml. (All the + unsupported types are picked up by UNKNOWN.) + */ + enum NodeType + { + TINYXML_DOCUMENT, + TINYXML_ELEMENT, + TINYXML_COMMENT, + TINYXML_UNKNOWN, + TINYXML_TEXT, + TINYXML_DECLARATION, + TINYXML_TYPECOUNT + }; + + virtual ~TiXmlNode(); + + /** The meaning of 'value' changes for the specific type of + TiXmlNode. + @verbatim + Document: filename of the xml file + Element: name of the element + Comment: the comment text + Unknown: the tag contents + Text: the text string + @endverbatim + + The subclasses will wrap this function. + */ + const char *Value() const { return value.c_str (); } + + #ifdef TIXML_USE_STL + /** Return Value() as a std::string. If you only use STL, + this is more efficient than calling Value(). + Only available in STL mode. + */ + const std::string& ValueStr() const { return value; } + #endif + + const TIXML_STRING& ValueTStr() const { return value; } + + /** Changes the value of the node. Defined as: + @verbatim + Document: filename of the xml file + Element: name of the element + Comment: the comment text + Unknown: the tag contents + Text: the text string + @endverbatim + */ + void SetValue(const char * _value) { value = _value;} + + #ifdef TIXML_USE_STL + /// STL std::string form. + void SetValue( const std::string& _value ) { value = _value; } + #endif + + /// Delete all the children of this node. Does not affect 'this'. + void Clear(); + + /// One step up the DOM. + TiXmlNode* Parent() { return parent; } + const TiXmlNode* Parent() const { return parent; } + + const TiXmlNode* FirstChild() const { return firstChild; } ///< The first child of this node. Will be null if there are no children. + TiXmlNode* FirstChild() { return firstChild; } + const TiXmlNode* FirstChild( const char * value ) const; ///< The first child of this node with the matching 'value'. Will be null if none found. + /// The first child of this node with the matching 'value'. Will be null if none found. + TiXmlNode* FirstChild( const char * _value ) { + // Call through to the const version - safe since nothing is changed. Exiting syntax: cast this to a const (always safe) + // call the method, cast the return back to non-const. + return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->FirstChild( _value )); + } + const TiXmlNode* LastChild() const { return lastChild; } /// The last child of this node. Will be null if there are no children. + TiXmlNode* LastChild() { return lastChild; } + + const TiXmlNode* LastChild( const char * value ) const; /// The last child of this node matching 'value'. Will be null if there are no children. + TiXmlNode* LastChild( const char * _value ) { + return const_cast< TiXmlNode* > ((const_cast< const TiXmlNode* >(this))->LastChild( _value )); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* FirstChild( const std::string& _value ) const { return FirstChild (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* FirstChild( const std::string& _value ) { return FirstChild (_value.c_str ()); } ///< STL std::string form. + const TiXmlNode* LastChild( const std::string& _value ) const { return LastChild (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* LastChild( const std::string& _value ) { return LastChild (_value.c_str ()); } ///< STL std::string form. + #endif + + /** An alternate way to walk the children of a node. + One way to iterate over nodes is: + @verbatim + for( child = parent->FirstChild(); child; child = child->NextSibling() ) + @endverbatim + + IterateChildren does the same thing with the syntax: + @verbatim + child = 0; + while( child = parent->IterateChildren( child ) ) + @endverbatim + + IterateChildren takes the previous child as input and finds + the next one. If the previous child is null, it returns the + first. IterateChildren will return null when done. + */ + const TiXmlNode* IterateChildren( const TiXmlNode* previous ) const; + TiXmlNode* IterateChildren( const TiXmlNode* previous ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( previous ) ); + } + + /// This flavor of IterateChildren searches for children with a particular 'value' + const TiXmlNode* IterateChildren( const char * value, const TiXmlNode* previous ) const; + TiXmlNode* IterateChildren( const char * _value, const TiXmlNode* previous ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->IterateChildren( _value, previous ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) const { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. + TiXmlNode* IterateChildren( const std::string& _value, const TiXmlNode* previous ) { return IterateChildren (_value.c_str (), previous); } ///< STL std::string form. + #endif + + /** Add a new node related to this. Adds a child past the LastChild. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertEndChild( const TiXmlNode& addThis ); + + + /** Add a new node related to this. Adds a child past the LastChild. + + NOTE: the node to be added is passed by pointer, and will be + henceforth owned (and deleted) by tinyXml. This method is efficient + and avoids an extra copy, but should be used with care as it + uses a different memory model than the other insert functions. + + @sa InsertEndChild + */ + TiXmlNode* LinkEndChild( TiXmlNode* addThis ); + + /** Add a new node related to this. Adds a child before the specified child. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertBeforeChild( TiXmlNode* beforeThis, const TiXmlNode& addThis ); + + /** Add a new node related to this. Adds a child after the specified child. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* InsertAfterChild( TiXmlNode* afterThis, const TiXmlNode& addThis ); + + /** Replace a child of this node. + Returns a pointer to the new object or NULL if an error occured. + */ + TiXmlNode* ReplaceChild( TiXmlNode* replaceThis, const TiXmlNode& withThis ); + + /// Delete a child of this node. + bool RemoveChild( TiXmlNode* removeThis ); + + /// Navigate to a sibling node. + const TiXmlNode* PreviousSibling() const { return prev; } + TiXmlNode* PreviousSibling() { return prev; } + + /// Navigate to a sibling node. + const TiXmlNode* PreviousSibling( const char * ) const; + TiXmlNode* PreviousSibling( const char *_prev ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->PreviousSibling( _prev ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlNode* PreviousSibling( const std::string& _value ) const { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* PreviousSibling( const std::string& _value ) { return PreviousSibling (_value.c_str ()); } ///< STL std::string form. + const TiXmlNode* NextSibling( const std::string& _value) const { return NextSibling (_value.c_str ()); } ///< STL std::string form. + TiXmlNode* NextSibling( const std::string& _value) { return NextSibling (_value.c_str ()); } ///< STL std::string form. + #endif + + /// Navigate to a sibling node. + const TiXmlNode* NextSibling() const { return next; } + TiXmlNode* NextSibling() { return next; } + + /// Navigate to a sibling node with the given 'value'. + const TiXmlNode* NextSibling( const char * ) const; + TiXmlNode* NextSibling( const char* _next ) { + return const_cast< TiXmlNode* >( (const_cast< const TiXmlNode* >(this))->NextSibling( _next ) ); + } + + /** Convenience function to get through elements. + Calls NextSibling and ToElement. Will skip all non-Element + nodes. Returns 0 if there is not another element. + */ + const TiXmlElement* NextSiblingElement() const; + TiXmlElement* NextSiblingElement() { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement() ); + } + + /** Convenience function to get through elements. + Calls NextSibling and ToElement. Will skip all non-Element + nodes. Returns 0 if there is not another element. + */ + const TiXmlElement* NextSiblingElement( const char * ) const; + TiXmlElement* NextSiblingElement( const char *_next ) { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->NextSiblingElement( _next ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlElement* NextSiblingElement( const std::string& _value) const { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. + TiXmlElement* NextSiblingElement( const std::string& _value) { return NextSiblingElement (_value.c_str ()); } ///< STL std::string form. + #endif + + /// Convenience function to get through elements. + const TiXmlElement* FirstChildElement() const; + TiXmlElement* FirstChildElement() { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement() ); + } + + /// Convenience function to get through elements. + const TiXmlElement* FirstChildElement( const char * _value ) const; + TiXmlElement* FirstChildElement( const char * _value ) { + return const_cast< TiXmlElement* >( (const_cast< const TiXmlNode* >(this))->FirstChildElement( _value ) ); + } + + #ifdef TIXML_USE_STL + const TiXmlElement* FirstChildElement( const std::string& _value ) const { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. + TiXmlElement* FirstChildElement( const std::string& _value ) { return FirstChildElement (_value.c_str ()); } ///< STL std::string form. + #endif + + /** Query the type (as an enumerated value, above) of this node. + The possible types are: TINYXML_DOCUMENT, TINYXML_ELEMENT, TINYXML_COMMENT, + TINYXML_UNKNOWN, TINYXML_TEXT, and TINYXML_DECLARATION. + */ + int Type() const { return type; } + + /** Return a pointer to the Document this node lives in. + Returns null if not in a document. + */ + const TiXmlDocument* GetDocument() const; + TiXmlDocument* GetDocument() { + return const_cast< TiXmlDocument* >( (const_cast< const TiXmlNode* >(this))->GetDocument() ); + } + + /// Returns true if this node has no children. + bool NoChildren() const { return !firstChild; } + + virtual const TiXmlDocument* ToDocument() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlElement* ToElement() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlComment* ToComment() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlUnknown* ToUnknown() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlText* ToText() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual const TiXmlDeclaration* ToDeclaration() const { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + + virtual TiXmlDocument* ToDocument() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlElement* ToElement() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlComment* ToComment() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlUnknown* ToUnknown() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlText* ToText() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + virtual TiXmlDeclaration* ToDeclaration() { return 0; } ///< Cast to a more defined type. Will return null if not of the requested type. + + /** Create an exact duplicate of this node and return it. The memory must be deleted + by the caller. + */ + virtual TiXmlNode* Clone() const = 0; + + /** Accept a hierchical visit the nodes in the TinyXML DOM. Every node in the + XML tree will be conditionally visited and the host will be called back + via the TiXmlVisitor interface. + + This is essentially a SAX interface for TinyXML. (Note however it doesn't re-parse + the XML for the callbacks, so the performance of TinyXML is unchanged by using this + interface versus any other.) + + The interface has been based on ideas from: + + - http://www.saxproject.org/ + - http://c2.com/cgi/wiki?HierarchicalVisitorPattern + + Which are both good references for "visiting". + + An example of using Accept(): + @verbatim + TiXmlPrinter printer; + tinyxmlDoc.Accept( &printer ); + const char* xmlcstr = printer.CStr(); + @endverbatim + */ + virtual bool Accept( TiXmlVisitor* visitor ) const = 0; + +protected: + TiXmlNode( NodeType _type ); + + // Copy to the allocated object. Shared functionality between Clone, Copy constructor, + // and the assignment operator. + void CopyTo( TiXmlNode* target ) const; + + #ifdef TIXML_USE_STL + // The real work of the input operator. + virtual void StreamIn( std::istream* in, TIXML_STRING* tag ) = 0; + #endif + + // Figure out what is at *p, and parse it. Returns null if it is not an xml node. + TiXmlNode* Identify( const char* start, TiXmlEncoding encoding ); + + TiXmlNode* parent; + NodeType type; + + TiXmlNode* firstChild; + TiXmlNode* lastChild; + + TIXML_STRING value; + + TiXmlNode* prev; + TiXmlNode* next; + +private: + TiXmlNode( const TiXmlNode& ); // not implemented. + void operator=( const TiXmlNode& base ); // not allowed. +}; + + +/** An attribute is a name-value pair. Elements have an arbitrary + number of attributes, each with a unique name. + + @note The attributes are not TiXmlNodes, since they are not + part of the tinyXML document object model. There are other + suggested ways to look at this problem. +*/ +class TiXmlAttribute : public TiXmlBase +{ + friend class TiXmlAttributeSet; + +public: + /// Construct an empty attribute. + TiXmlAttribute() : TiXmlBase() + { + document = 0; + prev = next = 0; + } + + #ifdef TIXML_USE_STL + /// std::string constructor. + TiXmlAttribute( const std::string& _name, const std::string& _value ) + { + name = _name; + value = _value; + document = 0; + prev = next = 0; + } + #endif + + /// Construct an attribute with a name and value. + TiXmlAttribute( const char * _name, const char * _value ) + { + name = _name; + value = _value; + document = 0; + prev = next = 0; + } + + const char* Name() const { return name.c_str(); } ///< Return the name of this attribute. + const char* Value() const { return value.c_str(); } ///< Return the value of this attribute. + #ifdef TIXML_USE_STL + const std::string& ValueStr() const { return value; } ///< Return the value of this attribute. + #endif + int IntValue() const; ///< Return the value of this attribute, converted to an integer. + double DoubleValue() const; ///< Return the value of this attribute, converted to a double. + + // Get the tinyxml string representation + const TIXML_STRING& NameTStr() const { return name; } + + /** QueryIntValue examines the value string. It is an alternative to the + IntValue() method with richer error checking. + If the value is an integer, it is stored in 'value' and + the call returns TIXML_SUCCESS. If it is not + an integer, it returns TIXML_WRONG_TYPE. + + A specialized but useful call. Note that for success it returns 0, + which is the opposite of almost all other TinyXml calls. + */ + int QueryIntValue( int* _value ) const; + /// QueryDoubleValue examines the value string. See QueryIntValue(). + int QueryDoubleValue( double* _value ) const; + + void SetName( const char* _name ) { name = _name; } ///< Set the name of this attribute. + void SetValue( const char* _value ) { value = _value; } ///< Set the value. + + void SetIntValue( int _value ); ///< Set the value from an integer. + void SetDoubleValue( double _value ); ///< Set the value from a double. + + #ifdef TIXML_USE_STL + /// STL std::string form. + void SetName( const std::string& _name ) { name = _name; } + /// STL std::string form. + void SetValue( const std::string& _value ) { value = _value; } + #endif + + /// Get the next sibling attribute in the DOM. Returns null at end. + const TiXmlAttribute* Next() const; + TiXmlAttribute* Next() { + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Next() ); + } + + /// Get the previous sibling attribute in the DOM. Returns null at beginning. + const TiXmlAttribute* Previous() const; + TiXmlAttribute* Previous() { + return const_cast< TiXmlAttribute* >( (const_cast< const TiXmlAttribute* >(this))->Previous() ); + } + + bool operator==( const TiXmlAttribute& rhs ) const { return rhs.name == name; } + bool operator<( const TiXmlAttribute& rhs ) const { return name < rhs.name; } + bool operator>( const TiXmlAttribute& rhs ) const { return name > rhs.name; } + + /* Attribute parsing starts: first letter of the name + returns: the next char after the value end quote + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + // Prints this Attribute to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const { + Print( cfile, depth, 0 ); + } + void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; + + // [internal use] + // Set the document pointer so the attribute can report errors. + void SetDocument( TiXmlDocument* doc ) { document = doc; } + +private: + TiXmlAttribute( const TiXmlAttribute& ); // not implemented. + void operator=( const TiXmlAttribute& base ); // not allowed. + + TiXmlDocument* document; // A pointer back to a document, for error reporting. + TIXML_STRING name; + TIXML_STRING value; + TiXmlAttribute* prev; + TiXmlAttribute* next; +}; + + +/* A class used to manage a group of attributes. + It is only used internally, both by the ELEMENT and the DECLARATION. + + The set can be changed transparent to the Element and Declaration + classes that use it, but NOT transparent to the Attribute + which has to implement a next() and previous() method. Which makes + it a bit problematic and prevents the use of STL. + + This version is implemented with circular lists because: + - I like circular lists + - it demonstrates some independence from the (typical) doubly linked list. +*/ +class TiXmlAttributeSet +{ +public: + TiXmlAttributeSet(); + ~TiXmlAttributeSet(); + + void Add( TiXmlAttribute* attribute ); + void Remove( TiXmlAttribute* attribute ); + + const TiXmlAttribute* First() const { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } + TiXmlAttribute* First() { return ( sentinel.next == &sentinel ) ? 0 : sentinel.next; } + const TiXmlAttribute* Last() const { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } + TiXmlAttribute* Last() { return ( sentinel.prev == &sentinel ) ? 0 : sentinel.prev; } + + TiXmlAttribute* Find( const char* _name ) const; + TiXmlAttribute* FindOrCreate( const char* _name ); + +# ifdef TIXML_USE_STL + TiXmlAttribute* Find( const std::string& _name ) const; + TiXmlAttribute* FindOrCreate( const std::string& _name ); +# endif + + +private: + //*ME: Because of hidden/disabled copy-construktor in TiXmlAttribute (sentinel-element), + //*ME: this class must be also use a hidden/disabled copy-constructor !!! + TiXmlAttributeSet( const TiXmlAttributeSet& ); // not allowed + void operator=( const TiXmlAttributeSet& ); // not allowed (as TiXmlAttribute) + + TiXmlAttribute sentinel; +}; + + +/** The element is a container class. It has a value, the element name, + and can contain other elements, text, comments, and unknowns. + Elements also contain an arbitrary number of attributes. +*/ +class TiXmlElement : public TiXmlNode +{ +public: + /// Construct an element. + TiXmlElement (const char * in_value); + + #ifdef TIXML_USE_STL + /// std::string constructor. + TiXmlElement( const std::string& _value ); + #endif + + TiXmlElement( const TiXmlElement& ); + + TiXmlElement& operator=( const TiXmlElement& base ); + + virtual ~TiXmlElement(); + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + */ + const char* Attribute( const char* name ) const; + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + If the attribute exists and can be converted to an integer, + the integer value will be put in the return 'i', if 'i' + is non-null. + */ + const char* Attribute( const char* name, int* i ) const; + + /** Given an attribute name, Attribute() returns the value + for the attribute of that name, or null if none exists. + If the attribute exists and can be converted to an double, + the double value will be put in the return 'd', if 'd' + is non-null. + */ + const char* Attribute( const char* name, double* d ) const; + + /** QueryIntAttribute examines the attribute - it is an alternative to the + Attribute() method with richer error checking. + If the attribute is an integer, it is stored in 'value' and + the call returns TIXML_SUCCESS. If it is not + an integer, it returns TIXML_WRONG_TYPE. If the attribute + does not exist, then TIXML_NO_ATTRIBUTE is returned. + */ + int QueryIntAttribute( const char* name, int* _value ) const; + /// QueryUnsignedAttribute examines the attribute - see QueryIntAttribute(). + int QueryUnsignedAttribute( const char* name, unsigned* _value ) const; + /** QueryBoolAttribute examines the attribute - see QueryIntAttribute(). + Note that '1', 'true', or 'yes' are considered true, while '0', 'false' + and 'no' are considered false. + */ + int QueryBoolAttribute( const char* name, bool* _value ) const; + /// QueryDoubleAttribute examines the attribute - see QueryIntAttribute(). + int QueryDoubleAttribute( const char* name, double* _value ) const; + /// QueryFloatAttribute examines the attribute - see QueryIntAttribute(). + int QueryFloatAttribute( const char* name, float* _value ) const { + double d; + int result = QueryDoubleAttribute( name, &d ); + if ( result == TIXML_SUCCESS ) { + *_value = (float)d; + } + return result; + } + + #ifdef TIXML_USE_STL + /// QueryStringAttribute examines the attribute - see QueryIntAttribute(). + int QueryStringAttribute( const char* name, std::string* _value ) const { + const char* cstr = Attribute( name ); + if ( cstr ) { + *_value = std::string( cstr ); + return TIXML_SUCCESS; + } + return TIXML_NO_ATTRIBUTE; + } + + /** Template form of the attribute query which will try to read the + attribute into the specified type. Very easy, very powerful, but + be careful to make sure to call this with the correct type. + + NOTE: This method doesn't work correctly for 'string' types that contain spaces. + + @return TIXML_SUCCESS, TIXML_WRONG_TYPE, or TIXML_NO_ATTRIBUTE + */ + template< typename T > int QueryValueAttribute( const std::string& name, T* outValue ) const + { + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + + std::stringstream sstream( node->ValueStr() ); + sstream >> *outValue; + if ( !sstream.fail() ) + return TIXML_SUCCESS; + return TIXML_WRONG_TYPE; + } + + int QueryValueAttribute( const std::string& name, std::string* outValue ) const + { + const TiXmlAttribute* node = attributeSet.Find( name ); + if ( !node ) + return TIXML_NO_ATTRIBUTE; + *outValue = node->ValueStr(); + return TIXML_SUCCESS; + } + #endif + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetAttribute( const char* name, const char * _value ); + + #ifdef TIXML_USE_STL + const std::string* Attribute( const std::string& name ) const; + const std::string* Attribute( const std::string& name, int* i ) const; + const std::string* Attribute( const std::string& name, double* d ) const; + int QueryIntAttribute( const std::string& name, int* _value ) const; + int QueryDoubleAttribute( const std::string& name, double* _value ) const; + + /// STL std::string form. + void SetAttribute( const std::string& name, const std::string& _value ); + ///< STL std::string form. + void SetAttribute( const std::string& name, int _value ); + ///< STL std::string form. + void SetDoubleAttribute( const std::string& name, double value ); + #endif + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetAttribute( const char * name, int value ); + + /** Sets an attribute of name to a given value. The attribute + will be created if it does not exist, or changed if it does. + */ + void SetDoubleAttribute( const char * name, double value ); + + /** Deletes an attribute with the given name. + */ + void RemoveAttribute( const char * name ); + #ifdef TIXML_USE_STL + void RemoveAttribute( const std::string& name ) { RemoveAttribute (name.c_str ()); } ///< STL std::string form. + #endif + + const TiXmlAttribute* FirstAttribute() const { return attributeSet.First(); } ///< Access the first attribute in this element. + TiXmlAttribute* FirstAttribute() { return attributeSet.First(); } + const TiXmlAttribute* LastAttribute() const { return attributeSet.Last(); } ///< Access the last attribute in this element. + TiXmlAttribute* LastAttribute() { return attributeSet.Last(); } + + /** Convenience function for easy access to the text inside an element. Although easy + and concise, GetText() is limited compared to getting the TiXmlText child + and accessing it directly. + + If the first child of 'this' is a TiXmlText, the GetText() + returns the character string of the Text node, else null is returned. + + This is a convenient method for getting the text of simple contained text: + @verbatim + This is text + const char* str = fooElement->GetText(); + @endverbatim + + 'str' will be a pointer to "This is text". + + Note that this function can be misleading. If the element foo was created from + this XML: + @verbatim + This is text + @endverbatim + + then the value of str would be null. The first child node isn't a text node, it is + another element. From this XML: + @verbatim + This is text + @endverbatim + GetText() will return "This is ". + + WARNING: GetText() accesses a child node - don't become confused with the + similarly named TiXmlHandle::Text() and TiXmlNode::ToText() which are + safe type casts on the referenced node. + */ + const char* GetText() const; + + /// Creates a new Element and returns it - the returned element is a copy. + virtual TiXmlNode* Clone() const; + // Print the Element to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + /* Attribtue parsing starts: next char past '<' + returns: next char past '>' + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlElement* ToElement() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlElement* ToElement() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + + void CopyTo( TiXmlElement* target ) const; + void ClearThis(); // like clear, but initializes 'this' object as well + + // Used to be public [internal use] + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + /* [internal use] + Reads the "value" of the element -- another element, or text. + This should terminate with the current end tag. + */ + const char* ReadValue( const char* in, TiXmlParsingData* prevData, TiXmlEncoding encoding ); + +private: + TiXmlAttributeSet attributeSet; +}; + + +/** An XML comment. +*/ +class TiXmlComment : public TiXmlNode +{ +public: + /// Constructs an empty comment. + TiXmlComment() : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) {} + /// Construct a comment from text. + TiXmlComment( const char* _value ) : TiXmlNode( TiXmlNode::TINYXML_COMMENT ) { + SetValue( _value ); + } + TiXmlComment( const TiXmlComment& ); + TiXmlComment& operator=( const TiXmlComment& base ); + + virtual ~TiXmlComment() {} + + /// Returns a copy of this Comment. + virtual TiXmlNode* Clone() const; + // Write this Comment to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + /* Attribtue parsing starts: at the ! of the !-- + returns: next char past '>' + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlComment* ToComment() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlComment* ToComment() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + void CopyTo( TiXmlComment* target ) const; + + // used to be public + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif +// virtual void StreamOut( TIXML_OSTREAM * out ) const; + +private: + +}; + + +/** XML text. A text node can have 2 ways to output the next. "normal" output + and CDATA. It will default to the mode it was parsed from the XML file and + you generally want to leave it alone, but you can change the output mode with + SetCDATA() and query it with CDATA(). +*/ +class TiXmlText : public TiXmlNode +{ + friend class TiXmlElement; +public: + /** Constructor for text element. By default, it is treated as + normal, encoded text. If you want it be output as a CDATA text + element, set the parameter _cdata to 'true' + */ + TiXmlText (const char * initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) + { + SetValue( initValue ); + cdata = false; + } + virtual ~TiXmlText() {} + + #ifdef TIXML_USE_STL + /// Constructor. + TiXmlText( const std::string& initValue ) : TiXmlNode (TiXmlNode::TINYXML_TEXT) + { + SetValue( initValue ); + cdata = false; + } + #endif + + TiXmlText( const TiXmlText& copy ) : TiXmlNode( TiXmlNode::TINYXML_TEXT ) { copy.CopyTo( this ); } + TiXmlText& operator=( const TiXmlText& base ) { base.CopyTo( this ); return *this; } + + // Write this text object to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + /// Queries whether this represents text using a CDATA section. + bool CDATA() const { return cdata; } + /// Turns on or off a CDATA representation of text. + void SetCDATA( bool _cdata ) { cdata = _cdata; } + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlText* ToText() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlText* ToText() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected : + /// [internal use] Creates a new Element and returns it. + virtual TiXmlNode* Clone() const; + void CopyTo( TiXmlText* target ) const; + + bool Blank() const; // returns true if all white space and new lines + // [internal use] + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + bool cdata; // true if this should be input and output as a CDATA style text element +}; + + +/** In correct XML the declaration is the first entry in the file. + @verbatim + + @endverbatim + + TinyXml will happily read or write files without a declaration, + however. There are 3 possible attributes to the declaration: + version, encoding, and standalone. + + Note: In this version of the code, the attributes are + handled as special cases, not generic attributes, simply + because there can only be at most 3 and they are always the same. +*/ +class TiXmlDeclaration : public TiXmlNode +{ +public: + /// Construct an empty declaration. + TiXmlDeclaration() : TiXmlNode( TiXmlNode::TINYXML_DECLARATION ) {} + +#ifdef TIXML_USE_STL + /// Constructor. + TiXmlDeclaration( const std::string& _version, + const std::string& _encoding, + const std::string& _standalone ); +#endif + + /// Construct. + TiXmlDeclaration( const char* _version, + const char* _encoding, + const char* _standalone ); + + TiXmlDeclaration( const TiXmlDeclaration& copy ); + TiXmlDeclaration& operator=( const TiXmlDeclaration& copy ); + + virtual ~TiXmlDeclaration() {} + + /// Version. Will return an empty string if none was found. + const char *Version() const { return version.c_str (); } + /// Encoding. Will return an empty string if none was found. + const char *Encoding() const { return encoding.c_str (); } + /// Is this a standalone document? + const char *Standalone() const { return standalone.c_str (); } + + /// Creates a copy of this Declaration and returns it. + virtual TiXmlNode* Clone() const; + // Print this declaration to a FILE stream. + virtual void Print( FILE* cfile, int depth, TIXML_STRING* str ) const; + virtual void Print( FILE* cfile, int depth ) const { + Print( cfile, depth, 0 ); + } + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlDeclaration* ToDeclaration() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlDeclaration* ToDeclaration() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* visitor ) const; + +protected: + void CopyTo( TiXmlDeclaration* target ) const; + // used to be public + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + + TIXML_STRING version; + TIXML_STRING encoding; + TIXML_STRING standalone; +}; + + +/** Any tag that tinyXml doesn't recognize is saved as an + unknown. It is a tag of text, but should not be modified. + It will be written back to the XML, unchanged, when the file + is saved. + + DTD tags get thrown into TiXmlUnknowns. +*/ +class TiXmlUnknown : public TiXmlNode +{ +public: + TiXmlUnknown() : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) {} + virtual ~TiXmlUnknown() {} + + TiXmlUnknown( const TiXmlUnknown& copy ) : TiXmlNode( TiXmlNode::TINYXML_UNKNOWN ) { copy.CopyTo( this ); } + TiXmlUnknown& operator=( const TiXmlUnknown& copy ) { copy.CopyTo( this ); return *this; } + + /// Creates a copy of this Unknown and returns it. + virtual TiXmlNode* Clone() const; + // Print this Unknown to a FILE stream. + virtual void Print( FILE* cfile, int depth ) const; + + virtual const char* Parse( const char* p, TiXmlParsingData* data, TiXmlEncoding encoding ); + + virtual const TiXmlUnknown* ToUnknown() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlUnknown* ToUnknown() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected: + void CopyTo( TiXmlUnknown* target ) const; + + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + +}; + + +/** Always the top level node. A document binds together all the + XML pieces. It can be saved, loaded, and printed to the screen. + The 'value' of a document node is the xml file name. +*/ +class TiXmlDocument : public TiXmlNode +{ +public: + /// Create an empty document, that has no name. + TiXmlDocument(); + /// Create a document with a name. The name of the document is also the filename of the xml. + TiXmlDocument( const char * documentName ); + + #ifdef TIXML_USE_STL + /// Constructor. + TiXmlDocument( const std::string& documentName ); + #endif + + TiXmlDocument( const TiXmlDocument& copy ); + TiXmlDocument& operator=( const TiXmlDocument& copy ); + + virtual ~TiXmlDocument() {} + + /** Load a file using the current document value. + Returns true if successful. Will delete any existing + document data before loading. + */ + bool LoadFile( TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the current document value. Returns true if successful. + bool SaveFile() const; + /// Load a file using the given filename. Returns true if successful. + bool LoadFile( const char * filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the given filename. Returns true if successful. + bool SaveFile( const char * filename ) const; + /** Load a file using the given FILE*. Returns true if successful. Note that this method + doesn't stream - the entire object pointed at by the FILE* + will be interpreted as an XML file. TinyXML doesn't stream in XML from the current + file location. Streaming may be added in the future. + */ + bool LoadFile( FILE*, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + /// Save a file using the given FILE*. Returns true if successful. + bool SaveFile( FILE* ) const; + + #ifdef TIXML_USE_STL + bool LoadFile( const std::string& filename, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ) ///< STL std::string version. + { + return LoadFile( filename.c_str(), encoding ); + } + bool SaveFile( const std::string& filename ) const ///< STL std::string version. + { + return SaveFile( filename.c_str() ); + } + #endif + + /** Parse the given null terminated block of xml data. Passing in an encoding to this + method (either TIXML_ENCODING_LEGACY or TIXML_ENCODING_UTF8 will force TinyXml + to use that encoding, regardless of what TinyXml might otherwise try to detect. + */ + virtual const char* Parse( const char* p, TiXmlParsingData* data = 0, TiXmlEncoding encoding = TIXML_DEFAULT_ENCODING ); + + /** Get the root element -- the only top level element -- of the document. + In well formed XML, there should only be one. TinyXml is tolerant of + multiple elements at the document level. + */ + const TiXmlElement* RootElement() const { return FirstChildElement(); } + TiXmlElement* RootElement() { return FirstChildElement(); } + + /** If an error occurs, Error will be set to true. Also, + - The ErrorId() will contain the integer identifier of the error (not generally useful) + - The ErrorDesc() method will return the name of the error. (very useful) + - The ErrorRow() and ErrorCol() will return the location of the error (if known) + */ + bool Error() const { return error; } + + /// Contains a textual (english) description of the error if one occurs. + const char * ErrorDesc() const { return errorDesc.c_str (); } + + /** Generally, you probably want the error string ( ErrorDesc() ). But if you + prefer the ErrorId, this function will fetch it. + */ + int ErrorId() const { return errorId; } + + /** Returns the location (if known) of the error. The first column is column 1, + and the first row is row 1. A value of 0 means the row and column wasn't applicable + (memory errors, for example, have no row/column) or the parser lost the error. (An + error in the error reporting, in that case.) + + @sa SetTabSize, Row, Column + */ + int ErrorRow() const { return errorLocation.row+1; } + int ErrorCol() const { return errorLocation.col+1; } ///< The column where the error occured. See ErrorRow() + + /** SetTabSize() allows the error reporting functions (ErrorRow() and ErrorCol()) + to report the correct values for row and column. It does not change the output + or input in any way. + + By calling this method, with a tab size + greater than 0, the row and column of each node and attribute is stored + when the file is loaded. Very useful for tracking the DOM back in to + the source file. + + The tab size is required for calculating the location of nodes. If not + set, the default of 4 is used. The tabsize is set per document. Setting + the tabsize to 0 disables row/column tracking. + + Note that row and column tracking is not supported when using operator>>. + + The tab size needs to be enabled before the parse or load. Correct usage: + @verbatim + TiXmlDocument doc; + doc.SetTabSize( 8 ); + doc.Load( "myfile.xml" ); + @endverbatim + + @sa Row, Column + */ + void SetTabSize( int _tabsize ) { tabsize = _tabsize; } + + int TabSize() const { return tabsize; } + + /** If you have handled the error, it can be reset with this call. The error + state is automatically cleared if you Parse a new XML block. + */ + void ClearError() { error = false; + errorId = 0; + errorDesc = ""; + errorLocation.row = errorLocation.col = 0; + //errorLocation.last = 0; + } + + /** Write the document to standard out using formatted printing ("pretty print"). */ + void Print() const { Print( stdout, 0 ); } + + /* Write the document to a string using formatted printing ("pretty print"). This + will allocate a character array (new char[]) and return it as a pointer. The + calling code pust call delete[] on the return char* to avoid a memory leak. + */ + //char* PrintToMemory() const; + + /// Print this Document to a FILE stream. + virtual void Print( FILE* cfile, int depth = 0 ) const; + // [internal use] + void SetError( int err, const char* errorLocation, TiXmlParsingData* prevData, TiXmlEncoding encoding ); + + virtual const TiXmlDocument* ToDocument() const { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + virtual TiXmlDocument* ToDocument() { return this; } ///< Cast to a more defined type. Will return null not of the requested type. + + /** Walk the XML tree visiting this node and all of its children. + */ + virtual bool Accept( TiXmlVisitor* content ) const; + +protected : + // [internal use] + virtual TiXmlNode* Clone() const; + #ifdef TIXML_USE_STL + virtual void StreamIn( std::istream * in, TIXML_STRING * tag ); + #endif + +private: + void CopyTo( TiXmlDocument* target ) const; + + bool error; + int errorId; + TIXML_STRING errorDesc; + int tabsize; + TiXmlCursor errorLocation; + bool useMicrosoftBOM; // the UTF-8 BOM were found when read. Note this, and try to write. +}; + + +/** + A TiXmlHandle is a class that wraps a node pointer with null checks; this is + an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml + DOM structure. It is a separate utility class. + + Take an example: + @verbatim + + + + + + + @endverbatim + + Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very + easy to write a *lot* of code that looks like: + + @verbatim + TiXmlElement* root = document.FirstChildElement( "Document" ); + if ( root ) + { + TiXmlElement* element = root->FirstChildElement( "Element" ); + if ( element ) + { + TiXmlElement* child = element->FirstChildElement( "Child" ); + if ( child ) + { + TiXmlElement* child2 = child->NextSiblingElement( "Child" ); + if ( child2 ) + { + // Finally do something useful. + @endverbatim + + And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity + of such code. A TiXmlHandle checks for null pointers so it is perfectly safe + and correct to use: + + @verbatim + TiXmlHandle docHandle( &document ); + TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement(); + if ( child2 ) + { + // do something useful + @endverbatim + + Which is MUCH more concise and useful. + + It is also safe to copy handles - internally they are nothing more than node pointers. + @verbatim + TiXmlHandle handleCopy = handle; + @endverbatim + + What they should not be used for is iteration: + + @verbatim + int i=0; + while ( true ) + { + TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement(); + if ( !child ) + break; + // do something + ++i; + } + @endverbatim + + It seems reasonable, but it is in fact two embedded while loops. The Child method is + a linear walk to find the element, so this code would iterate much more than it needs + to. Instead, prefer: + + @verbatim + TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement(); + + for( child; child; child=child->NextSiblingElement() ) + { + // do something + } + @endverbatim +*/ +class TiXmlHandle +{ +public: + /// Create a handle from any node (at any depth of the tree.) This can be a null pointer. + TiXmlHandle( TiXmlNode* _node ) { this->node = _node; } + /// Copy constructor + TiXmlHandle( const TiXmlHandle& ref ) { this->node = ref.node; } + TiXmlHandle operator=( const TiXmlHandle& ref ) { if ( &ref != this ) this->node = ref.node; return *this; } + + /// Return a handle to the first child node. + TiXmlHandle FirstChild() const; + /// Return a handle to the first child node with the given name. + TiXmlHandle FirstChild( const char * value ) const; + /// Return a handle to the first child element. + TiXmlHandle FirstChildElement() const; + /// Return a handle to the first child element with the given name. + TiXmlHandle FirstChildElement( const char * value ) const; + + /** Return a handle to the "index" child with the given name. + The first child is 0, the second 1, etc. + */ + TiXmlHandle Child( const char* value, int index ) const; + /** Return a handle to the "index" child. + The first child is 0, the second 1, etc. + */ + TiXmlHandle Child( int index ) const; + /** Return a handle to the "index" child element with the given name. + The first child element is 0, the second 1, etc. Note that only TiXmlElements + are indexed: other types are not counted. + */ + TiXmlHandle ChildElement( const char* value, int index ) const; + /** Return a handle to the "index" child element. + The first child element is 0, the second 1, etc. Note that only TiXmlElements + are indexed: other types are not counted. + */ + TiXmlHandle ChildElement( int index ) const; + + #ifdef TIXML_USE_STL + TiXmlHandle FirstChild( const std::string& _value ) const { return FirstChild( _value.c_str() ); } + TiXmlHandle FirstChildElement( const std::string& _value ) const { return FirstChildElement( _value.c_str() ); } + + TiXmlHandle Child( const std::string& _value, int index ) const { return Child( _value.c_str(), index ); } + TiXmlHandle ChildElement( const std::string& _value, int index ) const { return ChildElement( _value.c_str(), index ); } + #endif + + /** Return the handle as a TiXmlNode. This may return null. + */ + TiXmlNode* ToNode() const { return node; } + /** Return the handle as a TiXmlElement. This may return null. + */ + TiXmlElement* ToElement() const { return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); } + /** Return the handle as a TiXmlText. This may return null. + */ + TiXmlText* ToText() const { return ( ( node && node->ToText() ) ? node->ToText() : 0 ); } + /** Return the handle as a TiXmlUnknown. This may return null. + */ + TiXmlUnknown* ToUnknown() const { return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); } + + /** @deprecated use ToNode. + Return the handle as a TiXmlNode. This may return null. + */ + TiXmlNode* Node() const { return ToNode(); } + /** @deprecated use ToElement. + Return the handle as a TiXmlElement. This may return null. + */ + TiXmlElement* Element() const { return ToElement(); } + /** @deprecated use ToText() + Return the handle as a TiXmlText. This may return null. + */ + TiXmlText* Text() const { return ToText(); } + /** @deprecated use ToUnknown() + Return the handle as a TiXmlUnknown. This may return null. + */ + TiXmlUnknown* Unknown() const { return ToUnknown(); } + +private: + TiXmlNode* node; +}; + + +/** Print to memory functionality. The TiXmlPrinter is useful when you need to: + + -# Print to memory (especially in non-STL mode) + -# Control formatting (line endings, etc.) + + When constructed, the TiXmlPrinter is in its default "pretty printing" mode. + Before calling Accept() you can call methods to control the printing + of the XML document. After TiXmlNode::Accept() is called, the printed document can + be accessed via the CStr(), Str(), and Size() methods. + + TiXmlPrinter uses the Visitor API. + @verbatim + TiXmlPrinter printer; + printer.SetIndent( "\t" ); + + doc.Accept( &printer ); + fprintf( stdout, "%s", printer.CStr() ); + @endverbatim +*/ +class TiXmlPrinter : public TiXmlVisitor +{ +public: + TiXmlPrinter() : depth( 0 ), simpleTextPrint( false ), + buffer(), indent( " " ), lineBreak( "\n" ) {} + + virtual bool VisitEnter( const TiXmlDocument& doc ); + virtual bool VisitExit( const TiXmlDocument& doc ); + + virtual bool VisitEnter( const TiXmlElement& element, const TiXmlAttribute* firstAttribute ); + virtual bool VisitExit( const TiXmlElement& element ); + + virtual bool Visit( const TiXmlDeclaration& declaration ); + virtual bool Visit( const TiXmlText& text ); + virtual bool Visit( const TiXmlComment& comment ); + virtual bool Visit( const TiXmlUnknown& unknown ); + + /** Set the indent characters for printing. By default 4 spaces + but tab (\t) is also useful, or null/empty string for no indentation. + */ + void SetIndent( const char* _indent ) { indent = _indent ? _indent : "" ; } + /// Query the indention string. + const char* Indent() { return indent.c_str(); } + /** Set the line breaking string. By default set to newline (\n). + Some operating systems prefer other characters, or can be + set to the null/empty string for no indenation. + */ + void SetLineBreak( const char* _lineBreak ) { lineBreak = _lineBreak ? _lineBreak : ""; } + /// Query the current line breaking string. + const char* LineBreak() { return lineBreak.c_str(); } + + /** Switch over to "stream printing" which is the most dense formatting without + linebreaks. Common when the XML is needed for network transmission. + */ + void SetStreamPrinting() { indent = ""; + lineBreak = ""; + } + /// Return the result. + const char* CStr() { return buffer.c_str(); } + /// Return the length of the result string. + size_t Size() { return buffer.size(); } + + #ifdef TIXML_USE_STL + /// Return the result. + const std::string& Str() { return buffer; } + #endif + +private: + void DoIndent() { + for( int i=0; i)::\1\>','$1$2'); + s = regexprep(s,'\<(\w+)::\1\>','$1'); + s = regexprep(s,'(const )?Matrix< ?SXElement *>( &)?','SX'); + s = regexprep(s,'(const )?Matrix< ?double *>( &)?','DMatrix'); + s = regexprep(s,'(const )?Matrix< ?int * >( &)?','IMatrix'); + s = regexprep(s,'(const )?GenericMatrix< ?(\w+) *>( ?&)?','$2'); + s = regexprep(s,'(const )?GenericMatrix< ?([\w\(\)]+) *>( ?&)?','$2 '); + s = regexprep(s,'const (\w+) &','$1 '); + s = regexprep(s,'< [\w\(\)]+ +>\(','('); + + for i=1:5 + s = regexprep(s,'(const )? ?std::pair< ?([\w\(\)\]\[\}\{: ]+?) ?, ?([\w\(\)\]\[\}\{: ]+?) ?> ?&?','{$2,$3} '); + s = regexprep(s,'(const )? ?std::vector< ?([\w\(\)\[\]\}\{ ]+) ?(, ?std::allocator< ?\2 ?>)? ?> ?&?','{$2} '); + end + s = regexprep(s,'\<(\w+)(< \w+ >)?::\1','$1'); + + s = strrep(s,'casadi::',''); + s = strrep(s,'IOInterface< Function >','Function'); + s = strrep(s,'::','.'); + s = strrep(s,'.operator ()',''); + s = regexprep(s,'([A-Z]\w+)Vector','{$1}'); +end diff --git a/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/swig_typename_convertor_matlab2cpp.m b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/swig_typename_convertor_matlab2cpp.m new file mode 100755 index 0000000..e418cfd --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi-matlabR2014a-v2.4.2/swig_typename_convertor_matlab2cpp.m @@ -0,0 +1,7 @@ +function s = swig_typename_convertor_matlab2cpp(a) + if iscell(a) + s = ['{' strjoin(unique(cellfun(@swig_typename_convertor_matlab2cpp,a,'UniformOutput',false)),'|') '}']; + else + s = strrep(class(a),'casadi.',''); + end +end \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/casadi2forces_template.c b/parameter-learning_nd_disc/FORCES_client/casadi2forces_template.c new file mode 100755 index 0000000..d921b8f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/casadi2forces_template.c @@ -0,0 +1,86 @@ +/* + * CasADi to FORCES Template - missing information to be filled in by createCasadi.m + * (C) embotech AG, Zurich, Switzerland, 2013-18. All rights reserved. + * + * This file is part of the FORCES client, and carries the same license. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "$SOLVER_NAME$/include/$SOLVER_NAME$.h" + +/* prototyes for models */ +$EXTERN_FUNCTION$ + +/* copies data from sparse matrix into a dense one */ +static void sparse2fullcopy(solver_int32_default nrow, solver_int32_default ncol, const solver_int32_default *colidx, const solver_int32_default *row, $SOLVER_NAME$_float *data, $SOLVER_NAME$_float *out) +{ + solver_int32_default i, j; + + /* copy data into dense matrix */ + for(i=0; i=xlimits(1)),'xa out of world'); +assert(all(ya>=ylimits(1)),'ya out of world'); +assert(all(xa<=xlimits(2)),'xa out of world'); +assert(all(ya<=ylimits(2)),'ya out of world'); + + +%% Generate code for estimator +generateEstimator(N, xlimits, ylimits); + +%% Plot & make interactive +msize = 8; +figure(1); clf; +plot(xa(1),ya(1),'kx'); hold on; plot(xa(1),ya(1),'bx'); plot(xa(1),ya(1),'ro'); +plot(xa,ya,'kx','markersize',msize); plot(xa,ya,'ko','markersize',msize); +xlim(xlimits+[-1,1]); ylim(ylimits+[-1,1]); +title(sprintf('Click into figure to place target (noise level: %3.1f)', noise)); +legend({'anchors','true position','estimated position'},'Location','NorthEastOutside'); +set(gcf,'WindowButtonDownFcn',@estimatePosition) +axis equal +end + + +%% distance function +function d = distance(xa,xtrue,ya,ytrue) +d = sqrt((xa-xtrue).^2 + (ya-ytrue).^2); +end + +%% Callback for plot +function [xhat,yhat]=estimatePosition(hObject,~) + +global N xlimits ylimits xa ya noise +msize = 8; + +% read in true position +pos=get(gca,'CurrentPoint'); +xtrue=pos(1,1); +ytrue=pos(1,2); +disp(['You clicked X: ',num2str(xtrue),', Y: ',num2str(ytrue)]); +assert(xtrue <= xlimits(2),'xtrue out of world'); +assert(xtrue >= xlimits(1),'xtrue out of world'); +assert(ytrue <= ylimits(2),'ytrue out of world'); +assert(ytrue >= ylimits(1),'ytrue out of world'); +plot(xtrue,ytrue,'bx','markersize',msize); + +% generate noisy measurements +d= distance(xa,xtrue,ya,ytrue) + noise*randn(N,1); + +% feed problem data +problem.x0 = zeros(2,1); +problem.all_parameters = [xa; ya; d]; % fill the parameter (p)-vector + +% solve! +[output,exitflag,info] = localizationDecoder(problem); +assert(exitflag==1,'some problem in solver'); % always test exitflag for success +xhat = output.x1(1); +yhat = output.x1(2); +esterr = norm([xhat;yhat]-[xtrue;ytrue]); + +% plot +plot(xhat,yhat,'ro','markersize',msize); + +% print +fprintf('Estimated X: %6.4f, Y: %6.4f\n', xhat, yhat); +fprintf('This is an estimation error of %6.4f. Solvetime: %6.4f microsceonds.\n', esterr, info.solvetime*1E6); + +end + + +%% This function generates the estimator +function generateEstimator(numberOfAnchors,xlimits,ylimits) +% Generates 2D decoding code for localization using FORCES NLP +% na: number of anchors + +global na +na = numberOfAnchors; + +%% NLP problem definition +% no need to change anything below +model.N = 1; % number of distance measurements +model.nvar = 2; % number of variables (use 3 if 3D) +model.npar = numberOfAnchors*3; % number of parameters: coordinates of anchors in 2D, plus measurements +model.objective = @objective; +model.lb = [xlimits(1) ylimits(1)]; % lower bounds on (x,y) +model.ub = [xlimits(2) ylimits(2)]; % upper bounds on (x,y) + +%% codesettings +codesettings = getOptions('localizationDecoder'); +codesettings.printlevel = 0; % set to 2 to see some prints +% codesettings.server = 'http://winner10:2470'; +codesettings.maxit = 50; % maximum number of iterations + +%% generate code +FORCES_NLP(model, codesettings); + +end + +%% This function implements the objective +% We assume that the parameter vector p is ordered as follows: +% p(1:na) - x-coordinates of the anchors +% p(na+(1:na)) - y-coordinates of the anchors +% p(2*na+(1:na)) - distance measurements of the anchors +function obj = objective( z,p ) + +global na +obj=0; +for i = 1:na + obj = obj + ( (p(i)-z(1))^2 + (p(i+na)-z(2))^2 - p(i+2*na)^2 )^2; +end +end \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/C/car_dynamics.c b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/C/car_dynamics.c new file mode 100755 index 0000000..83ed039 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/C/car_dynamics.c @@ -0,0 +1,40 @@ +#include + +void car_dyanmics(double *x, double *c) +{ + c[0] = x[2] + (x[4]*cos(x[5]))/60 + (cos(x[1]/10 + x[5])*(x[0]/10 + x[4]))/60 + (cos(x[1]/20 + x[5])*(x[0]/20 + x[4]))/15; + c[1] = x[3] + (x[4]*sin(x[5]))/60 + (sin(x[1]/10 + x[5])*(x[0]/10 + x[4]))/60 + (sin(x[1]/20 + x[5])*(x[0]/20 + x[4]))/15; + c[2] = x[0]/10 + x[4]; + c[3] = x[1]/10 + x[5]; +} + +void car_dyanmics_jacobian(double *x, double *J) +{ + /* NOTE: only non-zero values in dense matrix (column major) filled in */ + + /* 1st column: indices 0..3 */ + J[0] = cos(x[1]/10 + x[5])/600 + cos(x[1]/20 + x[5])/300; + J[1] = sin(x[1]/10 + x[5])/600 + sin(x[1]/20 + x[5])/300; + J[2] = 0.1; + + /* 2nd column: indices 4..7 */ + J[4] = - (sin(x[1]/10 + x[5])*(x[0]/10 + x[4]))/600 - (sin(x[1]/20 + x[5])*(x[0]/20 + x[4]))/300; + J[5] = (cos(x[1]/10 + x[5])*(x[0]/10 + x[4]))/600 + (cos(x[1]/20 + x[5])*(x[0]/20 + x[4]))/300; + J[7] = 0.1; + + /* 3rd column: indices 8..11 */ + J[8] = 1; + + /* 4th column: indices 12..15 */ + J[13] = 1; + + /* 5th column: indices 16..19 */ + J[16] = cos(x[1]/10 + x[5])/60 + cos(x[1]/20 + x[5])/15 + cos(x[5])/60; + J[17] = sin(x[1]/10 + x[5])/60 + sin(x[1]/20 + x[5])/15 + sin(x[5])/60; + J[18] = 1; + + /* 6th column: indices 20..23 */ + J[20] = - (x[4]*sin(x[5]))/60 - (sin(x[1]/10 + x[5])*(x[0]/10 + x[4]))/60 - (sin(x[1]/20 + x[5])*(x[0]/20 + x[4]))/15; + J[21] = (x[4]*cos(x[5]))/60 + (cos(x[1]/10 + x[5])*(x[0]/10 + x[4]))/60 + (cos(x[1]/20 + x[5])*(x[0]/20 + x[4]))/15; + J[23] = 1; +} diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/C/myfevals.c b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/C/myfevals.c new file mode 100755 index 0000000..7a136cc --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/C/myfevals.c @@ -0,0 +1,62 @@ +extern void car_dyanmics(double *x, double *c); +extern void car_dyanmics_jacobian(double *x, double *J); + +void myfevals( double *x, /* primal vars */ + double *y, /* eq. constraint multiplers */ + double *l, /* ineq. constraint multipliers */ + double *p, /* parameters */ + double *f, /* objective function (incremented in this function) */ + double *nabla_f, /* gradient of objective function */ + double *c, /* dynamics */ + double *nabla_c, /* Jacobian of the dynamics (column major) */ + double *h, /* inequality constraints */ + double *nabla_h, /* Jacobian of inequality constraints (column major) */ + double *H, /* Hessian (column major) */ + int stage /* stage number (0 indexed) */ + ) +{ + /* cost */ + if (f) + { /* notice the increment of f */ + (*f) += -100*x[3] + 0.1*x[0]*x[0] + 0.01*x[1]*x[1]; + } + + /* gradient - only nonzero elements have to be filled in */ + if (nabla_f) + { + nabla_f[0] = 0.2*x[0]; + nabla_f[1] = 0.02*x[1]; + nabla_f[3] = -100; + } + + /* eq constr */ + if (c) + { + car_dyanmics(x, c); + } + + /* jacobian equalities (column major) */ + if (nabla_c) + { + car_dyanmics_jacobian(x, nabla_c); + } + + /* ineq constr */ + if (h) + { + h[0] = x[2]*x[2] + x[3]*x[3]; + h[1] = (x[2]+2)*(x[2]+2) + (x[3]-2.5)*(x[3]-2.5); + } + + /* jacobian inequalities (column major) - only non-zero elements to be filled in */ + if (nabla_h) + { + /* column 3 */ + nabla_h[4] = 2*x[2]; + nabla_h[5] = 2*x[2] + 4; + + /* column 4 */ + nabla_h[6] = 2*x[3]; + nabla_h[7] = 2*x[3] - 5; + } +} \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_autoFevals.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_autoFevals.m new file mode 100755 index 0000000..5d67f95 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_autoFevals.m @@ -0,0 +1,166 @@ +% Example script for getting started with FORCES NLP solver. +% +%-------------------------------------------------------------------------- +% NOTE: This example shows how to define a nonlinear programming problem, +% where all derivative information is automatically generated by +% using the AD tool CasADi. +% +% You may want to directly pass C functions to FORCES, for example when you +% are using other AD tools, or have custom C functions for derivate +% evaluation etc. See the example file "NLPexample_ownFevals.m" for how to +% pass custom C functions to FORCES. +%-------------------------------------------------------------------------- +% +% This example solves an optimization problem for a car with the simple +% continuous-time, nonlinear dynamics +% +% dx/dt = v*cos(theta) +% dy/dt = v*sin(theta) +% dv/dt = F/m +% dtheta/dt = s/I +% +% where x,y are the position, v the velocity in heading angle theta of the +% car. The inputs are F (accelerating force) and steering s. +% +% The car starts from standstill with a certain heading angle, and the +% optimization problem is to maximize progress in y direction while staying +% inside a non-convex feasible region. +% +% Quadratic costs for the acceleration force and steering are added to the +% objective to avoid excessive maneouvers. +% +% There are bounds on all variables. +% +% Variables are collected stage-wise into z = [F s x y v theta]. +% +% See also FORCES_NLP +% +% (c) embotech AG, Zurich, Switzerland, 2013-18. + +clear; clc; close all; +deg2rad = @(deg) deg/180*pi; % convert degrees into radians +rad2deg = @(rad) rad/pi*180; % convert radians into degrees + +%% Problem dimensions +model.N = 50; % horizon length +model.nvar = 6; % number of variables +model.neq = 4; % number of equality constraints +model.nh = 2; % number of inequality constraint functions + +%% Objective function +% In this example, we want to maximize position in y direction, +% with some penalties on the inputs F and s: +model.objective = @(z) -100*z(4) + 0.1*z(1)^2 + 0.01*z(2)^2; + +% You can use standard Matlab handles to define these functions, i.e. you +% could also have this in a separate file. We use anonymous handles here +% only for convenience. + +%% Dynamics, i.e. equality constraints +% We use an explicit RK4 integrator here to discretize continuous dynamics: +m=1; I=1; % physical constants of the model +integrator_stepsize = 0.1; +continuous_dynamics = @(x,u) [x(3)*cos(x(4)); % v*cos(theta) + x(3)*sin(x(4)); % v*sin(theta) + u(1)/m; % F/m + u(2)/I]; % s/I +model.eq = @(z) RK4( z(3:6), z(1:2), continuous_dynamics, integrator_stepsize); + +% Indices on LHS of dynamical constraint - for efficiency reasons, make +% sure the matrix E has structure [0 I] where I is the identity matrix. +model.E = [zeros(4,2), eye(4)]; + +%% Inequality constraints +% upper/lower variable bounds lb <= x <= ub +% inputs | states +% F s x y v theta +model.lb = [ -5, -1, -3, 0 0 0 ]; +model.ub = [ +5, +1, 0, 3 2 +pi ]; + +% General (differentiable) nonlinear inequalities hl <= h(x) <= hu +model.ineq = @(z) [ z(3)^2 + z(4)^2; + (z(3)+2)^2 + (z(4)-2.5)^2 ]; + +% Upper/lower bounds for inequalities +model.hu = [9, +inf]'; +model.hl = [1, 0.95^2]'; + +%% Initial and final conditions + +% Initial condition on vehicle states +model.xinit = [-2, 0, 0, deg2rad(120)]'; % x=-2, y=0, v=0 (standstill), heading angle=120? +model.xinitidx = 3:6; % use this to specify on which variables initial conditions are imposed + +% Final condition on vehicle velocity and heading angle +model.xfinal = [0, deg2rad(0)]'; % v final=0 (standstill), heading angle final=0? +model.xfinalidx = 5:6; % use this to specify on which variables final conditions are imposed + + +%% Define solver options +codeoptions = getOptions('FORCESNLPsolver'); +codeoptions.maxit = 200; % Maximum number of iterations +codeoptions.printlevel = 2; % Use printlevel = 2 to print progress (but not for timings) +codeoptions.optlevel = 0; % 0: no optimization, 1: optimize for size, 2: optimize for speed, 3: optimize for size & speed +codeoptions.cleanup = false; +codeoptions.timing = 1; +codeoptions.printlevel = 0; + +% change this to your server or leave uncommented for using the standard +% embotech server at https://www.embotech.com/codegen +% codeoptions.server = 'http://yourforcesserver.com:8114/v1.5'; + +%% Generate forces solver +FORCES_NLP(model, codeoptions); + +%% Call solver +% Set initial guess to start solver from: +x0i=model.lb+(model.ub-model.lb)/2; +x0=repmat(x0i',model.N,1); +problem.x0=x0; + +% Set initial and final conditions. This is usually changing from problem +% instance to problem instance: +problem.xinit = model.xinit; +problem.xfinal = model.xfinal; + +% Time to solve the NLP! +[output,exitflag,info] = FORCESNLPsolver(problem); + +% Make sure the solver has exited properly. +assert(exitflag == 1,'Some problem in FORCES solver'); +fprintf('\nFORCES took %d iterations and %f seconds to solve the problem.\n',info.it,info.solvetime); + +%% Plot results +TEMP = zeros(model.nvar,model.N); +for i=1:model.N + TEMP(:,i) = output.(['x',sprintf('%02d',i)]); +end +U = TEMP(1:2,:); +X = TEMP(3:6,:); + +% plot trajectory +figure(1); clf; +plot(X(1,:),X(2,:),'b-'); hold on; +rectangle('Position',[-sqrt(model.hl(1)) -sqrt(model.hl(1)) 2*sqrt(model.hl(1)) 2*sqrt(model.hl(1))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +rectangle('Position',[-sqrt(model.hu(1)) -sqrt(model.hu(1)) 2*sqrt(model.hu(1)) 2*sqrt(model.hu(1))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +rectangle('Position',[-2-sqrt(model.hl(2)) 2.5-sqrt(model.hl(2)) 2*sqrt(model.hl(2)) 2*sqrt(model.hl(2))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +plot(model.xinit(1),model.xinit(2),'bx','LineWidth',3); +title('position'); xlim([-2.5 0]); ylim([0 3]); xlabel('x1'); ylabel('x2'); + +% plot heading angle and velocity variables +figure(2); clf; +subplot(2,1,1); plot(X(3,:)); grid on; title('velocity'); hold on; +plot([1 model.N], [model.ub(5) model.ub(5)]', 'r:'); +plot([1 model.N], [model.lb(5) model.lb(5)]', 'r:'); +subplot(2,1,2); plot(rad2deg(X(4,:))); grid on; title('heading angle'); ylim([0, 180]); hold on; +plot([1 model.N], rad2deg([model.ub(6) model.ub(6)])', 'r:'); +plot([1 model.N], rad2deg([model.lb(6) model.lb(6)])', 'r:'); + +% plot inputs +figure(3); clf; +subplot(2,1,1); stairs(U(1,:)); grid on; title('acceleration force'); hold on; +plot([1 model.N], [model.ub(1) model.ub(1)]', 'r:'); +plot([1 model.N], [model.lb(1) model.lb(1)]', 'r:'); +subplot(2,1,2); stairs(U(2,:)); grid on; title('delta steering'); hold on; +plot([1 model.N], [model.ub(2) model.ub(2)]', 'r:'); +plot([1 model.N], [model.lb(2) model.lb(2)]', 'r:'); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_autoFevals_differentIntegrators.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_autoFevals_differentIntegrators.m new file mode 100755 index 0000000..514e472 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_autoFevals_differentIntegrators.m @@ -0,0 +1,169 @@ +% Example script for getting started with FORCES NLP solver. +% +%-------------------------------------------------------------------------- +% NOTE: This example shows how to define a nonlinear programming problem, +% where all derivative information is automatically generated by +% using the AD tool CasADi. +% +% You may want to directly pass C functions to FORCES, for example when you +% are using other AD tools, or have custom C functions for derivate +% evaluation etc. See the example file "NLPexample_ownFevals.m" for how to +% pass custom C functions to FORCES. +%-------------------------------------------------------------------------- +% +% This example solves an optimization problem for a car with the simple +% continuous-time, nonlinear dynamics +% +% dx/dt = v*cos(theta) +% dy/dt = v*sin(theta) +% dv/dt = F/m +% dtheta/dt = s/I +% +% where x,y are the position, v the velocity in heading angle theta of the +% car. The inputs are F (accelerating force) and steering s. +% +% The car starts from standstill with a certain heading angle, and the +% optimization problem is to maximize progress in y direction while staying +% inside a non-convex feasible region. +% +% Quadratic costs for the acceleration force and steering are added to the +% objective to avoid excessive maneouvers. +% +% There are bounds on all variables. +% +% Variables are collected stage-wise into z = [F s x y v theta]. +% +% See also FORCES_NLP +% +% (c) embotech AG, Zurich, Switzerland, 2013-18. + +clear; clc; close all; +deg2rad = @(deg) deg/180*pi; % convert degrees into radians +rad2deg = @(rad) rad/pi*180; % convert radians into degrees + +%% Problem dimensions +model.N = 50; % horizon length +model.nvar = 6; % number of variables +model.neq = 4; % number of equality constraints +model.nh = 2; % number of inequality constraint functions + +%% Objective function +% In this example, we want to maximize position in y direction, +% with some penalties on the inputs F and s: +model.objective = @(z) -100*z(4) + 0.1*z(1)^2 + 0.01*z(2)^2; + +% You can use standard Matlab handles to define these functions, i.e. you +% could also have this in a separate file. We use anonymous handles here +% only for convenience. + +%% Dynamics, i.e. equality constraints +% We use an explicit RK4 integrator here to discretize continuous dynamics: +m=1; I=1; % physical constants of the model +integrator_stepsize = 0.1; +model.continuous_dynamics = @(x,u) [x(3)*cos(x(4)); % v*cos(theta) + x(3)*sin(x(4)); % v*sin(theta) + u(1)/m; % F/m + u(2)/I]; % s/I + +% Indices on LHS of dynamical constraint - for efficiency reasons, make +% sure the matrix E has structure [0 I] where I is the identity matrix. +model.E = [zeros(4,2), eye(4)]; + +%% Inequality constraints +% upper/lower variable bounds lb <= x <= ub +% inputs | states +% F s x y v theta +model.lb = [ -5, -1, -3, 0 0 0 ]; +model.ub = [ +5, +1, 0, 3 2 +pi ]; + +% General (differentiable) nonlinear inequalities hl <= h(x) <= hu +model.ineq = @(z) [ z(3)^2 + z(4)^2; + (z(3)+2)^2 + (z(4)-2.5)^2 ]; + +% Upper/lower bounds for inequalities +model.hu = [9, +inf]'; +model.hl = [1, 0.95^2]'; + +%% Initial and final conditions + +% Initial condition on vehicle states +model.xinit = [-2, 0, 0, deg2rad(120)]'; % x=-2, y=0, v=0 (standstill), heading angle=120? +model.xinitidx = 3:6; % use this to specify on which variables initial conditions are imposed + +% Final condition on vehicle velocity and heading angle +model.xfinal = [0, deg2rad(0)]'; % v final=0 (standstill), heading angle final=0? +model.xfinalidx = 5:6; % use this to specify on which variables final conditions are imposed + + +%% Define solver options +codeoptions = getOptions('FORCESNLPsolver'); +codeoptions.maxit = 200; % Maximum number of iterations +codeoptions.printlevel = 2; % Use printlevel = 2 to print progress (but not for timings) +codeoptions.optlevel = 0; % 0: no optimization, 1: optimize for size, 2: optimize for speed, 3: optimize for size & speed +codeoptions.cleanup = false; +codeoptions.nohash = 1; + +% define integrator options +codeoptions.nlp.integrator.type = 'IRK4'; % can also be 'ForwardEuler', 'ERK2', 'ERK3', 'ERK4', 'BackwardEuler', or 'IRK2' +codeoptions.nlp.integrator.Ts = 0.1; +codeoptions.nlp.integrator.nodes = 10; + +% change this to your server or leave uncommented for using the standard +% embotech server at https://www.embotech.com/codegen +% codeoptions.server = 'http://yourforcesserver.com:8114/v1.5'; + +%% Generate forces solver +FORCES_NLP(model, codeoptions); + +%% Call solver +% Set initial guess to start solver from: +x0i=model.lb+(model.ub-model.lb)/2; +x0=repmat(x0i',model.N,1); +problem.x0=x0; + +% Set initial and final conditions. This is usually changing from problem +% instance to problem instance: +problem.xinit = model.xinit; +problem.xfinal = model.xfinal; + +% Time to solve the NLP! +[output,exitflag,info] = FORCESNLPsolver(problem); + +% Make sure the solver has exited properly. +assert(exitflag == 1,'Some problem in FORCES solver'); +fprintf('\nFORCES took %d iterations and %f seconds to solve the problem.\n',info.it,info.solvetime); + +%% Plot results +TEMP = zeros(model.nvar,model.N); +for i=1:model.N + TEMP(:,i) = output.(['x',sprintf('%02d',i)]); +end +U = TEMP(1:2,:); +X = TEMP(3:6,:); + +% plot trajectory +figure(1); clf; +plot(X(1,:),X(2,:),'b-'); hold on; +rectangle('Position',[-sqrt(model.hl(1)) -sqrt(model.hl(1)) 2*sqrt(model.hl(1)) 2*sqrt(model.hl(1))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +rectangle('Position',[-sqrt(model.hu(1)) -sqrt(model.hu(1)) 2*sqrt(model.hu(1)) 2*sqrt(model.hu(1))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +rectangle('Position',[-2-sqrt(model.hl(2)) 2.5-sqrt(model.hl(2)) 2*sqrt(model.hl(2)) 2*sqrt(model.hl(2))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +plot(model.xinit(1),model.xinit(2),'bx','LineWidth',3); +title('position'); xlim([-2.5 0]); ylim([0 3]); xlabel('x position'); ylabel('y position'); + +% plot heading angle and velocity variables +figure(2); clf; +subplot(2,1,1); plot(X(3,:)); grid on; title('velocity'); hold on; +plot([1 model.N], [model.ub(5) model.ub(5)]', 'r:'); +plot([1 model.N], [model.lb(5) model.lb(5)]', 'r:'); +subplot(2,1,2); plot(rad2deg(X(4,:))); grid on; title('heading angle'); ylim([0, 180]); hold on; +plot([1 model.N], rad2deg([model.ub(6) model.ub(6)])', 'r:'); +plot([1 model.N], rad2deg([model.lb(6) model.lb(6)])', 'r:'); + +% plot inputs +figure(3); clf; +subplot(2,1,1); stairs(U(1,:)); grid on; title('acceleration force'); hold on; +plot([1 model.N], [model.ub(1) model.ub(1)]', 'r:'); +plot([1 model.N], [model.lb(1) model.lb(1)]', 'r:'); +subplot(2,1,2); stairs(U(2,:)); grid on; title('delta steering'); hold on; +plot([1 model.N], [model.ub(2) model.ub(2)]', 'r:'); +plot([1 model.N], [model.lb(2) model.lb(2)]', 'r:'); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_autoFevals_termCost.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_autoFevals_termCost.m new file mode 100755 index 0000000..7ed596a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_autoFevals_termCost.m @@ -0,0 +1,164 @@ +% Example script for getting started with FORCES NLP solver. +% +%-------------------------------------------------------------------------- +% NOTE: This example shows how to define a nonlinear programming problem, +% where all derivative information is automatically generated by +% using the AD tool CasADi. +% +% You may want to directly pass C functions to FORCES, for example when you +% are using other AD tools, or have custom C functions for derivate +% evaluation etc. See the example file "NLPexample_ownFevals.m" for how to +% pass custom C functions to FORCES. +%-------------------------------------------------------------------------- +% +% This example solves an optimization problem for a car with the simple +% continuous-time, nonlinear dynamics +% +% dx/dt = v*cos(theta) +% dy/dt = v*sin(theta) +% dv/dt = F/m +% dtheta/dt = s/I +% +% where x,y are the position, v the velocity in heading angle theta of the +% car. The inputs are F (accelerating force) and steering s. +% +% The car starts from standstill with a certain heading angle, and the +% optimization problem is to maximize progress in y direction at the end +% of the prediction horizon while staying inside a non-convex feasible region. +% +% Quadratic costs for the acceleration force and steering are added to the +% objective to avoid excessive maneouvers. +% +% There are bounds on all variables. +% +% Variables are collected stage-wise into z = [F s x y v theta]. +% +% See also FORCES_NLP +% +% (c) embotech AG, Zurich, Switzerland, 2013-18. + +clear; clc; close all; +deg2rad = @(deg) deg/180*pi; % convert degrees into radians +rad2deg = @(rad) rad/pi*180; % convert radians into degrees + +%% Problem dimensions +model.N = 50; % horizon length +model.nvar = 6; % number of variables +model.neq = 4; % number of equality constraints +model.nh = 2; % number of inequality constraint functions + +%% Objective function +% In this example, we want to penalize the inputs F and s: +for i=1:model.N-1 + model.objective{i} = @(z) 0.1*z(1)^2 + 0.01*z(2)^2; +end + +% and maximize the progress on the y direction, while ensuring a small +% velocity and heading angle at the end of the horizon. +% Terminal cost: -100*y 100*v^2 + 100*theta^2 to aim for max y, v=0 and theta=0 +model.objective{model.N} = @(z) -100*z(4) + 10*(z(5)-0)^2 + 10*(z(6)-0)^2; + +% You can use standard Matlab handles to define these functions, i.e. you +% could also have this in a separate file. We use anonymous handles here +% only for convenience. + +%% Dynamics, i.e. equality constraints +% We use an explicit RK4 integrator here to discretize continuous dynamics: +m=1; I=1; % physical constants of the model +integrator_stepsize = 0.1; +continuous_dynamics = @(x,u) [x(3)*cos(x(4)); % v*cos(theta) + x(3)*sin(x(4)); % v*sin(theta) + u(1)/m; % F/m + u(2)/I]; % s/I +model.eq = @(z) RK4( z(3:6), z(1:2), continuous_dynamics, integrator_stepsize); + +% Indices on LHS of dynamical constraint - for efficiency reasons, make +% sure the matrix E has structure [0 I] where I is the identity matrix. +model.E = [zeros(4,2), eye(4)]; + +%% Inequality constraints +% upper/lower variable bounds lb <= x <= ub +% inputs | states +% F s x y v theta +model.lb = [ -5, -1, -3, 0 0 0 ]; +model.ub = [ +5, +1, 0, 3 2 +pi ]; + +% General (differentiable) nonlinear inequalities hl <= h(x) <= hu +model.ineq = @(z) [ z(3)^2 + z(4)^2; + (z(3)+2)^2 + (z(4)-2.5)^2 ]; + +% Upper/lower bounds for inequalities +model.hu = [9, +inf]'; +model.hl = [1, 0.95^2]'; + +%% Initial and final conditions + +% Initial condition on vehicle states +model.xinit = [-2, 0, 0, deg2rad(120)]'; % x=-2, y=0, v=0 (standstill), heading angle=120? +model.xinitidx = 3:6; % use this to specify on which variables initial conditions are imposed + + +%% Define solver options +codeoptions = getOptions('FORCESNLPsolver'); +codeoptions.maxit = 500; % Maximum number of iterations +codeoptions.printlevel = 0; % Use printlevel = 2 to print progress (but not for timings) +codeoptions.optlevel = 0; % 0: no optimization, 1: optimize for size, 2: optimize for speed, 3: optimize for size & speed + +% change this to your server or leave uncommented for using the standard +% embotech server at https://www.embotech.com/codegen +% codeoptions.server = 'http://yourforcesserver.com:8114/v1.5'; + +%% Generate forces solver +FORCES_NLP(model, codeoptions); + +%% Call solver +% Set initial guess to start solver from: +x0i=model.lb+(model.ub-model.lb)/2; +x0=repmat(x0i',model.N,1); +problem.x0=x0; + +% Set initial condition. This is usually changing from problem +% instance to problem instance: +problem.xinit = model.xinit; + +% Time to solve the NLP! +[output,exitflag,info] = FORCESNLPsolver(problem); + +% Make sure the solver has exited properly. +assert(exitflag == 1,'Some problem in FORCES solver'); +fprintf('\nFORCES took %d iterations and %f seconds to solve the problem.\n',info.it,info.solvetime); + +%% Plot results +TEMP = zeros(model.nvar,model.N); +for i=1:model.N + TEMP(:,i) = output.(['x',sprintf('%02d',i)]); +end +U = TEMP(1:2,:); +X = TEMP(3:6,:); + +% plot trajectory +figure(1); clf; +plot(X(1,:),X(2,:),'b-'); hold on; +rectangle('Position',[-sqrt(model.hl(1)) -sqrt(model.hl(1)) 2*sqrt(model.hl(1)) 2*sqrt(model.hl(1))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +rectangle('Position',[-sqrt(model.hu(1)) -sqrt(model.hu(1)) 2*sqrt(model.hu(1)) 2*sqrt(model.hu(1))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +rectangle('Position',[-2-sqrt(model.hl(2)) 2.5-sqrt(model.hl(2)) 2*sqrt(model.hl(2)) 2*sqrt(model.hl(2))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +plot(model.xinit(1),model.xinit(2),'bx','LineWidth',3); +title('position'); xlim([-2.5 0]); ylim([0 3]); xlabel('x position'); ylabel('y position'); + +% plot heading angle and velocity variables +figure(2); clf; +subplot(2,1,1); plot(X(3,:)); grid on; title('velocity'); hold on; +plot([1 model.N], [model.ub(5) model.ub(5)]', 'r:'); +plot([1 model.N], [model.lb(5) model.lb(5)]', 'r:'); +subplot(2,1,2); plot(rad2deg(X(4,:))); grid on; title('heading angle'); ylim([0, 180]); hold on; +plot([1 model.N], rad2deg([model.ub(6) model.ub(6)])', 'r:'); +plot([1 model.N], rad2deg([model.lb(6) model.lb(6)])', 'r:'); + +% plot inputs +figure(3); clf; +subplot(2,1,1); stairs(U(1,:)); grid on; title('acceleration force'); hold on; +plot([1 model.N], [model.ub(1) model.ub(1)]', 'r:'); +plot([1 model.N], [model.lb(1) model.lb(1)]', 'r:'); +subplot(2,1,2); stairs(U(2,:)); grid on; title('delta steering'); hold on; +plot([1 model.N], [model.ub(2) model.ub(2)]', 'r:'); +plot([1 model.N], [model.lb(2) model.lb(2)]', 'r:'); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_ownFevals.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_ownFevals.m new file mode 100755 index 0000000..fe3d69d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_ownFevals.m @@ -0,0 +1,149 @@ +% Example script for getting started with FORCES NLP solver. +% +%-------------------------------------------------------------------------- +% NOTE: This example shows how to pass C functions implementing the +% function evaluations to FORCES. There is an automated way of creating +% these C functions, which is explained in the other example file named +% "NLPexample_autoFevals.m" +%-------------------------------------------------------------------------- +% +% This example solves an optimization problem for a car with the simple +% continuous-time, nonlinear dynamics +% +% dx/dt = v*cos(theta) +% dy/dt = v*sin(theta) +% dv/dt = F/m +% dtheta/dt = s/I +% +% where x,y are the position, v the velocity in heading angle theta of the +% car. The inputs are F (accelerating force) and steering s. +% +% The car starts from standstill with a certain heading angle, and the +% optimization problem is to maximize progress in y direction while staying +% inside a non-convex feasible region. +% +% Quadratic costs for the acceleration force and steering are added to the +% objective to avoid excessive maneouvers. +% +% There are bounds on all variables. +% +% Variables are collected stage-wise into z = [F s x y v theta]. +% +% See also FORCES_NLP +% +% (c) embotech AG, Zurich, Switzerland, 2013-18. + +clear; clc; close all; +deg2rad = @(deg) deg/180*pi; % convert degrees into radians +rad2deg = @(rad) rad/pi*180; % convert radians into degrees + +%% Problem dimensions +model.N = 50; % horizon length +model.nvar = 6; % number of variables +model.neq = 4; % number of equality constraints +model.nh = 2; % number of inequality constraint functions + +%% Define source file containing function evaluation code +model.extfuncs = 'C/myfevals.c'; +% Note: we will add additional source files required below at code options! + +% Indices on LHS of dynamical constraint - for efficiency reasons, make +% sure the matrix E has structure [0 I] where I is the identity matrix. +model.E = [zeros(4,2), eye(4)]; + +%% Inequality constraints +% upper/lower variable bounds lb <= x <= ub +% inputs | states +% F s x y v theta +model.lb = [ -5, -1, -3, 0 0 0 ]; +model.ub = [ +5, +1, 0, 3 2 +pi ]; + +% General (differentiable) nonlinear inequalities hl <= h(x) <= hu +model.ineq = @(z) [ z(3)^2 + z(4)^2; + (z(3)+2)^2 + (z(4)-2.5)^2 ]; + +% Upper/lower bounds for inequalities +model.hu = [9, +inf]'; +model.hl = [1, 0.95^2]'; + +%% Initial and final conditions + +% Initial condition on vehicle states +model.xinit = [-2, 0, 0, deg2rad(120)]'; % x=-2, y=0, v=0 (standstill), heading angle=120? +model.xinitidx = 3:6; % use this to specify on which variables initial conditions are imposed + +% Final condition on vehicle velocity and heading angle +model.xfinal = [0, deg2rad(0)]'; % v final=0 (standstill), heading angle final=0? +model.xfinalidx = 5:6; % use this to specify on which variables final conditions are imposed + + +%% Define solver options +codeoptions = getOptions('FORCESNLPsolver'); +codeoptions.maxit = 200; % Maximum number of iterations +codeoptions.printlevel = 2; % Use printlevel = 2 to print progress (but not for timings) +codeoptions.optlevel = 0; % 0: no optimization, 1: optimize for size, 2: optimize for speed, 3: optimize for size & speed + +codeoptions.nlp.bfgs_init = diag([0.1001,0.0101,0.0001,0.0001,0.0001,0.0001]); + +% change this to your server or leave uncommented for using the standard +% embotech server at https://www.embotech.com/codegen +% codeoptions.server = 'http://yourforcesserver.com:8114/v1.5'; + +% add additional source files required - separate by spaces if more than 1 +codeoptions.nlp.other_srcs = 'C/car_dynamics.c'; + +%% Generate forces solver +FORCES_NLP(model, codeoptions); + +%% Call solver +% Set initial guess to start solver from: +x0i=model.lb+(model.ub-model.lb)/2; +x0=repmat(x0i',model.N,1); +problem.x0=x0; + +% Set initial and final conditions. This is usually changing from problem +% instance to problem instance: +problem.xinit = model.xinit; +problem.xfinal = model.xfinal; + +% Time to solve the NLP! +[output,exitflag,info] = FORCESNLPsolver(problem); + +% Make sure the solver has exited properly. +assert(exitflag == 1,'Some problem in FORCES solver'); +fprintf('\nFORCES took %d iterations and %f seconds to solve the problem.\n',info.it,info.solvetime); + +%% Plot results +TEMP = zeros(model.nvar,model.N); +for i=1:model.N + TEMP(:,i) = output.(['x',sprintf('%02d',i)]); +end +U = TEMP(1:2,:); +X = TEMP(3:6,:); + +% plot trajectory +figure(1); clf; +plot(X(1,:),X(2,:),'b-'); hold on; +rectangle('Position',[-sqrt(model.hl(1)) -sqrt(model.hl(1)) 2*sqrt(model.hl(1)) 2*sqrt(model.hl(1))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +rectangle('Position',[-sqrt(model.hu(1)) -sqrt(model.hu(1)) 2*sqrt(model.hu(1)) 2*sqrt(model.hu(1))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +rectangle('Position',[-2-sqrt(model.hl(2)) 2.5-sqrt(model.hl(2)) 2*sqrt(model.hl(2)) 2*sqrt(model.hl(2))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +plot(model.xinit(1),model.xinit(2),'bx','LineWidth',3); +title('position'); xlim([-2.5 0]); ylim([0 3]); xlabel('x position'); ylabel('y position'); + +% plot heading angle and velocity variables +figure(2); clf; +subplot(2,1,1); plot(X(3,:)); grid on; title('velocity'); hold on; +plot([1 model.N], [model.ub(5) model.ub(5)]', 'r:'); +plot([1 model.N], [model.lb(5) model.lb(5)]', 'r:'); +subplot(2,1,2); plot(rad2deg(X(4,:))); grid on; title('heading angle'); ylim([0, 180]); hold on; +plot([1 model.N], rad2deg([model.ub(6) model.ub(6)])', 'r:'); +plot([1 model.N], rad2deg([model.lb(6) model.lb(6)])', 'r:'); + +% plot inputs +figure(3); clf; +subplot(2,1,1); stairs(U(1,:)); grid on; title('acceleration force'); hold on; +plot([1 model.N], [model.ub(1) model.ub(1)]', 'r:'); +plot([1 model.N], [model.lb(1) model.lb(1)]', 'r:'); +subplot(2,1,2); stairs(U(2,:)); grid on; title('delta steering'); hold on; +plot([1 model.N], [model.ub(2) model.ub(2)]', 'r:'); +plot([1 model.N], [model.lb(2) model.lb(2)]', 'r:'); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_usingParameters.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_usingParameters.m new file mode 100755 index 0000000..38c1dad --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/HighLevelInterface/ObstacleAvoidance/ObstacleAvoidance_usingParameters.m @@ -0,0 +1,175 @@ +% Example script for getting started with FORCES NLP solver. +% +%-------------------------------------------------------------------------- +% NOTE: This example shows how to define a nonlinear programming problem, +% where all derivative information is automatically generated by +% using the AD tool CasADi. +% +% You may want to directly pass C functions to FORCES, for example when you +% are using other AD tools, or have custom C functions for derivate +% evaluation etc. See the example file "NLPexample_ownFevals.m" for how to +% pass custom C functions to FORCES. +%-------------------------------------------------------------------------- +% +% This example solves an optimization problem for a car with the simple +% continuous-time, nonlinear dynamics +% +% dx/dt = v*cos(theta) +% dy/dt = v*sin(theta) +% dv/dt = F/m +% dtheta/dt = s/I +% +% where x,y are the position, v the velocity in heading angle theta of the +% car. The inputs are F (accelerating force) and steering s. +% +% The car starts from standstill with a certain heading angle, and the +% optimization problem is to maximize progress in y direction while staying +% inside a non-convex feasible region. +% +% Quadratic costs for the acceleration force and steering are added to the +% objective to avoid excessive maneouvers. +% +% There are bounds on all variables. +% +% Variables are collected stage-wise into z = [F s x y v theta]. +% Parameters are collected into p = [m I] +% +% See also FORCES_NLP +% +% (c) embotech AG, Zurich, Switzerland, 2013-18. + +clear; clc; close all; +deg2rad = @(deg) deg/180*pi; % convert degrees into radians +rad2deg = @(rad) rad/pi*180; % convert radians into degrees + +%% Problem dimensions +model.N = 50; % horizon length +model.nvar = 6; % number of variables +model.neq = 4; % number of equality constraints +model.nh = 2; % number of inequality constraint functions + +%% Objective function +% In this example, we want to penalize the inputs F and s: +for i=1:model.N-1 + model.objective{i} = @(z) 0.1*z(1)^2 + 0.01*z(2)^2; + model.npar(i) = 2; % number of parameters +end +model.npar(model.N) = 0; % no parameters in the last stage + +% and maximize the progress on the y direction, while ensuring a small +% velocity and heading angle at the end of the horizon. +% Terminal cost: -100*y 100*v^2 + 100*theta^2 to aim for max y, v=0 and theta=0 +model.objective{model.N} = @(z) -100*z(4) + 10*(z(5)-0)^2 + 10*(z(6)-0)^2; + +% You can use standard Matlab handles to define these functions, i.e. you +% could also have this in a separate file. We use anonymous handles here +% only for convenience. + +%% Dynamics, i.e. equality constraints +% We use an explicit RK4 integrator here to discretize continuous dynamics: +m=1; I=1; % physical constants of the model +integrator_stepsize = 0.1; +continuous_dynamics = @(x,u,p) [x(3)*cos(x(4)); % v*cos(theta) + x(3)*sin(x(4)); % v*sin(theta) + u(1)/p(1); % F/m + u(2)/p(2)]; % s/I +model.eq = @(z,p) RK4( z(3:6), z(1:2), continuous_dynamics, integrator_stepsize, p); + +% Indices on LHS of dynamical constraint - for efficiency reasons, make +% sure the matrix E has structure [0 I] where I is the identity matrix. +model.E = [zeros(4,2), eye(4)]; + +%% Inequality constraints +% upper/lower variable bounds lb <= x <= ub +% inputs | states +% F s x y v theta +model.lb = [ -5, -1, -3, 0 0 0 ]; +model.ub = [ +5, +1, 0, 3 2 +pi ]; + +% General (differentiable) nonlinear inequalities hl <= h(x) <= hu +model.ineq = @(z) [ z(3)^2 + z(4)^2; + (z(3)+2)^2 + (z(4)-2.5)^2 ]; + +% Upper/lower bounds for inequalities +model.hu = [9, +inf]'; +model.hl = [1, 0.95^2]'; + +%% Initial and final conditions + +% Initial condition on vehicle states +model.xinit = [-2, 0, 0, deg2rad(120)]'; % x=-2, y=0, v=0 (standstill), heading angle=120? +model.xinitidx = 3:6; % use this to specify on which variables initial conditions are imposed + +% Final condition on vehicle velocity and heading angle +%model.xfinal = [0, deg2rad(0)]'; % v final=0 (standstill), heading angle final=0? +%model.xfinalidx = 5:6; % use this to specify on which variables final conditions are imposed + + +%% Define solver options +codeoptions = getOptions('FORCESNLPsolver'); +codeoptions.maxit = 200; % Maximum number of iterations +codeoptions.printlevel = 2; % Use printlevel = 2 to print progress (but not for timings) +codeoptions.optlevel = 0; % 0: no optimization, 1: optimize for size, 2: optimize for speed, 3: optimize for size & speed + +% change this to your server or leave uncommented for using the standard +% embotech server at https://www.embotech.com/codegen +% codeoptions.server = 'http://yourforcesserver.com:8114/v1.5'; + +%% Generate forces solver +FORCES_NLP(model, codeoptions); + +%% Call solver +% Set initial guess to start solver from: +x0i=model.lb+(model.ub-model.lb)/2; +x0=repmat(x0i',model.N,1); +problem.x0=x0; + +% Set initial and final conditions. This is usually changing from problem +% instance to problem instance: +problem.xinit = model.xinit; +%problem.xfinal = model.xfinal; + +% Set parameters +problem.all_parameters = repmat([m I]',model.N-1,1); + +% Time to solve the NLP! +[output,exitflag,info] = FORCESNLPsolver(problem); + +% Make sure the solver has exited properly. +assert(exitflag == 1,'Some problem in FORCES solver'); +fprintf('\nFORCES took %d iterations and %f seconds to solve the problem.\n',info.it,info.solvetime); + +%% Plot results +TEMP = zeros(model.nvar,model.N); +for i=1:model.N + TEMP(:,i) = output.(['x',sprintf('%02d',i)]); +end +U = TEMP(1:2,:); +X = TEMP(3:6,:); + +% plot trajectory +figure(1); clf; +plot(X(1,:),X(2,:),'b-'); hold on; +rectangle('Position',[-sqrt(model.hl(1)) -sqrt(model.hl(1)) 2*sqrt(model.hl(1)) 2*sqrt(model.hl(1))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +rectangle('Position',[-sqrt(model.hu(1)) -sqrt(model.hu(1)) 2*sqrt(model.hu(1)) 2*sqrt(model.hu(1))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +rectangle('Position',[-2-sqrt(model.hl(2)) 2.5-sqrt(model.hl(2)) 2*sqrt(model.hl(2)) 2*sqrt(model.hl(2))],'Curvature',[1 1],'EdgeColor','r','LineStyle',':'); +plot(model.xinit(1),model.xinit(2),'bx','LineWidth',3); +title('position'); xlim([-2.5 0]); ylim([0 3]); xlabel('x position'); ylabel('y position'); + +% plot heading angle and velocity variables +figure(2); clf; +subplot(2,1,1); plot(X(3,:)); grid on; title('velocity'); hold on; +plot([1 model.N], [model.ub(5) model.ub(5)]', 'r:'); +plot([1 model.N], [model.lb(5) model.lb(5)]', 'r:'); +subplot(2,1,2); plot(rad2deg(X(4,:))); grid on; title('heading angle'); ylim([0, 180]); hold on; +plot([1 model.N], rad2deg([model.ub(6) model.ub(6)])', 'r:'); +plot([1 model.N], rad2deg([model.lb(6) model.lb(6)])', 'r:'); + +% plot inputs +figure(3); clf; +subplot(2,1,1); stairs(U(1,:)); grid on; title('acceleration force'); hold on; +plot([1 model.N], [model.ub(1) model.ub(1)]', 'r:'); +plot([1 model.N], [model.lb(1) model.lb(1)]', 'r:'); +subplot(2,1,2); stairs(U(2,:)); grid on; title('delta steering'); hold on; +plot([1 model.N], [model.ub(2) model.ub(2)]', 'r:'); +plot([1 model.N], [model.lb(2) model.lb(2)]', 'r:'); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ActiveSuspensionControl/ActiveSuspensionControl.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ActiveSuspensionControl/ActiveSuspensionControl.m new file mode 100755 index 0000000..b89d448 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ActiveSuspensionControl/ActiveSuspensionControl.m @@ -0,0 +1,328 @@ +%% Active Suspension Control +% +% Model Predictive Control Designed with FORCES Pro +% +% (c) Gian Koenig, embotech AG, Zurich, Switzerland, 2014. + +clear all; clc; close all; + +%% System + +% output vector (3 outputs) +% - zb_ddot : heave acceleration +% - phi_ddot : pitch acceleration +% - theta_ddot : roll acceleration + +% REDUCED MODEL : state vector (6 states) +% - zb : heave displacement +% - phi : pitch displacement +% - theta : roll displacement +% - zb_dot : heave velocity +% - phi_dot : pitch velocity +% - theta_dot : roll velocity + +load('Active_Suspension_Control_Model.mat') + +%% Road Bump + +n = 3600; +t=[0:.005:n*.005-.005]'; +road1 = zeros(length(t),1); +road2 = zeros(length(t),1); + +for i = 1:20 + k = i+160; + road1(k,1) = i*.005; +end +for i = 1:20 + k = i+180; + road1(k,1) = .1 - i*.005; +end + +%% Simulate the passive model + +sim('Active_Suspension_Control_NC') + +% System Response: output_nocontrol +Y_NC = output_nocontrol.Data; +t_sim = output_nocontrol.Time; + +% System Input: w_ii, w_dot_ii, ii = {fl, fr, rl, rr} +w = [w.signal1.Data, w.signal2.Data,... + w.signal3.Data,w.signal4.Data... + w_dot.signal1.Data,w_dot.signal2.Data,... + w_dot.signal3.Data,w_dot.signal4.Data]'; + +%% Measurement data for control and for plotting +% Reduce Resolution +N=20; +kmax_pre = 720; +w_pre_temp = [w zeros(8,N)]; +w_pre = [zeros(8,kmax_pre) zeros(8,N)]; + +t_pre = (0:0.025:kmax_pre*0.025-0.025)'; +k=1; +for i = 1:kmax_pre + w_pre(:,i) = w_pre_temp(:,k+1); + k = 5*i; +end + +%% MPC Setup +nx = 6; +nu = 4; + +N = 20; +Q = diag([50,50,50,50,50,50]); +R = eye(nu); +if( exist('dlqr','file') ) + [~,P] = dlqr(Ad,Bdu,Q,R); +else + P = 20*Q; +end +umin = -.04; umax = .04; + +%% MPC without Preview +% FORCES multistage form +% assume variable ordering zi = [ui; xi+1] for i=1...N-1 + +% Parameter +parameter = newParam('minusA_times_x0_minusBw_times_w',1,'eq.c'); + +stages = MultistageProblem(N); +for i = 1:N + + % dimension + stages(i).dims.n = nx+nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nu; % number of lower bounds + stages(i).dims.u = nu; % number of upper bounds + + % cost + if( i == N ) + stages(i).cost.H = blkdiag(R,P); + else + stages(i).cost.H = blkdiag(R,Q); + end + stages(i).cost.f = zeros(nx+nu,1); + + % lower bounds + stages(i).ineq.b.lbidx = 1:nu; % lower bound acts on these indices + stages(i).ineq.b.lb = umin*ones(4,1); % lower bound for the input signal + + % upper bounds + stages(i).ineq.b.ubidx = 1:nu; % upper bound acts on these indices + stages(i).ineq.b.ub = umax*ones(4,1); % upper bound for the input signal + + % equality constraints + if( i < N ) + stages(i).eq.C = [zeros(nx,nu), Ad]; + end + if( i>1 ) + stages(i).eq.c = zeros(nx,1); + end + stages(i).eq.D = [Bdu, -eye(nx)]; + +end + +% define outputs of the solver +outputs(1) = newOutput('u0',1,1:nu); + +% solver settings +codeoptions = getOptions('VEHICLE_MPC_noPreview'); + +% generate code +generateCode(stages,parameter,codeoptions,outputs); + +% simulate +x1 = zeros(6,1); +X_NP = zeros(nx,kmax_pre+1); X_NP(:,1) = x1; +Y_NP = zeros(3,kmax_pre); +U_NP = zeros(nu,kmax_pre); +problem.z1 = zeros(2*nx,1); +for k = 1:kmax_pre + problem.minusA_times_x0_minusBw_times_w = -Ad*X_NP(:,k)-Bdw*[w_pre(:,k)]; + [solverout,exitflag,info] = VEHICLE_MPC_noPreview(problem); + if( exitflag == 1 ) + U_NP(:,k) = solverout.u0; + else + info + error('Some problem in solver'); + end + X_NP(:,k+1) = Ad*X_NP(:,k) + [Bdu, Bdw]*[U_NP(:,k); w_pre(:,k)]; + Y_NP(:,k) = Cd*X_NP(:,k) + Dd*[U_NP(:,k); w_pre(:,k)]; +end + +N = 20; + +%% MPC with Preview + +% FORCES multistage form +% assume variable ordering zi = [ui; xi+1] for i=1...N-1 + +% Parameters: First Eq. RHS +parameter(1) = newParam('minusA_times_x0_minusBw_times_w_pre',1,'eq.c'); + +stages = MultistageProblem(N); +for i = 1:N + + % dimension + stages(i).dims.n = nx+nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nu; % number of lower bounds + stages(i).dims.u = nu; % number of upper bounds + + % cost + if( i == N ) + stages(i).cost.H = blkdiag(R,P); + else + stages(i).cost.H = blkdiag(R,Q); + end + stages(i).cost.f = zeros(nx+nu,1); + + % lower bounds + stages(i).ineq.b.lbidx = 1:nu; % lower bound acts on these indices + stages(i).ineq.b.lb = umin*ones(4,1); % lower bound for the input signal + + % upper bounds + stages(i).ineq.b.ubidx = 1:nu; % upper bound acts on these indices + stages(i).ineq.b.ub = umax*ones(4,1); % upper bound for the input signal + + % equality constraints + if( i < N ) + stages(i).eq.C = [zeros(nx,nu), Ad]; + end + stages(i).eq.D = [Bdu, -eye(nx)]; + + % Parameters for Preview + if (i < N) + parameter(i+1) = newParam(['pre',num2str(i+1),'_w'],i+1,'eq.c'); + end + +end + +% define outputs of the solver +outputs(1) = newOutput('u0',1,1:nu); + +% solver settings +codeoptions = getOptions('VEHICLE_MPC_withPreview'); + +% generate code +generateCode(stages,parameter,codeoptions,outputs); + +% simulate +x1 = zeros(6,1); +X_wP = zeros(nx,kmax_pre+1); X_wP(:,1) = x1; +Y_wP = zeros(3,kmax_pre); +U_wP = zeros(nu,kmax_pre); +problem.z1 = zeros(2*nx,1); +for k = 1:kmax_pre + problem.minusA_times_x0_minusBw_times_w_pre = -Ad*X_wP(:,k)-Bdw*[w_pre(:,k)]; + problem.pre2_w = -Bdw*w_pre(:,k+1); problem.pre3_w = -Bdw*w_pre(:,k+2); + problem.pre4_w = -Bdw*w_pre(:,k+3); problem.pre5_w = -Bdw*w_pre(:,k+4); + problem.pre6_w = -Bdw*w_pre(:,k+5); problem.pre7_w = -Bdw*w_pre(:,k+6); + problem.pre8_w = -Bdw*w_pre(:,k+7); problem.pre9_w = -Bdw*w_pre(:,k+8); + problem.pre10_w = -Bdw*w_pre(:,k+9); problem.pre11_w = -Bdw*w_pre(:,k+10); + problem.pre12_w = -Bdw*w_pre(:,k+11); problem.pre13_w = -Bdw*w_pre(:,k+12); + problem.pre14_w = -Bdw*w_pre(:,k+13); problem.pre15_w = -Bdw*w_pre(:,k+14); + problem.pre16_w = -Bdw*w_pre(:,k+15); problem.pre17_w = -Bdw*w_pre(:,k+16); + problem.pre18_w = -Bdw*w_pre(:,k+17); problem.pre19_w = -Bdw*w_pre(:,k+18); + problem.pre20_w = -Bdw*w_pre(:,k+19); + [solverout,exitflag,info] = VEHICLE_MPC_withPreview(problem); + if( exitflag == 1 ) + U_wP(:,k) = solverout.u0; + else + info + error('Some problem in solver'); + end + X_wP(:,k+1) = Ad*X_wP(:,k) + [Bdu, Bdw]*[U_wP(:,k); w_pre(:,k)]; + Y_wP(:,k) = Cd*X_wP(:,k) + Dd*[U_wP(:,k); w_pre(:,k)]; +end + +%% Plots + +% Road Disturbance +h = figure(1); +plot(t_sim, w(2,:)); grid on; +title('Speed Bump: Front Right Wheel', 'FontSize', 16); +ylim([0, .11]); xlim([0.3, 1.5]) +h_xlabel = xlabel('Time'); h_ylabel = ylabel('Road w_{fr}'); +set(h_xlabel, 'FontSize', 14); set(h_ylabel, 'FontSize', 14); +set(gcf,'PaperUnits','inches','PaperPosition',[0 0 10 2]); + +% Heave Acceleration +h = figure(2); +stairs(t_pre, Y_wP(1,:),'b'); hold on; stairs(t_pre, Y_NP(1,:),'r'); grid on; +title('Heave Acceleration', 'FontSize', 16); +ylim([-2, 2]); xlim([.3, 1.5]) +h_xlabel = xlabel('Time'); h_ylabel = ylabel('Heave Acceleration [m/s^2]'); +set(h_xlabel, 'FontSize', 14); set(h_ylabel, 'FontSize', 14); +h_legend=legend('heave acc with preview', 'heave acc without preview','Location','SouthWest'); grid on; +set(h_legend,'FontSize',14); + +% Pitch Acceleration +h = figure(3); +stairs(t_pre, Y_wP(2,:),'b'); hold on; stairs(t_pre, Y_NP(2,:),'r'); grid on; +title('Pitch Acceleration', 'FontSize', 16); +ylim([-2, 2]); xlim([.3, 1.5]) +h_xlabel = xlabel('Time'); h_ylabel = ylabel('Pitch Acceleration [m/s^2]'); +set(h_xlabel, 'FontSize', 14); set(h_ylabel, 'FontSize', 14); +h_legend=legend('pitch acc with preview', 'pitch acc without preview','Location','SouthWest'); grid on; +set(h_legend,'FontSize',14); + +% Roll Acceleration +h = figure(4); +stairs(t_pre, Y_wP(3,:),'b'); hold on; stairs(t_pre, Y_NP(3,:),'r'); grid on; +title('Roll Acceleration', 'FontSize', 16); +ylim([-2, 2]); xlim([.3, 1.5]) +h_xlabel = xlabel('Time'); h_ylabel = ylabel('Roll Acceleration [m/s^2]'); +set(h_xlabel, 'FontSize', 14); set(h_ylabel, 'FontSize', 14); +h_legend=legend('roll acc with preview', 'roll acc without preview','Location','SouthWest'); grid on; +set(h_legend,'FontSize',14); + +% Input FL +h = figure(5); +stairs(t_pre, U_wP(1,:),'b'); hold on; +plot([0 kmax_pre], [umax umax]', 'r--'); hold on; +plot([0 kmax_pre], [umin umin]', 'r--'); grid on; +title('Input Front Left Actuator', 'FontSize', 16); +ylim([-.045, .045]); xlim([.3, 1.5]) +h_xlabel = xlabel('Time'); h_ylabel = ylabel('Actuator [m]'); +set(h_xlabel, 'FontSize', 14); set(h_ylabel, 'FontSize', 14); +h_legend=legend('input fl','umax','umin', 'Location','SouthWest'); grid on; +set(h_legend,'FontSize',14); + +% Input FR +h = figure(6); +stairs(t_pre, U_wP(2,:),'b'); hold on; +plot([0 kmax_pre], [umax umax]', 'r--'); hold on; +plot([0 kmax_pre], [umin umin]', 'r--'); grid on; +title('Input Front Right Actuator', 'FontSize', 16); +ylim([-.045, .045]); xlim([.3, 1.5]) +h_xlabel = xlabel('Time'); h_ylabel = ylabel('Actuator [m]'); +set(h_xlabel, 'FontSize', 14); set(h_ylabel, 'FontSize', 14); +h_legend=legend('input fr','umax','umin', 'Location','SouthWest'); grid on; +set(h_legend,'FontSize',14); + +% Input RL +h = figure(7); +stairs(t_pre, U_wP(3,:),'b'); hold on; +plot([0 kmax_pre], [umax umax]', 'r--'); hold on; +plot([0 kmax_pre], [umin umin]', 'r--'); grid on; +title('Input Rear Left Actuator', 'FontSize', 16); +ylim([-.045, .045]); xlim([.3, 1.5]) +h_xlabel = xlabel('Time'); h_ylabel = ylabel('Actuator [m]'); +set(h_xlabel, 'FontSize', 14); set(h_ylabel, 'FontSize', 14); +h_legend=legend('input rl','umax','umin', 'Location','SouthWest'); grid on; +set(h_legend,'FontSize',14); + +% Input RR +h = figure(8); +stairs(t_pre, U_wP(4,:),'b'); hold on; +plot([0 kmax_pre], [umax umax]', 'r--'); hold on; +plot([0 kmax_pre], [umin umin]', 'r--'); grid on; +title('Input Rear Right Actuator', 'FontSize', 16); +ylim([-.045, .045]); xlim([.3, 1.5]) +h_xlabel = xlabel('Time'); h_ylabel = ylabel('Actuator [m]'); +set(h_xlabel, 'FontSize', 14); set(h_ylabel, 'FontSize', 14); +h_legend=legend('input rr','umax','umin', 'Location','SouthWest'); grid on; +set(h_legend,'FontSize',14); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ActiveSuspensionControl/Active_Suspension_Control_Model.mat b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ActiveSuspensionControl/Active_Suspension_Control_Model.mat new file mode 100755 index 0000000..74a8eee Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ActiveSuspensionControl/Active_Suspension_Control_Model.mat differ diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ActiveSuspensionControl/Active_Suspension_Control_NC.slx b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ActiveSuspensionControl/Active_Suspension_Control_NC.slx new file mode 100755 index 0000000..9fe4393 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ActiveSuspensionControl/Active_Suspension_Control_NC.slx differ diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/BasicBinaryExample/BasicBinaryExample.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/BasicBinaryExample/BasicBinaryExample.m new file mode 100755 index 0000000..0a118b7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/BasicBinaryExample/BasicBinaryExample.m @@ -0,0 +1,237 @@ +% Binary Simple MPC - double integrator example with binary inputs for use +% with FORCES Pro. +% +% In this example, we have a system with 2 states (instable double +% integrator) and 2 inputs. Both inputs are discrete and can either be +% umin or umax. +% +% Since FORCES Pro supports only binaries at the moment, we will formulate +% the problem in terms of variables delta, where +% +% delta = 0 <==> u = umin and delta = 1 <==> u = umax +% +% This can be formulated by the equality constraint +% +% u = umin + diag(umax-umin)*delta +% +% To keep the number of variables at a minimum, we will directly insert +% this equation into the dynamics: +% +% x+ = Ax + Bu +% = Ax + B*umin + B*diag(umax-umin)*delta +% = Ax + Btilde*delta + Bconst, +% +% where Btilde = B*diag(umax-umin) and Bconst = B*umin. +% +% Similarly, for the cost function, +% +% u'*R*u = (umin+diag(umax-umin)*delta)'*R*(umin+diag(umax-umin)*delta) +% = delta'*diag(umax-umin)*R*diag(umax-umin)*delta + 2*umin'*diag(umax-umin)*R*delta + const. +% = delta'*Rtilde*delta + ftilde'*delta + const. +% +% where Rtilde = diag(umax-umin)*R*diag(umax-umin) and +% ftilde = 2*R*diag(umax-umin)*umin; +% +% Now we can formulate the finite horizon optimal control problem as follows: +% +% min xN'*P*xN + sum_{i=1}^{N-1} xi'*Q*xi + ui'*R*ui +% xi,ui +% s.t. x1 = x +% x_i+1 = A*xi + Btilde*delta_i + Bconst for i = 1...N-1 +% xmin <= xi <= xmax for i = 1...N +% 0 <= delta_i <= 1 for i = 1...N +% delta \in {0, 1} +% +% and P is solution of Ricatti eqn. from LQR problem +% +% (c) embotech AG, Zurich, Switzerland, 2015. + +clear; close all; clc; + +%% plot settings +doplot.trajectories = true; +doplot.timings = true; +doplot.exitflags = true; + +%% system +A = [1.1 1; + 0 1]; +B = [1 0; + 0.5 -0.5]; +[nx,nu] = size(B); +binaryIndices = [1 2]; % these indices are binary + +%% MPC setup +N = 5; % horizon length +Q = 10*eye(nx); % state cost +R = eye(nu); % input cost +if( exist('dlqr','file') ) + [~,P] = dlqr(A,B,Q,R); % terminal cost +else + P = 5*Q; +end +umin = [-0.5; -0.5]; umax = -umin; % constraints on inputs +xmin = [-5; -5]; xmax = -xmin; % constraints on states + +% precompute matrices for substitution of u = umin + diag(umax-umin)*delta +Btilde = B*diag(umax-umin); +Bconst = B*umin; +Rtilde = diag(umax-umin)*R*diag(umax-umin); +ftilde = 2*R*diag(umax-umin)*umin; + + +%% FORCES multistage form +% assume variable ordering zi = [ui; xi+1] for i=1...N-1 + +stages = MultistageProblem(N); +for i = 1:N + + % dimension + stages(i).dims.n = nx+nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nx; % number of lower bounds + stages(i).dims.u = nx; % number of upper bounds + stages(i).bidx = binaryIndices; % index of binary variable + + % cost + if( i == N ) + stages(i).cost.H = blkdiag(Rtilde,P); + else + stages(i).cost.H = blkdiag(Rtilde,Q); + end + stages(i).cost.f = [ftilde; zeros(nx,1)]; + + % lower bounds + stages(i).ineq.b.lbidx = (nu+1):(nu+nx); % lower bound on states + stages(i).ineq.b.lb = xmin; % upper bound values + + % upper bounds + stages(i).ineq.b.ubidx = (nu+1):(nu+nx); % upper bound for this stage variable + stages(i).ineq.b.ub = xmax; % upper bound for this stage variable + + % equality constraints + if( i < N ) + stages(i).eq.C = [zeros(nx,nu), A]; + end + if( i>1 ) + stages(i).eq.c = -Bconst; + end + stages(i).eq.D = [Btilde, -eye(nx)]; + +end +params(1) = newParam('minusA_times_x0',1,'eq.c'); % RHS of first eq. constr. is a parameter: z1=-A*x0 + + +%% define outputs of the solver +outputs(1) = newOutput('delta01', 1, 1:nu); + +%% solver settings +codeoptions = getOptions('binary_simplempc_solver'); +codeoptions.optlevel = 3; +codeoptions.printlevel = 2; + +% miqp code options +codeoptions.mip.branchon = 'mostAmbiguous'; % options: 'mostAmbiguous', 'leastAmbiguous' +codeoptions.mip.stageinorder = 1; % 1: on (earlier stages have precedence in branching) +codeoptions.mip.explore = 'bestFirst'; % options: 'best-first', 'depth-first', 'breadth-first' +codeoptions.mip.inttol = 1e-5; % anything below this threshold is considered to be binary (either 0 or 1) +codeoptions.mip.timeout = 0.05; % timeout in seconds +codeoptions.mip.mipgap = 0.00; % relative suboptimality gap +codeoptions.mip.queuesize = 1000; + +%% generate code +generateCode(stages,params,codeoptions,outputs); + + +%% simulate +x1 = [-5; 3]; % initial state +kmax = 30; % simulation steps +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); + +clcost = 0; +prepadzeros = num2str(ceil(log10(N))); + +% set lower/upper bounds for stages with binary variables +for i = 1:N + problem.(sprintf(['lb%0',prepadzeros,'d'],i)) = [0; 0; xmin]; + problem.(sprintf(['ub%0',prepadzeros,'d'],i)) = [1; 1; xmax]; +end + +for k = 1:kmax + + % set eq.c (initial state) + problem.minusA_times_x0 = -A*X(:,k) - Bconst; + + % solve problem + [optsol,exitflag(k),info] = binary_simplempc_solver(problem); + if( exitflag(k) == -7 ) + error('Some problem in solver'); + end + + D(:,k) = optsol.delta01; + U(:,k) = umin + diag(umax-umin)*D(:,k); + + % dynamics + X(:,k+1) = A*X(:,k) + B*U(:,k); + + % collect statistics + solvetime(k) = info.solvetime; + qpsolves(k) = info.it; + it2opt(k) = info.it2opt; + clcost = clcost + X(:,k+1)'*Q*X(:,k+1) + U(:,k)'*R*U(:,k); + + fprintf('Time step %d completed\n', k); + +end + +fprintf('Closed loop cost: %6.4e\n', clcost); + + +%% plot +if( doplot.trajectories ) + figure(1); clf; + subplot(3,1,1); grid on; title('states'); hold on; + plot([1 kmax], [xmax xmax]', 'r--'); plot([1 kmax], [xmin xmin]', 'r--'); + ylim(1.1*[min(xmin),max(xmax)]); stairs(1:kmax,X(:,1:kmax)'); + + subplot(3,1,2); grid on; title('true inputs u'); hold on; + plot([1 kmax], [umax umax]', 'r--'); plot([1 kmax], [umin umin]', 'r--'); + ylim(1.1*[min(umin),max(umax)]); stairs(1:kmax,U(:,1:kmax)'); + + subplot(3,1,3); grid on; title('binary variables \delta'); hold on; + plot([1 kmax], [1 1]', 'r--'); plot([1 kmax], [0 0]', 'r--'); + ylim([-0.1,1.1]); stairs(1:kmax,D(:,1:kmax)'); + + print('-djpeg', 'binary_simplempc_traj.jpg'); +end + +%% plot timings +if( doplot.timings ) + figure(2); clf; + subplot(2,1,1); bar([qpsolves; it2opt]'); grid on; ylim([0 1.5*max(qpsolves)]); + title('number of QPs solved'); xlabel('time step'); + legend('# of QPs for optimality certificate', '# of QPs until finding opt. solution','Orientation','Horizontal','Location','Best'); + subplot(2,1,2); bar(solvetime.*1000); ylabel('milliseconds'); grid on; title('solve time'); xlabel('time step'); +% mytitle = codeoptions.mip.branchon; +% if( codeoptions.mip.stageinorder ) +% mytitle = [mytitle, ' / ', 'SIO']; +% end +% mytitle = [mytitle, ' / ', codeoptions.mip.explore]; +% suptitle(mytitle) + + print('-djpeg', 'binary_simplempc_timings.jpg'); +end + +%% plot exitflags +if( doplot.exitflags ) + figure(3); clf; + histogram = hist(exitflag,[-2,-1,0,1,2]-0.5); + h=bar([-2,-1,0,1,2],histogram/length(exitflag)*100); + xlim([-2.5,2.5]); ylim([0 100]); grid on; + set(gca,'Xtick',[-2,-1,0,1,2]); + set(gca,'XTickLabel',{'no_mem', 'infeasible', 'timeout', 'optimal', 'suboptimal'}); + ylabel('% of problems'); + title('Solve status returned by FORCES Pro'); + print('-djpeg', 'binary_simplempc_exitflags.jpg'); +end \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/BasicExample/BasicExample.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/BasicExample/BasicExample.m new file mode 100755 index 0000000..59f6540 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/BasicExample/BasicExample.m @@ -0,0 +1,109 @@ +% Simple MPC - double integrator example for use with FORCES Pro +% +% min xN'*P*xN + sum_{i=1}^{N-1} xi'*Q*xi + ui'*R*ui +% xi,ui +% s.t. x1 = x +% x_i+1 = A*xi + B*ui for i = 1...N-1 +% xmin <= xi <= xmax for i = 1...N +% umin <= ui <= umax for i = 1...N +% +% and P is solution of Ricatti eqn. from LQR problem +% +% (c) embotech AG, Zurich, Switzerland, 2014. + +%% system +A = [1.1 1; 0 1]; +B = [1; 0.5]; +[nx,nu] = size(B); + +%% MPC setup +N = 10; +Q = eye(nx); +R = eye(nu); +if( exist('dlqr','file') ) + [~,P] = dlqr(A,B,Q,R); +else + P = 10*Q; +end +umin = -0.5; umax = 0.5; +xmin = [-5; -5]; xmax = [5; 5]; + + +%% FORCES multistage form +% assume variable ordering zi = [ui; xi+1] for i=1...N-1 + +stages = MultistageProblem(N); +for i = 1:N + + % dimension + stages(i).dims.n = nx+nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nx+nu; % number of lower bounds + stages(i).dims.u = nx+nu; % number of upper bounds + + % cost + if( i == N ) + stages(i).cost.H = blkdiag(R,P); + else + stages(i).cost.H = blkdiag(R,Q); + end + stages(i).cost.f = zeros(nx+nu,1); + + % lower bounds + stages(i).ineq.b.lbidx = 1:(nu+nx); % lower bound acts on these indices + stages(i).ineq.b.lb = [umin; xmin]; % lower bound for this stage variable + + % upper bounds + stages(i).ineq.b.ubidx = 1:(nu+nx); % upper bound acts on these indices + stages(i).ineq.b.ub = [umax; xmax]; % upper bound for this stage variable + + % equality constraints + if( i < N ) + stages(i).eq.C = [zeros(nx,nu), A]; + end + if( i>1 ) + stages(i).eq.c = zeros(nx,1); + end + stages(i).eq.D = [B, -eye(nx)]; + +end +params(1) = newParam('minusA_times_x0',1,'eq.c'); % RHS of first eq. constr. is a parameter: z1=-A*x0 + + + +%% define outputs of the solver +outputs(1) = newOutput('u0',1,1:nu); + +%% solver settings +codeoptions = getOptions('myMPC_FORCESPro'); + +%% generate code +generateCode(stages,params,codeoptions,outputs); + + +%% simulate +x1 = [-4; 2]; +kmax = 30; +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); +problem.z1 = zeros(2*nx,1); +for k = 1:kmax + problem.minusA_times_x0 = -A*X(:,k); + [solverout,exitflag,info] = myMPC_FORCESPro(problem); + if( exitflag == 1 ) + U(:,k) = solverout.u0; + else + info + error('Some problem in solver'); + end + X(:,k+1) = A*X(:,k) + B*U(:,k); +end + +%% plot +figure(1); clf; +subplot(2,1,1); grid on; title('states'); hold on; +plot([1 kmax], [xmax xmax]', 'r--'); plot([1 kmax], [xmin xmin]', 'r--'); +ylim(1.1*[min(xmin),max(xmax)]); stairs(1:kmax,X(:,1:kmax)'); +subplot(2,1,2); grid on; title('input'); hold on; +plot([1 kmax], [umax umax]', 'r--'); plot([1 kmax], [umin umin]', 'r--'); +ylim(1.1*[min(umin),max(umax)]); stairs(1:kmax,U(:,1:kmax)'); \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/InputRateConstraints/InputRateConstraints.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/InputRateConstraints/InputRateConstraints.m new file mode 100755 index 0000000..78712b2 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/InputRateConstraints/InputRateConstraints.m @@ -0,0 +1,145 @@ +% Input-rate constraints example +% +% min xN'*P*xN + sum_{i=1}^{N-1} xi'*Q*xi + ui'*R*ui + di'*S*di +% xi,ui +% s.t. x1 = x +% x_i+1 = A*xi + B*ui for i = 1...N-1 +% umin <= ui <= umax for i = 1...N +% dumin <= ui-ui-1 <= dumax for i = 1...N +% +% and P is solution of Ricatti eqn. from LQR problem +% +% (c) embotech AG, Zurich, Switzerland, 2016. + +clear all; clc; clf; close all; + +%% System Model +A = [ 0.7115 -0.4345; ... + 0.4345 0.8853 ]; +B = [ 0.2173; ... + 0.0573 ]; + +%% MPC Setup + +[nx,nu] = size(B); + +N = 15; +Q = [10,0;0,15]; +R = eye(nu); +R_sr = 5*eye(nu); +if( exist('dlqr','file') ) + [~,P] = dlqr(A,B,Q,R); +else + P = 15*Q; +end + +umin = -.5; +umax = 2; + +dumin = -1; +dumax = .5; + +%% FORCES multistage form +% Optimization variable: zi = [dui; xi+1; ui] + +stages = MultistageProblem(N); % get stages struct of length N + +for i = 1:N + + % dimension + stages(i).dims.n = nu+nx+nu; % number of stage variables + stages(i).dims.r = nx+nu; % number of equality constraints + stages(i).dims.l = 2; % number of lower bounds + stages(i).dims.u = 2; % number of upper bounds + + % lower + stages(i).ineq.b.lbidx = [1,4]; + stages(i).ineq.b.lb = [dumin;umin]; + + % upper + stages(i).ineq.b.ubidx = [1,4]; + stages(i).ineq.b.ub = [dumax;umax]; + + % cost + if( i == N ) + stages(i).cost.H = blkdiag(R_sr,[P, zeros(2,1); zeros(1,2), 0]); + else + stages(i).cost.H = blkdiag(R_sr,[Q, zeros(2,1); zeros(1,2), R]); + end + stages(i).cost.f = zeros(nx+2*nu,1); % linear cost terms + + % equality constraints + if( i < N ) + stages(i).eq.C = [zeros(nx+nu,nu), [A, B; zeros(1,2), 1]]; + end + if( i>1 ) + stages(i).eq.c = zeros(nx+nu,1); + end + stages(i).eq.D = [[B; 1], -eye(nx+nu)]; +end + +% RHS of first equality constraint is a parameter +parameter(1) = newParam('minusAhat_times_xhat0',1,'eq.c'); + +%% define outputs of the solver +output(1) = newOutput('uhat',1,1); + +%% solver settings +codeoptions = getOptions('RateConstraints_Controller'); + +%% generate code +generateCode(stages,parameter,codeoptions,output); + +%% Simulation +x0 = [-2; 6]; +kmax = 30; +Xhat = zeros(nx+nu,kmax+1); Xhat(:,1) = [x0; 0]; +Uhat = zeros(nu,kmax); +for k = 1:kmax + problem.minusAhat_times_xhat0 = -[A, B; zeros(1,2), 1]*Xhat(:,k); + [solverout,exitflag,info] = RateConstraints_Controller(problem); + if( exitflag == 1 ) + Uhat(:,k) = solverout.uhat; + else + info; + error('Some problem in solver'); + end + Xhat(:,k+1) = [A, B; zeros(1,2), 1]*Xhat(:,k) + [B; 1]*Uhat(:,k); +end + +%% Figures +h = figure(1); clf; +grid on; title('states','FontSize', 16); hold on; +stairs(0:kmax,Xhat(1:2,1:end)'); h_legend = legend('x1','x2'); +set(h_legend,'FontSize',14); ylim([-6 7]); +h_ylabel = ylabel('Magnitude [-]'); set(h_ylabel, 'FontSize', 14); +h_xlabel = xlabel('Simulation Step [-]'); set(h_xlabel, 'FontSize', 14); +hline = findobj(gcf, 'type', 'line'); +set(hline,'LineWidth',1.15); +set(gcf,'PaperUnits','inches','PaperPosition',[0 0 5 4]) +print(h,'-depsc','RateConstraint1'); +h = figure(2); clf; +grid on; title('input','FontSize', 16); hold on; +stairs(0:kmax,Xhat(3,1:end),'k'); hold on; +plot([0 kmax], [umin umin],'r--'); hold on; +plot([0 kmax], [umax umax],'r--'); h_legend = legend('u','umin','umax'); +set(h_legend,'FontSize',14); ylim([umin-.2 umax+.2]); +h_xlabel = xlabel('Simulation Step [-]'); set(h_xlabel, 'FontSize', 14); +h_ylabel = ylabel('Magnitude [-]'); set(h_ylabel, 'FontSize', 14); +hline = findobj(gcf, 'type', 'line'); +set(hline,'LineWidth',1.15); +set(gcf,'PaperUnits','inches','PaperPosition',[0 0 5 4]) +print(h,'-depsc','RateConstraint2'); +h = figure(3); clf; +grid on; title('slew rate','FontSize',16); hold on; +stairs(1:kmax, Uhat(:,1:kmax)); hold on; +plot([0 kmax], [dumin dumin],'r--'); hold on; +plot([0 kmax], [dumax dumax],'r--'); hold on; +h_legend = legend('du','dumin','dumax'); +set(h_legend,'FontSize',14); ylim([dumin-.2 dumax+.2]); +h_xlabel = xlabel('Simulation Step [-]'); set(h_xlabel, 'FontSize', 14); +h_ylabel = ylabel('Magnitude [-]'); set(h_ylabel, 'FontSize', 14); +hline = findobj(gcf, 'type', 'line'); +set(hline,'LineWidth',1.15); +set(gcf,'PaperUnits','inches','PaperPosition',[0 0 5 4]) +print(h,'-depsc','RateConstraint3'); \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/NonQuadraticPenalties/NonQuadraticPenalties.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/NonQuadraticPenalties/NonQuadraticPenalties.m new file mode 100755 index 0000000..e54ab47 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/NonQuadraticPenalties/NonQuadraticPenalties.m @@ -0,0 +1,115 @@ +% Simple MPC - double integrator example for use with FORCES Pro +% +% min xN'*P*xN + sum_{i=1}^{N-1} xi'*Q*xi + ||R*ui||_1 +% xi,ui +% s.t. x1 = x +% x_i+1 = A*xi + B*ui for i = 1...N-1 +% xmin <= xi <= xmax for i = 1...N +% umin <= ui <= umax for i = 1...N +% +% and P is solution of Ricatti eqn. from LQR problem +% +% (c) embotech AG, Zurich, Switzerland, 2014. + +%% system +A = [1.1 1; 0 1]; +B = [1; 0.5]; +[nx,nu] = size(B); + +%% MPC setup +N = 10; +Q = eye(nx); +R = eye(nu); +if( exist('dlqr','file') ) + [~,P] = dlqr(A,B,Q,R); +else + P = 10*Q; +end +umin = -0.5; umax = 0.5; +xmin = [-5; -5]; xmax = [5; 5]; + + +%% FORCES multistage form - 1-norm on inputs +% assume variable ordering zi = [ui, xi+1, ei] for i=1...N-1 + +stages = MultistageProblem(N); +for i = 1:N + + % dimension + stages(i).dims.n = nx+2*nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nx+nu; % number of lower bounds + stages(i).dims.u = nx+nu; % number of upper bounds + stages(i).dims.p = 2*nu; % number of polytopic constraints + + % cost + if( i == N ) + stages(i).cost.H = blkdiag(zeros(nu),P,zeros(nu)); + else + stages(i).cost.H = blkdiag(zeros(nu),Q,zeros(nu)); + end + stages(i).cost.f = [zeros(nx+nu,1); ones(nu,1)]; + + % lower bounds + stages(i).ineq.b.lbidx = 1:(nu+nx); % lower bound acts on these indices + stages(i).ineq.b.lb = [umin; xmin]; % lower bound for this stage variable + + % upper bounds + stages(i).ineq.b.ubidx = 1:(nu+nx); % upper bound acts on these indices + stages(i).ineq.b.ub = [umax; xmax]; % upper bound for this stage variable + + % polytopic bounds + stages(i).ineq.p.A = [ R, zeros(nu,nx), -eye(nu); ... + -R, zeros(nu,nx), -eye(nu)]; + stages(i).ineq.p.b = zeros(2*nu,1); + + % equality constraints + if( i < N ) + stages(i).eq.C = [zeros(nx,nu), A, zeros(nx,nu)]; + end + if( i>1 ) + stages(i).eq.c = zeros(nx,1); + end + stages(i).eq.D = [B, -eye(nx), zeros(nx,nu)]; + +end +params(1) = newParam('minusA_times_x0',1,'eq.c'); % RHS of first eq. constr. is a parameter: z1=-A*x0 + + + +%% define outputs of the solver +outputs(1) = newOutput('u0',1,1:nu); + +%% solver settings +codeoptions = getOptions('myMPC_FORCESPro'); + +%% generate code +generateCode(stages,params,codeoptions,outputs); + + +%% simulate +x1 = [-4; 2]; +kmax = 30; +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); +problem.z1 = zeros(2*nx,1); +for k = 1:kmax + problem.minusA_times_x0 = -A*X(:,k); + [solverout,exitflag,info] = myMPC_FORCESPro(problem); + if( exitflag == 1 ) + U(:,k) = solverout.u0; + else + info + error('Some problem in solver'); + end + X(:,k+1) = A*X(:,k) + B*U(:,k); +end + +%% plot +figure(1); clf; +subplot(2,1,1); grid on; title('states'); hold on; +plot([1 kmax], [xmax xmax]', 'r--'); plot([1 kmax], [xmin xmin]', 'r--'); +ylim(1.1*[min(xmin),max(xmax)]); stairs(1:kmax,X(:,1:kmax)'); +subplot(2,1,2); grid on; title('input'); hold on; +plot([1 kmax], [umax umax]', 'r--'); plot([1 kmax], [umin umin]', 'r--'); +ylim(1.1*[min(umin),max(umax)]); stairs(1:kmax,U(:,1:kmax)'); \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/PortfolioRebalancing/PortfolioRebalancing.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/PortfolioRebalancing/PortfolioRebalancing.m new file mode 100755 index 0000000..c9148a0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/PortfolioRebalancing/PortfolioRebalancing.m @@ -0,0 +1,227 @@ +% FORCES Portfolio rebalancing optimization example. +% +% This examples solves the single period portfolio rebalancing problem +% +% maximize mu'*x - sum_{i=1}^n c(i)*|x(i)-x0(i)| +% subject to xmin <= x <= xmax +% x'*Sigma*x <= r +% +% where x is a vector of n assets to be traded, x0 is the current position, +% mu is a vector of expected return, c is a vector of transaction costs, +% i.e. for moving asset i from x0(i) to x(i) one is to pay amount c(i) times +% the absolute value of the difference. The vectors xmin and xmax are lower +% and upper bounds on the positions, the positive definite matrix Sigma is +% the risk covariance matrix, and r represents an upper bound on the +% variance of the portfolio. +% +% To solve this problem with FORCES, we reformulate it as +% +% minimize -mu'*x + c'*t +% subject to xmin <= x <= xmax +% x'*Sigma*x <= r +% -t <= x-x0 <= t +% t >= 0 +% +% which requires the introduction of n new variables t. So the total number +% of variables is 2*n, sorted as z = [x; t]. The inequality constraints +% +% -t <= x-x0 <= t with t >= 0 +% +% are used to express the absolute value on x-x0, which will be equal to t +% due to the minimization in case c is non-zero. Therefore the transaction +% costs in the objective value can be expressed as c'*t. +% +% IMPLEMENTATION: +% +% 1) We implement the affine inequalities -t <= x-x0 <= t as follows: +% +% -t-x <= -x0 and x-t <= x0 +% +% With the variable ordering z = [x; t] we get therefore the inequality +% +% [-I -I; I -I]*[x; t] <= [-x0; x0] +% +% which we write as A*z <= b, with b being a parameter to the problem. +% +% 2) Cost function: FORCES supports the quadratic cost 0.5*z'*H*z + f'z, so +% in this example H=0 and f = [-mu; c], with f being a parameter to the +% problem. +% +% 3) Lower/upper bounds: we have [xmin; 0] <= [x; t] and x <= xmax. +% Lower/upper bounds are parameters to the problem. +% +% (c) embotech AG, Zurich, Switzerland, 2013-2016. All rights reserved. + +clear all; clc; close all; + +%% dimensions +n = 15; % number of assets + +%% set up FORCES formulation +stages = MultistageProblem(1); % single-period portfolio, indicated by 1 + +% dimensions +stages(1).dims.n = 2*n; % number of variables +stages(1).dims.r = 0; % number of equality constraints +stages(1).dims.l = 2*n; % number of lower bounds +stages(1).dims.u = n; % number of upper bounds +stages(1).dims.p = 2*n; % number of affine inequalities +stages(1).dims.q = 1; % number of quadratic constraints + +% cost: 0.5*z'*H*z + f'*z +stages(1).cost.H = zeros(stages(1).dims.n); +params(1) = newParam('minusMu_c', 1 , 'cost.f'); + +% inequalities - lower bounds lb <= z(lbidx) +stages(1).ineq.b.lbidx = 1:2*n; +params(end+1) = newParam('xmin_zeros', 1, 'ineq.b.lb'); + +% inequalities - upper bounds z(ubidx) <= ub +stages(1).ineq.b.ubidx = 1:n; +params(end+1) = newParam('xmax', 1, 'ineq.b.ub'); + +% inequalities - polytopic constraints A*z <= b +I = eye(n); +stages(1).ineq.p.A = [-I, -I; I -I]; +params(end+1) = newParam('minusX0_X0', 1, 'ineq.p.b'); + +% inequalities - quadratic constraints z(qidx)'*Q*z(qidx) + l'*z(qidx) <= r +stages(1).ineq.q.idx = { 1:n }; +stages(1).ineq.q.Q = {}; +stages(1).ineq.q.l = { zeros(n,1) }; +params(end+1) = newParam('Sigma', 1, 'ineq.q.Q', 1); +params(end+1) = newParam('r', 1, 'ineq.q.r'); + +%% generate solver +codeoptions = getOptions('rebalancer'); % this is the function name that will be generated + +codeoptions.accuracy.ineq = 1e-7; % infinity norm of residual for inequalities +codeoptions.accuracy.eq = 1e-7; % infinity norm of residual for equalities +codeoptions.accuracy.mu = 1e-7; % absolute duality gap +codeoptions.accuracy.rdgap = 1e-7; % relative duality gap := (pobj-dobj)/pobj +codeoptions.printlevel = 0; + +% define which outputs you want - we get here both x and t +output(1) = newOutput('x', 1, 1:n); +output(2) = newOutput('t', 1, n+(1:n)); + +% call server to generate code +generateCode(stages, params, codeoptions, output); + + +%% Test portfolio optimizer +number_of_problems = 10; % number of random instances of the problem + +% see whether there are other solvers on the system we can run against +solvewith.cvx_sedumi = exist('cvx_begin','file') && exist('cvx_end','file') && exist('sedumi','file'); +solvewith.cvx_ecos = solvewith.cvx_sedumi && exist('ecos','file'); +solvewith.yalmip_sedumi = exist('sdpvar','file') && exist('solvesdp','file'); +solvewith.yalmip_cplex = solvewith.yalmip_sedumi && exist('cplexqcp','file'); + +for i = 1:number_of_problems + + %% generate random instance of problem + mu = rand(n,1); % expected return + c = rand(n,1); % transaction costs + xmin = -ones(n,1); % minimum positions + xmax = ones(n,1); % maximum positions + x0 = rand(n,1); % current portfolio + Sigma = rand(n); + Sigma = Sigma'*Sigma; + Sigma = Sigma./norm(Sigma); % risk covariance matrix + r = rand(1); % tolerated risk variance + + %% run FORCES generated solver! + % set up FORCES problem - fill in parameters + problem.minusMu_c = [-mu; c]; + problem.Sigma = Sigma; + problem.r = r; + problem.xmin_zeros = [xmin; zeros(n,1)]; + problem.xmax = xmax; + problem.minusX0_X0 = [-x0; x0]; + + % type "help portfolioRebalancer" to get more info on how to use it + [output, exitflag, info] = rebalancer(problem); + + % always check exitflag + if( exitflag ~= 1) + warning('Problem in solver, exiting'); + break; + end + + % record solve time in seconds + solvetime_FORCES(i) = info.solvetime; + + + %% Solve with CVX, using Sedumi as a solver + if( solvewith.cvx_sedumi ) + cvx_solver sedumi + cvx_tic + cvx_begin quiet + variable x(n,1) + maximize (mu'*x - c'*abs(x-x0)) + subject to + xmin <= x <= xmax; + quad_form(x, Sigma) <= r; + cvx_end + cvx_time_sedumi = cvx_toc; + assert(~isempty(findstr(cvx_status,'Solved')),'Problem in CVX/SEDUMI'); + solvetime_cvx_sedumi(i) = cvx_time_sedumi(end); + end + + + %% Solve with CVX, using ECOS as solver + if( solvewith.cvx_ecos ) + cvx_solver ecos + cvx_tic + cvx_begin quiet + variable x(n,1) + maximize (mu'*x - c'*abs(x-x0)) + subject to + xmin <= x <= xmax; + quad_form(x, Sigma) <= r; + cvx_end + cvx_time_ecos = cvx_toc; + assert(~isempty(findstr(cvx_status,'Solved')),'Problem in CVX/ECOS'); + solvetime_cvx_ecos(i) = cvx_time_ecos(end); + end + + + %% run against cplex using YALMIP, with Sedumi as solver + if( solvewith.yalmip_sedumi ) + x = sdpvar(n,1); + obj = (-mu'*x + c'*abs(x-x0)); + con = [xmin <= x, x <= xmax, x'*Sigma*x <= r]; + opts = sdpsettings('solver','sedumi', 'verbose', 0); + yalmipinfo=solvesdp(con,obj,opts); + assert(yalmipinfo.problem == 0,'Problem in YALMIP solve'); + solvetime_yalmip_sedumi(i) = yalmipinfo.solvertime; + assert(norm(double(obj)-info.pobj)<=1E-6,'Portfolio allocation error in objective too large w.r.t. YALMIP/SEDUMI: %6.4e\n', norm(double(obj)-info.pobj)); + end + + %% run against cplex using YALMIP, with CPLEX as solver + if( solvewith.yalmip_cplex ) + x = sdpvar(n,1); + obj = (-mu'*x + c'*abs(x-x0)); + con = [xmin <= x, x <= xmax, x'*Sigma*x <= r]; + opts = sdpsettings('solver','cplex', 'verbose', 0); + opts.cplex.threads = 1; + yalmipinfo=solvesdp(con,obj,opts); + assert(yalmipinfo.problem == 0,'Problem in YALMIP solve'); + solvetime_yalmip_cplex(i) = yalmipinfo.solvertime; + assert(norm(double(obj)-info.pobj)<=1E-6,'Portfolio allocation error in objective too large w.r.t. YALMIP/CPLEX: %6.4e\n', norm(double(obj)-info.pobj)); + end + +end + + +%% Report timings +data = solvetime_FORCES; lgd = {'FORCES'}; +if( solvewith.yalmip_cplex ), data = [data; solvetime_yalmip_cplex]; lgd = [lgd, {'YALMIP/CPLEX'}]; end +if( solvewith.yalmip_sedumi ), data = [data; solvetime_yalmip_sedumi]; lgd = [lgd, {'YALMIP/SEDUMI'}]; end +if( solvewith.cvx_sedumi ), data = [data; solvetime_cvx_sedumi]; lgd = [lgd, {'CVX/SEDUMI'}]; end +if( solvewith.cvx_ecos ), data = [data; solvetime_cvx_ecos]; lgd = [lgd, {'CVX/ECOS'}]; end + +figure(1); clf; bar(data'*1000); legend(lgd); +xlabel('problem instance'); ylabel('solve time [milliseconds]'); +title('Solve times for portfolio rebalancing'); \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/Preview/Preview.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/Preview/Preview.m new file mode 100755 index 0000000..232d630 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/Preview/Preview.m @@ -0,0 +1,170 @@ +%% HOW TO: Preview Information in MPC Problem using FORCES Pro +% +% (c) Gian Koenig, embotech AG, Zurich, Switzerland, 2014. + +clear all; clc; close all; + +%% System Model +A = [ 0.7115 -0.4345; ... + 0.4345 0.8853 ]; +B = [ 1; ... + 1 ]; +Bw = [ 1; ... + 1 ]; + +%% Generate Disturbance +n = 200; +time = [0:1:(n-1)]'; + +Road = zeros(n,1); +for i=1:10 + k = i+15; + Road(k,1) = i*.2; +end +for i=1:10 + k = i+25; + Road(k,1) = 2 - i*.2; +end + +%% Generate Solver: With Preview +% MPC setup +[nx, nu] = size(B); +N = 10; +Q = 10*eye(nx); +R = eye(nu); +if( exist('dlqr','file') ) + [~,P] = dlqr(A,B,Q,R); +else + P = 10*Q; +end +umin = -1.8; umax = 1.8; + +% FORCES multistage form +% assume variable ordering zi = [ui; xi+1] for i=1...N-1 + +stages = MultistageProblem(N); + +% RHS of first eq. constr. is a parameter: z1=-A*x0 -Bw*Road +parameter(1) = newParam('minusA_times_x0_BwPreview',1,'eq.c'); +% Parameter of Preview +parameter(2) = newParam('dist2',2,'eq.c'); +parameter(3) = newParam('dist3',3,'eq.c'); +parameter(4) = newParam('dist4',4,'eq.c'); +parameter(5) = newParam('dist5',5,'eq.c'); +parameter(6) = newParam('dist6',6,'eq.c'); +parameter(7) = newParam('dist7',7,'eq.c'); +parameter(8) = newParam('dist8',8,'eq.c'); +parameter(9) = newParam('dist9',9,'eq.c'); +parameter(10) = newParam('dist10',10,'eq.c'); + +for i = 1:N + + % dimension + stages(i).dims.n = nx+nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nu; % number of lower bounds + stages(i).dims.u = nu; % number of upper bounds + + % cost + if( i == N ) + stages(i).cost.H = blkdiag(R,P); + else + stages(i).cost.H = blkdiag(R,Q); + end + stages(i).cost.f = zeros(nx+nu,1); + + % lower bounds + stages(i).ineq.b.lbidx = 1; % lower bound acts on these indices + stages(i).ineq.b.lb = umin; % lower bound for this stage variable + + % upper bounds + stages(i).ineq.b.ubidx = 1; % upper bound acts on these indices + stages(i).ineq.b.ub = umax; % upper bound for this stage variable + + % equality constraints + if( i < N ) + stages(i).eq.C = [zeros(nx,nu), A]; + end + stages(i).eq.D = [B, -eye(nx)]; + +end + +% define outputs of the solver +outputs(1) = newOutput('u0',1,1); + +% solver settings +codeoptions = getOptions('Preview_Controller'); + +% generate code with preview +generateCode(stages,parameter,codeoptions,outputs); + +% generate code without preview +codeoptions = getOptions('NoPreview_Controller'); +for i = 2:N, stages(i).eq.c = zeros(nx,1); end +generateCode(stages,parameter(1),codeoptions,outputs); + +%% Simulate System with Preview Controller +x0 = [0; 0]; +kmax = 60; +X = zeros(nx,kmax+1); X(:,1) = x0; +U = zeros(nu,kmax); +problem.z1 = zeros(2*nx,1); +for k = 1:kmax + problem.minusA_times_x0_BwPreview = -A*X(:,k) - Bw*Road(k); + problem.dist2 = -Bw*Road(k+1); problem.dist3 = -Bw*Road(k+2); + problem.dist4 = -Bw*Road(k+3); problem.dist5 = -Bw*Road(k+4); + problem.dist6 = -Bw*Road(k+5); problem.dist7 = -Bw*Road(k+6); + problem.dist8 = -Bw*Road(k+7); problem.dist9 = -Bw*Road(k+8); + problem.dist10 = -Bw*Road(k+9); + [solverout,exitflag,info] = Preview_Controller(problem); + if( exitflag == 1 ) + U(:,k) = solverout.u0; + else + info + error('Some problem in solver'); + end + X(:,k+1) = A*X(:,k) + [B, Bw]*[U(:,k); Road(k)]; +end + +x_preview = X; +u_preview = U; + +%% Simulate System without Preview Controller +x0 = [0; 0]; +kmax = 60; +X = zeros(nx,kmax+1); X(:,1) = x0; +U = zeros(nu,kmax); +problem.z1 = zeros(2*nx,1); +for k = 1:kmax + problem.minusA_times_x0_BwPreview = -A*X(:,k); + [solverout,exitflag,info] = NoPreview_Controller(problem); + if( exitflag == 1 ) + U(:,k) = solverout.u0; + else + info + error('Some problem in solver'); + end + X(:,k+1) = A*X(:,k) + [B, Bw]*[U(:,k); Road(k)]; +end + +x_nopreview = X; +u_nopreview = U; + +%% 6. Plot +kmax = 60; umin = -1.8; umax = 1.8; +% INPUT PREVIEW MPC SIMULINK INTERFACE +figure(1); +subplot(2,1,1); +grid on; title('MPC with Preview vs No Preview (input)'); hold on; +plot([1 kmax], [umax umax]', 'k--'); plot([1 kmax], [umin umin]', 'k--'); hold on; +stairs(1:kmax, u_preview(:,1:kmax),'g'); hold on; +stairs(1:kmax, u_nopreview(:,1:kmax),'g:') +legend('umin','umax','u Preview','u no Preview'); +% STATES PREVIEW MPC SIMULINK INTERFACE +subplot(2,1,2); +grid on; title('MPC with Preview vs No Preview (states)'); hold on; +stairs(1:kmax,x_preview(1,1:kmax)','r'); hold on; +stairs(1:kmax,x_preview(2,1:kmax)','b'); hold on; +stairs(1:kmax,x_nopreview(1,1:kmax)','r:'); hold on; +stairs(1:kmax,x_nopreview(2,1:kmax)','b:'); hold on; +legend('x1 Preview', 'x2 Preview','x1 no Preview','x2 no Preview') diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ReferenceTracking/ReferenceTracking.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ReferenceTracking/ReferenceTracking.m new file mode 100755 index 0000000..a8463be --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/ReferenceTracking/ReferenceTracking.m @@ -0,0 +1,122 @@ +% HOW TO: Reference Tracking with FORCES Pro +% +% (c) embotech AG, Zurich, Switzerland, 2013 - 2014. Email: info@embotech.com + +clear all; clc; close all; + +%% System +A = [1.1 1; 0 1]; +B = [.8, 0.1;0.3,.8]; +[nx,nu] = size(B); + +%% MPC setup +N = 10; +Q = eye(nx); +R = eye(nu); +if( exist('dlqr','file') ) + [~,P] = dlqr(A,B,Q,R); +else + P = 10*Q; +end +umin = [-.8;-.8]; umax = [1.3;1.3]; +xmin = [-5; -5]; xmax = [5; 5]; + +%% FORCES multistage form +% assume variable ordering zi = [ui; xi+1] for i=1...N-1 + +stages = MultistageProblem(N); +for i = 1:N + + % dimension + stages(i).dims.n = nx+nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nx+nu; % number of lower bounds + stages(i).dims.u = nx+nu; % number of upper bounds + + % cost + stages(i).cost.H = blkdiag(R,Q); + + % lower bounds + stages(i).ineq.b.lbidx = 1:(nu+nx); % lower bound acts on these indices + stages(i).ineq.b.lb = [umin; xmin]; % lower bound for this stage variable + + % upper bounds + stages(i).ineq.b.ubidx = 1:(nu+nx); % upper bound acts on these indices + stages(i).ineq.b.ub = [umax; xmax]; % upper bound for this stage variable + + % equality constraints + if( i < N ) + stages(i).eq.C = [zeros(nx,nu), A]; + end + if( i>1 ) + stages(i).eq.c = zeros(nx,1); + end + stages(i).eq.D = [B, -eye(nx)]; + +end +params(1) = newParam('Reference_Value',1:N,'cost.f'); % Reference Value on the states and inputs +params(2) = newParam('minusA_times_x0',1,'eq.c'); % RHS of first eq. constr. is a parameter + + +%% Define outputs of the solver +outputs(1) = newOutput('u0',1,1:nu); + +%% Solver settings +codeoptions = getOptions('FORCESPro_Reference_Tracking'); + +%% Generate code +generateCode(stages,params,codeoptions,outputs); + +%% Simulate +x1 = [-5; 4]; +kmax = 35; +X = zeros(nx,kmax+1); X(:,1) = x1; +X_ref = zeros(nx,kmax+1); X_ref(1,14:end) = 2; X_ref(2,22:end) = -1; +U = zeros(nu,kmax); +U_ref = zeros(nu,kmax); +for k = 1:kmax + U_ref(:,k) = inv(B)*[eye(nx)-A]*X_ref(:,k); + problem.Reference_Value = [-U_ref(:,k)'*R, -X_ref(:,k)'*Q]'; + problem.minusA_times_x0 = -A*X(:,k); + [solverout,exitflag,info] = FORCESPro_Reference_Tracking(problem); + if( exitflag == 1 ) + U(:,k) = solverout.u0; + else + info + error('Some problem in solver'); + end + X(:,k+1) = A*X(:,k) + B*U(:,k); +end + +%% Plot +h = figure(1); clf; +grid on; h_title = title('States x'); set(h_title,'FontSize',14); hold on; +stairs(1:kmax,X(1,1:kmax)','g'); hold on; +stairs(1:kmax,X(2,1:kmax)','b'); hold on; +stairs(1:kmax,X_ref(1,1:kmax),'k--'); hold on; +stairs(1:kmax,X_ref(2,1:kmax),'k--'); hold on; +plot([1 kmax], [xmax xmax]', 'r--'); hold on; +plot([1 kmax], [xmin xmin]', 'r--'); hold on; +h_xlabel=xlabel('Time step k'); h_ylabel=ylabel('Maginute'); +set(h_xlabel, 'FontSize', 12); set(h_ylabel, 'FontSize', 12); +h_legend = legend('x_1','x_2'); set(h_legend,'FontSize',14); +ylim(1.1*[min(xmin),max(xmax)]); +hline = findobj(gcf, 'type', 'line'); +set(hline,'LineWidth',1.2); +set(gcf,'PaperUnits','inches','PaperPosition',[0 0 7 4]) +print(h,'-depsc','States_Reference_Tracking'); + +h = figure(2); clf; +grid on; h_title = title('Input Signal u'); set(h_title,'FontSize',14); hold on; +stairs(1:kmax,U(1,1:kmax)','g'); hold on; +stairs(1:kmax,U(2,1:kmax)','b'); hold on; +plot([1 kmax], [umax umax]', 'r--'); hold on; +plot([1 kmax], [umin umin]', 'r--'); +h_xlabel=xlabel('Time step k'); h_ylabel=ylabel('Maginute'); +set(h_xlabel, 'FontSize', 12); set(h_ylabel, 'FontSize', 12); +ylim(1.1*[min(umin),max(umax)]); +h_legend = legend('u_1','u_2'); set(h_legend,'FontSize',14); +hline = findobj(gcf, 'type', 'line'); +set(hline,'LineWidth',1.2); +set(gcf,'PaperUnits','inches','PaperPosition',[0 0 7 4]) +print(h,'-depsc','Input_Reference_Tracking'); \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/RobustKalmanFilter/RobustKalmanFilter.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/RobustKalmanFilter/RobustKalmanFilter.m new file mode 100755 index 0000000..79fe7f4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/RobustKalmanFilter/RobustKalmanFilter.m @@ -0,0 +1,252 @@ +clear all; clc; close all; + +% Robust Kalman Filter +% +% Based on lecutre material of the course 'Recursive Estimation' Spring 2014, +% Institute for Dynamic Systems and Control, ETH Zurich and the publication +% 'Real-Time Convex Optimization in Signal Processing' by J. Mattingley and +% S. Boyd, IEEE Signal Processing Magazine, 27(3):50-61, May 2010. +% +% (c) embotech AG, Zurich, Switzerland, 2013 - 2014. Email: info@embotech.com + +% Set generate_code to 0 if no code generate is needed, i.e. a solver has +% already been generated. +generate_code = 1; + +%% Simulation settings: +N = 1000; +lambda = 2; % tuning parameter + +%% Simulate the real system +% Distribution parameters +x0 = 5*ones(3,1); +P0 = eye(3); +Q = diag([1/40, 1/10, 1/5]); +R = 0.5*eye(2); + +% Draw samples of the process noise for all time steps: +v = (randn(N,3)*chol(Q))'; + +% Vector for full state history: +x = zeros(3,N+1); +% Draw random initial condition: +x(:,1) = x0 + chol(P0)*randn(3,1); + +% Control input: +u = zeros(1,N); +u(1,1:500) = 5*ones(1,500); +u(1,501:end) = 2*ones(1,500); + +% State dynamics +alpha1 = 0.1; +alpha2 = 0.5; +alpha3 = 0.2; + +B = [0.5;0.5;0]; + +A = [1-alpha1, 0, 0; 0, 1-alpha2, 0; alpha1, alpha2, 1-alpha3]; +Ak = repmat(A, [1 1 N]); + +% Measurements: +% Vector for full measurement history: +z = zeros(2,N+1); + +% H matrix: +H = [1 0 0; 0 0 1]; + +% Draw samples of the measurement noise for all time steps: +w = (randn(N+1,2)*chol(R))'; + +% Additional noise term: Simulate sensor failures +numberOfOnes = N/20; +indexes = randperm(N); +y = zeros(N+1,2)'; +for i = 1:numberOfOnes + y(1,indexes(i)) = 25*randn; +end +indexes = randperm(N); +numberOfOnes = N/20; +indexes = randperm(N); +for i = 1:numberOfOnes + y(2,indexes(i)) = 25*randn; +end + +% Compute state and measurement history from Ak, B, u, v, H, w and y: +for k = 2:(N+1) + x(:,k) = Ak(:,:,k-1)*x(:,k-1)+B*u(k-1)+v(:,k-1); + z(:,k) = H*x(:,k)+w(:,k)+y(:,k); % with sensor failures +end + +%% Run the Standard Kalman Filter. + +% Initial mean and variance: +x0_hat = x0; +P0_hat = P0; + +% Mean and variance history vectors: +x_hat = zeros(3,N+1); +P_hat = zeros(3,3,N+1); +P_p = zeros(3,3,N+1); + +% Set initial mean and variance. +x_hat(:,1) = x0_hat; +P_hat(:,:,1) = P0_hat; + +% Pre-compute the inverse of R because we need it all the time. +R_inv = inv(R); + +% Execute the Kalman Filter equations for each time step: +for i = 2:(N+1) + x_p = Ak(:,:,i-1)*x_hat(:,i-1)+B*u(i-1); + P_p(:,:,i) = Ak(:,:,i-1)*P_hat(:,:,i-1)*Ak(:,:,i-1)' + Q; + + P_hat(:,:,i) = inv(inv(P_p(:,:,i)) + H'*R_inv*H); + x_hat(:,i) = x_p + P_hat(:,:,i)*H'*R_inv*(z(:,i)-H*x_p); +end + +% RMS Error Magnitude Standard Kalman Filter +RMS_SKF = NaN(N+1,3); +for i = 1:3 + RMS_SKF(:,i) = sqrt((x(i,:)' - x_hat(i,:)').^2/N); +end + +if (generate_code == 1) +%% Create FORCES Pro Solver for Measurement Update Step +% assume variable ordering z = [x,w,y,e] + +% Create Multistage Structure +stages = MultistageProblem(1); + +% dimension +[ny nx] = size(H); +nw = ny; +ne = ny; +stages(1).dims.n = nx+nw+ny+ne; % number of stage variables +stages(1).dims.r = ny; % number of equality constraints +stages(1).dims.p = 2*ne; % number of polytopic constraints + +% polytopic bounds +stages(1).ineq.p.A = [zeros(ny,nx), zeros(ny,nw), lambda*eye(ny), -eye(ne); ... + zeros(ny,nx), zeros(ny,nw), -lambda*eye(ny), -eye(ne)]; +stages(1).ineq.p.b = zeros(2*ne,1); + +% equality constraints +stages(1).eq.D = [H, eye(nw), eye(ny), zeros(ne)]; + +% Parameters +params(1) = newParam('H_i',1,'cost.H'); +params(2) = newParam('f_i',1,'cost.f'); +params(3) = newParam('z_i',1,'eq.c'); + +% Output +outputs(1) = newOutput('x_hat_RKF',1,1:3); + +% Code Generation +codeoptions = getOptions('Robust_KF'); +generateCode(stages,params,codeoptions,outputs); +end + +%% Run the Robust Kalman Filter with FORCES Pro +% We replace the standart measurement update with the solution of a +% minimization problem, that includes an l_1 term to handle the sparse +% noise. + +% Initial mean and variance: +x0_hat = x0; +P0_hat = P0; + +P_p_RKF = zeros(3,3,N+1); + +P_hat_RKF = zeros(3,3,N+1); +P_hat_RKF(:,:,1) = P0_hat; + +% Mean and variance history vectors: +x_hat_RKF = zeros(3,N+1); + +% Set initial mean and variance. +x_hat_RKF(:,1) = x0_hat; + +% Pre-compute the inverse of R because we need it all the time. +R_inv = inv(R); + +% Safe Computation Time +solve_time = NaN(1,N); + +% Execute the Kalman Filter equations for each time step +problem.z1 = zeros(nx+nw+ny+ne,1); +for i = 2:(N+1) + + % Prediction Step + x_p_RKF = Ak(:,:,i-1)*x_hat_RKF(:,i-1)+B*u(i-1); + P_p_RKF(:,:,i) = Ak(:,:,i-1)*P_hat_RKF(:,:,i-1)*Ak(:,:,i-1)' + Q; + + % Measurement Update Step - Optimization Problem + problem.H_i = [2*inv(P_p_RKF(:,:,i)),zeros(nx,nw+ny+ne);... + zeros(ny,nx),2*R_inv,zeros(ny,ny+ne);... + zeros(ny+ne,nx+nw+ny+ne)]; + problem.f_i = [-2*(inv(P_p_RKF(:,:,i))*x_p_RKF);... + zeros(nw,1);... + zeros(ny,1);... + ones(ne,1)]; + problem.z_i = z(:,i); + [solverout,exitflag,info] = Robust_KF(problem); + solve_time(i-1) = info.solvetime; + P_hat_RKF(:,:,i) = P_p_RKF(:,:,i); + x_hat_RKF(:,i) = solverout.x_hat_RKF; + +end + +mst = mean(solve_time); + +% Mean solve time +fprintf('\nThe mean solve time used by the FORCES Pro solve is %d seconds.\n',mst) + +% RMS Error Magnitude Standard Kalman Filter +RMS_RKF = NaN(N+1,3); +for i = 1:3 + RMS_RKF(:,i) = sqrt((x(i,:)' - x_hat_RKF(i,:)').^2/N); +end + +%% Improvement in RMS error in percentage + +for i = 1:3 + imp(i) = 100-100/mean(RMS_SKF(:,i))*mean(RMS_RKF(:,i)); + fprintf('\nRMS error of state %i estimate is reduced by %.2f percent.\n',i,imp(i)) +end + + +%% Plot results +for i = 1:3 + h=figure(i); clf; + p1 = plot(0:N, x(i,:), 'k-', 0:N, x_hat(i,:), 'r',0:N, x_hat_RKF(i,:),'b'); hold on; + p2 = plot(0:N, x_hat_RKF(i,:)'+sqrt(squeeze(P_hat_RKF(i,i,:))), 'g--',... + 0:N, x_hat_RKF(i,:)'-sqrt(squeeze(P_hat_RKF(i,i,:))), 'g--'); + + h_legend = legend('True state', 'Estimated via SKF', 'Estimated via RKF','+/- 1 standard deviation'); + set(h_legend,'FontSize',14); + %hline = findobj(gcf, 'type', 'line'); + set(p1,'LineWidth',1.2); + set(p2,'LineWidth',1.1); + xlim([250 500]); + h_ylabel=ylabel(['Tank ' num2str(i) ' Level, x(',int2str(i),')']); + h_xlabel=xlabel('Time step k'); + set(h_xlabel, 'FontSize', 14); set(h_ylabel, 'FontSize', 14); + set(gcf,'PaperUnits','inches','PaperPosition',[0 0 15 5]) + print(h,'-depsc',['Estimated_Water_Tank_Levels_',int2str(i)]); + + h=figure(i+3); clf; + plot(0:N, RMS_SKF(:,i),'r'); + title(['RMS Error state x(',int2str(i),')'], 'FontSize', 12); + hold on; plot(0:N, RMS_RKF(:,i),'b'); + hline = findobj(gcf, 'type', 'line'); + set(hline,'LineWidth',1.2); + xlim([250 500]); + h_xlabel=xlabel('Time step k'); + h_ylabel=ylabel('RMS Error Maginute'); + set(h_xlabel, 'FontSize', 12); set(h_ylabel, 'FontSize', 12); + h_legend = legend('SKF','RKF'); + set(h_legend,'FontSize',12); + set(gcf,'PaperUnits','inches','PaperPosition',[0 0 3 3]) + print(h,'-depsc',['RMS_Error_Magniuted_Estimates_',int2str(i)]); +end + diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SoftConstraints/SoftConstraints.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SoftConstraints/SoftConstraints.m new file mode 100755 index 0000000..9671dc4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SoftConstraints/SoftConstraints.m @@ -0,0 +1,120 @@ +% Soft constraints example +% +% min xN'*P*xN + sum_{i=1}^{N-1} xi'*Q*xi + ui'*R*ui + di'*S*di +% xi,ui +% s.t. x1 = x +% x_i+1 = A*xi + B*ui for i = 1...N-1 +% xmin - di <= xi(1) <= xmax + di for i = 1...N +% umin <= ui <= umax for i = 1...N +% di >= 0 for i = 1...N +% +% and P is solution of Ricatti eqn. from LQR problem +% +% (c) embotech AG, Zurich, Switzerland, 2015. + +%% system +A = [0.71 -0.43; 0.43 0.88]; +B = [0.2; 0.05]; +[nx,nu] = size(B); + +%% MPC setup +N = 10; +Q = eye(nx); +R = 10*eye(nu); +if( exist('dlqr','file') ) + [~,P] = dlqr(A,B,Q,R); +else + P = 10*Q; +end +S = 10000; +umin = -1.2; umax = 0.5; +xmax = 1.5; xmin = -4; + + +%% FORCES multistage form +% assume variable ordering zi = [ui; xi+1; di+1] for i=1...N-1 + +stages = MultistageProblem(N); +for i = 1:N + + % dimension + stages(i).dims.n = nx+nu+1; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nu; % number of lower bounds + stages(i).dims.u = nu; % number of upper bounds + stages(i).dims.p = 3; % number of polytopic bounds + + % cost + if( i == N ) + stages(i).cost.H = blkdiag(R,P,S); + else + stages(i).cost.H = blkdiag(R,Q,S); + end + stages(i).cost.f = zeros(nx+nu+1,1); + + % lower bounds + stages(i).ineq.b.lbidx = 1:nu; % lower bound acts on these indices + stages(i).ineq.b.lb = umin; % lower bound for this stage variable + + % upper bounds + stages(i).ineq.b.ubidx = 1:nu; % upper bound acts on these indices + stages(i).ineq.b.ub = umax; % upper bound for this stage variable + + % polytopic constraints + stages(i).ineq.p.A = [zeros(1,nu), zeros(1,nx), -1; ... + zeros(1,nu), 1, 0, -1; ... + zeros(1,nu), -1, 0, -1]; + stages(i).ineq.p.b = [0; ... + xmax; ... + -xmin]; + + % equality constraints + if( i < N ) + stages(i).eq.C = [zeros(nx,nu), A, zeros(nx,1)]; + end + if( i>1 ) + stages(i).eq.c = zeros(nx,1); + end + stages(i).eq.D = [B, -eye(nx), zeros(nx,1)]; + +end +params(1) = newParam('minusA_times_x0',1,'eq.c'); % RHS of first eq. constr. is a parameter: z1=-A*x0 + + + +%% define outputs of the solver +outputs(1) = newOutput('u0',1,1:nu); + +%% solver settings +codeoptions = getOptions('myMPC_FORCESPro'); + +%% generate code +generateCode(stages,params,codeoptions,outputs); + + +%% simulate +x1 = [-4; 1]; +kmax = 30; +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); +problem.z1 = zeros(2*nx,1); +for k = 1:kmax + problem.minusA_times_x0 = -A*X(:,k); + [solverout,exitflag,info] = myMPC_FORCESPro(problem); + if( exitflag == 1 ) + U(:,k) = solverout.u0; + else + info + error('Some problem in solver'); + end + X(:,k+1) = A*X(:,k) + B*U(:,k); +end + +%% plot +figure(1); clf; +subplot(2,1,1); grid on; title('states'); hold on; +plot([1 kmax], [xmax xmax]', 'r--'); +ylim(1.1*[-4.1 max(xmax)]); stairs(1:kmax,X(:,1:kmax)'); +subplot(2,1,2); grid on; title('input'); hold on; +plot([1 kmax], [umax umax]', 'r--'); plot([1 kmax], [umin umin]', 'r--'); +ylim(1.1*[min(umin),max(umax)]); stairs(1:kmax,U(:,1:kmax)'); \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/MSRE_constants.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/MSRE_constants.m new file mode 100755 index 0000000..39e4ea7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/MSRE_constants.m @@ -0,0 +1,35 @@ +function cfg = MSRE_constants() +% +% CONSTANTS FOR MSR ELLIPTICAL SCENARIO +% +% $Id: MSRE_constants.m 2311 2014-10-25 17:17:49Z enh20 $ +% (c) Ed Hartley, Cambridge University, UK. + +cfg = struct; + + +% +% Scenario constants +% +cfg.G = 6.673e-11; % Gravitational constant +cfg.M_mars = 6.4191e23; % Mass of central body +cfg.ecc = 0.204410; % Eccentricity +cfg.a = 4643e3; % Semimajor axis a + + +% +% Calculations +% +cfg.mu = cfg.G*cfg.M_mars; % Gravitational parameters +cfg.n = sqrt(cfg.mu/cfg.a^3); % Mean anomaly rate +cfg.ecc2 = cfg.ecc*cfg.ecc; +cfg.p = cfg.a*(1 - cfg.ecc2); % Semi-latus rectum +cfg.rp = cfg.p/(1 + cfg.ecc); % Periapsis +cfg.v0 = sqrt(2)*sqrt(cfg.mu)*sqrt(1/cfg.rp - 1/(2*cfg.a)); % Velocity at periapsis +cfg.h = cfg.rp*cfg.v0; % Angular momentum +cfg.ya_k2 = cfg.h/(cfg.p*cfg.p); % Useful constant + +cfg.X1a = zeros(1,2); +cfg.X1a(1) = sqrt(1-cfg.ecc); % Precomputed constants +cfg.X1a(2) = sqrt(1+cfg.ecc); % Precomputed constants +cfg.X2 = cfg.ecc*sqrt(1-cfg.ecc2); % Precomputed constants diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/SpacecraftRendezvousLinearQuadratic.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/SpacecraftRendezvousLinearQuadratic.m new file mode 100755 index 0000000..088b48f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/SpacecraftRendezvousLinearQuadratic.m @@ -0,0 +1,197 @@ +% Spacecraft Rendezvous maneouver +% +% min sum_{i=1}^{N-1} ||Q*(xi-xtarget)||_2 + ||R*(ui-utarget||_1 +% xi,ui +% s.t. x1 = x +% x_i+1 = A(i)*xi + B(i)*ui for i = 1...N-1 +% umin <= ui <= umax for i = 1...N +% Hx*x_i <= hx for i = 1...N +% +% (c) embotech AG, Zurich, Switzerland, 2014. +% Ed Hartley, Cambridge University, UK. + +clc +clear + +%% system +cfg_MPC = MSRE_constants; % get constants +M_chs_MPC = 1; % Input is an acceleration impulse +Ts_MPC = 200; % control sampling time +nx = 6; % velocities and acceleration in 3 axes +nu = 3; % thrusters on 3 axis + +%% MPC setup +N = 30; +Q = diag([0.001 0.001 0.001 0 0 0]); +R = diag([15000 15000 15000]); +umin = -5; umax = 5; +cone_angle = 20*pi/180; +Hx = [1 0 0 0 0 0]; +hx = 0; % Must remain behind the target +Hx = [ Hx; ... + cone_angle 0 1 0 0 0; ... % Visibility cone + cone_angle 0 -1 0 0 0]; % Visibility cone +hx = [hx;0;0]; + +xs = [-1000; 0; 0; 0; 0; 0]; % target state (1km away) +us = zeros(3,1); + +%% FORCES multistage form - 2-norm +% assume variable ordering zi = [ui, xi+1, eui] for i=1...N + +stages = MultistageProblem(N); +params(1) = newParam('minusA_times_x0',1,'eq.c'); % RHS of first eq. constr. is a parameter: z1=-A*x0 +for i = 1:N + + % dimension + stages(i).dims.n = nx+2*nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nu; % number of lower bounds + stages(i).dims.u = nu; % number of upper bounds + stages(i).dims.p = 3+2*nu; % number of polytopic constraints + + % cost + stages(i).cost.H = blkdiag(zeros(nu),Q,zeros(nu)); + stages(i).cost.f = [zeros(nu,1); -Q*xs; ones(nu,1)]; + + % lower bounds + stages(i).ineq.b.lbidx = 1:nu; % lower bound acts on these indices + stages(i).ineq.b.lb = umin*ones(nu,1); % lower bound for this stage variable + + % upper bounds + stages(i).ineq.b.ubidx = 1:nu; % upper bound acts on these indices + stages(i).ineq.b.ub = umax*ones(nu,1); % upper bound for this stage variable + + % polytopic bounds + stages(i).ineq.p.A = [ zeros(3,nu), Hx, zeros(3,nu); ... + R, zeros(nu,nx), -eye(nu); ... + -R, zeros(nu,nx), -eye(nu)]; + stages(i).ineq.p.b = [ hx; R*us; -R*us ]; + + % equality constraints + if( i>1 ) + stages(i).eq.c = zeros(nx,1); + end + params(end+1) = newParam(['D_',num2str(i)],i,'eq.D'); + if( i < N) + params(end+1) = newParam(['C_',num2str(i)],i,'eq.C'); + end + +end + +% define outputs of the solver +outputs(1) = newOutput('u0',1,1:nu); + +% solver settings +codeoptions = getOptions('FORCESPro_spacecraft_controller'); +codeoptions.maxit = 40; + +% generate code +generateCode(stages,params,codeoptions,outputs); + + + +%% simulate maneouver +x1 = [-15e3; 0; 0; 0; 0; 0]; % initial state (15km away) +xs = [-1000; 0; 0; 0; 0; 0]; % target state (1km away) +us = zeros(3,1); +kmax = 6000; % simulation samples +Ts_SIM = 1; % simulation sampling time +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); +nu0 = 0; + +for k = 1:kmax + + if mod(k-1,Ts_MPC) == 0 % only run the controller every Ts_MPC seconds + % get prediction model + nucopy = nu0; + [A, nucopy] = YA_A_matrix(cfg_MPC, nucopy, Ts_MPC*Ts_SIM); + B = A*[zeros(3);eye(3)]; + problem.minusA_times_x0 = -A*X(:,k); + problem = setfield(problem,'D_1', [B, -eye(nx), zeros(nx,nu)]); + for i = 2:N + [A, nucopy] = YA_A_matrix(cfg_MPC, nucopy, Ts_MPC*Ts_SIM); + B = A*[zeros(3);eye(3)]; + problem = setfield(problem,['D_',num2str(i)], [B, -eye(nx), zeros(nx,nu)]); + problem = setfield(problem,['C_',num2str(i-1)], [zeros(nx,nu), A, zeros(nx,nu)]); + end + + [solverout,exitflag,info] = FORCESPro_spacecraft_controller(problem); % solve + if( exitflag == 1 ) + U(:,k) = solverout.u0; + info.solvetime + else + info + error('Some problem in solver'); + end + else + U(:,k) = zeros(3,1); + end + + % simulate dynamics + [A_SIM, nu0] = YA_A_matrix(cfg_MPC, nu0, Ts_SIM); + B_SIM = A_SIM*[zeros(3);eye(3)]; + X(:,k+1) = A_SIM*X(:,k) + B_SIM*U(:,k); +end + + +%% Compuate some fuel usage stats +% +fprintf(1, 'Statistics Computing phase\n'); +utotal_onethrust = sum(sqrt(sum(U.^2,1))); +utotal_xyzthrust = sum(sum(abs(U),2)); +fprintf('Fuel usage using single thruster: %5.4f\n', utotal_onethrust); +fprintf('Fuel usage using 3D thrusters: %5.4f\n', utotal_xyzthrust); + + +%% Plot a nice graph +% +fprintf(1, 'Plotting phase\n'); +figure; +clf +subplot(4,2,[1,3,5,7]); +line(-[0,15], -tan(20*pi/180)*[0,15], 'color', 'r', 'linewidth', 3); hold on; +line(-[0,15], tan(20*pi/180)*[0,15], 'color', 'r', 'linewidth', 3); +plot(X(1,:)/1e3, X(3,:)/1e3, 'b', 'linewidth', 2); hold on; +set(gca, 'Xdir', 'reverse'); +set(gca, 'Ydir', 'reverse'); +xlabel('x_{tgt} (km)'); +ylabel('z_{tgt} (km)'); +grid on; + +subplot(4,2,2); +plot(X(1,:)/1e3); hold on; +set(gca, 'Ydir', 'reverse'); +set(gca, 'xlim', [0 kmax]); +line([0 kmax], xs(1)/1e3*[1 1], 'color', 'k', 'linestyle', '--', 'linewidth', 2); +ylabel('x_{tgt} (km)'); +xlabel('Time (s)'); +grid on; + +subplot(4,2,4); +plot(X(3,:)/1e3); +set(gca, 'Ydir', 'reverse'); +set(gca, 'xlim', [0 kmax]); +line([0 kmax], xs(3), 'linestyle', '--') +line([0 kmax], xs(3)/1e3*[1 1], 'color', 'k', 'linestyle', '--', 'linewidth', 2); +ylabel('z_{tgt} (km)'); +xlabel('Time (s)'); +grid on; + +subplot(4,2,6); +bar(U(1,:)); +set(gca, 'Ydir', 'reverse'); +set(gca, 'xlim', [0 kmax]); +xlabel('Time (s)'); +ylabel('u_x (m/s)'); +grid on; + +subplot(4,2,8); +bar(U(3,:)); +xlabel('Time (s)'); +ylabel('u_z (m/s)'); +grid on; +set(gca, 'Ydir', 'reverse'); +set(gca, 'xlim', [0 kmax]); + diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/SpacecraftRendezvousQuadratic.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/SpacecraftRendezvousQuadratic.m new file mode 100755 index 0000000..01dc6ec --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/SpacecraftRendezvousQuadratic.m @@ -0,0 +1,195 @@ +% Spacecraft Rendezvous maneouver +% +% min sum_{i=1}^{N-1} ||Q*(xi-xtarget)||_2 + ||R*(ui-utarget||_2 +% xi,ui +% s.t. x1 = x +% x_i+1 = A(i)*xi + B(i)*ui for i = 1...N-1 +% umin <= ui <= umax for i = 1...N +% Hx*x_i <= hx for i = 1...N +% +% (c) embotech AG, Zurich, Switzerland, 2014. +% Ed Hartley, Cambridge University, UK. + +clc +clear + +%% system +cfg_MPC = MSRE_constants; % get constants +M_chs_MPC = 1; % Input is an acceleration impulse +Ts_MPC = 200; % control sampling time +nx = 6; % velocities and acceleration in 3 axes +nu = 3; % thrusters on 3 axis + +%% MPC setup +N = 30; +Q = diag([0.001 0.001 0.001 0 0 0]); +R = diag([15000 15000 15000]); +umin = -5; umax = 5; +cone_angle = 20*pi/180; +Hx = [1 0 0 0 0 0]; +hx = 0; % Must remain behind the target +Hx = [ Hx; ... + cone_angle 0 1 0 0 0; ... % Visibility cone + cone_angle 0 -1 0 0 0]; % Visibility cone +hx = [hx;0;0]; + +xs = [-1000; 0; 0; 0; 0; 0]; % target state (1km away) +us = zeros(3,1); + +%% FORCES multistage form - 2-norm +% assume variable ordering zi = [ui, xi+1] for i=1...N + +stages = MultistageProblem(N); +params(1) = newParam('minusA_times_x0',1,'eq.c'); % RHS of first eq. constr. is a parameter: z1=-A*x0 +for i = 1:N + + % dimension + stages(i).dims.n = nx+nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nu; % number of lower bounds + stages(i).dims.u = nu; % number of upper bounds + stages(i).dims.p = 3; % number of polytopic constraints + + % cost + stages(i).cost.H = blkdiag(R,Q); + stages(i).cost.f = [-R*us; -Q*xs]; + + % lower bounds + stages(i).ineq.b.lbidx = 1:nu; % lower bound acts on these indices + stages(i).ineq.b.lb = umin*ones(nu,1); % lower bound for this stage variable + + % upper bounds + stages(i).ineq.b.ubidx = 1:nu; % upper bound acts on these indices + stages(i).ineq.b.ub = umax*ones(nu,1); % upper bound for this stage variable + + % polytopic bounds + stages(i).ineq.p.A = [ zeros(3,nu), Hx ]; + stages(i).ineq.p.b = hx; + + % equality constraints + if( i>1 ) + stages(i).eq.c = zeros(nx,1); + end + params(end+1) = newParam(['D_',num2str(i)],i,'eq.D'); + if( i < N) + params(end+1) = newParam(['C_',num2str(i)],i,'eq.C'); + end + +end + +% define outputs of the solver +outputs(1) = newOutput('u0',1,1:nu); + +% solver settings +codeoptions = getOptions('FORCESPro_spacecraft_controller'); +codeoptions.maxit = 40; + +% generate code +generateCode(stages,params,codeoptions,outputs); + + + +%% simulate maneouver +x1 = [-15e3; 0; 0; 0; 0; 0]; % initial state (15km away) +xs = [-1000; 0; 0; 0; 0; 0]; % target state (1km away) +us = zeros(3,1); +kmax = 6000; % simulation samples +Ts_SIM = 1; % simulation sampling time +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); +nu0 = 0; + +for k = 1:kmax + + if mod(k-1,Ts_MPC) == 0 % only run the controller every Ts_MPC seconds + % get prediction model + nucopy = nu0; + [A, nucopy] = YA_A_matrix(cfg_MPC, nucopy, Ts_MPC*Ts_SIM); + B = A*[zeros(3);eye(3)]; + problem.minusA_times_x0 = -A*X(:,k); + problem = setfield(problem,'D_1', [B, -eye(nx)]); + for i = 2:N + [A, nucopy] = YA_A_matrix(cfg_MPC, nucopy, Ts_MPC*Ts_SIM); + B = A*[zeros(3);eye(3)]; + problem = setfield(problem,['D_',num2str(i)], [B, -eye(nx)]); + problem = setfield(problem,['C_',num2str(i-1)], [zeros(nx,nu), A]); + end + + [solverout,exitflag,info] = FORCESPro_spacecraft_controller(problem); % solve + if( exitflag == 1 ) + U(:,k) = solverout.u0; + info.solvetime + else + info + error('Some problem in solver'); + end + else + U(:,k) = zeros(3,1); + end + + % simulate dynamics + [A_SIM, nu0] = YA_A_matrix(cfg_MPC, nu0, Ts_SIM); + B_SIM = A_SIM*[zeros(3);eye(3)]; + X(:,k+1) = A_SIM*X(:,k) + B_SIM*U(:,k); +end + + +%% Compuate some fuel usage stats +% +fprintf(1, 'Statistics Computing phase\n'); +utotal_onethrust = sum(sqrt(sum(U.^2,1))); +utotal_xyzthrust = sum(sum(abs(U),2)); +fprintf('Fuel usage using single thruster: %5.4f\n', utotal_onethrust); +fprintf('Fuel usage using 3D thrusters: %5.4f\n', utotal_xyzthrust); + + +%% Plot a nice graph +% +fprintf(1, 'Plotting phase\n'); +figure; +clf +subplot(4,2,[1,3,5,7]); +line(-[0,15], -tan(20*pi/180)*[0,15], 'color', 'r', 'linewidth', 3); hold on; +line(-[0,15], tan(20*pi/180)*[0,15], 'color', 'r', 'linewidth', 3); +plot(X(1,:)/1e3, X(3,:)/1e3, 'b', 'linewidth', 2); hold on; +set(gca, 'Xdir', 'reverse'); +set(gca, 'Ydir', 'reverse'); +xlabel('x_{tgt} (km)'); +ylabel('z_{tgt} (km)'); +grid on; + +subplot(4,2,2); +plot(X(1,:)/1e3); hold on; +set(gca, 'Ydir', 'reverse'); +set(gca, 'xlim', [0 kmax]); +line([0 kmax], xs(1)/1e3*[1 1], 'color', 'k', 'linestyle', '--', 'linewidth', 2); +ylabel('x_{tgt} (km)'); +xlabel('Time (s)'); +grid on; + +subplot(4,2,4); +plot(X(3,:)/1e3); +set(gca, 'Ydir', 'reverse'); +set(gca, 'xlim', [0 kmax]); +line([0 kmax], xs(3), 'linestyle', '--') +line([0 kmax], xs(3)/1e3*[1 1], 'color', 'k', 'linestyle', '--', 'linewidth', 2); +ylabel('z_{tgt} (km)'); +xlabel('Time (s)'); +grid on; + +subplot(4,2,6); +bar(U(1,:)); +set(gca, 'Ydir', 'reverse'); +set(gca, 'xlim', [0 kmax]); +xlabel('Time (s)'); +ylabel('u_x (m/s)'); +grid on; + +subplot(4,2,8); +bar(U(3,:)); +xlabel('Time (s)'); +ylabel('u_z (m/s)'); +grid on; +set(gca, 'Ydir', 'reverse'); +set(gca, 'xlim', [0 kmax]); + diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/YA_A_matrix.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/YA_A_matrix.m new file mode 100755 index 0000000..e7b180b --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/YA_A_matrix.m @@ -0,0 +1,95 @@ +function [A, nu1] = YA_A_matrix(cfg, nu0, dT) +% [A, nu1] = YA_A_matrix(cfg, nu0, dT) +% +% Compute Yamanaka-Ankersen state transition matrix for relative position +% in an elliptical Keplerian orbit. +% +% Inputs: +% cfg: Orbital parameters and some pre-computed variables +% nu0: True anomaly at beginning of prediction +% dT: Prediction period +% +% Outputs: +% A: State transition matrix +% nu1: True anomaly at end of prediction +% +% +% Example usage: +% +% cfg = MSRE_constants; % Get orbit parameters +% nu0 = 0; % Initialise true anomaly +% dT = 200; % Predict over 200 s +% +% [A, nu1] = YA_A_matrix(cfg, nu0, dT); % Compute YA STM +% +% Reference: +% K. Yamanaka and F. Ankersen, ?New state transition matrix for +% relative motion on an arbitrary elliptical orbit,? J. Guidance, +% Control, and Dynamics, vol. 25, no. 1, pp. 60?66, 2002. +% +% +% $Id: YA_A_matrix.m 2309 2014-10-25 17:14:33Z enh20 $ +% (c) Ed Hartley, Cambridge University, UK. + +% Eccentricity +ecc = cfg.ecc; +ecc2 = cfg.ecc2; + +% Compute functions of true-anomaly +nu_processed_k = YA_nu2rhocs(cfg,nu0); +rhoinv_k = nu_processed_k.rhoinv; +rhoinv2_k = nu_processed_k.rhoinv2; +c_k = nu_processed_k.c; +s_k = nu_processed_k.s; +rho_k = nu_processed_k.rho; +PHIinv_prev = 1/(1-ecc2)*... + [ 1-ecc2, 0, 3*ecc*s_k*(rhoinv_k + rhoinv2_k), -ecc*s_k*(1+rhoinv_k), 0, -ecc*c_k+2 + 0, 0, 0, 0, 0, 0 + 0, 0, -3*s_k*(rhoinv_k + ecc2*rhoinv2_k), s_k*(1+rhoinv_k), 0, c_k-2*ecc + 0, 0, -3*(c_k*rhoinv_k + ecc), c_k*(1+rhoinv_k)+ecc, 0, -s_k + 0, 0, 0, 0, 0, 0 + 0, 0, 3*rho_k + ecc2 - 1, -rho_k*rho_k, 0, ecc*s_k]; +PHIinv_prev(2,2) = 1; +PHIinv_prev(5,5) = 1; + + +% Propagate the true anomaly +Mk = kepler_nu2M(ecc, ecc2, nu0); % Convert true anomaly to mean anomaly +n = kepler_M_rate(cfg.mu, cfg.a); % Compute mean anomaly rate +nu1 = kepler_propagate_nu(Mk, n, ecc, ecc2, dT); % Compute propagated true anomaly + +% Compute functions of true anomaly +nu_processed_k1 = YA_nu2rhocs(cfg,nu1); +rhoinv_k1 = nu_processed_k1.rhoinv; +rhoinv2_k1 = nu_processed_k1.rhoinv2; +c_k1 = nu_processed_k1.c; +s_k1 = nu_processed_k1.s; +cprime_k1 = nu_processed_k1.cprime; +sprime_k1 = nu_processed_k1.sprime; +rho_k1 = nu_processed_k1.rho; +rho2_k1 = rho_k1^2; +J_k1 = cfg.ya_k2*dT; + +% Compute functions of true anomaly difference +c_dk = cos( nu1 - nu0); +s_dk = sin( nu1 - nu0); + + +PHI_k1 = [1, 0, -c_k1*(1+rhoinv_k1), s_k1*(1+rhoinv_k1), 0, 3*rho2_k1*J_k1 + 0, c_dk, 0, 0, s_dk, 0 + 0, 0, s_k1, c_k1, 0, (2-3*ecc*s_k1*J_k1) + 0, 0, 2*s_k1, 2*c_k1-ecc, 0, 3*(1-2*ecc*s_k1*J_k1) + 0, -s_dk, 0, 0, c_dk, 0 + 0, 0, sprime_k1, cprime_k1, 0, -3*ecc*(sprime_k1*J_k1 + s_k1*rhoinv2_k1)]; + + + + +transk = [nu_processed_k.adc_adc_inv_vec(1,1)*eye(3) zeros(3); ... + nu_processed_k.adc_adc_inv_vec(1,3)*eye(3) nu_processed_k.adc_adc_inv_vec(1,2)*eye(3)]; + +itransk1 = [nu_processed_k1.adc_adc_inv_vec(1,4)*eye(3) zeros(3); ... + nu_processed_k1.adc_adc_inv_vec(1,6)*eye(3) nu_processed_k1.adc_adc_inv_vec(1,5)*eye(3)]; + + +A = itransk1*PHI_k1*PHIinv_prev*transk; diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/YA_nu2rhocs.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/YA_nu2rhocs.m new file mode 100755 index 0000000..684299a --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/YA_nu2rhocs.m @@ -0,0 +1,32 @@ +function out = YA_nu2rhocs(cfg,nu) +% out = YA_nu2rhocs(cfg,nu) +% +% Compute some re-usable parameters for use in the YA-STM +% +% $Id: YA_nu2rhocs.m 2311 2014-10-25 17:17:49Z enh20 $ +% Ed Hartley, Cambridge University, UK. + +ecc = cfg.ecc; +ya_k2 = cfg.ya_k2; + +out = struct; +out.rho = 1 + ecc*cos(nu); +out.rhoinv = 1/out.rho; +out.rhoinv2 = out.rhoinv*out.rhoinv; +out.c = out.rho*cos(nu); +out.sinnu =sin(nu); +out.s = out.rho*out.sinnu; +out.cprime = -( out.sinnu + ecc*sin(2*nu)); +out.sprime = cos(nu) + ecc*cos(2*nu); + + +out.adc_adc_inv_vec = zeros(1,6); + +out.adc_adc_inv_vec(1,1) = out.rho; +out.adc_adc_inv_vec(1,2) = 1./(ya_k2*out.rho); +out.adc_adc_inv_vec(1,3) = -ecc*out.sinnu; +oneoverad = 1/(out.adc_adc_inv_vec(1,1)*out.adc_adc_inv_vec(1,2)); + +out.adc_adc_inv_vec(1,4) = out.adc_adc_inv_vec(1,2)*oneoverad; +out.adc_adc_inv_vec(1,5) = out.adc_adc_inv_vec(1,1)*oneoverad; +out.adc_adc_inv_vec(1,6) = -out.adc_adc_inv_vec(1,3)*oneoverad; diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/kepler_M_rate.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/kepler_M_rate.m new file mode 100755 index 0000000..ffcbe79 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/kepler_M_rate.m @@ -0,0 +1,6 @@ +function n = kepler_M_rate(mu, a) +% +% $Id: kepler_M_rate.m 2310 2014-10-25 17:17:35Z enh20 $ +% (c) Ed Hartley, Cambridge University, UK. + +n = sqrt(mu/a^3); \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/kepler_nu2M.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/kepler_nu2M.m new file mode 100755 index 0000000..12e0dd0 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/kepler_nu2M.m @@ -0,0 +1,9 @@ +function M0 = kepler_nu2M(ecc, ecc2, nu0) +% +% $Id: kepler_nu2M.m 2310 2014-10-25 17:17:35Z enh20 $ +% (c) Ed Hartley, Cambridge University, UK. + +X1a1 = sqrt(1-ecc); % Precomputed constants +X1a2 = sqrt(1+ecc); % Precomputed constants +X2 = ecc*sqrt(1-ecc2); % Precomputed constants +M0 = 2*atan2(X1a1*tan(nu0/2), X1a2) - (X2*sin(nu0))/(1 + ecc*cos(nu0)); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/kepler_propagate_nu.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/kepler_propagate_nu.m new file mode 100755 index 0000000..6c2b401 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SpacecraftRendezvous/kepler_propagate_nu.m @@ -0,0 +1,15 @@ +function nu = kepler_propagate_nu(M0, n, ecc, ecc2, dT) +% +% +% $Id: kepler_propagate_nu.m 2310 2014-10-25 17:17:35Z enh20 $ +% (c) Ed Hartley, Cambridge University, UK. + +M = M0 + n*dT; %Mean anomaly vector +E = M; + +for k2 = 1:6 + err = E - ecc*sin(E) - M; + errdash = 1 - ecc*cos(E); + E = E - err/errdash; +end +nu = atan2( sin(E)*sqrt(1-ecc2), cos(E)-ecc); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SparseParametersEqualities/SparseParametersEqualities.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SparseParametersEqualities/SparseParametersEqualities.m new file mode 100755 index 0000000..7ecc6a7 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/SparseParametersEqualities/SparseParametersEqualities.m @@ -0,0 +1,112 @@ +% Simple MPC - double integrator example for use with FORCES Pro +% +% min xN'*P*xN + sum_{i=1}^{N-1} xi'*Q*xi + ui'*R*ui +% xi,ui +% s.t. x1 = x +% x_i+1 = A*xi + B*ui for i = 1...N-1 +% xmin <= xi <= xmax for i = 1...N +% umin <= ui <= umax for i = 1...N +% +% and P is solution of Ricatti eqn. from LQR problem +% +% (c) embotech AG, Zurich, Switzerland, 2014. + +%% system +A = [1.1 1; 0 1]; +B = [0 1;0 0.5]; +[nx,nu] = size(B); + +%% MPC setup +N = 10; +Q = eye(nx); +R = eye(nu); +if( exist('dlqr','file') ) + [~,P] = dlqr(A,B,Q,R); +else + P = 10*Q; +end +umin = [-0.5; -0.5]; umax = [0.5; 0.5]; +xmin = [-5; -5]; xmax = [5; 5]; + + +%% FORCES multistage form +% assume variable ordering zi = [ui; xi+1] for i=1...N-1 + +stages = MultistageProblem(N); +for i = 1:N + + % dimension + stages(i).dims.n = nx+nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nx+nu; % number of lower bounds + stages(i).dims.u = nx+nu; % number of upper bounds + + % cost + if( i == N ) + stages(i).cost.H = blkdiag(R,P); + else + stages(i).cost.H = blkdiag(R,Q); + end + stages(i).cost.f = zeros(nx+nu,1); + + % lower bounds + stages(i).ineq.b.lbidx = 1:(nu+nx); % lower bound acts on these indices + stages(i).ineq.b.lb = [umin; xmin]; % lower bound for this stage variable + + % upper bounds + stages(i).ineq.b.ubidx = 1:(nu+nx); % upper bound acts on these indices + stages(i).ineq.b.ub = [umax; xmax]; % upper bound for this stage variable + + % equality constraints + if( i < N ) + %stages(i).eq.C = [zeros(nx,nu), A]; + end + if( i>1 ) + stages(i).eq.c = zeros(nx,1); + end + %stages(i).eq.D = [B, -eye(nx)]; + +end +params(1) = newParam('minusA_times_x0',1,'eq.c'); % RHS of first eq. constr. is a parameter: z1=-A*x0 + +params(2) = newParam('eqD',1:N,'eq.D','sparse',[B, -eye(nx)]); +params(3) = newParam('eqC',1:N-1,'eq.C','sparse',[zeros(nx,nu), A]); + +%% define outputs of the solver +outputs(1) = newOutput('u0',1,1:nu); + +%% solver settings +codeoptions = getOptions('myMPC_FORCESPro'); + +%% generate code +generateCode(stages,params,codeoptions,outputs); + + +%% simulate +x1 = [-4; 2]; +kmax = 30; +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); +problem.z1 = zeros(2*nx,1); +for k = 1:kmax + problem.minusA_times_x0 = -A*X(:,k); + problem.eqD = [1.0, 0.5, -1.0, 0.0, 0.0, -1.0]'; + problem.eqC = [1.1, 0.0, 1.0, 1.0]'; + [solverout,exitflag,info] = myMPC_FORCESPro(problem); + if( exitflag == 1 ) + U(:,k) = solverout.u0; + else + info + error('Some problem in solver'); + end + X(:,k+1) = A*X(:,k) + B*U(:,k); +end + +%% plot +figure(1); clf; +subplot(2,1,1); grid on; title('states'); hold on; +plot([1 kmax], [xmax xmax]', 'r--'); plot([1 kmax], [xmin xmin]', 'r--'); +ylim(1.1*[min(xmin),max(xmax)]); stairs(1:kmax,X(:,1:kmax)'); +subplot(2,1,2); grid on; title('input'); hold on; +plot([1 kmax], [umax umax]', 'r--'); plot([1 kmax], [umin umin]', 'r--'); +ylim(1.1*[min(umin),max(umax)]); stairs(1:kmax,U(:,1:kmax)'); \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/TimeVaryingDynamics/TimeVaryingDynamics.m b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/TimeVaryingDynamics/TimeVaryingDynamics.m new file mode 100755 index 0000000..a83e029 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Matlab/LowLevelInterface/TimeVaryingDynamics/TimeVaryingDynamics.m @@ -0,0 +1,271 @@ +%% Time-Varying Model with FORCES Pro +% +% (c) Gian Koenig, embotech AG, Zurich, Switzerland, 2014. + +clear all; clc; close all; + +%% Systems +A1 = [0.7115, -.6; .6, 0.8853]; +B1 = [0.02713; 0.0573]; +C1 = [0, 1]; +D1 = [0]; + +A2 = [.9, .5; .5, 1]; +B2 = [0; 1/15]; +C2 = [0, 1/5]; +D2 = [0]; + +A3 = [0.7115, -.5; .5, 1]; +B3 = [0.5; 0.01]; +C3 = [0, 1]; +D3 = [0]; + +A4 = [0, .9; -1, 0]; +B4 = [0; 1/5]; +C4 = [0, 1]; +D4 = [0]; + +%% Input Constraints +u1min = -3; u1max = 5; +u2min = -5.5; u2max = 5.5; +u3min = -3; u3max = 5; +u4min = -.45; u4max = 4.5; + +%% Simulation Settings +% 'Switching Frequency' of the system: Linear system changes every s steps +s1 = 4; s2 = 8; s3 = 3; s4 = 5; + +% Initial condition +x1 = [1; 1]; + +% Prediction/Preview Horizon +N = 15; + +% Simulation steps +n = 40; + +%% Others +system{1,1} = A1; system{1,2} = A2; system{1,3} = A3; system{1,4} = A4; +system{2,1} = B1; system{2,2} = B2; system{2,3} = B3; system{2,4} = B4; +system{3,1} = C1; system{3,2} = C2; system{3,3} = C3; system{3,4} = C4; +system{4,1} = D1; system{4,2} = D2; system{4,3} = D3; system{4,4} = D4; + +system_var1 = repmat(system(:,1),1,s1); system_var2 = repmat(system(:,2),1,s2); +system_var3 = repmat(system(:,3),1,s3); system_var4 = repmat(system(:,4),1,s4); + +system_var = [system_var1, system_var2, system_var3, system_var4]; +system_var = repmat(system_var,1, ceil((n+N)/length(system_var))); + +constraints{1,1} = u1min; constraints{2,1} = u1max; +constraints{1,2} = u2min; constraints{2,2} = u2max; +constraints{1,3} = u3min; constraints{2,3} = u3max; +constraints{1,4} = u4min; constraints{2,4} = u4max; + +constraints_var1 = repmat(constraints(:,1),1,s1); +constraints_var2 = repmat(constraints(:,2),1,s2); +constraints_var3 = repmat(constraints(:,3),1,s3); +constraints_var4 = repmat(constraints(:,4),1,s4); + +constraints_var = [constraints_var1, constraints_var2, ... + constraints_var3, constraints_var4]; +constraints_var = repmat(constraints_var,1,ceil((n+N)/length(constraints_var))); + +%% MPC Setting +% Number of states, Number of inputs +[nx, nu] = size(B1); + +% Cost weights +R = 1; % on inputs +Q = 10*eye(2); % on states (including final stage) + +%% Multistage Problem: No varying model in prediction horizon +stages = MultistageProblem(N); % get stages struct of length N + +for i = 1:N + % dimensions + stages(i).dims.n = nx+nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nu; % number of lower bounds + stages(i).dims.u = nu; % number of upper bounds + + % lower bounds + stages(i).ineq.b.lbidx = 1; % lower bound acts on these indices + + % upper bounds + stages(i).ineq.b.ubidx = 1; % upper bound acts on these indices + + % cost + stages(i).cost.H = blkdiag(R,Q); + stages(i).cost.f = zeros(nx+nu,1); + + % inequality constraints + if( i>1 ) + stages(i).eq.c = zeros(nx,1); + end +end + +% PARAMETERS +% Initial Equality +% c_1 = -A*x0 +parameter(1) = newParam('minusA_times_x0',1,'eq.c'); + +% Inter-Stage Equality +parameter(2) = newParam('D',1:N,'eq.D'); +parameter(3) = newParam('C',1:(N-1),'eq.C'); + +% Lower and upper bounds on the input +parameter(4) = newParam('umin',1:N,'ineq.b.lb'); +parameter(5) = newParam('umax',1:N,'ineq.b.ub'); + +% define outputs of the solver +outputs(1) = newOutput('u0',1,1:nu); + +% solver settings +codeoptions = getOptions('Time_Varying_Model'); + +% generate code +generateCode(stages,parameter,codeoptions,outputs); + +% Simulation +X = zeros(nx,n+1); X(:,1) = x1; +X_NC = zeros(nx,n+1); X_NC(:,1) = x1; +U = zeros(nu,n); +problem.z1 = zeros(2*nx,1); +for k = 1:n + + problem.minusA_times_x0 = -system_var{1,k}*X(:,k); + problem.D = [system_var{2,k} , -eye(2)]; + problem.C = [zeros(nx,nu), system_var{1,k}]; + problem.umin = constraints_var{1,k}; + problem.umax = constraints_var{2,k}; + + [solverout,exitflag,info] = Time_Varying_Model(problem); + if( exitflag == 1 ) + U(:,k) = solverout.u0; + else + info + error('Some problem in solver'); + end + X_NC(:,k+1) = system_var{1,k}*X_NC(:,k); + X(:,k+1) = system_var{1,k}*X(:,k) + system_var{2,k}*U(:,k); +end + +%% Multistage Problem: Varying Model in prediction Horizon +stages = MultistageProblem(N); % get stages struct of length N + +% Initial Equality +% c_1 = -A*x0 +parameter(1) = newParam('minusA_times_x0',1,'eq.c'); + +for i = 1:N + % dimension + stages(i).dims.n = nx+nu; % number of stage variables + stages(i).dims.r = nx; % number of equality constraints + stages(i).dims.l = nu; % number of lower bounds + stages(i).dims.u = nu; % number of upper bounds + + % lower bounds + stages(i).ineq.b.lbidx = 1; % lower bound acts on these indices + parameter(1+i) = newParam(['u',num2str(i),'min'],i,'ineq.b.lb'); + + % upper bounds + stages(i).ineq.b.ubidx = 1; % upper bound acts on these indices + parameter(1+N+i) = newParam(['u',num2str(i),'max'],i,'ineq.b.ub'); + + % cost + stages(i).cost.H = blkdiag(R,Q); + stages(i).cost.f = zeros(nx+nu,1); + + % Equality constraints + if( i>1 ) + stages(i).eq.c = zeros(nx,1); + end + % Inter-Stage Equlity + % D_i*z_i = [B_i -I]*z_i + parameter(1+2*N+i) = newParam(['D_',num2str(i)],i,'eq.D'); + if( i 0): + stages.eq[i]['c'] = np.zeros((nx, 1)) + stages.eq[i]['D'] = np.hstack((B, -np.eye(nx))) + +stages.newParam('minusA_times_x0', [1], 'eq.c') # RHS of first eq. constr. is a parameter: z1=-A*x0 + +# define output of the solver +stages.newOutput('u0', 1, list(range(1, nu + 1))) + +# solver settings +stages.codeoptions['name'] = 'myMPC_FORCESPro' +stages.codeoptions['printlevel'] = 0 +stages.codeoptions['server'] = 'https://forces.embotech.com' + +# generate code +import get_userid + +stages.generateCode(get_userid.userid) + +# simulate +import myMPC_FORCESPro_py + +problem = myMPC_FORCESPro_py.myMPC_FORCESPro_params +x1 = np.array([-4, 2]) +kmax = 30 +X = np.zeros((nx, kmax + 1)) +X[:, 0] = x1 +U = np.zeros((nu, kmax)) +for k in range(0, kmax): + problem['minusA_times_x0'] = -np.dot(A, X[:, k]) + [solverout, exitflag, info] = myMPC_FORCESPro_py.myMPC_FORCESPro_solve(problem) + if (exitflag == 1): + U[:, k] = solverout['u0'] + print('Problem solved in %5.3f milliseconds (%d iterations).' % (1000.0 * info.solvetime, info.it)) + else: + print(info) + raise SolverError('Some problem in solver') + + X[:, k + 1] = np.dot(A, X[:, k]) + np.dot(B, U[:, k]) + +# plot +import matplotlib.pyplot as plt + +fig1 = plt.figure() +plt.subplot(2, 1, 1) +plt.axhline(y=max(xmax), c="red", zorder=0) +plt.axhline(y=max(xmin), c="red", zorder=0) +plt.step(list(range(0, kmax)), X[0, 0:kmax], where='post', hold=True) +plt.step(list(range(0, kmax)), X[1, 0:kmax], where='post', hold=True) +plt.title('states') +plt.xlim(0, kmax) +plt.ylim(1.1 * min(xmin), 1.1 * max(xmax)) +plt.grid() + +plt.subplot(2, 1, 2) +plt.axhline(y=umax, c="red", zorder=0) +plt.axhline(y=umin, c="red", zorder=0) +plt.step(list(range(0, kmax)), U[0, 0:kmax], where='post', hold=True) +plt.title('input') +plt.xlim(0, kmax) +plt.ylim(1.1 * min(umin), 1.1 * max(umax)) +plt.grid() + +plt.show() diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_basic_example.m b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_basic_example.m new file mode 100755 index 0000000..d83a412 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_basic_example.m @@ -0,0 +1,114 @@ +% Basic MPC example demonstrating the use of Yalmip to formulate MPC +% problems and FORCES to solve them very quickly. +% +% Simple MPC - double integrator example for use with FORCES Pro +% +% min xN'*P*xN + sum_{i=0}^{N-1} xi'*Q*xi + ui'*R*ui +% xi,ui +% s.t. x0 = x(t) +% x_i+1 = A*xi + B*ui for i = 0...N-1 +% xmin <= xi <= xmax for i = 1...N +% umin <= ui <= umax for i = 0...N +% +% and P is solution of Ricatti eqn. from LQR problem +% +% Note: due to 1-based indexing in Matlab, we use 1...N+1 instead of 0...N +% as indices for state and input trajectory +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +clear; clc; + +%% MPC problem data + +% system matrices +A = [1.1 1; 0 1]; +B = [1; 0.5]; +[nx,nu] = size(B); + +% horizon +N = 10; + +% cost matrices +Q = eye(2); +R = eye(1); +if exist('dlqr', 'file') + [~,P] = dlqr(A,B,Q,R); +else + fprintf('Did not find dlqr (part of the Control Systems Toolbox). Will use 10*Q for the terminal cost matrix.\n'); + P = 10*Q; +end + +% constraints +umin = -0.5; umax = 0.5; +xmin = [-5; -5]; xmax = [5; 5]; + +%% Build MPC problem in Yalmip + +% Define variables +X = sdpvar(nx,N+1,'full'); % state trajectory: x0,x1,...,xN (columns of X) +U = sdpvar(nu,N,'full'); % input trajectory: u0,...,u_{N-1} (columns of U) + +% Initialize objective and constraints of the problem +cost = 0; const = []; + +% Assemble MPC formulation +for i = 1:N + % cost + if( i < N ) + cost = cost + 0.5*X(:,i+1)'*Q*X(:,i+1) + 0.5*U(:,i)'*R*U(:,i); + else + cost = cost + 0.5*X(:,N+1)'*P*X(:,N+1) + 0.5*U(:,N)'*R*U(:,N); + end + + % model + const = [const, X(:,i+1) == A*X(:,i) + B*U(:,i)]; + + % bounds + const = [const, umin <= U(:,i) <= umax]; + const = [const, xmin <= X(:,i+1) <= xmax]; +end + +%% Create controller object (generates code) +% for a complete list of codeoptions, see +% https://www.embotech.com/FORCES-Pro/User-Manual/Low-level-Interface/Solver-Options +codeoptions = getOptions('simpleMPC_solver'); % give solver a name +controller = optimizerFORCES(const, cost, codeoptions, X(:,1), U(:,1), {'xinit'}, {'u0'}); + + +%% Simulate +x1 = [-4; 2]; +kmax = 30; +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); +problem.z1 = zeros(2*nx,1); +for k = 1:kmax + + % Evaluate controller function for parameters + [U(:,k),exitflag,info] = controller{ X(:,k) }; + + % Always check the exitflag in case something went wrong in the solver + if( exitflag == 1 ) + fprintf('Time step %2d: FORCES took %2d iterations and %5.3f ', k, info.it, info.solvetime*1000); + fprintf('milliseconds to solve the problem.\n'); + else + info + error('Some problem in solver'); + end + + % State update + X(:,k+1) = A*X(:,k) + B*U(:,k); +end + + +%% plot +figure(1); clf; +subplot(2,1,1); grid on; title('states'); hold on; +plot([1 kmax], [xmax xmax]', 'r--'); plot([1 kmax], [xmin xmin]', 'r--'); +ylim(1.1*[min(xmin),max(xmax)]); stairs(1:kmax,X(:,1:kmax)'); +subplot(2,1,2); grid on; title('input'); hold on; +plot([1 kmax], [umax umax]', 'r--'); plot([1 kmax], [umin umin]', 'r--'); +ylim(1.1*[min(umin),max(umax)]); stairs(1:kmax,U(:,1:kmax)'); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_basic_example_admm.m b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_basic_example_admm.m new file mode 100755 index 0000000..0bdc9b4 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_basic_example_admm.m @@ -0,0 +1,112 @@ +% Basic MPC example demonstrating the use of Yalmip to formulate MPC +% problems and FORCES to solve them very quickly. +% +% Simple MPC - double integrator example for use with FORCES Pro +% +% min xN'*P*xN + sum_{i=0}^{N-1} xi'*Q*xi + ui'*R*ui +% xi,ui +% s.t. x0 = x(t) +% x_i+1 = A*xi + B*ui for i = 0...N-1 +% xmin <= xi <= xmax for i = 1...N +% umin <= ui <= umax for i = 0...N +% +% and P is solution of Ricatti eqn. from LQR problem +% +% Note: due to 1-based indexing in Matlab, we use 1...N+1 instead of 0...N +% as indices for state and input trajectory +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +clear; clc; + +%% MPC problem data + +% system matrices +A = [1.1 1; 0 1]; +B = [1; 0.5]; +[nx,nu] = size(B); + +% horizon +N = 10; + +% cost matrices +Q = eye(2); +R = eye(1); +P = 10*Q; + +% constraints +umin = -0.5; umax = 0.5; +xmin = [-5; -5]; xmax = [5; 5]; + +%% Build MPC problem in Yalmip + +% Define variables +X = sdpvar(nx,N+1,'full'); % state trajectory: x0,x1,...,xN (columns of X) +U = sdpvar(nu,N,'full'); % input trajectory: u0,...,u_{N-1} (columns of U) +xinit = sdpvar(nx,1); % initial state + +% Initialize objective and constraints of the problem +cost = 0; const = X(:,1)==xinit; + +% Assemble MPC formulation +for i = 1:N + % cost + if( i < N ) + cost = cost + 0.5*X(:,i+1)'*Q*X(:,i+1) + 0.5*U(:,i)'*R*U(:,i); + else + cost = cost + 0.5*X(:,N+1)'*P*X(:,N+1) + 0.5*U(:,N)'*R*U(:,N); + end + + % model + const = [const, X(:,i+1) == A*X(:,i) + B*U(:,i)]; + + % bounds + const = [const, umin <= U(:,i) <= umax]; + const = [const, xmin <= X(:,i+1) <= xmax]; +end + +%% Create controller object (generates code) +% for a complete list of codeoptions, see +% https://www.embotech.com/FORCES-Pro/User-Manual/Low-level-Interface/Solver-Options +codeoptions = getOptions('simpleMPC_solver_ADMM'); % give solver a name +codeoptions.solvemethod = 'ADMM'; % use ADMM as solve method +codeoptions.maxit = 1000; +controller = optimizerFORCES(const, cost, codeoptions, xinit, U(:,1), {'xinit'}, {'u0'}); + + +%% Simulate +x1 = [-4; 2]; +kmax = 30; +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); +problem.z1 = zeros(2*nx,1); +for k = 1:kmax + + % Evaluate controller function for parameters + [U(:,k),exitflag,info] = controller{ X(:,k) }; + + % Always check the exitflag in case something went wrong in the solver + if( exitflag == 1 ) + fprintf('Time step %2d: FORCES took %2d iterations and %5.3f ', k, info.it, info.solvetime*1000); + fprintf('milliseconds to solve the problem.\n'); + else + info + error('Some problem in solver'); + end + + % State update + X(:,k+1) = A*X(:,k) + B*U(:,k); +end + + +%% plot +figure(1); clf; +subplot(2,1,1); grid on; title('states'); hold on; +plot([1 kmax], [xmax xmax]', 'r--'); plot([1 kmax], [xmin xmin]', 'r--'); +ylim(1.1*[min(xmin),max(xmax)]); stairs(1:kmax,X(:,1:kmax)'); +subplot(2,1,2); grid on; title('input'); hold on; +plot([1 kmax], [umax umax]', 'r--'); plot([1 kmax], [umin umin]', 'r--'); +ylim(1.1*[min(umin),max(umax)]); stairs(1:kmax,U(:,1:kmax)'); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_basic_example_simulink.slx b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_basic_example_simulink.slx new file mode 100755 index 0000000..8a71416 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_basic_example_simulink.slx differ diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_parametric_cost.m b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_parametric_cost.m new file mode 100755 index 0000000..c53c635 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_parametric_cost.m @@ -0,0 +1,142 @@ +% Basic MPC example demonstrating the use of Yalmip to formulate MPC +% problems and FORCES to solve them very quickly. +% +% In this example, we will make the cost weights parametric for later +% tuning. +% +% Simple MPC - double integrator example for use with FORCES Pro +% +% min xN'*P*xN + sum_{i=0}^{N-1} xi'*Q*xi + ui'*R*ui +% xi,ui +% s.t. x0 = x(t) +% x_i+1 = A*xi + B*ui for i = 0...N-1 +% xmin <= xi <= xmax for i = 1...N +% umin <= ui <= umax for i = 0...N-1 +% +% and P is solution of Ricatti eqn. from LQR problem. The matrices Q,R,P, +% are parameters to the problem - the tuning of the cost function. +% +% Note: due to 1-based indexing in Matlab, we use 1...N+1 instead of 0...N +% as indices for state and input trajectory +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +clear; clc; + +modus = 'y2f'; % 'yalmip' or 'y2f' + +%% MPC problem data + +% system matrices +A = [1.1 1; 0 1]; +B = [1; 0.5]; +[nx,nu] = size(B); + +% horizon +N = 10; + +% constraints +umin = -0.5; umax = 0.5; +xmin = [-5; -5]; xmax = [5; 5]; + +%% Build MPC problem in Yalmip + +% Define variables +X = sdpvar(nx,N+1,'full'); % state trajectory: x0,x1,...,xN (columns of X) +U = sdpvar(nu,N,'full'); % input trajectory: u0,...,u_{N-1} (columns of U) + +% Cost matrices - these will be parameters later +Q = sdpvar(nx); +R = sdpvar(nu); +P = sdpvar(nx); + +% Initialize objective and constraints of the problem +cost = 0; const = []; + +% Assemble MPC formulation +for i = 1:N + % cost + if( i < N ) + cost = cost + 0.5*X(:,i+1)'*Q*X(:,i+1) + 0.5*U(:,i)'*R*U(:,i); + else + cost = cost + 0.5*X(:,N+1)'*P*X(:,N+1) + 0.5*U(:,N)'*R*U(:,N); + end + + % model + const = [const, X(:,i+1) == A*X(:,i) + B*U(:,i)]; + + % bounds + const = [const, umin <= U(:,i) <= umax]; + const = [const, xmin <= X(:,i+1) <= xmax]; +end + +%% Create controller object (generates code) +% for a complete list of codeoptions, see +% https://www.embotech.com/FORCES-Pro/User-Manual/Low-level-Interface/Solver-Options +codeoptions = getOptions('parametricCost_solver'); % give solver a name +parameters = { X(:,1), Q, R, P }; +parameterNames = { 'xinit', 'Q', 'R', 'P' }; +outputs = U(:,1) ; +outputNames = {'controlInput'}; + +if( strcmpi(modus,'yalmip') ) + % standard yalmip optimizer + controller = optimizer(const, cost, sdpsettings('solver','quadprog'), parameters, outputs); + goodexitflag = 0; % indicates success of solve +else + % y2f interface + controller = optimizerFORCES(const, cost, codeoptions, parameters, outputs, parameterNames, outputNames); + goodexitflag = 1; % indicates success of solve +end + + +%% Simulate +x1 = [-4; 2]; +kmax = 30; +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); +problem.z1 = zeros(2*nx,1); + +% set cost matrices +Q = eye(2); +R = eye(1); +if exist('dlqr', 'file') + [~,P] = dlqr(A,B,Q,R); +else + fprintf('Did not find dlqr (part of the Control Systems Toolbox). Will use 10*Q for the terminal cost matrix.\n'); + P = 10*Q; +end + + +for k = 1:kmax + + % Evaluate controller function for parameters + [U(:,k),exitflag,info] = controller{ {X(:,k), Q,R,P} }; + + % Always check the exitflag in case something went wrong in the solver + if( exitflag == goodexitflag ) + if( strcmpi(modus,'y2f') ) + fprintf('Time step %2d: FORCES took %2d iterations and %5.3f ', k, info.it, info.solvetime*1000); + fprintf('milliseconds to solve the problem.\n'); + end + else + info + error('Some problem in solver'); + end + + % State update + X(:,k+1) = A*X(:,k) + B*U(:,k); +end + + +%% plot +figure(1); clf; +subplot(2,1,1); grid on; title('states'); hold on; +plot([1 kmax], [xmax xmax]', 'r--'); plot([1 kmax], [xmin xmin]', 'r--'); +ylim(1.1*[min(xmin),max(xmax)]); stairs(1:kmax,X(:,1:kmax)'); +subplot(2,1,2); grid on; title('input'); hold on; +plot([1 kmax], [umax umax]', 'r--'); plot([1 kmax], [umin umin]', 'r--'); +ylim(1.1*[min(umin),max(umax)]); stairs(1:kmax,U(:,1:kmax)'); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_parametric_dynamics.m b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_parametric_dynamics.m new file mode 100755 index 0000000..c4ae54f --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_parametric_dynamics.m @@ -0,0 +1,122 @@ +% Basic MPC example demonstrating the use of Yalmip to formulate MPC +% problems and FORCES to solve them very quickly. +% +% In this example, we will have the matrices A and B as parameters. This +% often occurs when a system is (re-)linearized around an operating point. +% +% Simple MPC - double integrator example for use with FORCES Pro +% +% min xN'*P*xN + sum_{i=0}^{N-1} xi'*Q*xi + ui'*R*ui +% xi,ui +% s.t. x0 = x(t) +% x_i+1 = A*xi + B*ui for i = 0...N-1 +% xmin <= xi <= xmax for i = 1...N +% umin <= ui <= umax for i = 0...N-1 +% +% Q, R, and P are suitable cost matrices and A and B are +% parameters to the problem. +% +% Note: due to 1-based indexing in Matlab, we use 1...N+1 instead of 0...N +% as indices for state and input trajectory +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +clear; clc; + +%% MPC problem data + +% system dimensions +nx = 2; nu = 1; + +% horizon +N = 10; + +% cost matrices +Q = eye(2); +R = eye(1); +P = 10*Q; % we don't know A and B yet, so we cannot compute the LQR cost and use this instead + +% constraints +umin = -0.5; umax = 0.5; +xmin = [-5; -5]; xmax = [5; 5]; + +%% Build MPC problem in Yalmip + +% Define variables +x0 = sdpvar(nx,1); % initial state +X = sdpvar(nx,N+1,'full'); % state trajectory: x1,...,xN (columns of X) +U = sdpvar(nu,N,'full'); % input trajectory: u0,...,u_{N-1} (columns of U) +A = sdpvar(nx,nx,'full'); % system matrix - parameter +B = sdpvar(nx,nu,'full'); % input matrix - parameter + +% Initialize objective and constraints of the problem +cost = 0; +const = x0 == X(:,1); + +% Assemble MPC formulation +for i = 1:N + % cost + if( i < N ) + cost = cost + 0.5*X(:,i+1)'*Q*X(:,i+1) + 0.5*U(:,i)'*R*U(:,i); + else + cost = cost + 0.5*X(:,N+1)'*P*X(:,N+1) + 0.5*U(:,N)'*R*U(:,N); + end + + % model + const = [const, X(:,i+1) == A*X(:,i) + B*U(:,i)]; + + % bounds + const = [const, umin <= U(:,i) <= umax]; + const = [const, xmin <= X(:,i+1) <= xmax]; +end + +%% Create controller object (generates code) +% for a complete list of codeoptions, see +% https://www.embotech.com/FORCES-Pro/User-Manual/Low-level-Interface/Solver-Options +codeoptions = getOptions('parametricDynamics_solver'); % give solver a name +parameters = { x0, A, B }; +parameterNames = { 'xinit', 'Amatrix', 'Bmatrix' }; +controller = optimizerFORCES(const, cost, codeoptions, parameters, U(:,1), parameterNames, {'u0'} ); + + +%% Simulate +x1 = [-4; 2]; +kmax = 30; +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); +problem.z1 = zeros(2*nx,1); + +for k = 1:kmax + + % Set system matrices + A = [1.1 1; 0 1]; + B = [1; 0.5]; + + % Evaluate controller function for parameters + [U(:,k),exitflag,info] = controller{ X(:,k), A, B }; + + % Always check the exitflag in case something went wrong in the solver + if( exitflag == 1 ) + fprintf('Time step %2d: FORCES took %2d iterations and %5.3f ', k, info.it, info.solvetime*1000); + fprintf('milliseconds to solve the problem.\n'); + else + info + error('Some problem in solver'); + end + + % State update + X(:,k+1) = A*X(:,k) + B*U(:,k); +end + + +%% plot +figure(1); clf; +subplot(2,1,1); grid on; title('states'); hold on; +plot([1 kmax], [xmax xmax]', 'r--'); plot([1 kmax], [xmin xmin]', 'r--'); +ylim(1.1*[min(xmin),max(xmax)]); stairs(1:kmax,X(:,1:kmax)'); +subplot(2,1,2); grid on; title('input'); hold on; +plot([1 kmax], [umax umax]', 'r--'); plot([1 kmax], [umin umin]', 'r--'); +ylim(1.1*[min(umin),max(umax)]); stairs(1:kmax,U(:,1:kmax)'); diff --git a/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_parametric_inequalities.m b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_parametric_inequalities.m new file mode 100755 index 0000000..b394e63 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/examples/Y2F/mpc_parametric_inequalities.m @@ -0,0 +1,139 @@ +% This example extends the basic MPC example by additional parametric +% inequalities. The inequalities are defined by a time-varying 2x2 matrix +% that is defined by 2 parameters (instead of 4 as one would expect). +% +% R(k)*x <= R(k)*xmax +% +% where k is the simulation step and the rotation matrix is defined by +% +% R(k) = [ cos(k*w) -sin(k*w) = [ r1 -r2 +% sin(k*w) cos(k*w) ] r2 r1 ] +% +% where k is the simulation step, and w a fixed number. Hence we have +% +% r1 := cos(k*w) +% r2 := sin(k*w) +% +% Overall, the following problem is solved at each time step: +% +% min xN'*P*xN + sum_{i=0}^{N-1} xi'*Q*xi + ui'*R*ui +% xi,ui +% s.t. x0 = x(t) +% x_i+1 = A*xi + B*ui for i = 0...N-1 +% xmin <= xi <= xmax for i = 1...N +% umin <= ui <= umax for i = 0...N-1 +% R(k)*xi <= R(k)*xmax for i = 1...N +% +% and P is solution of Ricatti eqn. from LQR problem +% +% Note: due to 1-based indexing in Matlab, we use 1...N+1 instead of 0...N +% as indices for state and input trajectory +% +% This file is part of the y2f project: http://github.com/embotech/y2f, +% a project maintained by embotech under the MIT open-source license. +% +% (c) Gian Ulli and embotech GmbH, Zurich, Switzerland, 2013-2016. + +clear; clc; + +%% MPC problem data + +% system matrices +A = [1.1 1; 0 1]; +B = [1; 0.5]; +w = 1E-2; +[nx,nu] = size(B); + +% horizon +N = 10; + +% cost matrices +Q = eye(2); +R = eye(1); +if exist('dlqr', 'file') + [~,P] = dlqr(A,B,Q,R); +else + fprintf('Did not find dlqr (part of the Control Systems Toolbox). Will use 10*Q for the terminal cost matrix.\n'); + P = 10*Q; +end + +% constraints +umin = -0.5; umax = 0.5; +xmin = [-5; -5]; xmax = [5; 5]; + +%% Build MPC problem in Yalmip + +% Cell arrays for x_0, x_1, ..., x_N and u_0, ..., u_N-1 +X = sdpvar(nx,N+1,'full'); % state trajectory: x0,x1,...,xN (columns of X) +U = sdpvar(nu,N,'full'); % input trajectory: u0,...,u_{N-1} (columns of U) +sdpvar r1 r2 % parameters for rotation matrix + +% Initialize objective and constraints of the problem +cost = 0; const = []; + +% Assemble MPC formulation +for i = 1:N + % cost + if( i < N ) + cost = cost + 0.5*X(:,i+1)'*Q*X(:,i+1) + 0.5*U(:,i)'*R*U(:,i); + else + cost = cost + 0.5*X(:,N+1)'*P*X(:,N+1) + 0.5*U(:,N)'*R*U(:,N); + end + + % model + const = [const, X(:,i+1) == A*X(:,i) + B*U(:,i)]; + + % bounds + const = [const, umin <= U(:,i) <= umax]; + const = [const, xmin <= X(:,i+1) <= xmax]; + + % rotation constraint R(k)*x <= R(k)*xmax + const = [const, [r1, -r2; r2, r1]*X(:,i+1) <= [r1, -r2; r2, r1]*xmax]; +end + + +%% Create controller object (generates code) +codeoptions = getOptions('parametricInequalities_solver'); + +parameters = { X(:,1), r1, r2 }; +parameterNames = { 'xinit', sprintf('cos(k*%4.2f)',w), sprintf('sin(k*%4.2f)',w) }; +outputs = U(:,1); +outputNames = {'u0'}; +controller = optimizerFORCES(const, cost, codeoptions, parameters, outputs, parameterNames, outputNames); + + +%% Simulate +x1 = [-4; 2]; +kmax = 30; +X = zeros(nx,kmax+1); X(:,1) = x1; +U = zeros(nu,kmax); +problem.z1 = zeros(2*nx,1); + +for k = 1:kmax + + % Evaluate controller function for parameters + r1 = cos(w*k); r2 = sin(w*k); + [U(:,k),exitflag,info] = controller{ {X(:,k), r1, r2} }; + + % Always check the exitflag in case something went wrong in the solver + if( exitflag == 1 ) + fprintf('Time step %2d: FORCES took %2d iterations and %5.3f ', k, info.it, info.solvetime*1000); + fprintf('milliseconds to solve the problem.\n'); + else + info + error('Some problem in solver'); + end + + % State update + X(:,k+1) = A*X(:,k) + B*U(:,k); +end + + +%% plot +figure(1); clf; +subplot(2,1,1); grid on; title('states'); hold on; +plot([1 kmax], [xmax xmax]', 'r--'); plot([1 kmax], [xmin xmin]', 'r--'); +ylim(1.1*[min(xmin),max(xmax)]); stairs(1:kmax,X(:,1:kmax)'); +subplot(2,1,2); grid on; title('input'); hold on; +plot([1 kmax], [umax umax]', 'r--'); plot([1 kmax], [umin umin]', 'r--'); +ylim(1.1*[min(umin),max(umax)]); stairs(1:kmax,U(:,1:kmax)'); diff --git a/parameter-learning_nd_disc/FORCES_client/generateCode.m b/parameter-learning_nd_disc/FORCES_client/generateCode.m new file mode 100755 index 0000000..13c71e1 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/generateCode.m @@ -0,0 +1,27 @@ +% Generate a custom solver for multistage problems using FORCES Pro. +% +% SUCCESS = GENERATECODE(STAGES) generates, downloads and compiles your +% custom solver for the multistage problem STAGES. Default settings are +% used, and the default parameter is 'stages(1).eq.c', i.e. the offset +% term in the first equality constraint (as typically used in MPC). The +% default output are all stage variables. +% +% SUCCESS = GENERATECODE(STAGES,PARAMS) does the above but with user +% defined parameters. +% +% SUCCESS = GENERATECODE(STAGES,PARAMS,SETTINGS) does the above but with +% user defined parameters and settings. A settings struct can be +% obtained by calling the function GETOPTIONS first. See the embotech +% online documentation for a detailed list of code settings. +% +% SUCCESS = GENERATECODE(STAGES,PARAMS,SETTINGS,OUTVARS) does the above +% but with user defined parameters, settings and outputs. Outputs are +% defined by an array of structs obtained by NEWOUTPUT, or you can also +% define all variables by using GETALLOUTPUTS. +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. +% +% See also MULTISTAGEPROBLEM NEWPARAM NEWOUTPUT GETOPTIONS + diff --git a/parameter-learning_nd_disc/FORCES_client/generateCode.p b/parameter-learning_nd_disc/FORCES_client/generateCode.p new file mode 100755 index 0000000..a80280f Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/generateCode.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/getAllOutputs.m b/parameter-learning_nd_disc/FORCES_client/getAllOutputs.m new file mode 100755 index 0000000..3bd9e7d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/getAllOutputs.m @@ -0,0 +1,22 @@ +% Shortcut code to generate list of outputs such that all variables are +% included. +% +% OUTPUTS = getAllOutputs(STAGES) creates an output struct for use with +% FORCES Pro that returns all variables as outputs, separated according +% to stage. The default name of the variables is "z", appended by the +% stage number. +% +% OUTPUTS = getAllOutputs(STAGES, NAME) as above, but instead of "z" use +% the string NAME to define the output. The stage number is +% automatically appended. +% +% For a detailed explanation for declaring different outputs with FORCES Pro +% please consult the documentation at +% https://www.embotech.com/FORCES-Pro/How-to-use/MATLAB-Interface/Declaring-Outputs +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. +% +% See also newOutput + diff --git a/parameter-learning_nd_disc/FORCES_client/getAllOutputs.p b/parameter-learning_nd_disc/FORCES_client/getAllOutputs.p new file mode 100755 index 0000000..9a4110e Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/getAllOutputs.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/getOptions.m b/parameter-learning_nd_disc/FORCES_client/getOptions.m new file mode 100755 index 0000000..8ae61a5 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/getOptions.m @@ -0,0 +1,17 @@ +% Returns options structure for generating code with FORCES. +% +% OPTS = GETOPTIONS returns a default options struct. +% +% OPTS = GETOPTIONS(NAME) returns a default options struct with the +% solver named NAME. +% +% For a detailed explanation of all possible options with FORCES Pro please +% consult the documentation at +% http://www.embotech.com/FORCES-Pro/How-to-use/Matlab-Interface/Solver-Options +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. +% +% See also GENERATECODE + diff --git a/parameter-learning_nd_disc/FORCES_client/getOptions.p b/parameter-learning_nd_disc/FORCES_client/getOptions.p new file mode 100755 index 0000000..5e3eed5 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/getOptions.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/get_userid.m b/parameter-learning_nd_disc/FORCES_client/get_userid.m new file mode 100755 index 0000000..64f3391 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/get_userid.m @@ -0,0 +1 @@ +userid = '357a30aa-f427-477c-ade6-8e00dbcf42a5'; diff --git a/parameter-learning_nd_disc/FORCES_client/get_userid.py b/parameter-learning_nd_disc/FORCES_client/get_userid.py new file mode 100755 index 0000000..d5c349d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/get_userid.py @@ -0,0 +1 @@ +userid = '357a30aa-f427-477c-ade6-8e00dbcf42a5' diff --git a/parameter-learning_nd_disc/FORCES_client/libusysidl32.so b/parameter-learning_nd_disc/FORCES_client/libusysidl32.so new file mode 100755 index 0000000..fa87b61 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/libusysidl32.so differ diff --git a/parameter-learning_nd_disc/FORCES_client/libusysidl64.so b/parameter-learning_nd_disc/FORCES_client/libusysidl64.so new file mode 100755 index 0000000..44c3839 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/libusysidl64.so differ diff --git a/parameter-learning_nd_disc/FORCES_client/libusysidm64.so b/parameter-learning_nd_disc/FORCES_client/libusysidm64.so new file mode 100755 index 0000000..862fb72 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/libusysidm64.so differ diff --git a/parameter-learning_nd_disc/FORCES_client/license/FORCES-Pro_Academic_Terms.pdf b/parameter-learning_nd_disc/FORCES_client/license/FORCES-Pro_Academic_Terms.pdf new file mode 100755 index 0000000..d09be13 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/license/FORCES-Pro_Academic_Terms.pdf differ diff --git a/parameter-learning_nd_disc/FORCES_client/license/FORCES-Pro_Industrial_Terms.pdf b/parameter-learning_nd_disc/FORCES_client/license/FORCES-Pro_Industrial_Terms.pdf new file mode 100755 index 0000000..cedacd0 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/license/FORCES-Pro_Industrial_Terms.pdf differ diff --git a/parameter-learning_nd_disc/FORCES_client/newOutput.m b/parameter-learning_nd_disc/FORCES_client/newOutput.m new file mode 100755 index 0000000..8d423ad --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/newOutput.m @@ -0,0 +1,33 @@ +% Shortcut code to define an output of the FORCES solver. +% +% OUTVAR = NEWOUTPUT(NAME, FROMSTAGE, IDXWITHINSTAGE) returns a struct +% that defines a valid output to be used with the FORCES code generator, +% where NAME is a label of the output, FROMSTAGE defines from which +% stage variable the output is retrieved, and IDXWITHINSTAGE defines the +% indices within that stage variable. +% +% Example: 1) to have variables 5 to 8 from stage variable 11 as outputs of +% the generated solver, call +% +% output = newOutput('myoutput', 11, 5:8); +% +% 2) to collect all variables with index 3 and 4 from all +% stages N, call +% +% output = newOutput('myoutput', 3:4, 1:N); +% +% For a detailed explanation for declaring different outputs with FORCES Pro +% please consult the documentation +% +% % For the "low-level" interface: +% https://www.embotech.com/FORCES-Pro/User-Manual/Low-level-Interface/Declaring-Outputs +% +% For the "high-level" interface: +% https://www.embotech.com/FORCES-Pro/User-Manual/High-level-Interface/Declaring-Outputs +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. +% +% See also getAllOutputs FORCES_LICENSE FORCESversion + diff --git a/parameter-learning_nd_disc/FORCES_client/newOutput.p b/parameter-learning_nd_disc/FORCES_client/newOutput.p new file mode 100755 index 0000000..04fa5cc Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/newOutput.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/newParam.m b/parameter-learning_nd_disc/FORCES_client/newParam.m new file mode 100755 index 0000000..dbd9f63 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/newParam.m @@ -0,0 +1,61 @@ +% Shortcut code to define a parameter of the FORCES solver. +% +% PAR = NEWPARAM(NAME, MAPS2STAGE, MAPS2DATA) returns a struct that +% defines a valid parameter to be used with the FORCES code generator, +% where NAME is a label of the parameter, MAPS2STAGE defines to which +% stage variable the output is mapped, and MAPS2DATA defines the +% matrix or vector that this parameter substitutes. +% +% PAR = NEWPARAM(NAME, MAPS2STAGE, MAPS2DATA, TYPE) returns a struct that +% defines a valid parameter to be used with the FORCES code generator, +% where TYPE defines the format of the parameter. The TYPE can be set to +% 'diag' only for the parameter 'cost.H'. The default value of TYPE +% is 'dense'. +% +% PAR = NEWPARAM(NAME, MAPS2STAGE, MAPS2DATA, MAPS2MAT) returns a struct +% that defines a valid parameter to be used with the FORCES code generator, +% where MAPS2MAT defines the number of the matrix to which this +% parameter belongs. This is so far only useful if you want to specify, +% for example, that the linear term of quadratic constraints is a +% parameter. +% +% Examples: 1. To have the affine equality vector "stages(1).eq.c" as a +% parameter (often used in MPC), call +% +% par = newParam('myparameter', 1, 'eq.c'); +% +% +% 2. To indicate that a parameter is used in more than one stage, +% you can simply put a vector of indices in the MAPS2STAGE +% argument of the function: +% +% par = newParam('Hessians', 1:N-1, 'cost.H'); +% +% This indicates that the parameter named 'Hessians' will be +% the same for all stages 1 to N-1 and replaces the 'cost.H' +% matrix in these stages. +% +% +% 3. To specify a diagonal Hessian call +% +% par = newParam('Hessian', 1, 'cost.H', 'diag'); +% +% The parameter size will automatically be adjusted to a +% column vector holding the diagonal of H. +% +% +% 4. To specify that this parameter belongs to the 3rd quadratic +% constraint of stage 7, and specifies its linear term, use +% +% par = newParam('L', 7, 'ineq.q.l', 3); +% +% +% For a detailed explanation for declaring different parameters with FORCES Pro +% please consult the documentation at +% https://www.embotech.com/FORCES-Pro/How-to-use/MATLAB-Interface/Parametric-Problems +% +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. +% +% See also MULTISTAGEPROBLEM NEWOUTPUT GENERATECODE diff --git a/parameter-learning_nd_disc/FORCES_client/newParam.p b/parameter-learning_nd_disc/FORCES_client/newParam.p new file mode 100755 index 0000000..d40e14c Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/newParam.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/stages2qcqp.m b/parameter-learning_nd_disc/FORCES_client/stages2qcqp.m new file mode 100755 index 0000000..a97a0aa --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/stages2qcqp.m @@ -0,0 +1,19 @@ +% Convert a FORCES Pro stages structure to QCQP input data format. +% +% [H,f,Aineq,bineq,Aeq,beq,l,Q,r,lb,ub] = STAGES2QCQP(STAGES,PARAMS,PROBLEM) converts +% the structure STAGES into a QCQP description for the quadratically +% constrained problem +% +% minimize 0.5*x'*H*x + f'*x +% subject to Aineq*x <= bineq +% Aeq*x == beq +% x'*Q{i}*x + l(:,i)'*x <= r(i) for i=1...M +% +% After conversion, the problem above can be solved, for example, +% using QUADPROG by calling +% +% x = quadprog(H,f,Aineq,bineq,Aeq,beq,lb,ub) +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. + diff --git a/parameter-learning_nd_disc/FORCES_client/stages2qcqp.p b/parameter-learning_nd_disc/FORCES_client/stages2qcqp.p new file mode 100755 index 0000000..089e06b Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/stages2qcqp.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/substituteParams.m b/parameter-learning_nd_disc/FORCES_client/substituteParams.m new file mode 100755 index 0000000..ea7628d --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/substituteParams.m @@ -0,0 +1,15 @@ +% Substitution of parametric problem data +% +% STAGES = SUBSTITUIONPARAMS(STAGES, PARAMSTRUCT, PARAM) +% returns an array of multistage structs without parameters that can be +% used by STAGES2QCQP to form the matrices of a (sparse) QCQP, which then +% in turn can be solved by other solvers. +% +% STAGES: is the structure of the multistage formulation +% PARAMSTRUCT: are the parameters generated by NEWPARAM +% PARAM: are the values of the parameters +% +% See also MULTISTAGEPROBLEM, NEWPARAM, STAGES2QCQP +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. diff --git a/parameter-learning_nd_disc/FORCES_client/substituteParams.p b/parameter-learning_nd_disc/FORCES_client/substituteParams.p new file mode 100755 index 0000000..d329887 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/substituteParams.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/updateClient.m b/parameter-learning_nd_disc/FORCES_client/updateClient.m new file mode 100755 index 0000000..948a570 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/updateClient.m @@ -0,0 +1,10 @@ +% Update script for automatic update of the FORCES Pro client. +% +% UPDATECLIENT without any arguments uses the default server to grab the +% client, and updates all corresponding client files. +% +% UPDATECLIENT(URL) overrides the default server selection and uses the +% server located at URL instead. +% +% This file is part of the FORCES Pro client software for Matlab. +% (c) embotech AG, 2013-2018, Zurich, Switzerland. All rights reserved. \ No newline at end of file diff --git a/parameter-learning_nd_disc/FORCES_client/updateClient.p b/parameter-learning_nd_disc/FORCES_client/updateClient.p new file mode 100755 index 0000000..cd3cb9f Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/updateClient.p differ diff --git a/parameter-learning_nd_disc/FORCES_client/usysid.mexa64 b/parameter-learning_nd_disc/FORCES_client/usysid.mexa64 new file mode 100755 index 0000000..34c7f31 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/usysid.mexa64 differ diff --git a/parameter-learning_nd_disc/FORCES_client/usysid.mexmaci64 b/parameter-learning_nd_disc/FORCES_client/usysid.mexmaci64 new file mode 100755 index 0000000..19ba0e3 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/usysid.mexmaci64 differ diff --git a/parameter-learning_nd_disc/FORCES_client/usysid.mexw32 b/parameter-learning_nd_disc/FORCES_client/usysid.mexw32 new file mode 100755 index 0000000..2f31089 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/usysid.mexw32 differ diff --git a/parameter-learning_nd_disc/FORCES_client/usysid.mexw64 b/parameter-learning_nd_disc/FORCES_client/usysid.mexw64 new file mode 100755 index 0000000..87b1644 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/usysid.mexw64 differ diff --git a/parameter-learning_nd_disc/FORCES_client/usysid.py b/parameter-learning_nd_disc/FORCES_client/usysid.py new file mode 100755 index 0000000..55b8c27 --- /dev/null +++ b/parameter-learning_nd_disc/FORCES_client/usysid.py @@ -0,0 +1,45 @@ +import ctypes# do not delete this comment! +import os +import numpy as np +import numpy.ctypeslib as npct +import sys + +def getSysId(): + + # determine library name + if sys.platform.startswith('win'): + if sys.maxsize > 2**32: + libname = 'usysidw64.dll' + else: + libname = 'usysidw32.dll' + elif sys.platform == "darwin": + libname = 'libusysidm64.so' + elif sys.platform.startswith('linux'): + if sys.maxsize > 2**32: + libname = 'libusysidl64.so' + else: + libname = 'libusysidl32.so' + else: + raise Exception("Unknown platform") + + + # function to call + try: + _lib = ctypes.CDLL(os.path.join(os.path.dirname(os.path.abspath(__file__)),'lib',libname)) + cfunc = getattr(_lib,'__FORCESsolver___computesystemuniqueid') + except: + _lib = ctypes.CDLL(os.path.join(os.path.dirname(os.path.abspath(__file__)),libname)) + cfunc = getattr(_lib,'__FORCESsolver___computesystemuniqueid') + + # determine data types for solver function prototype + intarrayType = ctypes.c_ushort * 5 + cfunc.restype = ctypes.POINTER(intarrayType) + + UID = intarrayType() + P_UID = ctypes.pointer(UID) + + P_UID = _lib.__FORCESsolver___computesystemuniqueid() + + sysid = npct.as_array(P_UID.contents) + return sysid + diff --git a/parameter-learning_nd_disc/FORCES_client/usysidw32.dll b/parameter-learning_nd_disc/FORCES_client/usysidw32.dll new file mode 100755 index 0000000..2715761 Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/usysidw32.dll differ diff --git a/parameter-learning_nd_disc/FORCES_client/usysidw64.dll b/parameter-learning_nd_disc/FORCES_client/usysidw64.dll new file mode 100755 index 0000000..2ce584e Binary files /dev/null and b/parameter-learning_nd_disc/FORCES_client/usysidw64.dll differ diff --git a/parameter-learning_nd_disc/GPSMeterConverter.py b/parameter-learning_nd_disc/GPSMeterConverter.py new file mode 100755 index 0000000..7d57812 --- /dev/null +++ b/parameter-learning_nd_disc/GPSMeterConverter.py @@ -0,0 +1,24 @@ +import numpy as np + + +class GPSMeterConverter: + + R = 6371 * 1000 # radius of earth in meter + + def __init__(self, longitude, latitude, altitude): + self.cos_origin_lat = np.cos(np.deg2rad(latitude)) + self.origin_long = self.R * np.deg2rad(longitude) * self.cos_origin_lat + self.origin_lat = self.R * np.deg2rad(latitude) + self.origin_alt = altitude + + def gps_to_meter(self, longitude, latitude, altitude): + x = self.R * np.deg2rad(longitude) * self.cos_origin_lat - self.origin_long + y = self.R * np.deg2rad(latitude) - self.origin_lat + z = altitude - self.origin_alt + return [x, y, z] + + def meter_to_gps(self, x, y, z): + longitude = np.rad2deg((x + self.origin_long) / (self.R * self.cos_origin_lat)) + latitude = np.rad2deg((y + self.origin_lat) / self.R) + altitude = z + self.origin_alt + return [longitude, latitude, altitude] \ No newline at end of file diff --git a/parameter-learning_nd_disc/IBO b/parameter-learning_nd_disc/IBO new file mode 160000 index 0000000..17e502e --- /dev/null +++ b/parameter-learning_nd_disc/IBO @@ -0,0 +1 @@ +Subproject commit 17e502e4fab4b1c20abbe26c6ce8a258c32bf49a diff --git a/parameter-learning_nd_disc/Potential problem b/parameter-learning_nd_disc/Potential problem new file mode 100755 index 0000000..d3909b2 --- /dev/null +++ b/parameter-learning_nd_disc/Potential problem @@ -0,0 +1 @@ +1 What is the function of random seed? diff --git a/parameter-learning_nd_disc/QuadCameraContourTrajectory.py b/parameter-learning_nd_disc/QuadCameraContourTrajectory.py new file mode 100755 index 0000000..74b4847 --- /dev/null +++ b/parameter-learning_nd_disc/QuadCameraContourTrajectory.py @@ -0,0 +1,245 @@ +import numpy as np +from scipy.interpolate import CubicSpline, pchip_interpolate +import FORCESNLPsolver_py + + +class QuadCameraContourTrajectory: + + # Parameters + nStates = 18 + nInputs = 6 + nVars = nStates + nInputs # number of variables + nPars = 41 # number of runtime parameters + nStages = 60 # horizon length + poly_order = 2 # order for local polynomial fitting + + def __init__(self, keyframes, keyorientations, options): + + self.keyframes = keyframes + self.keyorientations = keyorientations + self.nKeyframes = self.keyframes.shape[0] + + # Initialize state vector indices + self.inputIndices = np.arange(0, self.nInputs) + # Position and orientation state indices quadrotor + self.posStateIndices = np.arange(self.nInputs, self.nInputs + 3) + self.velStateIndices = np.arange(self.posStateIndices[-1] + 1, self.posStateIndices[-1] + 4) + self.accStateIndices = np.arange(self.velStateIndices[-1] + 1, self.velStateIndices[-1] + 4) + # Gimbal state indices + self.yawStateIndex = self.accStateIndices[-1] + 1 + self.pitchStateIndex = self.yawStateIndex + 1 + self.yawVelStateIndex = self.yawStateIndex + 2 + self.pitchVelStateIndex = self.yawStateIndex + 3 + self.yawAccStateIndex = self.yawStateIndex + 4 + self.pitchAccStateIndex = self.yawStateIndex + 5 + # Theta state indices + self.thetaStateIndex = self.pitchAccStateIndex + 1 + self.thetaVelStateIndex = self.thetaStateIndex + 1 + # End time state index + self.endTimeStateIndex = self.thetaVelStateIndex + 1 + + # Initialize options + self.parse_options(options) + + def parse_options(self, options): + # Initialize(default) parameters + if 'contour_weight' not in options: + options["contour_weight"] = 0 + + if 'lag_weight' not in options: + options["lag_weight"] = 0 + + if 'position_weight' not in options: + options["position_weight"] = 0 + + if 'progress_weight' not in options: + options["progress_weight"] = 0 + + if 'smoothness_weight' not in options: + options["smoothness_weight"] = 1 + + if 'angular_smoothness_weight' not in options: + options["angular_smoothness_weight"] = 1 + + if 'theta_input_weight' not in options: + options["theta_input_weight"] = 1 + + if 'min_time_weight' not in options: + options["min_time_weight"] = 1 + + if 'velocity_weight' not in options: + options["velocity_weight"] = 0 + + if 'gimbal_weight' not in options: + options["gimbal_weight"] = 0 + + if 'timing_weight' not in options: + options["timing_weight"] = 0 + + if 'end_time_weight' not in options: + options["end_time_weight"] = 0 + + if 'velocity_profile' not in options: + velocities = np.zeros(self.nKeyframes) + options["velocity_profile"] = velocities + + if 'keytimes' not in options: + times = np.arange(0, 2 * self.nKeyframes, 2) + options["keytimes"] = times + + if 'fitlength' not in options: + options['fitlength'] = 10 + + # Extract options + self.contour_weight = options["contour_weight"] + self.lag_weight = options["lag_weight"] + self.position_weight = options["position_weight"] + self.progress_weight = options["progress_weight"] + self.angular_smoothness_weight = options["angular_smoothness_weight"] + self.smoothness_weight = options["smoothness_weight"] + self.theta_input_weight = options["theta_input_weight"] + self.min_time_weight = options["min_time_weight"] + self.velocity_weight = options["velocity_weight"] + self.gimbal_weight = options["gimbal_weight"] + self.timing_weight = options["timing_weight"] + self.end_time_weight = options["end_time_weight"] + self.velocity_profile = options["velocity_profile"] + self.keytimes = options["keytimes"] + self.fitlength = options['fitlength'] + + def generate_trajectory(self): + # Interpolate keyframes + self.interpolate_keyframes() + # Solve problem + [trajectory, _] = self.solve_system() + [keytimes, self.keyframe_time_idxs, self.times, self.T] = self.get_timing(trajectory) + return trajectory, keytimes + + def interpolate_keyframes(self): + # Get theta from keyframes (calculate chord lengths between keyframes) + self.theta_of_keyframes = np.append([0], np.cumsum(np.power(np.dot(np.power(np.diff(self.keyframes, axis=0), 2), + np.ones((3, 1))), 0.25))) + self.theta = np.linspace(self.theta_of_keyframes[0], self.theta_of_keyframes[-1], + self.nStages + 1) + # Construct spline functions for position which are parameterized by theta + # self.pos_spline = CubicSpline(self.theta_of_keyframes, self.keyframes, axis=0) + # Compute reference positions with spline functions + # self.ref_positions = self.pos_spline(self.theta) + # Compute reference positions with pchip_interpolate parameterized by theta + self.ref_positions = np.zeros((self.nStages + 1, 3)) + self.ref_positions[:,0] = pchip_interpolate(self.theta_of_keyframes, self.keyframes[:, 0], self.theta) + self.ref_positions[:,1] = pchip_interpolate(self.theta_of_keyframes, self.keyframes[:, 1], self.theta) + self.ref_positions[:,2] = pchip_interpolate(self.theta_of_keyframes, self.keyframes[:, 2], self.theta) + + # pitch and yaw spline (parameterized by theta) + self.ref_yaw = pchip_interpolate(self.theta_of_keyframes, self.keyorientations[:, 0], self.theta) + self.ref_pitch = pchip_interpolate(self.theta_of_keyframes, self.keyorientations[:, 1], self.theta) + + # time spline (parameterized by theta) + self.ref_timings = pchip_interpolate(self.theta_of_keyframes, self.keytimes, self.theta) + # velocity spline (parameterized by theta) + if self.velocity_weight != 0: + self.ref_velocities = pchip_interpolate(self.theta_of_keyframes, self.velocity_profile, self.theta) + + def solve_system(self): + # Initialize information for solver + progress_id = np.zeros(self.nStages + 1) + solution = 1e5 + old_solution = 1e6 + exitflag = 0 + # initial conditions + Xout = np.zeros((self.nInputs + self.nStates, self.nStages + 1)) + problem = FORCESNLPsolver_py.FORCESNLPsolver_params + problem['x0'] = np.zeros((self.nStages + 1) * self.nVars) + problem['xinit'] = np.zeros(self.nStates - 2) # remove end time and z-acc + problem['xinit'][0:3] = self.ref_positions[0, :] + problem['xinit'][3] = self.ref_yaw[0] + problem['xinit'][4] = self.ref_pitch[0] + problem['xfinal'] = np.zeros(self.nStates - 7) # remove end time, z-acc, pos, yaw and pitch + problem['xfinal'][0] = self.theta_of_keyframes[-1] + opt_count = 1 + + # Solve until we get a valid trajectory + while exitflag != 1 or (old_solution > solution and solution > 2) or opt_count < 3: + # Setup the problem + old_solution = solution + self.old_progress_id = np.copy(progress_id) + + # Compute polynomial coefficients and parameters for every time-step + self.param = np.zeros((self.nPars, self.nStages + 1)) + end_time = self.keytimes[self.keyframes.shape[0] - 1] + for i in range(0, progress_id.shape[0]): + k = progress_id[i] + if opt_count == 1: + fitrange = np.arange(0, self.nStages + 1, dtype=int) + elif k >= self.nStages - (self.fitlength / 2): + fitrange = np.arange(self.nStages + 1 - self.fitlength, self.nStages + 1, dtype=int) + elif k > (self.fitlength / 2): + fitrange = np.arange(k - (self.fitlength / 2), k + (self.fitlength / 2), dtype=int) + else: + fitrange = np.arange(0, self.fitlength, dtype=int) + + px = np.polyfit(self.theta[fitrange], self.ref_positions[fitrange, 0], self.poly_order) + py = np.polyfit(self.theta[fitrange], self.ref_positions[fitrange, 1], self.poly_order) + pz = np.polyfit(self.theta[fitrange], self.ref_positions[fitrange, 2], self.poly_order) + dpx = np.polyder(px) + dpy = np.polyder(py) + dpz = np.polyder(pz) + gy = np.polyfit(self.theta[fitrange], self.ref_yaw[fitrange], self.poly_order) + gp = np.polyfit(self.theta[fitrange], self.ref_pitch[fitrange], self.poly_order) + t = np.polyfit(self.theta[fitrange], self.ref_timings[fitrange], self.poly_order) + if self.velocity_weight != 0: + ref_vel = np.polyfit(self.theta[fitrange], self.ref_velocities[fitrange], self.poly_order) + else: + ref_vel = [0, 0, 0] + + self.param[:, i] = np.concatenate((px, py, pz, dpx, dpy, dpz, [self.min_time_weight, + self.contour_weight, self.lag_weight, + self.position_weight, + self.smoothness_weight, + self.progress_weight, + self.theta_input_weight], gy, gp, + [self.gimbal_weight], t, + [self.timing_weight, end_time, self.end_time_weight, i], ref_vel, + [self.velocity_weight], [self.angular_smoothness_weight])) + # Stack up parameters + problem['all_parameters'] = self.param.reshape((self.nStages + 1) * (self.nPars), order='F') + + # Solve the problem + [solverout, exitflag, info] = FORCESNLPsolver_py.FORCESNLPsolver_solve(problem) + print("exitflag = {}".format(exitflag)) + # print("f-value = {}".format(info.pself)) + + # Convert solver output + for i in range(0, self.nStages + 1): + index = 'x' + str(i + 1).zfill(2) + Xout[:, i] = solverout[index][0:self.nInputs + self.nStates] + + # Determine progress index with respect to reference theta for next iteration + for pind in range(0, self.nStages + 1): + idx = np.argmin(np.abs(self.theta - Xout[self.thetaStateIndex, pind])) # index of closest value + progress_id[pind] = idx + + # Compute solution to decide when to stop iterating + solution = np.mean(np.abs(progress_id - self.old_progress_id)) + print("solution = {}".format(solution)) + # Stop optimizing in case solver reached max iteractions + if exitflag == 0: + break + opt_count += 1 + + return [Xout, exitflag] + + def get_timing(self, trajectory): + no_keyframes = self.keyframes.shape[0] + keyframe_time_idxs = np.zeros(no_keyframes, dtype=int) + for i in range(no_keyframes-1): + tmp = np.sum(np.square(np.abs((trajectory[self.posStateIndices, :].transpose() + - self.keyframes[i, :]).transpose())), axis=0) + idx = np.argmin(tmp) # index of closest value + keyframe_time_idxs[i] = idx + + keyframe_time_idxs[-1] = self.nStages + T = trajectory[self.endTimeStateIndex, -1] / self.nStages + times = np.arange(0, self.nStages + 1) * T + return [times[keyframe_time_idxs], keyframe_time_idxs, times, T] \ No newline at end of file diff --git a/parameter-learning_nd_disc/Readings/RW2.pdf b/parameter-learning_nd_disc/Readings/RW2.pdf new file mode 100755 index 0000000..d6a0d9d Binary files /dev/null and b/parameter-learning_nd_disc/Readings/RW2.pdf differ diff --git a/parameter-learning_nd_disc/Readings/RW4.pdf b/parameter-learning_nd_disc/Readings/RW4.pdf new file mode 100755 index 0000000..0967122 Binary files /dev/null and b/parameter-learning_nd_disc/Readings/RW4.pdf differ diff --git a/parameter-learning_nd_disc/Readings/RW5.pdf b/parameter-learning_nd_disc/Readings/RW5.pdf new file mode 100755 index 0000000..5b9f0e0 Binary files /dev/null and b/parameter-learning_nd_disc/Readings/RW5.pdf differ diff --git a/parameter-learning_nd_disc/Readings/new paper/83902.pdf b/parameter-learning_nd_disc/Readings/new paper/83902.pdf new file mode 100755 index 0000000..c2adeb4 Binary files /dev/null and b/parameter-learning_nd_disc/Readings/new paper/83902.pdf differ diff --git a/parameter-learning_nd_disc/Readings/new paper/EFFICIENT PREFERENCE LEARNING WITH PAIRWISE CONTINUOUS OBSERVATIONS AND GAUSSIAN PROCESSES.pdf b/parameter-learning_nd_disc/Readings/new paper/EFFICIENT PREFERENCE LEARNING WITH PAIRWISE CONTINUOUS OBSERVATIONS AND GAUSSIAN PROCESSES.pdf new file mode 100755 index 0000000..5cb2dc5 Binary files /dev/null and b/parameter-learning_nd_disc/Readings/new paper/EFFICIENT PREFERENCE LEARNING WITH PAIRWISE CONTINUOUS OBSERVATIONS AND GAUSSIAN PROCESSES.pdf differ diff --git a/parameter-learning_nd_disc/Readings/ubc_2011_spring_brochu_eric.pdf b/parameter-learning_nd_disc/Readings/ubc_2011_spring_brochu_eric.pdf new file mode 100755 index 0000000..165edfe Binary files /dev/null and b/parameter-learning_nd_disc/Readings/ubc_2011_spring_brochu_eric.pdf differ diff --git a/parameter-learning_nd_disc/data/12_record_2.h5 b/parameter-learning_nd_disc/data/12_record_2.h5 new file mode 100755 index 0000000..c0ebb21 Binary files /dev/null and b/parameter-learning_nd_disc/data/12_record_2.h5 differ diff --git a/parameter-learning_nd_disc/data/1_record_2.h5 b/parameter-learning_nd_disc/data/1_record_2.h5 new file mode 100755 index 0000000..d5bb388 Binary files /dev/null and b/parameter-learning_nd_disc/data/1_record_2.h5 differ diff --git a/parameter-learning_nd_disc/data/3_record_2.h5 b/parameter-learning_nd_disc/data/3_record_2.h5 new file mode 100755 index 0000000..8fb053b Binary files /dev/null and b/parameter-learning_nd_disc/data/3_record_2.h5 differ diff --git a/parameter-learning_nd_disc/data/4_record_1.h5 b/parameter-learning_nd_disc/data/4_record_1.h5 new file mode 100755 index 0000000..dce227c Binary files /dev/null and b/parameter-learning_nd_disc/data/4_record_1.h5 differ diff --git a/parameter-learning_nd_disc/data/6_snap_2.h5 b/parameter-learning_nd_disc/data/6_snap_2.h5 new file mode 100755 index 0000000..adf4da8 Binary files /dev/null and b/parameter-learning_nd_disc/data/6_snap_2.h5 differ diff --git a/parameter-learning_nd_disc/data/7_record_2.h5 b/parameter-learning_nd_disc/data/7_record_2.h5 new file mode 100755 index 0000000..3d59886 Binary files /dev/null and b/parameter-learning_nd_disc/data/7_record_2.h5 differ diff --git a/parameter-learning_nd_disc/data/8_horus_1.h5 b/parameter-learning_nd_disc/data/8_horus_1.h5 new file mode 100755 index 0000000..2b1f76b Binary files /dev/null and b/parameter-learning_nd_disc/data/8_horus_1.h5 differ diff --git a/parameter-learning_nd_disc/data/9_horus_2.h5 b/parameter-learning_nd_disc/data/9_horus_2.h5 new file mode 100755 index 0000000..334c497 Binary files /dev/null and b/parameter-learning_nd_disc/data/9_horus_2.h5 differ diff --git a/parameter-learning_nd_disc/data/NJ_Hoover_Awesome.h5 b/parameter-learning_nd_disc/data/NJ_Hoover_Awesome.h5 new file mode 100755 index 0000000..ce79c88 Binary files /dev/null and b/parameter-learning_nd_disc/data/NJ_Hoover_Awesome.h5 differ diff --git a/parameter-learning_nd_disc/data/NJ_TowerTilt.h5 b/parameter-learning_nd_disc/data/NJ_TowerTilt.h5 new file mode 100755 index 0000000..8eed76b Binary files /dev/null and b/parameter-learning_nd_disc/data/NJ_TowerTilt.h5 differ diff --git a/parameter-learning_nd_disc/data/SIGASIA_Shot1_Leko1.h5 b/parameter-learning_nd_disc/data/SIGASIA_Shot1_Leko1.h5 new file mode 100755 index 0000000..9d914bf Binary files /dev/null and b/parameter-learning_nd_disc/data/SIGASIA_Shot1_Leko1.h5 differ diff --git a/parameter-learning_nd_disc/data/p3_record_1.h5 b/parameter-learning_nd_disc/data/p3_record_1.h5 new file mode 100755 index 0000000..8a3a8b8 Binary files /dev/null and b/parameter-learning_nd_disc/data/p3_record_1.h5 differ diff --git a/parameter-learning_nd_disc/data/rd_towertilt2.h5 b/parameter-learning_nd_disc/data/rd_towertilt2.h5 new file mode 100755 index 0000000..5b8bcc3 Binary files /dev/null and b/parameter-learning_nd_disc/data/rd_towertilt2.h5 differ diff --git a/parameter-learning_nd_disc/data/sab_closeUpCircle.h5 b/parameter-learning_nd_disc/data/sab_closeUpCircle.h5 new file mode 100755 index 0000000..1065c6a Binary files /dev/null and b/parameter-learning_nd_disc/data/sab_closeUpCircle.h5 differ diff --git a/parameter-learning_nd_disc/data/sab_downThenUp.h5 b/parameter-learning_nd_disc/data/sab_downThenUp.h5 new file mode 100755 index 0000000..b88b3e4 Binary files /dev/null and b/parameter-learning_nd_disc/data/sab_downThenUp.h5 differ diff --git a/parameter-learning_nd_disc/data/saffa.h5 b/parameter-learning_nd_disc/data/saffa.h5 new file mode 100755 index 0000000..62b658e Binary files /dev/null and b/parameter-learning_nd_disc/data/saffa.h5 differ diff --git a/parameter-learning_nd_disc/data_trajectory.pkl b/parameter-learning_nd_disc/data_trajectory.pkl new file mode 100755 index 0000000..399114e Binary files /dev/null and b/parameter-learning_nd_disc/data_trajectory.pkl differ diff --git a/parameter-learning_nd_disc/demo.py b/parameter-learning_nd_disc/demo.py new file mode 100755 index 0000000..c750c87 --- /dev/null +++ b/parameter-learning_nd_disc/demo.py @@ -0,0 +1,112 @@ +""" +demo.py + +Just a little script to demonstrate how to call the interactive Bayesian optimization (IBO/EGO) code. + +""" +import h5py +from numpy import array, arange, zeros +from matplotlib.pylab import * + +from pref_GP import GaussianProcess, PrefGaussianProcess +from kernel import GaussianKernel_iso +from sklearn.metrics.pairwise import rbf_kernel +from QuadCameraContourTrajectory import QuadCameraContourTrajectory + +#from ego.acquisition import EI, UCB, maximizeEI, maximizeUCB +#from ego.acquisition.prefutil import query2prefs +#from ego.acquisition.gallery import fastUCBGallery +#from ego.utils.testfunctions import Hartman6 +def load_trajectory(traj_name): + with h5py.File('./data/' + traj_name, 'r') as hf: + keytimes = np.array(hf.get('keytimes')) + keyframes = np.transpose(np.array(hf.get('keyframes'))) + keyorientations = np.transpose(np.array(hf.get('keyorientations'))) + trajectory = np.transpose(np.array(hf.get('trajectory'))) + return keyframes, keyorientations, keytimes, trajectory + +def demoPrefGallery(): + + kernel = GaussianKernel_iso([2]) + + # set up a Preference Gaussian Process, in which the observations are + # preferences, rather than scalars + # assume left is prefered +# left = array([[10, 10], [10, 1], [10, 20], [10, 30], [10, 20], [10, 30], [1, 0.1]]) +# right = array([[20, 40], [10, 10], [10, 1], [40, 20], [10, 1], [0.1, 1], [30, 10]]) + + left = array([[1, 10], [10, 20], [1, 10], [0.2, 10]]) + right = array([[10, 10], [10, 10], [10, 20], [10, 20]]) + #left = array([[1, 10], [10, 1], [10, 20]]) + #right = array([[10, 1], [10, 10], [10, 1]]) + pref = zeros((2,left.shape[0],left.shape[1])) + pref[0,:,:] = left + pref[1,:,:] = right + GP = PrefGaussianProcess(kernel,prefs = pref) + p_bounds = array([[0.2, 10], [10, 20]]) + + for i in range(0,20): + print('iteration:', i) + new_x = GP.find_newpoint(p_bounds) + + #only need to modify build_preference + pref = GP.build_preference_ge(new_x.reshape((1,-1))) + print(pref) + #no preference + if (pref.size == 0): + break + GP.addPreferences(pref) + + #show preference + prefs = GP.preferences + for i in range(0,prefs.shape[1]): + left = prefs[0,i,:] + right = prefs[1,i,:] + print ('%s preferred to %s' % (left, right)) + + trajectory_name = 'saffa.h5' + + contour_weight, jerk_weight = GP.X[np.argmax(GP.Y)] + + # weights term in paper + lag_weight = 1 # weight on e^l + angular_weight = 1 # w_phi and w_psi + # learn jerk + # w_j on position + angular_jerk_weight = 1 # w_j on angles + theta_input_weight = 1 # weight on v_i + # not necessary + min_time_weight = 1 # w_end + end_time_weight = 0 # w_len + timing_weight = 0 # w_t + + # load trajectory + keyframes, keyorientations, keytimes, gps_trajectory = load_trajectory(trajectory_name) + if keyframes.shape[1] > 3: + keyframes = keyframes[:,0:3] + + # specifying weights for optimizer + options = dict() + options["keytimes"] = keytimes + options["lag_weight"] = lag_weight + options["contour_weight"] = contour_weight + options["gimbal_weight"] = angular_weight + options["smoothness_weight"] = jerk_weight + options["angular_smoothness_weight"] = angular_jerk_weight + options["theta_input_weight"] = theta_input_weight + options["min_time_weight"] = min_time_weight + options["end_time_weight"] = end_time_weight + options["timing_weight"] = timing_weight + + trajGen = QuadCameraContourTrajectory(keyframes, keyorientations, options) + trajectory, keytimes = trajGen.generate_trajectory() + end_time = trajectory[trajGen.endTimeStateIndex, -1]; + + print(GP.loss) + print(np.abs(end_time - 25)) + print(GP.X[np.argmax(GP.Y)]) + + +if __name__ == '__main__': + demoPrefGallery() + diff --git a/parameter-learning_nd_disc/ei.py b/parameter-learning_nd_disc/ei.py new file mode 100644 index 0000000..ceba92b --- /dev/null +++ b/parameter-learning_nd_disc/ei.py @@ -0,0 +1,153 @@ +""" +source: https://github.com/lefnire/tforce_btc_trader/blob/master/gp.py +Bayesian optimisation of loss functions. +""" + +import numpy as np +import sklearn.gaussian_process as gp + +from scipy.stats import norm +from scipy.optimize import minimize + +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D + +def expected_improvement(x, x_max, kernel, gaussian_process, evaluated_loss, greater_is_better=False, n_params=1): + """ expected_improvement + + Expected improvement acquisition function. + + Arguments: + ---------- + x: array-like, shape = [n_samples, n_hyperparams] + The point for which the expected improvement needs to be computed. + gaussian_process: GaussianProcessRegressor object. + Gaussian process trained on previously evaluated hyperparameters. + evaluated_loss: Numpy array. + Numpy array that contains the values off the loss function for the previously + evaluated hyperparameters. + greater_is_better: Boolean. + Boolean flag that indicates whether the loss function is to be maximised or minimised. + n_params: int. + Dimension of the hyperparameter space. + + """ + + x_to_predict = x.reshape(-1, n_params) + + mu, sigma = gaussian_process.posteriors(x_to_predict) + ''' + add covariance between predicted_new_point and existing max point + ''' + sigma += kernel.cov(x_max,x_max) -2*kernel.cov(x_to_predict,x_max) + + if greater_is_better: + loss_optimum = np.max(evaluated_loss) + else: + loss_optimum = np.min(evaluated_loss) + + scaling_factor = (-1) ** (not greater_is_better) + + # In case sigma equals zero + with np.errstate(divide='ignore'): + Z = scaling_factor * (mu - loss_optimum) / sigma.reshape((-1, 1)) + expected_improvement = scaling_factor * (mu - loss_optimum) * norm.cdf(Z) + sigma.reshape((-1, 1)) * norm.pdf(Z) + expected_improvement[sigma == 0.0] == 0.0 + + return -expected_improvement + + +def sample_next_hyperparameter(acquisition_func, x_max, kernel, gaussian_process, evaluated_loss, greater_is_better=False, + bounds=np.atleast_2d([0, 10]), n_restarts=25): + """ sample_next_hyperparameter + + Proposes the next hyperparameter to sample the loss function for. + + Arguments: + ---------- + acquisition_func: function. + Acquisition function to optimise. + gaussian_process: GaussianProcessRegressor object. + Gaussian process trained on previously evaluated hyperparameters. + evaluated_loss: array-like, shape = [n_obs,] + Numpy array that contains the values off the loss function for the previously + evaluated hyperparameters. + greater_is_better: Boolean. + Boolean flag that indicates whether the loss function is to be maximised or minimised. + bounds: Tuple. + Bounds for the L-BFGS optimiser. + n_restarts: integer. + Number of times to run the minimiser with different starting points. + + """ + best_x = None + best_acquisition_value = 1 + n_params = bounds.shape[0] + + + grid_1d = [] + for i in range(0, n_params): + tmp = np.linspace(bounds[i,0], bounds[i,1],50) + grid_1d.append(tmp) + + grid = np.meshgrid(*grid_1d) + + grid_points = np.zeros((50**n_params, n_params)) + for i in range(0, len(grid[0].ravel())): + for ith_param in range(0, n_params): + grid_points[i, ith_param] = grid[ith_param].ravel()[i] + ''' + ei_grid = expected_improvement(grid_points, x_max, kernel, gaussian_process, evaluated_loss, greater_is_better, n_params) + ei_grid = np.atleast_2d(ei_grid.reshape((100,100))) + print(ei_grid.shape) + fig = plt.figure() + ax = fig.add_subplot(1, 1, 1, projection='3d') + #ax.plot_surface(grid[0], grid[1], -ei_grid, rstride=1, cstride=1, linewidth=0, antialiased=False) + ax.scatter(grid[0], grid[1], -ei_grid, marker='o') +# ax.set_zlim3d(-1, 1) +# plt.imshow(ei_grid) + plt.show() + print('max', -np.min(ei_grid)) + ''' + + + ei_grid = np.zeros(50**n_params) + for i in range(0, len(grid[0].ravel())): + ''' + x = np.empty_like(x_max) + for ith_param in range(0, n_params): + x[ith_param] = grid[ith_param].ravel()[i] + + x = x.reshape(1, n_params) + ''' + ei_value = expected_improvement(grid_points[i,:], x_max, kernel, gaussian_process, evaluated_loss, greater_is_better, n_params) + ei_grid[i] = ei_value + if ei_value < best_acquisition_value: + best_acquisition_value = ei_value + best_x = grid_points[i,:] + + print('best_value: ', -best_acquisition_value) + print('best_x: ', best_x) + ei_grid = np.atleast_2d(ei_grid.reshape((50,50))) + print(ei_grid.shape) + fig = plt.figure() + ax = fig.add_subplot(1, 1, 1, projection='3d') + #ax.plot_surface(grid[0], grid[1], -ei_grid, rstride=1, cstride=1, linewidth=0, antialiased=False) + ax.scatter(grid[0], grid[1], -ei_grid, marker='o') +# ax.set_zlim3d(-1, 1) +# plt.imshow(ei_grid) + plt.show() + ''' + for starting_point in np.random.uniform(bounds[:, 0], bounds[:, 1], size=(n_restarts, n_params)): + + res = minimize(fun=acquisition_func, + x0=starting_point.reshape(1, -1), + bounds=bounds, + method='L-BFGS-B', + args=(x_max, kernel, gaussian_process, evaluated_loss, greater_is_better, n_params)) + + if res.fun < best_acquisition_value: + best_acquisition_value = res.fun + best_x = np.ndarray.flatten(res.x) + ''' + return best_x \ No newline at end of file diff --git a/parameter-learning_nd_disc/generate_kml_file.py b/parameter-learning_nd_disc/generate_kml_file.py new file mode 100755 index 0000000..1da39dd --- /dev/null +++ b/parameter-learning_nd_disc/generate_kml_file.py @@ -0,0 +1,71 @@ +from GPSMeterConverter import GPSMeterConverter +import numpy as np +from scipy.interpolate import pchip_interpolate + + +def generate_kml_file(trajGen, trajectory, gps_trajectory, trajectory_name,ith): + kml_traj = np.zeros((5, trajGen.nStages + 1)) + if gps_trajectory.shape[0] == 5: + gpsMeter = GPSMeterConverter(gps_trajectory[1, 0], gps_trajectory[0, 0], gps_trajectory[2, 0]) + else: + gpsMeter = GPSMeterConverter(gps_trajectory[7, 0], gps_trajectory[6, 0], gps_trajectory[8, 0]) + + [kml_traj[0,:], kml_traj[1,:], kml_traj[2,:]] = gpsMeter.meter_to_gps(trajectory[trajGen.posStateIndices[0],:], + trajectory[trajGen.posStateIndices[1],:], + trajectory[trajGen.posStateIndices[2],:]) + kml_traj[3,:] = np.rad2deg(trajectory[trajGen.yawStateIndex, :]) + kml_traj[4,:] = np.rad2deg(trajectory[trajGen.pitchStateIndex, :]) + + # interpolate trajectory + time_step = 0.01 + end_time = trajectory[trajGen.endTimeStateIndex, 0] + dt = end_time / trajGen.nStages + times_mpcc = np.arange(0,trajGen.nStages+1) * dt + interp_mpcc = np.linspace(times_mpcc[0], times_mpcc[-1], int(end_time / time_step)) + + longitude = pchip_interpolate(times_mpcc, kml_traj[0, :], interp_mpcc) + latitude = pchip_interpolate(times_mpcc, kml_traj[1, :], interp_mpcc) + altitude = pchip_interpolate(times_mpcc, kml_traj[2, :], interp_mpcc) + heading = pchip_interpolate(times_mpcc, kml_traj[3, :], interp_mpcc) + tilt = pchip_interpolate(times_mpcc, kml_traj[4, :], interp_mpcc) + + # generate kml file + filepath = './kmls/' + trajectory_name.replace('.h5', str(ith) + '.kml') + write_to_kml_file(filepath, time_step, longitude, latitude, altitude, heading, tilt) + + +def write_to_kml_file(filename, timeStep, longitude, latitude, altitude, heading, tilt): + file = open(filename, 'w') + file.write('\n') + file.write('\n') + file.write('\n') + file.write('\n') + file.write('\n') + file.write('Tour\n') + file.write('\n') + + for i in range(len(longitude)): + file.write('\n') + file.write('' + str(timeStep) + '\n') + file.write('smooth\n') + # file.write('bounce\n') + file.write('\n') + file.write('' + str(longitude[i]) + '\n') + file.write('' + str(latitude[i]) + '\n') + file.write('' + str(altitude[i]) + '\n') + file.write('' + str(heading[i]) + '\n') + file.write('' + str(tilt[i]) + '\n') + file.write('0\n') + file.write('120\n') + file.write('absolute\n') + file.write('\n') + file.write('\n') + + file.write('\n') + file.write('\n') + file.write('\n') + file.write('\n') + + file.close() + diff --git a/parameter-learning_nd_disc/generate_kml_from_input.py b/parameter-learning_nd_disc/generate_kml_from_input.py new file mode 100755 index 0000000..66519f7 --- /dev/null +++ b/parameter-learning_nd_disc/generate_kml_from_input.py @@ -0,0 +1,69 @@ +import numpy as np +import h5py +from QuadCameraContourTrajectory import QuadCameraContourTrajectory +from plot_quad_camera_trajectory import create_quad_camera_contour_plots +from generate_kml_file import generate_kml_file + + +def main(): + # parameters + trajectory_name = 'saffa.h5' + + # weights term in paper + lag_weight = 1 # weight on e^l + contour_weight = 1 # weight on e^c + angular_weight = 1 # w_phi and w_psi + # learn jerk + jerk_weight = 1 # w_j on position + angular_jerk_weight = 1 # w_j on angles + theta_input_weight = 1 # weight on v_i + # not necessary + min_time_weight = 1 # w_end + end_time_weight = 0 # w_len + timing_weight = 0 # w_t + + # load trajectory + keyframes, keyorientations, keytimes, gps_trajectory = load_trajectory(trajectory_name) + if keyframes.shape[1] > 3: + keyframes = keyframes[:,0:3] + + # specifying weights for optimizer + options = dict() + options["keytimes"] = keytimes + options["lag_weight"] = lag_weight + options["contour_weight"] = contour_weight + options["gimbal_weight"] = angular_weight + options["smoothness_weight"] = 21.18221499 + options["angular_smoothness_weight"] = angular_jerk_weight + options["theta_input_weight"] = theta_input_weight + options["min_time_weight"] = min_time_weight + options["end_time_weight"] = end_time_weight + options["timing_weight"] = timing_weight + + trajGen = QuadCameraContourTrajectory(keyframes, keyorientations, options) + trajectory, keytimes = trajGen.generate_trajectory() + + + if trajectory is None: + return + + # trajectory[trajGen.endTimeStateIndex, 0] + + # create plot and save to directory "plots" + create_quad_camera_contour_plots(trajGen, trajectory, file=trajectory_name + '_mpcc') + + # create kml-file and save to directory "kmls" + generate_kml_file(trajGen, trajectory, gps_trajectory, trajectory_name) + + +def load_trajectory(traj_name): + with h5py.File('./data/' + traj_name, 'r') as hf: + keytimes = np.array(hf.get('keytimes')) + keyframes = np.transpose(np.array(hf.get('keyframes'))) + keyorientations = np.transpose(np.array(hf.get('keyorientations'))) + trajectory = np.transpose(np.array(hf.get('trajectory'))) + return keyframes, keyorientations, keytimes, trajectory + + +if __name__ == '__main__': + main() diff --git a/parameter-learning_nd_disc/kernel.py b/parameter-learning_nd_disc/kernel.py new file mode 100755 index 0000000..97c6ee2 --- /dev/null +++ b/parameter-learning_nd_disc/kernel.py @@ -0,0 +1,269 @@ +#!python + +# Copyright (C) 2010, 2011 by Eric Brochu +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. + +from numpy import array, log, zeros, exp, sqrt, sum, vstack, ones, arange, clip +from numpy.linalg import norm +# from scipy.special import gamma, yv + + +class Kernel(object): + """ + base class for kernels. + """ + def __init__(self, hyperparams): + self._hyperparams = array(hyperparams) + self._hyperparams.setflags(write=False) + + # this needs to be read-only, or bad things will happen + def getHyperparams(self): + return self._hyperparams + + hyperparams = property(getHyperparams) + + def cov(self, x1, x2): + raise NotImplementedError('kernel-derived class does not have cov method') + + + def covMatrix(self, X): + NX, _ = vstack(X).shape + K = ones((NX, NX)) + for i in xrange(NX): + for j in xrange(i+1): + K[i, j] = K[j, i] = self.cov(X[i], X[j]) + + return K + + + def derivative(self, X, hp): + raise NotImplementedError('kernel-derived class does not have derivative method') + + +class SVKernel(object): + + def __init__(self, mag): + self._magnitude = mag + self._sf2 = exp(2.0*log(self._magnitude)) # signal variance + + def covScale(self, k): + + return self._sf2 * k + + +class GaussianKernel_iso(Kernel): + """ + Isotropic Gaussian (aka "squared exponential") kernel. Has 2 + non-negative hyperparameters: + + hyperparams[0] kernel width parameter + hyperparams[1] noise magnitude parameter + """ + + def __init__(self, hyperparams, **kwargs): + super(GaussianKernel_iso, self).__init__(hyperparams) + self._itheta2 = 1 / hyperparams[0]**2 + # self._magnitude = hyperparams[1] + # self._sf2 = exp(2.0*log(self._magnitude)) # signal variance + + + def cov(self, x1, x2): + + return exp(-.5 * norm(x1-x2)**2 * self._itheta2) + + + def derivative(self, X, hp): + + NX, _ = vstack(X).shape + K = self.covMatrix(X) + + if hp == 0: + C = zeros(K.shape) + for i in xrange(NX): + for j in xrange(i): + C[i, j] = C[j, i] = sum((X[i]-X[j])**2) * self._itheta2 + return K * C + # elif hp == 1: + # return 2.0 * K + else: + raise ValueError + + +class SVGaussianKernel_iso(SVKernel, GaussianKernel_iso): + + def __init__(self, hyperparams, **kwargs): + + GaussianKernel_iso.__init__(self, hyperparams[:-1]) + SVKernel.__init__(self, hyperparams[-1]) + self._hyperparams = array(hyperparams) + self._hyperparams.setflags(write=False) + + def cov(self, x1, x2): + + return self.covScale(GaussianKernel_iso.cov(self, x1, x2)) + + def derivative(self, X, hp): + + if hp==0: + return GaussianKernel_iso.derivative(self, X, hp) + elif hp==1: + return 2.0 * self.covMatrix(X) + + +class GaussianKernel_ard(Kernel): + """ + Anisotropic Gaussian (aka "squared exponential") kernel. Has D+1 + non-negative hyperparameters, where D is dimensionality. The first + D are the length-scale hyperparameters for the dimensions, and the + D+1th is the noise magnitude. + """ + + def __init__(self, hyperparams, **kwargs): + + super(GaussianKernel_ard, self).__init__(hyperparams) + self._theta = clip(hyperparams, 1e-4, 1e4) + self._itheta2 = array([1.0/t**2 for t in self._theta]) + # self._magnitude = hyperparams[-1] + # self._sf2 = exp(2.0*log(self._magnitude)) # signal variance + + + def cov(self, x1, x2): + + return exp(-.5 * sum(self._itheta2 * (x1-x2)**2)) + + + def derivative(self, X, hp): + + NX, NA = vstack(X).shape + K = self.covMatrix(X) + + if hp < NA: + C = zeros(K.shape) + for i in xrange(NX): + for j in xrange(i): + C[i, j] = C[j, i] = sum(self._itheta2[hp]*(X[i][hp]-X[j][hp])**2.0) + return K * C + # elif hp == NA: + # return 2.0 * K + else: + raise ValueError + + +class SVGaussianKernel_ard(SVKernel, GaussianKernel_ard): + + def __init__(self, hyperparams, **kwargs): + + GaussianKernel_ard.__init__(self, hyperparams[:-1]) + SVKernel.__init__(self, hyperparams[-1]) + self._hyperparams = array(hyperparams) + self._hyperparams.setflags(write=False) + + + def cov(self, x1, x2): + + return self.covScale(GaussianKernel_ard.cov(self, x1, x2)) + + def derivative(self, X, hp): + + if hp < len(self._theta): + return GaussianKernel_ard.derivative(self, X, hp) + elif hp==len(self._theta): + return 2.0 * self.covMatrix(X) + + +class MaternKernel3(Kernel): + """ + Matern kernel for nu=3/2. Distance measure is isotropic. Exact formulation + is based on Rasmussen & Williams. There are 2 non-negative hyperparameters: + + hyperparams[0] kernel width parameter + hyperparams[1] noise magnitude parameter + """ + + def __init__(self, hyperparams, **kwargs): + super(MaternKernel3, self).__init__(hyperparams) + self._theta = hyperparams[0] + self._magnitude = hyperparams[1] + self._sf2 = exp(2.0*log(self._magnitude)) + self.sqrt3 = sqrt(3) + + def cov(self, x1, x2): + + z = self.sqrt3 * norm(x1-x2) / self._theta + return self._sf2 * (1.0 + z) * exp(-z) + + def derivative(self, X, hp): + + NX, _ = vstack(X).shape + K = self.covMatrix(X) + + if hp == 0: + C = zeros(K.shape) + for i in xrange(NX): + for j in xrange(i): + r = norm(X[i]-X[j]) + C[i, j] = C[j, i] = self._sf2 * r**2 * exp(-r) + return C + elif hp == 1: + return 2.0 * K + else: + raise ValueError + + +class MaternKernel5(Kernel): + """ + Matern kernel for nu=5/2. Distance measure is isotropic. Exact formulation + is based on Rasmussen & Williams. There are 2 non-negative hyperparameters: + + hyperparams[0] kernel width parameter + hyperparams[1] noise magnitude parameter + """ + + def __init__(self, hyperparams, **kwargs): + super(MaternKernel5, self).__init__(hyperparams) + self._theta = hyperparams[0] + self._magnitude = hyperparams[1] + self._sf2 = exp(2.0*log(self._magnitude)) + + + def cov(self, x1, x2): + z = sum((sqrt(5.0) * array(x1-x2) / self._theta)**2.0) + z = self._sf2 * exp(-sqrt(z)) * (1.0 + sqrt(z) + z/3.0) + print (z) + + def derivative(self, X, hp): + + NX, _ = vstack(X).shape + K = self.covMatrix(X) + + if hp == 0: + C = zeros(K.shape) + for i in xrange(NX): + for j in xrange(i): + z = sum((sqrt(5.0) * array(X[i]-X[j])/self._theta)**2.0) + C[i, j] = C[j, i] = self._sf2 * (z + sqrt(z)**3.0) * exp(-sqrt(z))/3.0 + return C + elif hp == 1: + return 2.0 * K + else: + raise ValueError + + + diff --git a/parameter-learning_nd_disc/kmls/1_record_2.kml b/parameter-learning_nd_disc/kmls/1_record_2.kml new file mode 100755 index 0000000..e860abc --- /dev/null +++ b/parameter-learning_nd_disc/kmls/1_record_2.kml @@ -0,0 +1,36104 @@ + + + + + +Tour + + +0.01 +smooth + +8.536651361031792 +47.34982327414191 +412.1972606479761 +-107.80424787419399 +88.90745055969546 +0 +120 +absolute + + + +0.01 +smooth + +8.536651361838944 +47.349823274302025 +412.197615183422 +-107.80412752308203 +88.9074401739023 +0 +120 +absolute + + + +0.01 +smooth + +8.536651364244518 +47.34982327477899 +412.19821321829 +-107.8037688658336 +88.90740922372997 +0 +120 +absolute + + + +0.01 +smooth + +8.536651368224707 +47.34982327556784 +412.1990490722367 +-107.80317549658008 +88.90735801998935 +0 +120 +absolute + + + +0.01 +smooth + +8.536651373755694 +47.34982327666356 +412.20011706491835 +-107.8023510094527 +88.90728687349124 +0 +120 +absolute + + + +0.01 +smooth + +8.536651380813659 +47.34982327806111 +412.2014115159917 +-107.80129899858274 +88.90719609504643 +0 +120 +absolute + + + +0.01 +smooth + +8.536651389374788 +47.34982327975552 +412.2029267451131 +-107.80002305810143 +88.90708599546576 +0 +120 +absolute + + + +0.01 +smooth + +8.536651399415275 +47.34982328174178 +412.2046570719394 +-107.79852678214019 +88.90695688556009 +0 +120 +absolute + + + +0.01 +smooth + +8.536651410911295 +47.349823284014875 +412.20659681612665 +-107.79681376483019 +88.90680907614022 +0 +120 +absolute + + + +0.01 +smooth + +8.53665142383904 +47.34982328656979 +412.2087402973315 +-107.79488760030272 +88.90664287801694 +0 +120 +absolute + + + +0.01 +smooth + +8.536651438174694 +47.34982328940154 +412.21108183521073 +-107.7927518826891 +88.90645860200112 +0 +120 +absolute + + + +0.01 +smooth + +8.53665145389444 +47.34982329250511 +412.2136157494206 +-107.79041020612063 +88.90625655890355 +0 +120 +absolute + + + +0.01 +smooth + +8.536651470974462 +47.349823295875474 +412.21633635961757 +-107.7878661647285 +88.906037059535 +0 +120 +absolute + + + +0.01 +smooth + +8.536651489390954 +47.34982329950766 +412.2192379854585 +-107.78512335264409 +88.90580041470643 +0 +120 +absolute + + + +0.01 +smooth + +8.536651509120091 +47.34982330339667 +412.22231494659957 +-107.78218536399868 +88.90554693522856 +0 +120 +absolute + + + +0.01 +smooth + +8.536651530138062 +47.349823307537434 +412.22556156269724 +-107.77905579292346 +88.9052769319122 +0 +120 +absolute + + + +0.01 +smooth + +8.536651552421056 +47.34982331192502 +412.2289721534084 +-107.7757382335498 +88.90499071556825 +0 +120 +absolute + + + +0.01 +smooth + +8.536651575945255 +47.34982331655438 +412.23254103838934 +-107.77223628000894 +88.90468859700748 +0 +120 +absolute + + + +0.01 +smooth + +8.536651600686838 +47.3498233214205 +412.2362625372964 +-107.76855352643217 +88.90437088704068 +0 +120 +absolute + + + +0.01 +smooth + +8.536651626622003 +47.34982332651841 +412.24013096978643 +-107.7646935669508 +88.90403789647878 +0 +120 +absolute + + + +0.01 +smooth + +8.536651653726928 +47.349823331843076 +412.24414065551565 +-107.76065999569609 +88.9036899361325 +0 +120 +absolute + + + +0.01 +smooth + +8.536651681977796 +47.34982333738951 +412.2482859141408 +-107.75645640679929 +88.90332731681265 +0 +120 +absolute + + + +0.01 +smooth + +8.536651711350801 +47.34982334315269 +412.25256106531833 +-107.75208639439175 +88.90295034933015 +0 +120 +absolute + + + +0.01 +smooth + +8.53665174182212 +47.34982334912763 +412.2569604287046 +-107.7475535526047 +88.90255934449577 +0 +120 +absolute + + + +0.01 +smooth + +8.53665177336794 +47.34982335530931 +412.26147832395634 +-107.74286147556944 +88.90215461312032 +0 +120 +absolute + + + +0.01 +smooth + +8.53665180596445 +47.349823361692714 +412.26610907072995 +-107.73801375741726 +88.90173646601463 +0 +120 +absolute + + + +0.01 +smooth + +8.536651839587831 +47.34982336827285 +412.2708469886819 +-107.73301399227944 +88.9013052139895 +0 +120 +absolute + + + +0.01 +smooth + +8.53665187421427 +47.34982337504471 +412.2756863974688 +-107.72786577428724 +88.9008611678558 +0 +120 +absolute + + + +0.01 +smooth + +8.536651909819954 +47.349823382003294 +412.2806216167472 +-107.72257269757198 +88.90040463842432 +0 +120 +absolute + + + +0.01 +smooth + +8.536651946381065 +47.34982338914358 +412.28564696617354 +-107.71713835626491 +88.8999359365059 +0 +120 +absolute + + + +0.01 +smooth + +8.536651983873789 +47.349823396460586 +412.29075676540424 +-107.71156634449733 +88.89945537291133 +0 +120 +absolute + + + +0.01 +smooth + +8.536652022274314 +47.34982340394928 +412.29594533409596 +-107.70586025640048 +88.89896325845146 +0 +120 +absolute + + + +0.01 +smooth + +8.536652061558822 +47.349823411604675 +412.30120699190513 +-107.70002368610574 +88.89845990393711 +0 +120 +absolute + + + +0.01 +smooth + +8.5366521017035 +47.34982341942175 +412.30653605848835 +-107.6940602277443 +88.89794562017909 +0 +120 +absolute + + + +0.01 +smooth + +8.536652142684536 +47.34982342739551 +412.311926853502 +-107.68797347544748 +88.89742071798823 +0 +120 +absolute + + + +0.01 +smooth + +8.53665218447811 +47.349823435520946 +412.3173736966027 +-107.68176702334654 +88.89688550817536 +0 +120 +absolute + + + +0.01 +smooth + +8.53665222706041 +47.34982344379306 +412.32287090744694 +-107.67544446557281 +88.89634030155126 +0 +120 +absolute + + + +0.01 +smooth + +8.53665227040762 +47.34982345220683 +412.32841280569124 +-107.66900939625754 +88.8957854089268 +0 +120 +absolute + + + +0.01 +smooth + +8.536652314495928 +47.34982346075726 +412.33399371099216 +-107.66246540953198 +88.89522114111278 +0 +120 +absolute + + + +0.01 +smooth + +8.536652359301517 +47.34982346943935 +412.339607943006 +-107.65581609952747 +88.89464780892003 +0 +120 +absolute + + + +0.01 +smooth + +8.536652404800572 +47.34982347824807 +412.34524982138953 +-107.64906506037526 +88.89406572315934 +0 +120 +absolute + + + +0.01 +smooth + +8.53665245096928 +47.34982348717844 +412.35091366579917 +-107.64221588620666 +88.89347519464161 +0 +120 +absolute + + + +0.01 +smooth + +8.536652497783823 +47.34982349622544 +412.35659379589134 +-107.63527217115292 +88.89287653417757 +0 +120 +absolute + + + +0.01 +smooth + +8.536652545230774 +47.34982350538601 +412.3622850119713 +-107.62823597785118 +88.89226992086118 +0 +120 +absolute + + + +0.01 +smooth + +8.536652597801188 +47.34982351549741 +412.3681913967443 +-107.62044487884235 +88.89159838485051 +0 +120 +absolute + + + +0.01 +smooth + +8.536652659073567 +47.349823527223585 +412.37447726538034 +-107.61137166651248 +88.89081658914374 +0 +120 +absolute + + + +0.01 +smooth + +8.53665272885385 +47.34982354052331 +412.38113279596257 +-107.60104590965568 +88.88992708330271 +0 +120 +absolute + + + +0.01 +smooth + +8.536652806947972 +47.34982355535541 +412.3881481665742 +-107.58949717706582 +88.88893241688919 +0 +120 +absolute + + + +0.01 +smooth + +8.536652893161856 +47.34982357167864 +412.3955135552977 +-107.5767550375369 +88.88783513946494 +0 +120 +absolute + + + +0.01 +smooth + +8.53665298730145 +47.34982358945182 +412.4032191402171 +-107.56284905986286 +88.88663780059181 +0 +120 +absolute + + + +0.01 +smooth + +8.536653089172681 +47.349823608633734 +412.4112550994148 +-107.5478088128377 +88.88534294983151 +0 +120 +absolute + + + +0.01 +smooth + +8.536653198581494 +47.349823629183184 +412.41961161097424 +-107.53166386525545 +88.88395313674593 +0 +120 +absolute + + + +0.01 +smooth + +8.536653315333812 +47.34982365105896 +412.4282788529784 +-107.51444378590996 +88.88247091089681 +0 +120 +absolute + + + +0.01 +smooth + +8.536653439235575 +47.34982367421985 +412.4372470035103 +-107.4961781435953 +88.88089882184592 +0 +120 +absolute + + + +0.01 +smooth + +8.53665357009272 +47.34982369862467 +412.44650624065343 +-107.47689650710541 +88.8792394191551 +0 +120 +absolute + + + +0.01 +smooth + +8.53665370771118 +47.349823724232195 +412.4560467424906 +-107.45662844523429 +88.87749525238611 +0 +120 +absolute + + + +0.01 +smooth + +8.53665385189689 +47.34982375100122 +412.46585868710486 +-107.43540352677587 +88.87566887110079 +0 +120 +absolute + + + +0.01 +smooth + +8.536654002455782 +47.34982377889054 +412.47593225257947 +-107.41325132052411 +88.87376282486083 +0 +120 +absolute + + + +0.01 +smooth + +8.536654159193796 +47.34982380785897 +412.4862576169976 +-107.39020139527307 +88.87177966322817 +0 +120 +absolute + + + +0.01 +smooth + +8.536654321916869 +47.34982383786527 +412.4968249584422 +-107.36628331981667 +88.86972193576449 +0 +120 +absolute + + + +0.01 +smooth + +8.536654490430927 +47.34982386886827 +412.50762445499635 +-107.34152666294884 +88.86759219203162 +0 +120 +absolute + + + +0.01 +smooth + +8.536654664541906 +47.34982390082672 +412.5186462847432 +-107.3159609934636 +88.86539298159133 +0 +120 +absolute + + + +0.01 +smooth + +8.536654844055752 +47.34982393369947 +412.52988062576594 +-107.28961588015493 +88.86312685400546 +0 +120 +absolute + + + +0.01 +smooth + +8.53665502877839 +47.349823967445275 +412.5413176561477 +-107.2625208918168 +88.86079635883578 +0 +120 +absolute + + + +0.01 +smooth + +8.536655218515758 +47.349824002022935 +412.5529475539714 +-107.23470559724313 +88.85840404564404 +0 +120 +absolute + + + +0.01 +smooth + +8.536655413073788 +47.34982403739125 +412.5647604973203 +-107.20619956522798 +88.85595246399211 +0 +120 +absolute + + + +0.01 +smooth + +8.536655612258421 +47.349824073509026 +412.5767466642775 +-107.17703236456525 +88.85344416344171 +0 +120 +absolute + + + +0.01 +smooth + +8.536655815875585 +47.349824110335035 +412.5888962329261 +-107.14723356404893 +88.85088169355468 +0 +120 +absolute + + + +0.01 +smooth + +8.536656023731219 +47.34982414782809 +412.60119938134915 +-107.11683273247303 +88.8482676038928 +0 +120 +absolute + + + +0.01 +smooth + +8.53665623563126 +47.349824185946964 +412.61364628762976 +-107.08585943863149 +88.84560444401785 +0 +120 +absolute + + + +0.01 +smooth + +8.536656451381639 +47.34982422465047 +412.62622712985115 +-107.05434325131827 +88.84289476349164 +0 +120 +absolute + + + +0.01 +smooth + +8.53665667078829 +47.3498242638974 +412.63893208609625 +-107.02231373932739 +88.84014111187597 +0 +120 +absolute + + + +0.01 +smooth + +8.53665689365715 +47.34982430364654 +412.6517513344483 +-106.98980047145275 +88.83734603873258 +0 +120 +absolute + + + +0.01 +smooth + +8.536657119794157 +47.349824343856696 +412.6646750529904 +-106.95683301648842 +88.83451209362332 +0 +120 +absolute + + + +0.01 +smooth + +8.536657349005242 +47.34982438448666 +412.6776934198057 +-106.9234409432283 +88.83164182610997 +0 +120 +absolute + + + +0.01 +smooth + +8.53665758109634 +47.349824425495214 +412.69079661297707 +-106.88965382046638 +88.82873778575431 +0 +120 +absolute + + + +0.01 +smooth + +8.536657815873387 +47.34982446684118 +412.70397481058785 +-106.85550121699663 +88.82580252211812 +0 +120 +absolute + + + +0.01 +smooth + +8.536658053142318 +47.34982450848332 +412.7172181907211 +-106.82101270161303 +88.82283858476323 +0 +120 +absolute + + + +0.01 +smooth + +8.536658292709069 +47.34982455038044 +412.73051693145993 +-106.78621784310957 +88.81984852325141 +0 +120 +absolute + + + +0.01 +smooth + +8.536658534379573 +47.34982459249133 +412.7438612108874 +-106.75114621028018 +88.81683488714447 +0 +120 +absolute + + + +0.01 +smooth + +8.536658777959765 +47.349824634774805 +412.7572412070866 +-106.71582737191885 +88.81380022600416 +0 +120 +absolute + + + +0.01 +smooth + +8.53665902325558 +47.349824677189645 +412.7706470981408 +-106.6802908968196 +88.81074708939232 +0 +120 +absolute + + + +0.01 +smooth + +8.536659270072956 +47.34982471969464 +412.78406906213286 +-106.64456635377633 +88.80767802687072 +0 +120 +absolute + + + +0.01 +smooth + +8.536659518217824 +47.349824762248595 +412.797497277146 +-106.60868331158304 +88.80459558800115 +0 +120 +absolute + + + +0.01 +smooth + +8.53665976749612 +47.34982480481029 +412.81092192126346 +-106.57267133903373 +88.80150232234543 +0 +120 +absolute + + + +0.01 +smooth + +8.53666001771378 +47.34982484733854 +412.82433317256823 +-106.53656000492232 +88.79840077946533 +0 +120 +absolute + + + +0.01 +smooth + +8.536660268728621 +47.34982488979966 +412.8377226249007 +-106.50037151145582 +88.79529288399713 +0 +120 +absolute + + + +0.01 +smooth + +8.536660526464093 +47.34982493304486 +412.85124830887156 +-106.46326685418542 +88.79210748438804 +0 +120 +absolute + + + +0.01 +smooth + +8.536660794908466 +47.34982497765149 +412.8650184809288 +-106.4246818423122 +88.78879668320344 +0 +120 +absolute + + + +0.01 +smooth + +8.536661073844325 +47.34982502358672 +412.8790272521168 +-106.38464943648547 +88.78536322881227 +0 +120 +absolute + + + +0.01 +smooth + +8.536661363054247 +47.349825070817694 +412.8932687334794 +-106.34320259735455 +88.78180986958321 +0 +120 +absolute + + + +0.01 +smooth + +8.536661662320812 +47.34982511931152 +412.907737036061 +-106.30037428556868 +88.77813935388515 +0 +120 +absolute + + + +0.01 +smooth + +8.5366619714266 +47.34982516903535 +412.9224262709054 +-106.2561974617771 +88.77435443008686 +0 +120 +absolute + + + +0.01 +smooth + +8.536662290154192 +47.349825219956344 +412.93733054905715 +-106.21070508662922 +88.7704578465572 +0 +120 +absolute + + + +0.01 +smooth + +8.536662618286169 +47.3498252720416 +412.9524439815598 +-106.16393012077417 +88.76645235166495 +0 +120 +absolute + + + +0.01 +smooth + +8.536662955605104 +47.34982532525825 +412.9677606794578 +-106.11590552486126 +88.76234069377891 +0 +120 +absolute + + + +0.01 +smooth + +8.536663301893585 +47.34982537957348 +412.9832747537951 +-106.06666425953986 +88.75812562126794 +0 +120 +absolute + + + +0.01 +smooth + +8.536663656934186 +47.34982543495437 +412.9989803156158 +-106.01623928545915 +88.75380988250078 +0 +120 +absolute + + + +0.01 +smooth + +8.536664020509491 +47.34982549136809 +413.0148714759643 +-105.96466356326849 +88.74939622584633 +0 +120 +absolute + + + +0.01 +smooth + +8.536664392402074 +47.34982554878174 +413.0309423458841 +-105.91197005361707 +88.74488739967327 +0 +120 +absolute + + + +0.01 +smooth + +8.536664772394522 +47.3498256071625 +413.04718703641987 +-105.85819171715423 +88.74028615235056 +0 +120 +absolute + + + +0.01 +smooth + +8.536665160269408 +47.34982566647749 +413.0635996586156 +-105.80336151452924 +88.73559523224694 +0 +120 +absolute + + + +0.01 +smooth + +8.536665555809318 +47.34982572669382 +413.08017432351505 +-105.74751240639135 +88.7308173877312 +0 +120 +absolute + + + +0.01 +smooth + +8.536665958796824 +47.349825787778656 +413.09690514216254 +-105.69067735338986 +88.72595536717219 +0 +120 +absolute + + + +0.01 +smooth + +8.536666369014515 +47.349825849699144 +413.1137862256024 +-105.63288931617406 +88.72101191893873 +0 +120 +absolute + + + +0.01 +smooth + +8.536666786244966 +47.34982591242238 +413.1308116848784 +-105.57418125539321 +88.71598979139961 +0 +120 +absolute + + + +0.01 +smooth + +8.536667210270755 +47.349825975915515 +413.1479756310346 +-105.51458613169657 +88.71089173292363 +0 +120 +absolute + + + +0.01 +smooth + +8.536667640874466 +47.349826040145715 +413.16527217511543 +-105.45413690573348 +88.70572049187962 +0 +120 +absolute + + + +0.01 +smooth + +8.536668077838675 +47.34982610508007 +413.1826954281647 +-105.39286653815317 +88.7004788166364 +0 +120 +absolute + + + +0.01 +smooth + +8.536668520945963 +47.349826170685745 +413.20023950122663 +-105.33080798960492 +88.69516945556276 +0 +120 +absolute + + + +0.01 +smooth + +8.53666896997891 +47.34982623692986 +413.2178985053453 +-105.26799422073803 +88.68979515702755 +0 +120 +absolute + + + +0.01 +smooth + +8.536669424720097 +47.34982630377956 +413.2356665515649 +-105.20445819220177 +88.68435866939953 +0 +120 +absolute + + + +0.01 +smooth + +8.5366698849521 +47.349826371201985 +413.25353775092935 +-105.1402328646454 +88.67886274104752 +0 +120 +absolute + + + +0.01 +smooth + +8.536670350457504 +47.349826439164254 +413.2715062144828 +-105.07535119871822 +88.67331012034036 +0 +120 +absolute + + + +0.01 +smooth + +8.536670821018884 +47.34982650763351 +413.2895660532695 +-105.0098461550695 +88.66770355564685 +0 +120 +absolute + + + +0.01 +smooth + +8.536671296418824 +47.34982657657691 +413.3077113783334 +-104.94375069434852 +88.66204579533581 +0 +120 +absolute + + + +0.01 +smooth + +8.536671776439901 +47.349826645961556 +413.32593630071864 +-104.87709777720455 +88.65633958777605 +0 +120 +absolute + + + +0.01 +smooth + +8.536672260864695 +47.3498267157546 +413.34423493146926 +-104.80992036428688 +88.65058768133636 +0 +120 +absolute + + + +0.01 +smooth + +8.536672749475786 +47.349826785923185 +413.3626013816295 +-104.74225141624481 +88.64479282438558 +0 +120 +absolute + + + +0.01 +smooth + +8.536673242055755 +47.34982685643444 +413.3810297622433 +-104.67412389372757 +88.63895776529247 +0 +120 +absolute + + + +0.01 +smooth + +8.53667373838718 +47.34982692725549 +413.39951418435487 +-104.60557075738447 +88.63308525242593 +0 +120 +absolute + + + +0.01 +smooth + +8.53667423825264 +47.349826998353485 +413.41804875900834 +-104.53662496786478 +88.6271780341547 +0 +120 +absolute + + + +0.01 +smooth + +8.53667474143472 +47.34982706969555 +413.43662759724765 +-104.4673194858178 +88.6212388588476 +0 +120 +absolute + + + +0.01 +smooth + +8.53667524771599 +47.34982714124884 +413.455244810117 +-104.39768727189278 +88.61527047487347 +0 +120 +absolute + + + +0.01 +smooth + +8.53667575687904 +47.34982721298046 +413.4738945086606 +-104.32776128673898 +88.6092756306011 +0 +120 +absolute + + + +0.01 +smooth + +8.536676268706445 +47.34982728485757 +413.49257080392226 +-104.25757449100574 +88.60325707439932 +0 +120 +absolute + + + +0.01 +smooth + +8.536676782980786 +47.3498273568473 +413.5112678069463 +-104.18715984534228 +88.59721755463691 +0 +120 +absolute + + + +0.01 +smooth + +8.536677299484642 +47.34982742891679 +413.5299796287768 +-104.11655031039791 +88.59115981968273 +0 +120 +absolute + + + +0.01 +smooth + +8.53667781800059 +47.34982750103316 +413.54870038045783 +-104.04577884682192 +88.58508661790555 +0 +120 +absolute + + + +0.01 +smooth + +8.536678338411665 +47.34982757317275 +413.5674260880615 +-103.974864816697 +88.5789995787213 +0 +120 +absolute + + + +0.01 +smooth + +8.536678866108188 +47.34982764582 +413.58625795012597 +-103.90308207756301 +88.57283894360665 +0 +120 +absolute + + + +0.01 +smooth + +8.536679404117342 +47.349827719255394 +413.6052526547602 +-103.83002450956197 +88.56657115425783 +0 +120 +absolute + + + +0.01 +smooth + +8.536679952243317 +47.34982779346666 +413.6244055447132 +-103.75572232724036 +88.56019853173719 +0 +120 +absolute + + + +0.01 +smooth + +8.536680510290287 +47.34982786844162 +413.6437119627351 +-103.68020574514486 +88.55372339710726 +0 +120 +absolute + + + +0.01 +smooth + +8.536681078062431 +47.349827944168005 +413.66316725157515 +-103.603504977822 +88.54714807143041 +0 +120 +absolute + + + +0.01 +smooth + +8.536681655363928 +47.349828020633616 +413.6827667539832 +-103.52565023981839 +88.5404748757692 +0 +120 +absolute + + + +0.01 +smooth + +8.536682241998959 +47.34982809782618 +413.7025058127088 +-103.44667174568059 +88.53370613118598 +0 +120 +absolute + + + +0.01 +smooth + +8.536682837771698 +47.3498281757335 +413.7223797705015 +-103.36659970995521 +88.52684415874326 +0 +120 +absolute + + + +0.01 +smooth + +8.53668344248633 +47.34982825434335 +413.7423839701113 +-103.28546434718885 +88.51989127950355 +0 +120 +absolute + + + +0.01 +smooth + +8.536684055947031 +47.34982833364349 +413.7625137542874 +-103.20329587192809 +88.51284981452923 +0 +120 +absolute + + + +0.01 +smooth + +8.536684677957977 +47.34982841362167 +413.78276446577956 +-103.12012449871949 +88.50572208488276 +0 +120 +absolute + + + +0.01 +smooth + +8.536685308323351 +47.34982849426569 +413.80313144733736 +-103.03598044210962 +88.4985104116266 +0 +120 +absolute + + + +0.01 +smooth + +8.536685946847332 +47.34982857556329 +413.82361004171077 +-102.95089391664514 +88.49121711582329 +0 +120 +absolute + + + +0.01 +smooth + +8.5366865933341 +47.349828657502286 +413.84419559164905 +-102.86489513687265 +88.4838445185352 +0 +120 +absolute + + + +0.01 +smooth + +8.536687247587825 +47.34982874007039 +413.86488343990186 +-102.77801431733859 +88.47639494082478 +0 +120 +absolute + + + +0.01 +smooth + +8.536687909412695 +47.3498288232554 +413.88566892921904 +-102.69028167258965 +88.4688707037545 +0 +120 +absolute + + + +0.01 +smooth + +8.536688578612885 +47.3498289070451 +413.90654740235004 +-102.60172741717246 +88.46127412838686 +0 +120 +absolute + + + +0.01 +smooth + +8.536689254992579 +47.34982899142725 +413.9275142020446 +-102.51238176563352 +88.45360753578429 +0 +120 +absolute + + + +0.01 +smooth + +8.53668993835595 +47.34982907638961 +413.9485646710523 +-102.42227493251947 +88.44587324700923 +0 +120 +absolute + + + +0.01 +smooth + +8.536690628507175 +47.34982916191995 +413.9696941521226 +-102.33143713237686 +88.43807358312415 +0 +120 +absolute + + + +0.01 +smooth + +8.53669132525044 +47.349829248006024 +413.9908979880055 +-102.23989857975229 +88.43021086519148 +0 +120 +absolute + + + +0.01 +smooth + +8.53669202838992 +47.34982933463565 +414.01217152145034 +-102.14768948919236 +88.42228741427377 +0 +120 +absolute + + + +0.01 +smooth + +8.536692737729794 +47.349829421796564 +414.0335100952069 +-102.05484007524363 +88.41430555143334 +0 +120 +absolute + + + +0.01 +smooth + +8.536693453074243 +47.349829509476535 +414.0549090520247 +-101.96138055245272 +88.40626759773276 +0 +120 +absolute + + + +0.01 +smooth + +8.53669417422744 +47.34982959766334 +414.0763637346534 +-101.86734113536619 +88.39817587423443 +0 +120 +absolute + + + +0.01 +smooth + +8.536694900993572 +47.34982968634475 +414.0978694858427 +-101.77275203853065 +88.39003270200081 +0 +120 +absolute + + + +0.01 +smooth + +8.536695633176809 +47.34982977550852 +414.1194216483421 +-101.67764347649266 +88.38184040209435 +0 +120 +absolute + + + +0.01 +smooth + +8.536696370581339 +47.34982986514244 +414.1410155649014 +-101.58204566379884 +88.37360129557754 +0 +120 +absolute + + + +0.01 +smooth + +8.536697113011336 +47.34982995523426 +414.16264657827014 +-101.48598881499572 +88.36531770351282 +0 +120 +absolute + + + +0.01 +smooth + +8.536697860270978 +47.349830045771775 +414.1843100311979 +-101.38950314462996 +88.35699194696265 +0 +120 +absolute + + + +0.01 +smooth + +8.536698612164447 +47.34983013674274 +414.20600126643444 +-101.29261886724808 +88.34862634698946 +0 +120 +absolute + + + +0.01 +smooth + +8.536699368495919 +47.34983022813492 +414.22771562672926 +-101.19536619739674 +88.34022322465574 +0 +120 +absolute + + + +0.01 +smooth + +8.536700129069574 +47.34983031993608 +414.2494484548321 +-101.09777534962245 +88.33178490102394 +0 +120 +absolute + + + +0.01 +smooth + +8.536700893689591 +47.349830412134004 +414.27119509349245 +-100.99987653847182 +88.3233136971565 +0 +120 +absolute + + + +0.01 +smooth + +8.536701662160148 +47.349830504716465 +414.2929508854601 +-100.90169997849146 +88.31481193411591 +0 +120 +absolute + + + +0.01 +smooth + +8.536702434285425 +47.349830597671215 +414.3147111734845 +-100.80327588422794 +88.30628193296458 +0 +120 +absolute + + + +0.01 +smooth + +8.536703209869602 +47.34983069098604 +414.33647130031557 +-100.70463447022786 +88.297726014765 +0 +120 +absolute + + + +0.01 +smooth + +8.536703988716855 +47.3498307846487 +414.3582266087027 +-100.60580595103778 +88.2891465005796 +0 +120 +absolute + + + +0.01 +smooth + +8.536704770631363 +47.34983087864697 +414.37997244139547 +-100.50682054120432 +88.28054571147088 +0 +120 +absolute + + + +0.01 +smooth + +8.53670555541731 +47.3498309729686 +414.40170414114374 +-100.40770845527405 +88.27192596850125 +0 +120 +absolute + + + +0.01 +smooth + +8.536706342878867 +47.3498310676014 +414.42341705069697 +-100.30849990779355 +88.2632895927332 +0 +120 +absolute + + + +0.01 +smooth + +8.536707132820219 +47.34983116253311 +414.44510651280484 +-100.20922511330942 +88.25463890522919 +0 +120 +absolute + + + +0.01 +smooth + +8.536707925187256 +47.34983125775487 +414.46677046944967 +-100.10989543792633 +88.24597481586383 +0 +120 +absolute + + + +0.01 +smooth + +8.53670872446604 +47.34983135337095 +414.4884901387529 +-100.0099186182407 +88.23725294561676 +0 +120 +absolute + + + +0.01 +smooth + +8.536709532748109 +47.34983144944177 +414.5103028259745 +-99.90902150941132 +88.22845254935935 +0 +120 +absolute + + + +0.01 +smooth + +8.536710349859993 +47.34983154597593 +414.5322042934007 +-99.80723232861416 +88.21957540279617 +0 +120 +absolute + + + +0.01 +smooth + +8.536711175628206 +47.34983164298203 +414.5541903033173 +-99.70457929302495 +88.21062328163171 +0 +120 +absolute + + + +0.01 +smooth + +8.53671200987927 +47.349831740468694 +414.57625661801023 +-99.6010906198195 +88.20159796157053 +0 +120 +absolute + + + +0.01 +smooth + +8.536712852439711 +47.34983183844454 +414.5983989997656 +-99.49679452617369 +88.1925012183172 +0 +120 +absolute + + + +0.01 +smooth + +8.536713703136044 +47.349831936918136 +414.62061321086924 +-99.39171922926326 +88.1833348275762 +0 +120 +absolute + + + +0.01 +smooth + +8.536714561794799 +47.34983203589813 +414.6428950136074 +-99.28589294626411 +88.17410056505211 +0 +120 +absolute + + + +0.01 +smooth + +8.536715428242486 +47.349832135393086 +414.6652401702657 +-99.179343894352 +88.1648002064494 +0 +120 +absolute + + + +0.01 +smooth + +8.536716302305633 +47.34983223541164 +414.68764444313024 +-99.07210029070275 +88.15543552747268 +0 +120 +absolute + + + +0.01 +smooth + +8.536717183810762 +47.349832335962404 +414.71010359448707 +-98.96419035249221 +88.14600830382645 +0 +120 +absolute + + + +0.01 +smooth + +8.53671807258439 +47.34983243705394 +414.732613386622 +-98.85564229689614 +88.1365203112152 +0 +120 +absolute + + + +0.01 +smooth + +8.536718968453043 +47.3498325386949 +414.75516958182106 +-98.74648434109037 +88.12697332534351 +0 +120 +absolute + + + +0.01 +smooth + +8.536719871243239 +47.34983264089388 +414.77776794237025 +-98.63674470225078 +88.1173691219159 +0 +120 +absolute + + + +0.01 +smooth + +8.5367207807815 +47.34983274365949 +414.80040423055556 +-98.52645159755315 +88.10770947663697 +0 +120 +absolute + + + +0.01 +smooth + +8.536721696894352 +47.34983284700032 +414.82307420866283 +-98.41563324417328 +88.09799616521116 +0 +120 +absolute + + + +0.01 +smooth + +8.536722619408307 +47.349832950924984 +414.8457736389781 +-98.30431785928698 +88.08823096334301 +0 +120 +absolute + + + +0.01 +smooth + +8.53672354814989 +47.34983305544208 +414.86849828378723 +-98.19253366007007 +88.07841564673707 +0 +120 +absolute + + + +0.01 +smooth + +8.53672448294563 +47.34983316056025 +414.8912439053764 +-98.08030886369842 +88.06855199109793 +0 +120 +absolute + + + +0.01 +smooth + +8.536725423622038 +47.34983326628806 +414.91400626603144 +-97.96767168734777 +88.05864177213007 +0 +120 +absolute + + + +0.01 +smooth + +8.536726370005638 +47.34983337263414 +414.9367811280384 +-97.85465034819401 +88.04868676553804 +0 +120 +absolute + + + +0.01 +smooth + +8.536727321922951 +47.349833479607064 +414.959564253683 +-97.74127306341289 +88.03868874702634 +0 +120 +absolute + + + +0.01 +smooth + +8.536728279200503 +47.34983358721548 +414.9823514052515 +-97.62756805018026 +88.02864949229954 +0 +120 +absolute + + + +0.01 +smooth + +8.53672924166481 +47.349833695467964 +415.00513834502965 +-97.51356352567193 +88.01857077706215 +0 +120 +absolute + + + +0.01 +smooth + +8.536730209142396 +47.34983380437314 +415.0279208353037 +-97.3992877070637 +88.00845437701872 +0 +120 +absolute + + + +0.01 +smooth + +8.53673118145978 +47.34983391393961 +415.05069463835923 +-97.28476881153142 +87.9983020678738 +0 +120 +absolute + + + +0.01 +smooth + +8.536732158443485 +47.34983402417598 +415.07345551648245 +-97.17003505625088 +87.98811562533189 +0 +120 +absolute + + + +0.01 +smooth + +8.536733139920033 +47.34983413509086 +415.0961992319593 +-97.05511465839793 +87.97789682509753 +0 +120 +absolute + + + +0.01 +smooth + +8.536734125715942 +47.34983424669286 +415.11892154707573 +-96.94003583514836 +87.96764744287526 +0 +120 +absolute + + + +0.01 +smooth + +8.536735115657738 +47.34983435899056 +415.14161822411756 +-96.82482680367798 +87.95736925436962 +0 +120 +absolute + + + +0.01 +smooth + +8.536736109571939 +47.349834471992594 +415.16428502537104 +-96.70951578116262 +87.94706403528514 +0 +120 +absolute + + + +0.01 +smooth + +8.536737107285067 +47.349834585707555 +415.18691771312183 +-96.59413098477808 +87.93673356132635 +0 +120 +absolute + + + +0.01 +smooth + +8.536738108623643 +47.349834700144065 +415.20951204965627 +-96.47870063170022 +87.92637960819779 +0 +120 +absolute + + + +0.01 +smooth + +8.536739113414189 +47.349834815310714 +415.2320637972599 +-96.36325293910481 +87.91600395160398 +0 +120 +absolute + + + +0.01 +smooth + +8.536740121483223 +47.349834931216115 +415.25456871821893 +-96.24781612416766 +87.90560836724947 +0 +120 +absolute + + + +0.01 +smooth + +8.536741132657271 +47.349835047868865 +415.2770225748193 +-96.13241840406465 +87.89519463083877 +0 +120 +absolute + + + +0.01 +smooth + +8.536742146762853 +47.3498351652776 +415.29942112934685 +-96.01708799597154 +87.88476451807645 +0 +120 +absolute + + + +0.01 +smooth + +8.53674316362649 +47.34983528345087 +415.3217601440877 +-95.90185311706416 +87.87431980466701 +0 +120 +absolute + + + +0.01 +smooth + +8.536744183074703 +47.349835402397346 +415.34403538132784 +-95.78674198451834 +87.86386226631501 +0 +120 +absolute + + + +0.01 +smooth + +8.53674520493401 +47.3498355221256 +415.36624260335304 +-95.67178281550986 +87.85339367872497 +0 +120 +absolute + + + +0.01 +smooth + +8.536746229030937 +47.34983564264424 +415.38837757244943 +-95.55700382721457 +87.84291581760141 +0 +120 +absolute + + + +0.01 +smooth + +8.536747255192005 +47.34983576396188 +415.41043605090294 +-95.4424332368083 +87.83243045864889 +0 +120 +absolute + + + +0.01 +smooth + +8.536748283420255 +47.349835886081486 +415.4324176032006 +-95.32807367234096 +87.82193795950414 +0 +120 +absolute + + + +0.01 +smooth + +8.536749317429894 +47.34983600889059 +415.45440165248505 +-95.21339043412254 +87.81140872255149 +0 +120 +absolute + + + +0.01 +smooth + +8.53675035865096 +47.349836132357 +415.476418224129 +-95.09818158997888 +87.80083114900074 +0 +120 +absolute + + + +0.01 +smooth + +8.536751406926328 +47.34983625650018 +415.4984631281728 +-94.98247552567359 +87.79020633937321 +0 +120 +absolute + + + +0.01 +smooth + +8.536752462098889 +47.34983638133967 +415.52053217465715 +-94.86630062697043 +87.77953539419033 +0 +120 +absolute + + + +0.01 +smooth + +8.53675352401153 +47.34983650689493 +415.54262117362276 +-94.74968527963303 +87.7688194139734 +0 +120 +absolute + + + +0.01 +smooth + +8.536754592507128 +47.34983663318547 +415.5647259351098 +-94.63265786942502 +87.7580594992438 +0 +120 +absolute + + + +0.01 +smooth + +8.536755667428574 +47.34983676023081 +415.5868422691593 +-94.51524678211017 +87.74725675052294 +0 +120 +absolute + + + +0.01 +smooth + +8.53675674861875 +47.349836888050426 +415.60896598581155 +-94.39748040345208 +87.73641226833216 +0 +120 +absolute + + + +0.01 +smooth + +8.536757835920545 +47.34983701666382 +415.63109289510766 +-94.27938711921448 +87.72552715319286 +0 +120 +absolute + + + +0.01 +smooth + +8.536758929176841 +47.34983714609051 +415.65321880708774 +-94.16099531516103 +87.71460250562639 +0 +120 +absolute + + + +0.01 +smooth + +8.536760028230521 +47.349837276349966 +415.67533953179236 +-94.0423333770554 +87.70363942615408 +0 +120 +absolute + + + +0.01 +smooth + +8.536761132924473 +47.349837407461706 +415.6974508792626 +-93.92342969066127 +87.69263901529739 +0 +120 +absolute + + + +0.01 +smooth + +8.536762243101585 +47.34983753944521 +415.7195486595387 +-93.80431264174233 +87.68160237357762 +0 +120 +absolute + + + +0.01 +smooth + +8.53676335860473 +47.34983767231997 +415.74162868266103 +-93.68501061606216 +87.67053060151612 +0 +120 +absolute + + + +0.01 +smooth + +8.536764479276808 +47.34983780610554 +415.7636867586708 +-93.5655519993846 +87.65942479963437 +0 +120 +absolute + + + +0.01 +smooth + +8.536765604960697 +47.34983794082136 +415.7857186976083 +-93.44596517747323 +87.64828606845366 +0 +120 +absolute + + + +0.01 +smooth + +8.53676673549928 +47.34983807648695 +415.80772030951385 +-93.32627853609168 +87.63711550849531 +0 +120 +absolute + + + +0.01 +smooth + +8.536767870735446 +47.349838213121814 +415.8296874044286 +-93.20652046100376 +87.6259142202808 +0 +120 +absolute + + + +0.01 +smooth + +8.536769010512078 +47.34983835074546 +415.8516157923928 +-93.08671933797305 +87.61468330433148 +0 +120 +absolute + + + +0.01 +smooth + +8.53677015467206 +47.34983848937735 +415.87350128344707 +-92.96690355276326 +87.60342386116866 +0 +120 +absolute + + + +0.01 +smooth + +8.536771303058277 +47.349838629036995 +415.89533968763203 +-92.84710149113802 +87.59213699131374 +0 +120 +absolute + + + +0.01 +smooth + +8.536772455513617 +47.34983876974391 +415.9171268149885 +-92.72734153886105 +87.5808237952881 +0 +120 +absolute + + + +0.01 +smooth + +8.536773611880962 +47.3498389115176 +415.93885847555686 +-92.60765208169602 +87.56948537361308 +0 +120 +absolute + + + +0.01 +smooth + +8.536774772003197 +47.34983905437753 +415.96053047937767 +-92.48806150540663 +87.55812282681012 +0 +120 +absolute + + + +0.01 +smooth + +8.53677593572321 +47.34983919834323 +415.9821386364917 +-92.3685981957565 +87.54673725540052 +0 +120 +absolute + + + +0.01 +smooth + +8.536777102883883 +47.34983934343419 +416.00367875693945 +-92.24929053850936 +87.53532975990566 +0 +120 +absolute + + + +0.01 +smooth + +8.536778273328101 +47.3498394896699 +416.0251466507615 +-92.13016691942886 +87.52390144084694 +0 +120 +absolute + + + +0.01 +smooth + +8.536779446898752 +47.34983963706986 +416.0465381279985 +-92.01125572427867 +87.51245339874572 +0 +120 +absolute + + + +0.01 +smooth + +8.536780623438718 +47.34983978565358 +416.06784899869103 +-91.89258533882249 +87.50098673412336 +0 +120 +absolute + + + +0.01 +smooth + +8.536781802790884 +47.34983993544054 +416.08907507287984 +-91.77418414882396 +87.48950254750123 +0 +120 +absolute + + + +0.01 +smooth + +8.536782984798137 +47.34984008645026 +416.1102121606053 +-91.6560805400468 +87.47800193940071 +0 +120 +absolute + + + +0.01 +smooth + +8.53678416930336 +47.349840238702214 +416.1312560719081 +-91.53830289825466 +87.46648601034317 +0 +120 +absolute + + + +0.01 +smooth + +8.53678535614944 +47.349840392215924 +416.1522026168289 +-91.42087960921123 +87.45495586084998 +0 +120 +absolute + + + +0.01 +smooth + +8.53678654517926 +47.34984054701088 +416.17304760540816 +-91.30383905868015 +87.4434125914425 +0 +120 +absolute + + + +0.01 +smooth + +8.536787736235706 +47.34984070310658 +416.1937868476867 +-91.18720963242515 +87.4318573026421 +0 +120 +absolute + + + +0.01 +smooth + +8.536788929161661 +47.34984086052252 +416.21441615370486 +-91.07101971620989 +87.42029109497017 +0 +120 +absolute + + + +0.01 +smooth + +8.536790123800014 +47.34984101927819 +416.2349313335035 +-90.95529769579801 +87.40871506894807 +0 +120 +absolute + + + +0.01 +smooth + +8.536791319993645 +47.34984117939312 +416.255328197123 +-90.84007195695324 +87.39713032509715 +0 +120 +absolute + + + +0.01 +smooth + +8.536792517585443 +47.34984134088677 +416.27560255460406 +-90.72537088543922 +87.38553796393882 +0 +120 +absolute + + + +0.01 +smooth + +8.536793716418293 +47.34984150377867 +416.2957502159873 +-90.61122286701965 +87.37393908599441 +0 +120 +absolute + + + +0.01 +smooth + +8.536794916335078 +47.3498416680883 +416.31576699131335 +-90.49765628745817 +87.36233479178532 +0 +120 +absolute + + + +0.01 +smooth + +8.536796117178682 +47.34984183383516 +416.3356486906227 +-90.3846995325185 +87.35072618183291 +0 +120 +absolute + + + +0.01 +smooth + +8.536797319003812 +47.34984200104188 +416.35539719630077 +-90.2723408207612 +87.3391134139306 +0 +120 +absolute + + + +0.01 +smooth + +8.536798524997918 +47.349842169775165 +416.3751040773564 +-90.15997593201882 +87.32748247916092 +0 +120 +absolute + + + +0.01 +smooth + +8.53679973616547 +47.349842340064825 +416.39479804416953 +-90.04741829142624 +87.31582857829538 +0 +120 +absolute + + + +0.01 +smooth + +8.536800952358439 +47.34984251192304 +416.4144747323296 +-89.93470034370537 +87.30415197651573 +0 +120 +absolute + + + +0.01 +smooth + +8.536802173428796 +47.34984268536205 +416.43412977742656 +-89.82185453357845 +87.29245293900395 +0 +120 +absolute + + + +0.01 +smooth + +8.536803399228518 +47.349842860393984 +416.4537588150495 +-89.70891330576741 +87.28073173094182 +0 +120 +absolute + + + +0.01 +smooth + +8.536804629609575 +47.34984303703109 +416.4733574807886 +-89.59590910499436 +87.26898861751123 +0 +120 +absolute + + + +0.01 +smooth + +8.53680586442395 +47.34984321528553 +416.4929214102331 +-89.48287437598147 +87.25722386389408 +0 +120 +absolute + + + +0.01 +smooth + +8.536807103523609 +47.349843395169536 +416.51244623897276 +-89.36984156345072 +87.24543773527219 +0 +120 +absolute + + + +0.01 +smooth + +8.53680834676053 +47.34984357669529 +416.5319276025972 +-89.25684311212422 +87.23363049682747 +0 +120 +absolute + + + +0.01 +smooth + +8.536809593986684 +47.349843759874965 +416.55136113669585 +-89.14391146672402 +87.2218024137417 +0 +120 +absolute + + + +0.01 +smooth + +8.536810845054047 +47.34984394472079 +416.5707424768584 +-89.03107907197223 +87.20995375119685 +0 +120 +absolute + + + +0.01 +smooth + +8.536812099814597 +47.34984413124494 +416.59006725867476 +-88.91837837259091 +87.19808477437469 +0 +120 +absolute + + + +0.01 +smooth + +8.536813358120304 +47.34984431945965 +416.6093311177342 +-88.80584181330215 +87.18619574845718 +0 +120 +absolute + + + +0.01 +smooth + +8.536814619823138 +47.34984450937704 +416.6285296896263 +-88.69350183882798 +87.17428693862608 +0 +120 +absolute + + + +0.01 +smooth + +8.53681588477508 +47.34984470100939 +416.6476586099408 +-88.58139089389054 +87.16235861006335 +0 +120 +absolute + + + +0.01 +smooth + +8.536817152828101 +47.34984489436883 +416.66671351426726 +-88.46954142321187 +87.15041102795075 +0 +120 +absolute + + + +0.01 +smooth + +8.536818423834177 +47.349845089467614 +416.68569003819545 +-88.35798587151405 +87.13844445747026 +0 +120 +absolute + + + +0.01 +smooth + +8.536819697645281 +47.3498452863179 +416.7045838173149 +-88.24675668351917 +87.12645916380367 +0 +120 +absolute + + + +0.01 +smooth + +8.536820974113386 +47.34984548493189 +416.72339048721506 +-88.13588630394925 +87.11445541213287 +0 +120 +absolute + + + +0.01 +smooth + +8.53682225309047 +47.34984568532179 +416.74210568348576 +-88.02540717752645 +87.10243346763971 +0 +120 +absolute + + + +0.01 +smooth + +8.536823534428498 +47.34984588749978 +416.7607250417164 +-87.91535174897277 +87.09039359550604 +0 +120 +absolute + + + +0.01 +smooth + +8.536824817979456 +47.34984609147808 +416.7792441974968 +-87.80575246301035 +87.07833606091376 +0 +120 +absolute + + + +0.01 +smooth + +8.53682610359531 +47.34984629726886 +416.79765878641643 +-87.69664176436123 +87.0662611290447 +0 +120 +absolute + + + +0.01 +smooth + +8.536827391128037 +47.34984650488435 +416.81596444406495 +-87.58805209774746 +87.05416906508077 +0 +120 +absolute + + + +0.01 +smooth + +8.536828680429611 +47.349846714336714 +416.83415680603196 +-87.48001590789119 +87.04206013420381 +0 +120 +absolute + + + +0.01 +smooth + +8.536829971352004 +47.34984692563817 +416.8522315079071 +-87.37256563951443 +87.02993460159566 +0 +120 +absolute + + + +0.01 +smooth + +8.536831263747196 +47.3498471388009 +416.87018418527987 +-87.26573373733929 +87.01779273243821 +0 +120 +absolute + + + +0.01 +smooth + +8.536832557467154 +47.3498473538371 +416.88801047374 +-87.15955264608783 +87.00563479191332 +0 +120 +absolute + + + +0.01 +smooth + +8.536833852363856 +47.34984757075898 +416.90570600887713 +-87.05405481048214 +86.99346104520285 +0 +120 +absolute + + + +0.01 +smooth + +8.536835148289274 +47.34984778957873 +416.92326642628086 +-86.94927267524427 +86.98127175748868 +0 +120 +absolute + + + +0.01 +smooth + +8.536836445095386 +47.34984801030855 +416.94068736154054 +-86.84523868509632 +86.96906719395265 +0 +120 +absolute + + + +0.01 +smooth + +8.53683774263416 +47.349848232960625 +416.9579644502461 +-86.74198528476037 +86.95684761977664 +0 +120 +absolute + + + +0.01 +smooth + +8.536839040757574 +47.34984845754717 +416.975093327987 +-86.63954491895848 +86.9446133001425 +0 +120 +absolute + + + +0.01 +smooth + +8.536840339317607 +47.34984868408036 +416.99206963035294 +-86.53795003241274 +86.9323645002321 +0 +120 +absolute + + + +0.01 +smooth + +8.536841638166223 +47.3498489125724 +417.0088889929335 +-86.43723306984518 +86.92010148522732 +0 +120 +absolute + + + +0.01 +smooth + +8.536842937155402 +47.34984914303548 +417.0255470513182 +-86.33742647597794 +86.90782452031002 +0 +120 +absolute + + + +0.01 +smooth + +8.536844236137117 +47.34984937548181 +417.0420394410968 +-86.23856269553306 +86.89553387066205 +0 +120 +absolute + + + +0.01 +smooth + +8.536845534963343 +47.34984960992359 +417.05836179785877 +-86.14067417323263 +86.88322980146526 +0 +120 +absolute + + + +0.01 +smooth + +8.536846833486052 +47.34984984637299 +417.0745097571938 +-86.04379335379872 +86.87091257790155 +0 +120 +absolute + + + +0.01 +smooth + +8.53684813155722 +47.349850084842245 +417.09047895469143 +-85.9479526819534 +86.85858246515276 +0 +120 +absolute + + + +0.01 +smooth + +8.536849429028821 +47.34985032534351 +417.10626502594135 +-85.85318460241874 +86.84623972840079 +0 +120 +absolute + + + +0.01 +smooth + +8.536850725752826 +47.349850567889014 +417.1218636065332 +-85.75952155991686 +86.83388463282746 +0 +120 +absolute + + + +0.01 +smooth + +8.536852021841897 +47.34985081254689 +417.1372805318754 +-85.66691669582896 +86.82151770633061 +0 +120 +absolute + + + +0.01 +smooth + +8.536853320244822 +47.34985105998692 +417.15263246008 +-85.57446472616199 +86.80914206093335 +0 +120 +absolute + + + +0.01 +smooth + +8.536854621714376 +47.34985131039292 +417.16794981903774 +-85.48193743586175 +86.79675803066246 +0 +120 +absolute + + + +0.01 +smooth + +8.53685592610438 +47.34985156375413 +417.1832278283826 +-85.38938109931726 +86.78436498001984 +0 +120 +absolute + + + +0.01 +smooth + +8.536857233268659 +47.349851820059826 +417.19846170774815 +-85.29684199091747 +86.77196227350746 +0 +120 +absolute + + + +0.01 +smooth + +8.536858543061028 +47.349852079299176 +417.2136466767675 +-85.20436638505124 +86.75954927562712 +0 +120 +absolute + + + +0.01 +smooth + +8.536859855335308 +47.34985234146149 +417.2287779550748 +-85.11200055610757 +86.74712535088078 +0 +120 +absolute + + + +0.01 +smooth + +8.536861169945322 +47.34985260653594 +417.2438507623031 +-85.01979077847537 +86.73468986377026 +0 +120 +absolute + + + +0.01 +smooth + +8.536862486744887 +47.349852874511804 +417.25886031808636 +-84.92778332654359 +86.72224217879753 +0 +120 +absolute + + + +0.01 +smooth + +8.536863805587831 +47.34985314537831 +417.2738018420581 +-84.83602447470118 +86.70978166046443 +0 +120 +absolute + + + +0.01 +smooth + +8.536865126327967 +47.349853419124706 +417.28867055385183 +-84.74456049733705 +86.69730767327286 +0 +120 +absolute + + + +0.01 +smooth + +8.536866448819117 +47.349853695740194 +417.3034616731011 +-84.65343766884013 +86.68481958172471 +0 +120 +absolute + + + +0.01 +smooth + +8.536867772915102 +47.349853975214046 +417.31817041943947 +-84.56270226359938 +86.67231675032187 +0 +120 +absolute + + + +0.01 +smooth + +8.536869098469742 +47.34985425753549 +417.33279201250065 +-84.47240055600376 +86.65979854356621 +0 +120 +absolute + + + +0.01 +smooth + +8.536870425336863 +47.34985454269376 +417.3473216719182 +-84.38257882044218 +86.6472643259597 +0 +120 +absolute + + + +0.01 +smooth + +8.53687175337028 +47.34985483067811 +417.36175461732563 +-84.2932833313036 +86.63471346200413 +0 +120 +absolute + + + +0.01 +smooth + +8.53687308242381 +47.349855121477745 +417.3760860683565 +-84.20456036297693 +86.62214531620143 +0 +120 +absolute + + + +0.01 +smooth + +8.53687441235128 +47.34985541508192 +417.3903112446444 +-84.1164561898511 +86.6095592530535 +0 +120 +absolute + + + +0.01 +smooth + +8.53687574300651 +47.349855711479876 +417.40442536582304 +-84.02901708631511 +86.59695463706223 +0 +120 +absolute + + + +0.01 +smooth + +8.536877074243318 +47.34985601066085 +417.4184236515258 +-83.94228932675784 +86.5843308327295 +0 +120 +absolute + + + +0.01 +smooth + +8.536878405915527 +47.34985631261408 +417.43230132138666 +-83.85631918556828 +86.57168720455724 +0 +120 +absolute + + + +0.01 +smooth + +8.536879737876957 +47.349856617328804 +417.44605359503873 +-83.77115293713534 +86.5590231170473 +0 +120 +absolute + + + +0.01 +smooth + +8.536881069981424 +47.34985692479424 +417.4596756921157 +-83.68683685584793 +86.54633793470155 +0 +120 +absolute + + + +0.01 +smooth + +8.536882402082753 +47.34985723499965 +417.4731628322512 +-83.60341721609498 +86.53363102202191 +0 +120 +absolute + + + +0.01 +smooth + +8.536883734034765 +47.34985754793425 +417.4865102350789 +-83.52094029226551 +86.52090174351028 +0 +120 +absolute + + + +0.01 +smooth + +8.53688506569128 +47.3498578635873 +417.4997131202324 +-83.43945235874841 +86.50814946366853 +0 +120 +absolute + + + +0.01 +smooth + +8.536886396906114 +47.34985818194803 +417.51276670734507 +-83.3589996899326 +86.49537354699856 +0 +120 +absolute + + + +0.01 +smooth + +8.536887727533095 +47.34985850300566 +417.5256662160507 +-83.27962856020704 +86.48257335800227 +0 +120 +absolute + + + +0.01 +smooth + +8.53688905742604 +47.349858826749454 +417.53840686598267 +-83.20138524396069 +86.46974826118154 +0 +120 +absolute + + + +0.01 +smooth + +8.536890386438767 +47.34985915316864 +417.5509838767748 +-83.12431601558244 +86.45689762103825 +0 +120 +absolute + + + +0.01 +smooth + +8.536891714425098 +47.34985948225244 +417.56339246806044 +-83.04846714946126 +86.4440208020743 +0 +120 +absolute + + + +0.01 +smooth + +8.536893041238855 +47.349859813990115 +417.57562785947334 +-82.97388491998609 +86.43111716879159 +0 +120 +absolute + + + +0.01 +smooth + +8.53689436673386 +47.34986014837088 +417.58768527064706 +-82.90061560154587 +86.41818608569199 +0 +120 +absolute + + + +0.01 +smooth + +8.536895690763929 +47.34986048538399 +417.599559921215 +-82.8287054685295 +86.40522691727742 +0 +120 +absolute + + + +0.01 +smooth + +8.536897013182886 +47.34986082501868 +417.611247030811 +-82.75820079532598 +86.39223902804974 +0 +120 +absolute + + + +0.01 +smooth + +8.53689833384455 +47.34986116726418 +417.62274181906855 +-82.68914785632421 +86.37922178251087 +0 +120 +absolute + + + +0.01 +smooth + +8.536899652602742 +47.34986151210973 +417.6340395056211 +-82.62159292591312 +86.36617454516266 +0 +120 +absolute + + + +0.01 +smooth + +8.536900969311281 +47.34986185954457 +417.6451353101023 +-82.55558227848168 +86.35309668050704 +0 +120 +absolute + + + +0.01 +smooth + +8.536902283823991 +47.349862209557934 +417.6560244521458 +-82.4911621884188 +86.33998755304589 +0 +120 +absolute + + + +0.01 +smooth + +8.536903595994689 +47.34986256213906 +417.6667021513852 +-82.42837893011341 +86.32684652728108 +0 +120 +absolute + + + +0.01 +smooth + +8.536904905677197 +47.34986291727719 +417.677163627454 +-82.36727877795451 +86.31367296771452 +0 +120 +absolute + + + +0.01 +smooth + +8.536906212725336 +47.34986327496155 +417.6874040999858 +-82.30790800633098 +86.30046623884812 +0 +120 +absolute + + + +0.01 +smooth + +8.536907516992926 +47.34986363518139 +417.69741878861413 +-82.25031288963177 +86.2872257051837 +0 +120 +absolute + + + +0.01 +smooth + +8.53690881867818 +47.34986399808301 +417.7072206061943 +-82.19433376320113 +86.27395276704277 +0 +120 +absolute + + + +0.01 +smooth + +8.536910120818437 +47.34986436509895 +417.7169680917882 +-82.1381276560724 +86.26066539947938 +0 +120 +absolute + + + +0.01 +smooth + +8.536911424036303 +47.34986473654401 +417.7266952881433 +-82.08132263088386 +86.24736691228757 +0 +120 +absolute + + + +0.01 +smooth + +8.536912728179102 +47.34986511237789 +417.73639636528196 +-82.0240129951096 +86.23405599411632 +0 +120 +absolute + + + +0.01 +smooth + +8.536914033094156 +47.34986549256023 +417.74606549322624 +-81.96629305622358 +86.22073133361452 +0 +120 +absolute + + + +0.01 +smooth + +8.536915338628798 +47.349865877050654 +417.75569684199826 +-81.90825712169983 +86.20739161943112 +0 +120 +absolute + + + +0.01 +smooth + +8.536916644630358 +47.34986626580887 +417.76528458162056 +-81.84999949901238 +86.19403554021505 +0 +120 +absolute + + + +0.01 +smooth + +8.536917950946156 +47.3498666587945 +417.77482288211496 +-81.79161449563524 +86.18066178461524 +0 +120 +absolute + + + +0.01 +smooth + +8.536919257423524 +47.349867055967216 +417.7843059135038 +-81.73319641904243 +86.16726904128068 +0 +120 +absolute + + + +0.01 +smooth + +8.536920563909781 +47.34986745728665 +417.7937278458092 +-81.67483957670792 +86.15385599886015 +0 +120 +absolute + + + +0.01 +smooth + +8.536921870252261 +47.349867862712486 +417.8030828490534 +-81.61663827610577 +86.14042134600273 +0 +120 +absolute + + + +0.01 +smooth + +8.536923176298295 +47.34986827220437 +417.8123650932585 +-81.55868682471004 +86.1269637713573 +0 +120 +absolute + + + +0.01 +smooth + +8.536924481895204 +47.34986868572196 +417.82156874844685 +-81.50107952999467 +86.11348196357278 +0 +120 +absolute + + + +0.01 +smooth + +8.53692578689031 +47.3498691032249 +417.83068798464035 +-81.44391069943366 +86.09997461129807 +0 +120 +absolute + + + +0.01 +smooth + +8.536927091130948 +47.34986952467284 +417.83971697186144 +-81.3872746405011 +86.08644040318214 +0 +120 +absolute + + + +0.01 +smooth + +8.536928394464443 +47.34986995002546 +417.8486498801322 +-81.33126566067095 +86.07287802787395 +0 +120 +absolute + + + +0.01 +smooth + +8.536929696738124 +47.34987037924242 +417.8574808794748 +-81.27597806741728 +86.05928617402239 +0 +120 +absolute + + + +0.01 +smooth + +8.536930997799313 +47.34987081228335 +417.86620413991153 +-81.22150616821406 +86.04566353027643 +0 +120 +absolute + + + +0.01 +smooth + +8.536932297495339 +47.349871249107906 +417.87481383146445 +-81.16794427053529 +86.03200878528492 +0 +120 +absolute + + + +0.01 +smooth + +8.536933595673533 +47.349871689675766 +417.88330412415576 +-81.11538668185504 +86.01832062769687 +0 +120 +absolute + + + +0.01 +smooth + +8.536934892181215 +47.34987213394656 +417.8916691880076 +-81.06392770964726 +86.00459774616117 +0 +120 +absolute + + + +0.01 +smooth + +8.536936186865715 +47.34987258187995 +417.8999031930423 +-81.01366166138601 +85.99083882932673 +0 +120 +absolute + + + +0.01 +smooth + +8.536937479574362 +47.34987303343562 +417.9080003092819 +-80.96468284454534 +85.97704256584258 +0 +120 +absolute + + + +0.01 +smooth + +8.536938770154482 +47.349873488573195 +417.91595470674866 +-80.91708556659918 +85.96320764435755 +0 +120 +absolute + + + +0.01 +smooth + +8.536940058453402 +47.34987394725234 +417.9237605554647 +-80.8709641350216 +85.94933275352061 +0 +120 +absolute + + + +0.01 +smooth + +8.536941344318446 +47.3498744094327 +417.9314120254523 +-80.82641285728661 +85.93541658198069 +0 +120 +absolute + + + +0.01 +smooth + +8.536942627596945 +47.34987487507395 +417.9389032867336 +-80.78352604086821 +85.9214578183867 +0 +120 +absolute + + + +0.01 +smooth + +8.536943908136223 +47.34987534413574 +417.94622850933075 +-80.74239799324043 +85.90745515138761 +0 +120 +absolute + + + +0.01 +smooth + +8.53694518578361 +47.349875816577715 +417.9533818632659 +-80.70312302187729 +85.89340726963232 +0 +120 +absolute + + + +0.01 +smooth + +8.53694646038643 +47.34987629235954 +417.9603575185613 +-80.66579543425277 +85.87931286176979 +0 +120 +absolute + + + +0.01 +smooth + +8.536947731792013 +47.34987677144087 +417.96714964523915 +-80.63050953784092 +85.8651706164489 +0 +120 +absolute + + + +0.01 +smooth + +8.536948999847684 +47.349877253781344 +417.97375241332156 +-80.59735964011576 +85.85097922231861 +0 +120 +absolute + + + +0.01 +smooth + +8.536950264400769 +47.34987773934065 +417.98015999283075 +-80.56644004855127 +85.83673736802787 +0 +120 +absolute + + + +0.01 +smooth + +8.536951525298598 +47.34987822807842 +417.9863665537889 +-80.53784507062151 +85.82244374222559 +0 +120 +absolute + + + +0.01 +smooth + +8.536952782388493 +47.34987871995432 +417.99236626621814 +-80.51166901380047 +85.80809703356068 +0 +120 +absolute + + + +0.01 +smooth + +8.536954035517788 +47.349879214927995 +417.9981533001408 +-80.48800618556216 +85.79369593068213 +0 +120 +absolute + + + +0.01 +smooth + +8.536955284533803 +47.34987971295911 +418.00372182557896 +-80.46695089338061 +85.77923912223882 +0 +120 +absolute + + + +0.01 +smooth + +8.53695652928387 +47.349880214007314 +418.00906601255474 +-80.44859744472981 +85.76472529687967 +0 +120 +absolute + + + +0.01 +smooth + +8.536957769615315 +47.34988071803227 +418.01418003109046 +-80.43304014708383 +85.75015314325368 +0 +120 +absolute + + + +0.01 +smooth + +8.536959005375461 +47.34988122499363 +418.0190580512081 +-80.42037330791662 +85.73552135000972 +0 +120 +absolute + + + +0.01 +smooth + +8.536960236411641 +47.349881734851046 +418.0236942429301 +-80.4106912347022 +85.72082860579674 +0 +120 +absolute + + + +0.01 +smooth + +8.536961462571181 +47.34988224756418 +418.02808277627844 +-80.40408823491467 +85.70607359926368 +0 +120 +absolute + + + +0.01 +smooth + +8.536962683701402 +47.34988276309268 +418.0322178212754 +-80.40065861602795 +85.69125501905945 +0 +120 +absolute + + + +0.01 +smooth + +8.536963900151296 +47.34988328168129 +418.03612018100443 +-80.40018327464254 +85.67637476063653 +0 +120 +absolute + + + +0.01 +smooth + +8.536965115464838 +47.34988380538453 +418.03998122071465 +-80.40040887600247 +85.66145515194184 +0 +120 +absolute + + + +0.01 +smooth + +8.536966330219922 +47.34988433456169 +418.04383644267995 +-80.40086990153497 +85.64649957550328 +0 +120 +absolute + + + +0.01 +smooth + +8.536967544244058 +47.349884869144844 +418.0476816461229 +-80.40156414862557 +85.63150661831345 +0 +120 +absolute + + + +0.01 +smooth + +8.536968757364749 +47.34988540906597 +418.0515126302657 +-80.40248941465975 +85.61647486736477 +0 +120 +absolute + + + +0.01 +smooth + +8.536969969409496 +47.34988595425715 +418.05532519433115 +-80.40364349702314 +85.60140290964985 +0 +120 +absolute + + + +0.01 +smooth + +8.536971180205805 +47.349886504650385 +418.05911513754154 +-80.40502419310121 +85.58628933216114 +0 +120 +absolute + + + +0.01 +smooth + +8.536972389581184 +47.34988706017772 +418.06287825911915 +-80.40662930027955 +85.57113272189119 +0 +120 +absolute + + + +0.01 +smooth + +8.53697359736314 +47.349887620771206 +418.06661035828694 +-80.40845661594368 +85.55593166583253 +0 +120 +absolute + + + +0.01 +smooth + +8.536974803379175 +47.34988818636287 +418.070307234267 +-80.41050393747916 +85.54068475097769 +0 +120 +absolute + + + +0.01 +smooth + +8.536976007456788 +47.349888756884745 +418.0739646862818 +-80.4127690622715 +85.52539056431914 +0 +120 +absolute + + + +0.01 +smooth + +8.53697720942349 +47.349889332268866 +418.0775785135538 +-80.41524978770624 +85.51004769284941 +0 +120 +absolute + + + +0.01 +smooth + +8.536978409106785 +47.349889912447274 +418.08114451530565 +-80.41794391116895 +85.49465472356108 +0 +120 +absolute + + + +0.01 +smooth + +8.536979606334178 +47.349890497352014 +418.0846584907598 +-80.42084923004518 +85.4792102434466 +0 +120 +absolute + + + +0.01 +smooth + +8.536980800933177 +47.34989108691511 +418.0881162391386 +-80.42396354172047 +85.46371283949856 +0 +120 +absolute + + + +0.01 +smooth + +8.536981992731281 +47.3498916810686 +418.0915135596645 +-80.42728464358032 +85.44816109870939 +0 +120 +absolute + + + +0.01 +smooth + +8.536983181555998 +47.34989227974453 +418.0948462515601 +-80.43081033301033 +85.43255360807169 +0 +120 +absolute + + + +0.01 +smooth + +8.536984367234831 +47.34989288287491 +418.0981101140477 +-80.43453840739595 +85.41688895457793 +0 +120 +absolute + + + +0.01 +smooth + +8.536985549595284 +47.3498934903918 +418.10130094634985 +-80.43846666412281 +85.40116572522062 +0 +120 +absolute + + + +0.01 +smooth + +8.53698672846487 +47.34989410222724 +418.1044145476891 +-80.44259290057644 +85.38538250699236 +0 +120 +absolute + + + +0.01 +smooth + +8.536987903671086 +47.34989471831325 +418.10744671728787 +-80.44691491414237 +85.36953788688561 +0 +120 +absolute + + + +0.01 +smooth + +8.536989075041438 +47.34989533858187 +418.11039325436843 +-80.45143050220611 +85.35363045189288 +0 +120 +absolute + + + +0.01 +smooth + +8.53699024240343 +47.34989596296515 +418.11324995815346 +-80.45613746215321 +85.3376587890067 +0 +120 +absolute + + + +0.01 +smooth + +8.536991405584569 +47.3498965913951 +418.1160126278654 +-80.46103359136927 +85.32162148521962 +0 +120 +absolute + + + +0.01 +smooth + +8.53699256441236 +47.34989722380377 +418.1186770627267 +-80.46611668723978 +85.30551712752413 +0 +120 +absolute + + + +0.01 +smooth + +8.53699371871431 +47.34989786012321 +418.12123906195984 +-80.47138454715028 +85.28934430291275 +0 +120 +absolute + + + +0.01 +smooth + +8.536994868317915 +47.34989850028544 +418.12369442478723 +-80.47683496848634 +85.27310159837802 +0 +120 +absolute + + + +0.01 +smooth + +8.53699601305069 +47.3498991442225 +418.12603895043134 +-80.4824657486335 +85.25678760091245 +0 +120 +absolute + + + +0.01 +smooth + +8.536997152740136 +47.34989979186642 +418.1282684381147 +-80.48827468497727 +85.24040089750855 +0 +120 +absolute + + + +0.01 +smooth + +8.536998287213759 +47.349900443149245 +418.13037868705976 +-80.49425957490321 +85.22394007515884 +0 +120 +absolute + + + +0.01 +smooth + +8.53699941629906 +47.34990109800301 +418.1323654964889 +-80.50041821579687 +85.20740372085585 +0 +120 +absolute + + + +0.01 +smooth + +8.537000539823547 +47.34990175635975 +418.13422466562474 +-80.5067484050438 +85.19079042159211 +0 +120 +absolute + + + +0.01 +smooth + +8.537001657614724 +47.349902418151515 +418.1359519936897 +-80.5132479400295 +85.1740987643601 +0 +120 +absolute + + + +0.01 +smooth + +8.537002769500099 +47.34990308331031 +418.13754327990614 +-80.51991461813957 +85.15732733615239 +0 +120 +absolute + + + +0.01 +smooth + +8.537003875307171 +47.349903751768196 +418.13899432349655 +-80.52674623675948 +85.14047472396147 +0 +120 +absolute + + + +0.01 +smooth + +8.53700497486345 +47.34990442345719 +418.1403009236835 +-80.53374059327483 +85.12353951477988 +0 +120 +absolute + + + +0.01 +smooth + +8.537006067996439 +47.34990509830935 +418.14145887968937 +-80.54089548507116 +85.1065202956001 +0 +120 +absolute + + + +0.01 +smooth + +8.53700715453364 +47.349905776256705 +418.14246399073676 +-80.54820870953398 +85.0894156534147 +0 +120 +absolute + + + +0.01 +smooth + +8.537008234302563 +47.34990645723127 +418.1433120560479 +-80.55567806404885 +85.07222417521619 +0 +120 +absolute + + + +0.01 +smooth + +8.537009307130711 +47.34990714116512 +418.14399887484547 +-80.56330134600131 +85.05494444799704 +0 +120 +absolute + + + +0.01 +smooth + +8.537010372845588 +47.349907827990265 +418.1445202463518 +-80.5710763527769 +85.03757505874984 +0 +120 +absolute + + + +0.01 +smooth + +8.5370114312747 +47.34990851763875 +418.14487196978945 +-80.57900088176116 +85.02011459446706 +0 +120 +absolute + + + +0.01 +smooth + +8.537012482245549 +47.3499092100426 +418.14504984438076 +-80.58707273033964 +85.00256164214125 +0 +120 +absolute + + + +0.01 +smooth + +8.537013526399539 +47.3499099055437 +418.14506316435853 +-80.59570626639794 +84.984916757407 +0 +120 +absolute + + + +0.01 +smooth + +8.537014568430576 +47.34991060652547 +418.14499103684085 +-80.60736386233317 +84.96719055826392 +0 +120 +absolute + + + +0.01 +smooth + +8.537015608936725 +47.349911313310464 +418.14484873052794 +-80.62237083005941 +84.94938416040794 +0 +120 +absolute + + + +0.01 +smooth + +8.53701664770027 +47.349912025810546 +418.144638278869 +-80.640632038992 +84.93149673524323 +0 +120 +absolute + + + +0.01 +smooth + +8.537017684503494 +47.349912743937615 +418.14436171531383 +-80.66205235854622 +84.91352745417409 +0 +120 +absolute + + + +0.01 +smooth + +8.537018719128676 +47.34991346760351 +418.1440210733113 +-80.68653665813731 +84.89547548860472 +0 +120 +absolute + + + +0.01 +smooth + +8.537019751358113 +47.34991419672012 +418.1436183863113 +-80.71398980718065 +84.87734000993946 +0 +120 +absolute + + + +0.01 +smooth + +8.537020780974071 +47.349914931199315 +418.14315568776294 +-80.74431667509145 +84.85912018958247 +0 +120 +absolute + + + +0.01 +smooth + +8.537021807758846 +47.349915670952974 +418.14263501111554 +-80.77742213128506 +84.84081519893805 +0 +120 +absolute + + + +0.01 +smooth + +8.53702283149472 +47.34991641589296 +418.1420583898189 +-80.8132110451768 +84.82242420941047 +0 +120 +absolute + + + +0.01 +smooth + +8.537023851963975 +47.34991716593115 +418.141427857322 +-80.85158828618191 +84.80394639240397 +0 +120 +absolute + + + +0.01 +smooth + +8.537024868948897 +47.34991792097943 +418.1407454470746 +-80.8924587237157 +84.78538091932278 +0 +120 +absolute + + + +0.01 +smooth + +8.537025882231765 +47.34991868094964 +418.1400131925257 +-80.93572722719342 +84.76672696157114 +0 +120 +absolute + + + +0.01 +smooth + +8.537026891594866 +47.34991944575367 +418.139233127125 +-80.98129866603044 +84.74798369055335 +0 +120 +absolute + + + +0.01 +smooth + +8.537027896820483 +47.349920215303406 +418.138407284322 +-81.02907790964201 +84.72915027767367 +0 +120 +absolute + + + +0.01 +smooth + +8.537028897690904 +47.349920989510714 +418.13753769756596 +-81.07896982744347 +84.71022589433633 +0 +120 +absolute + + + +0.01 +smooth + +8.537029893988407 +47.34992176828746 +418.1366264003062 +-81.13087928885007 +84.69120971194558 +0 +120 +absolute + + + +0.01 +smooth + +8.537030885495277 +47.349922551545504 +418.1356754259922 +-81.18471116327707 +84.67210090190567 +0 +120 +absolute + + + +0.01 +smooth + +8.537031871993797 +47.34992333919673 +418.13468680807324 +-81.24037032013982 +84.65289863562083 +0 +120 +absolute + + + +0.01 +smooth + +8.537032853266254 +47.34992413115303 +418.133662579999 +-81.29776162885362 +84.63360208449537 +0 +120 +absolute + + + +0.01 +smooth + +8.53703382909493 +47.34992492732626 +418.1326047752186 +-81.35678995883374 +84.6142104199335 +0 +120 +absolute + + + +0.01 +smooth + +8.53703479926211 +47.349925727628296 +418.1315154271817 +-81.41736017949546 +84.59472281333949 +0 +120 +absolute + + + +0.01 +smooth + +8.537035763550074 +47.349926531971 +418.13039656933745 +-81.4793771602541 +84.57513843611758 +0 +120 +absolute + + + +0.01 +smooth + +8.53703672174111 +47.34992734026624 +418.12925023513543 +-81.54274577052496 +84.55545645967206 +0 +120 +absolute + + + +0.01 +smooth + +8.5370376736175 +47.34992815242592 +418.128078458025 +-81.6073708797233 +84.53567605540712 +0 +120 +absolute + + + +0.01 +smooth + +8.53703861896153 +47.349928968361894 +418.12688327145554 +-81.67315735726443 +84.51579639472709 +0 +120 +absolute + + + +0.01 +smooth + +8.537039557555477 +47.34992978798603 +418.1256667088765 +-81.74001007256365 +84.49581664903614 +0 +120 +absolute + + + +0.01 +smooth + +8.537040489181631 +47.3499306112102 +418.12443080373725 +-81.80783389503627 +84.4757359897386 +0 +120 +absolute + + + +0.01 +smooth + +8.537041413622275 +47.34993143794628 +418.1231775894872 +-81.87653369409755 +84.45555358823867 +0 +120 +absolute + + + +0.01 +smooth + +8.537042330659693 +47.349932268106144 +418.12190909957576 +-81.94601433916279 +84.43526861594061 +0 +120 +absolute + + + +0.01 +smooth + +8.537043240076164 +47.34993310160168 +418.1206273674522 +-82.0161806996473 +84.4148802442487 +0 +120 +absolute + + + +0.01 +smooth + +8.537044141653979 +47.34993393834473 +418.1193344265662 +-82.08693764496635 +84.39438764456719 +0 +120 +absolute + + + +0.01 +smooth + +8.537045035175417 +47.34993477824719 +418.1180323103669 +-82.15819004453526 +84.37378998830029 +0 +120 +absolute + + + +0.01 +smooth + +8.537045920422763 +47.34993562122092 +418.1167230523039 +-82.22984276776933 +84.35308644685232 +0 +120 +absolute + + + +0.01 +smooth + +8.5370467971783 +47.349936467177805 +418.1154086858264 +-82.30180068408382 +84.33227619162747 +0 +120 +absolute + + + +0.01 +smooth + +8.537047665224314 +47.34993731602971 +418.114091244384 +-82.37396866289404 +84.31135839403004 +0 +120 +absolute + + + +0.01 +smooth + +8.537048524343087 +47.3499381676885 +418.112772761426 +-82.44625157361529 +84.29033222546423 +0 +120 +absolute + + + +0.01 +smooth + +8.5370493743169 +47.34993902206606 +418.11145527040185 +-82.51855428566286 +84.26919685733435 +0 +120 +absolute + + + +0.01 +smooth + +8.537050214928044 +47.349939879074256 +418.110140804761 +-82.59078166845202 +84.24795146104461 +0 +120 +absolute + + + +0.01 +smooth + +8.537051045958796 +47.349940738624966 +418.1088313979527 +-82.66283859139813 +84.22659520799931 +0 +120 +absolute + + + +0.01 +smooth + +8.537051867191442 +47.34994160063007 +418.1075290834264 +-82.73462992391639 +84.20512726960267 +0 +120 +absolute + + + +0.01 +smooth + +8.537052678408267 +47.349942465001405 +418.1062358946316 +-82.80606053542218 +84.18354681725891 +0 +120 +absolute + + + +0.01 +smooth + +8.537053479391554 +47.34994333165089 +418.1049538650177 +-82.87703529533076 +84.16185302237236 +0 +120 +absolute + + + +0.01 +smooth + +8.537054271426463 +47.34994420099902 +418.1036603019546 +-82.94786526820431 +84.14004243674013 +0 +120 +absolute + + + +0.01 +smooth + +8.537055061678346 +47.349945075467296 +418.1022375827179 +-83.02048305097894 +84.11810171047358 +0 +120 +absolute + + + +0.01 +smooth + +8.537055850828517 +47.34994595529804 +418.1006773270334 +-83.0951142959725 +84.09602928739871 +0 +120 +absolute + + + +0.01 +smooth + +8.537056638548485 +47.349946840392704 +418.09898792120407 +-83.17171444661632 +84.07382540080116 +0 +120 +absolute + + + +0.01 +smooth + +8.53705742450976 +47.349947730652744 +418.09717775153325 +-83.25023894634177 +84.0514902839667 +0 +120 +absolute + + + +0.01 +smooth + +8.537058208383852 +47.34994862597963 +418.095255204324 +-83.33064323858021 +84.02902417018103 +0 +120 +absolute + + + +0.01 +smooth + +8.537058989842276 +47.3499495262748 +418.09322866587956 +-83.41288276676305 +84.00642729272987 +0 +120 +absolute + + + +0.01 +smooth + +8.537059768556537 +47.34995043143972 +418.0911065225033 +-83.49691297432157 +83.98369988489894 +0 +120 +absolute + + + +0.01 +smooth + +8.537060544198146 +47.34995134137584 +418.08889716049816 +-83.5826893046872 +83.96084217997392 +0 +120 +absolute + + + +0.01 +smooth + +8.537061316438622 +47.34995225598465 +418.0866089661677 +-83.67016720129128 +83.93785441124062 +0 +120 +absolute + + + +0.01 +smooth + +8.537062084949472 +47.34995317516758 +418.0842503258148 +-83.7593021075652 +83.9147368119847 +0 +120 +absolute + + + +0.01 +smooth + +8.537062849402204 +47.34995409882607 +418.08182962574296 +-83.85004946694032 +83.89148961549188 +0 +120 +absolute + + + +0.01 +smooth + +8.537063609468333 +47.34995502686162 +418.07935525225514 +-83.94236472284798 +83.86811305504786 +0 +120 +absolute + + + +0.01 +smooth + +8.537064364819367 +47.349955959175645 +418.0768355916545 +-84.03620331871954 +83.84460736393838 +0 +120 +absolute + + + +0.01 +smooth + +8.537065115126822 +47.349956895669656 +418.0742790302447 +-84.13152069798642 +83.82097277544919 +0 +120 +absolute + + + +0.01 +smooth + +8.537065860062198 +47.349957836245046 +418.0716939543284 +-84.22827230407991 +83.79720952286594 +0 +120 +absolute + + + +0.01 +smooth + +8.537066599297018 +47.349958780803334 +418.06908875020923 +-84.32641358043146 +83.77331783947443 +0 +120 +absolute + + + +0.01 +smooth + +8.537067332502788 +47.34995972924594 +418.0664718041901 +-84.42589997047236 +83.74929795856029 +0 +120 +absolute + + + +0.01 +smooth + +8.537068059351018 +47.349960681474315 +418.0638515025743 +-84.526686917634 +83.7251501134093 +0 +120 +absolute + + + +0.01 +smooth + +8.537068779513222 +47.34996163738995 +418.0612362316652 +-84.62872986534775 +83.70087453730716 +0 +120 +absolute + + + +0.01 +smooth + +8.537069492660907 +47.34996259689428 +418.0586343777657 +-84.73198425704496 +83.67647146353958 +0 +120 +absolute + + + +0.01 +smooth + +8.53707019846559 +47.34996355988878 +418.05605432717937 +-84.83640553615705 +83.6519411253923 +0 +120 +absolute + + + +0.01 +smooth + +8.537070896598776 +47.34996452627488 +418.0535044662093 +-84.94194914611532 +83.62728375615103 +0 +120 +absolute + + + +0.01 +smooth + +8.53707158673198 +47.34996549595405 +418.05099318115845 +-85.04857053035116 +83.60249958910147 +0 +120 +absolute + + + +0.01 +smooth + +8.53707226853671 +47.349966468827766 +418.0485288583303 +-85.15622513229593 +83.57758885752936 +0 +120 +absolute + + + +0.01 +smooth + +8.537072941684478 +47.34996744479747 +418.0461198840279 +-85.264868395381 +83.55255179472043 +0 +120 +absolute + + + +0.01 +smooth + +8.537073605846796 +47.349968423764615 +418.04377464455473 +-85.37445576303773 +83.52738863396036 +0 +120 +absolute + + + +0.01 +smooth + +8.537074260695174 +47.34996940563067 +418.0415015262136 +-85.4849426786975 +83.50209960853489 +0 +120 +absolute + + + +0.01 +smooth + +8.537074905901125 +47.349970390297074 +418.039308915308 +-85.59628458579166 +83.47668495172972 +0 +120 +absolute + + + +0.01 +smooth + +8.537075541136158 +47.349971377665305 +418.0372051981412 +-85.70843692775159 +83.4511448968306 +0 +120 +absolute + + + +0.01 +smooth + +8.537076166071783 +47.34997236763681 +418.0351987610161 +-85.82135514800862 +83.42547967712323 +0 +120 +absolute + + + +0.01 +smooth + +8.537076780379513 +47.349973360113054 +418.0332979902362 +-85.93499468999416 +83.39968952589334 +0 +120 +absolute + + + +0.01 +smooth + +8.53707738373086 +47.349974354995496 +418.03151127210447 +-86.04931099713953 +83.37377467642663 +0 +120 +absolute + + + +0.01 +smooth + +8.537077975797333 +47.34997535218558 +418.0298469929243 +-86.16425951287613 +83.34773536200885 +0 +120 +absolute + + + +0.01 +smooth + +8.537078556250442 +47.349976351584765 +418.0283135389989 +-86.27979568063533 +83.32157181592567 +0 +120 +absolute + + + +0.01 +smooth + +8.5370791247617 +47.34997735309453 +418.02691929663126 +-86.39587494384847 +83.29528427146286 +0 +120 +absolute + + + +0.01 +smooth + +8.53707968100262 +47.349978356616305 +418.0256726521249 +-86.51245274594692 +83.26887296190608 +0 +120 +absolute + + + +0.01 +smooth + +8.53708022464471 +47.34997936205157 +418.02458199178284 +-86.62948453036205 +83.24233812054112 +0 +120 +absolute + + + +0.01 +smooth + +8.53708075535948 +47.34998036930176 +418.0236557019082 +-86.74692574052521 +83.21567998065363 +0 +120 +absolute + + + +0.01 +smooth + +8.537081272818444 +47.34998137826836 +418.0229021688045 +-86.86473181986781 +83.18889877552937 +0 +120 +absolute + + + +0.01 +smooth + +8.53708177669311 +47.34998238885281 +418.02232977877463 +-86.98285821182115 +83.16199473845407 +0 +120 +absolute + + + +0.01 +smooth + +8.537082266654991 +47.349983400956575 +418.02194691812196 +-87.10126035981666 +83.13496810271339 +0 +120 +absolute + + + +0.01 +smooth + +8.537082742375599 +47.349984414481106 +418.02176197314964 +-87.21989370728566 +83.10781910159312 +0 +120 +absolute + + + +0.01 +smooth + +8.53708320723409 +47.3499854299017 +418.0217471962727 +-87.33896786735656 +83.0805380923912 +0 +120 +absolute + + + +0.01 +smooth + +8.53708367595171 +47.34998644947836 +418.0217588233601 +-87.45948912399086 +83.05308523061451 +0 +120 +absolute + + + +0.01 +smooth + +8.537084149407976 +47.34998747336621 +418.0217809686991 +-87.58153939144603 +83.02545755446428 +0 +120 +absolute + + + +0.01 +smooth + +8.537084626822491 +47.349988501465305 +418.02181358108186 +-87.70508798971117 +82.99765652418861 +0 +120 +absolute + + + +0.01 +smooth + +8.53708510741488 +47.349989533675725 +418.0218566093014 +-87.83010423877545 +82.96968360003565 +0 +120 +absolute + + + +0.01 +smooth + +8.537085590404754 +47.349990569897486 +418.0219100021499 +-87.95655745862793 +82.94154024225342 +0 +120 +absolute + + + +0.01 +smooth + +8.537086075011725 +47.34999161003065 +418.0219737084201 +-88.08441696925782 +82.91322791109006 +0 +120 +absolute + + + +0.01 +smooth + +8.537086560455418 +47.349992653975306 +418.0220476769048 +-88.21365209065432 +82.8847480667937 +0 +120 +absolute + + + +0.01 +smooth + +8.537087045955438 +47.34999370163147 +418.0221318563963 +-88.34423214280649 +82.85610216961241 +0 +120 +absolute + + + +0.01 +smooth + +8.537087530731407 +47.349994752899235 +418.0222261956872 +-88.47612644570351 +82.82729167979433 +0 +120 +absolute + + + +0.01 +smooth + +8.537088014002936 +47.34999580767861 +418.02233064357017 +-88.60930431933448 +82.79831805758751 +0 +120 +absolute + + + +0.01 +smooth + +8.53708849498964 +47.349996865869684 +418.02244514883773 +-88.7437350836886 +82.7691827632401 +0 +120 +absolute + + + +0.01 +smooth + +8.537088972911139 +47.34999792737253 +418.0225696602826 +-88.87938805875501 +82.73988725700018 +0 +120 +absolute + + + +0.01 +smooth + +8.537089446987046 +47.34999899208716 +418.0227041266973 +-89.01623256452282 +82.71043299911588 +0 +120 +absolute + + + +0.01 +smooth + +8.53708991643697 +47.35000005991363 +418.02284849687413 +-89.15423792098119 +82.68082144983528 +0 +120 +absolute + + + +0.01 +smooth + +8.537090380480535 +47.35000113075202 +418.02300271960604 +-89.29337344811924 +82.65105406940646 +0 +120 +absolute + + + +0.01 +smooth + +8.53709083833735 +47.35000220450239 +418.0231667436854 +-89.43360846592616 +82.62113231807756 +0 +120 +absolute + + + +0.01 +smooth + +8.537091289227035 +47.35000328106478 +418.023340517905 +-89.5749122943911 +82.59105765609668 +0 +120 +absolute + + + +0.01 +smooth + +8.537091732369204 +47.35000436033925 +418.02352399105723 +-89.71725425350317 +82.56083154371196 +0 +120 +absolute + + + +0.01 +smooth + +8.537092166983467 +47.350005442225836 +418.02371711193456 +-89.8606036632515 +82.5304554411714 +0 +120 +absolute + + + +0.01 +smooth + +8.537092592289444 +47.35000652662462 +418.02391982932977 +-90.00492984362523 +82.49993080872318 +0 +120 +absolute + + + +0.01 +smooth + +8.53709300750675 +47.35000761343566 +418.0241320920355 +-90.15020211461358 +82.46925910661543 +0 +120 +absolute + + + +0.01 +smooth + +8.537093411854999 +47.350008702558995 +418.02435384884416 +-90.29638979620563 +82.43844179509618 +0 +120 +absolute + + + +0.01 +smooth + +8.537093804553807 +47.35000979389467 +418.0245850485484 +-90.44346220839054 +82.40748033441358 +0 +120 +absolute + + + +0.01 +smooth + +8.537094184822788 +47.35001088734276 +418.0248256399408 +-90.59138867115746 +82.37637618481573 +0 +120 +absolute + + + +0.01 +smooth + +8.537094551881559 +47.35001198280332 +418.02507557181383 +-90.74013850449552 +82.3451308065507 +0 +120 +absolute + + + +0.01 +smooth + +8.537094904949733 +47.350013080176396 +418.0253347929603 +-90.88968102839387 +82.31374565986664 +0 +120 +absolute + + + +0.01 +smooth + +8.537095243246927 +47.35001417936205 +418.0256032521726 +-91.03998556284165 +82.28222220501162 +0 +120 +absolute + + + +0.01 +smooth + +8.537095565992756 +47.35001528026034 +418.0258808982434 +-91.19102142782802 +82.25056190223376 +0 +120 +absolute + + + +0.01 +smooth + +8.537095872406834 +47.35001638277131 +418.0261676799652 +-91.34275794334212 +82.21876621178117 +0 +120 +absolute + + + +0.01 +smooth + +8.537096161708776 +47.35001748679501 +418.02646354613074 +-91.49516442937306 +82.18683659390194 +0 +120 +absolute + + + +0.01 +smooth + +8.537096433118197 +47.35001859223152 +418.0267684455324 +-91.64821020591006 +82.15477450884417 +0 +120 +absolute + + + +0.01 +smooth + +8.537096685854717 +47.35001969898089 +418.02708232696284 +-91.8018645929422 +82.12258141685598 +0 +120 +absolute + + + +0.01 +smooth + +8.537096919137944 +47.35002080694315 +418.0274051392147 +-91.95609691045863 +82.09025877818546 +0 +120 +absolute + + + +0.01 +smooth + +8.537097132187498 +47.35002191601838 +418.02773683108046 +-92.11087647844849 +82.05780805308072 +0 +120 +absolute + + + +0.01 +smooth + +8.53709732422299 +47.35002302610663 +418.02807735135275 +-92.26617261690097 +82.02523070178987 +0 +120 +absolute + + + +0.01 +smooth + +8.537097494464039 +47.35002413710795 +418.02842664882417 +-92.42195464580519 +81.992528184561 +0 +120 +absolute + + + +0.01 +smooth + +8.53709764213026 +47.3500252489224 +418.02878467228726 +-92.57819188515026 +81.95970196164221 +0 +120 +absolute + + + +0.01 +smooth + +8.537097766441265 +47.35002636145003 +418.0291513705346 +-92.73485365492537 +81.92675349328164 +0 +120 +absolute + + + +0.01 +smooth + +8.537097866616673 +47.3500274745909 +418.0295266923588 +-92.89190927511962 +81.89368423972732 +0 +120 +absolute + + + +0.01 +smooth + +8.537097941876098 +47.350028588245074 +418.0299105865523 +-93.04932806572222 +81.86049566122745 +0 +120 +absolute + + + +0.01 +smooth + +8.537097991439154 +47.35002970231259 +418.030303001908 +-93.20707934672225 +81.82718921803004 +0 +120 +absolute + + + +0.01 +smooth + +8.537098014525455 +47.35003081669351 +418.0307038872181 +-93.36513243810889 +81.79376637038327 +0 +120 +absolute + + + +0.01 +smooth + +8.537098016111614 +47.35003193189987 +418.03118861972126 +-93.52365583561678 +81.76021023552698 +0 +120 +absolute + + + +0.01 +smooth + +8.537098015597849 +47.3500330499415 +418.0320127888277 +-93.68330798218938 +81.72645963934818 +0 +120 +absolute + + + +0.01 +smooth + +8.537098014638781 +47.35003417090086 +418.03318932102235 +-93.84412286423593 +81.69251187881122 +0 +120 +absolute + + + +0.01 +smooth + +8.537098013235822 +47.35003529468305 +418.03470908767304 +-94.00607686315556 +81.65836959334229 +0 +120 +absolute + + + +0.01 +smooth + +8.537098011390356 +47.35003642119317 +418.03656296014753 +-94.16914636034733 +81.6240354223675 +0 +120 +absolute + + + +0.01 +smooth + +8.537098009103788 +47.35003755033634 +418.038741809814 +-94.33330773721033 +81.58951200531308 +0 +120 +absolute + + + +0.01 +smooth + +8.537098006377523 +47.35003868201768 +418.0412365080401 +-94.49853737514367 +81.5548019816052 +0 +120 +absolute + + + +0.01 +smooth + +8.537098003212952 +47.35003981614229 +418.0440379261939 +-94.66481165554646 +81.51990799067 +0 +120 +absolute + + + +0.01 +smooth + +8.537097999611476 +47.35004095261526 +418.0471369356429 +-94.83210695981768 +81.4848326719337 +0 +120 +absolute + + + +0.01 +smooth + +8.537097995574493 +47.3500420913417 +418.0505244077554 +-95.00039966935648 +81.44957866482247 +0 +120 +absolute + + + +0.01 +smooth + +8.537097991103408 +47.350043232226746 +418.05419121389934 +-95.16966616556199 +81.41414860876249 +0 +120 +absolute + + + +0.01 +smooth + +8.537097986199615 +47.35004437517547 +418.0581282254423 +-95.33988282983323 +81.37854514317988 +0 +120 +absolute + + + +0.01 +smooth + +8.537097980864516 +47.35004552009301 +418.0623263137523 +-95.51102604356933 +81.34277090750088 +0 +120 +absolute + + + +0.01 +smooth + +8.53709797509951 +47.35004666688447 +418.0667763501972 +-95.6830721881693 +81.30682854115162 +0 +120 +absolute + + + +0.01 +smooth + +8.53709796890599 +47.35004781545493 +418.07146920614485 +-95.85599764503232 +81.27072068355832 +0 +120 +absolute + + + +0.01 +smooth + +8.537097962285365 +47.35004896570955 +418.07639575296355 +-96.02977879555745 +81.23444997414714 +0 +120 +absolute + + + +0.01 +smooth + +8.537097955239027 +47.35005011755337 +418.0815468620207 +-96.20439202114375 +81.19801905234425 +0 +120 +absolute + + + +0.01 +smooth + +8.53709794776838 +47.35005127089157 +418.0869134046844 +-96.37981370319032 +81.16143055757584 +0 +120 +absolute + + + +0.01 +smooth + +8.537097939874817 +47.3500524256292 +418.0924862523225 +-96.55602022309623 +81.12468712926805 +0 +120 +absolute + + + +0.01 +smooth + +8.537097931559742 +47.3500535816714 +418.0982562763028 +-96.73298796226058 +81.08779140684707 +0 +120 +absolute + + + +0.01 +smooth + +8.537097922824556 +47.350054738923276 +418.1042143479934 +-96.91069330208246 +81.05074602973914 +0 +120 +absolute + + + +0.01 +smooth + +8.537097913670651 +47.35005589728993 +418.11035133876214 +-97.08911262396097 +81.01355363737035 +0 +120 +absolute + + + +0.01 +smooth + +8.537097904099433 +47.35005705667646 +418.1166581199767 +-97.26822230929517 +80.97621686916692 +0 +120 +absolute + + + +0.01 +smooth + +8.537097894112296 +47.35005821698798 +418.1231255630053 +-97.44799873948418 +80.93873836455501 +0 +120 +absolute + + + +0.01 +smooth + +8.537097883710645 +47.350059378129615 +418.1297445392155 +-97.62841829592702 +80.9011207629608 +0 +120 +absolute + + + +0.01 +smooth + +8.537097872895872 +47.35006054000647 +418.1365059199755 +-97.80945736002283 +80.86336670381047 +0 +120 +absolute + + + +0.01 +smooth + +8.537097861669384 +47.35006170252362 +418.14340057665294 +-97.99109231317068 +80.8254788265302 +0 +120 +absolute + + + +0.01 +smooth + +8.537097850032573 +47.35006286558621 +418.150419380616 +-98.17329953676968 +80.78745977054615 +0 +120 +absolute + + + +0.01 +smooth + +8.537097837986842 +47.350064029099336 +418.15755320323217 +-98.35605541221888 +80.74931217528453 +0 +120 +absolute + + + +0.01 +smooth + +8.53709782553359 +47.3500651929681 +418.1647929158697 +-98.53933632091741 +80.71103868017147 +0 +120 +absolute + + + +0.01 +smooth + +8.537097812674213 +47.35006635709762 +418.1721293898963 +-98.72311864426429 +80.67264192463318 +0 +120 +absolute + + + +0.01 +smooth + +8.537097799410116 +47.350067521392994 +418.17955349667994 +-98.90737876365864 +80.63412454809583 +0 +120 +absolute + + + +0.01 +smooth + +8.537097785742695 +47.35006868575935 +418.18705610758855 +-99.09209306049956 +80.59548918998559 +0 +120 +absolute + + + +0.01 +smooth + +8.537097771673347 +47.35006985010176 +418.1946280939898 +-99.27723791618612 +80.55673848972862 +0 +120 +absolute + + + +0.01 +smooth + +8.537097757203473 +47.350071014325366 +418.2022603272518 +-99.46278971211743 +80.51787508675113 +0 +120 +absolute + + + +0.01 +smooth + +8.537097742334474 +47.35007217833526 +418.2099436787425 +-99.64872482969255 +80.47890162047928 +0 +120 +absolute + + + +0.01 +smooth + +8.537097727067747 +47.35007334203656 +418.2176690198296 +-99.83501965031058 +80.43982073033925 +0 +120 +absolute + + + +0.01 +smooth + +8.537097711404693 +47.35007450533436 +418.22542722188103 +-100.02165055537058 +80.40063505575719 +0 +120 +absolute + + + +0.01 +smooth + +8.537097695346707 +47.35007566813378 +418.2332091562647 +-100.20859392627167 +80.36134723615933 +0 +120 +absolute + + + +0.01 +smooth + +8.537097678895194 +47.35007683033993 +418.2410056943486 +-100.39582614441291 +80.3219599109718 +0 +120 +absolute + + + +0.01 +smooth + +8.537097662051547 +47.350077991857916 +418.24880770750053 +-100.58332359119342 +80.28247571962079 +0 +120 +absolute + + + +0.01 +smooth + +8.53709764481717 +47.35007915259283 +418.2566060670884 +-100.77106264801225 +80.24289730153248 +0 +120 +absolute + + + +0.01 +smooth + +8.53709762719346 +47.350080312449805 +418.2643916444801 +-100.9590196962685 +80.20322729613306 +0 +120 +absolute + + + +0.01 +smooth + +8.53709760240124 +47.350081471971315 +418.27224906542006 +-101.1473387895743 +80.1634413346946 +0 +120 +absolute + + + +0.01 +smooth + +8.537097551170088 +47.350082632913775 +418.2804418878495 +-101.33648438927818 +80.12346429492274 +0 +120 +absolute + + + +0.01 +smooth + +8.537097473028998 +47.35008379530773 +418.2889802283024 +-101.52646811689021 +80.08329489197509 +0 +120 +absolute + + + +0.01 +smooth + +8.537097368764169 +47.350084959066855 +418.29785701395923 +-101.71727086464604 +80.04293681747356 +0 +120 +absolute + + + +0.01 +smooth + +8.537097239161781 +47.35008612410477 +418.3070651719994 +-101.90887352478117 +80.00239376304009 +0 +120 +absolute + + + +0.01 +smooth + +8.537097085008027 +47.350087290335146 +418.3165976296031 +-102.10125698953131 +79.96166942029652 +0 +120 +absolute + + + +0.01 +smooth + +8.537096907089097 +47.35008845767163 +418.3264473139504 +-102.29440215113203 +79.92076748086484 +0 +120 +absolute + + + +0.01 +smooth + +8.537096706191175 +47.350089626027845 +418.3366071522211 +-102.4882899018189 +79.8796916363669 +0 +120 +absolute + + + +0.01 +smooth + +8.537096483100452 +47.350090795317456 +418.3470700715952 +-102.68290113382756 +79.83844557842465 +0 +120 +absolute + + + +0.01 +smooth + +8.537096238603116 +47.3500919654541 +418.35782899925255 +-102.87821673939357 +79.79703299866 +0 +120 +absolute + + + +0.01 +smooth + +8.537095973485357 +47.350093136351425 +418.36887686237327 +-103.07421761075254 +79.7554575886948 +0 +120 +absolute + + + +0.01 +smooth + +8.53709568853336 +47.350094307923094 +418.38020658813724 +-103.2708846401401 +79.71372304015104 +0 +120 +absolute + + + +0.01 +smooth + +8.537095384533318 +47.35009548008273 +418.3918111037244 +-103.46819871979186 +79.6718330446506 +0 +120 +absolute + + + +0.01 +smooth + +8.537095062271414 +47.350096652743986 +418.40368333631466 +-103.66614074194332 +79.62979129381533 +0 +120 +absolute + + + +0.01 +smooth + +8.537094722533839 +47.3500978258205 +418.4158162130879 +-103.86469159883018 +79.5876014792672 +0 +120 +absolute + + + +0.01 +smooth + +8.537094366106784 +47.350098999225935 +418.4282026612243 +-104.063832182688 +79.54526729262815 +0 +120 +absolute + + + +0.01 +smooth + +8.537093993776434 +47.350100172873944 +418.44083560790375 +-104.2635433857524 +79.50279242552004 +0 +120 +absolute + + + +0.01 +smooth + +8.53709360632898 +47.35010134667816 +418.45370798030615 +-104.46380610025898 +79.4601805695648 +0 +120 +absolute + + + +0.01 +smooth + +8.537093204550604 +47.35010252055221 +418.46681270561135 +-104.66460121844331 +79.41743541638431 +0 +120 +absolute + + + +0.01 +smooth + +8.537092789227504 +47.35010369440976 +418.4801427109993 +-104.86590963254098 +79.37456065760048 +0 +120 +absolute + + + +0.01 +smooth + +8.537092361145863 +47.35010486816448 +418.49369092365026 +-105.06771223478768 +79.3315599848353 +0 +120 +absolute + + + +0.01 +smooth + +8.53709192109187 +47.35010604172998 +418.50745027074396 +-105.2699899174189 +79.28843708971058 +0 +120 +absolute + + + +0.01 +smooth + +8.537091469851713 +47.35010721501991 +418.5214136794603 +-105.4727235726703 +79.24519566384828 +0 +120 +absolute + + + +0.01 +smooth + +8.537091008211583 +47.350108387947934 +418.53557407697923 +-105.6758940927775 +79.2018393988703 +0 +120 +absolute + + + +0.01 +smooth + +8.537090536957663 +47.35010956042768 +418.5499243904809 +-105.87948236997603 +79.15837198639855 +0 +120 +absolute + + + +0.01 +smooth + +8.53709005687615 +47.35011073237281 +418.5644575471449 +-106.08346929650153 +79.11479711805492 +0 +120 +absolute + + + +0.01 +smooth + +8.537089568753224 +47.35011190369697 +418.5791664741516 +-106.2878357645896 +79.07111848546137 +0 +120 +absolute + + + +0.01 +smooth + +8.537089073375078 +47.350113074313796 +418.5940440986807 +-106.49256266647586 +79.02733978023976 +0 +120 +absolute + + + +0.01 +smooth + +8.5370885715279 +47.350114244136925 +418.60908334791225 +-106.69763089439586 +78.98346469401201 +0 +120 +absolute + + + +0.01 +smooth + +8.537088063997874 +47.35011541308003 +418.62427714902606 +-106.90302134058523 +78.93949691840007 +0 +120 +absolute + + + +0.01 +smooth + +8.537087551571195 +47.35011658105673 +418.63961842920224 +-107.10871489727958 +78.89544014502579 +0 +120 +absolute + + + +0.01 +smooth + +8.53708703503405 +47.3501177479807 +418.6551001156207 +-107.31469245671447 +78.85129806551112 +0 +120 +absolute + + + +0.01 +smooth + +8.537086515172625 +47.350118913765556 +418.67071513546136 +-107.52093491112555 +78.80707437147794 +0 +120 +absolute + + + +0.01 +smooth + +8.537085992773108 +47.35012007832497 +418.6864564159041 +-107.72742315274837 +78.7627727545482 +0 +120 +absolute + + + +0.01 +smooth + +8.537085468621692 +47.35012124157257 +418.7023168841291 +-107.9341380738186 +78.71839690634377 +0 +120 +absolute + + + +0.01 +smooth + +8.53708494350456 +47.35012240342201 +418.718289467316 +-108.14106056657178 +78.67395051848658 +0 +120 +absolute + + + +0.01 +smooth + +8.537084418207904 +47.350123563786944 +418.7343670926451 +-108.34817152324351 +78.62943728259853 +0 +120 +absolute + + + +0.01 +smooth + +8.53708389351791 +47.35012472258101 +418.75054268729605 +-108.55545183606941 +78.58486089030157 +0 +120 +absolute + + + +0.01 +smooth + +8.537083370220769 +47.35012587971785 +418.7668091784489 +-108.76288239728507 +78.54022503321755 +0 +120 +absolute + + + +0.01 +smooth + +8.537082849102667 +47.350127035111115 +418.78315949328373 +-108.9704440991261 +78.49553340296839 +0 +120 +absolute + + + +0.01 +smooth + +8.537082330949795 +47.35012818867445 +418.79958655898025 +-109.17811783382811 +78.45078969117606 +0 +120 +absolute + + + +0.01 +smooth + +8.537081816548339 +47.3501293403215 +418.8160833027186 +-109.38588449362666 +78.4059975894624 +0 +120 +absolute + + + +0.01 +smooth + +8.537081306684488 +47.35013048996591 +418.83264265167867 +-109.5937249707574 +78.36116078944931 +0 +120 +absolute + + + +0.01 +smooth + +8.537080796036841 +47.350131638188365 +418.84934373905133 +-109.80176795358625 +78.31624700424281 +0 +120 +absolute + + + +0.01 +smooth + +8.53708027023561 +47.35013278653764 +418.8663902109662 +-110.0103572390383 +78.27117245495616 +0 +120 +absolute + + + +0.01 +smooth + +8.53707972894965 +47.3501339350106 +418.8837845597595 +-110.21949329215528 +78.22593776034581 +0 +120 +absolute + + + +0.01 +smooth + +8.537079172521796 +47.35013508352997 +418.9015196991815 +-110.42916018935516 +78.18054754651511 +0 +120 +absolute + + + +0.01 +smooth + +8.537078601294901 +47.35013623201859 +418.91958854298315 +-110.63934200705599 +78.13500643956753 +0 +120 +absolute + + + +0.01 +smooth + +8.537078015611801 +47.350137380399225 +418.93798400491465 +-110.85002282167571 +78.08931906560647 +0 +120 +absolute + + + +0.01 +smooth + +8.537077415815352 +47.35013852859469 +418.95669899872695 +-111.06118670963237 +78.04349005073541 +0 +120 +absolute + + + +0.01 +smooth + +8.537076802248388 +47.35013967652776 +418.9757264381701 +-111.27281774734391 +77.99752402105771 +0 +120 +absolute + + + +0.01 +smooth + +8.537076175253757 +47.35014082412123 +418.9950592369949 +-111.4849000112284 +77.95142560267686 +0 +120 +absolute + + + +0.01 +smooth + +8.537075535174306 +47.350141971297916 +419.0146903089522 +-111.69741757770385 +77.90519942169625 +0 +120 +absolute + + + +0.01 +smooth + +8.537074882352881 +47.35014311798059 +419.03461256779207 +-111.91035452318823 +77.85885010421933 +0 +120 +absolute + + + +0.01 +smooth + +8.537074217132323 +47.35014426409204 +419.0548189272653 +-112.12369492409954 +77.81238227634955 +0 +120 +absolute + + + +0.01 +smooth + +8.537073539855479 +47.35014540955506 +419.0753023011223 +-112.33742285685575 +77.76580056419027 +0 +120 +absolute + + + +0.01 +smooth + +8.53707285086519 +47.350146554292444 +419.0960556031137 +-112.5515223978749 +77.71910959384496 +0 +120 +absolute + + + +0.01 +smooth + +8.53707215050431 +47.35014769822699 +419.11707174699023 +-112.76597762357505 +77.67231399141708 +0 +120 +absolute + + + +0.01 +smooth + +8.537071439115678 +47.350148841281495 +419.1383436465023 +-112.98077261037413 +77.62541838301003 +0 +120 +absolute + + + +0.01 +smooth + +8.537070717042136 +47.35014998337875 +419.15986421540043 +-113.1958914346902 +77.57842739472724 +0 +120 +absolute + + + +0.01 +smooth + +8.537069984626532 +47.350151124441524 +419.1816263674351 +-113.41131817294114 +77.53134565267212 +0 +120 +absolute + + + +0.01 +smooth + +8.537069242211711 +47.35015226439263 +419.2036230163569 +-113.62703690154507 +77.4841777829481 +0 +120 +absolute + + + +0.01 +smooth + +8.53706849014052 +47.35015340315486 +419.2258470759167 +-113.84303169691997 +77.43692841165866 +0 +120 +absolute + + + +0.01 +smooth + +8.537067728755801 +47.35015454065102 +419.2482914598646 +-114.05928663548383 +77.3896021649072 +0 +120 +absolute + + + +0.01 +smooth + +8.537066958400398 +47.35015567680386 +419.27094908195124 +-114.27578579365463 +77.34220366879711 +0 +120 +absolute + + + +0.01 +smooth + +8.537066179417156 +47.350156811536216 +419.29381285592746 +-114.49251324785043 +77.29473754943189 +0 +120 +absolute + + + +0.01 +smooth + +8.537065392148923 +47.35015794477085 +419.31687569554356 +-114.70945307448919 +77.24720843291487 +0 +120 +absolute + + + +0.01 +smooth + +8.53706459693854 +47.35015907643057 +419.3401305145502 +-114.92658934998889 +77.19962094534961 +0 +120 +absolute + + + +0.01 +smooth + +8.537063794128855 +47.35016020643818 +419.36357022669785 +-115.1439061507676 +77.15197971283945 +0 +120 +absolute + + + +0.01 +smooth + +8.537062984062713 +47.350161334716454 +419.38718774573704 +-115.36138755324328 +77.10428936148783 +0 +120 +absolute + + + +0.01 +smooth + +8.537062167082956 +47.350162461188184 +419.4109759854185 +-115.57901763383393 +77.05655451739818 +0 +120 +absolute + + + +0.01 +smooth + +8.537061343532429 +47.35016358577616 +419.43492785949263 +-115.79678046895759 +77.00877980667396 +0 +120 +absolute + + + +0.01 +smooth + +8.53706051375398 +47.350164708403184 +419.45903628171 +-116.01466013503222 +76.96096985541857 +0 +120 +absolute + + + +0.01 +smooth + +8.537059678090452 +47.350165828992054 +419.48329416582123 +-116.23264070847583 +76.91312928973545 +0 +120 +absolute + + + +0.01 +smooth + +8.53705883688469 +47.35016694746555 +419.5076944255767 +-116.45070626570643 +76.86526273572801 +0 +120 +absolute + + + +0.01 +smooth + +8.53705799047954 +47.35016806374648 +419.53222997472716 +-116.66884088314205 +76.81737481949972 +0 +120 +absolute + + + +0.01 +smooth + +8.537057139217842 +47.35016917775761 +419.5568937270232 +-116.88702863720063 +76.76947016715397 +0 +120 +absolute + + + +0.01 +smooth + +8.537056283442446 +47.350170289421754 +419.58167859621506 +-117.10525360430023 +76.7215534047942 +0 +120 +absolute + + + +0.01 +smooth + +8.537055423496197 +47.3501713986617 +419.60657749605366 +-117.32349986085883 +76.67362915852382 +0 +120 +absolute + + + +0.01 +smooth + +8.537054559721936 +47.35017250540024 +419.63158334028924 +-117.54175148329443 +76.62570205444631 +0 +120 +absolute + + + +0.01 +smooth + +8.53705369246251 +47.35017360956016 +419.65668904267255 +-117.75999254802505 +76.57777671866506 +0 +120 +absolute + + + +0.01 +smooth + +8.537052822060767 +47.350174711064255 +419.68188751695413 +-117.97820713146868 +76.52985777728351 +0 +120 +absolute + + + +0.01 +smooth + +8.537051948859546 +47.35017580983532 +419.7071716768845 +-118.19637931004333 +76.4819498564051 +0 +120 +absolute + + + +0.01 +smooth + +8.537051073201695 +47.35017690579615 +419.73253443621417 +-118.41449316016698 +76.43405758213322 +0 +120 +absolute + + + +0.01 +smooth + +8.537050195430059 +47.35017799886954 +419.7579687086937 +-118.63253275825764 +76.38618558057135 +0 +120 +absolute + + + +0.01 +smooth + +8.53704931588748 +47.350179088978265 +419.7834674080737 +-118.85048218073335 +76.33833847782289 +0 +120 +absolute + + + +0.01 +smooth + +8.537048431363505 +47.35018017676836 +419.8091086379923 +-119.06846170646652 +76.29047421565691 +0 +120 +absolute + + + +0.01 +smooth + +8.537047534815684 +47.35018126365765 +419.83506075978073 +-119.28673760376255 +76.24250160416912 +0 +120 +absolute + + + +0.01 +smooth + +8.537046626260674 +47.35018234962057 +419.8613215396095 +-119.50530480582167 +76.19442321705435 +0 +120 +absolute + + + +0.01 +smooth + +8.537045705936496 +47.3501834345863 +419.88788341611354 +-119.72414974892301 +76.14624455158604 +0 +120 +absolute + + + +0.01 +smooth + +8.537044774081188 +47.35018451848408 +419.9147388279277 +-119.94325886934577 +76.09797110503777 +0 +120 +absolute + + + +0.01 +smooth + +8.537043830932785 +47.350185601243155 +419.94188021368717 +-120.16261860336924 +76.04960837468306 +0 +120 +absolute + + + +0.01 +smooth + +8.537042876729307 +47.35018668279273 +419.96930001202685 +-120.38221538727251 +76.00116185779542 +0 +120 +absolute + + + +0.01 +smooth + +8.537041911708794 +47.35018776306199 +419.9969906615817 +-120.60203565733481 +75.95263705164835 +0 +120 +absolute + + + +0.01 +smooth + +8.537040936109273 +47.350188841980206 +420.02494460098666 +-120.82206584983531 +75.90403945351534 +0 +120 +absolute + + + +0.01 +smooth + +8.537039950168781 +47.35018991947658 +420.0531542688769 +-121.04229240105326 +75.85537456067 +0 +120 +absolute + + + +0.01 +smooth + +8.537038954125341 +47.350190995480325 +420.0816121038872 +-121.26270174726781 +75.80664787038573 +0 +120 +absolute + + + +0.01 +smooth + +8.537037948216993 +47.350192069920695 +420.1103105446527 +-121.4832803247582 +75.75786487993615 +0 +120 +absolute + + + +0.01 +smooth + +8.53703693268176 +47.350193142726866 +420.13924202980814 +-121.70401456980356 +75.7090310865947 +0 +120 +absolute + + + +0.01 +smooth + +8.537035907757677 +47.3501942138281 +420.16839899798873 +-121.92489091868312 +75.66015198763495 +0 +120 +absolute + + + +0.01 +smooth + +8.537034873682774 +47.35019528315359 +420.1977738878294 +-122.14589580767608 +75.6112330803304 +0 +120 +absolute + + + +0.01 +smooth + +8.53703383069509 +47.3501963506326 +420.2273591379652 +-122.36701567306169 +75.56227986195456 +0 +120 +absolute + + + +0.01 +smooth + +8.53703277903265 +47.350197416194305 +420.257147187031 +-122.58823695111907 +75.51329782978095 +0 +120 +absolute + + + +0.01 +smooth + +8.53703171893348 +47.35019847976795 +420.28713047366176 +-122.80954607812737 +75.46429248108306 +0 +120 +absolute + + + +0.01 +smooth + +8.537030650635618 +47.35019954128274 +420.31730143649247 +-123.03092949036586 +75.41526931313446 +0 +120 +absolute + + + +0.01 +smooth + +8.537029574377097 +47.35020060066794 +420.34765251415837 +-123.25237362411377 +75.36623382320866 +0 +120 +absolute + + + +0.01 +smooth + +8.537028490395944 +47.35020165785272 +420.37817614529405 +-123.47386491565024 +75.31719150857911 +0 +120 +absolute + + + +0.01 +smooth + +8.537027398930192 +47.35020271276633 +420.4088647685348 +-123.69538980125446 +75.2681478665194 +0 +120 +absolute + + + +0.01 +smooth + +8.537026300217873 +47.35020376533798 +420.43971082251545 +-123.91693471720566 +75.21910839430302 +0 +120 +absolute + + + +0.01 +smooth + +8.537025194497016 +47.3502048154969 +420.4707067458709 +-124.138486099783 +75.17007858920348 +0 +120 +absolute + + + +0.01 +smooth + +8.537024082005653 +47.35020586317232 +420.5018449772364 +-124.36003038526569 +75.12106394849432 +0 +120 +absolute + + + +0.01 +smooth + +8.537022962981816 +47.35020690829344 +420.5331179552468 +-124.58155400993292 +75.07206996944903 +0 +120 +absolute + + + +0.01 +smooth + +8.537021837663538 +47.350207950789496 +420.56451811853685 +-124.80304341006389 +75.02310214934114 +0 +120 +absolute + + + +0.01 +smooth + +8.537020706288846 +47.35020899058971 +420.5960379057419 +-125.0244850219378 +74.97416598544416 +0 +120 +absolute + + + +0.01 +smooth + +8.537019569095774 +47.3502100276233 +420.62766975549675 +-125.24586528183386 +74.9252669750316 +0 +120 +absolute + + + +0.01 +smooth + +8.537018426322355 +47.35021106181949 +420.65940610643645 +-125.46717062603125 +74.87641061537703 +0 +120 +absolute + + + +0.01 +smooth + +8.537017278206617 +47.350212093107515 +420.6912393971959 +-125.68838749080915 +74.82760240375389 +0 +120 +absolute + + + +0.01 +smooth + +8.537016124986593 +47.350213121416566 +420.72316206641017 +-125.90950231244673 +74.77884783743575 +0 +120 +absolute + + + +0.01 +smooth + +8.537014966900314 +47.350214146675896 +420.7551665527142 +-126.13050152722329 +74.73015241369609 +0 +120 +absolute + + + +0.01 +smooth + +8.537013804185811 +47.3502151688147 +420.7872452947429 +-126.35137157141793 +74.68152162980846 +0 +120 +absolute + + + +0.01 +smooth + +8.537012637081116 +47.350216187762214 +420.8193907311314 +-126.57209888130984 +74.63296098304636 +0 +120 +absolute + + + +0.01 +smooth + +8.53701146582426 +47.35021720344767 +420.8515953005146 +-126.79266989317827 +74.58447597068331 +0 +120 +absolute + + + +0.01 +smooth + +8.537010290653274 +47.35021821580028 +420.8838514415275 +-127.0130710433024 +74.53607208999284 +0 +120 +absolute + + + +0.01 +smooth + +8.537009111806189 +47.35021922474926 +420.916151592805 +-127.23328876796145 +74.48775483824843 +0 +120 +absolute + + + +0.01 +smooth + +8.537007929521039 +47.35022023022384 +420.94848819298227 +-127.45330950343453 +74.43952971272364 +0 +120 +absolute + + + +0.01 +smooth + +8.53700674403585 +47.350221232153245 +420.98085368069405 +-127.67311968600092 +74.39140221069196 +0 +120 +absolute + + + +0.01 +smooth + +8.537005555588658 +47.350222230466684 +421.0132404945756 +-127.89270575193977 +74.34337782942691 +0 +120 +absolute + + + +0.01 +smooth + +8.537004364417493 +47.35022322509339 +421.0456410732617 +-128.11205413753032 +74.29546206620202 +0 +120 +absolute + + + +0.01 +smooth + +8.537003170760388 +47.35022421596258 +421.07804785538735 +-128.3311512790517 +74.24766041829079 +0 +120 +absolute + + + +0.01 +smooth + +8.537001972122154 +47.350225203852666 +421.11053991749264 +-128.55011486096197 +74.19991641733209 +0 +120 +absolute + + + +0.01 +smooth + +8.537000763965874 +47.35022619016737 +421.1432599432193 +-128.76916036083932 +74.15212843756194 +0 +120 +absolute + + + +0.01 +smooth + +8.536999546396746 +47.35022717486124 +421.17620263764263 +-128.98828015365692 +74.10430094209788 +0 +120 +absolute + + + +0.01 +smooth + +8.536998319604926 +47.35022815786244 +421.2093600061477 +-129.20746253404343 +74.05644032715419 +0 +120 +absolute + + + +0.01 +smooth + +8.536997083780557 +47.35022913909911 +421.24272405411904 +-129.42669579662723 +74.00855298894501 +0 +120 +absolute + + + +0.01 +smooth + +8.536995839113791 +47.35023011849942 +421.2762867869416 +-129.64596823603702 +73.9606453236847 +0 +120 +absolute + + + +0.01 +smooth + +8.53699458579477 +47.35023109599148 +421.3100402099999 +-129.86526814690114 +73.91272372758739 +0 +120 +absolute + + + +0.01 +smooth + +8.53699332401365 +47.350232071503456 +421.34397632867893 +-130.08458382384825 +73.86479459686737 +0 +120 +absolute + + + +0.01 +smooth + +8.536992053960581 +47.3502330449635 +421.3780871483635 +-130.30390356150687 +73.81686432773887 +0 +120 +absolute + + + +0.01 +smooth + +8.536990775825704 +47.35023401629973 +421.4123646744379 +-130.52321565450546 +73.7689393164161 +0 +120 +absolute + + + +0.01 +smooth + +8.536989489799172 +47.35023498544032 +421.4468009122874 +-130.7425083974726 +73.72102595911333 +0 +120 +absolute + + + +0.01 +smooth + +8.536988196071132 +47.350235952313405 +421.48138786729646 +-130.96177008503676 +73.67313065204476 +0 +120 +absolute + + + +0.01 +smooth + +8.53698689483173 +47.35023691684711 +421.5161175448499 +-131.1809890118265 +73.62525979142463 +0 +120 +absolute + + + +0.01 +smooth + +8.536985586271122 +47.350237878969615 +421.55098195033264 +-131.4001534724704 +73.57741977346723 +0 +120 +absolute + + + +0.01 +smooth + +8.53698427057945 +47.350238838609066 +421.5859730891293 +-131.61925176159698 +73.52961699438674 +0 +120 +absolute + + + +0.01 +smooth + +8.536982947946862 +47.35023979569356 +421.6210829666245 +-131.83827217383464 +73.48185785039738 +0 +120 +absolute + + + +0.01 +smooth + +8.536981618563509 +47.350240750151286 +421.65630358820306 +-132.05720300381202 +73.43414873771343 +0 +120 +absolute + + + +0.01 +smooth + +8.536980282619538 +47.35024170191037 +421.6916269592498 +-132.2760325461576 +73.3864960525491 +0 +120 +absolute + + + +0.01 +smooth + +8.536978940305103 +47.350242650898984 +421.72704508514954 +-132.49474909549997 +73.33890619111865 +0 +120 +absolute + + + +0.01 +smooth + +8.536977591810345 +47.35024359704525 +421.7625499712871 +-132.71334094646764 +73.29138554963632 +0 +120 +absolute + + + +0.01 +smooth + +8.536976237325415 +47.3502445402773 +421.79813362304685 +-132.93179639368907 +73.24394052431627 +0 +120 +absolute + + + +0.01 +smooth + +8.536974877040462 +47.35024548052331 +421.83378804581395 +-133.1501037317928 +73.19657751137282 +0 +120 +absolute + + + +0.01 +smooth + +8.536973511145636 +47.35024641771141 +421.8695052449728 +-133.36825125540744 +73.14930290702017 +0 +120 +absolute + + + +0.01 +smooth + +8.536972139831082 +47.350247351769745 +421.90527722590843 +-133.58622725916143 +73.10212310747256 +0 +120 +absolute + + + +0.01 +smooth + +8.53697076328695 +47.350248282626474 +421.9410959940056 +-133.8040200376834 +73.05504450894422 +0 +120 +absolute + + + +0.01 +smooth + +8.53696938170339 +47.35024921020972 +421.97695355464884 +-134.02161788560176 +73.0080735076494 +0 +120 +absolute + + + +0.01 +smooth + +8.536967995270548 +47.35025013444764 +422.0128419132231 +-134.2390090975451 +72.9612164998023 +0 +120 +absolute + + + +0.01 +smooth + +8.536966604178573 +47.35025105526838 +422.04875307511304 +-134.45618196814192 +72.91447988161723 +0 +120 +absolute + + + +0.01 +smooth + +8.536965208617616 +47.35025197260009 +422.0846790457034 +-134.6731247920208 +72.86787004930834 +0 +120 +absolute + + + +0.01 +smooth + +8.536963808777822 +47.350252886370896 +422.12061183037906 +-134.8898258638102 +72.8213933990899 +0 +120 +absolute + + + +0.01 +smooth + +8.53696240484934 +47.35025379650898 +422.1565434345247 +-135.1062734781387 +72.77505632717616 +0 +120 +absolute + + + +0.01 +smooth + +8.536960997022323 +47.350254702942436 +422.19246586352506 +-135.32245592963477 +72.72886522978135 +0 +120 +absolute + + + +0.01 +smooth + +8.536959585486912 +47.35025560559946 +422.2283711227649 +-135.53836151292697 +72.68282650311966 +0 +120 +absolute + + + +0.01 +smooth + +8.53695817043326 +47.350256504408165 +422.26425121762884 +-135.75397852264382 +72.6369465434054 +0 +120 +absolute + + + +0.01 +smooth + +8.536956752051518 +47.35025739929671 +422.30009815350184 +-135.96929525341392 +72.59123174685274 +0 +120 +absolute + + + +0.01 +smooth + +8.536955330531828 +47.35025829019323 +422.3359039357685 +-136.1842999998657 +72.54568850967595 +0 +120 +absolute + + + +0.01 +smooth + +8.536953906064344 +47.35025917702589 +422.3716605698138 +-136.3989810566277 +72.50032322808926 +0 +120 +absolute + + + +0.01 +smooth + +8.536952478839208 +47.35026005972281 +422.40736006102225 +-136.6133267183285 +72.4551422983069 +0 +120 +absolute + + + +0.01 +smooth + +8.536951049046575 +47.350260938212145 +422.44299441477864 +-136.82732527959655 +72.41015211654313 +0 +120 +absolute + + + +0.01 +smooth + +8.53694961687659 +47.35026181242206 +422.47855563646795 +-137.04096503506048 +72.36535907901214 +0 +120 +absolute + + + +0.01 +smooth + +8.536948182519405 +47.350262682280665 +422.51403573147456 +-137.2542342793487 +72.32076958192818 +0 +120 +absolute + + + +0.01 +smooth + +8.536946746165164 +47.35026354771613 +422.5494267051836 +-137.46712130708988 +72.2763900215055 +0 +120 +absolute + + + +0.01 +smooth + +8.536945308004018 +47.35026440865661 +422.58472056297956 +-137.6796144129124 +72.23222679395835 +0 +120 +absolute + + + +0.01 +smooth + +8.53694386593648 +47.35026526616638 +422.62000297135745 +-137.89183293582522 +72.18819965791748 +0 +120 +absolute + + + +0.01 +smooth + +8.536942416798713 +47.35026612181965 +422.65540228329144 +-138.1039570465412 +72.1441894733755 +0 +120 +absolute + + + +0.01 +smooth + +8.536940960721916 +47.350266975543306 +422.6909114995406 +-138.31597827021622 +72.10020268953961 +0 +120 +absolute + + + +0.01 +smooth + +8.536939497865532 +47.35026782725029 +422.72652246428635 +-138.52788651686686 +72.05624682709089 +0 +120 +absolute + + + +0.01 +smooth + +8.536938028388983 +47.350268676853496 +422.762227021709 +-138.73967169650956 +72.0123294067104 +0 +120 +absolute + + + +0.01 +smooth + +8.536936552451703 +47.350269524265826 +422.7980170159898 +-138.95132371916088 +71.96845794907931 +0 +120 +absolute + + + +0.01 +smooth + +8.536935070213122 +47.350270369400164 +422.83388429130923 +-139.16283249483732 +71.9246399748786 +0 +120 +absolute + + + +0.01 +smooth + +8.536933581832663 +47.35027121216941 +422.86982069184825 +-139.37418793355533 +71.88088300478944 +0 +120 +absolute + + + +0.01 +smooth + +8.536932087469765 +47.3502720524865 +422.9058180617878 +-139.5853799453315 +71.83719455949294 +0 +120 +absolute + + + +0.01 +smooth + +8.536930587283852 +47.35027289026429 +422.94186824530846 +-139.79639844018226 +71.79358215967011 +0 +120 +absolute + + + +0.01 +smooth + +8.536929081434359 +47.35027372541572 +422.9779630865914 +-140.00723332812413 +71.75005332600212 +0 +120 +absolute + + + +0.01 +smooth + +8.536927570080708 +47.350274557853645 +423.0140944298171 +-140.2178745191736 +71.70661557917002 +0 +120 +absolute + + + +0.01 +smooth + +8.536926053382334 +47.350275387490996 +423.05025411916654 +-140.42831192334717 +71.6632764398549 +0 +120 +absolute + + + +0.01 +smooth + +8.53692453149867 +47.35027621424069 +423.0864339988206 +-140.63853545066138 +71.62004342873789 +0 +120 +absolute + + + +0.01 +smooth + +8.536923004589141 +47.35027703801557 +423.12262591296013 +-140.84853501113273 +71.57692406650003 +0 +120 +absolute + + + +0.01 +smooth + +8.536921472813178 +47.3502778587286 +423.15882170576594 +-141.05830051477767 +71.53392587382245 +0 +120 +absolute + + + +0.01 +smooth + +8.536919936330209 +47.35027867629263 +423.19501322141866 +-141.2678218716127 +71.49105637138622 +0 +120 +absolute + + + +0.01 +smooth + +8.536918395299665 +47.350279490620586 +423.23119230409924 +-141.47708899165434 +71.44832307987245 +0 +120 +absolute + + + +0.01 +smooth + +8.536916849880981 +47.35028030162538 +423.26735079798874 +-141.6860917849192 +71.40573351996223 +0 +120 +absolute + + + +0.01 +smooth + +8.53691530023358 +47.35028110921989 +423.30348054726767 +-141.89482016142364 +71.36329521233664 +0 +120 +absolute + + + +0.01 +smooth + +8.536913746516896 +47.35028191331701 +423.33957339611703 +-142.10326403118415 +71.32101567767675 +0 +120 +absolute + + + +0.01 +smooth + +8.536912188890353 +47.35028271382966 +423.3756211887175 +-142.31141330421733 +71.27890243666367 +0 +120 +absolute + + + +0.01 +smooth + +8.536910627513386 +47.35028351067072 +423.41161576925003 +-142.51925789053962 +71.23696300997854 +0 +120 +absolute + + + +0.01 +smooth + +8.536909062545424 +47.35028430375313 +423.44754898189547 +-142.72678770016753 +71.19520491830238 +0 +120 +absolute + + + +0.01 +smooth + +8.536907494145899 +47.35028509298974 +423.48341267083464 +-142.93399264311762 +71.15363568231632 +0 +120 +absolute + + + +0.01 +smooth + +8.536905922474237 +47.35028587829348 +423.5191986802482 +-143.14086262940629 +71.11226282270145 +0 +120 +absolute + + + +0.01 +smooth + +8.53690434768987 +47.35028665957725 +423.5548988543173 +-143.34738756905008 +71.07109386013886 +0 +120 +absolute + + + +0.01 +smooth + +8.536902769952224 +47.35028743675394 +423.59050503722244 +-143.55355737206557 +71.03013631530963 +0 +120 +absolute + + + +0.01 +smooth + +8.536901189420735 +47.35028820973645 +423.6260090731446 +-143.75936194846912 +70.98939770889486 +0 +120 +absolute + + + +0.01 +smooth + +8.536899606254831 +47.35028897843769 +423.6614028062646 +-143.96479120827738 +70.94888556157562 +0 +120 +absolute + + + +0.01 +smooth + +8.53689802061394 +47.350289742770556 +423.6966780807634 +-144.1698350615067 +70.90860739403306 +0 +120 +absolute + + + +0.01 +smooth + +8.536896432657493 +47.35029050264794 +423.7318267408216 +-144.37448341817372 +70.8685707269482 +0 +120 +absolute + + + +0.01 +smooth + +8.536894842544916 +47.35029125798276 +423.7668406306201 +-144.57872618829484 +70.82878308100219 +0 +120 +absolute + + + +0.01 +smooth + +8.536893250435647 +47.350292008687894 +423.80171159433974 +-144.78255328188663 +70.78925197687609 +0 +120 +absolute + + + +0.01 +smooth + +8.536891656489107 +47.35029275467626 +423.83643147616135 +-144.98595460896553 +70.74998493525098 +0 +120 +absolute + + + +0.01 +smooth + +8.536890060864732 +47.350293495860754 +423.87099212026584 +-145.18892007954813 +70.710989476808 +0 +120 +absolute + + + +0.01 +smooth + +8.53688846372195 +47.35029423215427 +423.905385370834 +-145.3914396036508 +70.67227312222819 +0 +120 +absolute + + + +0.01 +smooth + +8.53688686522019 +47.35029496346972 +423.9396030720465 +-145.5935030912902 +70.63384339219267 +0 +120 +absolute + + + +0.01 +smooth + +8.536885265518883 +47.350295689719985 +423.9736370680845 +-145.7951004524827 +70.59570780738254 +0 +120 +absolute + + + +0.01 +smooth + +8.53688366477746 +47.35029641081799 +424.0074792031285 +-145.99622159724484 +70.55787388847887 +0 +120 +absolute + + + +0.01 +smooth + +8.536882063155346 +47.350297126676615 +424.0411213213594 +-146.19685643559313 +70.52034915616274 +0 +120 +absolute + + + +0.01 +smooth + +8.536880460811975 +47.35029783720877 +424.07455526695816 +-146.39699487754413 +70.48314113111529 +0 +120 +absolute + + + +0.01 +smooth + +8.536878857906776 +47.35029854232736 +424.10777288410554 +-146.59662683311421 +70.44625733401756 +0 +120 +absolute + + + +0.01 +smooth + +8.53687725261012 +47.3502992437325 +424.14087875909684 +-146.79587545163986 +70.40957492156944 +0 +120 +absolute + + + +0.01 +smooth + +8.536875642651637 +47.35029994347902 +424.17400138946226 +-146.99489326770637 +70.37294446029077 +0 +120 +absolute + + + +0.01 +smooth + +8.536874028159268 +47.35030064144284 +424.20713271678346 +-147.19367208369576 +70.3363750276624 +0 +120 +absolute + + + +0.01 +smooth + +8.536872409266442 +47.35030133749499 +424.24026437024736 +-147.39220333354058 +70.2998760630837 +0 +120 +absolute + + + +0.01 +smooth + +8.536870786106599 +47.350302031506416 +424.2733879790412 +-147.5904784511738 +70.26345700595402 +0 +120 +absolute + + + +0.01 +smooth + +8.53686915881317 +47.350302723348136 +424.3064951723517 +-147.78848887052797 +70.22712729567279 +0 +120 +absolute + + + +0.01 +smooth + +8.536867527519592 +47.35030341289113 +424.3395775793662 +-147.98622602553613 +70.1908963716393 +0 +120 +absolute + + + +0.01 +smooth + +8.5368658923593 +47.350304100006376 +424.37262682927167 +-148.18368135013085 +70.15477367325302 +0 +120 +absolute + + + +0.01 +smooth + +8.536864253465724 +47.35030478456486 +424.40563455125493 +-148.38084627824503 +70.11876863991326 +0 +120 +absolute + + + +0.01 +smooth + +8.536862610972308 +47.350305466437604 +424.4385923745034 +-148.57771224381142 +70.08289071101945 +0 +120 +absolute + + + +0.01 +smooth + +8.536860965012478 +47.35030614549556 +424.47149192820393 +-148.77427068076278 +70.0471493259709 +0 +120 +absolute + + + +0.01 +smooth + +8.536859315719669 +47.35030682160973 +424.50432484154345 +-148.97051302303186 +70.01155392416702 +0 +120 +absolute + + + +0.01 +smooth + +8.536857663227321 +47.35030749465111 +424.5370827437094 +-149.16643070455157 +69.97611394500716 +0 +120 +absolute + + + +0.01 +smooth + +8.53685600766887 +47.35030816449069 +424.5697572638885 +-149.3620151592546 +69.94083882789079 +0 +120 +absolute + + + +0.01 +smooth + +8.536854349177743 +47.35030883099944 +424.6023400312678 +-149.5572578210737 +69.90573801221713 +0 +120 +absolute + + + +0.01 +smooth + +8.536852687887379 +47.35030949404836 +424.6348226750344 +-149.7521501239417 +69.87082093738567 +0 +120 +absolute + + + +0.01 +smooth + +8.536851023931213 +47.35031015350843 +424.6671968243754 +-149.94668350179134 +69.83609704279576 +0 +120 +absolute + + + +0.01 +smooth + +8.53684935744268 +47.35031080925065 +424.6994541084777 +-150.14084938855544 +69.80157576784678 +0 +120 +absolute + + + +0.01 +smooth + +8.536847688555214 +47.350311461146006 +424.7315861565286 +-150.33463921816676 +69.76726655193806 +0 +120 +absolute + + + +0.01 +smooth + +8.53684601740225 +47.350312109065484 +424.7635845977149 +-150.5280444245581 +69.73317883446903 +0 +120 +absolute + + + +0.01 +smooth + +8.536844344117222 +47.3503127528801 +424.7954410612238 +-150.7210564416622 +69.69932205483903 +0 +120 +absolute + + + +0.01 +smooth + +8.536842668833563 +47.35031339246077 +424.82714717624214 +-150.91366670341182 +69.66570565244746 +0 +120 +absolute + + + +0.01 +smooth + +8.536840991684713 +47.35031402767856 +424.85869457195724 +-151.10586664373986 +69.63233906669366 +0 +120 +absolute + + + +0.01 +smooth + +8.536839312804101 +47.350314658404415 +424.890074877556 +-151.29764769657896 +69.59923173697705 +0 +120 +absolute + + + +0.01 +smooth + +8.536837632325165 +47.35031528450935 +424.92127972222545 +-151.489001295862 +69.56639310269696 +0 +120 +absolute + + + +0.01 +smooth + +8.53683595038134 +47.35031590586432 +424.95230073515273 +-151.6799188755217 +69.53383260325282 +0 +120 +absolute + + + +0.01 +smooth + +8.536834267106059 +47.35031652234034 +424.9831295455248 +-151.8703918694909 +69.50155967804393 +0 +120 +absolute + + + +0.01 +smooth + +8.536832582632758 +47.3503171338084 +425.0137577825286 +-152.06041171170227 +69.46958376646974 +0 +120 +absolute + + + +0.01 +smooth + +8.536830897094871 +47.35031774013949 +425.0441770753514 +-152.24996983608872 +69.43791430792959 +0 +120 +absolute + + + +0.01 +smooth + +8.536829210625836 +47.35031834120457 +425.07437905318017 +-152.43905767658293 +69.40656074182284 +0 +120 +absolute + + + +0.01 +smooth + +8.536827523359081 +47.35031893687466 +425.10435534520195 +-152.62766666711778 +69.3755325075489 +0 +120 +absolute + + + +0.01 +smooth + +8.536825835428047 +47.35031952702073 +425.1340975806036 +-152.81578824162594 +69.3448390445071 +0 +120 +absolute + + + +0.01 +smooth + +8.536824146966165 +47.35032011151377 +425.1635973885725 +-153.00341383404026 +69.31448979209686 +0 +120 +absolute + + + +0.01 +smooth + +8.53682245810687 +47.35032069022478 +425.1928463982955 +-153.19053487829348 +69.28449418971755 +0 +120 +absolute + + + +0.01 +smooth + +8.536820768983599 +47.35032126302474 +425.22183623895967 +-153.3771428083184 +69.25486167676851 +0 +120 +absolute + + + +0.01 +smooth + +8.536819079729785 +47.35032182978464 +425.250558539752 +-153.5632290580478 +69.22560169264916 +0 +120 +absolute + + + +0.01 +smooth + +8.536817390478863 +47.35032239037547 +425.27900492985964 +-153.74878506141445 +69.19672367675884 +0 +120 +absolute + + + +0.01 +smooth + +8.536815701364267 +47.35032294466822 +425.3071670384696 +-153.93380225235117 +69.16823706849695 +0 +120 +absolute + + + +0.01 +smooth + +8.536814012519434 +47.35032349253388 +425.33503649476893 +-154.11827206479066 +69.14015130726284 +0 +120 +absolute + + + +0.01 +smooth + +8.536812324077797 +47.35032403384343 +425.3626049279446 +-154.3021859326658 +69.1124758324559 +0 +120 +absolute + + + +0.01 +smooth + +8.536810636172792 +47.35032456846786 +425.38986396718377 +-154.48553528990925 +69.0852200834755 +0 +120 +absolute + + + +0.01 +smooth + +8.53680894893785 +47.35032509627816 +425.41680524167344 +-154.66831157045394 +69.05839349972102 +0 +120 +absolute + + + +0.01 +smooth + +8.53680726250641 +47.35032561714533 +425.4434203806006 +-154.8505062082325 +69.03200552059184 +0 +120 +absolute + + + +0.01 +smooth + +8.5368055752707 +47.35032613433733 +425.4698592268013 +-155.03224628363895 +69.00584294897038 +0 +120 +absolute + + + +0.01 +smooth + +8.53680388560564 +47.35032665104972 +425.4962706097078 +-155.21365985301196 +68.9796958684594 +0 +120 +absolute + + + +0.01 +smooth + +8.536802193618705 +47.35032716704485 +425.5226446384015 +-155.39473981420167 +68.95357863953873 +0 +120 +absolute + + + +0.01 +smooth + +8.536800499417367 +47.350327682085066 +425.548971421964 +-155.5754790650579 +68.92750562268824 +0 +120 +absolute + + + +0.01 +smooth + +8.536798803109102 +47.35032819593271 +425.575241069477 +-155.75587050343088 +68.9014911783878 +0 +120 +absolute + + + +0.01 +smooth + +8.53679710480138 +47.35032870835014 +425.6014436900216 +-155.9359070271704 +68.8755496671172 +0 +120 +absolute + + + +0.01 +smooth + +8.53679540460168 +47.350329219099734 +425.6275693926797 +-156.11558153412673 +68.84969544935633 +0 +120 +absolute + + + +0.01 +smooth + +8.536793702617473 +47.35032972794383 +425.6536082865327 +-156.29488692214977 +68.82394288558507 +0 +120 +absolute + + + +0.01 +smooth + +8.536791998956234 +47.35033023464475 +425.67955048066216 +-156.47381608908958 +68.79830633628322 +0 +120 +absolute + + + +0.01 +smooth + +8.536790293725433 +47.350330738964885 +425.70538608414955 +-156.65236193279608 +68.77280016193062 +0 +120 +absolute + + + +0.01 +smooth + +8.53678858703255 +47.35033124066657 +425.73110520607645 +-156.8305173511194 +68.74743872300716 +0 +120 +absolute + + + +0.01 +smooth + +8.536786878985055 +47.35033173951216 +425.7566979555244 +-157.0082752419095 +68.72223637999271 +0 +120 +absolute + + + +0.01 +smooth + +8.53678516969042 +47.350332235264005 +425.78215444157473 +-157.1856285030165 +68.69720749336705 +0 +120 +absolute + + + +0.01 +smooth + +8.536783459256123 +47.35033272768446 +425.80746477330916 +-157.36257003229022 +68.67236642361006 +0 +120 +absolute + + + +0.01 +smooth + +8.536781747789634 +47.350333216535866 +425.8326190598092 +-157.53909272758094 +68.64772753120162 +0 +120 +absolute + + + +0.01 +smooth + +8.536780035398426 +47.35033370158056 +425.8576074101562 +-157.71518948673844 +68.62330517662151 +0 +120 +absolute + + + +0.01 +smooth + +8.536778322189981 +47.350334182580944 +425.8824199334319 +-157.89085320761285 +68.59911372034968 +0 +120 +absolute + + + +0.01 +smooth + +8.536776608271767 +47.35033465929936 +425.9070467387179 +-158.06607678805432 +68.57516752286591 +0 +120 +absolute + + + +0.01 +smooth + +8.536774893751257 +47.35033513149811 +425.9314779350954 +-158.24085312591262 +68.55148094465005 +0 +120 +absolute + + + +0.01 +smooth + +8.53677317873592 +47.35033559893958 +425.955703631646 +-158.41517511903788 +68.52806834618197 +0 +120 +absolute + + + +0.01 +smooth + +8.536771463333244 +47.35033606138612 +425.9797139374515 +-158.5890356652802 +68.50494408794151 +0 +120 +absolute + + + +0.01 +smooth + +8.53676974765069 +47.35033651860009 +426.00349896159315 +-158.76242766248953 +68.48212253040853 +0 +120 +absolute + + + +0.01 +smooth + +8.536768031795736 +47.35033697034382 +426.02704881315253 +-158.93534400851587 +68.45961803406288 +0 +120 +absolute + + + +0.01 +smooth + +8.536766315875857 +47.35033741637969 +426.0503536012112 +-159.10777760120928 +68.43744495938441 +0 +120 +absolute + + + +0.01 +smooth + +8.536764599998525 +47.35033785647002 +426.0734034348507 +-159.27972133841976 +68.41561766685295 +0 +120 +absolute + + + +0.01 +smooth + +8.536762884271216 +47.35033829037719 +426.09618842315257 +-159.45116811799733 +68.3941505169484 +0 +120 +absolute + + + +0.01 +smooth + +8.536761168801402 +47.350338717863536 +426.1186986751983 +-159.62211083779206 +68.37305787015053 +0 +120 +absolute + + + +0.01 +smooth + +8.536759453696554 +47.35033913869141 +426.1409243000693 +-159.79254239565387 +68.35235408693926 +0 +120 +absolute + + + +0.01 +smooth + +8.53675773906415 +47.350339552623176 +426.16285540684726 +-159.9624556894329 +68.3320535277944 +0 +120 +absolute + + + +0.01 +smooth + +8.536756025011664 +47.35033995942117 +426.1844821046136 +-160.13184361697907 +68.31217055319583 +0 +120 +absolute + + + +0.01 +smooth + +8.536754311646568 +47.350340358847745 +426.20579450244986 +-160.3006990761425 +68.29271952362338 +0 +120 +absolute + + + +0.01 +smooth + +8.536752599076337 +47.35034075066527 +426.2267827094377 +-160.46901496477307 +68.27371479955688 +0 +120 +absolute + + + +0.01 +smooth + +8.536750887408441 +47.35034113463608 +426.2474368346585 +-160.63678418072098 +68.25517074147623 +0 +120 +absolute + + + +0.01 +smooth + +8.536749176750362 +47.35034151052254 +426.2677469871938 +-160.80399962183608 +68.23710170986126 +0 +120 +absolute + + + +0.01 +smooth + +8.536747467209565 +47.35034187808698 +426.28770327612517 +-160.97065418596853 +68.21952206519181 +0 +120 +absolute + + + +0.01 +smooth + +8.536745758893527 +47.35034223709177 +426.30729581053413 +-161.13674077096823 +68.20244616794774 +0 +120 +absolute + + + +0.01 +smooth + +8.536744051909722 +47.35034258729927 +426.3265146995021 +-161.30225227468532 +68.1858883786089 +0 +120 +absolute + + + +0.01 +smooth + +8.536742346365626 +47.350342928471804 +426.34535005211063 +-161.4671815949697 +68.1698630576551 +0 +120 +absolute + + + +0.01 +smooth + +8.53674064236871 +47.350343260371744 +426.36379197744145 +-161.6315216296715 +68.15438456556625 +0 +120 +absolute + + + +0.01 +smooth + +8.536738940026446 +47.35034358276144 +426.3818305845758 +-161.7952652766407 +68.13946726282217 +0 +120 +absolute + + + +0.01 +smooth + +8.536737239446314 +47.35034389540324 +426.3994559825954 +-161.9584054337273 +68.12512550990272 +0 +120 +absolute + + + +0.01 +smooth + +8.536735540735783 +47.350344198059496 +426.4166582805817 +-162.1209349987813 +68.11137366728774 +0 +120 +absolute + + + +0.01 +smooth + +8.536733843998983 +47.35034449050948 +426.43342825518187 +-162.2828471782309 +68.09822522471778 +0 +120 +absolute + + + +0.01 +smooth + +8.536732147874073 +47.3503447798896 +426.45004687907306 +-162.4442702874043 +68.08531375805522 +0 +120 +absolute + + + +0.01 +smooth + +8.536730451237466 +47.350345071887304 +426.4667381777686 +-162.60530982430467 +68.07234206132192 +0 +120 +absolute + + + +0.01 +smooth + +8.53672875416792 +47.350345366046405 +426.4834839330239 +-162.76596010332997 +68.05932775592419 +0 +120 +absolute + + + +0.01 +smooth + +8.536727056744203 +47.35034566191074 +426.50026592659447 +-162.9262154388781 +68.04628846326834 +0 +120 +absolute + + + +0.01 +smooth + +8.536725359045072 +47.35034595902409 +426.51706594023585 +-163.08607014534704 +68.03324180476066 +0 +120 +absolute + + + +0.01 +smooth + +8.536723661149292 +47.35034625693031 +426.5338657557038 +-163.2455185371348 +68.02020540180749 +0 +120 +absolute + + + +0.01 +smooth + +8.536721963135623 +47.350346555173175 +426.5506471547534 +-163.4045549286393 +68.00719687581511 +0 +120 +absolute + + + +0.01 +smooth + +8.536720265082826 +47.35034685329652 +426.56739191914045 +-163.56317363425848 +67.99423384818982 +0 +120 +absolute + + + +0.01 +smooth + +8.53671856706967 +47.35034715084416 +426.5840818306204 +-163.72136896839032 +67.98133394033795 +0 +120 +absolute + + + +0.01 +smooth + +8.536716869174906 +47.35034744735991 +426.6006986709488 +-163.87913524543282 +67.9685147736658 +0 +120 +absolute + + + +0.01 +smooth + +8.536715171477299 +47.350347742387555 +426.617224221881 +-164.03646677978378 +67.95579396957964 +0 +120 +absolute + + + +0.01 +smooth + +8.536713474055619 +47.350348035470944 +426.6336402651728 +-164.19335788584135 +67.94318914948583 +0 +120 +absolute + + + +0.01 +smooth + +8.536711776988623 +47.350348326153906 +426.6499285825796 +-164.3498028780035 +67.93071793479068 +0 +120 +absolute + + + +0.01 +smooth + +8.536710080355068 +47.35034861398021 +426.66607095585675 +-164.505796070668 +67.91839794690043 +0 +120 +absolute + + + +0.01 +smooth + +8.536708384233721 +47.3503488984937 +426.68204916676 +-164.66133177823295 +67.90624680722145 +0 +120 +absolute + + + +0.01 +smooth + +8.536706688703342 +47.35034917923817 +426.69784499704474 +-164.81640431509632 +67.89428213716003 +0 +120 +absolute + + + +0.01 +smooth + +8.536704993842697 +47.35034945575745 +426.71344022846654 +-164.97100799565598 +67.88252155812246 +0 +120 +absolute + + + +0.01 +smooth + +8.536703299730542 +47.350349727595365 +426.7288166427808 +-165.12513713430997 +67.87098269151505 +0 +120 +absolute + + + +0.01 +smooth + +8.536701606445643 +47.350349994295705 +426.7439560217433 +-165.27878604545617 +67.85968315874412 +0 +120 +absolute + + + +0.01 +smooth + +8.53669991406676 +47.35035025540231 +426.75884014710937 +-165.43194904349266 +67.84864058121599 +0 +120 +absolute + + + +0.01 +smooth + +8.536698222672655 +47.35035051045895 +426.7734508006343 +-165.58462044281723 +67.8378725803369 +0 +120 +absolute + + + +0.01 +smooth + +8.536696532342091 +47.350350759009494 +426.78776976407414 +-165.73679455782806 +67.82739677751324 +0 +120 +absolute + + + +0.01 +smooth + +8.536694843153828 +47.350351000597726 +426.801778819184 +-165.88846570292287 +67.81723079415129 +0 +120 +absolute + + + +0.01 +smooth + +8.536693155186631 +47.35035123476746 +426.8154597477197 +-166.03962819249983 +67.80739225165732 +0 +120 +absolute + + + +0.01 +smooth + +8.53669146851926 +47.35035146106252 +426.82879433143637 +-166.19027634095679 +67.79789877143766 +0 +120 +absolute + + + +0.01 +smooth + +8.536689783230477 +47.35035167902671 +426.84176435208974 +-166.3404044626917 +67.78876797489862 +0 +120 +absolute + + + +0.01 +smooth + +8.536688099399043 +47.35035188820386 +426.8543515914354 +-166.49000687210255 +67.78001748344651 +0 +120 +absolute + + + +0.01 +smooth + +8.536686417103724 +47.350352088137775 +426.86653783122875 +-166.6390778835873 +67.77166491848764 +0 +120 +absolute + + + +0.01 +smooth + +8.536684736423274 +47.35035227837226 +426.87830485322536 +-166.7876118115439 +67.7637279014283 +0 +120 +absolute + + + +0.01 +smooth + +8.536683057436461 +47.350352458451155 +426.8896344391808 +-166.93560297037035 +67.7562240536748 +0 +120 +absolute + + + +0.01 +smooth + +8.536681380222047 +47.35035262791825 +426.9005083708504 +-167.08304567446453 +67.74917099663345 +0 +120 +absolute + + + +0.01 +smooth + +8.536679704858791 +47.35035278631737 +426.91090842998983 +-167.2299342382245 +67.74258635171057 +0 +120 +absolute + + + +0.01 +smooth + +8.536678031425458 +47.35035293319232 +426.92081639835465 +-167.3762629760481 +67.73648774031244 +0 +120 +absolute + + + +0.01 +smooth + +8.536676360000808 +47.35035306808693 +426.93021405770037 +-167.52202620233345 +67.73089278384538 +0 +120 +absolute + + + +0.01 +smooth + +8.536674690663602 +47.35035319054501 +426.93908318978225 +-167.66721823147833 +67.72581910371571 +0 +120 +absolute + + + +0.01 +smooth + +8.536673023492604 +47.35035330011037 +426.9474055763561 +-167.81183337788087 +67.72128432132972 +0 +120 +absolute + + + +0.01 +smooth + +8.536671358566576 +47.350353396326824 +426.9551629991772 +-167.95586595593886 +67.71730605809371 +0 +120 +absolute + + + +0.01 +smooth + +8.536669695964278 +47.35035347873819 +426.96233724000143 +-168.09931028005036 +67.713901935414 +0 +120 +absolute + + + +0.01 +smooth + +8.536668035764471 +47.35035354688827 +426.968910080584 +-168.24216066461335 +67.7110895746969 +0 +120 +absolute + + + +0.01 +smooth + +8.53666637804592 +47.35035360032091 +426.9748633026805 +-168.3844114240257 +67.7088865973487 +0 +120 +absolute + + + +0.01 +smooth + +8.536664722887387 +47.35035363857989 +426.9801786880464 +-168.5260568726855 +67.70731062477572 +0 +120 +absolute + + + +0.01 +smooth + +8.536663070367629 +47.350353661209034 +426.98483801843736 +-168.6670913249906 +67.70637927838425 +0 +120 +absolute + + + +0.01 +smooth + +8.536661420555998 +47.35035366781903 +426.98882631655715 +-168.8075101919832 +67.70610797138342 +0 +120 +absolute + + + +0.01 +smooth + +8.536659772413707 +47.35035366594426 +426.9925110626768 +-168.94743747783613 +67.70624928528132 +0 +120 +absolute + + + +0.01 +smooth + +8.53665812522998 +47.35035366097766 +426.9961505667062 +-169.0869575508359 +67.70662279325285 +0 +120 +absolute + + + +0.01 +smooth + +8.536656479052745 +47.350353652964095 +426.9997428084815 +-169.2260661423871 +67.70722393836954 +0 +120 +absolute + + + +0.01 +smooth + +8.53665483392992 +47.350353641948416 +427.00328576783863 +-169.36475898389455 +67.7080481637028 +0 +120 +absolute + + + +0.01 +smooth + +8.536653189909428 +47.350353627975466 +427.0067774246136 +-169.50303180676272 +67.7090909123241 +0 +120 +absolute + + + +0.01 +smooth + +8.536651547039193 +47.35035361109014 +427.01021575864263 +-169.64088034239649 +67.71034762730493 +0 +120 +absolute + + + +0.01 +smooth + +8.536649905367137 +47.35035359133731 +427.0135987497617 +-169.7783003222003 +67.71181375171675 +0 +120 +absolute + + + +0.01 +smooth + +8.536648264941183 +47.35035356876179 +427.0169243778068 +-169.91528747757903 +67.71348472863099 +0 +120 +absolute + + + +0.01 +smooth + +8.536646625809256 +47.35035354340848 +427.02019062261405 +-170.05183753993717 +67.71535600111913 +0 +120 +absolute + + + +0.01 +smooth + +8.53664498801927 +47.35035351532225 +427.0233954640195 +-170.1879462406795 +67.71742301225267 +0 +120 +absolute + + + +0.01 +smooth + +8.536643351619157 +47.35035348454791 +427.0265368818593 +-170.32360931121062 +67.719681205103 +0 +120 +absolute + + + +0.01 +smooth + +8.536641716656833 +47.350353451130374 +427.0296128559694 +-170.45882248293523 +67.7221260227416 +0 +120 +absolute + + + +0.01 +smooth + +8.536640083180222 +47.35035341511447 +427.03262136618577 +-170.59358148725804 +67.72475290823998 +0 +120 +absolute + + + +0.01 +smooth + +8.53663845123725 +47.3503533765451 +427.0355603923447 +-170.72788205558365 +67.72755730466956 +0 +120 +absolute + + + +0.01 +smooth + +8.536636820875833 +47.35035333546708 +427.0384279142818 +-170.8617199193167 +67.73053465510179 +0 +120 +absolute + + + +0.01 +smooth + +8.536635192143898 +47.35035329192529 +427.04122191183376 +-170.99509080986192 +67.73368040260819 +0 +120 +absolute + + + +0.01 +smooth + +8.53663356508937 +47.35035324596462 +427.0439403648364 +-171.127990458624 +67.73698999026018 +0 +120 +absolute + + + +0.01 +smooth + +8.536631939760163 +47.350353197629886 +427.04658125312557 +-171.26041459700758 +67.74045886112921 +0 +120 +absolute + + + +0.01 +smooth + +8.536630316204203 +47.35035314696596 +427.0491425565373 +-171.39235895641716 +67.74408245828675 +0 +120 +absolute + + + +0.01 +smooth + +8.536628694469416 +47.35035309401773 +427.051622254908 +-171.52381926825774 +67.7478562248043 +0 +120 +absolute + + + +0.01 +smooth + +8.536627074603722 +47.35035303883004 +427.05401832807354 +-171.65479126393373 +67.75177560375329 +0 +120 +absolute + + + +0.01 +smooth + +8.536625456655043 +47.350352981447756 +427.05632875586986 +-171.78527067484987 +67.75583603820516 +0 +120 +absolute + + + +0.01 +smooth + +8.536623840671302 +47.35035292191574 +427.05855151813324 +-171.91525323241083 +67.76003297123141 +0 +120 +absolute + + + +0.01 +smooth + +8.536622226700421 +47.350352860278846 +427.0606845946995 +-172.04473466802128 +67.7643618459035 +0 +120 +absolute + + + +0.01 +smooth + +8.536620614790323 +47.35035279658195 +427.062725965405 +-172.17371071308588 +67.76881810529287 +0 +120 +absolute + + + +0.01 +smooth + +8.53661900498893 +47.3503527308699 +427.06467361008544 +-172.30217709900927 +67.773397192471 +0 +120 +absolute + + + +0.01 +smooth + +8.536617397344163 +47.35035266318758 +427.06652550857723 +-172.4301295571962 +67.77809455050931 +0 +120 +absolute + + + +0.01 +smooth + +8.536615791903948 +47.35035259357982 +427.0682796407161 +-172.55756381905127 +67.78290562247933 +0 +120 +absolute + + + +0.01 +smooth + +8.536614188716204 +47.350352522091505 +427.06993398633847 +-172.6844756159791 +67.78782585145248 +0 +120 +absolute + + + +0.01 +smooth + +8.536612587828856 +47.35035244876749 +427.07148652527997 +-172.8108606793845 +67.79285068050022 +0 +120 +absolute + + + +0.01 +smooth + +8.536610989289823 +47.35035237365263 +427.072935237377 +-172.93671474067202 +67.79797555269404 +0 +120 +absolute + + + +0.01 +smooth + +8.536609393147032 +47.350352296791804 +427.0742781024654 +-173.0620335312463 +67.80319591110538 +0 +120 +absolute + + + +0.01 +smooth + +8.536607799448403 +47.35035221822986 +427.07551310038144 +-173.1868127825121 +67.80850719880569 +0 +120 +absolute + + + +0.01 +smooth + +8.536606208241857 +47.35035213801167 +427.07663821096094 +-173.31104822587406 +67.81390485886647 +0 +120 +absolute + + + +0.01 +smooth + +8.536604619575318 +47.35035205618208 +427.0776514140402 +-173.43473559273684 +67.81938433435913 +0 +120 +absolute + + + +0.01 +smooth + +8.53660303349671 +47.35035197278597 +427.07855068945514 +-173.55787061450513 +67.82494106835517 +0 +120 +absolute + + + +0.01 +smooth + +8.536601450053952 +47.3503518878682 +427.0793340170418 +-173.68044902258353 +67.83057050392605 +0 +120 +absolute + + + +0.01 +smooth + +8.53659986929497 +47.350351801473614 +427.07999937663624 +-173.8024665483768 +67.83626808414323 +0 +120 +absolute + + + +0.01 +smooth + +8.536598291267682 +47.35035171364709 +427.0805447480746 +-173.92391892328948 +67.84202925207816 +0 +120 +absolute + + + +0.01 +smooth + +8.536596716020014 +47.35035162443349 +427.0809681111929 +-174.0448018787264 +67.8478494508023 +0 +120 +absolute + + + +0.01 +smooth + +8.536595143599888 +47.35035153387767 +427.08126744582717 +-174.16511114609202 +67.85372412338712 +0 +120 +absolute + + + +0.01 +smooth + +8.536593574055225 +47.3503514420245 +427.0814407318134 +-174.28484245679124 +67.8596487129041 +0 +120 +absolute + + + +0.01 +smooth + +8.536592007421445 +47.35035134870989 +427.08148018089406 +-174.40399362414854 +67.865626370201 +0 +120 +absolute + + + +0.01 +smooth + +8.536590443042748 +47.35035124242619 +427.08106630266 +-174.5226768250861 +67.87207928658525 +0 +120 +absolute + + + +0.01 +smooth + +8.536588880541128 +47.350351116913224 +427.08002886161097 +-174.64095592333177 +67.87923774279841 +0 +120 +absolute + + + +0.01 +smooth + +8.536587319936864 +47.3503509726752 +427.07838517010583 +-174.7588281050235 +67.88708278010209 +0 +120 +absolute + + + +0.01 +smooth + +8.536585761250226 +47.35035081021632 +427.07615254050336 +-174.87629055629947 +67.89559543975795 +0 +120 +absolute + + + +0.01 +smooth + +8.536584204501489 +47.35035063004076 +427.07334828516224 +-174.9933404632976 +67.90475676302763 +0 +120 +absolute + + + +0.01 +smooth + +8.536582649710935 +47.35035043265272 +427.06998971644185 +-175.10997501215613 +67.9145477911728 +0 +120 +absolute + + + +0.01 +smooth + +8.536581096898834 +47.35035021855642 +427.0660941467009 +-175.22619138901308 +67.92494956545512 +0 +120 +absolute + + + +0.01 +smooth + +8.536579546085463 +47.350349988256035 +427.0616788882983 +-175.34198678000647 +67.93594312713623 +0 +120 +absolute + + + +0.01 +smooth + +8.536577997291097 +47.35034974225578 +427.05676125359275 +-175.45735837127438 +67.94750951747776 +0 +120 +absolute + + + +0.01 +smooth + +8.536576450536012 +47.350349481059816 +427.0513585549432 +-175.57230334895485 +67.95962977774136 +0 +120 +absolute + + + +0.01 +smooth + +8.536574905840489 +47.350349205172385 +427.0454881047088 +-175.68681889918614 +67.97228494918872 +0 +120 +absolute + + + +0.01 +smooth + +8.536573363224797 +47.35034891509766 +427.03916721524826 +-175.80090220810607 +67.98545607308147 +0 +120 +absolute + + + +0.01 +smooth + +8.53657182270921 +47.35034861133984 +427.0324131989204 +-175.91455046185288 +67.99912419068121 +0 +120 +absolute + + + +0.01 +smooth + +8.536570284314008 +47.350348294403126 +427.02524336808426 +-176.02776084656458 +68.0132703432497 +0 +120 +absolute + + + +0.01 +smooth + +8.536568748059471 +47.35034796479172 +427.0176750350988 +-176.14053054837927 +68.02787557204852 +0 +120 +absolute + + + +0.01 +smooth + +8.536567213965865 +47.35034762300982 +427.0097255123227 +-176.25285675343497 +68.0429209183393 +0 +120 +absolute + + + +0.01 +smooth + +8.536565682053475 +47.3503472695616 +427.0014121121151 +-176.36473664786988 +68.05838742338378 +0 +120 +absolute + + + +0.01 +smooth + +8.536564152342569 +47.35034690495129 +426.9927521468346 +-176.47616741782187 +68.0742561284435 +0 +120 +absolute + + + +0.01 +smooth + +8.536562624853422 +47.35034652968304 +426.9837629288402 +-176.5871462494291 +68.09050807478016 +0 +120 +absolute + + + +0.01 +smooth + +8.53656109960632 +47.35034614426111 +426.974461770491 +-176.69767032882973 +68.10712430365544 +0 +120 +absolute + + + +0.01 +smooth + +8.536559576621528 +47.35034574918964 +426.9648659841457 +-176.80773684216175 +68.12408585633095 +0 +120 +absolute + + + +0.01 +smooth + +8.536558055919327 +47.350345344972865 +426.95499288216325 +-176.91734297556323 +68.14137377406837 +0 +120 +absolute + + + +0.01 +smooth + +8.536556537519992 +47.35034493211498 +426.9448597769025 +-177.0264859151723 +68.15896909812933 +0 +120 +absolute + + + +0.01 +smooth + +8.536555021443798 +47.35034451112014 +426.93448398072246 +-177.13516284712694 +68.1768528697755 +0 +120 +absolute + + + +0.01 +smooth + +8.53655350771102 +47.35034408249259 +426.92388280598186 +-177.24337095756525 +68.1950061302685 +0 +120 +absolute + + + +0.01 +smooth + +8.536551996341935 +47.35034364673651 +426.9130735650398 +-177.35110743262538 +68.21340992087 +0 +120 +absolute + + + +0.01 +smooth + +8.536550487356816 +47.35034320435611 +426.9020735702549 +-177.4583694584453 +68.23204528284165 +0 +120 +absolute + + + +0.01 +smooth + +8.536548980775942 +47.35034275585556 +426.89090013398635 +-177.56515422116308 +68.25089325744511 +0 +120 +absolute + + + +0.01 +smooth + +8.536547476619587 +47.35034230173906 +426.8795705685929 +-177.67145890691694 +68.269934885942 +0 +120 +absolute + + + +0.01 +smooth + +8.536545974908028 +47.35034184251083 +426.8681021864335 +-177.7772807018448 +68.28915120959402 +0 +120 +absolute + + + +0.01 +smooth + +8.536544475661538 +47.350341378675054 +426.85651229986695 +-177.88261679208478 +68.30852326966279 +0 +120 +absolute + + + +0.01 +smooth + +8.536542978900396 +47.35034091073594 +426.8448182212521 +-177.98746436377496 +68.32803210740995 +0 +120 +absolute + + + +0.01 +smooth + +8.536541484644873 +47.350340439197666 +426.8330372629481 +-178.0918206030534 +68.34765876409718 +0 +120 +absolute + + + +0.01 +smooth + +8.536539992915252 +47.350339964564434 +426.82118673731367 +-178.19568269605816 +68.3673842809861 +0 +120 +absolute + + + +0.01 +smooth + +8.536538503731801 +47.35033948734045 +426.8092839567077 +-178.2990478289273 +68.38718969933838 +0 +120 +absolute + + + +0.01 +smooth + +8.536537017114803 +47.350339008029906 +426.7973462334892 +-178.40191318779898 +68.40705606041567 +0 +120 +absolute + + + +0.01 +smooth + +8.536535533084525 +47.350338527137005 +426.7853908800169 +-178.50427595881118 +68.42696440547962 +0 +120 +absolute + + + +0.01 +smooth + +8.53653405166125 +47.35033804516594 +426.77343520864974 +-178.606133328102 +68.44689577579186 +0 +120 +absolute + + + +0.01 +smooth + +8.53653257286525 +47.3503375626209 +426.76149653174673 +-178.70748248180954 +68.46683121261408 +0 +120 +absolute + + + +0.01 +smooth + +8.536531096716802 +47.35033708000609 +426.74959216166667 +-178.80832060607182 +68.48675175720791 +0 +120 +absolute + + + +0.01 +smooth + +8.53652962323618 +47.35033659782572 +426.7377394107685 +-178.90864488702695 +68.50663845083498 +0 +120 +absolute + + + +0.01 +smooth + +8.536528152443662 +47.35033611658396 +426.7259555914111 +-179.00845251081296 +68.52647233475699 +0 +120 +absolute + + + +0.01 +smooth + +8.536526684349392 +47.35033563645916 +426.7142464866361 +-179.1077435304915 +68.54624508988766 +0 +120 +absolute + + + +0.01 +smooth + +8.53652521863536 +47.35033514714907 +426.70224733419764 +-179.2066100828133 +68.56629113316589 +0 +120 +absolute + + + +0.01 +smooth + +8.536523755144954 +47.35033464374776 +426.68978499525826 +-179.3050964982034 +68.58677017914813 +0 +120 +absolute + + + +0.01 +smooth + +8.536522293881896 +47.350334126539714 +426.6768700857728 +-179.40320138837185 +68.60767271558196 +0 +120 +absolute + + + +0.01 +smooth + +8.536520834849902 +47.35033359580944 +426.66351322169584 +-179.50092336502857 +68.62898923021483 +0 +120 +absolute + + + +0.01 +smooth + +8.53651937805269 +47.35033305184146 +426.6497250189822 +-179.5982610398837 +68.65071021079433 +0 +120 +absolute + + + +0.01 +smooth + +8.536517923493978 +47.35033249492024 +426.63551609358683 +-179.69521302464722 +68.67282614506789 +0 +120 +absolute + + + +0.01 +smooth + +8.53651647117748 +47.350331925330295 +426.6208970614641 +-179.7917779310291 +68.69532752078305 +0 +120 +absolute + + + +0.01 +smooth + +8.536515021106926 +47.350331343356196 +426.6058785385696 +-179.8879543707394 +68.71820482568737 +0 +120 +absolute + + + +0.01 +smooth + +8.536513573286019 +47.350330749282364 +426.59047114085695 +-179.98374095548812 +68.74144854752828 +0 +120 +absolute + + + +0.01 +smooth + +8.536512127718483 +47.350330143393336 +426.57468548428176 +-180.0791362969853 +68.76504917405333 +0 +120 +absolute + + + +0.01 +smooth + +8.536510684408038 +47.350329525973635 +426.5585321847986 +-180.174139006941 +68.78899719301005 +0 +120 +absolute + + + +0.01 +smooth + +8.536509243358399 +47.35032889730775 +426.5420218583622 +-180.26874769706524 +68.81328309214591 +0 +120 +absolute + + + +0.01 +smooth + +8.536507804573285 +47.3503282576802 +426.52516512092734 +-180.36296097906794 +68.83789735920843 +0 +120 +absolute + + + +0.01 +smooth + +8.536506368056415 +47.350327607375476 +426.5079725884487 +-180.45677746465918 +68.86283048194515 +0 +120 +absolute + + + +0.01 +smooth + +8.536504933811502 +47.350326946678074 +426.49045487688113 +-180.550195765549 +68.88807294810354 +0 +120 +absolute + + + +0.01 +smooth + +8.536503501842269 +47.350326275872526 +426.4726226021794 +-180.64321449344737 +68.91361524543113 +0 +120 +absolute + + + +0.01 +smooth + +8.53650207215243 +47.35032559524332 +426.4544863802982 +-180.73583226006434 +68.93944786167542 +0 +120 +absolute + + + +0.01 +smooth + +8.536500644745708 +47.350324905074984 +426.4360568271926 +-180.82804767711002 +68.96556128458397 +0 +120 +absolute + + + +0.01 +smooth + +8.536499219625815 +47.350324205651994 +426.41734455881704 +-180.91985935629424 +68.99194600190422 +0 +120 +absolute + + + +0.01 +smooth + +8.53649779679647 +47.35032349725886 +426.3983601911262 +-181.0112659093271 +69.01859250138367 +0 +120 +absolute + + + +0.01 +smooth + +8.536496376261393 +47.35032278018011 +426.3791143400752 +-181.10226594791874 +69.04549127076992 +0 +120 +absolute + + + +0.01 +smooth + +8.536494958024301 +47.35032205470024 +426.35961762161867 +-181.19285808377902 +69.07263279781041 +0 +120 +absolute + + + +0.01 +smooth + +8.536493542088913 +47.350321321103756 +426.3398806517114 +-181.28304092861808 +69.1000075702527 +0 +120 +absolute + + + +0.01 +smooth + +8.536492128458946 +47.35032057967516 +426.31991404630793 +-181.37281309414587 +69.12760607584424 +0 +120 +absolute + + + +0.01 +smooth + +8.536490717138115 +47.35031983069895 +426.2997284213634 +-181.46217319207238 +69.15541880233258 +0 +120 +absolute + + + +0.01 +smooth + +8.536489308130141 +47.35031907445965 +426.2793343928323 +-181.5511198341077 +69.1834362374652 +0 +120 +absolute + + + +0.01 +smooth + +8.536487901438742 +47.35031831124175 +426.25874257666953 +-181.63965163196184 +69.21164886898967 +0 +120 +absolute + + + +0.01 +smooth + +8.536486497067632 +47.350317541329765 +426.23796358882987 +-181.72776719734478 +69.24004718465343 +0 +120 +absolute + + + +0.01 +smooth + +8.536485095020534 +47.3503167650082 +426.2170080452679 +-181.8154651419666 +69.26862167220403 +0 +120 +absolute + + + +0.01 +smooth + +8.536483695301163 +47.350315982561554 +426.1958865619386 +-181.90274407753725 +69.29736281938897 +0 +120 +absolute + + + +0.01 +smooth + +8.536482297913237 +47.350315194274344 +426.1746097547967 +-181.98960261576678 +69.32626111395575 +0 +120 +absolute + + + +0.01 +smooth + +8.536480902860472 +47.35031440043106 +426.1531882397969 +-182.07603936836523 +69.35530704365192 +0 +120 +absolute + + + +0.01 +smooth + +8.53647951014659 +47.35031360131623 +426.131632632894 +-182.16205294704264 +69.38449109622493 +0 +120 +absolute + + + +0.01 +smooth + +8.536478119775305 +47.350312797214336 +426.10995355004286 +-182.24764196350895 +69.41380375942236 +0 +120 +absolute + + + +0.01 +smooth + +8.536476731750337 +47.350311988409906 +426.0881616071981 +-182.33280502947426 +69.44323552099166 +0 +120 +absolute + + + +0.01 +smooth + +8.536475346075404 +47.350311175187414 +426.0662674203146 +-182.41754075664855 +69.47277686868037 +0 +120 +absolute + + + +0.01 +smooth + +8.536473962754222 +47.35031035783141 +426.04428160534707 +-182.50184775674182 +69.502418290236 +0 +120 +absolute + + + +0.01 +smooth + +8.53647258179051 +47.350309536626376 +426.0222147782503 +-182.58572464146414 +69.53215027340603 +0 +120 +absolute + + + +0.01 +smooth + +8.536471203187986 +47.350308711856805 +426.00007755497904 +-182.66917002252552 +69.56196330593801 +0 +120 +absolute + + + +0.01 +smooth + +8.536469826950368 +47.35030788380723 +425.97788055148806 +-182.75218251163597 +69.59184787557942 +0 +120 +absolute + + + +0.01 +smooth + +8.536468453081373 +47.35030705276213 +425.95563438373216 +-182.8347607205055 +69.6217944700778 +0 +120 +absolute + + + +0.01 +smooth + +8.53646708158472 +47.35030621900603 +425.93334966766616 +-182.91690326084415 +69.65179357718065 +0 +120 +absolute + + + +0.01 +smooth + +8.536465712457291 +47.35030538249807 +425.9110265438163 +-182.9986118041408 +69.68184460555601 +0 +120 +absolute + + + +0.01 +smooth + +8.536464345551748 +47.350304536351786 +425.8884441843468 +-183.0799525936808 +69.7121350899228 +0 +120 +absolute + + + +0.01 +smooth + +8.536462980807404 +47.35030367787707 +425.86551550074887 +-183.1609528803894 +69.74273854409498 +0 +120 +absolute + + + +0.01 +smooth + +8.53646161822474 +47.35030280730714 +425.8422473289948 +-183.24161249109923 +69.77364847682014 +0 +120 +absolute + + + +0.01 +smooth + +8.53646025780423 +47.350301924875225 +425.81864650505696 +-183.3219312526429 +69.80485839684593 +0 +120 +absolute + + + +0.01 +smooth + +8.536458899546352 +47.35030103081454 +425.79471986490756 +-183.40190899185285 +69.83636181291989 +0 +120 +absolute + + + +0.01 +smooth + +8.536457543451581 +47.3503001253583 +425.77047424451865 +-183.4815455355618 +69.8681522337897 +0 +120 +absolute + + + +0.01 +smooth + +8.536456189520393 +47.35029920873975 +425.74591647986256 +-183.56084071060215 +69.90022316820293 +0 +120 +absolute + + + +0.01 +smooth + +8.536454837753269 +47.350298281192096 +425.72105340691144 +-183.6397943438066 +69.93256812490719 +0 +120 +absolute + + + +0.01 +smooth + +8.536453488150677 +47.35029734294856 +425.6958918616376 +-183.71840626200768 +69.96518061265009 +0 +120 +absolute + + + +0.01 +smooth + +8.536452140713099 +47.35029639424236 +425.6704386800132 +-183.79667629203792 +69.99805414017925 +0 +120 +absolute + + + +0.01 +smooth + +8.536450795441006 +47.35029543530673 +425.64470069801035 +-183.87460426072985 +70.0311822162422 +0 +120 +absolute + + + +0.01 +smooth + +8.536449452334882 +47.3502944663749 +425.61868475160156 +-183.95218999491613 +70.06455834958665 +0 +120 +absolute + + + +0.01 +smooth + +8.536448111395199 +47.350293487680084 +425.5923976767589 +-184.0294333214293 +70.0981760489602 +0 +120 +absolute + + + +0.01 +smooth + +8.536446772622433 +47.35029249945549 +425.5658463094545 +-184.10633406710195 +70.13202882311037 +0 +120 +absolute + + + +0.01 +smooth + +8.536445436017058 +47.350291501934336 +425.53903748566046 +-184.18289205876653 +70.16611018078484 +0 +120 +absolute + + + +0.01 +smooth + +8.536444101579557 +47.35029049534988 +425.5119780413494 +-184.25910712325577 +70.20041363073123 +0 +120 +absolute + + + +0.01 +smooth + +8.536442769310401 +47.35028947993532 +425.4846748124932 +-184.33497908740213 +70.23493268169709 +0 +120 +absolute + + + +0.01 +smooth + +8.536441439210066 +47.350288455923874 +425.4571346350642 +-184.4105077780382 +70.26966084243006 +0 +120 +absolute + + + +0.01 +smooth + +8.536440111279031 +47.35028742354879 +425.4293643450347 +-184.4856930219965 +70.30459162167773 +0 +120 +absolute + + + +0.01 +smooth + +8.53643878551777 +47.35028638304325 +425.40137077837676 +-184.56053464610972 +70.33971852818773 +0 +120 +absolute + + + +0.01 +smooth + +8.536437461926761 +47.35028533464051 +425.3731607710626 +-184.6350324772103 +70.37503507070764 +0 +120 +absolute + + + +0.01 +smooth + +8.536436140506478 +47.350284278573774 +425.3447411590645 +-184.70918634213086 +70.41053475798509 +0 +120 +absolute + + + +0.01 +smooth + +8.536434821257401 +47.350283215076274 +425.31611877835473 +-184.78299606770395 +70.44621109876766 +0 +120 +absolute + + + +0.01 +smooth + +8.536433504180003 +47.35028214438124 +425.28730046490546 +-184.8564614807622 +70.482057601803 +0 +120 +absolute + + + +0.01 +smooth + +8.53643218927476 +47.35028106672187 +425.2582930546889 +-184.9295824081381 +70.5180677758387 +0 +120 +absolute + + + +0.01 +smooth + +8.536430876542152 +47.35027998233141 +425.22910338367717 +-185.00235867666422 +70.55423512962236 +0 +120 +absolute + + + +0.01 +smooth + +8.536429565982651 +47.350278891443054 +425.1997382878427 +-185.07479011317312 +70.59055317190155 +0 +120 +absolute + + + +0.01 +smooth + +8.536428257596736 +47.35027779429006 +425.1702046031576 +-185.14687654449745 +70.62701541142395 +0 +120 +absolute + + + +0.01 +smooth + +8.53642695138488 +47.35027669110562 +425.140509165594 +-185.21861779746968 +70.66361535693711 +0 +120 +absolute + + + +0.01 +smooth + +8.536425647347563 +47.350275582122975 +425.11065881112415 +-185.29001369892242 +70.70034651718868 +0 +120 +absolute + + + +0.01 +smooth + +8.536424345485258 +47.35027446757534 +425.0806603757204 +-185.3610640756882 +70.73720240092624 +0 +120 +absolute + + + +0.01 +smooth + +8.536423045798445 +47.35027334769593 +425.05052069535486 +-185.43176875459972 +70.7741765168974 +0 +120 +absolute + + + +0.01 +smooth + +8.5364217482876 +47.350272222717976 +425.02024660599983 +-185.5021275624893 +70.81126237384976 +0 +120 +absolute + + + +0.01 +smooth + +8.536420452953195 +47.35027109287471 +424.9898449436274 +-185.57214032618975 +70.84845348053096 +0 +120 +absolute + + + +0.01 +smooth + +8.536419159795708 +47.35026995839934 +424.95932254420984 +-185.6418068725335 +70.88574334568855 +0 +120 +absolute + + + +0.01 +smooth + +8.536417868815617 +47.350268819525084 +424.9286862437194 +-185.71112702835316 +70.9231254780702 +0 +120 +absolute + + + +0.01 +smooth + +8.536416580013398 +47.35026767648518 +424.89794287812833 +-185.78010062048128 +70.96059338642348 +0 +120 +absolute + + + +0.01 +smooth + +8.536415293389524 +47.35026652951284 +424.8670992834087 +-185.84872747575042 +70.99814057949601 +0 +120 +absolute + + + +0.01 +smooth + +8.536414008944476 +47.350265378841286 +424.8361622955328 +-185.91700742099317 +71.03576056603539 +0 +120 +absolute + + + +0.01 +smooth + +8.536412726678726 +47.350264224703736 +424.80513875047296 +-185.98494028304208 +71.07344685478922 +0 +120 +absolute + + + +0.01 +smooth + +8.536411446592753 +47.35026306733342 +424.7740354842012 +-186.05252588872975 +71.11119295450514 +0 +120 +absolute + + + +0.01 +smooth + +8.536410168687032 +47.350261906963574 +424.74285933268993 +-186.11976406488864 +71.14899237393072 +0 +120 +absolute + + + +0.01 +smooth + +8.53640889295278 +47.35026074346586 +424.7116072339578 +-186.18665716570692 +71.186847138373 +0 +120 +absolute + + + +0.01 +smooth + +8.536407619245214 +47.35025957136308 +424.6801294536719 +-186.2532451218043 +71.22488554726596 +0 +120 +absolute + + + +0.01 +smooth + +8.536406347517222 +47.35025838889987 +424.6483776263443 +-186.31954226255422 +71.26314884111399 +0 +120 +absolute + + + +0.01 +smooth + +8.53640507777236 +47.35025719628742 +424.6163571586159 +-186.38554922331292 +71.30163201377059 +0 +120 +absolute + + + +0.01 +smooth + +8.536403810014187 +47.35025599373696 +424.5840734571283 +-186.45126663943697 +71.34033005908925 +0 +120 +absolute + + + +0.01 +smooth + +8.536402544246263 +47.35025478145966 +424.55153192852214 +-186.5166951462825 +71.37923797092351 +0 +120 +absolute + + + +0.01 +smooth + +8.536401280472143 +47.35025355966672 +424.5187379794386 +-186.58183537920604 +71.41835074312682 +0 +120 +absolute + + + +0.01 +smooth + +8.536400018695396 +47.350252328569375 +424.48569701651917 +-186.646687973564 +71.45766336955279 +0 +120 +absolute + + + +0.01 +smooth + +8.536398758919567 +47.35025108837878 +424.45241444640436 +-186.71125356471268 +71.49717084405478 +0 +120 +absolute + + + +0.01 +smooth + +8.536397501148224 +47.35024983930618 +424.4188956757358 +-186.7755327880084 +71.53686816048643 +0 +120 +absolute + + + +0.01 +smooth + +8.536396245384925 +47.35024858156274 +424.3851461111544 +-186.83952627880765 +71.5767503127012 +0 +120 +absolute + + + +0.01 +smooth + +8.536394991633228 +47.350247315359695 +424.35117115930143 +-186.90323467246674 +71.61681229455257 +0 +120 +absolute + + + +0.01 +smooth + +8.53639373989669 +47.35024604090821 +424.3169762268177 +-186.96665860434206 +71.65704909989407 +0 +120 +absolute + + + +0.01 +smooth + +8.536392490178875 +47.35024475841949 +424.2825667203446 +-187.02979870978996 +71.69745572257922 +0 +120 +absolute + + + +0.01 +smooth + +8.536391242483335 +47.350243468104765 +424.24794804652316 +-187.09265562416684 +71.73802715646151 +0 +120 +absolute + + + +0.01 +smooth + +8.53638999681363 +47.350242170175214 +424.21312561199437 +-187.15522998282904 +71.77875839539442 +0 +120 +absolute + + + +0.01 +smooth + +8.536388753173323 +47.350240864842014 +424.17810482339934 +-187.21752242113294 +71.8196444332315 +0 +120 +absolute + + + +0.01 +smooth + +8.536387511565973 +47.35023955231643 +424.14289108737967 +-187.279533574435 +71.86068026382628 +0 +120 +absolute + + + +0.01 +smooth + +8.536386271995134 +47.350238232809616 +424.10748981057577 +-187.34126407809146 +71.90186088103219 +0 +120 +absolute + + + +0.01 +smooth + +8.536385034464365 +47.35023690653276 +424.0719063996291 +-187.4027145674587 +71.94318127870275 +0 +120 +absolute + + + +0.01 +smooth + +8.53638379897723 +47.35023557369709 +424.0361462611808 +-187.46388567789322 +71.98463645069154 +0 +120 +absolute + + + +0.01 +smooth + +8.536382565537288 +47.35023423451381 +424.0002148018721 +-187.52477804475137 +72.02622139085202 +0 +120 +absolute + + + +0.01 +smooth + +8.536381334148091 +47.3502328891941 +423.9641174283437 +-187.58539230338937 +72.06793109303767 +0 +120 +absolute + + + +0.01 +smooth + +8.536380104813201 +47.35023153794918 +423.9278595472371 +-187.6457290891637 +72.10976055110203 +0 +120 +absolute + + + +0.01 +smooth + +8.536378877536182 +47.35023018099024 +423.89144656519323 +-187.70578903743075 +72.15170475889862 +0 +120 +absolute + + + +0.01 +smooth + +8.536377652320585 +47.35022881852848 +423.85488388885324 +-187.76557278354687 +72.19375871028089 +0 +120 +absolute + + + +0.01 +smooth + +8.536376429169973 +47.3502274507751 +423.8181769248583 +-187.82508096286844 +72.23591739910239 +0 +120 +absolute + + + +0.01 +smooth + +8.536375208087906 +47.3502260779413 +423.7813310798494 +-187.88431421075182 +72.27817581921664 +0 +120 +absolute + + + +0.01 +smooth + +8.536373989077939 +47.350224700238286 +423.7443517604679 +-187.94327316255334 +72.32052896447713 +0 +120 +absolute + + + +0.01 +smooth + +8.536372772143634 +47.35022331787725 +423.70724437335457 +-188.0019584536295 +72.36297182873734 +0 +120 +absolute + + + +0.01 +smooth + +8.536371557288549 +47.35022193106941 +423.6700143251507 +-188.06037071933656 +72.40549940585082 +0 +120 +absolute + + + +0.01 +smooth + +8.536370344516241 +47.350220540025944 +423.63266702249746 +-188.1185105950309 +72.44810668967105 +0 +120 +absolute + + + +0.01 +smooth + +8.536369133830274 +47.350219144958075 +423.595207872036 +-188.17637871606894 +72.49078867405154 +0 +120 +absolute + + + +0.01 +smooth + +8.5363679252342 +47.350217746076986 +423.5576422804072 +-188.23397571780703 +72.53354035284582 +0 +120 +absolute + + + +0.01 +smooth + +8.536366718731584 +47.350216343593885 +423.51997565425233 +-188.29130223560156 +72.57635671990735 +0 +120 +absolute + + + +0.01 +smooth + +8.53636551432598 +47.35021493771997 +423.4822134002126 +-188.34835890480886 +72.61923276908969 +0 +120 +absolute + + + +0.01 +smooth + +8.53636431202095 +47.350213528666444 +423.4443609249289 +-188.40514636078535 +72.6621634942463 +0 +120 +absolute + + + +0.01 +smooth + +8.536363111820052 +47.3502121166445 +423.40642363504253 +-188.46166523888738 +72.70514388923073 +0 +120 +absolute + + + +0.01 +smooth + +8.536361913726843 +47.350210701865336 +423.36840693719444 +-188.51791617447134 +72.74816894789645 +0 +120 +absolute + + + +0.01 +smooth + +8.536360717744884 +47.35020928454018 +423.33031623802594 +-188.57389980289355 +72.79123366409698 +0 +120 +absolute + + + +0.01 +smooth + +8.536359523877735 +47.35020786488021 +423.292156944178 +-188.62961675951044 +72.83433303168584 +0 +120 +absolute + + + +0.01 +smooth + +8.536358332128954 +47.350206443096624 +423.25393446229174 +-188.68506767967835 +72.87746204451652 +0 +120 +absolute + + + +0.01 +smooth + +8.536357142502096 +47.350205019400626 +423.2156541990084 +-188.7402531987537 +72.92061569644252 +0 +120 +absolute + + + +0.01 +smooth + +8.53635595498007 +47.35020359360161 +423.177311407316 +-188.79517556744767 +72.96379756502856 +0 +120 +absolute + + + +0.01 +smooth + +8.536354769323015 +47.350202161133524 +423.1387906828712 +-188.8498546853838 +73.00710484686465 +0 +120 +absolute + + + +0.01 +smooth + +8.536353585469163 +47.35020072080715 +423.1000617685103 +-188.9042969973662 +73.050562903701 +0 +120 +absolute + + + +0.01 +smooth + +8.536352403428422 +47.35019927281798 +423.06112937802294 +-188.958503394911 +73.09416755002977 +0 +120 +absolute + + + +0.01 +smooth + +8.536351223210698 +47.35019781736151 +423.02199822519896 +-189.01247476953435 +73.13791460034302 +0 +120 +absolute + + + +0.01 +smooth + +8.536350044825902 +47.350196354633226 +422.9826730238281 +-189.06621201275237 +73.18179986913296 +0 +120 +absolute + + + +0.01 +smooth + +8.53634886828395 +47.350194884828646 +422.9431584876999 +-189.1197160160813 +73.22581917089164 +0 +120 +absolute + + + +0.01 +smooth + +8.536347693594749 +47.350193408143255 +422.90345933060433 +-189.17298767103725 +73.26996832011122 +0 +120 +absolute + + + +0.01 +smooth + +8.53634652076821 +47.35019192477254 +422.8635802663309 +-189.2260278691363 +73.31424313128383 +0 +120 +absolute + + + +0.01 +smooth + +8.53634534981424 +47.35019043491201 +422.8235260086694 +-189.27883750189474 +73.3586394189016 +0 +120 +absolute + + + +0.01 +smooth + +8.536344180742757 +47.35018893875716 +422.7833012714094 +-189.33141746082862 +73.40315299745666 +0 +120 +absolute + + + +0.01 +smooth + +8.536343013563666 +47.35018743650346 +422.7429107683407 +-189.38376863745415 +73.44777968144112 +0 +120 +absolute + + + +0.01 +smooth + +8.536341848286883 +47.350185928346455 +422.7023592132535 +-189.43589192328758 +73.49251528534714 +0 +120 +absolute + + + +0.01 +smooth + +8.53634068492231 +47.35018441448162 +422.66165131993677 +-189.48778820984492 +73.53735562366683 +0 +120 +absolute + + + +0.01 +smooth + +8.536339523479862 +47.350182895104425 +422.6207918021805 +-189.53945838864232 +73.58229651089226 +0 +120 +absolute + + + +0.01 +smooth + +8.536338363969454 +47.35018137041042 +422.5797853737746 +-189.59090335119612 +73.62733376151569 +0 +120 +absolute + + + +0.01 +smooth + +8.536337206400994 +47.35017984059504 +422.5386367485087 +-189.6421239890223 +73.67246319002913 +0 +120 +absolute + + + +0.01 +smooth + +8.536336050784387 +47.350178305853824 +422.4973506401725 +-189.69312119363713 +73.71768061092477 +0 +120 +absolute + + + +0.01 +smooth + +8.536334897129551 +47.35017676638226 +422.45593176255557 +-189.7438958565567 +73.7629818386947 +0 +120 +absolute + + + +0.01 +smooth + +8.536333745446392 +47.35017522237584 +422.41438482944784 +-189.79444886929718 +73.80836268783108 +0 +120 +absolute + + + +0.01 +smooth + +8.536332595744824 +47.35017367403007 +422.37271455463895 +-189.84478112337473 +73.85381897282602 +0 +120 +absolute + + + +0.01 +smooth + +8.536331448034753 +47.3501721215404 +422.33092565191856 +-189.89489351030556 +73.89934650817165 +0 +120 +absolute + + + +0.01 +smooth + +8.536330302326096 +47.35017056510241 +422.28902283507654 +-189.94478692160578 +73.94494110836011 +0 +120 +absolute + + + +0.01 +smooth + +8.536329158628757 +47.35016900491153 +422.2470108179025 +-189.99446224879156 +73.99059858788351 +0 +120 +absolute + + + +0.01 +smooth + +8.536328016952652 +47.350167441163286 +422.2048943141861 +-190.04392038337903 +74.03631476123398 +0 +120 +absolute + + + +0.01 +smooth + +8.536326877307687 +47.350165874053154 +422.1626780377172 +-190.09316221688448 +74.08208544290368 +0 +120 +absolute + + + +0.01 +smooth + +8.536325739703779 +47.350164303776644 +422.1203667022854 +-190.14218864082383 +74.12790644738469 +0 +120 +absolute + + + +0.01 +smooth + +8.53632460415083 +47.35016273052925 +422.07796502168054 +-190.19100054671344 +74.17377358916917 +0 +120 +absolute + + + +0.01 +smooth + +8.536323470658758 +47.350161154506466 +422.03547770969226 +-190.23959882606943 +74.21968268274924 +0 +120 +absolute + + + +0.01 +smooth + +8.53632233923747 +47.35015957590379 +421.99290948011026 +-190.2879843704079 +74.26562954261702 +0 +120 +absolute + + + +0.01 +smooth + +8.536321209896878 +47.35015799491673 +421.9502650467243 +-190.33615807124505 +74.31160998326465 +0 +120 +absolute + + + +0.01 +smooth + +8.53632008264689 +47.35015641174076 +421.9075491233241 +-190.384120820097 +74.35761981918426 +0 +120 +absolute + + + +0.01 +smooth + +8.53631895749742 +47.350154826571384 +421.8647664236994 +-190.43187350847995 +74.40365486486797 +0 +120 +absolute + + + +0.01 +smooth + +8.536317834458377 +47.35015323960411 +421.82192166163986 +-190.47941702791007 +74.44971093480788 +0 +120 +absolute + + + +0.01 +smooth + +8.536316713539671 +47.35015165103442 +421.7790195509353 +-190.5267522699035 +74.49578384349618 +0 +120 +absolute + + + +0.01 +smooth + +8.536315594751214 +47.35015006105783 +421.73606480537535 +-190.5738801259764 +74.54186940542496 +0 +120 +absolute + + + +0.01 +smooth + +8.536314478102916 +47.350148469869815 +421.6930621387497 +-190.62080148764494 +74.58796343508634 +0 +120 +absolute + + + +0.01 +smooth + +8.536313363604688 +47.35014687766588 +421.65001626484815 +-190.66751724642523 +74.63406174697246 +0 +120 +absolute + + + +0.01 +smooth + +8.536312251266441 +47.35014528464151 +421.6069318974604 +-190.71402829383348 +74.68016015557548 +0 +120 +absolute + + + +0.01 +smooth + +8.536311141098082 +47.35014369099223 +421.5638137503762 +-190.7603355213858 +74.72625447538746 +0 +120 +absolute + + + +0.01 +smooth + +8.536310033109528 +47.350142096913515 +421.5206665373852 +-190.80643982059843 +74.77234052090058 +0 +120 +absolute + + + +0.01 +smooth + +8.536308927310683 +47.35014050260085 +421.4774949722771 +-190.85234208298746 +74.81841410660697 +0 +120 +absolute + + + +0.01 +smooth + +8.536307823711462 +47.35013890824977 +421.43430376884174 +-190.89804320006908 +74.8644710469987 +0 +120 +absolute + + + +0.01 +smooth + +8.536306722273752 +47.35013731360472 +421.3910866123891 +-190.9435452326139 +74.91051636011736 +0 +120 +absolute + + + +0.01 +smooth + +8.536305622566982 +47.350135714685955 +421.3477461122527 +-190.9888597810611 +74.95663113362554 +0 +120 +absolute + + + +0.01 +smooth + +8.536304524503707 +47.35013411066464 +421.30426190623314 +-191.0339900607699 +75.00283229383272 +0 +120 +absolute + + + +0.01 +smooth + +8.53630342810521 +47.35013250172608 +421.2606384294924 +-191.07893663668258 +75.0491160848389 +0 +120 +absolute + + + +0.01 +smooth + +8.536302333392774 +47.35013088805563 +421.2168801171926 +-191.12370007374116 +75.09547875074394 +0 +120 +absolute + + + +0.01 +smooth + +8.536301240387692 +47.35012926983858 +421.17299140449546 +-191.1682809368879 +75.14191653564775 +0 +120 +absolute + + + +0.01 +smooth + +8.536300149111247 +47.35012764726032 +421.1289767265637 +-191.21267979106514 +75.1884256836503 +0 +120 +absolute + + + +0.01 +smooth + +8.536299059584719 +47.35012602050612 +421.08484051855874 +-191.25689720121488 +75.23500243885137 +0 +120 +absolute + + + +0.01 +smooth + +8.536297971829402 +47.350124389761326 +421.0405872156431 +-191.30093373227945 +75.28164304535092 +0 +120 +absolute + + + +0.01 +smooth + +8.536296885866577 +47.350122755211274 +420.9962212529787 +-191.34478994920104 +75.32834374724888 +0 +120 +absolute + + + +0.01 +smooth + +8.536295801717532 +47.350121117041304 +420.95174706572755 +-191.38846641692177 +75.37510078864514 +0 +120 +absolute + + + +0.01 +smooth + +8.53629471940355 +47.35011947543672 +420.9071690890519 +-191.4319637003839 +75.42191041363961 +0 +120 +absolute + + + +0.01 +smooth + +8.536293638945917 +47.35011783058285 +420.86249175811355 +-191.47528236452968 +75.46876886633217 +0 +120 +absolute + + + +0.01 +smooth + +8.536292560365922 +47.35011618266506 +420.81771950807473 +-191.51842297430125 +75.51567239082271 +0 +120 +absolute + + + +0.01 +smooth + +8.536291483684847 +47.35011453186862 +420.7728567740976 +-191.56138609464074 +75.56261723121118 +0 +120 +absolute + + + +0.01 +smooth + +8.536290408923977 +47.350112878378894 +420.727907991344 +-191.60417229049045 +75.60959963159745 +0 +120 +absolute + + + +0.01 +smooth + +8.536289336104602 +47.35011122238124 +420.68287759497633 +-191.64678212679257 +75.65661583608144 +0 +120 +absolute + + + +0.01 +smooth + +8.536288265248002 +47.35010956406092 +420.6377700201563 +-191.6892161684893 +75.70366208876307 +0 +120 +absolute + + + +0.01 +smooth + +8.536287196375467 +47.350107903603295 +420.5925897020461 +-191.73147498052276 +75.75073463374217 +0 +120 +absolute + + + +0.01 +smooth + +8.53628612950828 +47.3501062411937 +420.54734107580794 +-191.77355912783523 +75.79782971511872 +0 +120 +absolute + + + +0.01 +smooth + +8.53628506466773 +47.350104577017476 +420.5020285766039 +-191.81546917536897 +75.84494357699262 +0 +120 +absolute + + + +0.01 +smooth + +8.536284001875098 +47.350102911259896 +420.45665663959585 +-191.85720568806602 +75.89207246346373 +0 +120 +absolute + + + +0.01 +smooth + +8.536282941151676 +47.35010124410635 +420.4112296999459 +-191.8987692308687 +75.93921261863198 +0 +120 +absolute + + + +0.01 +smooth + +8.536281882518741 +47.350099575742135 +420.3657521928163 +-191.94016036871918 +75.98636028659729 +0 +120 +absolute + + + +0.01 +smooth + +8.536280825997586 +47.35009790635258 +420.32022855336885 +-191.98137966655958 +76.03351171145951 +0 +120 +absolute + + + +0.01 +smooth + +8.536279771609493 +47.35009623612302 +420.27466321676593 +-192.02242768933226 +76.0806631373186 +0 +120 +absolute + + + +0.01 +smooth + +8.53627871937575 +47.35009456523879 +420.2290606181694 +-192.06330500197927 +76.12781080827443 +0 +120 +absolute + + + +0.01 +smooth + +8.53627766931764 +47.350092893885204 +420.1834251927414 +-192.10401216944294 +76.17495096842693 +0 +120 +absolute + + + +0.01 +smooth + +8.536276621456448 +47.3500912222476 +420.13776137564395 +-192.14454975666536 +76.22207986187595 +0 +120 +absolute + + + +0.01 +smooth + +8.536275575813466 +47.350089550511306 +420.09207360203925 +-192.18491832858876 +76.26919373272148 +0 +120 +absolute + + + +0.01 +smooth + +8.536274532409973 +47.35008787886164 +420.04636630708916 +-192.22511845015538 +76.31628882506332 +0 +120 +absolute + + + +0.01 +smooth + +8.536273491267254 +47.350086207483955 +420.00064392595596 +-192.26515068630738 +76.36336138300148 +0 +120 +absolute + + + +0.01 +smooth + +8.5362724524066 +47.35008453656355 +419.9549108938016 +-192.30501560198698 +76.41040765063579 +0 +120 +absolute + + + +0.01 +smooth + +8.536271415849292 +47.350082866285774 +419.9091716457882 +-192.34471376213634 +76.45742387206619 +0 +120 +absolute + + + +0.01 +smooth + +8.536270381616621 +47.350081196835944 +419.8634306170778 +-192.38424573169775 +76.50440629139254 +0 +120 +absolute + + + +0.01 +smooth + +8.536269349729867 +47.3500795283994 +419.8176922428325 +-192.42361207561333 +76.55135115271479 +0 +120 +absolute + + + +0.01 +smooth + +8.536268320210318 +47.35007786116145 +419.7719609582143 +-192.4628133588253 +76.59825470013281 +0 +120 +absolute + + + +0.01 +smooth + +8.536267293079261 +47.35007619530744 +419.72624119838554 +-192.50185014627584 +76.64511317774654 +0 +120 +absolute + + + +0.01 +smooth + +8.536266268357979 +47.35007453102269 +419.6805373985079 +-192.54072300290719 +76.69192282965585 +0 +120 +absolute + + + +0.01 +smooth + +8.536265246067758 +47.350072868492546 +419.6348539937436 +-192.5794324936615 +76.73867989996069 +0 +120 +absolute + + + +0.01 +smooth + +8.536264226229886 +47.35007120790232 +419.5891954192548 +-192.61797918348105 +76.78538063276088 +0 +120 +absolute + + + +0.01 +smooth + +8.536263208865645 +47.350069549437336 +419.54356611020364 +-192.656363637308 +76.83202127215641 +0 +120 +absolute + + + +0.01 +smooth + +8.536262193996324 +47.350067893282926 +419.497970501752 +-192.69458642008453 +76.87859806224714 +0 +120 +absolute + + + +0.01 +smooth + +8.536261181537945 +47.35006623909033 +419.4524000447636 +-192.73265034123793 +76.92511794030307 +0 +120 +absolute + + + +0.01 +smooth + +8.536260170740606 +47.35006458310113 +419.4067633333226 +-192.7705722564452 +76.97165614855157 +0 +120 +absolute + + + +0.01 +smooth + +8.536259161484338 +47.35006292470065 +419.3610454559099 +-192.80835532567522 +77.01822504978863 +0 +120 +absolute + + + +0.01 +smooth + +8.536258153807259 +47.350061264072 +419.31525089993835 +-192.84599931578722 +77.06482104075793 +0 +120 +absolute + + + +0.01 +smooth + +8.536257147747488 +47.35005960139827 +419.2693841528205 +-192.88350399364055 +77.11144051820325 +0 +120 +absolute + + + +0.01 +smooth + +8.536256143343138 +47.35005793686253 +419.2234497019693 +-192.92086912609446 +77.15807987886838 +0 +120 +absolute + + + +0.01 +smooth + +8.536255140632337 +47.35005627064788 +419.1774520347973 +-192.95809448000836 +77.20473551949706 +0 +120 +absolute + + + +0.01 +smooth + +8.5362541396532 +47.35005460293742 +419.13139563871744 +-192.9951798222414 +77.25140383683303 +0 +120 +absolute + + + +0.01 +smooth + +8.536253140443847 +47.35005293391422 +419.0852850011425 +-193.032124919653 +77.29808122762016 +0 +120 +absolute + + + +0.01 +smooth + +8.536252143042397 +47.35005126376137 +419.03912460948504 +-193.06892953910247 +77.3447640886021 +0 +120 +absolute + + + +0.01 +smooth + +8.536251147486965 +47.35004959266196 +418.99291895115783 +-193.10559344744902 +77.39144881652265 +0 +120 +absolute + + + +0.01 +smooth + +8.536250153815677 +47.3500479207991 +418.9466725135739 +-193.14211641155214 +77.43813180812565 +0 +120 +absolute + + + +0.01 +smooth + +8.536249162066648 +47.350046248355845 +418.9003897841457 +-193.178498198271 +77.48480946015478 +0 +120 +absolute + + + +0.01 +smooth + +8.536248172277993 +47.35004457551528 +418.85407525028603 +-193.2147385744648 +77.53147816935379 +0 +120 +absolute + + + +0.01 +smooth + +8.536247184487841 +47.35004290246054 +418.8077333994078 +-193.25083730699316 +77.57813433246653 +0 +120 +absolute + + + +0.01 +smooth + +8.536246198734302 +47.35004122937467 +418.76136871892373 +-193.28679416271513 +77.6247743462367 +0 +120 +absolute + + + +0.01 +smooth + +8.5362452150555 +47.35003955644076 +418.7149856962464 +-193.32260890849008 +77.67139460740812 +0 +120 +absolute + + + +0.01 +smooth + +8.536244233489553 +47.35003788384193 +418.66858881878875 +-193.3582813111774 +77.7179915127245 +0 +120 +absolute + + + +0.01 +smooth + +8.536243254074579 +47.35003621176122 +418.62218257396336 +-193.39381113763625 +77.76456145892962 +0 +120 +absolute + + + +0.01 +smooth + +8.536242276848697 +47.35003454038178 +418.5757714491832 +-193.42919815472607 +77.81110084276726 +0 +120 +absolute + + + +0.01 +smooth + +8.536241301850024 +47.35003286988664 +418.5293599318608 +-193.46444212930612 +77.85760606098118 +0 +120 +absolute + + + +0.01 +smooth + +8.536240329116689 +47.35003120045892 +418.4829525094093 +-193.49954282823575 +77.90407351031519 +0 +120 +absolute + + + +0.01 +smooth + +8.536239358686796 +47.350029532281695 +418.4365536692409 +-193.53450001837416 +77.95049958751297 +0 +120 +absolute + + + +0.01 +smooth + +8.536238390598474 +47.35002786553806 +418.3901678987687 +-193.56931346658075 +77.99688068931833 +0 +120 +absolute + + + +0.01 +smooth + +8.536237424889837 +47.35002620041111 +418.3437996854054 +-193.6039829397148 +78.04321321247505 +0 +120 +absolute + + + +0.01 +smooth + +8.53623646159901 +47.350024537083904 +418.29745351656373 +-193.63850820463557 +78.08949355372687 +0 +120 +absolute + + + +0.01 +smooth + +8.536235500764107 +47.350022875739555 +418.2511338796564 +-193.67288902820246 +78.13571810981757 +0 +120 +absolute + + + +0.01 +smooth + +8.536234542423248 +47.35002121656116 +418.2048452620962 +-193.70712517727472 +78.18188327749091 +0 +120 +absolute + + + +0.01 +smooth + +8.536233586614554 +47.350019559731784 +418.1585921512961 +-193.74121641871167 +78.22798545349066 +0 +120 +absolute + + + +0.01 +smooth + +8.53623263337614 +47.35001790543453 +418.1123790346685 +-193.7751625193726 +78.27402103456059 +0 +120 +absolute + + + +0.01 +smooth + +8.536231682746129 +47.350016253852466 +418.0662103996263 +-193.80896324611683 +78.31998641744445 +0 +120 +absolute + + + +0.01 +smooth + +8.536230734762638 +47.35001460516871 +418.02009073358226 +-193.84261836580367 +78.36587799888602 +0 +120 +absolute + + + +0.01 +smooth + +8.536229789463786 +47.35001295956633 +417.9740245239492 +-193.87612764529246 +78.41169217562907 +0 +120 +absolute + + + +0.01 +smooth + +8.536228846887692 +47.35001131722841 +417.9280162581398 +-193.90949085144246 +78.45742534441735 +0 +120 +absolute + + + +0.01 +smooth + +8.536227907072476 +47.35000967833805 +417.8820704235668 +-193.94270775111298 +78.50307390199461 +0 +120 +absolute + + + +0.01 +smooth + +8.536226970056259 +47.35000804307834 +417.836191507643 +-193.97577811116338 +78.54863424510467 +0 +120 +absolute + + + +0.01 +smooth + +8.536226035877153 +47.350006411632364 +417.7903839977811 +-194.0087016984529 +78.59410277049126 +0 +120 +absolute + + + +0.01 +smooth + +8.536225104573283 +47.350004784183206 +417.74465238139385 +-194.04147827984087 +78.63947587489814 +0 +120 +absolute + + + +0.01 +smooth + +8.536224176182769 +47.35000316091396 +417.69900114589416 +-194.07410762218663 +78.68474995506908 +0 +120 +absolute + + + +0.01 +smooth + +8.536223250743724 +47.3500015420077 +417.65343477869453 +-194.10658949234949 +78.72992140774787 +0 +120 +absolute + + + +0.01 +smooth + +8.536222328294272 +47.34999992764754 +417.6079577672079 +-194.13892365718863 +78.77498662967822 +0 +120 +absolute + + + +0.01 +smooth + +8.536221408872528 +47.34999831801654 +417.56257459884694 +-194.17110988356356 +78.81994201760398 +0 +120 +absolute + + + +0.01 +smooth + +8.536220492516616 +47.349996713297806 +417.51728976102453 +-194.20314793833344 +78.86478396826885 +0 +120 +absolute + + + +0.01 +smooth + +8.536219579058885 +47.34999511299003 +417.4720910076042 +-194.23504330201865 +78.90952241620069 +0 +120 +absolute + + + +0.01 +smooth + +8.536218667310173 +47.34999351317172 +417.42688252684917 +-194.2668296182851 +78.954234957053 +0 +120 +absolute + + + +0.01 +smooth + +8.536217757121529 +47.34999191334613 +417.38165233365896 +-194.29851133224597 +78.99893145432318 +0 +120 +absolute + + + +0.01 +smooth + +8.536216848550575 +47.349990313701085 +417.33640518783193 +-194.33008713033576 +79.04360823063624 +0 +120 +absolute + + + +0.01 +smooth + +8.536215941654943 +47.34998871442447 +417.2911458491659 +-194.36155569898875 +79.08826160861719 +0 +120 +absolute + + + +0.01 +smooth + +8.536215036492258 +47.34998711570413 +417.2458790774591 +-194.39291572463944 +79.13288791089101 +0 +120 +absolute + + + +0.01 +smooth + +8.536214133120149 +47.349985517727895 +417.2006096325096 +-194.42416589372232 +79.17748346008275 +0 +120 +absolute + + + +0.01 +smooth + +8.536213231596241 +47.34998392068361 +417.15534227411536 +-194.45530489267165 +79.22204457881735 +0 +120 +absolute + + + +0.01 +smooth + +8.536212331978163 +47.34998232475916 +417.11008176207486 +-194.48633140792205 +79.26656758971995 +0 +120 +absolute + + + +0.01 +smooth + +8.53621143432354 +47.34998073014239 +417.06483285618594 +-194.51724412590784 +79.31104881541546 +0 +120 +absolute + + + +0.01 +smooth + +8.536210538690005 +47.34997913702113 +417.01960031624674 +-194.54804173306349 +79.35548457852893 +0 +120 +absolute + + + +0.01 +smooth + +8.53620964513518 +47.34997754558322 +416.9743889020552 +-194.57872291582342 +79.39987120168534 +0 +120 +absolute + + + +0.01 +smooth + +8.536208753716693 +47.34997595601655 +416.92920337340956 +-194.609286360622 +79.44420500750974 +0 +120 +absolute + + + +0.01 +smooth + +8.536207864492171 +47.34997436850894 +416.88404849010806 +-194.63973075389376 +79.48848231862715 +0 +120 +absolute + + + +0.01 +smooth + +8.53620697751924 +47.34997278324823 +416.83892901194844 +-194.67005478207295 +79.53269945766253 +0 +120 +absolute + + + +0.01 +smooth + +8.536206092855535 +47.3499712004223 +416.7938496987293 +-194.70025713159424 +79.57685274724093 +0 +120 +absolute + + + +0.01 +smooth + +8.536205210558675 +47.349969620219014 +416.7488153102483 +-194.73033648889194 +79.62093850998737 +0 +120 +absolute + + + +0.01 +smooth + +8.536204330686283 +47.34996804282614 +416.70383060630354 +-194.7602915404004 +79.66495306852678 +0 +120 +absolute + + + +0.01 +smooth + +8.536203453296 +47.34996646843162 +416.6589003466934 +-194.79012097255412 +79.70889274548429 +0 +120 +absolute + + + +0.01 +smooth + +8.536202578445447 +47.34996489722326 +416.6140292912159 +-194.81982347178766 +79.75275386348487 +0 +120 +absolute + + + +0.01 +smooth + +8.536201706192248 +47.34996332938891 +416.56922219966896 +-194.84939772453515 +79.79653274515348 +0 +120 +absolute + + + +0.01 +smooth + +8.53620083659403 +47.34996176511643 +416.52448383185083 +-194.8788424172313 +79.8402257131152 +0 +120 +absolute + + + +0.01 +smooth + +8.536199969708425 +47.349960204593664 +416.4798189475596 +-194.9081562363104 +79.88382908999502 +0 +120 +absolute + + + +0.01 +smooth + +8.536199105593058 +47.34995864800847 +416.4352323065933 +-194.93733786820684 +79.92733919841791 +0 +120 +absolute + + + +0.01 +smooth + +8.536198244305556 +47.34995709554869 +416.3907286687501 +-194.96638599935517 +79.97075236100895 +0 +120 +absolute + + + +0.01 +smooth + +8.536197385903547 +47.349955547402175 +416.346312793828 +-194.99529931618977 +80.01406490039311 +0 +120 +absolute + + + +0.01 +smooth + +8.536196530444656 +47.34995400375678 +416.30198944162527 +-195.02407650514502 +80.05727313919542 +0 +120 +absolute + + + +0.01 +smooth + +8.536195677986512 +47.349952464800346 +416.2577633719398 +-195.0527162526554 +80.10037340004085 +0 +120 +absolute + + + +0.01 +smooth + +8.536194828586744 +47.34995093072072 +416.2136393445698 +-195.0812172451553 +80.14336200555448 +0 +120 +absolute + + + +0.01 +smooth + +8.536193982302976 +47.349949401705786 +416.16962211931343 +-195.10957816907916 +80.18623527836127 +0 +120 +absolute + + + +0.01 +smooth + +8.536193139192838 +47.34994787794335 +416.1257164559687 +-195.13779771086143 +80.22898954108625 +0 +120 +absolute + + + +0.01 +smooth + +8.536192299313953 +47.349946359621285 +416.0819271143336 +-195.16587455693656 +80.27162111635444 +0 +120 +absolute + + + +0.01 +smooth + +8.536191462723954 +47.34994484692744 +416.03825885420645 +-195.19380739373887 +80.31412632679084 +0 +120 +absolute + + + +0.01 +smooth + +8.536190629480462 +47.34994334004965 +415.9947164353852 +-195.22159490770287 +80.35650149502045 +0 +120 +absolute + + + +0.01 +smooth + +8.536189799641111 +47.349941839175784 +415.95130461766803 +-195.249235785263 +80.39874294366831 +0 +120 +absolute + + + +0.01 +smooth + +8.536188973263522 +47.34994034449369 +415.90802816085306 +-195.2767287128537 +80.44084699535942 +0 +120 +absolute + + + +0.01 +smooth + +8.536188150405327 +47.3499388561912 +415.86489182473827 +-195.3040723769093 +80.48280997271878 +0 +120 +absolute + + + +0.01 +smooth + +8.53618733112415 +47.349937374456175 +415.82190036912175 +-195.33126546386433 +80.52462819837143 +0 +120 +absolute + + + +0.01 +smooth + +8.53618651547762 +47.34993589947648 +415.77905855380175 +-195.35830666015312 +80.56629799494235 +0 +120 +absolute + + + +0.01 +smooth + +8.536185703523362 +47.349934431439934 +415.7363711385762 +-195.38519465221026 +80.60781568505656 +0 +120 +absolute + + + +0.01 +smooth + +8.536184895319007 +47.349932970534425 +415.6938428832433 +-195.41192812646997 +80.64917759133911 +0 +120 +absolute + + + +0.01 +smooth + +8.536184090922179 +47.34993151694776 +415.6514785476012 +-195.43850576936683 +80.69038003641495 +0 +120 +absolute + + + +0.01 +smooth + +8.536183290390507 +47.34993007086782 +415.60928289144783 +-195.4649262673352 +80.73141934290912 +0 +120 +absolute + + + +0.01 +smooth + +8.536182493420037 +47.349928631540934 +415.5672374103516 +-195.49120061130458 +80.77231031893339 +0 +120 +absolute + + + +0.01 +smooth + +8.536181698289665 +47.3499271945068 +415.5252320842008 +-195.51738780024178 +80.81314052167973 +0 +120 +absolute + + + +0.01 +smooth + +8.536180904834817 +47.349925759334916 +415.48325657067807 +-195.5434935554735 +80.85391835043572 +0 +120 +absolute + + + +0.01 +smooth + +8.536180113133664 +47.34992432622554 +415.4413161175089 +-195.56951531944884 +80.89463981950108 +0 +120 +absolute + + + +0.01 +smooth + +8.536179323264383 +47.349922895378874 +415.39941597241915 +-195.59545053461656 +80.9353009431754 +0 +120 +absolute + + + +0.01 +smooth + +8.536178535305146 +47.349921466995134 +415.35756138313417 +-195.6212966434256 +80.97589773575841 +0 +120 +absolute + + + +0.01 +smooth + +8.536177749334124 +47.349920041274544 +415.3157575973797 +-195.64705108832487 +81.01642621154967 +0 +120 +absolute + + + +0.01 +smooth + +8.536176965429494 +47.34991861841732 +415.2740098628812 +-195.6727113117633 +81.05688238484892 +0 +120 +absolute + + + +0.01 +smooth + +8.536176183669422 +47.34991719862368 +415.2323234273646 +-195.6982747561898 +81.0972622699557 +0 +120 +absolute + + + +0.01 +smooth + +8.536175404132083 +47.34991578209384 +415.19070353855494 +-195.7237388640531 +81.13756188116973 +0 +120 +absolute + + + +0.01 +smooth + +8.536174626895654 +47.34991436902803 +415.14915544417863 +-195.7491010778025 +81.17777723279066 +0 +120 +absolute + + + +0.01 +smooth + +8.536173852038305 +47.349912959626465 +415.1076843919605 +-195.77435883988653 +81.21790433911814 +0 +120 +absolute + + + +0.01 +smooth + +8.536173079638205 +47.349911554089346 +415.06629562962627 +-195.79950959275422 +81.25793921445174 +0 +120 +absolute + + + +0.01 +smooth + +8.536172309773534 +47.349910152616914 +415.0249944049021 +-195.82455077885456 +81.29787787309122 +0 +120 +absolute + + + +0.01 +smooth + +8.536171542522464 +47.34990875540938 +414.9837859655131 +-195.84947984063643 +81.33771632933617 +0 +120 +absolute + + + +0.01 +smooth + +8.536170777963157 +47.349907362666954 +414.9426755591848 +-195.87429422054862 +81.37745059748622 +0 +120 +absolute + + + +0.01 +smooth + +8.536170016173799 +47.34990597458987 +414.9016684336432 +-195.89899136104015 +81.41707669184106 +0 +120 +absolute + + + +0.01 +smooth + +8.536169257232556 +47.34990459137834 +414.8607698366136 +-195.9235687045599 +81.45659062670033 +0 +120 +absolute + + + +0.01 +smooth + +8.536168501217603 +47.34990321323258 +414.81998501582166 +-195.94802369355676 +81.49598841636364 +0 +120 +absolute + + + +0.01 +smooth + +8.53616774820711 +47.3499018403528 +414.779319218993 +-195.97235377047966 +81.5352660751307 +0 +120 +absolute + + + +0.01 +smooth + +8.536166998279255 +47.349900472939254 +414.7387776938533 +-195.99655637777755 +81.57441961730112 +0 +120 +absolute + + + +0.01 +smooth + +8.536166251512205 +47.349899111192116 +414.6983656881281 +-196.0206289578993 +81.61344505717454 +0 +120 +absolute + + + +0.01 +smooth + +8.536165507984137 +47.34989775531164 +414.658088449543 +-196.04456895329375 +81.65233840905064 +0 +120 +absolute + + + +0.01 +smooth + +8.53616476777322 +47.349896405498015 +414.6179512258236 +-196.06837380640985 +81.69109568722905 +0 +120 +absolute + + + +0.01 +smooth + +8.53616403095763 +47.34989506195148 +414.57795926469544 +-196.09204095969656 +81.72971290600941 +0 +120 +absolute + + + +0.01 +smooth + +8.53616329761554 +47.34989372487223 +414.53811781388424 +-196.1155678556028 +81.76818607969139 +0 +120 +absolute + + + +0.01 +smooth + +8.53616256782512 +47.349892394460525 +414.49843212111546 +-196.13895193657737 +81.80651122257461 +0 +120 +absolute + + + +0.01 +smooth + +8.536161841664544 +47.349891070916556 +414.45890743411485 +-196.16219064506927 +81.84468434895875 +0 +120 +absolute + + + +0.01 +smooth + +8.536161119211986 +47.349889754440525 +414.41954900060796 +-196.18528142352736 +81.88270147314343 +0 +120 +absolute + + + +0.01 +smooth + +8.536160400545615 +47.34988844523269 +414.3803620683203 +-196.20822171440057 +81.92055860942833 +0 +120 +absolute + + + +0.01 +smooth + +8.536159685743609 +47.34988714349325 +414.3413518849776 +-196.2310089601378 +81.95825177211306 +0 +120 +absolute + + + +0.01 +smooth + +8.536158974884138 +47.34988584942242 +414.3025236983053 +-196.253640603188 +81.9957769754973 +0 +120 +absolute + + + +0.01 +smooth + +8.536158268045375 +47.34988456322043 +414.26388275602926 +-196.27611408599998 +82.03313023388067 +0 +120 +absolute + + + +0.01 +smooth + +8.53615756530549 +47.349883285087486 +414.22543430587484 +-196.29842685102273 +82.07030756156286 +0 +120 +absolute + + + +0.01 +smooth + +8.536156866742662 +47.349882015223805 +414.1871835955677 +-196.32057634070514 +82.10730497284345 +0 +120 +absolute + + + +0.01 +smooth + +8.53615617243506 +47.34988075382962 +414.1491358728336 +-196.3425599974961 +82.14411848202215 +0 +120 +absolute + + + +0.01 +smooth + +8.536155482460856 +47.34987950110515 +414.11129638539785 +-196.36437526384452 +82.18074410339861 +0 +120 +absolute + + + +0.01 +smooth + +8.536154796898224 +47.349878257250595 +414.07367038098636 +-196.3860195821993 +82.21717785127244 +0 +120 +absolute + + + +0.01 +smooth + +8.536154115825338 +47.34987702246618 +414.0362631073245 +-196.40749039500943 +82.25341573994332 +0 +120 +absolute + + + +0.01 +smooth + +8.536153439320367 +47.34987579695214 +413.99907981213795 +-196.42878514472372 +82.28945378371085 +0 +120 +absolute + + + +0.01 +smooth + +8.536152767461488 +47.34987458090868 +413.96212574315234 +-196.44990127379108 +82.32528799687475 +0 +120 +absolute + + + +0.01 +smooth + +8.53615210032687 +47.34987337453602 +413.9254061480933 +-196.47083622466053 +82.36091439373462 +0 +120 +absolute + + + +0.01 +smooth + +8.53615143799469 +47.349872178034374 +413.8889262746863 +-196.49158743978083 +82.3963289885901 +0 +120 +absolute + + + +0.01 +smooth + +8.536150779938696 +47.34987099022119 +413.85265644787336 +-196.51217600334152 +82.43155469694504 +0 +120 +absolute + + + +0.01 +smooth + +8.536150123763314 +47.349869805625 +413.8164587871218 +-196.53269588485887 +82.4666978516001 +0 +120 +absolute + + + +0.01 +smooth + +8.536149469303373 +47.349868623861056 +413.78032402993864 +-196.55315351318725 +82.50176579482977 +0 +120 +absolute + + + +0.01 +smooth + +8.536148816663047 +47.34986744516005 +413.74425846276705 +-196.57354476806893 +82.53675389560918 +0 +120 +absolute + + + +0.01 +smooth + +8.536148165946488 +47.34986626975265 +413.70826837205055 +-196.59386552924573 +82.57165752291348 +0 +120 +absolute + + + +0.01 +smooth + +8.536147517257863 +47.34986509786953 +413.67236004423216 +-196.61411167645988 +82.6064720457178 +0 +120 +absolute + + + +0.01 +smooth + +8.536146870701328 +47.34986392974136 +413.6365397657554 +-196.63427908945326 +82.64119283299719 +0 +120 +absolute + + + +0.01 +smooth + +8.536146226381058 +47.349862765598836 +413.60081382306373 +-196.65436364796815 +82.67581525372694 +0 +120 +absolute + + + +0.01 +smooth + +8.536145584401202 +47.34986160567261 +413.5651885026001 +-196.67436123174647 +82.71033467688207 +0 +120 +absolute + + + +0.01 +smooth + +8.536144944865928 +47.34986045019336 +413.5296700908082 +-196.69426772053032 +82.74474647143774 +0 +120 +absolute + + + +0.01 +smooth + +8.536144307879397 +47.34985929939175 +413.49426487413103 +-196.71407899406177 +82.77904600636906 +0 +120 +absolute + + + +0.01 +smooth + +8.536143673545771 +47.34985815349848 +413.4589791390121 +-196.73379093208288 +82.8132286506512 +0 +120 +absolute + + + +0.01 +smooth + +8.536143041969211 +47.34985701274419 +413.4238191718946 +-196.75339941433566 +82.84728977325926 +0 +120 +absolute + + + +0.01 +smooth + +8.53614241325388 +47.34985587735957 +413.38879125922193 +-196.77290032056214 +82.88122474316837 +0 +120 +absolute + + + +0.01 +smooth + +8.536141787503942 +47.34985474757529 +413.35390168743737 +-196.7922895305045 +82.91502892935367 +0 +120 +absolute + + + +0.01 +smooth + +8.536141164823556 +47.349853623622046 +413.3191567429842 +-196.81156292390475 +82.94869770079033 +0 +120 +absolute + + + +0.01 +smooth + +8.536140545316881 +47.34985250573046 +413.28456271230556 +-196.83071638050484 +82.98222642645338 +0 +120 +absolute + + + +0.01 +smooth + +8.536139929088087 +47.34985139413125 +413.2501258818451 +-196.849745780047 +83.01561047531804 +0 +120 +absolute + + + +0.01 +smooth + +8.536139316241334 +47.349850289055084 +413.21585253804614 +-196.86864700227318 +83.04884521635947 +0 +120 +absolute + + + +0.01 +smooth + +8.536138706880779 +47.34984919073261 +413.1817489673517 +-196.88741592692546 +83.08192601855268 +0 +120 +absolute + + + +0.01 +smooth + +8.536138101110584 +47.34984809939451 +413.14782145620507 +-196.9060484337458 +83.11484825087285 +0 +120 +absolute + + + +0.01 +smooth + +8.53613749903492 +47.34984701527148 +413.1140762910499 +-196.9245404024765 +83.14760728229517 +0 +120 +absolute + + + +0.01 +smooth + +8.536136900757942 +47.34984593859418 +413.08051975832933 +-196.94288771285943 +83.18019848179472 +0 +120 +absolute + + + +0.01 +smooth + +8.536136306383812 +47.34984486959327 +413.0471581444866 +-196.9610862446367 +83.21261721834665 +0 +120 +absolute + + + +0.01 +smooth + +8.536135716016691 +47.349843808499436 +413.0139977359652 +-196.9791318775504 +83.24485886092606 +0 +120 +absolute + + + +0.01 +smooth + +8.536135129760746 +47.34984275554335 +412.98104481920814 +-196.99702049134248 +83.2769187785081 +0 +120 +absolute + + + +0.01 +smooth + +8.536134547720136 +47.34984171095569 +412.948305680659 +-197.01474796575513 +83.30879234006791 +0 +120 +absolute + + + +0.01 +smooth + +8.536133969999021 +47.34984067496711 +412.91578660676095 +-197.03231018053032 +83.34047491458062 +0 +120 +absolute + + + +0.01 +smooth + +8.536133396701569 +47.34983964780831 +412.88349388395744 +-197.04970301541016 +83.37196187102134 +0 +120 +absolute + + + +0.01 +smooth + +8.536132827931937 +47.34983862970994 +412.85143379869163 +-197.06692235013668 +83.40324857836522 +0 +120 +absolute + + + +0.01 +smooth + +8.536132263794286 +47.34983762090268 +412.8196126374069 +-197.08396406445192 +83.43433040558739 +0 +120 +absolute + + + +0.01 +smooth + +8.536131704392782 +47.349836621617214 +412.7880366865466 +-197.10082403809798 +83.46520272166296 +0 +120 +absolute + + + +0.01 +smooth + +8.536131149831585 +47.34983563208421 +412.756712232554 +-197.1174981508169 +83.49586089556709 +0 +120 +absolute + + + +0.01 +smooth + +8.536130600214857 +47.34983465253434 +412.7256455618724 +-197.13398228235073 +83.52630029627488 +0 +120 +absolute + + + +0.01 +smooth + +8.536130055646762 +47.349833683198256 +412.69484296094515 +-197.1502723124416 +83.5565162927615 +0 +120 +absolute + + + +0.01 +smooth + +8.536129516231458 +47.34983272430667 +412.6643107162155 +-197.16636412083145 +83.58650425400205 +0 +120 +absolute + + + +0.01 +smooth + +8.53612898207311 +47.349831776090234 +412.6340551141268 +-197.18225358726238 +83.61625954897167 +0 +120 +absolute + + + +0.01 +smooth + +8.536128453275882 +47.349830838779624 +412.60408244112233 +-197.1979365914765 +83.6457775466455 +0 +120 +absolute + + + +0.01 +smooth + +8.53612792994393 +47.34982991260551 +412.57439898364544 +-197.2134090132158 +83.67505361599866 +0 +120 +absolute + + + +0.01 +smooth + +8.536127412181422 +47.34982899779856 +412.54501102813947 +-197.22866673222236 +83.70408312600628 +0 +120 +absolute + + + +0.01 +smooth + +8.536126900092516 +47.34982809458946 +412.51592486104767 +-197.24370562823827 +83.73286144564351 +0 +120 +absolute + + + +0.01 +smooth + +8.536126393781377 +47.34982720320889 +412.4871467688134 +-197.2585215810056 +83.76138394388543 +0 +120 +absolute + + + +0.01 +smooth + +8.536125893352162 +47.3498263238875 +412.4586830378799 +-197.27311047026632 +83.78964598970724 +0 +120 +absolute + + + +0.01 +smooth + +8.536125397890522 +47.3498254546377 +412.4304824713484 +-197.28751421892503 +83.81768475437735 +0 +120 +absolute + + + +0.01 +smooth + +8.536124904011105 +47.34982458808604 +412.4023543973049 +-197.30188595930792 +83.8456389791537 +0 +120 +absolute + + + +0.01 +smooth + +8.53612441156172 +47.34982372389566 +412.37429059866395 +-197.31623209228098 +83.87351488830252 +0 +120 +absolute + + + +0.01 +smooth + +8.536123920686302 +47.34982286237447 +412.34629957019473 +-197.33054560996217 +83.90130655953516 +0 +120 +absolute + + + +0.01 +smooth + +8.536123431528775 +47.34982200383037 +412.3183898066667 +-197.3448195044691 +83.92900807056309 +0 +120 +absolute + + + +0.01 +smooth + +8.536122944233076 +47.34982114857129 +412.29056980284844 +-197.3590467679196 +83.95661349909757 +0 +120 +absolute + + + +0.01 +smooth + +8.536122458943133 +47.349820296905136 +412.2628480535096 +-197.37322039243145 +83.98411692285009 +0 +120 +absolute + + + +0.01 +smooth + +8.536121975802876 +47.34981944913982 +412.235233053419 +-197.38733337012246 +84.011512419532 +0 +120 +absolute + + + +0.01 +smooth + +8.536121494956237 +47.34981860558323 +412.207733297346 +-197.4013786931103 +84.03879406685468 +0 +120 +absolute + + + +0.01 +smooth + +8.536121016547153 +47.34981776654332 +412.18035728005987 +-197.4153493535129 +84.06595594252958 +0 +120 +absolute + + + +0.01 +smooth + +8.536120540719544 +47.34981693232797 +412.1531134963296 +-197.42923834344788 +84.09299212426801 +0 +120 +absolute + + + +0.01 +smooth + +8.536120067617343 +47.34981610324506 +412.1260104409241 +-197.4430386550331 +84.11989668978133 +0 +120 +absolute + + + +0.01 +smooth + +8.536119597384491 +47.34981527960256 +412.09905660861307 +-197.45674328038635 +84.146663716781 +0 +120 +absolute + + + +0.01 +smooth + +8.536119130164915 +47.34981446170837 +412.07226049416545 +-197.47034521162544 +84.17328728297844 +0 +120 +absolute + + + +0.01 +smooth + +8.536118666102539 +47.349813649870356 +412.0456305923501 +-197.48383744086794 +84.19976146608492 +0 +120 +absolute + + + +0.01 +smooth + +8.536118205341298 +47.34981284439648 +412.01917539793664 +-197.49721296023188 +84.2260803438119 +0 +120 +absolute + + + +0.01 +smooth + +8.536117748025125 +47.34981204559462 +411.99290340569394 +-197.5104647618349 +84.25223799387076 +0 +120 +absolute + + + +0.01 +smooth + +8.53611729429795 +47.3498112537727 +411.96682311039126 +-197.5235858377948 +84.27822849397286 +0 +120 +absolute + + + +0.01 +smooth + +8.536116844303702 +47.34981046923861 +411.94094300679774 +-197.53656918022932 +84.30404592182963 +0 +120 +absolute + + + +0.01 +smooth + +8.536116398186318 +47.3498096923003 +411.9152715896824 +-197.54940778125632 +84.32968435515242 +0 +120 +absolute + + + +0.01 +smooth + +8.536115956089722 +47.34980892326565 +411.8898173538148 +-197.56209463299354 +84.35513787165264 +0 +120 +absolute + + + +0.01 +smooth + +8.536115518157844 +47.349808162442564 +411.86458879396366 +-197.57462272755868 +84.38040054904164 +0 +120 +absolute + + + +0.01 +smooth + +8.536115084534622 +47.349807410138965 +411.8395944048983 +-197.58698505706963 +84.40546646503084 +0 +120 +absolute + + + +0.01 +smooth + +8.536114655363983 +47.34980666666277 +411.814842681388 +-197.59917461364412 +84.43032969733163 +0 +120 +absolute + + + +0.01 +smooth + +8.536114230789858 +47.349805932321885 +411.7903421182017 +-197.61118438939988 +84.45498432365538 +0 +120 +absolute + + + +0.01 +smooth + +8.536113810956179 +47.34980520742422 +411.7661012101088 +-197.62300737645475 +84.47942442171347 +0 +120 +absolute + + + +0.01 +smooth + +8.536113396006877 +47.34980449227768 +411.7421284518782 +-197.63463656692647 +84.5036440692173 +0 +120 +absolute + + + +0.01 +smooth + +8.536112986085882 +47.349803787190176 +411.7184323382793 +-197.64606495293285 +84.52763734387827 +0 +120 +absolute + + + +0.01 +smooth + +8.536112581337125 +47.349803092469614 +411.69502136408113 +-197.65728552659166 +84.55139832340774 +0 +120 +absolute + + + +0.01 +smooth + +8.53611218190454 +47.34980240842391 +411.6719040240529 +-197.66829128002064 +84.5749210855171 +0 +120 +absolute + + + +0.01 +smooth + +8.536111787932054 +47.349801735360984 +411.64908881296367 +-197.67907520533754 +84.59819970791776 +0 +120 +absolute + + + +0.01 +smooth + +8.536111399563598 +47.349801073588736 +411.6265842255827 +-197.68963029466022 +84.62122826832106 +0 +120 +absolute + + + +0.01 +smooth + +8.536111016943106 +47.349800423415076 +411.6043987566792 +-197.69994954010645 +84.64400084443844 +0 +120 +absolute + + + +0.01 +smooth + +8.536110640214508 +47.34979978514791 +411.5825409010222 +-197.71002593379393 +84.66651151398125 +0 +120 +absolute + + + +0.01 +smooth + +8.536110269521735 +47.349799159095156 +411.5610191533808 +-197.7198524678405 +84.68875435466089 +0 +120 +absolute + + + +0.01 +smooth + +8.536109905008715 +47.349798545564724 +411.5398420085245 +-197.72942213436386 +84.71072344418876 +0 +120 +absolute + + + +0.01 +smooth + +8.536109546819382 +47.34979794486452 +411.51901796122206 +-197.73872792548192 +84.73241286027621 +0 +120 +absolute + + + +0.01 +smooth + +8.53610919509767 +47.34979735730246 +411.49855550624284 +-197.74776283331232 +84.75381668063467 +0 +120 +absolute + + + +0.01 +smooth + +8.536108849987503 +47.34979678318645 +411.478463138356 +-197.75651984997288 +84.7749289829755 +0 +120 +absolute + + + +0.01 +smooth + +8.536108511632818 +47.34979622282439 +411.45874935233064 +-197.76499196758144 +84.7957438450101 +0 +120 +absolute + + + +0.01 +smooth + +8.536108180177541 +47.3497956765242 +411.439422642936 +-197.7731721782557 +84.81625534444981 +0 +120 +absolute + + + +0.01 +smooth + +8.536107855765607 +47.3497951445938 +411.4204915049412 +-197.78105347411343 +84.83645755900608 +0 +120 +absolute + + + +0.01 +smooth + +8.536107538540945 +47.34979462734109 +411.4019644331153 +-197.78862884727246 +84.85634456639026 +0 +120 +absolute + + + +0.01 +smooth + +8.536107226749346 +47.349794120439704 +411.38373790157664 +-197.79598198413234 +84.87598279808503 +0 +120 +absolute + + + +0.01 +smooth + +8.536106915081167 +47.349793610939486 +411.3654989849644 +-197.80336699945514 +84.89557449891859 +0 +120 +absolute + + + +0.01 +smooth + +8.536106603428134 +47.349793098648554 +411.34724216956073 +-197.8107900554007 +84.91512394577676 +0 +120 +absolute + + + +0.01 +smooth + +8.536106292032082 +47.34979258423158 +411.32898261687046 +-197.81824060287704 +84.9346220790166 +0 +120 +absolute + + + +0.01 +smooth + +8.536105981134849 +47.34979206835325 +411.3107354883985 +-197.82570809279252 +84.95405983899542 +0 +120 +absolute + + + +0.01 +smooth + +8.536105670978262 +47.34979155167822 +411.29251594564954 +-197.83318197605516 +84.9734281660703 +0 +120 +absolute + + + +0.01 +smooth + +8.536105361804166 +47.349791034871195 +411.2743391501286 +-197.84065170357346 +84.99271800059856 +0 +120 +absolute + + + +0.01 +smooth + +8.536105053854396 +47.34979051859684 +411.25622026334037 +-197.8481067262554 +85.0119202829373 +0 +120 +absolute + + + +0.01 +smooth + +8.53610474737078 +47.34979000351984 +411.23817444678974 +-197.85553649500926 +85.03102595344376 +0 +120 +absolute + + + +0.01 +smooth + +8.536104442595159 +47.34978949030485 +411.22021686198167 +-197.86293046074326 +85.05002595247508 +0 +120 +absolute + + + +0.01 +smooth + +8.536104139769366 +47.34978897961656 +411.2023626704208 +-197.87027807436561 +85.06891122038853 +0 +120 +absolute + + + +0.01 +smooth + +8.536103839135237 +47.34978847211965 +411.18462703361195 +-197.87756878678456 +85.08767269754124 +0 +120 +absolute + + + +0.01 +smooth + +8.536103540934604 +47.34978796847879 +411.1670251130601 +-197.88479204890817 +85.10630132429046 +0 +120 +absolute + + + +0.01 +smooth + +8.536103245409306 +47.34978746935865 +411.1495720702699 +-197.89193731164474 +85.1247880409933 +0 +120 +absolute + + + +0.01 +smooth + +8.53610295280118 +47.349786975423925 +411.1322830667465 +-197.89899402590257 +85.14312378800702 +0 +120 +absolute + + + +0.01 +smooth + +8.536102663352052 +47.34978648733926 +411.1151732639943 +-197.9059516425896 +85.16129950568876 +0 +120 +absolute + + + +0.01 +smooth + +8.536102377303767 +47.34978600576937 +411.09825782351845 +-197.91279961261432 +85.17930613439577 +0 +120 +absolute + + + +0.01 +smooth + +8.53610209489816 +47.34978553137891 +411.0815519068238 +-197.91952738688488 +85.19713461448526 +0 +120 +absolute + + + +0.01 +smooth + +8.536101816377059 +47.34978506483255 +411.06507067541503 +-197.92612441630936 +85.21477588631434 +0 +120 +absolute + + + +0.01 +smooth + +8.5361015419823 +47.34978460679496 +411.0488292907968 +-197.932580151796 +85.23222089024023 +0 +120 +absolute + + + +0.01 +smooth + +8.536101271955726 +47.34978415793087 +411.0328429144744 +-197.93888404425317 +85.24946056662017 +0 +120 +absolute + + + +0.01 +smooth + +8.536101006539166 +47.34978371890489 +411.0171267079524 +-197.94502554458887 +85.2664858558113 +0 +120 +absolute + + + +0.01 +smooth + +8.536100745974457 +47.34978329038172 +411.0016958327356 +-197.95099410371145 +85.28328769817085 +0 +120 +absolute + + + +0.01 +smooth + +8.536100490503433 +47.34978287302606 +410.9865654503289 +-197.95677917252905 +85.299857034056 +0 +120 +absolute + + + +0.01 +smooth + +8.536100240367931 +47.34978246750256 +410.9717507222371 +-197.96237020194985 +85.31618480382393 +0 +120 +absolute + + + +0.01 +smooth + +8.536099995809783 +47.3497820744759 +410.95726680996506 +-197.96775664288216 +85.33226194783185 +0 +120 +absolute + + + +0.01 +smooth + +8.53609975707083 +47.349781694610755 +410.9431288750177 +-197.97292794623414 +85.34807940643694 +0 +120 +absolute + + + +0.01 +smooth + +8.536099524392899 +47.34978132857181 +410.9293520788996 +-197.97787356291397 +85.3636281199964 +0 +120 +absolute + + + +0.01 +smooth + +8.536099298017833 +47.34978097702373 +410.9159515831159 +-197.98258294382987 +85.37889902886744 +0 +120 +absolute + + + +0.01 +smooth + +8.536099078187464 +47.3497806406312 +410.90294254917126 +-197.98704553989 +85.39388307340721 +0 +120 +absolute + + + +0.01 +smooth + +8.536098865143625 +47.3497803200589 +410.8903401385706 +-197.9912508020027 +85.40857119397296 +0 +120 +absolute + + + +0.01 +smooth + +8.536098659128156 +47.3497800159715 +410.87815951281857 +-197.99518818107606 +85.42295433092181 +0 +120 +absolute + + + +0.01 +smooth + +8.536098460382886 +47.34977972903367 +410.8664158334202 +-197.99884712801833 +85.43702342461103 +0 +120 +absolute + + + +0.01 +smooth + +8.536098269149658 +47.349779459910096 +410.8551242618802 +-198.00221709373773 +85.45076941539776 +0 +120 +absolute + + + +0.01 +smooth + +8.5360980856703 +47.34977920926545 +410.84429995970345 +-198.00528752914244 +85.46418324363921 +0 +120 +absolute + + + +0.01 +smooth + +8.536097910186651 +47.34977897776441 +410.83395808839487 +-198.00804788514068 +85.47725584969258 +0 +120 +absolute + + + +0.01 +smooth + +8.536097742940546 +47.34977876607165 +410.82411380945916 +-198.01048761264065 +85.48997817391506 +0 +120 +absolute + + + +0.01 +smooth + +8.53609758417382 +47.349778574851854 +410.8147822844012 +-198.01259616255055 +85.50234115666385 +0 +120 +absolute + + + +0.01 +smooth + +8.536097434128305 +47.349778404769694 +410.8059786747258 +-198.01436298577863 +85.51433573829611 +0 +120 +absolute + + + +0.01 +smooth + +8.536097293045842 +47.349778256489834 +410.7977181419379 +-198.01577753323306 +85.52595285916907 +0 +120 +absolute + + + +0.01 +smooth + +8.53609716116826 +47.349778130676974 +410.7900158475422 +-198.01682925582207 +85.53718345963989 +0 +120 +absolute + + + +0.01 +smooth + +8.536097038737399 +47.34977802799577 +410.78288695304354 +-198.0175076044538 +85.5480184800658 +0 +120 +absolute + + + +0.01 +smooth + +8.536096925995095 +47.3497779491109 +410.7763466199468 +-198.0178020300366 +85.55844886080398 +0 +120 +absolute + + + +0.01 +smooth + +8.536096820487538 +47.349777888010365 +410.7702464596911 +-198.0177872654936 +85.56860562310878 +0 +120 +absolute + + + +0.01 +smooth + +8.536096715791544 +47.34977782870739 +410.7641967991957 +-198.0176674545655 +85.57881916462651 +0 +120 +absolute + + + +0.01 +smooth + +8.536096611702684 +47.34977777048371 +410.7581848455739 +-198.0174535941445 +85.58909024628328 +0 +120 +absolute + + + +0.01 +smooth + +8.536096508314506 +47.3497777133562 +410.7522158751991 +-198.01714733239817 +85.59940400399833 +0 +120 +absolute + + + +0.01 +smooth + +8.536096405720551 +47.34977765734167 +410.7462951644437 +-198.0167503174939 +85.60974557369087 +0 +120 +absolute + + + +0.01 +smooth + +8.53609630401437 +47.34977760245699 +410.74042798968117 +-198.0162641975992 +85.62010009128007 +0 +120 +absolute + + + +0.01 +smooth + +8.536096203289505 +47.349777548719 +410.7346196272841 +-198.01569062088168 +85.63045269268513 +0 +120 +absolute + + + +0.01 +smooth + +8.536096103639503 +47.34977749614455 +410.72887535362554 +-198.01503123550881 +85.64078851382519 +0 +120 +absolute + + + +0.01 +smooth + +8.536096005157912 +47.34977744475048 +410.72320044507853 +-198.01428768964814 +85.65109269061952 +0 +120 +absolute + + + +0.01 +smooth + +8.536095907938273 +47.349777394553655 +410.717600178016 +-198.01346163146712 +85.66135035898726 +0 +120 +absolute + + + +0.01 +smooth + +8.536095812074132 +47.349777345570885 +410.7120798288108 +-198.01255470913324 +85.6715466548476 +0 +120 +absolute + + + +0.01 +smooth + +8.53609571765904 +47.349777297819074 +410.7066446738361 +-198.01156857081418 +85.68166671411977 +0 +120 +absolute + + + +0.01 +smooth + +8.53609562478654 +47.34977725131504 +410.7012999894648 +-198.01050486467736 +85.69169567272296 +0 +120 +absolute + + + +0.01 +smooth + +8.536095533550176 +47.34977720607562 +410.69605105206955 +-198.00936523889024 +85.70161866657628 +0 +120 +absolute + + + +0.01 +smooth + +8.536095444043491 +47.349777162117675 +410.6909031380236 +-198.0081513416204 +85.711420831599 +0 +120 +absolute + + + +0.01 +smooth + +8.53609535636004 +47.349777119458054 +410.68586152369994 +-198.00686482103532 +85.72108730371028 +0 +120 +absolute + + + +0.01 +smooth + +8.536095270593357 +47.34977707811359 +410.6809314854713 +-198.00550732530257 +85.73060321882933 +0 +120 +absolute + + + +0.01 +smooth + +8.536095186836997 +47.34977703810115 +410.6761182997108 +-198.0040805025896 +85.73995371287533 +0 +120 +absolute + + + +0.01 +smooth + +8.536095105184502 +47.34977699943757 +410.67142724279137 +-198.002586001064 +85.74912392176746 +0 +120 +absolute + + + +0.01 +smooth + +8.53609502572942 +47.34977696213972 +410.6668635910861 +-198.00102546889318 +85.75809898142495 +0 +120 +absolute + + + +0.01 +smooth + +8.536094948565289 +47.34977692622439 +410.66243262096754 +-197.9994005542447 +85.7668640277669 +0 +120 +absolute + + + +0.01 +smooth + +8.536094873785665 +47.3497768917085 +410.65813960880905 +-197.99771290528616 +85.77540419671261 +0 +120 +absolute + + + +0.01 +smooth + +8.536094801484087 +47.34977685860885 +410.6539898309834 +-197.99596417018495 +85.78370462418121 +0 +120 +absolute + + + +0.01 +smooth + +8.536094731754103 +47.34977682694231 +410.64998856386364 +-197.9941559971087 +85.79175044609191 +0 +120 +absolute + + + +0.01 +smooth + +8.536094664689259 +47.34977679672572 +410.6461410838226 +-197.99229003422482 +85.7995267983639 +0 +120 +absolute + + + +0.01 +smooth + +8.536094600383098 +47.34977676797591 +410.64245266723333 +-197.99036792970088 +85.80701881691633 +0 +120 +absolute + + + +0.01 +smooth + +8.536094538929168 +47.34977674070976 +410.6389285904687 +-197.98839133170438 +85.81421163766845 +0 +120 +absolute + + + +0.01 +smooth + +8.536094480421013 +47.3497767149441 +410.6355741299018 +-197.98636188840285 +85.82109039653942 +0 +120 +absolute + + + +0.01 +smooth + +8.536094424952182 +47.34977669069577 +410.6323945619056 +-197.98428124796385 +85.82764022944843 +0 +120 +absolute + + + +0.01 +smooth + +8.536094372616216 +47.34977666798163 +410.6293951628528 +-197.9821510585548 +85.83384627231467 +0 +120 +absolute + + + +0.01 +smooth + +8.536094323506664 +47.349776646818526 +410.6265812091166 +-197.97997296834325 +85.83969366105738 +0 +120 +absolute + + + +0.01 +smooth + +8.536094277717071 +47.34977662722331 +410.62395797706984 +-197.97774862549673 +85.84516753159568 +0 +120 +absolute + + + +0.01 +smooth + +8.536094235340983 +47.349776609212824 +410.6215307430856 +-197.97547967818275 +85.85025301984878 +0 +120 +absolute + + + +0.01 +smooth + +8.536094196471943 +47.34977659280391 +410.6193047835367 +-197.97316777456882 +85.85493526173587 +0 +120 +absolute + + + +0.01 +smooth + +8.5360941612035 +47.349776578013426 +410.6172853747961 +-197.97081456282245 +85.85919939317618 +0 +120 +absolute + + + +0.01 +smooth + +8.5360941296292 +47.34977656485822 +410.61547779323683 +-197.9684216911112 +85.86303055008885 +0 +120 +absolute + + + +0.01 +smooth + +8.536094101842584 +47.34977655335512 +410.6138873152318 +-197.9659908076025 +85.86641386839311 +0 +120 +absolute + + + +0.01 +smooth + +8.536094077937202 +47.349776543520996 +410.612519217154 +-197.96352356046398 +85.86933448400812 +0 +120 +absolute + + + +0.01 +smooth + +8.536094058006597 +47.34977653537268 +410.6113787753763 +-197.96102159786307 +85.87177753285307 +0 +120 +absolute + + + +0.01 +smooth + +8.536094042144317 +47.349776528927045 +410.6104712662718 +-197.9584865679673 +85.87372815084719 +0 +120 +absolute + + + +0.01 +smooth + +8.536094030443907 +47.349776524200905 +410.60980196621335 +-197.9559201189442 +85.87517147390963 +0 +120 +absolute + + + +0.01 +smooth + +8.536094022998912 +47.34977652121114 +410.609376151574 +-197.95332389896123 +85.87609263795959 +0 +120 +absolute + + + +0.01 +smooth + +8.536094019902878 +47.349776519974576 +410.6091990987266 +-197.950699556186 +85.87647677891627 +0 +120 +absolute + + + +0.01 +smooth + +8.536094021992922 +47.34977652767823 +410.6093484808392 +-197.94792426277436 +85.87645806092331 +0 +120 +absolute + + + +0.01 +smooth + +8.536094030748172 +47.349776558751614 +410.6099693320269 +-197.9447480116765 +85.87633776935712 +0 +120 +absolute + + + +0.01 +smooth + +8.536094046036347 +47.34977661296839 +410.61105386659085 +-197.94117400966604 +85.87612650295536 +0 +120 +absolute + + + +0.01 +smooth + +8.536094067676856 +47.34977668964948 +410.6125896560001 +-197.93721330594136 +85.8758256545711 +0 +120 +absolute + + + +0.01 +smooth + +8.53609409548911 +47.349776788115754 +410.61456427172374 +-197.93287694970033 +85.8754366170575 +0 +120 +absolute + + + +0.01 +smooth + +8.53609412929253 +47.349776907688145 +410.61696528523095 +-197.92817599014134 +85.8749607832678 +0 +120 +absolute + + + +0.01 +smooth + +8.536094168906521 +47.34977704768755 +410.61978026799073 +-197.92312147646246 +85.87439954605505 +0 +120 +absolute + + + +0.01 +smooth + +8.536094214150497 +47.34977720743483 +410.6229967914717 +-197.9177244578615 +85.87375429827239 +0 +120 +absolute + + + +0.01 +smooth + +8.536094264843875 +47.34977738625093 +410.6266024271435 +-197.91199598353694 +85.87302643277299 +0 +120 +absolute + + + +0.01 +smooth + +8.536094320806066 +47.34977758345674 +410.6305847464748 +-197.9059471026868 +85.87221734241001 +0 +120 +absolute + + + +0.01 +smooth + +8.536094381856481 +47.349777798373154 +410.63493132093475 +-197.89958886450913 +85.87132842003659 +0 +120 +absolute + + + +0.01 +smooth + +8.536094447814534 +47.34977803032107 +410.6396297219924 +-197.8929323182021 +85.87036105850585 +0 +120 +absolute + + + +0.01 +smooth + +8.536094518499638 +47.34977827862138 +410.6446675211167 +-197.88598851296382 +85.86931665067092 +0 +120 +absolute + + + +0.01 +smooth + +8.53609459373121 +47.34977854259501 +410.65003228977673 +-197.87876849799244 +85.868196589385 +0 +120 +absolute + + + +0.01 +smooth + +8.536094673328652 +47.34977882156283 +410.65571159944136 +-197.8712833224859 +85.86700226750116 +0 +120 +absolute + + + +0.01 +smooth + +8.536094757111389 +47.349779114845774 +410.66169302157994 +-197.86354403564258 +85.8657350778726 +0 +120 +absolute + + + +0.01 +smooth + +8.536094844898832 +47.349779421764744 +410.66796412766155 +-197.85556168666054 +85.86439641335247 +0 +120 +absolute + + + +0.01 +smooth + +8.536094936510386 +47.349779741640596 +410.67451248915484 +-197.84734732473777 +85.86298766679387 +0 +120 +absolute + + + +0.01 +smooth + +8.536095031765466 +47.349780073794236 +410.6813256775289 +-197.8389119990724 +85.86151023104992 +0 +120 +absolute + + + +0.01 +smooth + +8.536095130483492 +47.34978041754662 +410.688391264253 +-197.8302667588627 +85.85996549897388 +0 +120 +absolute + + + +0.01 +smooth + +8.536095232483873 +47.3497807722186 +410.6956968207961 +-197.82142265330666 +85.85835486341881 +0 +120 +absolute + + + +0.01 +smooth + +8.53609533758602 +47.34978113713109 +410.70322991862713 +-197.8123907316025 +85.85667971723784 +0 +120 +absolute + + + +0.01 +smooth + +8.536095445609348 +47.349781511604995 +410.71097812921533 +-197.80318204294824 +85.85494145328414 +0 +120 +absolute + + + +0.01 +smooth + +8.536095556373269 +47.349781894961204 +410.71892902402953 +-197.79380763654208 +85.85314146441085 +0 +120 +absolute + + + +0.01 +smooth + +8.536095669697197 +47.34978228652062 +410.7270701745388 +-197.78427856158206 +85.85128114347111 +0 +120 +absolute + + + +0.01 +smooth + +8.536095785400542 +47.349782685604154 +410.7353891522123 +-197.77460586726636 +85.84936188331808 +0 +120 +absolute + + + +0.01 +smooth + +8.536095903302723 +47.3497830915327 +410.74387352851886 +-197.76480060279306 +85.8473850768049 +0 +120 +absolute + + + +0.01 +smooth + +8.536096023223145 +47.34978350362716 +410.7525108749277 +-197.7548738173603 +85.84535211678468 +0 +120 +absolute + + + +0.01 +smooth + +8.536096144981228 +47.34978392120843 +410.7612887629078 +-197.74483656016625 +85.8432643961106 +0 +120 +absolute + + + +0.01 +smooth + +8.536096268396378 +47.349784343597406 +410.7701947639282 +-197.73469988040893 +85.84112330763578 +0 +120 +absolute + + + +0.01 +smooth + +8.536096393288016 +47.349784770114994 +410.77921644945775 +-197.7244748272865 +85.83893024421339 +0 +120 +absolute + + + +0.01 +smooth + +8.53609651947555 +47.34978520008211 +410.7883413909659 +-197.71417244999708 +85.83668659869656 +0 +120 +absolute + + + +0.01 +smooth + +8.53609664677839 +47.349785632819625 +410.79755715992127 +-197.70380379773883 +85.83439376393842 +0 +120 +absolute + + + +0.01 +smooth + +8.536096775015956 +47.349786067648466 +410.80685132779314 +-197.69337991970986 +85.83205313279213 +0 +120 +absolute + + + +0.01 +smooth + +8.536096904007657 +47.34978650388952 +410.8162114660504 +-197.68291186510822 +85.82966609811083 +0 +120 +absolute + + + +0.01 +smooth + +8.536097033572906 +47.34978694086368 +410.8256251461622 +-197.6724106831321 +85.82723405274766 +0 +120 +absolute + + + +0.01 +smooth + +8.536097163531117 +47.34978737789187 +410.83507993959745 +-197.6618874229796 +85.82475838955577 +0 +120 +absolute + + + +0.01 +smooth + +8.536097293701701 +47.34978781429497 +410.84456341782527 +-197.6513531338488 +85.8222405013883 +0 +120 +absolute + + + +0.01 +smooth + +8.536097423904073 +47.34978824939388 +410.8540631523148 +-197.64081886493787 +85.81968178109838 +0 +120 +absolute + + + +0.01 +smooth + +8.536097553957644 +47.34978868250951 +410.8635667145349 +-197.63029566544492 +85.81708362153918 +0 +120 +absolute + + + +0.01 +smooth + +8.53609768368183 +47.34978911296277 +410.87306167595466 +-197.61979458456804 +85.81444741556382 +0 +120 +absolute + + + +0.01 +smooth + +8.53609781289604 +47.34978954007453 +410.8825356080431 +-197.60932667150539 +85.81177455602545 +0 +120 +absolute + + + +0.01 +smooth + +8.536097941419689 +47.34978996316572 +410.8919760822692 +-197.5989029754551 +85.80906643577721 +0 +120 +absolute + + + +0.01 +smooth + +8.536098071741362 +47.3497903886544 +410.901563688936 +-197.5884214789505 +85.80613769719022 +0 +120 +absolute + + + +0.01 +smooth + +8.536098208316242 +47.34979082838376 +410.9116217680429 +-197.57769373010152 +85.80267302245922 +0 +120 +absolute + + + +0.01 +smooth + +8.53609835104574 +47.34979128223506 +410.9221447580722 +-197.56672184004248 +85.79868140107462 +0 +120 +absolute + + + +0.01 +smooth + +8.536098499748134 +47.349791749869816 +410.93312108976136 +-197.55551142062492 +85.79417768877155 +0 +120 +absolute + + + +0.01 +smooth + +8.5360986542417 +47.349792230949554 +410.94453919384756 +-197.5440680837002 +85.78917674128522 +0 +120 +absolute + + + +0.01 +smooth + +8.536098814344722 +47.349792725135764 +410.9563875010683 +-197.53239744112003 +85.78369341435074 +0 +120 +absolute + + + +0.01 +smooth + +8.536098979875481 +47.34979323209 +410.96865444216115 +-197.52050510473586 +85.77774256370333 +0 +120 +absolute + + + +0.01 +smooth + +8.536099150652257 +47.34979375147375 +410.9813284478631 +-197.5083966863991 +85.77133904507812 +0 +120 +absolute + + + +0.01 +smooth + +8.536099326493328 +47.34979428294856 +410.99439794891197 +-197.49607779796145 +85.7644977142103 +0 +120 +absolute + + + +0.01 +smooth + +8.536099507216973 +47.34979482617592 +411.00785137604464 +-197.48355405127413 +85.75723342683497 +0 +120 +absolute + + + +0.01 +smooth + +8.53609969264148 +47.34979538081739 +411.0216771599991 +-197.47083105818902 +85.7495610386874 +0 +120 +absolute + + + +0.01 +smooth + +8.536099882585122 +47.34979594653444 +411.03586373151217 +-197.45791443055734 +85.74149540550266 +0 +120 +absolute + + + +0.01 +smooth + +8.536100076866177 +47.349796522988626 +411.0503995213214 +-197.44480978023068 +85.73305138301595 +0 +120 +absolute + + + +0.01 +smooth + +8.536100275302928 +47.34979710984143 +411.0652729601643 +-197.4315227190606 +85.72424382696242 +0 +120 +absolute + + + +0.01 +smooth + +8.53610047771366 +47.349797706754416 +411.08047247877823 +-197.41805885889872 +85.7150875930773 +0 +120 +absolute + + + +0.01 +smooth + +8.536100683916647 +47.34979831338905 +411.0959865079003 +-197.40442381159625 +85.70559753709566 +0 +120 +absolute + + + +0.01 +smooth + +8.536100893730174 +47.349798929406894 +411.11180347826826 +-197.39062318900488 +85.69578851475272 +0 +120 +absolute + + + +0.01 +smooth + +8.536101106972515 +47.349799554469456 +411.12791182061926 +-197.37666260297615 +85.6856753817836 +0 +120 +absolute + + + +0.01 +smooth + +8.536101323461956 +47.34980018823824 +411.14429996569083 +-197.36254766536157 +85.67527299392356 +0 +120 +absolute + + + +0.01 +smooth + +8.536101543016771 +47.349800830374775 +411.1609563442202 +-197.34828398801255 +85.66459620690763 +0 +120 +absolute + + + +0.01 +smooth + +8.536101765455248 +47.349801480540584 +411.17786938694485 +-197.33387718278067 +85.65365987647105 +0 +120 +absolute + + + +0.01 +smooth + +8.536101990595663 +47.34980213839718 +411.1950275246022 +-197.31933286151752 +85.64247885834904 +0 +120 +absolute + + + +0.01 +smooth + +8.536102218256296 +47.349802803606096 +411.21241918792947 +-197.30465663607447 +85.63106800827664 +0 +120 +absolute + + + +0.01 +smooth + +8.536102448255427 +47.34980347582881 +411.2300328076642 +-197.28985411830308 +85.6194421819891 +0 +120 +absolute + + + +0.01 +smooth + +8.536102680411336 +47.34980415472687 +411.24785681454364 +-197.27493092005489 +85.60761623522156 +0 +120 +absolute + + + +0.01 +smooth + +8.536102914542303 +47.34980483996178 +411.26587963930524 +-197.25989265318137 +85.59560502370917 +0 +120 +absolute + + + +0.01 +smooth + +8.536103150466609 +47.34980553119509 +411.2840897126863 +-197.24474492953414 +85.5834234031871 +0 +120 +absolute + + + +0.01 +smooth + +8.536103388002534 +47.34980622808829 +411.3024754654243 +-197.2294933609645 +85.57108622939052 +0 +120 +absolute + + + +0.01 +smooth + +8.536103626968359 +47.349806930302904 +411.3210253282566 +-197.21414355932416 +85.5586083580546 +0 +120 +absolute + + + +0.01 +smooth + +8.536103867182362 +47.349807637500454 +411.3397277319206 +-197.19870113646454 +85.54600464491452 +0 +120 +absolute + + + +0.01 +smooth + +8.536104108462824 +47.34980834934245 +411.3585711071537 +-197.18317170423717 +85.5332899457054 +0 +120 +absolute + + + +0.01 +smooth + +8.536104350628028 +47.34980906549042 +411.3775438846931 +-197.16756087449355 +85.52047911616245 +0 +120 +absolute + + + +0.01 +smooth + +8.53610459349625 +47.349809785605885 +411.3966344952764 +-197.15187425908522 +85.50758701202079 +0 +120 +absolute + + + +0.01 +smooth + +8.536104836885773 +47.349810509350355 +411.41583136964084 +-197.13611746986368 +85.49462848901561 +0 +120 +absolute + + + +0.01 +smooth + +8.536105080614874 +47.34981123638535 +411.4351229385238 +-197.12029611868041 +85.48161840288205 +0 +120 +absolute + + + +0.01 +smooth + +8.536105324501836 +47.349811966372386 +411.4544976326628 +-197.10441581738695 +85.46857160935531 +0 +120 +absolute + + + +0.01 +smooth + +8.536105568364938 +47.349812698973 +411.47394388279514 +-197.08848217783483 +85.45550296417053 +0 +120 +absolute + + + +0.01 +smooth + +8.53610581202246 +47.34981343384867 +411.4934501196582 +-197.0725008118755 +85.4424273230629 +0 +120 +absolute + + + +0.01 +smooth + +8.536106055292684 +47.34981417066095 +411.51300477398917 +-197.05647733136058 +85.42935954176755 +0 +120 +absolute + + + +0.01 +smooth + +8.53610629799389 +47.349814909071355 +411.5325962765258 +-197.0404173481414 +85.41631447601966 +0 +120 +absolute + + + +0.01 +smooth + +8.536106539944353 +47.34981564874139 +411.5522130580051 +-197.02432647406965 +85.40330698155442 +0 +120 +absolute + + + +0.01 +smooth + +8.53610678096236 +47.34981638933258 +411.57184354916484 +-197.0082103209968 +85.39035191410696 +0 +120 +absolute + + + +0.01 +smooth + +8.536107020866188 +47.349817130506445 +411.591476180742 +-196.99207450077432 +85.37746412941242 +0 +120 +absolute + + + +0.01 +smooth + +8.536107261390407 +47.34981787605649 +411.61123859396986 +-196.97585563059656 +85.36449116444146 +0 +120 +absolute + + + +0.01 +smooth + +8.536107505181802 +47.349818631731615 +411.63132490234904 +-196.95945788671318 +85.3511993933881 +0 +120 +absolute + + + +0.01 +smooth + +8.536107752143495 +47.34981939735722 +411.6517300377886 +-196.94288449457787 +85.33759375259193 +0 +120 +absolute + + + +0.01 +smooth + +8.536108002155038 +47.34982017270784 +411.67244722153293 +-196.9261395288677 +85.32368123094469 +0 +120 +absolute + + + +0.01 +smooth + +8.536108255095987 +47.34982095755795 +411.6934696748269 +-196.9092270642601 +85.30946881733821 +0 +120 +absolute + + + +0.01 +smooth + +8.536108510845912 +47.34982175168218 +411.7147906189153 +-196.89215117543253 +85.2949635006644 +0 +120 +absolute + + + +0.01 +smooth + +8.536108769284366 +47.349822554854995 +411.73640327504296 +-196.87491593706216 +85.280172269815 +0 +120 +absolute + + + +0.01 +smooth + +8.536109030290913 +47.349823366850984 +411.7583008644546 +-196.8575254238265 +85.26510211368195 +0 +120 +absolute + + + +0.01 +smooth + +8.53610929374511 +47.349824187444646 +411.780476608395 +-196.83998371040272 +85.24976002115703 +0 +120 +absolute + + + +0.01 +smooth + +8.536109559526517 +47.34982501641052 +411.80292372810896 +-196.82229487146822 +85.23415298113208 +0 +120 +absolute + + + +0.01 +smooth + +8.536109827514693 +47.349825853523164 +411.825635444841 +-196.8044629817003 +85.21828798249891 +0 +120 +absolute + + + +0.01 +smooth + +8.536110097589194 +47.3498266985571 +411.8486049798362 +-196.78649211577638 +85.20217201414941 +0 +120 +absolute + + + +0.01 +smooth + +8.53611036962959 +47.34982755128688 +411.87182555433907 +-196.76838634837375 +85.18581206497537 +0 +120 +absolute + + + +0.01 +smooth + +8.536110643515428 +47.34982841148702 +411.89529038959444 +-196.75014975416974 +85.16921512386865 +0 +120 +absolute + + + +0.01 +smooth + +8.536110919126276 +47.34982927893206 +411.91899270684706 +-196.7317864078417 +85.15238817972106 +0 +120 +absolute + + + +0.01 +smooth + +8.536111196341693 +47.34983015339655 +411.9429257273419 +-196.71330038406703 +85.13533822142449 +0 +120 +absolute + + + +0.01 +smooth + +8.536111475041237 +47.349831034655026 +411.96708267232344 +-196.69469575752296 +85.11807223787072 +0 +120 +absolute + + + +0.01 +smooth + +8.536111755104463 +47.349831922482004 +411.9914567630365 +-196.6759766028868 +85.10059721795157 +0 +120 +absolute + + + +0.01 +smooth + +8.53611203641094 +47.349832816652054 +412.01604122072604 +-196.65714699483607 +85.08292015055895 +0 +120 +absolute + + + +0.01 +smooth + +8.536112318840221 +47.349833716939685 +412.0408292666366 +-196.63821100804796 +85.06504802458466 +0 +120 +absolute + + + +0.01 +smooth + +8.536112602271865 +47.34983462311943 +412.06581412201285 +-196.61917271719983 +85.04698782892049 +0 +120 +absolute + + + +0.01 +smooth + +8.536112886585435 +47.34983553496585 +412.09098900809994 +-196.60003619696903 +85.02874655245834 +0 +120 +absolute + + + +0.01 +smooth + +8.53611317166049 +47.34983645225347 +412.11634714614223 +-196.58080552203296 +85.01033118409002 +0 +120 +absolute + + + +0.01 +smooth + +8.53611345737659 +47.34983737475684 +412.1418817573848 +-196.56148476706886 +84.99174871270738 +0 +120 +absolute + + + +0.01 +smooth + +8.536113743613292 +47.34983830225046 +412.1675860630721 +-196.54207800675408 +84.97300612720223 +0 +120 +absolute + + + +0.01 +smooth + +8.53611403025016 +47.34983923450892 +412.19345328444916 +-196.52258931576606 +84.95411041646642 +0 +120 +absolute + + + +0.01 +smooth + +8.53611431716675 +47.34984017130671 +412.2194766427606 +-196.50302276878205 +84.93506856939179 +0 +120 +absolute + + + +0.01 +smooth + +8.53611460424262 +47.34984111241839 +412.2456493592512 +-196.4833824404794 +84.91588757487015 +0 +120 +absolute + + + +0.01 +smooth + +8.536114891357334 +47.34984205761848 +412.2719646551658 +-196.46367240553542 +84.89657442179337 +0 +120 +absolute + + + +0.01 +smooth + +8.53611517839045 +47.34984300668154 +412.29841575174896 +-196.44389673862747 +84.87713609905327 +0 +120 +absolute + + + +0.01 +smooth + +8.536115465221526 +47.3498439593821 +412.32499587024574 +-196.42405951443294 +84.8575795955417 +0 +120 +absolute + + + +0.01 +smooth + +8.536115751730124 +47.349844915494685 +412.3516982319006 +-196.40416480762912 +84.83791190015046 +0 +120 +absolute + + + +0.01 +smooth + +8.536116037795802 +47.349845874793836 +412.3785160579585 +-196.38421669289335 +84.81814000177141 +0 +120 +absolute + + + +0.01 +smooth + +8.53611632329812 +47.3498468370541 +412.40544256966405 +-196.36421924490298 +84.79827088929638 +0 +120 +absolute + + + +0.01 +smooth + +8.53611660811664 +47.34984780204999 +412.43247098826214 +-196.34417653833532 +84.77831155161721 +0 +120 +absolute + + + +0.01 +smooth + +8.536116892130917 +47.34984876955608 +412.45959453499745 +-196.32409264786776 +84.75826897762575 +0 +120 +absolute + + + +0.01 +smooth + +8.536117175220511 +47.34984973934688 +412.4868064311148 +-196.3039716481776 +84.7381501562138 +0 +120 +absolute + + + +0.01 +smooth + +8.536117457264986 +47.349850711196936 +412.51409989785896 +-196.28381761394215 +84.71796207627321 +0 +120 +absolute + + + +0.01 +smooth + +8.536117738143899 +47.349851684880775 +412.54146815647465 +-196.26363461983874 +84.69771172669584 +0 +120 +absolute + + + +0.01 +smooth + +8.53611801773681 +47.34985266017294 +412.56890442820657 +-196.24342674054483 +84.67740609637349 +0 +120 +absolute + + + +0.01 +smooth + +8.536118295923277 +47.349853636847975 +412.59640193429965 +-196.22319805073764 +84.65705217419801 +0 +120 +absolute + + + +0.01 +smooth + +8.53611857258286 +47.3498546146804 +412.6239538959985 +-196.20295262509455 +84.63665694906123 +0 +120 +absolute + + + +0.01 +smooth + +8.536118847595121 +47.34985559344477 +412.6515535345478 +-196.1826945382929 +84.61622740985503 +0 +120 +absolute + + + +0.01 +smooth + +8.536119122373197 +47.34985657587639 +412.6792858147122 +-196.1623745854167 +84.59567323261092 +0 +120 +absolute + + + +0.01 +smooth + +8.536119398659617 +47.34985756537418 +412.7072565484385 +-196.1419317631089 +84.57488194704555 +0 +120 +absolute + + + +0.01 +smooth + +8.536119676341793 +47.34985856177161 +412.73546122781414 +-196.1213693137795 +84.55385808037067 +0 +120 +absolute + + + +0.01 +smooth + +8.536119955302887 +47.34985956489389 +412.76389509163 +-196.10069062714217 +84.53260642844887 +0 +120 +absolute + + + +0.01 +smooth + +8.53612023542607 +47.349860574566286 +412.7925533786771 +-196.07989909291044 +84.51113178714283 +0 +120 +absolute + + + +0.01 +smooth + +8.536120516594504 +47.34986159061402 +412.82143132774655 +-196.05899810079796 +84.48943895231511 +0 +120 +absolute + + + +0.01 +smooth + +8.536120798691353 +47.349862612862346 +412.85052417762915 +-196.03799104051825 +84.46753271982841 +0 +120 +absolute + + + +0.01 +smooth + +8.536121081599788 +47.34986364113652 +412.87982716711605 +-196.016881301785 +84.4454178855454 +0 +120 +absolute + + + +0.01 +smooth + +8.536121365202968 +47.34986467526176 +412.90933553499815 +-195.9956722743117 +84.4230992453286 +0 +120 +absolute + + + +0.01 +smooth + +8.53612164938406 +47.34986571506334 +412.9390445200664 +-195.97436734781203 +84.40058159504076 +0 +120 +absolute + + + +0.01 +smooth + +8.536121934026234 +47.349866760366496 +412.96894936111187 +-195.95296991199956 +84.3778697305445 +0 +120 +absolute + + + +0.01 +smooth + +8.536122219012647 +47.349867810996436 +412.9990452969254 +-195.93148335658788 +84.35496844770239 +0 +120 +absolute + + + +0.01 +smooth + +8.536122504226473 +47.34986886677843 +413.029327566298 +-195.90991107129054 +84.33188254237712 +0 +120 +absolute + + + +0.01 +smooth + +8.53612278955087 +47.34986992753775 +413.0597914080208 +-195.8882564458212 +84.30861681043133 +0 +120 +absolute + + + +0.01 +smooth + +8.536123074869007 +47.349870993099586 +413.0904320608847 +-195.8665228698934 +84.28517604772766 +0 +120 +absolute + + + +0.01 +smooth + +8.536123360064048 +47.349872063289226 +413.1212447636806 +-195.8447137332208 +84.26156505012871 +0 +120 +absolute + + + +0.01 +smooth + +8.53612364501916 +47.34987313793189 +413.1522247551996 +-195.8228324255169 +84.23778861349714 +0 +120 +absolute + + + +0.01 +smooth + +8.536123929617506 +47.34987421685282 +413.18336727423264 +-195.80088233649542 +84.21385153369562 +0 +120 +absolute + + + +0.01 +smooth + +8.536124213742255 +47.34987529987727 +413.21466755957067 +-195.77886685586975 +84.18975860658674 +0 +120 +absolute + + + +0.01 +smooth + +8.536124497276568 +47.34987638683046 +413.24612085000456 +-195.75678937335363 +84.16551462803312 +0 +120 +absolute + + + +0.01 +smooth + +8.53612478010361 +47.34987747753768 +413.27772238432556 +-195.7346532786607 +84.14112439389747 +0 +120 +absolute + + + +0.01 +smooth + +8.53612506210655 +47.34987857182412 +413.3094674013244 +-195.71246196150443 +84.11659270004237 +0 +120 +absolute + + + +0.01 +smooth + +8.53612534316855 +47.34987966951507 +413.3413511397922 +-195.69021881159847 +84.09192434233047 +0 +120 +absolute + + + +0.01 +smooth + +8.53612562317278 +47.349880770435746 +413.3733688385199 +-195.66792721865642 +84.06712411662443 +0 +120 +absolute + + + +0.01 +smooth + +8.5361259020024 +47.3498818744114 +413.4055157362985 +-195.64559057239188 +84.04219681878688 +0 +120 +absolute + + + +0.01 +smooth + +8.536126179540577 +47.34988298126727 +413.43778707191893 +-195.6232122625184 +84.01714724468044 +0 +120 +absolute + + + +0.01 +smooth + +8.536126455670479 +47.34988409082861 +413.47017808417223 +-195.60079567874962 +83.99198019016775 +0 +120 +absolute + + + +0.01 +smooth + +8.536126730275267 +47.349885202920646 +413.5026840118494 +-195.57834421079906 +83.96670045111146 +0 +120 +absolute + + + +0.01 +smooth + +8.536127003238109 +47.34988631736864 +413.5353000937413 +-195.55586124838044 +83.9413128233742 +0 +120 +absolute + + + +0.01 +smooth + +8.536127274442169 +47.349887433997836 +413.568021568639 +-195.53335018120725 +83.9158221028186 +0 +120 +absolute + + + +0.01 +smooth + +8.536127543770615 +47.34988855263346 +413.60084367533346 +-195.5108143989931 +83.8902330853073 +0 +120 +absolute + + + +0.01 +smooth + +8.536127811106608 +47.34988967310076 +413.6337616526157 +-195.48825729145156 +83.86455056670296 +0 +120 +absolute + + + +0.01 +smooth + +8.536128076333316 +47.349890795224994 +413.66677073927656 +-195.46568224829628 +83.83877934286821 +0 +120 +absolute + + + +0.01 +smooth + +8.536128339333905 +47.349891918831396 +413.6998661741072 +-195.44309265924088 +83.81292420966568 +0 +120 +absolute + + + +0.01 +smooth + +8.536128599991535 +47.34989304374521 +413.7330431958986 +-195.4204919139989 +83.78698996295799 +0 +120 +absolute + + + +0.01 +smooth + +8.536128858189379 +47.349894169791675 +413.76629704344157 +-195.39788340228387 +83.76098139860778 +0 +120 +absolute + + + +0.01 +smooth + +8.536129113810599 +47.34989529679605 +413.7996229555272 +-195.37527051380945 +83.73490331247771 +0 +120 +absolute + + + +0.01 +smooth + +8.53612936673836 +47.34989642458355 +413.8330161709465 +-195.35265663828926 +83.70876050043042 +0 +120 +absolute + + + +0.01 +smooth + +8.536129616855824 +47.34989755297944 +413.86647192849034 +-195.3300451654369 +83.68255775832853 +0 +120 +absolute + + + +0.01 +smooth + +8.536129864046163 +47.349898681808966 +413.8999854669498 +-195.3074394849659 +83.65629988203469 +0 +120 +absolute + + + +0.01 +smooth + +8.536130108192536 +47.349899810897355 +413.9335520251159 +-195.28484298658987 +83.62999166741153 +0 +120 +absolute + + + +0.01 +smooth + +8.536130349178112 +47.34990094006987 +413.9671668417793 +-195.26225906002242 +83.60363791032168 +0 +120 +absolute + + + +0.01 +smooth + +8.536130586886056 +47.349902069151746 +414.00082515573143 +-195.23969109497716 +83.5772434066278 +0 +120 +absolute + + + +0.01 +smooth + +8.5361308233864 +47.34990320039961 +414.03459114302643 +-195.21709546348188 +83.55074025605312 +0 +120 +absolute + + + +0.01 +smooth + +8.53613106071973 +47.349904336086745 +414.06852971054076 +-195.1944283115959 +83.52405992080728 +0 +120 +absolute + + + +0.01 +smooth + +8.53613129872505 +47.34990547606334 +414.10263719329885 +-195.1716926900797 +83.4972062404825 +0 +120 +absolute + + + +0.01 +smooth + +8.53613153724135 +47.34990662017964 +414.1369099263251 +-195.1488916496941 +83.4701830546711 +0 +120 +absolute + + + +0.01 +smooth + +8.53613177610763 +47.34990776828581 +414.17134424464376 +-195.12602824119955 +83.44299420296524 +0 +120 +absolute + + + +0.01 +smooth + +8.53613201516289 +47.349908920232075 +414.2059364832791 +-195.10310551535667 +83.41564352495712 +0 +120 +absolute + + + +0.01 +smooth + +8.536132254246127 +47.34991007586864 +414.24068297725563 +-195.08012652292624 +83.38813486023908 +0 +120 +absolute + + + +0.01 +smooth + +8.536132493196336 +47.349911235045724 +414.2755800615976 +-195.05709431466875 +83.36047204840331 +0 +120 +absolute + + + +0.01 +smooth + +8.536132731852518 +47.349912397613515 +414.31062407132947 +-195.0340119413448 +83.33265892904203 +0 +120 +absolute + + + +0.01 +smooth + +8.53613297005367 +47.34991356342225 +414.3458113414755 +-195.01088245371508 +83.30469934174751 +0 +120 +absolute + + + +0.01 +smooth + +8.536133207638787 +47.3499147323221 +414.38113820705996 +-194.98770890254025 +83.27659712611191 +0 +120 +absolute + + + +0.01 +smooth + +8.536133444446872 +47.34991590416329 +414.41660100310736 +-194.9644943385809 +83.2483561217276 +0 +120 +absolute + + + +0.01 +smooth + +8.536133680316917 +47.34991707879603 +414.45219606464184 +-194.94124181259758 +83.21998016818671 +0 +120 +absolute + + + +0.01 +smooth + +8.536133915087923 +47.34991825607052 +414.48791972668784 +-194.91795437535094 +83.19147310508149 +0 +120 +absolute + + + +0.01 +smooth + +8.536134148598887 +47.34991943583696 +414.5237683242697 +-194.89463507760166 +83.16283877200419 +0 +120 +absolute + + + +0.01 +smooth + +8.536134380688805 +47.34992061794559 +414.5597381924118 +-194.87128697011036 +83.13408100854708 +0 +120 +absolute + + + +0.01 +smooth + +8.53613461119668 +47.34992180224659 +414.5958256661385 +-194.84791310363764 +83.10520365430234 +0 +120 +absolute + + + +0.01 +smooth + +8.536134839961504 +47.349922988590166 +414.6320270804742 +-194.8245165289441 +83.07621054886225 +0 +120 +absolute + + + +0.01 +smooth + +8.536135066822277 +47.34992417682653 +414.66833877044303 +-194.80110029679034 +83.04710553181904 +0 +120 +absolute + + + +0.01 +smooth + +8.536135291617995 +47.3499253668059 +414.70475707106937 +-194.77766745793707 +83.01789244276489 +0 +120 +absolute + + + +0.01 +smooth + +8.53613551418766 +47.34992655837847 +414.7412783173778 +-194.75422106314488 +82.98857512129214 +0 +120 +absolute + + + +0.01 +smooth + +8.536135734370264 +47.349927751394446 +414.7778988443924 +-194.7307641631743 +82.95915740699296 +0 +120 +absolute + + + +0.01 +smooth + +8.536135952004807 +47.34992894570404 +414.81461498713753 +-194.7072998087861 +82.92964313945957 +0 +120 +absolute + + + +0.01 +smooth + +8.536136166930289 +47.34993014115748 +414.85142308063786 +-194.68383105074082 +82.90003615828424 +0 +120 +absolute + + + +0.01 +smooth + +8.536136378985706 +47.34993133760493 +414.8883194599173 +-194.66036093979906 +82.87034030305921 +0 +120 +absolute + + + +0.01 +smooth + +8.536136588010054 +47.34993253489664 +414.92530046000047 +-194.6368925267215 +82.8405594133767 +0 +120 +absolute + + + +0.01 +smooth + +8.536136793842333 +47.349933732882775 +414.96236241591157 +-194.61342886226873 +82.81069732882892 +0 +120 +absolute + + + +0.01 +smooth + +8.536136996321542 +47.34993493141357 +414.999501662675 +-194.58997299720136 +82.78075788900819 +0 +120 +absolute + + + +0.01 +smooth + +8.536137195286674 +47.34993613033924 +415.0367145353151 +-194.56652798228004 +82.75074493350665 +0 +120 +absolute + + + +0.01 +smooth + +8.536137390576728 +47.34993732950997 +415.0739973688562 +-194.54309686826542 +82.72066230191662 +0 +120 +absolute + + + +0.01 +smooth + +8.536137582030706 +47.34993852877598 +415.11134649832275 +-194.51968270591803 +82.69051383383027 +0 +120 +absolute + + + +0.01 +smooth + +8.5361377694876 +47.349939727987476 +415.1487582587389 +-194.4962885459986 +82.66030336883989 +0 +120 +absolute + + + +0.01 +smooth + +8.536137952786415 +47.34994092699466 +415.18622898512916 +-194.4729174392677 +82.63003474653767 +0 +120 +absolute + + + +0.01 +smooth + +8.53613813176614 +47.34994212564774 +415.22375501251776 +-194.4495724364859 +82.59971180651587 +0 +120 +absolute + + + +0.01 +smooth + +8.536138306265778 +47.349943323796936 +415.2613326759292 +-194.42625658841393 +82.56933838836673 +0 +120 +absolute + + + +0.01 +smooth + +8.536138476124327 +47.34994452129243 +415.29895831038755 +-194.40297294581234 +82.53891833168248 +0 +120 +absolute + + + +0.01 +smooth + +8.53613864118078 +47.349945717984454 +415.3366282509174 +-194.37972455944174 +82.50845547605536 +0 +120 +absolute + + + +0.01 +smooth + +8.53613880127414 +47.34994691372321 +415.374338832543 +-194.35651448006286 +82.47795366107759 +0 +120 +absolute + + + +0.01 +smooth + +8.536138956243404 +47.34994810835889 +415.4120863902887 +-194.33334575843617 +82.44741672634144 +0 +120 +absolute + + + +0.01 +smooth + +8.536139105927566 +47.34994930174171 +415.44986725917886 +-194.3102214453224 +82.41684851143913 +0 +120 +absolute + + + +0.01 +smooth + +8.536139250165627 +47.34995049372189 +415.4876777742378 +-194.28714459148213 +82.38625285596288 +0 +120 +absolute + + + +0.01 +smooth + +8.536139388796585 +47.349951684149616 +415.5255142704899 +-194.26411824767598 +82.35563359950494 +0 +120 +absolute + + + +0.01 +smooth + +8.53613952166823 +47.34995287288046 +415.5633732147972 +-194.24114535690728 +82.32499444166669 +0 +120 +absolute + + + +0.01 +smooth + +8.536139652466352 +47.349954062106455 +415.6013087609459 +-194.21818175364024 +82.29427783135867 +0 +120 +absolute + + + +0.01 +smooth + +8.536139784178017 +47.34995525360875 +415.63936517868234 +-194.19519150231463 +82.2634367261426 +0 +120 +absolute + + + +0.01 +smooth + +8.536139916610063 +47.349956447238604 +415.67753920473643 +-194.17217755255604 +82.23247455913658 +0 +120 +absolute + + + +0.01 +smooth + +8.53614004956931 +47.349957642847286 +415.7158275758382 +-194.1491428539896 +82.20139476345867 +0 +120 +absolute + + + +0.01 +smooth + +8.5361401828626 +47.3499588402861 +415.7542270287178 +-194.12609035624075 +82.17020077222682 +0 +120 +absolute + + + +0.01 +smooth + +8.536140316296756 +47.34996003940632 +415.7927343001052 +-194.10302300893483 +82.13889601855915 +0 +120 +absolute + + + +0.01 +smooth + +8.536140449678612 +47.34996124005923 +415.8313461267306 +-194.07994376169728 +82.10748393557364 +0 +120 +absolute + + + +0.01 +smooth + +8.536140582815001 +47.3499624420961 +415.87005924532383 +-194.0568555641534 +82.07596795638831 +0 +120 +absolute + + + +0.01 +smooth + +8.536140715512749 +47.34996364536822 +415.9088703926151 +-194.0337613659286 +82.04435151412123 +0 +120 +absolute + + + +0.01 +smooth + +8.536140847578693 +47.34996484972689 +415.94777630533457 +-194.01066411664817 +82.01263804189045 +0 +120 +absolute + + + +0.01 +smooth + +8.536140978819661 +47.349966055023344 +415.98677372021217 +-193.98756676593757 +81.98083097281395 +0 +120 +absolute + + + +0.01 +smooth + +8.536141109042486 +47.34996726110891 +416.0258593739778 +-193.9644722634221 +81.94893374000974 +0 +120 +absolute + + + +0.01 +smooth + +8.536141238053998 +47.349968467834856 +416.0650300033621 +-193.94138355872718 +81.91694977659594 +0 +120 +absolute + + + +0.01 +smooth + +8.536141365661027 +47.349969675052456 +416.1042823450945 +-193.91830360147807 +81.88488251569053 +0 +120 +absolute + + + +0.01 +smooth + +8.536141491670405 +47.349970882613 +416.14361313590535 +-193.8952353413003 +81.85273539041157 +0 +120 +absolute + + + +0.01 +smooth + +8.536141615888962 +47.34997209036775 +416.18301911252473 +-193.87218172781905 +81.82051183387703 +0 +120 +absolute + + + +0.01 +smooth + +8.536141738123534 +47.34997329816803 +416.22249701168266 +-193.84914571065988 +81.78821527920503 +0 +120 +absolute + + + +0.01 +smooth + +8.536141858180946 +47.3499745058651 +416.2620435701092 +-193.82613023944802 +81.75584915951355 +0 +120 +absolute + + + +0.01 +smooth + +8.536141975868032 +47.349975713310215 +416.3016555245343 +-193.80313826380882 +81.7234169079206 +0 +120 +absolute + + + +0.01 +smooth + +8.536142090991623 +47.34997692035469 +416.34132961168825 +-193.78017273336772 +81.69092195754426 +0 +120 +absolute + + + +0.01 +smooth + +8.536142203358551 +47.34997812684979 +416.3810625683011 +-193.75723659775008 +81.65836774150256 +0 +120 +absolute + + + +0.01 +smooth + +8.536142312775645 +47.34997933264682 +416.4208511311028 +-193.73433280658128 +81.62575769291354 +0 +120 +absolute + + + +0.01 +smooth + +8.536142419049737 +47.34998053759705 +416.46069203682345 +-193.7114643094866 +81.59309524489517 +0 +120 +absolute + + + +0.01 +smooth + +8.536142521987658 +47.34998174155174 +416.50058202219304 +-193.68863405609147 +81.56038383056553 +0 +120 +absolute + + + +0.01 +smooth + +8.536142621396241 +47.34998294436219 +416.5405178239417 +-193.66584499602124 +81.52762688304264 +0 +120 +absolute + + + +0.01 +smooth + +8.536142717082313 +47.34998414587969 +416.5804961787994 +-193.64310007890128 +81.49482783544457 +0 +120 +absolute + + + +0.01 +smooth + +8.53614280885271 +47.349985345955496 +416.6205138234964 +-193.62040225435695 +81.46199012088928 +0 +120 +absolute + + + +0.01 +smooth + +8.53614289651426 +47.34998654444092 +416.6605674947627 +-193.5977544720136 +81.42911717249487 +0 +120 +absolute + + + +0.01 +smooth + +8.536142979873791 +47.34998774118723 +416.70065392932815 +-193.57515968149664 +81.39621242337934 +0 +120 +absolute + + + +0.01 +smooth + +8.536143058738142 +47.349988936045705 +416.7407698639231 +-193.5526208324314 +81.36327930666073 +0 +120 +absolute + + + +0.01 +smooth + +8.536143132914141 +47.34999012886763 +416.78091203527754 +-193.53014087444325 +81.33032125545705 +0 +120 +absolute + + + +0.01 +smooth + +8.536143202208617 +47.349991319504284 +416.8210771801214 +-193.50772275715755 +81.2973417028864 +0 +120 +absolute + + + +0.01 +smooth + +8.536143266428402 +47.349992507806945 +416.86126203518495 +-193.48536943019968 +81.26434408206671 +0 +120 +absolute + + + +0.01 +smooth + +8.536143325380326 +47.34999369362691 +416.90146333719804 +-193.46308384319502 +81.2313318261161 +0 +120 +absolute + + + +0.01 +smooth + +8.536143378871223 +47.34999487681545 +416.9416778228908 +-193.4408689457689 +81.19830836815257 +0 +120 +absolute + + + +0.01 +smooth + +8.536143426707925 +47.349996057223834 +416.9819022289935 +-193.41872768754666 +81.16527714129414 +0 +120 +absolute + + + +0.01 +smooth + +8.536143468697258 +47.34999723470338 +417.0221332922359 +-193.39666301815376 +81.13224157865886 +0 +120 +absolute + + + +0.01 +smooth + +8.536143504646056 +47.349998409105346 +417.06236774934825 +-193.37467788721548 +81.09920511336475 +0 +120 +absolute + + + +0.01 +smooth + +8.536143534361152 +47.34999958028101 +417.10260233706055 +-193.35277524435725 +81.06617117852986 +0 +120 +absolute + + + +0.01 +smooth + +8.536143557649375 +47.350000748081655 +417.1428337921029 +-193.33095803920438 +81.03314320727222 +0 +120 +absolute + + + +0.01 +smooth + +8.536143574317553 +47.35000191235857 +417.1830588512053 +-193.30922922138225 +81.00012463270984 +0 +120 +absolute + + + +0.01 +smooth + +8.536143584172525 +47.350003072963034 +417.2232742510979 +-193.28759174051626 +80.96711888796078 +0 +120 +absolute + + + +0.01 +smooth + +8.53614358704298 +47.350004229769304 +417.2634771977835 +-193.26604808581496 +80.93412891190953 +0 +120 +absolute + + + +0.01 +smooth + +8.536143585365744 +47.35000538533462 +417.30371981115695 +-193.24454690929315 +80.90109980882876 +0 +120 +absolute + + + +0.01 +smooth + +8.536143580933167 +47.35000654135679 +417.34403687755776 +-193.22305400223345 +80.86799493908033 +0 +120 +absolute + + + +0.01 +smooth + +8.536143573800052 +47.350007697671835 +417.38442517824313 +-193.2015724708133 +80.8348176897245 +0 +120 +absolute + + + +0.01 +smooth + +8.536143564021216 +47.35000885411586 +417.4248814944708 +-193.18010542121038 +80.80157144782162 +0 +120 +absolute + + + +0.01 +smooth + +8.536143551651469 +47.35001001052488 +417.46540260749765 +-193.1586559596022 +80.768259600432 +0 +120 +absolute + + + +0.01 +smooth + +8.536143536745623 +47.35001116673505 +417.5059852985815 +-193.1372271921664 +80.73488553461591 +0 +120 +absolute + + + +0.01 +smooth + +8.536143519358493 +47.35001232258237 +417.5466263489794 +-193.1158222250804 +80.70145263743365 +0 +120 +absolute + + + +0.01 +smooth + +8.536143499544885 +47.35001347790293 +417.5873225399486 +-193.09444416452186 +80.66796429594554 +0 +120 +absolute + + + +0.01 +smooth + +8.536143477359612 +47.35001463253278 +417.62807065274677 +-193.07309611666824 +80.63442389721186 +0 +120 +absolute + + + +0.01 +smooth + +8.53614345285749 +47.350015786308035 +417.66886746863116 +-193.05178118769715 +80.60083482829293 +0 +120 +absolute + + + +0.01 +smooth + +8.536143426093325 +47.350016939064716 +417.709709768859 +-193.03050248378614 +80.56720047624904 +0 +120 +absolute + + + +0.01 +smooth + +8.536143397121933 +47.350018090638926 +417.7505943346877 +-193.00926311111277 +80.53352422814051 +0 +120 +absolute + + + +0.01 +smooth + +8.536143365998123 +47.35001924086669 +417.79151794737464 +-192.98806617585453 +80.49980947102763 +0 +120 +absolute + + + +0.01 +smooth + +8.53614333277671 +47.350020389584145 +417.8324773881772 +-192.96691478418907 +80.46605959197072 +0 +120 +absolute + + + +0.01 +smooth + +8.536143297512503 +47.35002153662728 +417.87346943835274 +-192.94581204229388 +80.43227797803004 +0 +120 +absolute + + + +0.01 +smooth + +8.536143260260312 +47.350022681832236 +417.9144908791585 +-192.92476105634657 +80.39846801626594 +0 +120 +absolute + + + +0.01 +smooth + +8.536143221074951 +47.35002382503503 +417.95553849185194 +-192.90376493252464 +80.36463309373869 +0 +120 +absolute + + + +0.01 +smooth + +8.536143180011235 +47.35002496607176 +417.9966090576904 +-192.88282677700562 +80.3307765975086 +0 +120 +absolute + + + +0.01 +smooth + +8.53614313712397 +47.35002610477847 +418.03769935793116 +-192.86194969596716 +80.29690191463597 +0 +120 +absolute + + + +0.01 +smooth + +8.536143092467972 +47.35002724099125 +418.0788061738317 +-192.84113679558672 +80.2630124321811 +0 +120 +absolute + + + +0.01 +smooth + +8.53614304609805 +47.35002837454617 +418.11992628664933 +-192.82039118204193 +80.22911153720432 +0 +120 +absolute + + + +0.01 +smooth + +8.536142998069018 +47.350029505279295 +418.1610564776414 +-192.79971596151032 +80.19520261676591 +0 +120 +absolute + + + +0.01 +smooth + +8.536142948435685 +47.35003063302668 +418.2021935280652 +-192.7791142401694 +80.16128905792615 +0 +120 +absolute + + + +0.01 +smooth + +8.536142897252866 +47.350031757624414 +418.24333421917817 +-192.75858912419682 +80.1273742477454 +0 +120 +absolute + + + +0.01 +smooth + +8.53614284457537 +47.35003287890856 +418.2844753322376 +-192.73814371977002 +80.09346157328392 +0 +120 +absolute + + + +0.01 +smooth + +8.536142790458008 +47.350033996715176 +418.32561364850096 +-192.71778113306667 +80.059554421602 +0 +120 +absolute + + + +0.01 +smooth + +8.536142734955597 +47.350035110880334 +418.3667459492254 +-192.69750447026422 +80.02565617975998 +0 +120 +absolute + + + +0.01 +smooth + +8.536142678122943 +47.35003622124012 +418.40786901566844 +-192.67731683754025 +79.99177023481815 +0 +120 +absolute + + + +0.01 +smooth + +8.53614262001486 +47.350037327630574 +418.4489796290874 +-192.6572213410724 +79.9578999738368 +0 +120 +absolute + + + +0.01 +smooth + +8.536142560686159 +47.35003842988779 +418.4900745707396 +-192.63722108703809 +79.92404878387623 +0 +120 +absolute + + + +0.01 +smooth + +8.536142500191655 +47.35003952784783 +418.53115062188243 +-192.61731918161496 +79.89022005199675 +0 +120 +absolute + + + +0.01 +smooth + +8.536142438586154 +47.35004062134676 +418.5722045637732 +-192.59751873098057 +79.85641716525868 +0 +120 +absolute + + + +0.01 +smooth + +8.536142375924472 +47.35004171022064 +418.6132331776694 +-192.57782284131247 +79.82264351072229 +0 +120 +absolute + + + +0.01 +smooth + +8.53614231226142 +47.35004279430555 +418.6542332448281 +-192.55823461878816 +79.78890247544791 +0 +120 +absolute + + + +0.01 +smooth + +8.53614224765181 +47.350043873437556 +418.695201546507 +-192.5387571695852 +79.75519744649581 +0 +120 +absolute + + + +0.01 +smooth + +8.536142182150453 +47.350044947452744 +418.73613486396323 +-192.51939359988125 +79.72153181092632 +0 +120 +absolute + + + +0.01 +smooth + +8.536142115812158 +47.35004601618715 +418.77702997845415 +-192.50014701585374 +79.68790895579977 +0 +120 +absolute + + + +0.01 +smooth + +8.536142048691744 +47.350047079476866 +418.81788367123727 +-192.4810205236803 +79.65433226817638 +0 +120 +absolute + + + +0.01 +smooth + +8.536141980844015 +47.350048137157955 +418.8586927235698 +-192.46201722953845 +79.62080513511651 +0 +120 +absolute + + + +0.01 +smooth + +8.536141912323787 +47.35004918906648 +418.89945391670915 +-192.44314023960573 +79.58733094368046 +0 +120 +absolute + + + +0.01 +smooth + +8.53614184318587 +47.35005023503852 +418.94016403191256 +-192.42439266005977 +79.55391308092851 +0 +120 +absolute + + + +0.01 +smooth + +8.536141773485078 +47.35005127491014 +418.98081985043757 +-192.405777597078 +79.52055493392099 +0 +120 +absolute + + + +0.01 +smooth + +8.536141703187516 +47.350052308581986 +419.02141922554426 +-192.3872968714126 +79.48725874736456 +0 +120 +absolute + + + +0.01 +smooth + +8.53614162743676 +47.35005333948572 +419.06201868737014 +-192.36888202234212 +79.45396425485353 +0 +120 +absolute + + + +0.01 +smooth + +8.53614154358459 +47.35005436950301 +419.10264926056874 +-192.35049540347288 +79.42063841851582 +0 +120 +absolute + + + +0.01 +smooth + +8.536141451851046 +47.35005539843762 +419.14330752197463 +-192.33214071657022 +79.38728491794984 +0 +120 +absolute + + + +0.01 +smooth + +8.536141352456157 +47.35005642609328 +419.18399004842206 +-192.3138216633993 +79.3539074327539 +0 +120 +absolute + + + +0.01 +smooth + +8.536141245619955 +47.35005745227375 +419.22469341674554 +-192.29554194572543 +79.32050964252642 +0 +120 +absolute + + + +0.01 +smooth + +8.536141131562482 +47.350058476782756 +419.2654142037791 +-192.27730526531374 +79.28709522686574 +0 +120 +absolute + + + +0.01 +smooth + +8.536141010503762 +47.350059499424056 +419.30614898635747 +-192.25911532392965 +79.25366786537025 +0 +120 +absolute + + + +0.01 +smooth + +8.536140882663833 +47.35006052000138 +419.34689434131474 +-192.24097582333832 +79.2202312376383 +0 +120 +absolute + + + +0.01 +smooth + +8.53614074826273 +47.3500615383185 +419.38764684548556 +-192.22289046530508 +79.1867890232683 +0 +120 +absolute + + + +0.01 +smooth + +8.536140607520483 +47.35006255417912 +419.42840307570384 +-192.20486295159506 +79.15334490185859 +0 +120 +absolute + + + +0.01 +smooth + +8.536140460657128 +47.35006356738703 +419.4691596088045 +-192.1868969839737 +79.11990255300752 +0 +120 +absolute + + + +0.01 +smooth + +8.5361403078927 +47.35006457774597 +419.5099130216215 +-192.1689962642061 +79.08646565631351 +0 +120 +absolute + + + +0.01 +smooth + +8.53614014944723 +47.35006558505964 +419.55065989098927 +-192.15116449405758 +79.05303789137488 +0 +120 +absolute + + + +0.01 +smooth + +8.536139985540753 +47.35006658913183 +419.59139679374226 +-192.13340537529336 +79.01962293779006 +0 +120 +absolute + + + +0.01 +smooth + +8.536139816393302 +47.350067589766255 +419.6321203067148 +-192.11572260967873 +78.98622447515736 +0 +120 +absolute + + + +0.01 +smooth + +8.536139642224908 +47.35006858676669 +419.67282700674116 +-192.0981198989789 +78.95284618307518 +0 +120 +absolute + + + +0.01 +smooth + +8.53613946325561 +47.35006957993685 +419.713513470656 +-192.08060094495923 +78.91949174114188 +0 +120 +absolute + + + +0.01 +smooth + +8.536139279705438 +47.350070569080486 +419.7541762752932 +-192.06316944938482 +78.88616482895584 +0 +120 +absolute + + + +0.01 +smooth + +8.536139091794428 +47.35007155400135 +419.7948119974875 +-192.04582911402105 +78.85286912611545 +0 +120 +absolute + + + +0.01 +smooth + +8.53613889974261 +47.3500725345032 +419.8354172140731 +-192.02858364063312 +78.81960831221903 +0 +120 +absolute + + + +0.01 +smooth + +8.536138703770021 +47.35007351038974 +419.8759885018845 +-192.01143673098628 +78.78638606686498 +0 +120 +absolute + + + +0.01 +smooth + +8.536138504096693 +47.350074481464745 +419.9165224377558 +-191.99439208684578 +78.75320606965165 +0 +120 +absolute + + + +0.01 +smooth + +8.536138300942659 +47.35007544753197 +419.95701559852154 +-191.97745340997696 +78.72007200017745 +0 +120 +absolute + + + +0.01 +smooth + +8.536138094527956 +47.35007640839513 +419.9974645610161 +-191.96062440214496 +78.6869875380407 +0 +120 +absolute + + + +0.01 +smooth + +8.53613788507261 +47.35007736385799 +420.0378659020739 +-191.9439087651151 +78.6539563628398 +0 +120 +absolute + + + +0.01 +smooth + +8.536137672796666 +47.35007831372429 +420.07821619852916 +-191.92731020065264 +78.62098215417316 +0 +120 +absolute + + + +0.01 +smooth + +8.53613745792015 +47.35007925779777 +420.1185120272162 +-191.91083241052274 +78.58806859163906 +0 +120 +absolute + + + +0.01 +smooth + +8.536137240663097 +47.35008019588217 +420.15874996496956 +-191.8944790964908 +78.55521935483594 +0 +120 +absolute + + + +0.01 +smooth + +8.536137021245539 +47.350081127781266 +420.1989265886235 +-191.878253960322 +78.52243812336214 +0 +120 +absolute + + + +0.01 +smooth + +8.536136799887514 +47.35008205329876 +420.2390384750123 +-191.86216070378163 +78.48972857681605 +0 +120 +absolute + + + +0.01 +smooth + +8.536136576809051 +47.350082972238425 +420.27908220097055 +-191.84620302863487 +78.45709439479602 +0 +120 +absolute + + + +0.01 +smooth + +8.536136352230187 +47.350083884403986 +420.31905434333237 +-191.83038463664704 +78.4245392569004 +0 +120 +absolute + + + +0.01 +smooth + +8.536136126370952 +47.35008478959921 +420.3589514789322 +-191.81470922958334 +78.39206684272764 +0 +120 +absolute + + + +0.01 +smooth + +8.536135899451384 +47.350085687627825 +420.3987701846045 +-191.79918050920912 +78.35968083187603 +0 +120 +absolute + + + +0.01 +smooth + +8.536135671691513 +47.35008657829357 +420.4385070371835 +-191.78380217728954 +78.32738490394397 +0 +120 +absolute + + + +0.01 +smooth + +8.536135443311377 +47.35008746140022 +420.47815861350364 +-191.76857793558992 +78.29518273852982 +0 +120 +absolute + + + +0.01 +smooth + +8.536135214531004 +47.35008833675148 +420.51772149039914 +-191.75351148587544 +78.26307801523198 +0 +120 +absolute + + + +0.01 +smooth + +8.536134985570431 +47.35008920415113 +420.55719224470465 +-191.73860652991144 +78.23107441364878 +0 +120 +absolute + + + +0.01 +smooth + +8.536134756649691 +47.350090063402895 +420.59656745325424 +-191.72386676946314 +78.19917561337863 +0 +120 +absolute + + + +0.01 +smooth + +8.536134527988818 +47.35009091431052 +420.63584369288236 +-191.70929590629578 +78.16738529401985 +0 +120 +absolute + + + +0.01 +smooth + +8.536134299807845 +47.35009175667775 +420.6750175404234 +-191.69489764217457 +78.13570713517086 +0 +120 +absolute + + + +0.01 +smooth + +8.536134072326803 +47.350092590308336 +420.7140855727118 +-191.68067567886487 +78.10414481643001 +0 +120 +absolute + + + +0.01 +smooth + +8.536133845641627 +47.35009341517034 +420.7530465945863 +-191.66663038116033 +78.07269957999065 +0 +120 +absolute + + + +0.01 +smooth + +8.536133615853156 +47.350094236472266 +420.79197055052066 +-191.6526557313072 +78.04129484677593 +0 +120 +absolute + + + +0.01 +smooth + +8.53613338110747 +47.350095056581466 +420.8308890828553 +-191.63870353044038 +78.00989595186012 +0 +120 +absolute + + + +0.01 +smooth + +8.53613314152579 +47.35009587522834 +420.86979811629675 +-191.6247791492598 +77.9785073068818 +0 +120 +absolute + + + +0.01 +smooth + +8.536132897229336 +47.3500966921433 +420.9086935755525 +-191.61088795846555 +77.94713332347945 +0 +120 +absolute + + + +0.01 +smooth + +8.536132648339342 +47.35009750705683 +420.94757138532987 +-191.59703532875804 +77.91577841329172 +0 +120 +absolute + + + +0.01 +smooth + +8.536132394977026 +47.35009831969936 +420.9864274703357 +-191.58322663083732 +77.88444698795715 +0 +120 +absolute + + + +0.01 +smooth + +8.536132137263605 +47.35009912980129 +421.02525775527727 +-191.56946723540338 +77.85314345911422 +0 +120 +absolute + + + +0.01 +smooth + +8.536131875320311 +47.35009993709309 +421.0640581648618 +-191.5557625131566 +77.82187223840161 +0 +120 +absolute + + + +0.01 +smooth + +8.536131609268367 +47.3501007413052 +421.10282462379644 +-191.542117834797 +77.79063773745777 +0 +120 +absolute + + + +0.01 +smooth + +8.53613133922899 +47.35010154216805 +421.14155305678815 +-191.52853857102482 +77.75944436792133 +0 +120 +absolute + + + +0.01 +smooth + +8.53613106532341 +47.350102339412054 +421.18023938854435 +-191.51503009254012 +77.72829654143078 +0 +120 +absolute + + + +0.01 +smooth + +8.536130787672846 +47.350103132767686 +421.21887954377206 +-191.50159777004305 +77.69719866962471 +0 +120 +absolute + + + +0.01 +smooth + +8.536130506398527 +47.35010392196535 +421.25746944717844 +-191.48824697423385 +77.66615516414168 +0 +120 +absolute + + + +0.01 +smooth + +8.536130221621669 +47.35010470673551 +421.2960050234708 +-191.47498307581264 +77.63517043662027 +0 +120 +absolute + + + +0.01 +smooth + +8.5361299334635 +47.35010548680859 +421.33448219735607 +-191.46181144547955 +77.60424889869897 +0 +120 +absolute + + + +0.01 +smooth + +8.53612964204524 +47.35010626191504 +421.3728968935415 +-191.4487374539347 +77.5733949620164 +0 +120 +absolute + + + +0.01 +smooth + +8.536129347488123 +47.350107031785285 +421.4112450367345 +-191.4357664718784 +77.54261303821109 +0 +120 +absolute + + + +0.01 +smooth + +8.536129049913356 +47.35010779614976 +421.4495225516416 +-191.42290387001054 +77.51190753892159 +0 +120 +absolute + + + +0.01 +smooth + +8.536128749442176 +47.35010855473891 +421.4877253629707 +-191.4101550190315 +77.48128287578646 +0 +120 +absolute + + + +0.01 +smooth + +8.536128446195798 +47.35010930728317 +421.5258493954284 +-191.39752528964135 +77.45074346044426 +0 +120 +absolute + + + +0.01 +smooth + +8.53612814029545 +47.350110053512964 +421.5638905737221 +-191.38502005254017 +77.42029370453355 +0 +120 +absolute + + + +0.01 +smooth + +8.536127831862352 +47.35011079315875 +421.601844822559 +-191.37264467842823 +77.38993801969288 +0 +120 +absolute + + + +0.01 +smooth + +8.53612752101773 +47.35011152595095 +421.63970806664605 +-191.36040453800558 +77.3596808175608 +0 +120 +absolute + + + +0.01 +smooth + +8.536127207882808 +47.35011225162001 +421.67747623069056 +-191.34830500197248 +77.32952650977589 +0 +120 +absolute + + + +0.01 +smooth + +8.536126892578807 +47.350112969896365 +421.7151452393997 +-191.336351441029 +77.29947950797666 +0 +120 +absolute + + + +0.01 +smooth + +8.53612657522695 +47.35011368051046 +421.7527110174805 +-191.32454922587533 +77.26954422380174 +0 +120 +absolute + + + +0.01 +smooth + +8.536126255948465 +47.35011438319271 +421.7901694896403 +-191.3129037272116 +77.23972506888963 +0 +120 +absolute + + + +0.01 +smooth + +8.536125934864572 +47.35011507767358 +421.8275165805862 +-191.30142031573797 +77.21002645487887 +0 +120 +absolute + + + +0.01 +smooth + +8.536125612096493 +47.350115763683476 +421.8647482150252 +-191.2901043621546 +77.18045279340807 +0 +120 +absolute + + + +0.01 +smooth + +8.536125287765454 +47.35011644095286 +421.90186031766456 +-191.27896123716164 +77.15100849611576 +0 +120 +absolute + + + +0.01 +smooth + +8.536124961992677 +47.350117109212164 +421.9388488132115 +-191.26799631145923 +77.1216979746405 +0 +120 +absolute + + + +0.01 +smooth + +8.536124634899386 +47.350117768191815 +421.9757096263732 +-191.25721495574751 +77.09252564062085 +0 +120 +absolute + + + +0.01 +smooth + +8.536124306606805 +47.35011841762227 +422.0124386818567 +-191.24662254072666 +77.06349590569535 +0 +120 +absolute + + + +0.01 +smooth + +8.536123977236157 +47.35011905723394 +422.04903190436914 +-191.2362244370968 +77.03461318150256 +0 +120 +absolute + + + +0.01 +smooth + +8.536123646908665 +47.35011968675728 +422.0854852186178 +-191.22602601555815 +77.00588187968106 +0 +120 +absolute + + + +0.01 +smooth + +8.536123315745552 +47.35012030592273 +422.1217945493098 +-191.2160326468108 +76.97730641186938 +0 +120 +absolute + + + +0.01 +smooth + +8.536122983868042 +47.35012091446072 +422.1579558211523 +-191.2062497015549 +76.94889118970607 +0 +120 +absolute + + + +0.01 +smooth + +8.53612265139736 +47.35012151210168 +422.1939649588524 +-191.19668255049064 +76.92064062482973 +0 +120 +absolute + + + +0.01 +smooth + +8.536122318454726 +47.350122098576065 +422.22981788711724 +-191.1873365643181 +76.89255912887889 +0 +120 +absolute + + + +0.01 +smooth + +8.536121985161365 +47.350122673614294 +422.2655105306541 +-191.1782171137375 +76.8646511134921 +0 +120 +absolute + + + +0.01 +smooth + +8.536121651638501 +47.350123236946814 +422.30103881417006 +-191.16932956944902 +76.83692099030792 +0 +120 +absolute + + + +0.01 +smooth + +8.536121318007359 +47.35012378830405 +422.33639866237223 +-191.16067930215272 +76.80937317096489 +0 +120 +absolute + + + +0.01 +smooth + +8.536120984281194 +47.350124327877396 +422.3715907698763 +-191.15226114400312 +76.7820067933907 +0 +120 +absolute + + + +0.01 +smooth + +8.536120648197794 +47.35012486547319 +422.4067156104174 +-191.14385052566033 +76.75471063802351 +0 +120 +absolute + + + +0.01 +smooth + +8.536120308878045 +47.35012540474544 +422.44181068430584 +-191.13536461063046 +76.7274430118326 +0 +120 +absolute + + + +0.01 +smooth + +8.536119966411553 +47.35012594517652 +422.4768704226516 +-191.12681609619787 +76.70020982574346 +0 +120 +absolute + + + +0.01 +smooth + +8.536119620887913 +47.350126486248826 +422.51188925656453 +-191.11821767964713 +76.67301699068149 +0 +120 +absolute + + + +0.01 +smooth + +8.53611927239673 +47.350127027444735 +422.54686161715443 +-191.1095820582626 +76.64587041757225 +0 +120 +absolute + + + +0.01 +smooth + +8.536118921027603 +47.35012756824657 +422.58178193553107 +-191.10092192932862 +76.61877601734116 +0 +120 +absolute + + + +0.01 +smooth + +8.536118566870128 +47.35012810813676 +422.6166446428043 +-191.09224999012972 +76.5917397009137 +0 +120 +absolute + + + +0.01 +smooth + +8.53611821001391 +47.35012864659765 +422.65144417008406 +-191.0835789379504 +76.56476737921537 +0 +120 +absolute + + + +0.01 +smooth + +8.536117850548548 +47.35012918311161 +422.6861749484798 +-191.0749214700749 +76.53786496317159 +0 +120 +absolute + + + +0.01 +smooth + +8.536117488563644 +47.350129717161025 +422.7208314091019 +-191.06629028378785 +76.5110383637079 +0 +120 +absolute + + + +0.01 +smooth + +8.536117124148799 +47.35013024822829 +422.75540798305997 +-191.05769807637364 +76.48429349174974 +0 +120 +absolute + + + +0.01 +smooth + +8.536116757393607 +47.35013077579573 +422.7898991014637 +-191.04915754511651 +76.45763625822255 +0 +120 +absolute + + + +0.01 +smooth + +8.536116388387676 +47.350131299345755 +422.82429919542295 +-191.0406813873012 +76.43107257405184 +0 +120 +absolute + + + +0.01 +smooth + +8.536116017220605 +47.35013181836072 +422.85860269604785 +-191.03228230021188 +76.40460835016307 +0 +120 +absolute + + + +0.01 +smooth + +8.53611564398199 +47.350132332323014 +422.89280403444775 +-191.02397298113314 +76.37824949748173 +0 +120 +absolute + + + +0.01 +smooth + +8.536115268761435 +47.350132840715 +422.926897641733 +-191.01576612734937 +76.35200192693328 +0 +120 +absolute + + + +0.01 +smooth + +8.53611489164854 +47.350133343019046 +422.96087794901297 +-191.00767443614495 +76.32587154944316 +0 +120 +absolute + + + +0.01 +smooth + +8.536114512732906 +47.35013383871754 +422.99473938739783 +-190.9997106048044 +76.2998642759369 +0 +120 +absolute + + + +0.01 +smooth + +8.536114132104132 +47.35013432729285 +423.02847638799716 +-190.9918873306121 +76.27398601733995 +0 +120 +absolute + + + +0.01 +smooth + +8.536113749851818 +47.35013480822735 +423.062083381921 +-190.9842173108525 +76.24824268457778 +0 +120 +absolute + + + +0.01 +smooth + +8.536113366065567 +47.35013528100341 +423.09555480027905 +-190.97671324280998 +76.22264018857587 +0 +120 +absolute + + + +0.01 +smooth + +8.536112980834979 +47.35013574510341 +423.12888507418126 +-190.9693878237691 +76.19718444025969 +0 +120 +absolute + + + +0.01 +smooth + +8.536112594249651 +47.35013620000971 +423.16206863473724 +-190.96225375101417 +76.17188135055468 +0 +120 +absolute + + + +0.01 +smooth + +8.536112206399185 +47.350136645204685 +423.19509991305705 +-190.95532372182964 +76.14673683038636 +0 +120 +absolute + + + +0.01 +smooth + +8.536111817373186 +47.35013708017072 +423.22797334025034 +-190.9486104335 +76.12175679068017 +0 +120 +absolute + + + +0.01 +smooth + +8.536111427261247 +47.35013750439019 +423.2606833474271 +-190.94212658330963 +76.0969471423616 +0 +120 +absolute + + + +0.01 +smooth + +8.536111036152972 +47.35013791734545 +423.2932243656971 +-190.93588486854298 +76.07231379635613 +0 +120 +absolute + + + +0.01 +smooth + +8.536110644137963 +47.3501383185189 +423.3255908261701 +-190.9298979864845 +76.0478626635892 +0 +120 +absolute + + + +0.01 +smooth + +8.536110251305818 +47.35013870739289 +423.357777159956 +-190.92417863441858 +76.02359965498631 +0 +120 +absolute + + + +0.01 +smooth + +8.536109857746137 +47.350139083449804 +423.3897777981647 +-190.9187395096297 +75.99953068147292 +0 +120 +absolute + + + +0.01 +smooth + +8.536109463548524 +47.35013944617201 +423.4215871719059 +-190.91359330940224 +75.97566165397451 +0 +120 +absolute + + + +0.01 +smooth + +8.536109068802574 +47.3501397950419 +423.45319971228946 +-190.90875273102068 +75.95199848341656 +0 +120 +absolute + + + +0.01 +smooth + +8.536108673597893 +47.35014012954181 +423.4846098504253 +-190.90423047176944 +75.92854708072451 +0 +120 +absolute + + + +0.01 +smooth + +8.536108278024077 +47.35014044915415 +423.5158120174232 +-190.90003922893297 +75.90531335682388 +0 +120 +absolute + + + +0.01 +smooth + +8.536107882170729 +47.35014075336127 +423.54680064439293 +-190.89619169979562 +75.8823032226401 +0 +120 +absolute + + + +0.01 +smooth + +8.536107486127449 +47.35014104164557 +423.57757016244443 +-190.89270058164192 +75.85952258909867 +0 +120 +absolute + + + +0.01 +smooth + +8.536107089983837 +47.350141313489395 +423.6081150026874 +-190.88957857175626 +75.83697736712504 +0 +120 +absolute + + + +0.01 +smooth + +8.536106693829494 +47.35014156837512 +423.63842959623173 +-190.8868383674231 +75.81467346764471 +0 +120 +absolute + + + +0.01 +smooth + +8.536106297754019 +47.35014180578514 +423.66850837418735 +-190.88449266592687 +75.79261680158314 +0 +120 +absolute + + + +0.01 +smooth + +8.536105901847014 +47.35014202520183 +423.69834576766385 +-190.88255416455192 +75.77081327986578 +0 +120 +absolute + + + +0.01 +smooth + +8.536105506198078 +47.35014222610753 +423.72793620777134 +-190.88103556058277 +75.74926881341811 +0 +120 +absolute + + + +0.01 +smooth + +8.536105110896813 +47.35014240798465 +423.7572741256195 +-190.87994955130387 +75.72798931316566 +0 +120 +absolute + + + +0.01 +smooth + +8.536104715922427 +47.3501425711607 +423.78636492224877 +-190.8792888382639 +75.70696842074041 +0 +120 +absolute + + + +0.01 +smooth + +8.536104319619076 +47.35014272856566 +423.815375206283 +-190.8787470767488 +75.68601945467682 +0 +120 +absolute + + + +0.01 +smooth + +8.536103921463365 +47.350142884650886 +423.84435618791383 +-190.87821651196782 +75.66508475349411 +0 +120 +absolute + + + +0.01 +smooth + +8.53610352153187 +47.35014303929908 +423.8732990901619 +-190.8776972244327 +75.64417374217967 +0 +120 +absolute + + + +0.01 +smooth + +8.536103119901156 +47.35014319239281 +423.902195136047 +-190.8771892946547 +75.6232958457208 +0 +120 +absolute + + + +0.01 +smooth + +8.536102716647793 +47.35014334381476 +423.9310355485899 +-190.8766928031455 +75.6024604891049 +0 +120 +absolute + + + +0.01 +smooth + +8.53610231184836 +47.350143493447526 +423.95981155081074 +-190.8762078304167 +75.58167709731929 +0 +120 +absolute + + + +0.01 +smooth + +8.536101905579422 +47.35014364117376 +423.98851436572977 +-190.87573445697967 +75.56095509535135 +0 +120 +absolute + + + +0.01 +smooth + +8.536101497917548 +47.3501437868761 +424.01713521636754 +-190.8752727633461 +75.54030390818842 +0 +120 +absolute + + + +0.01 +smooth + +8.53610108893931 +47.350143930437184 +424.04566532574415 +-190.87482283002743 +75.51973296081782 +0 +120 +absolute + + + +0.01 +smooth + +8.536100678721283 +47.35014407173963 +424.07409591688014 +-190.87438473753522 +75.499251678227 +0 +120 +absolute + + + +0.01 +smooth + +8.536100267340034 +47.35014421066606 +424.10241821279567 +-190.87395856638102 +75.47886948540324 +0 +120 +absolute + + + +0.01 +smooth + +8.536099854872132 +47.35014434709913 +424.1306234365111 +-190.87354439707642 +75.4585958073339 +0 +120 +absolute + + + +0.01 +smooth + +8.536099441394157 +47.350144480921486 +424.1587028110469 +-190.87314231013292 +75.43844006900635 +0 +120 +absolute + + + +0.01 +smooth + +8.536099026982669 +47.35014461201573 +424.18664755942314 +-190.872752386062 +75.41841169540794 +0 +120 +absolute + + + +0.01 +smooth + +8.536098611714245 +47.35014474026451 +424.21444890466034 +-190.87237470537525 +75.39852011152603 +0 +120 +absolute + + + +0.01 +smooth + +8.536098195665453 +47.350144865550455 +424.24209806977876 +-190.87200934858424 +75.37877474234799 +0 +120 +absolute + + + +0.01 +smooth + +8.536097778912866 +47.350144987756195 +424.2695862777986 +-190.8716563962004 +75.35918501286109 +0 +120 +absolute + + + +0.01 +smooth + +8.536097361533054 +47.35014510676437 +424.2969047517405 +-190.87131592873538 +75.33976034805278 +0 +120 +absolute + + + +0.01 +smooth + +8.53609694360259 +47.350145222457634 +424.3240447146246 +-190.8709880267007 +75.32051017291042 +0 +120 +absolute + + + +0.01 +smooth + +8.53609652519804 +47.35014533471859 +424.35099738947116 +-190.87067277060785 +75.30144391242128 +0 +120 +absolute + + + +0.01 +smooth + +8.53609610639598 +47.35014544342988 +424.37775399930064 +-190.8703702409684 +75.28257099157277 +0 +120 +absolute + + + +0.01 +smooth + +8.536095687272978 +47.350145548474146 +424.40430576713334 +-190.8700805182939 +75.26390083535225 +0 +120 +absolute + + + +0.01 +smooth + +8.536095267905605 +47.350145649734 +424.43064391598955 +-190.86980368309585 +75.24544286874706 +0 +120 +absolute + + + +0.01 +smooth + +8.536094848370434 +47.35014574709211 +424.45675966888956 +-190.8695398158858 +75.22720651674456 +0 +120 +absolute + + + +0.01 +smooth + +8.536094428744033 +47.35014584043108 +424.48264424885383 +-190.86928899717532 +75.2092012043321 +0 +120 +absolute + + + +0.01 +smooth + +8.536094009102975 +47.35014592963356 +424.5082888789025 +-190.86905130747593 +75.19143635649704 +0 +120 +absolute + + + +0.01 +smooth + +8.53609358952383 +47.35014601458217 +424.533684782056 +-190.8688268272992 +75.17392139822671 +0 +120 +absolute + + + +0.01 +smooth + +8.536093170083168 +47.350146095159566 +424.55882318133473 +-190.86861563715655 +75.1566657545085 +0 +120 +absolute + + + +0.01 +smooth + +8.536092750857561 +47.35014617124836 +424.58369529975886 +-190.86841781755965 +75.13967885032974 +0 +120 +absolute + + + +0.01 +smooth + +8.53609233192358 +47.350146242731185 +424.6082923603488 +-190.86823344902 +75.1229701106778 +0 +120 +absolute + + + +0.01 +smooth + +8.536091913357797 +47.3501463094907 +424.63260558612495 +-190.8680626120491 +75.10654896054004 +0 +120 +absolute + + + +0.01 +smooth + +8.53609149523678 +47.35014637140951 +424.6566262001075 +-190.86790538715854 +75.09042482490379 +0 +120 +absolute + + + +0.01 +smooth + +8.536091077637103 +47.35014642837025 +424.6803454253169 +-190.86776185485982 +75.07460712875641 +0 +120 +absolute + + + +0.01 +smooth + +8.536090660635335 +47.350146480255574 +424.70375448477336 +-190.86763209566448 +75.05910529708527 +0 +120 +absolute + + + +0.01 +smooth + +8.536090244308046 +47.3501465269481 +424.72684460149725 +-190.8675161900841 +75.04392875487773 +0 +120 +absolute + + + +0.01 +smooth + +8.536089828731807 +47.35014656833047 +424.74960699850897 +-190.8674142186302 +75.02908692712111 +0 +120 +absolute + + + +0.01 +smooth + +8.536089413983191 +47.350146604285314 +424.77203289882874 +-190.86732626181427 +75.01458923880278 +0 +120 +absolute + + + +0.01 +smooth + +8.53608900013877 +47.350146634695264 +424.7941135254769 +-190.86725240014792 +75.00044511491012 +0 +120 +absolute + + + +0.01 +smooth + +8.53608858727511 +47.350146659442956 +424.8158401014739 +-190.86719271414262 +74.98666398043045 +0 +120 +absolute + + + +0.01 +smooth + +8.536088175468784 +47.35014667841102 +424.83720384984 +-190.86714728430997 +74.97325526035115 +0 +120 +absolute + + + +0.01 +smooth + +8.536087764796365 +47.350146691482095 +424.85819599359536 +-190.8671161911615 +74.96022837965957 +0 +120 +absolute + + + +0.01 +smooth + +8.536087355334422 +47.350146698538815 +424.8788077557605 +-190.86709951520868 +74.94759276334305 +0 +120 +absolute + + + +0.01 +smooth + +8.536086947027199 +47.350146698735465 +424.8990599943347 +-190.8671250860249 +74.93532377243102 +0 +120 +absolute + + + +0.01 +smooth + +8.536086538378688 +47.35014668348412 +424.91929304813294 +-190.8675186037985 +74.92302951194927 +0 +120 +absolute + + + +0.01 +smooth + +8.536086129006586 +47.350146650707494 +424.9395915515363 +-190.86836370163735 +74.91061194805498 +0 +120 +absolute + + + +0.01 +smooth + +8.536085718984783 +47.3501466008821 +424.95993726195115 +-190.86964738607537 +74.89809129235907 +0 +120 +absolute + + + +0.01 +smooth + +8.536085308387184 +47.350146534484495 +424.9803119367841 +-190.8713566636467 +74.88548775647257 +0 +120 +absolute + + + +0.01 +smooth + +8.53608489728769 +47.35014645199125 +425.00069733344156 +-190.87347854088543 +74.87282155200649 +0 +120 +absolute + + + +0.01 +smooth + +8.536084485760199 +47.350146353878884 +425.0210752093297 +-190.87600002432555 +74.86011289057177 +0 +120 +absolute + + + +0.01 +smooth + +8.536084073878602 +47.35014624062393 +425.04142732185505 +-190.878908120501 +74.84738198377937 +0 +120 +absolute + + + +0.01 +smooth + +8.536083661716813 +47.35014611270296 +425.06173542842413 +-190.88218983594598 +74.83464904324036 +0 +120 +absolute + + + +0.01 +smooth + +8.536083249348723 +47.350145970592514 +425.08198128644335 +-190.88583217719452 +74.82193428056566 +0 +120 +absolute + + + +0.01 +smooth + +8.53608283684823 +47.350145814769135 +425.1021466533189 +-190.8898221507806 +74.80925790736626 +0 +120 +absolute + + + +0.01 +smooth + +8.536082424289242 +47.35014564570939 +425.1222132864577 +-190.89414676323833 +74.79664013525317 +0 +120 +absolute + + + +0.01 +smooth + +8.536082011745654 +47.35014546388978 +425.14216294326565 +-190.89879302110174 +74.78410117583734 +0 +120 +absolute + + + +0.01 +smooth + +8.53608159929136 +47.35014526978688 +425.16197738114926 +-190.90374793090479 +74.77166124072977 +0 +120 +absolute + + + +0.01 +smooth + +8.53608118700027 +47.35014506387724 +425.18163835751517 +-190.90899849918165 +74.75934054154146 +0 +120 +absolute + + + +0.01 +smooth + +8.536080774946278 +47.350144846637384 +425.2011276297696 +-190.91453173246632 +74.74715928988336 +0 +120 +absolute + + + +0.01 +smooth + +8.536080363203286 +47.350144618543894 +425.2204269553193 +-190.92033463729285 +74.7351376973665 +0 +120 +absolute + + + +0.01 +smooth + +8.536079951845194 +47.350144380073296 +425.23951809157035 +-190.92639422019533 +74.72329597560184 +0 +120 +absolute + + + +0.01 +smooth + +8.5360795409459 +47.350144131702145 +425.25838279592944 +-190.93269748770774 +74.71165433620037 +0 +120 +absolute + + + +0.01 +smooth + +8.536079130579301 +47.35014387390696 +425.2770028258026 +-190.93923144636415 +74.70023299077303 +0 +120 +absolute + + + +0.01 +smooth + +8.536078720819303 +47.3501436071643 +425.2953599385965 +-190.94598310269856 +74.68905215093088 +0 +120 +absolute + + + +0.01 +smooth + +8.5360783117398 +47.35014333195072 +425.3134358917176 +-190.95293946324512 +74.67813202828484 +0 +120 +absolute + + + +0.01 +smooth + +8.536077903414697 +47.35014304874278 +425.3312124425722 +-190.96008753453782 +74.66749283444594 +0 +120 +absolute + + + +0.01 +smooth + +8.536077495917887 +47.35014275801699 +425.3486713485669 +-190.96741432311072 +74.65715478102516 +0 +120 +absolute + + + +0.01 +smooth + +8.536077089323276 +47.35014246024993 +425.3657943671079 +-190.9749068354978 +74.64713807963346 +0 +120 +absolute + + + +0.01 +smooth + +8.536076683704763 +47.35014215591812 +425.38256325560184 +-190.98255207823323 +74.63746294188182 +0 +120 +absolute + + + +0.01 +smooth + +8.536076279136243 +47.35014184549812 +425.398959771455 +-190.99033705785098 +74.62814957938127 +0 +120 +absolute + + + +0.01 +smooth + +8.536075875691619 +47.35014152946647 +425.4149656720739 +-190.99824878088504 +74.61921820374275 +0 +120 +absolute + + + +0.01 +smooth + +8.536075473444791 +47.35014120829973 +425.4305627148647 +-191.0062742538696 +74.61068902657725 +0 +120 +absolute + + + +0.01 +smooth + +8.536075072469657 +47.35014088247442 +425.4457326572342 +-191.01440048333862 +74.60258225949578 +0 +120 +absolute + + + +0.01 +smooth + +8.53607467284012 +47.35014055246711 +425.4604572565885 +-191.02261447582615 +74.59491811410928 +0 +120 +absolute + + + +0.01 +smooth + +8.536074274630078 +47.35014021875434 +425.4747182703342 +-191.03090323786626 +74.5877168020288 +0 +120 +absolute + + + +0.01 +smooth + +8.536073877913427 +47.35013988181265 +425.48849745587773 +-191.03925377599296 +74.58099853486524 +0 +120 +absolute + + + +0.01 +smooth + +8.536073482764072 +47.3501395421186 +425.5017765706254 +-191.04765309674036 +74.57478352422967 +0 +120 +absolute + + + +0.01 +smooth + +8.536073089255911 +47.35013920014872 +425.5145373719837 +-191.05608820664247 +74.56909198173304 +0 +120 +absolute + + + +0.01 +smooth + +8.536072697462842 +47.35013885637956 +425.52676161735906 +-191.0645461122333 +74.56394411898631 +0 +120 +absolute + + + +0.01 +smooth + +8.536072307458767 +47.35013851128767 +425.538431064158 +-191.07301382004698 +74.55936014760049 +0 +120 +absolute + + + +0.01 +smooth + +8.536071919317585 +47.35013816534959 +425.5495274697866 +-191.0814783366175 +74.55536027918656 +0 +120 +absolute + + + +0.01 +smooth + +8.536071533113196 +47.350137819041876 +425.56003259165163 +-191.08992666847888 +74.55196472535549 +0 +120 +absolute + + + +0.01 +smooth + +8.536071148919497 +47.35013747284107 +425.56992818715935 +-191.09834582216527 +74.5491936977183 +0 +120 +absolute + + + +0.01 +smooth + +8.536070766810393 +47.35013712722372 +425.5791960137162 +-191.1067228042106 +74.54706740788592 +0 +120 +absolute + + + +0.01 +smooth + +8.536070386859778 +47.35013678266636 +425.5878178287287 +-191.115044621149 +74.54560606746941 +0 +120 +absolute + + + +0.01 +smooth + +8.536070009141554 +47.35013643964555 +425.5957753896031 +-191.12329827951444 +74.54482988807968 +0 +120 +absolute + + + +0.01 +smooth + +8.536069633539947 +47.350136097181114 +425.6031038908801 +-191.13150072085236 +74.5447055950414 +0 +120 +absolute + + + +0.01 +smooth + +8.536069258376397 +47.35013574224192 +425.6102832016381 +-191.1399181347132 +74.54475189423667 +0 +120 +absolute + + + +0.01 +smooth + +8.536068883303885 +47.350135371931806 +425.61742629984707 +-191.1486114541979 +74.54484920785009 +0 +120 +absolute + + + +0.01 +smooth + +8.536068508402545 +47.350134986626166 +425.6245266312239 +-191.1575746781718 +74.54499706102226 +0 +120 +absolute + + + +0.01 +smooth + +8.536068133752494 +47.35013458670043 +425.6315776414852 +-191.1668018055004 +74.54519497889386 +0 +120 +absolute + + + +0.01 +smooth + +8.536067759433866 +47.35013417252997 +425.6385727763479 +-191.17628683504904 +74.5454424866055 +0 +120 +absolute + + + +0.01 +smooth + +8.536067385526783 +47.35013374449021 +425.6455054815289 +-191.1860237656831 +74.54573910929784 +0 +120 +absolute + + + +0.01 +smooth + +8.53606701211137 +47.35013330295653 +425.6523692027447 +-191.19600659626795 +74.5460843721115 +0 +120 +absolute + + + +0.01 +smooth + +8.536066639267762 +47.35013284830437 +425.6591573857124 +-191.20622932566906 +74.54647780018713 +0 +120 +absolute + + + +0.01 +smooth + +8.53606626707608 +47.35013238090909 +425.6658634761487 +-191.21668595275182 +74.5469189186654 +0 +120 +absolute + + + +0.01 +smooth + +8.536065895616447 +47.3501319011461 +425.67248091977007 +-191.22737047638148 +74.5474072526869 +0 +120 +absolute + + + +0.01 +smooth + +8.536065524968997 +47.35013140939082 +425.67900316229395 +-191.2382768954236 +74.54794232739228 +0 +120 +absolute + + + +0.01 +smooth + +8.536065155213853 +47.35013090601864 +425.68542364943664 +-191.24939920874357 +74.54852366792223 +0 +120 +absolute + + + +0.01 +smooth + +8.536064786431139 +47.35013039140496 +425.6917358269151 +-191.2607314152066 +74.54915079941732 +0 +120 +absolute + + + +0.01 +smooth + +8.536064418700985 +47.35012986592519 +425.69793314044614 +-191.27226751367823 +74.54982324701824 +0 +120 +absolute + + + +0.01 +smooth + +8.536064052103516 +47.35012932995472 +425.7040090357465 +-191.2840015030238 +74.5505405358656 +0 +120 +absolute + + + +0.01 +smooth + +8.536063686718862 +47.35012878386896 +425.7099569585331 +-191.29592738210883 +74.55130219110005 +0 +120 +absolute + + + +0.01 +smooth + +8.536063322627143 +47.35012822804332 +425.71577035452265 +-191.30803914979856 +74.55210773786223 +0 +120 +absolute + + + +0.01 +smooth + +8.53606295990849 +47.350127662853176 +425.7214426694319 +-191.32033080495842 +74.55295670129277 +0 +120 +absolute + + + +0.01 +smooth + +8.53606259864303 +47.35012708867395 +425.7269673489777 +-191.33279634645382 +74.55384860653234 +0 +120 +absolute + + + +0.01 +smooth + +8.536062238910887 +47.350126505881036 +425.73233783887696 +-191.34542977315016 +74.55478297872155 +0 +120 +absolute + + + +0.01 +smooth + +8.53606188079219 +47.350125914849855 +425.73754758484625 +-191.3582250839128 +74.55575934300106 +0 +120 +absolute + + + +0.01 +smooth + +8.536061524367067 +47.350125315955786 +425.74259003260266 +-191.3711762776072 +74.55677722451149 +0 +120 +absolute + + + +0.01 +smooth + +8.536061169715639 +47.350124709574224 +425.7474586278628 +-191.38427735309867 +74.55783614839349 +0 +120 +absolute + + + +0.01 +smooth + +8.536060816918036 +47.350124096080606 +425.7521468163434 +-191.39752230925262 +74.55893563978769 +0 +120 +absolute + + + +0.01 +smooth + +8.536060466054384 +47.35012347585029 +425.7566480437614 +-191.4109051449345 +74.56007522383476 +0 +120 +absolute + + + +0.01 +smooth + +8.536060117204812 +47.3501228492587 +425.7609557558335 +-191.42441985900965 +74.56125442567529 +0 +120 +absolute + + + +0.01 +smooth + +8.53605977044944 +47.35012221668124 +425.76506339827654 +-191.43806045034347 +74.56247277044996 +0 +120 +absolute + + + +0.01 +smooth + +8.536059425868402 +47.35012157849331 +425.7689644168073 +-191.4518209178013 +74.56372978329941 +0 +120 +absolute + + + +0.01 +smooth + +8.536059083541819 +47.35012093507031 +425.7726522571427 +-191.46569526024868 +74.56502498936425 +0 +120 +absolute + + + +0.01 +smooth + +8.536058743549821 +47.35012028678764 +425.77612036499943 +-191.47967747655088 +74.56635791378514 +0 +120 +absolute + + + +0.01 +smooth + +8.536058405972533 +47.3501196340207 +425.7793621860942 +-191.49376156557332 +74.56772808170271 +0 +120 +absolute + + + +0.01 +smooth + +8.536058070890082 +47.350118977144895 +425.782371166144 +-191.50794152618138 +74.56913501825763 +0 +120 +absolute + + + +0.01 +smooth + +8.536057738382596 +47.35011831653563 +425.78514075086554 +-191.52221135724048 +74.5705782485905 +0 +120 +absolute + + + +0.01 +smooth + +8.536057408530198 +47.3501176525683 +425.78766438597563 +-191.53656505761603 +74.57205729784198 +0 +120 +absolute + + + +0.01 +smooth + +8.536057081413016 +47.3501169856183 +425.789935517191 +-191.55099662617334 +74.5735716911527 +0 +120 +absolute + + + +0.01 +smooth + +8.53605675711118 +47.35011631606106 +425.79194759022846 +-191.56550006177787 +74.5751209536633 +0 +120 +absolute + + + +0.01 +smooth + +8.536056435704811 +47.35011564427195 +425.79369405080496 +-191.58006936329502 +74.57670461051444 +0 +120 +absolute + + + +0.01 +smooth + +8.53605611727404 +47.3501149706264 +425.7951683446371 +-191.59469852959012 +74.57832218684675 +0 +120 +absolute + + + +0.01 +smooth + +8.536055801898993 +47.35011429549978 +425.79636391744185 +-191.60938155952869 +74.57997320780083 +0 +120 +absolute + + + +0.01 +smooth + +8.536055489659791 +47.35011361926752 +425.7972742149359 +-191.62411245197595 +74.58165719851739 +0 +120 +absolute + + + +0.01 +smooth + +8.536055180636568 +47.350112942305 +425.79789268283605 +-191.63888520579738 +74.583373684137 +0 +120 +absolute + + + +0.01 +smooth + +8.536054874909444 +47.35011226498764 +425.7982127668591 +-191.6536938198584 +74.58512218980037 +0 +120 +absolute + + + +0.01 +smooth + +8.5360545722475 +47.35011158654305 +425.79819180499385 +-191.6685525794074 +74.5869757756003 +0 +120 +absolute + + + +0.01 +smooth + +8.53605427043994 +47.350110898825854 +425.7975648143465 +-191.68360588902257 +74.58946977946061 +0 +120 +absolute + + + +0.01 +smooth + +8.53605396911716 +47.35011020036898 +425.7962933724359 +-191.6988797783959 +74.59269440300741 +0 +120 +absolute + + + +0.01 +smooth + +8.536053668375017 +47.350109491413214 +425.7943941672859 +-191.7143700645343 +74.59662898144907 +0 +120 +absolute + + + +0.01 +smooth + +8.536053368309359 +47.350108772199306 +425.79188388692006 +-191.7300725644446 +74.60125284999371 +0 +120 +absolute + + + +0.01 +smooth + +8.536053069016035 +47.350108042968 +425.78877921936214 +-191.74598309513345 +74.60654534384966 +0 +120 +absolute + + + +0.01 +smooth + +8.536052770590898 +47.350107303960066 +425.78509685263583 +-191.76209747360778 +74.61248579822514 +0 +120 +absolute + + + +0.01 +smooth + +8.536052473129798 +47.35010655541625 +425.7808534747646 +-191.77841151687426 +74.61905354832837 +0 +120 +absolute + + + +0.01 +smooth + +8.536052176728587 +47.35010579757729 +425.7760657737723 +-191.79492104193977 +74.62622792936759 +0 +120 +absolute + + + +0.01 +smooth + +8.536051881483118 +47.35010503068394 +425.7707504376823 +-191.81162186581105 +74.63398827655105 +0 +120 +absolute + + + +0.01 +smooth + +8.536051587489238 +47.35010425497699 +425.76492415451855 +-191.82850980549492 +74.64231392508704 +0 +120 +absolute + + + +0.01 +smooth + +8.536051294842803 +47.35010347069717 +425.75860361230457 +-191.84558067799819 +74.65118421018371 +0 +120 +absolute + + + +0.01 +smooth + +8.536051003639658 +47.35010267808522 +425.75180549906395 +-191.86283030032754 +74.66057846704939 +0 +120 +absolute + + + +0.01 +smooth + +8.536050713975659 +47.35010187738191 +425.74454650282036 +-191.8802544894899 +74.67047603089227 +0 +120 +absolute + + + +0.01 +smooth + +8.536050425946653 +47.35010106882798 +425.7368433115975 +-191.8978490624919 +74.68085623692059 +0 +120 +absolute + + + +0.01 +smooth + +8.536050139648493 +47.350100252664205 +425.7287126134189 +-191.91560983634045 +74.69169842034263 +0 +120 +absolute + + + +0.01 +smooth + +8.536049855177032 +47.35009942913132 +425.72017109630843 +-191.93353262804237 +74.7029819163666 +0 +120 +absolute + + + +0.01 +smooth + +8.536049572628121 +47.3500985984701 +425.7112354482897 +-191.9516132546044 +74.71468606020079 +0 +120 +absolute + + + +0.01 +smooth + +8.536049292097607 +47.350097760921265 +425.7019223573861 +-191.9698475330333 +74.72679018705335 +0 +120 +absolute + + + +0.01 +smooth + +8.536049013681344 +47.3500969167256 +425.69224851162153 +-191.9882312803359 +74.73927363213261 +0 +120 +absolute + + + +0.01 +smooth + +8.53604873747518 +47.35009606612384 +425.6822305990195 +-192.0067603135189 +74.75211573064675 +0 +120 +absolute + + + +0.01 +smooth + +8.536048463574973 +47.35009520935675 +425.6718853076038 +-192.02543044958927 +74.76529581780407 +0 +120 +absolute + + + +0.01 +smooth + +8.536048192076569 +47.35009434666509 +425.66122932539804 +-192.04423750555364 +74.77879322881279 +0 +120 +absolute + + + +0.01 +smooth + +8.53604792307582 +47.35009347828958 +425.65027934042575 +-192.06317729841888 +74.79258729888113 +0 +120 +absolute + + + +0.01 +smooth + +8.536047656668575 +47.350092604471016 +425.63905204071074 +-192.08224564519176 +74.80665736321735 +0 +120 +absolute + + + +0.01 +smooth + +8.536047392950687 +47.35009172545013 +425.6275641142765 +-192.10143836287904 +74.8209827570297 +0 +120 +absolute + + + +0.01 +smooth + +8.536047132018007 +47.35009084146767 +425.61583224914676 +-192.1207512684876 +74.8355428155264 +0 +120 +absolute + + + +0.01 +smooth + +8.536046873966384 +47.35008995276439 +425.60387313334525 +-192.1401801790241 +74.85031687391572 +0 +120 +absolute + + + +0.01 +smooth + +8.536046618891675 +47.350089059581066 +425.5917034548954 +-192.15972091149544 +74.86528426740585 +0 +120 +absolute + + + +0.01 +smooth + +8.536046366889725 +47.35008816215843 +425.579339901821 +-192.1793692829083 +74.8804243312051 +0 +120 +absolute + + + +0.01 +smooth + +8.536046118056387 +47.35008726073724 +425.5667991621458 +-192.19912111026957 +74.89571640052168 +0 +120 +absolute + + + +0.01 +smooth + +8.536045872487511 +47.350086355558254 +425.5540979238932 +-192.21897221058606 +74.91113981056381 +0 +120 +absolute + + + +0.01 +smooth + +8.536045630278952 +47.350085446862224 +425.54125287508714 +-192.23891840086446 +74.92667389653977 +0 +120 +absolute + + + +0.01 +smooth + +8.536045391526555 +47.3500845348899 +425.528280703751 +-192.25895549811162 +74.9422979936578 +0 +120 +absolute + + + +0.01 +smooth + +8.536045156326175 +47.35008361988204 +425.51519809790864 +-192.2790793193343 +74.95799143712611 +0 +120 +absolute + + + +0.01 +smooth + +8.536044924773664 +47.3500827020794 +425.50202174558353 +-192.29928568153935 +74.97373356215297 +0 +120 +absolute + + + +0.01 +smooth + +8.53604469696487 +47.350081781722736 +425.4887683347994 +-192.31957040173347 +74.98950370394661 +0 +120 +absolute + + + +0.01 +smooth + +8.536044472995645 +47.350080859052774 +425.47545455357994 +-192.33992929692351 +75.00528119771528 +0 +120 +absolute + + + +0.01 +smooth + +8.536044252961842 +47.35007993431031 +425.46209708994877 +-192.36035818411628 +75.02104537866722 +0 +120 +absolute + + + +0.01 +smooth + +8.536044036959309 +47.350079007736056 +425.4487126319295 +-192.38085288031849 +75.03677558201065 +0 +120 +absolute + + + +0.01 +smooth + +8.5360438250839 +47.3500780795708 +425.4353178675458 +-192.401409202537 +75.05245114295384 +0 +120 +absolute + + + +0.01 +smooth + +8.536043617431464 +47.350077150055284 +425.42192948482136 +-192.42202296777856 +75.06805139670503 +0 +120 +absolute + + + +0.01 +smooth + +8.53604341409785 +47.35007621943025 +425.4085641717798 +-192.44268999305004 +75.08355567847248 +0 +120 +absolute + + + +0.01 +smooth + +8.536043214599404 +47.350075287044206 +425.39514032820557 +-192.46342378031017 +75.09901738725033 +0 +120 +absolute + + + +0.01 +smooth + +8.53604301557226 +47.35007434776407 +425.3810850101191 +-192.48432648720345 +75.11486421019245 +0 +120 +absolute + + + +0.01 +smooth + +8.536042816577103 +47.3500734008868 +425.3663168662974 +-192.50541220583176 +75.13115968988072 +0 +120 +absolute + + + +0.01 +smooth + +8.536042617756062 +47.35007244659931 +425.3508528445821 +-192.52667736900324 +75.14789374613663 +0 +120 +absolute + + + +0.01 +smooth + +8.536042419251258 +47.35007148508855 +425.33470989281494 +-192.54811840952613 +75.16505629878166 +0 +120 +absolute + + + +0.01 +smooth + +8.536042221204816 +47.350070516541415 +425.3179049588375 +-192.5697317602085 +75.1826372676372 +0 +120 +absolute + + + +0.01 +smooth + +8.536042023758865 +47.350069541144876 +425.30045499049174 +-192.5915138538586 +75.20062657252478 +0 +120 +absolute + + + +0.01 +smooth + +8.536041827055527 +47.350068559085855 +425.28237693561897 +-192.6134611232845 +75.21901413326587 +0 +120 +absolute + + + +0.01 +smooth + +8.536041631236932 +47.35006757055132 +425.2636877420615 +-192.6355700012946 +75.23778986968193 +0 +120 +absolute + + + +0.01 +smooth + +8.536041436445197 +47.35006657572817 +425.2444043576607 +-192.65783692069695 +75.25694370159441 +0 +120 +absolute + + + +0.01 +smooth + +8.536041242822456 +47.35006557480335 +425.2245437302583 +-192.68025831429972 +75.27646554882482 +0 +120 +absolute + + + +0.01 +smooth + +8.53604105051083 +47.350064567963805 +425.20412280769614 +-192.70283061491114 +75.29634533119462 +0 +120 +absolute + + + +0.01 +smooth + +8.536040859652443 +47.35006355539648 +425.1831585378157 +-192.7255502553393 +75.31657296852526 +0 +120 +absolute + + + +0.01 +smooth + +8.536040670389424 +47.35006253728829 +425.1616678684591 +-192.7484136683925 +75.3371383806382 +0 +120 +absolute + + + +0.01 +smooth + +8.536040482863894 +47.35006151382617 +425.1396677474676 +-192.7714172868788 +75.35803148735494 +0 +120 +absolute + + + +0.01 +smooth + +8.53604029721798 +47.350060485197076 +425.11717512268336 +-192.79455754360643 +75.37924220849692 +0 +120 +absolute + + + +0.01 +smooth + +8.53604011359381 +47.35005945158794 +425.0942069419479 +-192.81783087138365 +75.40076046388566 +0 +120 +absolute + + + +0.01 +smooth + +8.536039932133502 +47.35005841318567 +425.07078015310276 +-192.84123370301847 +75.42257617334255 +0 +120 +absolute + + + +0.01 +smooth + +8.536039752979189 +47.35005737017725 +425.0469117039901 +-192.8647624713192 +75.44467925668913 +0 +120 +absolute + + + +0.01 +smooth + +8.53603957627299 +47.35005632274959 +425.02261854245114 +-192.888413609094 +75.46705963374684 +0 +120 +absolute + + + +0.01 +smooth + +8.536039402157035 +47.350055271089595 +424.997917616328 +-192.91218354915097 +75.48970722433714 +0 +120 +absolute + + + +0.01 +smooth + +8.536039230773447 +47.350054215384255 +424.9728258734621 +-192.93606872429837 +75.51261194828152 +0 +120 +absolute + + + +0.01 +smooth + +8.536039062264352 +47.35005315582049 +424.94736026169545 +-192.9600655673444 +75.53576372540145 +0 +120 +absolute + + + +0.01 +smooth + +8.536038896771876 +47.35005209258523 +424.92153772886957 +-192.98417051109718 +75.5591524755184 +0 +120 +absolute + + + +0.01 +smooth + +8.536038734438142 +47.35005102586541 +424.8953752228263 +-193.0083799883649 +75.58276811845383 +0 +120 +absolute + + + +0.01 +smooth + +8.536038575405275 +47.35004995584797 +424.86888969140733 +-193.03269043195576 +75.60660057402919 +0 +120 +absolute + + + +0.01 +smooth + +8.536038419815403 +47.35004888271984 +424.8420980824544 +-193.0570982746779 +75.630639762066 +0 +120 +absolute + + + +0.01 +smooth + +8.536038267810648 +47.35004780666797 +424.81501734380913 +-193.08159994933956 +75.65487560238567 +0 +120 +absolute + + + +0.01 +smooth + +8.536038119533139 +47.35004672787929 +424.78766442331334 +-193.10619188874887 +75.67929801480972 +0 +120 +absolute + + + +0.01 +smooth + +8.536037975124998 +47.35004564654072 +424.76005626880874 +-193.13087052571404 +75.70389691915958 +0 +120 +absolute + + + +0.01 +smooth + +8.53603783472835 +47.350044562839216 +424.73220982813706 +-193.15563229304323 +75.72866223525676 +0 +120 +absolute + + + +0.01 +smooth + +8.536037698485323 +47.350043476961716 +424.70414204913993 +-193.18047362354457 +75.7535838829227 +0 +120 +absolute + + + +0.01 +smooth + +8.536037566538042 +47.350042389095144 +424.67586987965916 +-193.20539095002638 +75.77865178197888 +0 +120 +absolute + + + +0.01 +smooth + +8.536037439028627 +47.35004129942644 +424.6474102675365 +-193.23038070529668 +75.80385585224676 +0 +120 +absolute + + + +0.01 +smooth + +8.536037316099211 +47.350040208142545 +424.6187801606136 +-193.25543932216377 +75.82918601354783 +0 +120 +absolute + + + +0.01 +smooth + +8.536037197891915 +47.35003911543039 +424.5899965067322 +-193.2805632334358 +75.85463218570354 +0 +120 +absolute + + + +0.01 +smooth + +8.536037084548862 +47.350038021476905 +424.5610762537341 +-193.3057488719209 +75.88018428853536 +0 +120 +absolute + + + +0.01 +smooth + +8.536036976212182 +47.350036926469045 +424.5320363494609 +-193.33099267042726 +75.90583224186477 +0 +120 +absolute + + + +0.01 +smooth + +8.536036873023997 +47.35003583059373 +424.5028937417544 +-193.35629106176313 +75.93156596551323 +0 +120 +absolute + + + +0.01 +smooth + +8.536036775126435 +47.350034734037905 +424.4736653784563 +-193.38164047873659 +75.95737537930222 +0 +120 +absolute + + + +0.01 +smooth + +8.536036682661615 +47.350033636988506 +424.4443682074083 +-193.4070373541559 +75.98325040305319 +0 +120 +absolute + + + +0.01 +smooth + +8.536036595771671 +47.350032539632466 +424.4150191764522 +-193.43247812082916 +76.00918095658764 +0 +120 +absolute + + + +0.01 +smooth + +8.536036514598722 +47.35003144215672 +424.38563523342964 +-193.45795921156466 +76.03515695972703 +0 +120 +absolute + + + +0.01 +smooth + +8.536036438404524 +47.350030343950685 +424.35614871724334 +-193.48349444469264 +76.06121757691099 +0 +120 +absolute + + + +0.01 +smooth + +8.536036362954057 +47.350029241249814 +424.32615632488216 +-193.50916622679074 +76.08759707430369 +0 +120 +absolute + + + +0.01 +smooth + +8.536036287736849 +47.35002813368277 +424.29561329546374 +-193.53498275422777 +76.11432068295147 +0 +120 +absolute + + + +0.01 +smooth + +8.536036212829544 +47.350027021411236 +424.26453133006913 +-193.56094058950768 +76.14138075043185 +0 +120 +absolute + + + +0.01 +smooth + +8.536036138308797 +47.35002590459694 +424.23292212978004 +-193.58703629513462 +76.16876962432241 +0 +120 +absolute + + + +0.01 +smooth + +8.536036064251267 +47.35002478340155 +424.2007973956776 +-193.61326643361258 +76.19647965220065 +0 +120 +absolute + + + +0.01 +smooth + +8.5360359907336 +47.35002365798678 +424.16816882884325 +-193.6396275674455 +76.22450318164414 +0 +120 +absolute + + + +0.01 +smooth + +8.536035917832454 +47.35002252851434 +424.13504813035814 +-193.6661162591375 +76.25283256023042 +0 +120 +absolute + + + +0.01 +smooth + +8.536035845624479 +47.350021395145916 +424.10144700130365 +-193.69272907119264 +76.28146013553702 +0 +120 +absolute + + + +0.01 +smooth + +8.536035774186324 +47.350020258043195 +424.06737714276125 +-193.71946256611471 +76.31037825514147 +0 +120 +absolute + + + +0.01 +smooth + +8.536035703594651 +47.35001911736789 +424.0328502558122 +-193.74631330640798 +76.33957926662137 +0 +120 +absolute + + + +0.01 +smooth + +8.536035633926105 +47.3500179732817 +423.99787804153766 +-193.7732778545763 +76.3690555175542 +0 +120 +absolute + + + +0.01 +smooth + +8.53603556525734 +47.35001682594631 +423.9624722010191 +-193.8003527731238 +76.39879935551755 +0 +120 +absolute + + + +0.01 +smooth + +8.53603549766501 +47.35001567552344 +423.92664443533795 +-193.82753462455452 +76.42880312808897 +0 +120 +absolute + + + +0.01 +smooth + +8.536035431225768 +47.35001452217477 +423.8904064455755 +-193.85481997137228 +76.45905918284592 +0 +120 +absolute + + + +0.01 +smooth + +8.536035366016266 +47.350013366062 +423.8537699328129 +-193.88220537608132 +76.48955986736603 +0 +120 +absolute + + + +0.01 +smooth + +8.536035302113161 +47.35001220734685 +423.8167465981317 +-193.90968740118555 +76.52029752922682 +0 +120 +absolute + + + +0.01 +smooth + +8.536035239593097 +47.350011046190986 +423.77934814261306 +-193.93726260918908 +76.55126451600582 +0 +120 +absolute + + + +0.01 +smooth + +8.536035178532735 +47.350009882756126 +423.74158626733833 +-193.96492756259582 +76.58245317528056 +0 +120 +absolute + + + +0.01 +smooth + +8.536035119008721 +47.350008717203956 +423.7034726733889 +-193.99267882390976 +76.61385585462861 +0 +120 +absolute + + + +0.01 +smooth + +8.536035061097714 +47.35000754969619 +423.66501906184607 +-194.02051295563513 +76.6454649016275 +0 +120 +absolute + + + +0.01 +smooth + +8.536035004876362 +47.35000638039451 +423.6262371337911 +-194.0484265202757 +76.6772726638548 +0 +120 +absolute + + + +0.01 +smooth + +8.53603495042132 +47.35000520946063 +423.5871385903055 +-194.07641608033563 +76.70927148888799 +0 +120 +absolute + + + +0.01 +smooth + +8.536034897809241 +47.35000403705623 +423.54773513247045 +-194.10447819831893 +76.74145372430469 +0 +120 +absolute + + + +0.01 +smooth + +8.536034847116776 +47.350002863343036 +423.5080384613673 +-194.13260943672958 +76.77381171768238 +0 +120 +absolute + + + +0.01 +smooth + +8.53603479842058 +47.35000168848271 +423.4680602780775 +-194.16080635807165 +76.80633781659864 +0 +120 +absolute + + + +0.01 +smooth + +8.536034751797304 +47.35000051263699 +423.4278122836821 +-194.1890655248491 +76.839024368631 +0 +120 +absolute + + + +0.01 +smooth + +8.536034707323601 +47.34999933596754 +423.3873061792627 +-194.217383499566 +76.87186372135699 +0 +120 +absolute + + + +0.01 +smooth + +8.536034665076127 +47.349998158636076 +423.3465536659005 +-194.24575684472637 +76.90484822235419 +0 +120 +absolute + + + +0.01 +smooth + +8.536034625131528 +47.349996980804285 +423.30556644467686 +-194.2741821228342 +76.93797021920011 +0 +120 +absolute + + + +0.01 +smooth + +8.536034587566462 +47.349995802633885 +423.26435621667304 +-194.30265589639345 +76.9712220594723 +0 +120 +absolute + + + +0.01 +smooth + +8.536034552457581 +47.34999462428655 +423.22293468297045 +-194.33117472790826 +77.00459609074831 +0 +120 +absolute + + + +0.01 +smooth + +8.536034519881536 +47.34999344592401 +423.18131354465044 +-194.35973517988265 +77.03808466060568 +0 +120 +absolute + + + +0.01 +smooth + +8.53603448991498 +47.34999226770792 +423.13950450279435 +-194.3883338148205 +77.07168011662193 +0 +120 +absolute + + + +0.01 +smooth + +8.536034462634568 +47.349991089800014 +423.0975192584833 +-194.41696719522596 +77.10537480637466 +0 +120 +absolute + + + +0.01 +smooth + +8.536034438116952 +47.34998991236198 +423.05536951279885 +-194.44563188360297 +77.13916107744134 +0 +120 +absolute + + + +0.01 +smooth + +8.536034416438783 +47.34998873555551 +423.0130669668223 +-194.4743244424556 +77.17303127739957 +0 +120 +absolute + + + +0.01 +smooth + +8.536034397676715 +47.34998755954231 +422.9706233216349 +-194.50304143428792 +77.20697775382686 +0 +120 +absolute + + + +0.01 +smooth + +8.536034381907402 +47.34998638448407 +422.928050278318 +-194.5317794216038 +77.2409928543008 +0 +120 +absolute + + + +0.01 +smooth + +8.536034369207494 +47.34998521054249 +422.8853595379529 +-194.56053496690737 +77.27506892639886 +0 +120 +absolute + + + +0.01 +smooth + +8.536034359653645 +47.34998403787929 +422.842562801621 +-194.58930463270264 +77.30919831769864 +0 +120 +absolute + + + +0.01 +smooth + +8.536034353322506 +47.34998286665613 +422.79967177040356 +-194.6180849814936 +77.34337337577766 +0 +120 +absolute + + + +0.01 +smooth + +8.536034350290734 +47.34998169703474 +422.75669814538196 +-194.64687257578424 +77.37758644821346 +0 +120 +absolute + + + +0.01 +smooth + +8.536034350628574 +47.3499805283756 +422.7135854233299 +-194.67568280085186 +77.41187240242176 +0 +120 +absolute + + + +0.01 +smooth + +8.536034354316836 +47.34997935754093 +422.6700640867717 +-194.70458954631857 +77.44639872996551 +0 +120 +absolute + + + +0.01 +smooth + +8.536034361270792 +47.34997818432339 +422.6261136461341 +-194.73359761399868 +77.48117745222375 +0 +120 +absolute + + + +0.01 +smooth + +8.536034371404213 +47.3499770088714 +422.5817438734284 +-194.76270343656736 +77.51620171413269 +0 +120 +absolute + + + +0.01 +smooth + +8.536034384630865 +47.34997583133332 +422.536964540665 +-194.79190344669968 +77.55146466062848 +0 +120 +absolute + + + +0.01 +smooth + +8.536034400864525 +47.34997465185757 +422.49178541985486 +-194.82119407707094 +77.58695943664723 +0 +120 +absolute + + + +0.01 +smooth + +8.536034420018957 +47.34997347059256 +422.4462162830088 +-194.8505717603562 +77.62267918712512 +0 +120 +absolute + + + +0.01 +smooth + +8.536034442007939 +47.349972287686676 +422.40026690213756 +-194.88003292923074 +77.65861705699828 +0 +120 +absolute + + + +0.01 +smooth + +8.536034466745233 +47.349971103288304 +422.3539470492518 +-194.90957401636953 +77.69476619120286 +0 +120 +absolute + + + +0.01 +smooth + +8.536034494144618 +47.349969917545884 +422.3072664963626 +-194.93919145444806 +77.73111973467506 +0 +120 +absolute + + + +0.01 +smooth + +8.536034524119863 +47.3499687306078 +422.26023501548076 +-194.96888167614125 +77.76767083235099 +0 +120 +absolute + + + +0.01 +smooth + +8.536034556584735 +47.349967542622416 +422.21286237861676 +-194.9986411141243 +77.80441262916678 +0 +120 +absolute + + + +0.01 +smooth + +8.536034591453006 +47.34996635373819 +422.16515835778154 +-195.02846620107246 +77.8413382700586 +0 +120 +absolute + + + +0.01 +smooth + +8.536034628638454 +47.349965164103466 +422.117132724986 +-195.05835336966084 +77.87844089996261 +0 +120 +absolute + + + +0.01 +smooth + +8.536034668054839 +47.34996397386669 +422.0687952522409 +-195.0882990525646 +77.91571366381496 +0 +120 +absolute + + + +0.01 +smooth + +8.536034709615937 +47.34996278317624 +422.0201557115568 +-195.11829968245894 +77.95314970655178 +0 +120 +absolute + + + +0.01 +smooth + +8.536034753235517 +47.3499615921805 +421.97122387494477 +-195.14835169201902 +77.99074217310923 +0 +120 +absolute + + + +0.01 +smooth + +8.536034798827353 +47.3499604010279 +421.92200951441566 +-195.17845151392004 +78.02848420842346 +0 +120 +absolute + + + +0.01 +smooth + +8.536034846305215 +47.34995920986682 +421.87252240198 +-195.20859558083708 +78.06636895743061 +0 +120 +absolute + + + +0.01 +smooth + +8.53603489558287 +47.349958018845676 +421.82277230964877 +-195.23878032544542 +78.10438956506687 +0 +120 +absolute + + + +0.01 +smooth + +8.536034946574095 +47.34995682811286 +421.7727690094327 +-195.26900218042016 +78.14253917626836 +0 +120 +absolute + + + +0.01 +smooth + +8.536034999192657 +47.34995563781676 +421.72252227334263 +-195.29925757843657 +78.18081093597124 +0 +120 +absolute + + + +0.01 +smooth + +8.536035053352323 +47.34995444810579 +421.67204187338933 +-195.3295429521697 +78.21919798911162 +0 +120 +absolute + + + +0.01 +smooth + +8.536035108966873 +47.34995325912835 +421.62133758158353 +-195.35985473429471 +78.25769348062568 +0 +120 +absolute + + + +0.01 +smooth + +8.53603516595007 +47.34995207103284 +421.57041916993614 +-195.3901893574868 +78.2962905554496 +0 +120 +absolute + + + +0.01 +smooth + +8.536035224215686 +47.34995088396764 +421.51929641045786 +-195.42054325442123 +78.33498235851948 +0 +120 +absolute + + + +0.01 +smooth + +8.536035283677496 +47.34994969808117 +421.4679790751595 +-195.450912857773 +78.37376203477149 +0 +120 +absolute + + + +0.01 +smooth + +8.536035344249267 +47.349948513521824 +421.4164769360519 +-195.48129460021744 +78.41262272914179 +0 +120 +absolute + + + +0.01 +smooth + +8.53603540584477 +47.349947330438006 +421.3647997651458 +-195.51168491442962 +78.45155758656651 +0 +120 +absolute + + + +0.01 +smooth + +8.536035468377776 +47.349946148978105 +421.3129573344521 +-195.54208023308473 +78.49055975198182 +0 +120 +absolute + + + +0.01 +smooth + +8.536035531762057 +47.34994496929053 +421.26095941598146 +-195.572476988858 +78.52962237032385 +0 +120 +absolute + + + +0.01 +smooth + +8.536035595911384 +47.349943791523685 +421.20881578174476 +-195.60287161442452 +78.56873858652877 +0 +120 +absolute + + + +0.01 +smooth + +8.536035660739525 +47.34994261582595 +421.1565362037528 +-195.63326054245948 +78.60790154553271 +0 +120 +absolute + + + +0.01 +smooth + +8.536035726160254 +47.34994144234575 +421.10413045401634 +-195.6636402056381 +78.64710439227184 +0 +120 +absolute + + + +0.01 +smooth + +8.53603579208734 +47.34994027123146 +421.0516083045461 +-195.69400703663544 +78.6863402716823 +0 +120 +absolute + + + +0.01 +smooth + +8.536035858434555 +47.349939102631495 +420.9989795273531 +-195.72435746812678 +78.72560232870023 +0 +120 +absolute + + + +0.01 +smooth + +8.53603592511567 +47.34993793669426 +420.94625389444786 +-195.75468793278725 +78.7648837082618 +0 +120 +absolute + + + +0.01 +smooth + +8.536035992044454 +47.349936773568146 +420.8934411778414 +-195.78499486329196 +78.80417755530314 +0 +120 +absolute + + + +0.01 +smooth + +8.536036059134677 +47.34993561340154 +420.84055114954447 +-195.8152746923162 +78.84347701476041 +0 +120 +absolute + + + +0.01 +smooth + +8.536036126300111 +47.349934456342865 +420.7875935815677 +-195.84552385253502 +78.88277523156977 +0 +120 +absolute + + + +0.01 +smooth + +8.536036193454528 +47.34993330254052 +420.73457824592214 +-195.87573877662365 +78.92206535066737 +0 +120 +absolute + + + +0.01 +smooth + +8.536036260511699 +47.34993215214288 +420.68151491461833 +-195.90591589725727 +78.96134051698934 +0 +120 +absolute + + + +0.01 +smooth + +8.536036327385395 +47.349931005298366 +420.6284133596672 +-195.93605164711101 +79.00059387547181 +0 +120 +absolute + + + +0.01 +smooth + +8.536036394881595 +47.34992986125487 +420.575222120612 +-195.96616490091034 +79.03986074811336 +0 +120 +absolute + + + +0.01 +smooth + +8.536036465975736 +47.34992871705709 +420.5217396047714 +-195.99632924645002 +79.07927959127453 +0 +120 +absolute + + + +0.01 +smooth + +8.536036540816708 +47.34992757258675 +420.4679567657917 +-196.02654734149536 +79.11885591390168 +0 +120 +absolute + + + +0.01 +smooth + +8.536036619294222 +47.34992642798657 +420.4138822889237 +-196.05681533107196 +79.15858299890564 +0 +120 +absolute + + + +0.01 +smooth + +8.536036701297986 +47.34992528339924 +420.359524859418 +-196.08712936020575 +79.19845412919743 +0 +120 +absolute + + + +0.01 +smooth + +8.536036786717707 +47.34992413896743 +420.3048931625251 +-196.11748557392235 +79.23846258768788 +0 +120 +absolute + + + +0.01 +smooth + +8.536036875443099 +47.349922994833875 +420.249995883496 +-196.1478801172475 +79.27860165728791 +0 +120 +absolute + + + +0.01 +smooth + +8.536036967363863 +47.34992185114126 +420.19484170758096 +-196.17830913520697 +79.31886462090837 +0 +120 +absolute + + + +0.01 +smooth + +8.536037062369715 +47.34992070803229 +420.139439320031 +-196.20876877282652 +79.35924476146026 +0 +120 +absolute + + + +0.01 +smooth + +8.536037160350359 +47.34991956564967 +420.0837974060965 +-196.23925517513186 +79.39973536185441 +0 +120 +absolute + + + +0.01 +smooth + +8.536037261195506 +47.349918424136085 +420.02792465102846 +-196.26976448714876 +79.44032970500177 +0 +120 +absolute + + + +0.01 +smooth + +8.536037364794867 +47.34991728363425 +419.97182974007717 +-196.30029285390293 +79.48102107381321 +0 +120 +absolute + + + +0.01 +smooth + +8.536037471038147 +47.349916144286844 +419.9155213584936 +-196.33083642042016 +79.52180275119966 +0 +120 +absolute + + + +0.01 +smooth + +8.536037579815057 +47.34991500623659 +419.8590081915283 +-196.36139133172617 +79.56266802007204 +0 +120 +absolute + + + +0.01 +smooth + +8.536037691015304 +47.34991386962618 +419.8022989244318 +-196.39195373284667 +79.60361016334117 +0 +120 +absolute + + + +0.01 +smooth + +8.536037804528604 +47.34991273459832 +419.7454022424551 +-196.42251976880746 +79.64462246391807 +0 +120 +absolute + + + +0.01 +smooth + +8.536037920244656 +47.349911601295695 +419.6883268308485 +-196.45308558463427 +79.68569820471353 +0 +120 +absolute + + + +0.01 +smooth + +8.536038038053173 +47.349910469861015 +419.63108137486296 +-196.4836473253528 +79.72683066863858 +0 +120 +absolute + + + +0.01 +smooth + +8.536038157843867 +47.349909340436994 +419.57367455974895 +-196.51420113598883 +79.76801313860403 +0 +120 +absolute + + + +0.01 +smooth + +8.536038279506444 +47.3499082131663 +419.5161150707573 +-196.5447431615681 +79.8092388975208 +0 +120 +absolute + + + +0.01 +smooth + +8.536038402930613 +47.34990708819166 +419.4584115931385 +-196.57526954711636 +79.85050122829983 +0 +120 +absolute + + + +0.01 +smooth + +8.536038528006085 +47.34990596565575 +419.40057281214337 +-196.60577643765933 +79.891793413852 +0 +120 +absolute + + + +0.01 +smooth + +8.536038654622564 +47.349904845701296 +419.34260741302245 +-196.63625997822274 +79.9331087370882 +0 +120 +absolute + + + +0.01 +smooth + +8.536038782669767 +47.34990372847098 +419.2845240810266 +-196.66671631383238 +79.97444048091936 +0 +120 +absolute + + + +0.01 +smooth + +8.536038912037393 +47.349902614107506 +419.22633150140626 +-196.69714158951402 +80.01578192825637 +0 +120 +absolute + + + +0.01 +smooth + +8.536039042615158 +47.34990150275359 +419.16803835941215 +-196.72753195029327 +80.05712636201015 +0 +120 +absolute + + + +0.01 +smooth + +8.53603917429277 +47.3499003945519 +419.10965334029504 +-196.75788354119604 +80.0984670650916 +0 +120 +absolute + + + +0.01 +smooth + +8.536039306959935 +47.349899289645165 +419.05118512930557 +-196.78819250724794 +80.13979732041157 +0 +120 +absolute + + + +0.01 +smooth + +8.536039440506366 +47.34989818817608 +418.9926424116943 +-196.81845499347477 +80.18111041088108 +0 +120 +absolute + + + +0.01 +smooth + +8.53603957482177 +47.34989709028733 +418.93403387271206 +-196.84866714490227 +80.22239961941092 +0 +120 +absolute + + + +0.01 +smooth + +8.536039709795855 +47.34989599612163 +418.8753681976094 +-196.87882510655618 +80.26365822891205 +0 +120 +absolute + + + +0.01 +smooth + +8.53603984531833 +47.349894905821664 +418.816654071637 +-196.90892502346225 +80.30487952229538 +0 +120 +absolute + + + +0.01 +smooth + +8.536039981278906 +47.349893819530145 +418.75790018004557 +-196.9389630406462 +80.34605678247179 +0 +120 +absolute + + + +0.01 +smooth + +8.536040117567289 +47.34989273738978 +418.6991152080857 +-196.9689353031338 +80.3871832923522 +0 +120 +absolute + + + +0.01 +smooth + +8.536040254073193 +47.349891659543246 +418.64030784100817 +-196.99883795595076 +80.42825233484751 +0 +120 +absolute + + + +0.01 +smooth + +8.536040390686319 +47.34989058613327 +418.5814867640636 +-197.0286671441229 +80.46925719286864 +0 +120 +absolute + + + +0.01 +smooth + +8.536040527296382 +47.34988951730253 +418.5226606625025 +-197.0584190126758 +80.51019114932645 +0 +120 +absolute + + + +0.01 +smooth + +8.53604066379309 +47.34988845319373 +418.46383822157577 +-197.08808970663543 +80.5510474871319 +0 +120 +absolute + + + +0.01 +smooth + +8.53604080006615 +47.34988739394959 +418.40502812653403 +-197.11767537102733 +80.59181948919583 +0 +120 +absolute + + + +0.01 +smooth + +8.536040936005275 +47.34988633971277 +418.34623906262783 +-197.1471721508774 +80.6325004384292 +0 +120 +absolute + + + +0.01 +smooth + +8.536041071500168 +47.34988529062601 +418.28747971510796 +-197.17657619121127 +80.6730836177429 +0 +120 +absolute + + + +0.01 +smooth + +8.536041206440544 +47.349884246832005 +418.22875876922495 +-197.20588363705474 +80.71356231004786 +0 +120 +absolute + + + +0.01 +smooth + +8.536041340716107 +47.34988320847344 +418.17008491022966 +-197.2350906334335 +80.75392979825492 +0 +120 +absolute + + + +0.01 +smooth + +8.536041474888005 +47.349882174577914 +418.1114067689386 +-197.26422263819714 +80.79422753700554 +0 +120 +absolute + + + +0.01 +smooth + +8.536041610814696 +47.34988114205674 +418.05255875872933 +-197.29336054558314 +80.83458828240936 +0 +120 +absolute + + + +0.01 +smooth + +8.536041748556157 +47.34988011084798 +417.99353805065545 +-197.32250547938142 +80.87501390653505 +0 +120 +absolute + + + +0.01 +smooth + +8.536041888049759 +47.34987908109447 +417.9343528388092 +-197.35165317322284 +80.91549742964273 +0 +120 +absolute + + + +0.01 +smooth + +8.536042029232867 +47.34987805293913 +417.8750113172831 +-197.3807993607383 +80.95603187199251 +0 +120 +absolute + + + +0.01 +smooth + +8.536042172042855 +47.3498770265248 +417.81552168016935 +-197.40993977555874 +80.99661025384442 +0 +120 +absolute + + + +0.01 +smooth + +8.536042316417085 +47.349876001994375 +417.7558921215607 +-197.4390701513151 +81.03722559545865 +0 +120 +absolute + + + +0.01 +smooth + +8.536042462292931 +47.34987497949069 +417.69613083554935 +-197.4681862216382 +81.0778709170952 +0 +120 +absolute + + + +0.01 +smooth + +8.53604260960776 +47.34987395915666 +417.63624601622774 +-197.497283720159 +81.11853923901418 +0 +120 +absolute + + + +0.01 +smooth + +8.536042758298938 +47.34987294113515 +417.57624585768815 +-197.52635838050844 +81.15922358147576 +0 +120 +absolute + + + +0.01 +smooth + +8.536042908303841 +47.349871925569026 +417.51613855402326 +-197.55540593631736 +81.19991696473994 +0 +120 +absolute + + + +0.01 +smooth + +8.536043059559823 +47.349870912601126 +417.45593229932507 +-197.58442212121665 +81.24061240906678 +0 +120 +absolute + + + +0.01 +smooth + +8.53604321200427 +47.34986990237439 +417.3956352876863 +-197.61340266883732 +81.28130293471652 +0 +120 +absolute + + + +0.01 +smooth + +8.536043365574535 +47.34986889503164 +417.3352557131991 +-197.64234331281023 +81.32198156194912 +0 +120 +absolute + + + +0.01 +smooth + +8.536043520208 +47.349867890715764 +417.27480176995624 +-197.6712397867663 +81.36264131102472 +0 +120 +absolute + + + +0.01 +smooth + +8.536043675842022 +47.34986688956962 +417.2142816520497 +-197.70008782433632 +81.40327520220336 +0 +120 +absolute + + + +0.01 +smooth + +8.536043832413977 +47.349865891736115 +417.1537035535722 +-197.7288831591514 +81.44387625574524 +0 +120 +absolute + + + +0.01 +smooth + +8.53604398986123 +47.34986489735809 +417.093075668616 +-197.7576215248423 +81.48443749191033 +0 +120 +absolute + + + +0.01 +smooth + +8.536044148121151 +47.34986390657843 +417.03240619127337 +-197.78629865504 +81.5249519309588 +0 +120 +absolute + + + +0.01 +smooth + +8.536044307131107 +47.349862919539994 +416.9717033156369 +-197.81491028337535 +81.56541259315071 +0 +120 +absolute + + + +0.01 +smooth + +8.53604446682847 +47.34986193638567 +416.9109752357989 +-197.8434521434793 +81.60581249874618 +0 +120 +absolute + + + +0.01 +smooth + +8.536044627150602 +47.34986095725833 +416.8502301458518 +-197.87191996898272 +81.64614466800523 +0 +120 +absolute + + + +0.01 +smooth + +8.536044788034879 +47.349859982300835 +416.789476239888 +-197.90030949351654 +81.68640212118804 +0 +120 +absolute + + + +0.01 +smooth + +8.536044949418665 +47.34985901165608 +416.7287217119999 +-197.92861645071176 +81.72657787855465 +0 +120 +absolute + + + +0.01 +smooth + +8.53604511123933 +47.3498580454669 +416.66797475628 +-197.95683657419912 +81.76666496036516 +0 +120 +absolute + + + +0.01 +smooth + +8.53604527343424 +47.34985708387621 +416.60724356682044 +-197.98496559760963 +81.80665638687967 +0 +120 +absolute + + + +0.01 +smooth + +8.53604543594077 +47.349856127026854 +416.54653633771386 +-198.01299925457414 +81.84654517835827 +0 +120 +absolute + + + +0.01 +smooth + +8.53604559869628 +47.34985517506172 +416.4858612630526 +-198.04093327872363 +81.88632435506103 +0 +120 +absolute + + + +0.01 +smooth + +8.536045761638146 +47.34985422812366 +416.42522653692896 +-198.068763403689 +81.92598693724808 +0 +120 +absolute + + + +0.01 +smooth + +8.53604592470373 +47.34985328635557 +416.36464035343545 +-198.09648536310107 +81.96552594517948 +0 +120 +absolute + + + +0.01 +smooth + +8.536046087830405 +47.34985234990031 +416.30411090666445 +-198.12409489059087 +82.00493439911533 +0 +120 +absolute + + + +0.01 +smooth + +8.53604625095554 +47.349851418900755 +416.24364639070825 +-198.15158771978918 +82.0442053193157 +0 +120 +absolute + + + +0.01 +smooth + +8.5360464140165 +47.34985049349978 +416.1832549996594 +-198.178959584327 +82.08333172604073 +0 +120 +absolute + + + +0.01 +smooth + +8.536046576950657 +47.349849573840245 +416.1229449276103 +-198.20620621783524 +82.12230663955046 +0 +120 +absolute + + + +0.01 +smooth + +8.536046739695376 +47.34984866006505 +416.06272436865316 +-198.23332335394474 +82.16112308010501 +0 +120 +absolute + + + +0.01 +smooth + +8.536046902188026 +47.34984775231703 +416.00260151688065 +-198.26030672628644 +82.19977406796446 +0 +120 +absolute + + + +0.01 +smooth + +8.53604706436598 +47.34984685073909 +415.9425845663849 +-198.28715206849128 +82.23825262338892 +0 +120 +absolute + + + +0.01 +smooth + +8.536047226166602 +47.34984595547408 +415.88268171125844 +-198.31385511419015 +82.27655176663846 +0 +120 +absolute + + + +0.01 +smooth + +8.536047387527262 +47.34984506666489 +415.8229011455937 +-198.34041159701397 +82.31466451797318 +0 +120 +absolute + + + +0.01 +smooth + +8.536047548385326 +47.34984418445438 +415.76325106348304 +-198.36681725059356 +82.35258389765318 +0 +120 +absolute + + + +0.01 +smooth + +8.536047708678169 +47.34984330898543 +415.7037396590188 +-198.39306780855992 +82.39030292593851 +0 +120 +absolute + + + +0.01 +smooth + +8.536047868343152 +47.34984244040091 +415.64437512629354 +-198.41915900454396 +82.4278146230893 +0 +120 +absolute + + + +0.01 +smooth + +8.536048027317648 +47.349841578843694 +415.5851656593994 +-198.4450865721765 +82.46511200936565 +0 +120 +absolute + + + +0.01 +smooth + +8.536048185997878 +47.34984072298928 +415.5260519395215 +-198.4708872667154 +82.50225086928411 +0 +120 +absolute + + + +0.01 +smooth + +8.53604834544888 +47.34983986939598 +415.4668772672185 +-198.49665683306063 +82.53937735788749 +0 +120 +absolute + + + +0.01 +smooth + +8.53604850567072 +47.34983901804824 +415.4076426027364 +-198.52239505131703 +82.57649090902272 +0 +120 +absolute + + + +0.01 +smooth + +8.536048666612604 +47.34983816909357 +415.34835641057174 +-198.5480971382466 +82.61358397683324 +0 +120 +absolute + + + +0.01 +smooth + +8.536048828223732 +47.34983732267948 +415.28902715522116 +-198.57375831061145 +82.65064901546255 +0 +120 +absolute + + + +0.01 +smooth + +8.53604899045331 +47.34983647895345 +415.2296633011813 +-198.5993737851738 +82.68767847905421 +0 +120 +absolute + + + +0.01 +smooth + +8.536049153250538 +47.34983563806302 +415.17027331294884 +-198.62493877869565 +82.7246648217517 +0 +120 +absolute + + + +0.01 +smooth + +8.536049316564622 +47.34983480015571 +415.1108656550203 +-198.65044850793907 +82.76160049769854 +0 +120 +absolute + + + +0.01 +smooth + +8.53604948034476 +47.349833965379005 +415.05144879189214 +-198.67589818966624 +82.79847796103823 +0 +120 +absolute + + + +0.01 +smooth + +8.536049644540158 +47.34983313388043 +414.99203118806133 +-198.70128304063934 +82.83528966591432 +0 +120 +absolute + + + +0.01 +smooth + +8.53604980910002 +47.349832305807496 +414.932621308024 +-198.72659827762024 +82.87202806647029 +0 +120 +absolute + + + +0.01 +smooth + +8.536049973973547 +47.34983148130771 +414.87322761627735 +-198.75183911737128 +82.90868561684968 +0 +120 +absolute + + + +0.01 +smooth + +8.536050139109946 +47.34983066052858 +414.8138585773177 +-198.77700077665446 +82.94525477119596 +0 +120 +absolute + + + +0.01 +smooth + +8.536050304458419 +47.349829843617634 +414.75452265564167 +-198.8020784722319 +82.98172798365269 +0 +120 +absolute + + + +0.01 +smooth + +8.536050469968165 +47.349829030722375 +414.69522831574596 +-198.82706742086572 +83.01809770836337 +0 +120 +absolute + + + +0.01 +smooth + +8.536050635588394 +47.34982822199031 +414.63598402212705 +-198.85196283931793 +83.05435639947149 +0 +120 +absolute + + + +0.01 +smooth + +8.5360508012683 +47.34982741756893 +414.57679823928163 +-198.87675994435077 +83.09049651112055 +0 +120 +absolute + + + +0.01 +smooth + +8.536050966957093 +47.3498266176058 +414.51767943170637 +-198.9014539527263 +83.12651049745413 +0 +120 +absolute + + + +0.01 +smooth + +8.536051132603975 +47.34982582224838 +414.4586360638978 +-198.92604008120662 +83.16239081261568 +0 +120 +absolute + + + +0.01 +smooth + +8.536051298158148 +47.3498250316442 +414.39967660035273 +-198.95051354655388 +83.19812991074876 +0 +120 +absolute + + + +0.01 +smooth + +8.53605146356881 +47.34982424594076 +414.34080950556745 +-198.97486956552999 +83.2337202459968 +0 +120 +absolute + + + +0.01 +smooth + +8.536051628785176 +47.349823465285596 +414.2820432440389 +-198.9991033548973 +83.26915427250341 +0 +120 +absolute + + + +0.01 +smooth + +8.536051793756437 +47.34982268982619 +414.22338628026347 +-199.02321013141776 +83.30442444441208 +0 +120 +absolute + + + +0.01 +smooth + +8.536051958431804 +47.34982191971007 +414.1648470787379 +-199.04718511185354 +83.33952321586627 +0 +120 +absolute + + + +0.01 +smooth + +8.536052122760477 +47.34982115508474 +414.1064341039587 +-199.07102351296675 +83.37444304100953 +0 +120 +absolute + + + +0.01 +smooth + +8.53605228669166 +47.349820396097726 +414.04815582042266 +-199.09472055151946 +83.40917637398536 +0 +120 +absolute + + + +0.01 +smooth + +8.536052450174555 +47.34981964289653 +413.99002069262633 +-199.11827144427383 +83.4437156689373 +0 +120 +absolute + + + +0.01 +smooth + +8.536052613158366 +47.34981889562866 +413.9320371850663 +-199.1416714079919 +83.47805338000884 +0 +120 +absolute + + + +0.01 +smooth + +8.536052775592296 +47.349818154441614 +413.87421376223915 +-199.1649156594358 +83.5121819613435 +0 +120 +absolute + + + +0.01 +smooth + +8.536052937425548 +47.34981741948293 +413.8165588886415 +-199.18799941536767 +83.54609386708478 +0 +120 +absolute + + + +0.01 +smooth + +8.536053098607326 +47.3498166909001 +413.7590810287701 +-199.21091789254956 +83.57978155137621 +0 +120 +absolute + + + +0.01 +smooth + +8.53605325908683 +47.349815968840645 +413.70178864712136 +-199.2336663077436 +83.61323746836129 +0 +120 +absolute + + + +0.01 +smooth + +8.536053418813266 +47.34981525345207 +413.64469020819206 +-199.2562398777119 +83.64645407218353 +0 +120 +absolute + + + +0.01 +smooth + +8.536053577735835 +47.349814544881895 +413.58779417647884 +-199.27863381921657 +83.67942381698649 +0 +120 +absolute + + + +0.01 +smooth + +8.536053735803744 +47.349813843277616 +413.5311090164781 +-199.30084334901966 +83.7121391569136 +0 +120 +absolute + + + +0.01 +smooth + +8.53605389296619 +47.34981314878676 +413.4746431926868 +-199.32286368388333 +83.74459254610841 +0 +120 +absolute + + + +0.01 +smooth + +8.536054049172382 +47.34981246155682 +413.41840516960133 +-199.34469004056973 +83.77677643871445 +0 +120 +absolute + + + +0.01 +smooth + +8.536054204371517 +47.349811781735326 +413.36240341171833 +-199.36631763584086 +83.80868328887524 +0 +120 +absolute + + + +0.01 +smooth + +8.536054358512805 +47.34981110946978 +413.3066463835345 +-199.38774168645892 +83.84030555073426 +0 +120 +absolute + + + +0.01 +smooth + +8.536054511545444 +47.34981044490769 +413.2511425495463 +-199.40895740918592 +83.87163567843503 +0 +120 +absolute + + + +0.01 +smooth + +8.53605466341864 +47.34980978819657 +413.1959003742504 +-199.429960020784 +83.90266612612106 +0 +120 +absolute + + + +0.01 +smooth + +8.536054814081593 +47.349809139483945 +413.14092832214357 +-199.45074473801532 +83.93338934793587 +0 +120 +absolute + + + +0.01 +smooth + +8.536054963483508 +47.349808498917305 +413.0862348577222 +-199.47130677764193 +83.96379779802298 +0 +120 +absolute + + + +0.01 +smooth + +8.536055112065352 +47.34980786467031 +413.03173863170053 +-199.4917006905558 +83.99397278242455 +0 +120 +absolute + + + +0.01 +smooth + +8.536055260790784 +47.34980723282352 +412.9772635884306 +-199.5120437559613 +84.02408959327323 +0 +120 +absolute + + + +0.01 +smooth + +8.536055409640092 +47.349806603408595 +412.9228139049312 +-199.5323343210291 +84.05414546710777 +0 +120 +absolute + + + +0.01 +smooth + +8.53605555856284 +47.34980597658066 +412.86839938048104 +-199.55256702066796 +84.08413208204975 +0 +120 +absolute + + + +0.01 +smooth + +8.536055707508588 +47.3498053524948 +412.81402981435866 +-199.57273648978656 +84.11404111622079 +0 +120 +absolute + + + +0.01 +smooth + +8.536055856426897 +47.349804731306136 +412.7597150058428 +-199.59283736329365 +84.1438642477425 +0 +120 +absolute + + + +0.01 +smooth + +8.536056005267326 +47.34980411316976 +412.70546475421213 +-199.612864276098 +84.17359315473645 +0 +120 +absolute + + + +0.01 +smooth + +8.536056153979436 +47.34980349824078 +412.6512888587452 +-199.6328118631081 +84.20321951532426 +0 +120 +absolute + + + +0.01 +smooth + +8.536056302512792 +47.34980288667433 +412.597197118721 +-199.65267475923292 +84.23273500762758 +0 +120 +absolute + + + +0.01 +smooth + +8.536056450816943 +47.349802278625454 +412.54319933341776 +-199.67244759938092 +84.26213130976794 +0 +120 +absolute + + + +0.01 +smooth + +8.536056598841464 +47.34980167424932 +412.4893053021144 +-199.692125018461 +84.29140009986699 +0 +120 +absolute + + + +0.01 +smooth + +8.536056746535905 +47.34980107370099 +412.4355248240896 +-199.71170165138173 +84.32053305604634 +0 +120 +absolute + + + +0.01 +smooth + +8.536056893849834 +47.34980047713558 +412.38186769862193 +-199.73117213305187 +84.34952185642754 +0 +120 +absolute + + + +0.01 +smooth + +8.536057040732805 +47.3497998847082 +412.3283437249901 +-199.75053109838015 +84.37835817913226 +0 +120 +absolute + + + +0.01 +smooth + +8.536057187134379 +47.349799296573934 +412.27496270247264 +-199.76977318227526 +84.40703370228202 +0 +120 +absolute + + + +0.01 +smooth + +8.53605733300412 +47.349798712887925 +412.22173443034853 +-199.78889301964588 +84.43554010399852 +0 +120 +absolute + + + +0.01 +smooth + +8.536057478291587 +47.34979813380526 +412.16866870789624 +-199.80788524540077 +84.4638690624033 +0 +120 +absolute + + + +0.01 +smooth + +8.536057622946341 +47.34979755948102 +412.1157753343943 +-199.82674449444852 +84.49201225561796 +0 +120 +absolute + + + +0.01 +smooth + +8.53605776691794 +47.34979699007033 +412.06306410912174 +-199.84546540169796 +84.51996136176413 +0 +120 +absolute + + + +0.01 +smooth + +8.536057910155952 +47.3497964257283 +412.0105448313569 +-199.8640426020578 +84.54770805896342 +0 +120 +absolute + + + +0.01 +smooth + +8.536058052609926 +47.34979586661002 +411.95822730037855 +-199.88247073043658 +84.57524402533741 +0 +120 +absolute + + + +0.01 +smooth + +8.536058194229431 +47.349795312870604 +411.9061213154654 +-199.9007444217432 +84.6025609390077 +0 +120 +absolute + + + +0.01 +smooth + +8.536058334964027 +47.349794764665155 +411.854236675896 +-199.91885831088624 +84.62965047809593 +0 +120 +absolute + + + +0.01 +smooth + +8.536058474763268 +47.34979422214877 +411.8025831809491 +-199.93680703277445 +84.65650432072366 +0 +120 +absolute + + + +0.01 +smooth + +8.536058613576724 +47.34979368547657 +411.7511706299034 +-199.95458522231655 +84.6831141450125 +0 +120 +absolute + + + +0.01 +smooth + +8.536058751353945 +47.34979315480363 +411.70000882203755 +-199.9721875144212 +84.70947162908404 +0 +120 +absolute + + + +0.01 +smooth + +8.5360588880445 +47.34979263028508 +411.64910755663016 +-199.98960854399718 +84.73556845105992 +0 +120 +absolute + + + +0.01 +smooth + +8.536059023597947 +47.34979211207602 +411.5984766329599 +-200.00684294595308 +84.76139628906175 +0 +120 +absolute + + + +0.01 +smooth + +8.536059157963843 +47.34979160033154 +411.5481258503055 +-200.0238853551977 +84.78694682121109 +0 +120 +absolute + + + +0.01 +smooth + +8.536059291091753 +47.349791095206776 +411.49806500794546 +-200.0407304066397 +84.81221172562957 +0 +120 +absolute + + + +0.01 +smooth + +8.536059422931237 +47.34979059685679 +411.4483039051587 +-200.0573727351878 +84.83718268043879 +0 +120 +absolute + + + +0.01 +smooth + +8.536059553431853 +47.349790105436725 +411.3988523412237 +-200.07380697575076 +84.86185136376035 +0 +120 +absolute + + + +0.01 +smooth + +8.536059682543163 +47.349789621101664 +411.34972011541913 +-200.0900277632372 +84.88620945371585 +0 +120 +absolute + + + +0.01 +smooth + +8.536059810214729 +47.349789144006714 +411.30091702702373 +-200.10602973255584 +84.9102486284269 +0 +120 +absolute + + + +0.01 +smooth + +8.536059936396107 +47.34978867430698 +411.25245287531624 +-200.12180751861544 +84.93396056601509 +0 +120 +absolute + + + +0.01 +smooth + +8.536060061036864 +47.34978821215758 +411.2043374595751 +-200.1373557563246 +84.95733694460203 +0 +120 +absolute + + + +0.01 +smooth + +8.536060184086555 +47.349787757713585 +411.15658057907916 +-200.15266908059215 +84.98036944230934 +0 +120 +absolute + + + +0.01 +smooth + +8.536060305494741 +47.349787311130136 +411.10919203310704 +-200.16774212632674 +85.0030497372586 +0 +120 +absolute + + + +0.01 +smooth + +8.536060425210987 +47.34978687256232 +411.0621816209374 +-200.18256952843703 +85.02536950757143 +0 +120 +absolute + + + +0.01 +smooth + +8.536060543184849 +47.34978644216524 +411.0155591418488 +-200.1971459218318 +85.04732043136941 +0 +120 +absolute + + + +0.01 +smooth + +8.536060659365887 +47.349786020094 +410.96933439512014 +-200.21146594141976 +85.06889418677413 +0 +120 +absolute + + + +0.01 +smooth + +8.536060773703666 +47.349785606503715 +410.9235171800299 +-200.22552422210953 +85.09008245190726 +0 +120 +absolute + + + +0.01 +smooth + +8.536060886147743 +47.34978520154948 +410.8781172958568 +-200.23931539880985 +85.11087690489036 +0 +120 +absolute + + + +0.01 +smooth + +8.536060997333102 +47.34978480276468 +410.8330042936827 +-200.25291922109488 +85.13139722462472 +0 +120 +absolute + + + +0.01 +smooth + +8.53606110839757 +47.349784405753645 +410.78794621030835 +-200.26647789295507 +85.15185702060131 +0 +120 +absolute + + + +0.01 +smooth + +8.536061219308007 +47.34978401059553 +410.7429517120599 +-200.27998821587144 +85.17225124264552 +0 +120 +absolute + + + +0.01 +smooth + +8.536061330009892 +47.34978361745113 +410.6980338450297 +-200.29344433887306 +85.1925708517098 +0 +120 +absolute + + + +0.01 +smooth + +8.53606144044871 +47.34978322648126 +410.6532056553106 +-200.3068404109891 +85.21280680874663 +0 +120 +absolute + + + +0.01 +smooth + +8.53606155056995 +47.34978283784669 +410.60848018899475 +-200.32017058124885 +85.23295007470851 +0 +120 +absolute + + + +0.01 +smooth + +8.536061660319104 +47.349782451708265 +410.56387049217483 +-200.33342899868137 +85.25299161054791 +0 +120 +absolute + + + +0.01 +smooth + +8.536061769641652 +47.34978206822675 +410.51938961094356 +-200.3466098123159 +85.27292237721733 +0 +120 +absolute + + + +0.01 +smooth + +8.536061878483084 +47.34978168756298 +410.47505059139326 +-200.35970717118164 +85.29273333566925 +0 +120 +absolute + + + +0.01 +smooth + +8.536061986788885 +47.349781309877734 +410.4308664796165 +-200.37271522430768 +85.31241544685606 +0 +120 +absolute + + + +0.01 +smooth + +8.536062094504546 +47.34978093533182 +410.38685032170594 +-200.38562812072328 +85.3319596717304 +0 +120 +absolute + + + +0.01 +smooth + +8.53606220157555 +47.349780564086046 +410.3430151637539 +-200.3984400094576 +85.35135697124466 +0 +120 +absolute + + + +0.01 +smooth + +8.536062307947384 +47.349780196301204 +410.299374051853 +-200.4111450395398 +85.37059830635131 +0 +120 +absolute + + + +0.01 +smooth + +8.536062413565539 +47.349779832138104 +410.2559400320959 +-200.42373735999914 +85.38967463800287 +0 +120 +absolute + + + +0.01 +smooth + +8.536062518375498 +47.34977947175757 +410.2127261505751 +-200.43621111986462 +85.40857692715181 +0 +120 +absolute + + + +0.01 +smooth + +8.536062622322747 +47.34977911532035 +410.16974545338286 +-200.4485604681656 +85.4272961347506 +0 +120 +absolute + + + +0.01 +smooth + +8.536062725352778 +47.3497787629873 +410.1270109866121 +-200.46077955393116 +85.44582322175177 +0 +120 +absolute + + + +0.01 +smooth + +8.536062827411076 +47.3497784149192 +410.0845357963551 +-200.4728625261905 +85.46414914910773 +0 +120 +absolute + + + +0.01 +smooth + +8.536062928443124 +47.34977807127685 +410.0423329287046 +-200.48480353397284 +85.48226487777103 +0 +120 +absolute + + + +0.01 +smooth + +8.536063028394414 +47.34977773222106 +410.0004154297528 +-200.49659672630725 +85.50016136869411 +0 +120 +absolute + + + +0.01 +smooth + +8.536063127210431 +47.34977739791263 +409.9587963455927 +-200.50823625222304 +85.51782958282945 +0 +120 +absolute + + + +0.01 +smooth + +8.536063224836663 +47.349777068512374 +409.91748872231653 +-200.51971626074936 +85.53526048112958 +0 +120 +absolute + + + +0.01 +smooth + +8.536063321218597 +47.349776744181064 +409.8765056060168 +-200.53103090091534 +85.55244502454693 +0 +120 +absolute + + + +0.01 +smooth + +8.536063416301717 +47.34977642507954 +409.8358600427862 +-200.54217432175017 +85.56937417403402 +0 +120 +absolute + + + +0.01 +smooth + +8.536063510031513 +47.34977611136857 +409.7955650787172 +-200.55314067228306 +85.5860388905433 +0 +120 +absolute + + + +0.01 +smooth + +8.53606360235347 +47.349775803208985 +409.75563375990225 +-200.56392410154314 +85.60243013502726 +0 +120 +absolute + + + +0.01 +smooth + +8.536063693213077 +47.34977550076156 +409.716079132434 +-200.57451875855963 +85.6185388684384 +0 +120 +absolute + + + +0.01 +smooth + +8.53606378255582 +47.349775204187125 +409.6769142424049 +-200.5849187923617 +85.63435605172921 +0 +120 +absolute + + + +0.01 +smooth + +8.536063870327185 +47.34977491364646 +409.6381521359077 +-200.5951183519785 +85.64987264585213 +0 +120 +absolute + + + +0.01 +smooth + +8.53606395647266 +47.34977462930039 +409.5998058590346 +-200.60511158643925 +85.66507961175967 +0 +120 +absolute + + + +0.01 +smooth + +8.536064040937731 +47.3497743513097 +409.56188845787835 +-200.61489264477314 +85.67996791040432 +0 +120 +absolute + + + +0.01 +smooth + +8.536064123667886 +47.3497740798352 +409.5244129785315 +-200.6244556760093 +85.69452850273854 +0 +120 +absolute + + + +0.01 +smooth + +8.536064204608612 +47.34977381503769 +409.4873924670864 +-200.6337948291769 +85.70875234971484 +0 +120 +absolute + + + +0.01 +smooth + +8.536064283705397 +47.34977355707798 +409.4508399696358 +-200.64290425330518 +85.72263041228567 +0 +120 +absolute + + + +0.01 +smooth + +8.536064360903724 +47.34977330611686 +409.4147685322721 +-200.65177809742326 +85.73615365140353 +0 +120 +absolute + + + +0.01 +smooth + +8.536064436149085 +47.34977306231514 +409.3791912010879 +-200.66041051056035 +85.74931302802091 +0 +120 +absolute + + + +0.01 +smooth + +8.536064509386964 +47.34977282583361 +409.34412102217567 +-200.66879564174567 +85.76209950309028 +0 +120 +absolute + + + +0.01 +smooth + +8.536064580562847 +47.34977259683309 +409.30957104162803 +-200.6769276400083 +85.77450403756413 +0 +120 +absolute + + + +0.01 +smooth + +8.536064649622222 +47.34977237547439 +409.2755543055374 +-200.68480065437748 +85.78651759239493 +0 +120 +absolute + + + +0.01 +smooth + +8.53606471651058 +47.34977216191828 +409.2420838599965 +-200.6924088338824 +85.79813112853516 +0 +120 +absolute + + + +0.01 +smooth + +8.536064781173401 +47.34977195632558 +409.20917275109775 +-200.69974632755225 +85.80933560693734 +0 +120 +absolute + + + +0.01 +smooth + +8.53606484355618 +47.34977175885711 +409.17683402493356 +-200.7068072844161 +85.82012198855391 +0 +120 +absolute + + + +0.01 +smooth + +8.536064903604393 +47.34977156967364 +409.14508072759673 +-200.71358585350325 +85.83048123433737 +0 +120 +absolute + + + +0.01 +smooth + +8.536064962221175 +47.34977138574504 +409.11366113380524 +-200.72018737042944 +85.84057352489566 +0 +120 +absolute + + + +0.01 +smooth + +8.536065020750122 +47.349771202568185 +409.0822082009125 +-200.72676839607365 +85.85063699905746 +0 +120 +absolute + + + +0.01 +smooth + +8.536065079153598 +47.34977102023905 +409.0507410439648 +-200.73332517613082 +85.86066580261806 +0 +120 +absolute + + + +0.01 +smooth + +8.536065137382145 +47.34977083889294 +409.01928206237966 +-200.73985258483015 +85.87065199407037 +0 +120 +absolute + + + +0.01 +smooth + +8.536065195386309 +47.349770658665165 +408.98785365557467 +-200.7463454964013 +85.88058763190726 +0 +120 +absolute + + + +0.01 +smooth + +8.536065253116636 +47.34977047969108 +408.95647822296763 +-200.7527987850736 +85.89046477462175 +0 +120 +absolute + + + +0.01 +smooth + +8.536065310523666 +47.34977030210595 +408.92517816397594 +-200.7592073250765 +85.9002754807067 +0 +120 +absolute + + + +0.01 +smooth + +8.536065367557951 +47.349770126045115 +408.89397587801733 +-200.7655659906396 +85.91001180865509 +0 +120 +absolute + + + +0.01 +smooth + +8.536065424170033 +47.34976995164391 +408.86289376450947 +-200.77186965599216 +85.91966581695978 +0 +120 +absolute + + + +0.01 +smooth + +8.536065480310453 +47.3497697790376 +408.8319542228697 +-200.77811319536374 +85.92922956411373 +0 +120 +absolute + + + +0.01 +smooth + +8.53606553592976 +47.349769608361555 +408.8011796525157 +-200.78429148298383 +85.93869510860989 +0 +120 +absolute + + + +0.01 +smooth + +8.536065590978495 +47.34976943975104 +408.7705924528652 +-200.79039939308174 +85.94805450894113 +0 +120 +absolute + + + +0.01 +smooth + +8.536065645407211 +47.34976927334141 +408.7402150233357 +-200.79643179988713 +85.95729982360044 +0 +120 +absolute + + + +0.01 +smooth + +8.536065699166441 +47.349769109267946 +408.7100697633447 +-200.80238357762917 +85.96642311108067 +0 +120 +absolute + + + +0.01 +smooth + +8.536065752206737 +47.349768947665986 +408.68017907231 +-200.80824960053752 +85.9754164298748 +0 +120 +absolute + + + +0.01 +smooth + +8.536065804478644 +47.34976878867086 +408.6505653496491 +-200.81402474284164 +85.98427183847576 +0 +120 +absolute + + + +0.01 +smooth + +8.536065855932703 +47.34976863241784 +408.62125099477964 +-200.81970387877092 +85.99298139537645 +0 +120 +absolute + + + +0.01 +smooth + +8.536065906519465 +47.34976847904227 +408.5922584071191 +-200.8252818825548 +86.00153715906981 +0 +120 +absolute + + + +0.01 +smooth + +8.536065956189464 +47.34976832867946 +408.56360998608517 +-200.8307536284227 +86.00993118804874 +0 +120 +absolute + + + +0.01 +smooth + +8.536066004893256 +47.34976818146472 +408.5353281310954 +-200.8361139906042 +86.01815554080619 +0 +120 +absolute + + + +0.01 +smooth + +8.536066052581377 +47.34976803753337 +408.50743524156735 +-200.8413578433286 +86.02620227583508 +0 +120 +absolute + + + +0.01 +smooth + +8.536066099204378 +47.34976789702073 +408.4799537169188 +-200.84648006082548 +86.03406345162834 +0 +120 +absolute + + + +0.01 +smooth + +8.536066144712802 +47.349767760062115 +408.45290595656724 +-200.85147551732427 +86.04173112667888 +0 +120 +absolute + + + +0.01 +smooth + +8.536066189057195 +47.349767626792826 +408.4263143599302 +-200.85633908705438 +86.04919735947966 +0 +120 +absolute + + + +0.01 +smooth + +8.536066232188098 +47.34976749734819 +408.4002013264253 +-200.86106564424526 +86.05645420852358 +0 +120 +absolute + + + +0.01 +smooth + +8.536066274056056 +47.34976737186352 +408.3745892554702 +-200.86565006312637 +86.06349373230356 +0 +120 +absolute + + + +0.01 +smooth + +8.53606631461162 +47.34976725047412 +408.34950054648255 +-200.8700872179272 +86.07030798931255 +0 +120 +absolute + + + +0.01 +smooth + +8.536066353805328 +47.34976713331533 +408.32495759887985 +-200.87437198287716 +86.07688903804346 +0 +120 +absolute + + + +0.01 +smooth + +8.536066391587728 +47.34976702052245 +408.3009828120797 +-200.87849923220568 +86.0832289369892 +0 +120 +absolute + + + +0.01 +smooth + +8.536066427909363 +47.349766912230805 +408.2775985854996 +-200.88246384014232 +86.08931974464272 +0 +120 +absolute + + + +0.01 +smooth + +8.536066462720779 +47.34976680857568 +408.25482731855743 +-200.88626068091642 +86.09515351949693 +0 +120 +absolute + + + +0.01 +smooth + +8.53606649597252 +47.34976670969242 +408.23269141067055 +-200.8898846287575 +86.1007223200448 +0 +120 +absolute + + + +0.01 +smooth + +8.536066527615132 +47.34976661571635 +408.2112132612566 +-200.893330557895 +86.10601820477919 +0 +120 +absolute + + + +0.01 +smooth + +8.53606655759916 +47.349766526782744 +408.19041526973325 +-200.89659334255833 +86.11103323219305 +0 +120 +absolute + + + +0.01 +smooth + +8.536066585875144 +47.34976644302695 +408.17031983551806 +-200.89966785697698 +86.11575946077932 +0 +120 +absolute + + + +0.01 +smooth + +8.536066612393634 +47.34976636458427 +408.1509493580285 +-200.90254897538043 +86.12018894903092 +0 +120 +absolute + + + +0.01 +smooth + +8.536066637105176 +47.34976629159003 +408.1323262366824 +-200.90523157199806 +86.12431375544077 +0 +120 +absolute + + + +0.01 +smooth + +8.536066659960309 +47.349766224179525 +408.11447287089726 +-200.90771052105939 +86.12812593850181 +0 +120 +absolute + + + +0.01 +smooth + +8.536066680909581 +47.34976616248808 +408.09741166009053 +-200.9099806967938 +86.13161755670694 +0 +120 +absolute + + + +0.01 +smooth + +8.536066699903538 +47.34976610665103 +408.08116500368004 +-200.91203697343087 +86.13478066854908 +0 +120 +absolute + + + +0.01 +smooth + +8.536066716892721 +47.34976605680366 +408.0657553010833 +-200.9138742251999 +86.13760733252121 +0 +120 +absolute + + + +0.01 +smooth + +8.53606673182768 +47.349766013081314 +408.0512049517178 +-200.9154873263304 +86.14008960711621 +0 +120 +absolute + + + +0.01 +smooth + +8.536066744658953 +47.34976597561928 +408.03753635500124 +-200.91687115105185 +86.14221955082702 +0 +120 +absolute + + + +0.01 +smooth + +8.536066756251563 +47.34976594184262 +408.0243663981205 +-200.91811998698932 +86.14414205276915 +0 +120 +absolute + + + +0.01 +smooth + +8.536066767693125 +47.349765908523075 +408.01121976429874 +-200.91935217749355 +86.1460390189729 +0 +120 +absolute + + + +0.01 +smooth + +8.53606677898017 +47.3497658756698 +407.99810872407136 +-200.92056736924786 +86.14790990067665 +0 +120 +absolute + + + +0.01 +smooth + +8.536066790106714 +47.34976584329943 +407.9850466675225 +-200.92176493542672 +86.14975372867042 +0 +120 +absolute + + + +0.01 +smooth + +8.536066801066776 +47.34976581142857 +407.9720469847364 +-200.92294424920456 +86.15156953374428 +0 +120 +absolute + + + +0.01 +smooth + +8.536066811854365 +47.349765780073874 +407.95912306579686 +-200.92410468375593 +86.15335634668817 +0 +120 +absolute + + + +0.01 +smooth + +8.536066822463498 +47.34976574925192 +407.94628830078796 +-200.92524561225517 +86.15511319829216 +0 +120 +absolute + + + +0.01 +smooth + +8.536066832888194 +47.34976571897939 +407.933556079794 +-200.92636640787694 +86.15683911934627 +0 +120 +absolute + + + +0.01 +smooth + +8.53606684312246 +47.34976568927284 +407.92093979289893 +-200.92746644379554 +86.15853314064047 +0 +120 +absolute + + + +0.01 +smooth + +8.536066853160321 +47.34976566014895 +407.9084528301869 +-200.9285450931856 +86.16019429296483 +0 +120 +absolute + + + +0.01 +smooth + +8.536066862995789 +47.34976563162432 +407.8961085817421 +-200.9296017292215 +86.16182160710939 +0 +120 +absolute + + + +0.01 +smooth + +8.536066872622879 +47.34976560371557 +407.8839204376484 +-200.9306357250778 +86.16341411386409 +0 +120 +absolute + + + +0.01 +smooth + +8.536066882035602 +47.34976557643934 +407.87190178799017 +-200.93164645392883 +86.16497084401901 +0 +120 +absolute + + + +0.01 +smooth + +8.53606689122798 +47.34976554981225 +407.8600660228513 +-200.93263328894923 +86.16649082836416 +0 +120 +absolute + + + +0.01 +smooth + +8.536066900194024 +47.3497655238509 +407.8484265323158 +-200.93359560331334 +86.16797309768953 +0 +120 +absolute + + + +0.01 +smooth + +8.536066908927753 +47.34976549857193 +407.8369967064681 +-200.93453277019577 +86.16941668278515 +0 +120 +absolute + + + +0.01 +smooth + +8.536066917423177 +47.34976547399196 +407.8257899353919 +-200.93544416277092 +86.17082061444106 +0 +120 +absolute + + + +0.01 +smooth + +8.53606692567432 +47.34976545012763 +407.81481960917165 +-200.93632915421333 +86.17218392344726 +0 +120 +absolute + + + +0.01 +smooth + +8.536066933675183 +47.349765426995525 +407.80409911789104 +-200.9371871176973 +86.17350564059376 +0 +120 +absolute + + + +0.01 +smooth + +8.536066941419795 +47.3497654046123 +407.7936418516345 +-200.9380174263975 +86.17478479667062 +0 +120 +absolute + + + +0.01 +smooth + +8.536066948902166 +47.34976538299459 +407.78346120048604 +-200.93881945348832 +86.17602042246781 +0 +120 +absolute + + + +0.01 +smooth + +8.536066956116311 +47.34976536215897 +407.77357055452956 +-200.9395925721442 +86.17721154877536 +0 +120 +absolute + + + +0.01 +smooth + +8.536066963056246 +47.3497653421221 +407.7639833038494 +-200.94033615553968 +86.17835720638332 +0 +120 +absolute + + + +0.01 +smooth + +8.536066969715986 +47.349765322900595 +407.75471283852954 +-200.94104957684928 +86.17945642608167 +0 +120 +absolute + + + +0.01 +smooth + +8.536066976089545 +47.34976530451108 +407.74577254865403 +-200.94173220924736 +86.18050823866045 +0 +120 +absolute + + + +0.01 +smooth + +8.536066982170942 +47.34976528697018 +407.73717582430714 +-200.94238342590847 +86.18151167490967 +0 +120 +absolute + + + +0.01 +smooth + +8.53606698795419 +47.34976527029451 +407.72893605557283 +-200.9430026000071 +86.18246576561936 +0 +120 +absolute + + + +0.01 +smooth + +8.536066993433304 +47.349765254500696 +407.72106663253516 +-200.94358910471766 +86.18336954157951 +0 +120 +absolute + + + +0.01 +smooth + +8.5360669986023 +47.34976523960537 +407.71358094527824 +-200.9441423132147 +86.18422203358018 +0 +120 +absolute + + + +0.01 +smooth + +8.536067003455194 +47.34976522562515 +407.70649238388626 +-200.94466159867267 +86.18502227241137 +0 +120 +absolute + + + +0.01 +smooth + +8.536067007985997 +47.34976521257664 +407.69981433844305 +-200.945146334266 +86.18576928886307 +0 +120 +absolute + + + +0.01 +smooth + +8.53606701218873 +47.349765200476504 +407.69356019903313 +-200.94559589316924 +86.18646211372536 +0 +120 +absolute + + + +0.01 +smooth + +8.536067016057405 +47.34976518934133 +407.68774335574017 +-200.9460096485568 +86.1870997777882 +0 +120 +absolute + + + +0.01 +smooth + +8.536067019586039 +47.349765179187756 +407.6823771986485 +-200.94638697360318 +86.18768131184163 +0 +120 +absolute + + + +0.01 +smooth + +8.536067022768647 +47.349765170032406 +407.67747511784216 +-200.9467272414829 +86.18820574667569 +0 +120 +absolute + + + +0.01 +smooth + +8.536067025599243 +47.349765161891895 +407.6730505034052 +-200.94702982537035 +86.18867211308037 +0 +120 +absolute + + + +0.01 +smooth + +8.536067028071844 +47.34976515478286 +407.6691167454217 +-200.94729409844012 +86.1890794418457 +0 +120 +absolute + + + +0.01 +smooth + +8.536067030180464 +47.349765148721914 +407.66568723397586 +-200.9475194338666 +86.1894267637617 +0 +120 +absolute + + + +0.01 +smooth + +8.536067031919119 +47.349765143725676 +407.6627753591516 +-200.94770520482427 +86.18971310961837 +0 +120 +absolute + + + +0.01 +smooth + +8.536067033281823 +47.34976513981078 +407.66039451103325 +-200.94785078448766 +86.18993751020577 +0 +120 +absolute + + + +0.01 +smooth + +8.536067034262592 +47.34976513699384 +407.65855807970473 +-200.94795554603118 +86.19009899631389 +0 +120 +absolute + + + +0.01 +smooth + +8.536067034855444 +47.349765135291484 +407.65727945525003 +-200.9480188626293 +86.19019659873273 +0 +120 +absolute + + + +0.01 +smooth + +8.53606703505439 +47.34976513472034 +407.65657202775355 +-200.94804010745662 +86.19022934825234 +0 +120 +absolute + + + + + + diff --git a/parameter-learning_nd_disc/kmls/saffa.kml b/parameter-learning_nd_disc/kmls/saffa.kml new file mode 100755 index 0000000..00295df --- /dev/null +++ b/parameter-learning_nd_disc/kmls/saffa.kml @@ -0,0 +1,23252 @@ + + + + + +Tour + + +0.01 +smooth + +8.536348154452593 +47.34969652396877 +412.35755233845094 +14.0290626583571 +88.46603184312883 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815433275 +47.34969652393905 +412.35815092098494 +14.029073686345917 +88.46603395117614 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815397688 +47.34969652385084 +412.35948744455135 +14.029106448585653 +88.46604021312702 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815339046 +47.34969652370542 +412.3615345136845 +14.029160462486212 +88.46605053569476 +0 +120 +absolute + + + +0.01 +smooth + +8.536348152578977 +47.34969652350416 +412.3642647329194 +14.029235245457528 +88.4660648255928 +0 +120 +absolute + + + +0.01 +smooth + +8.536348151547909 +47.349696523248355 +412.3676507067905 +14.029330314909503 +88.4660829895344 +0 +120 +absolute + + + +0.01 +smooth + +8.536348150302747 +47.34969652293936 +412.37166503983275 +14.02944518825206 +88.46610493423294 +0 +120 +absolute + + + +0.01 +smooth + +8.536348148848969 +47.34969652257852 +412.3762803365807 +14.02957938289512 +88.46613056640184 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814719206 +47.34969652216715 +412.38146920156896 +14.029732416248592 +88.4661597927544 +0 +120 +absolute + + + +0.01 +smooth + +8.536348145337499 +47.34969652170657 +412.38720423933216 +14.029903805722393 +88.46619252000391 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814329077 +47.34969652119811 +412.39345805440496 +14.030093068726444 +88.46622865486383 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814105736 +47.34969652064314 +412.40020325132247 +14.030299722670662 +88.46626810404746 +0 +120 +absolute + + + +0.01 +smooth + +8.536348138642747 +47.349696520042954 +412.4074124346189 +14.030523284964962 +88.46631077426817 +0 +120 +absolute + + + +0.01 +smooth + +8.536348136052418 +47.349696519398904 +412.4150582088292 +14.030763273019257 +88.46635657223928 +0 +120 +absolute + + + +0.01 +smooth + +8.536348133291854 +47.34969651871232 +412.4231131784879 +14.031019204243474 +88.46640540467418 +0 +120 +absolute + + + +0.01 +smooth + +8.536348130366537 +47.34969651798452 +412.43154994812977 +14.031290596047516 +88.4664571782862 +0 +120 +absolute + + + +0.01 +smooth + +8.53634812728195 +47.34969651721684 +412.44034112228945 +14.031576965841314 +88.46651179978869 +0 +120 +absolute + + + +0.01 +smooth + +8.53634812404358 +47.34969651641062 +412.44945930550165 +14.03187783103477 +88.46656917589503 +0 +120 +absolute + + + +0.01 +smooth + +8.536348120656903 +47.34969651556719 +412.458877102301 +14.032192709037812 +88.46662921331856 +0 +120 +absolute + + + +0.01 +smooth + +8.536348117127408 +47.34969651468789 +412.4685671172223 +14.032521117260355 +88.46669181877262 +0 +120 +absolute + + + +0.01 +smooth + +8.536348113460573 +47.34969651377403 +412.47850195480015 +14.032862573112311 +88.46675689897056 +0 +120 +absolute + + + +0.01 +smooth + +8.536348109661885 +47.34969651282695 +412.4886542195692 +14.0332165940036 +88.46682436062575 +0 +120 +absolute + + + +0.01 +smooth + +8.536348105736824 +47.349696511847995 +412.4989965160642 +14.033582697344139 +88.46689411045153 +0 +120 +absolute + + + +0.01 +smooth + +8.536348101690876 +47.349696510838484 +412.50950144881983 +14.033960400543842 +88.4669660551613 +0 +120 +absolute + + + +0.01 +smooth + +8.53634809752952 +47.34969650979974 +412.5201416223708 +14.034349221012631 +88.46704010146831 +0 +120 +absolute + + + +0.01 +smooth + +8.536348093258244 +47.349696508733125 +412.53088964125163 +14.034748676160417 +88.46711615608602 +0 +120 +absolute + + + +0.01 +smooth + +8.536348088882523 +47.34969650763995 +412.54171810999725 +14.03515828339712 +88.46719412572772 +0 +120 +absolute + + + +0.01 +smooth + +8.536348084407848 +47.34969650652154 +412.5525996331421 +14.035577560132657 +88.46727391710677 +0 +120 +absolute + + + +0.01 +smooth + +8.53634807976364 +47.34969650535996 +412.56357796141157 +14.036013371720559 +88.46735682248489 +0 +120 +absolute + + + +0.01 +smooth + +8.536348074063994 +47.34969650393043 +412.5754656818743 +14.03655146708096 +88.46745900387448 +0 +120 +absolute + + + +0.01 +smooth + +8.53634806708885 +47.34969650217669 +412.58846529550107 +14.037213511320145 +88.4675845296821 +0 +120 +absolute + + + +0.01 +smooth + +8.536348058883258 +47.34969650010964 +412.6025327484782 +14.037995584597057 +88.46773264284545 +0 +120 +absolute + + + +0.01 +smooth + +8.536348049492267 +47.349696497740204 +412.6176239869925 +14.038893767070663 +88.46790258630233 +0 +120 +absolute + + + +0.01 +smooth + +8.536348038960934 +47.349696495079286 +412.63369495723015 +14.039904138899914 +88.4680936029905 +0 +120 +absolute + + + +0.01 +smooth + +8.536348027334311 +47.3496964921378 +412.6507016053778 +14.041022780243757 +88.46830493584767 +0 +120 +absolute + + + +0.01 +smooth + +8.536348014657445 +47.349696488926675 +412.6685998776217 +14.042245771261161 +88.46853582781165 +0 +120 +absolute + + + +0.01 +smooth + +8.536348000975389 +47.34969648545681 +412.6873457201486 +14.043569192111066 +88.46878552182011 +0 +120 +absolute + + + +0.01 +smooth + +8.536347986333196 +47.3496964817391 +412.70689507914466 +14.044989122952433 +88.46905326081087 +0 +120 +absolute + + + +0.01 +smooth + +8.536347970775914 +47.34969647778448 +412.72720390079655 +14.046501643944218 +88.46933828772163 +0 +120 +absolute + + + +0.01 +smooth + +8.536347954348601 +47.349696473603856 +412.74822813129066 +14.04810283524537 +88.46963984549019 +0 +120 +absolute + + + +0.01 +smooth + +8.536347937096306 +47.34969646920813 +412.7699237168135 +14.049788777014847 +88.46995717705428 +0 +120 +absolute + + + +0.01 +smooth + +8.536347919064076 +47.34969646460824 +412.79224660355146 +14.0515555494116 +88.47028952535166 +0 +120 +absolute + + + +0.01 +smooth + +8.536347900296969 +47.349696459815064 +412.815152737691 +14.053399232594584 +88.47063613332003 +0 +120 +absolute + + + +0.01 +smooth + +8.536347880840033 +47.34969645483954 +412.83859806541864 +14.055315906722758 +88.47099624389722 +0 +120 +absolute + + + +0.01 +smooth + +8.536347860738323 +47.349696449692566 +412.8625385329209 +14.057301651955072 +88.47136910002092 +0 +120 +absolute + + + +0.01 +smooth + +8.536347840036886 +47.34969644438506 +412.88693008638415 +14.059352548450484 +88.47175394462892 +0 +120 +absolute + + + +0.01 +smooth + +8.536347818780776 +47.34969643892795 +412.91172867199487 +14.061464676367944 +88.47215002065897 +0 +120 +absolute + + + +0.01 +smooth + +8.536347797015047 +47.34969643333211 +412.93689023593953 +14.063634115866407 +88.47255657104878 +0 +120 +absolute + + + +0.01 +smooth + +8.536347774784748 +47.34969642760849 +412.96237072440465 +14.06585694710483 +88.47297283873615 +0 +120 +absolute + + + +0.01 +smooth + +8.53634775213493 +47.34969642176797 +412.9881260835765 +14.068129250242162 +88.47339806665882 +0 +120 +absolute + + + +0.01 +smooth + +8.536347729110645 +47.34969641582149 +413.0141122596418 +14.070447105437365 +88.47383149775453 +0 +120 +absolute + + + +0.01 +smooth + +8.536347705756949 +47.34969640977995 +413.0402851987869 +14.072806592849386 +88.47427237496103 +0 +120 +absolute + + + +0.01 +smooth + +8.536347682118887 +47.349696403654264 +413.0666008471983 +14.075203792637184 +88.47471994121608 +0 +120 +absolute + + + +0.01 +smooth + +8.536347658241514 +47.34969639745534 +413.09301515106233 +14.077634784959713 +88.47517343945742 +0 +120 +absolute + + + +0.01 +smooth + +8.536347634169882 +47.34969639119409 +413.11948405656557 +14.080095649975924 +88.47563211262282 +0 +120 +absolute + + + +0.01 +smooth + +8.536347609949038 +47.349696384881426 +413.1459635098944 +14.082582467844775 +88.47609520365 +0 +120 +absolute + + + +0.01 +smooth + +8.536347585232276 +47.3496963784213 +413.1726199867664 +14.085135704202896 +88.47656997886385 +0 +120 +absolute + + + +0.01 +smooth + +8.53634755893377 +47.34969637151605 +413.20002858973027 +14.08787940755074 +88.47707882657683 +0 +120 +absolute + + + +0.01 +smooth + +8.536347531035734 +47.349696364160124 +413.22820244152166 +14.090816462917768 +88.4776222464916 +0 +120 +absolute + + + +0.01 +smooth + +8.536347501592468 +47.34969635636757 +413.25711627803287 +14.093941582377472 +88.47819926132411 +0 +120 +absolute + + + +0.01 +smooth + +8.536347470658287 +47.34969634815249 +413.2867448351556 +14.09724947800335 +88.47880889379023 +0 +120 +absolute + + + +0.01 +smooth + +8.536347438287489 +47.349696339529 +413.3170628487823 +14.100734861868915 +88.47945016660597 +0 +120 +absolute + + + +0.01 +smooth + +8.536347404534386 +47.349696330511144 +413.3480450548046 +14.104392446047648 +88.48012210248723 +0 +120 +absolute + + + +0.01 +smooth + +8.536347369453274 +47.349696321113015 +413.3796661891145 +14.108216942613055 +88.48082372414996 +0 +120 +absolute + + + +0.01 +smooth + +8.536347333098472 +47.34969631134872 +413.4119009876042 +14.112203063638635 +88.4815540543101 +0 +120 +absolute + + + +0.01 +smooth + +8.536347295524276 +47.349696301232335 +413.4447241861655 +14.116345521197887 +88.48231211568357 +0 +120 +absolute + + + +0.01 +smooth + +8.536347256784994 +47.34969629077795 +413.4781105206906 +14.12063902736431 +88.4830969309863 +0 +120 +absolute + + + +0.01 +smooth + +8.536347216934933 +47.34969627999964 +413.51203472707147 +14.125078294211399 +88.48390752293429 +0 +120 +absolute + + + +0.01 +smooth + +8.536347176028398 +47.34969626891151 +413.5464715412 +14.129658033812653 +88.4847429142434 +0 +120 +absolute + + + +0.01 +smooth + +8.536347134119696 +47.34969625752764 +413.5813956989683 +14.134372958241578 +88.48560212762962 +0 +120 +absolute + + + +0.01 +smooth + +8.536347091263131 +47.349696245862106 +413.6167819362683 +14.139217779571661 +88.48648418580886 +0 +120 +absolute + + + +0.01 +smooth + +8.53634704751301 +47.34969623392901 +413.6526049889921 +14.144187209876408 +88.48738811149708 +0 +120 +absolute + + + +0.01 +smooth + +8.53634700292364 +47.34969622174245 +413.6888395930317 +14.14927596122932 +88.48831292741022 +0 +120 +absolute + + + +0.01 +smooth + +8.536346957549323 +47.34969620931649 +413.725460484279 +14.15447874570389 +88.48925765626419 +0 +120 +absolute + + + +0.01 +smooth + +8.536346911444367 +47.34969619666522 +413.76244239862615 +14.159790275373618 +88.49022132077496 +0 +120 +absolute + + + +0.01 +smooth + +8.53634686466308 +47.349696183802735 +413.79976007196495 +14.165205262312007 +88.49120294365845 +0 +120 +absolute + + + +0.01 +smooth + +8.536346817259766 +47.34969617074312 +413.8373882401877 +14.17071841859255 +88.49220154763059 +0 +120 +absolute + + + +0.01 +smooth + +8.536346769288729 +47.349696157500475 +413.87530163918615 +14.176324456288746 +88.49321615540734 +0 +120 +absolute + + + +0.01 +smooth + +8.536346720804275 +47.34969614408885 +413.91347500485233 +14.182018087474098 +88.49424578970462 +0 +120 +absolute + + + +0.01 +smooth + +8.536346671860713 +47.349696130522375 +413.95188307307853 +14.187794024222098 +88.49528947323836 +0 +120 +absolute + + + +0.01 +smooth + +8.536346622512344 +47.34969611681511 +413.9905005797564 +14.193646978606255 +88.49634622872453 +0 +120 +absolute + + + +0.01 +smooth + +8.536346572813478 +47.34969610298115 +414.0293022607781 +14.199571662700055 +88.49741507887906 +0 +120 +absolute + + + +0.01 +smooth + +8.53634652281842 +47.34969608903458 +414.06826285203556 +14.205562788577007 +88.49849504641786 +0 +120 +absolute + + + +0.01 +smooth + +8.536346472579678 +47.34969607498898 +414.1073577299254 +14.211615315345055 +88.49958519653084 +0 +120 +absolute + + + +0.01 +smooth + +8.53634642136528 +47.34969606062494 +414.1468434213787 +14.217832066396312 +88.50070314701608 +0 +120 +absolute + + + +0.01 +smooth + +8.53634636858247 +47.34969604576499 +414.18693166424845 +14.224296518178448 +88.50186321437882 +0 +120 +absolute + + + +0.01 +smooth + +8.536346314286966 +47.349696030424276 +414.2276039975793 +14.231002894216646 +88.50306437507678 +0 +120 +absolute + + + +0.01 +smooth + +8.536346258534495 +47.34969601461802 +414.26884196041675 +14.237945418036094 +88.50430560556782 +0 +120 +absolute + + + +0.01 +smooth + +8.536346201380779 +47.349695998361355 +414.3106270918055 +14.245118313161983 +88.5055858823097 +0 +120 +absolute + + + +0.01 +smooth + +8.53634614288154 +47.3496959816695 +414.35294093079045 +14.252515803119486 +88.5069041817602 +0 +120 +absolute + + + +0.01 +smooth + +8.536346083092504 +47.34969596455763 +414.395765016417 +14.260132111433807 +88.50825948037718 +0 +120 +absolute + + + +0.01 +smooth + +8.53634602206939 +47.34969594704093 +414.43908088772974 +14.267961461630119 +88.50965075461832 +0 +120 +absolute + + + +0.01 +smooth + +8.53634595986792 +47.34969592913458 +414.48287008377395 +14.275998077233615 +88.51107698094152 +0 +120 +absolute + + + +0.01 +smooth + +8.536345896543825 +47.349695910853804 +414.52711414359464 +14.284236181769483 +88.51253713580452 +0 +120 +absolute + + + +0.01 +smooth + +8.536345832152819 +47.349695892213724 +414.57179460623667 +14.292669998762904 +88.5140301956651 +0 +120 +absolute + + + +0.01 +smooth + +8.53634576675063 +47.349695873229564 +414.6168930107451 +14.301293751739069 +88.51555513698106 +0 +120 +absolute + + + +0.01 +smooth + +8.536345700392982 +47.349695853916515 +414.6623908961653 +14.310101664223167 +88.51711093621026 +0 +120 +absolute + + + +0.01 +smooth + +8.536345633135591 +47.34969583428972 +414.70826980154163 +14.319087959740372 +88.51869656981037 +0 +120 +absolute + + + +0.01 +smooth + +8.536345565034186 +47.349695814364416 +414.75451126591963 +14.328246861815886 +88.5203110142393 +0 +120 +absolute + + + +0.01 +smooth + +8.536345496144492 +47.34969579415575 +414.80109682834404 +14.337572593974885 +88.52195324595479 +0 +120 +absolute + + + +0.01 +smooth + +8.536345426522226 +47.34969577367893 +414.84800802786015 +14.347059379742566 +88.52362224141463 +0 +120 +absolute + + + +0.01 +smooth + +8.536345356223112 +47.34969575294914 +414.89522640351265 +14.356701442644107 +88.52531697707661 +0 +120 +absolute + + + +0.01 +smooth + +8.536345285302879 +47.34969573198155 +414.9427334943467 +14.366493006204696 +88.52703642939855 +0 +120 +absolute + + + +0.01 +smooth + +8.536345213817244 +47.34969571079135 +414.99051083940753 +14.376428293949523 +88.52877957483823 +0 +120 +absolute + + + +0.01 +smooth + +8.536345141821931 +47.34969568939373 +415.0385399777398 +14.38650152940377 +88.53054538985342 +0 +120 +absolute + + + +0.01 +smooth + +8.536345069372665 +47.34969566780387 +415.08680244838865 +14.396706936092627 +88.53233285090194 +0 +120 +absolute + + + +0.01 +smooth + +8.536344996525166 +47.34969564603696 +415.1352797903992 +14.407038737541281 +88.53414093444158 +0 +120 +absolute + + + +0.01 +smooth + +8.53634492333516 +47.349695624108186 +415.1839535428163 +14.417491157274917 +88.53596861693012 +0 +120 +absolute + + + +0.01 +smooth + +8.536344849858368 +47.349695602032725 +415.23280524468504 +14.428058418818722 +88.53781487482534 +0 +120 +absolute + + + +0.01 +smooth + +8.536344776150512 +47.34969557982577 +415.28181643505053 +14.43873474569788 +88.53967868458508 +0 +120 +absolute + + + +0.01 +smooth + +8.53634470226732 +47.34969555750251 +415.33096865295767 +14.449514361437583 +88.5415590226671 +0 +120 +absolute + + + +0.01 +smooth + +8.53634462816372 +47.34969553504696 +415.3802723987781 +14.460407288862118 +88.5434574589927 +0 +120 +absolute + + + +0.01 +smooth + +8.536344552965277 +47.34969551218688 +415.4299782233412 +14.471553787538474 +88.54539695257722 +0 +120 +absolute + + + +0.01 +smooth + +8.5363444765071 +47.34969548886906 +415.4801360501315 +14.482983320150261 +88.54738229508655 +0 +120 +absolute + + + +0.01 +smooth + +8.53634439885146 +47.3496954651105 +415.5307308452727 +14.49468978121781 +88.54941244161151 +0 +120 +absolute + + + +0.01 +smooth + +8.536344320060634 +47.34969544092821 +415.5817475748896 +14.506667065261459 +88.55148634724308 +0 +120 +absolute + + + +0.01 +smooth + +8.5363442401969 +47.3496954163392 +415.6331712051062 +14.51890906680154 +88.5536029670722 +0 +120 +absolute + + + +0.01 +smooth + +8.536344159322532 +47.34969539136044 +415.6849867020465 +14.531409680358383 +88.55576125618973 +0 +120 +absolute + + + +0.01 +smooth + +8.536344077499804 +47.349695366008966 +415.73717903183496 +14.544162800452325 +88.55796016968665 +0 +120 +absolute + + + +0.01 +smooth + +8.536343994790993 +47.34969534030174 +415.7897331605957 +14.557162321603698 +88.56019866265383 +0 +120 +absolute + + + +0.01 +smooth + +8.536343911258381 +47.34969531425582 +415.842634054453 +14.57040213833284 +88.56247569018228 +0 +120 +absolute + + + +0.01 +smooth + +8.536343826964233 +47.349695287888146 +415.895866679531 +14.583876145160083 +88.56479020736283 +0 +120 +absolute + + + +0.01 +smooth + +8.53634374197083 +47.34969526121574 +415.94941600195386 +14.597578236605756 +88.56714116928643 +0 +120 +absolute + + + +0.01 +smooth + +8.53634365634045 +47.34969523425563 +416.00326698784596 +14.611502307190195 +88.56952753104403 +0 +120 +absolute + + + +0.01 +smooth + +8.536343570135365 +47.34969520702479 +416.05740460333146 +14.62564225143374 +88.57194824772654 +0 +120 +absolute + + + +0.01 +smooth + +8.536343483417854 +47.349695179540205 +416.11181381453446 +14.639991963856719 +88.57440227442486 +0 +120 +absolute + + + +0.01 +smooth + +8.536343396250189 +47.349695151818906 +416.16647958757915 +14.654545338979466 +88.57688856622994 +0 +120 +absolute + + + +0.01 +smooth + +8.536343308694647 +47.349695123877886 +416.22138688858985 +14.66929627132231 +88.57940607823268 +0 +120 +absolute + + + +0.01 +smooth + +8.536343220813505 +47.349695095734134 +416.27652068369065 +14.684238655405593 +88.581953765524 +0 +120 +absolute + + + +0.01 +smooth + +8.536343132669037 +47.34969506740466 +416.331865939006 +14.699366385749645 +88.58453058319488 +0 +120 +absolute + + + +0.01 +smooth + +8.536343044323521 +47.34969503890646 +416.3874076206599 +14.714673356874801 +88.58713548633617 +0 +120 +absolute + + + +0.01 +smooth + +8.536342955839231 +47.349695010256546 +416.4431306947765 +14.730153463301392 +88.58976743003882 +0 +120 +absolute + + + +0.01 +smooth + +8.536342867278446 +47.349694981471906 +416.49902012748026 +14.745800599549755 +88.59242536939374 +0 +120 +absolute + + + +0.01 +smooth + +8.536342778703435 +47.34969495256955 +416.55506088489517 +14.76160866014022 +88.5951082594919 +0 +120 +absolute + + + +0.01 +smooth + +8.536342690176477 +47.34969492356646 +416.6112379331455 +14.777571539593122 +88.59781505542415 +0 +120 +absolute + + + +0.01 +smooth + +8.53634260175985 +47.34969489447966 +416.66753623835547 +14.793683132428797 +88.60054471228146 +0 +120 +absolute + + + +0.01 +smooth + +8.536342513515828 +47.34969486532614 +416.72394076664943 +14.809937333167579 +88.60329618515475 +0 +120 +absolute + + + +0.01 +smooth + +8.536342425506687 +47.34969483612289 +416.7804364841513 +14.826328036329796 +88.60606842913492 +0 +120 +absolute + + + +0.01 +smooth + +8.536342337794702 +47.34969480688694 +416.8370083569855 +14.842849136435786 +88.60886039931292 +0 +120 +absolute + + + +0.01 +smooth + +8.536342250058661 +47.34969477752681 +416.89372018535107 +14.859548407765727 +88.61167955594875 +0 +120 +absolute + + + +0.01 +smooth + +8.536342161434938 +47.34969474779675 +416.95075064017686 +14.876551277474936 +88.61454562946649 +0 +120 +absolute + + + +0.01 +smooth + +8.53634207196551 +47.34969471770615 +417.0080953843243 +14.893857290453514 +88.61745849073867 +0 +120 +absolute + + + +0.01 +smooth + +8.53634198173521 +47.34969468727656 +417.0657413417069 +14.911460001411895 +88.6204170653113 +0 +120 +absolute + + + +0.01 +smooth + +8.536341890828858 +47.34969465652943 +417.1236754362376 +14.929352965060506 +88.62342027873031 +0 +120 +absolute + + + +0.01 +smooth + +8.536341799331286 +47.349694625486286 +417.1818845918301 +14.947529736109784 +88.6264670565417 +0 +120 +absolute + + + +0.01 +smooth + +8.536341707327317 +47.34969459416866 +417.2403557323976 +14.96598386927016 +88.62955632429147 +0 +120 +absolute + + + +0.01 +smooth + +8.536341614901774 +47.349694562598025 +417.2990757818535 +14.98470891925206 +88.63268700752559 +0 +120 +absolute + + + +0.01 +smooth + +8.536341522139491 +47.34969453079591 +417.3580316641112 +15.00369844076593 +88.63585803179006 +0 +120 +absolute + + + +0.01 +smooth + +8.536341429125288 +47.34969449878382 +417.41721030308395 +15.022945988522185 +88.63906832263083 +0 +120 +absolute + + + +0.01 +smooth + +8.536341335943998 +47.34969446658327 +417.47659862268523 +15.042445117231276 +88.64231680559395 +0 +120 +absolute + + + +0.01 +smooth + +8.536341242680443 +47.34969443421575 +417.53618354682845 +15.062189381603623 +88.64560240622536 +0 +120 +absolute + + + +0.01 +smooth + +8.536341149419448 +47.34969440170279 +417.59595199942686 +15.082172336349661 +88.64892405007103 +0 +120 +absolute + + + +0.01 +smooth + +8.536341056245844 +47.34969436906589 +417.65589090439386 +15.102387536179823 +88.65228066267699 +0 +120 +absolute + + + +0.01 +smooth + +8.536340963244452 +47.349694336326536 +417.71598718564275 +15.122828535804539 +88.65567116958918 +0 +120 +absolute + + + +0.01 +smooth + +8.536340870500105 +47.349694303506276 +417.776227767087 +15.143488889934245 +88.65909449635359 +0 +120 +absolute + + + +0.01 +smooth + +8.536340778097625 +47.349694270626586 +417.8365995726399 +15.16436215327937 +88.66254956851624 +0 +120 +absolute + + + +0.01 +smooth + +8.53634068612184 +47.34969423770898 +417.8970895262147 +15.185441880550352 +88.66603531162309 +0 +120 +absolute + + + +0.01 +smooth + +8.536340594657572 +47.34969420477498 +417.95768455172504 +15.206721626457615 +88.66955065122012 +0 +120 +absolute + + + +0.01 +smooth + +8.536340503789653 +47.34969417184608 +418.018371573084 +15.228194945711595 +88.67309451285331 +0 +120 +absolute + + + +0.01 +smooth + +8.536340413602908 +47.34969413894378 +418.07913751420506 +15.249855393022726 +88.67666582206866 +0 +120 +absolute + + + +0.01 +smooth + +8.536340324182163 +47.349694106089615 +418.13996929900156 +15.271696523101438 +88.68026350441215 +0 +120 +absolute + + + +0.01 +smooth + +8.536340235612244 +47.34969407330507 +418.200853851387 +15.293711890658164 +88.68388648542977 +0 +120 +absolute + + + +0.01 +smooth + +8.536340147977977 +47.349694040611666 +418.26177809527445 +15.315895050403336 +88.6875336906675 +0 +120 +absolute + + + +0.01 +smooth + +8.53634006136419 +47.3496940080309 +418.32272895457754 +15.338239557047388 +88.6912040456713 +0 +120 +absolute + + + +0.01 +smooth + +8.53633997585571 +47.349693975584294 +418.3836933532095 +15.360738965300747 +88.69489647598718 +0 +120 +absolute + + + +0.01 +smooth + +8.53633989153736 +47.349693943293346 +418.44465821508373 +15.383386829873855 +88.69860990716114 +0 +120 +absolute + + + +0.01 +smooth + +8.536339808481973 +47.349693911177006 +418.50561163663747 +15.406177623517847 +88.70234340547765 +0 +120 +absolute + + + +0.01 +smooth + +8.536339725375091 +47.34969387895936 +418.56667913932165 +15.429213139254378 +88.70611249230883 +0 +120 +absolute + + + +0.01 +smooth + +8.536339641399923 +47.34969384646657 +418.6279436496465 +15.452560904943077 +88.70992744446183 +0 +120 +absolute + + + +0.01 +smooth + +8.536339556722364 +47.3496938137323 +418.68939328014113 +15.476214026567442 +88.71378713134351 +0 +120 +absolute + + + +0.01 +smooth + +8.536339471508306 +47.34969378079031 +418.75101614333397 +15.500165610110978 +88.71769042236072 +0 +120 +absolute + + + +0.01 +smooth + +8.536339385923641 +47.349693747674195 +418.8128003517539 +15.524408761557186 +88.72163618692026 +0 +120 +absolute + + + +0.01 +smooth + +8.53633930013427 +47.349693714417704 +418.87473401792977 +15.54893658688958 +88.72562329442904 +0 +120 +absolute + + + +0.01 +smooth + +8.536339214306082 +47.349693681054504 +418.9368052543901 +15.573742192091657 +88.72965061429385 +0 +120 +absolute + + + +0.01 +smooth + +8.536339128604977 +47.34969364761829 +418.999002173664 +15.598818683146918 +88.73371701592154 +0 +120 +absolute + + + +0.01 +smooth + +8.536339043196849 +47.34969361414274 +419.06131288828 +15.624159166038876 +88.73782136871895 +0 +120 +absolute + + + +0.01 +smooth + +8.536338958247583 +47.34969358066155 +419.12372551076675 +15.649756746751022 +88.74196254209292 +0 +120 +absolute + + + +0.01 +smooth + +8.536338873923087 +47.34969354720841 +419.1862281536533 +15.675604531266876 +88.74613940545032 +0 +120 +absolute + + + +0.01 +smooth + +8.536338790389248 +47.349693513817 +419.24880892946834 +15.701695625569934 +88.75035082819798 +0 +120 +absolute + + + +0.01 +smooth + +8.536338707811966 +47.34969348052103 +419.31145595074065 +15.728023135643697 +88.75459567974272 +0 +120 +absolute + + + +0.01 +smooth + +8.536338626357132 +47.34969344735417 +419.3741573299989 +15.754580167471676 +88.75887282949141 +0 +120 +absolute + + + +0.01 +smooth + +8.536338546190642 +47.349693414350114 +419.4369011797719 +15.78135982703737 +88.7631811468509 +0 +120 +absolute + + + +0.01 +smooth + +8.536338467478389 +47.349693381542544 +419.4996756125884 +15.808355220324286 +88.76751950122798 +0 +120 +absolute + + + +0.01 +smooth + +8.53633839038627 +47.34969334896516 +419.5624687409772 +15.835559453315925 +88.77188676202954 +0 +120 +absolute + + + +0.01 +smooth + +8.536338315080176 +47.34969331665164 +419.6252686774669 +15.862965631995795 +88.77628179866241 +0 +120 +absolute + + + +0.01 +smooth + +8.536338241726007 +47.34969328463567 +419.68806353458655 +15.890566862347399 +88.78070348053342 +0 +120 +absolute + + + +0.01 +smooth + +8.536338170489653 +47.349693252950956 +419.7508414248647 +15.918356250354236 +88.78515067704942 +0 +120 +absolute + + + +0.01 +smooth + +8.536338101537012 +47.34969322163116 +419.8135904608302 +15.946326901999816 +88.78962225761725 +0 +120 +absolute + + + +0.01 +smooth + +8.536338035033978 +47.34969319071 +419.8762987550118 +15.974471923267643 +88.79411709164376 +0 +120 +absolute + + + +0.01 +smooth + +8.536337971146445 +47.349693160221136 +419.9389544199383 +16.002784420141218 +88.7986340485358 +0 +120 +absolute + + + +0.01 +smooth + +8.536337910040306 +47.34969313019828 +420.00154556813845 +16.03125749860405 +88.80317199770019 +0 +120 +absolute + + + +0.01 +smooth + +8.53633785188146 +47.34969310067511 +420.0640603121409 +16.05988426463963 +88.80772980854377 +0 +120 +absolute + + + +0.01 +smooth + +8.536337796835797 +47.34969307168531 +420.12648676447463 +16.088657824231483 +88.8123063504734 +0 +120 +absolute + + + +0.01 +smooth + +8.536337745069215 +47.34969304326258 +420.1888130376681 +16.117571283363095 +88.8169004928959 +0 +120 +absolute + + + +0.01 +smooth + +8.5363376963203 +47.34969301532608 +420.25104872632505 +16.14663560931416 +88.82151380717524 +0 +120 +absolute + + + +0.01 +smooth + +8.53633764760363 +47.349692987081006 +420.3133408093133 +16.17597554008877 +88.82616507438036 +0 +120 +absolute + + + +0.01 +smooth + +8.536337598455956 +47.34969295843576 +420.3757102220977 +16.205610232346736 +88.83085710229562 +0 +120 +absolute + + + +0.01 +smooth + +8.53633754905283 +47.34969292947232 +420.4381458485246 +16.23553212755585 +88.83558865725182 +0 +120 +absolute + + + +0.01 +smooth + +8.536337499569797 +47.349692900272586 +420.50063657243925 +16.265733667183877 +88.84035850557963 +0 +120 +absolute + + + +0.01 +smooth + +8.536337450182424 +47.34969287091852 +420.56317127768745 +16.29620729269862 +88.84516541360982 +0 +120 +absolute + + + +0.01 +smooth + +8.536337401066262 +47.34969284149205 +420.6257388481152 +16.326945445567866 +88.85000814767318 +0 +120 +absolute + + + +0.01 +smooth + +8.53633735239686 +47.34969281207509 +420.68832816756805 +16.357940567259377 +88.85488547410037 +0 +120 +absolute + + + +0.01 +smooth + +8.53633730434978 +47.349692782749614 +420.7509281198919 +16.389185099240954 +88.85979615922217 +0 +120 +absolute + + + +0.01 +smooth + +8.536337257100575 +47.349692753597544 +420.8135275889324 +16.420671482980385 +88.86473896936934 +0 +120 +absolute + + + +0.01 +smooth + +8.536337210824792 +47.349692724700795 +420.8761154585352 +16.45239215994544 +88.86971267087259 +0 +120 +absolute + + + +0.01 +smooth + +8.536337165697997 +47.349692696141325 +420.9386806125464 +16.48433957160392 +88.8747160300627 +0 +120 +absolute + + + +0.01 +smooth + +8.536337121895743 +47.349692668001076 +421.00121193481164 +16.516506159423592 +88.8797478132704 +0 +120 +absolute + + + +0.01 +smooth + +8.536337079593574 +47.34969264036194 +421.06369830917635 +16.54888436487225 +88.88480678682636 +0 +120 +absolute + + + +0.01 +smooth + +8.536337038967055 +47.34969261330591 +421.12612861948674 +16.581466629417683 +88.88989171706142 +0 +120 +absolute + + + +0.01 +smooth + +8.536337000191738 +47.3496925869149 +421.18849174958837 +16.614245394527668 +88.89500137030629 +0 +120 +absolute + + + +0.01 +smooth + +8.536336963443176 +47.34969256127083 +421.2507765833269 +16.647213101669994 +88.9001345128917 +0 +120 +absolute + + + +0.01 +smooth + +8.536336928896926 +47.34969253645565 +421.3129720045483 +16.680362192312444 +88.90528991114837 +0 +120 +absolute + + + +0.01 +smooth + +8.536336896728539 +47.349692512551286 +421.3750668970982 +16.713685107922796 +88.91046633140712 +0 +120 +absolute + + + +0.01 +smooth + +8.536336867113574 +47.349692489639686 +421.43705014482236 +16.747174289968843 +88.91566253999862 +0 +120 +absolute + + + +0.01 +smooth + +8.536336840227582 +47.34969246780279 +421.49891063156656 +16.780822179918367 +88.92087730325363 +0 +120 +absolute + + + +0.01 +smooth + +8.53633681624612 +47.349692447122514 +421.56063724117655 +16.814621219239157 +88.92610938750289 +0 +120 +absolute + + + +0.01 +smooth + +8.536336795344743 +47.34969242768081 +421.6222188574981 +16.848563849398985 +88.93135755907718 +0 +120 +absolute + + + +0.01 +smooth + +8.536336777699002 +47.34969240955961 +421.68364436437696 +16.882642511865647 +88.93662058430718 +0 +120 +absolute + + + +0.01 +smooth + +8.536336763484456 +47.34969239284084 +421.74490264565895 +16.916849648106925 +88.94189722952368 +0 +120 +absolute + + + +0.01 +smooth + +8.536336752876657 +47.34969237760645 +421.8059825851898 +16.9511776995906 +88.9471862610574 +0 +120 +absolute + + + +0.01 +smooth + +8.53633674605116 +47.349692363938374 +421.8668730668152 +16.98561910778446 +88.95248644523907 +0 +120 +absolute + + + +0.01 +smooth + +8.536336743183519 +47.34969235191854 +421.9275629743809 +17.020166314156285 +88.95779654839947 +0 +120 +absolute + + + +0.01 +smooth + +8.536336744266041 +47.34969234108394 +421.98810684160554 +17.05486747742782 +88.96312386130184 +0 +120 +absolute + + + +0.01 +smooth + +8.536336748939089 +47.349692330361314 +422.0486292659702 +17.089829395769552 +88.96848463399442 +0 +120 +absolute + + + +0.01 +smooth + +8.536336757077532 +47.349692319741024 +422.109123806105 +17.125046962608426 +88.97387798545176 +0 +120 +absolute + + + +0.01 +smooth + +8.536336768565743 +47.34969230924708 +422.16957992136025 +17.16051158212779 +88.97930250066267 +0 +120 +absolute + + + +0.01 +smooth + +8.536336783288107 +47.34969229890355 +422.2299870710864 +17.196214658511 +88.9847567646159 +0 +120 +absolute + + + +0.01 +smooth + +8.536336801128998 +47.34969228873445 +422.2903347146335 +17.232147595941413 +88.99023936230013 +0 +120 +absolute + + + +0.01 +smooth + +8.536336821972796 +47.34969227876382 +422.3506123113517 +17.268301798602362 +88.9957488787041 +0 +120 +absolute + + + +0.01 +smooth + +8.536336845703877 +47.349692269015684 +422.4108093205911 +17.30466867067721 +89.00128389881652 +0 +120 +absolute + + + +0.01 +smooth + +8.536336872206622 +47.34969225951408 +422.47091520170204 +17.3412396163493 +89.00684300762613 +0 +120 +absolute + + + +0.01 +smooth + +8.53633690136541 +47.349692250283084 +422.5309194140349 +17.378006039801992 +89.01242479012166 +0 +120 +absolute + + + +0.01 +smooth + +8.536336933064614 +47.34969224134665 +422.59081141693935 +17.414959345218623 +89.01802783129177 +0 +120 +absolute + + + +0.01 +smooth + +8.536336967188616 +47.349692232728884 +422.650580669766 +17.452090936782557 +89.02365071612525 +0 +120 +absolute + + + +0.01 +smooth + +8.536337003621794 +47.34969222445379 +422.710216631865 +17.48939221867714 +89.02929202961083 +0 +120 +absolute + + + +0.01 +smooth + +8.536337042248524 +47.34969221654541 +422.76970876258633 +17.526854595085712 +89.03495035673716 +0 +120 +absolute + + + +0.01 +smooth + +8.536337082953189 +47.34969220902776 +422.82904652128036 +17.564469470191636 +89.04062428249301 +0 +120 +absolute + + + +0.01 +smooth + +8.536337125620161 +47.3496922019249 +422.8882193672972 +17.602228248178257 +89.04631239186712 +0 +120 +absolute + + + +0.01 +smooth + +8.536337170133823 +47.349692195260864 +422.9472167599872 +17.64012233322893 +89.05201326984819 +0 +120 +absolute + + + +0.01 +smooth + +8.536337216378552 +47.34969218905967 +423.00602815870036 +17.678143129526998 +89.05772550142494 +0 +120 +absolute + + + +0.01 +smooth + +8.536337264238725 +47.349692183345354 +423.0646430227869 +17.716282041255816 +89.0634476715861 +0 +120 +absolute + + + +0.01 +smooth + +8.536337313598722 +47.34969217814196 +423.12305081159707 +17.754530472598734 +89.0691783653204 +0 +120 +absolute + + + +0.01 +smooth + +8.53633736434292 +47.349692173473514 +423.18124098448106 +17.792879827739103 +89.07491616761654 +0 +120 +absolute + + + +0.01 +smooth + +8.5363374163557 +47.34969216936406 +423.2392030007891 +17.83132151086027 +89.08065966346325 +0 +120 +absolute + + + +0.01 +smooth + +8.536337469521433 +47.34969216583764 +423.2969263198713 +17.86984692614559 +89.08640743784926 +0 +120 +absolute + + + +0.01 +smooth + +8.536337523724505 +47.349692162918274 +423.3544004010778 +17.90844747777841 +89.09215807576331 +0 +120 +absolute + + + +0.01 +smooth + +8.536337578849292 +47.349692160629985 +423.411614703759 +17.94711456994208 +89.09791016219408 +0 +120 +absolute + + + +0.01 +smooth + +8.53633763478017 +47.34969215899683 +423.4685586872649 +17.98583960681995 +89.10366228213033 +0 +120 +absolute + + + +0.01 +smooth + +8.536337691401517 +47.34969215804284 +423.5252218109457 +18.024613992595373 +89.10941302056078 +0 +120 +absolute + + + +0.01 +smooth + +8.536337748689943 +47.34969215781195 +423.58159587337605 +18.063431197801254 +89.11516129326932 +0 +120 +absolute + + + +0.01 +smooth + +8.536337811635628 +47.34969215941364 +423.63780092649006 +18.10239751277738 +89.12092406630991 +0 +120 +absolute + + + +0.01 +smooth + +8.53633788293072 +47.34969216340959 +423.6939020070424 +18.14156921706716 +89.12671026770865 +0 +120 +absolute + + + +0.01 +smooth + +8.536337962284716 +47.34969216970798 +423.74988909998865 +18.180936035172152 +89.13251816507184 +0 +120 +absolute + + + +0.01 +smooth + +8.536338049407119 +47.349692178217005 +423.80575219028464 +18.220487691593927 +89.13834602600586 +0 +120 +absolute + + + +0.01 +smooth + +8.536338144007436 +47.34969218884482 +423.86148126288583 +18.260213910834054 +89.14419211811702 +0 +120 +absolute + + + +0.01 +smooth + +8.536338245795159 +47.34969220149963 +423.91706630274774 +18.300104417394092 +89.15005470901167 +0 +120 +absolute + + + +0.01 +smooth + +8.536338354479795 +47.349692216089586 +423.9724972948261 +18.340148935775606 +89.15593206629607 +0 +120 +absolute + + + +0.01 +smooth + +8.536338469770845 +47.349692232522905 +424.02776422407663 +18.380337190480166 +89.16182245757666 +0 +120 +absolute + + + +0.01 +smooth + +8.536338591377811 +47.34969225070775 +424.08285707545474 +18.420658906009336 +89.1677241504597 +0 +120 +absolute + + + +0.01 +smooth + +8.536338719010192 +47.34969227055228 +424.13776583391615 +18.461103806864674 +89.17363541255158 +0 +120 +absolute + + + +0.01 +smooth + +8.536338852377495 +47.34969229196474 +424.19248048441665 +18.501661617547768 +89.1795545114586 +0 +120 +absolute + + + +0.01 +smooth + +8.536338991189211 +47.349692314853236 +424.2469910119115 +18.54232206256015 +89.18547971478705 +0 +120 +absolute + + + +0.01 +smooth + +8.53633913515485 +47.34969233912597 +424.30128740135655 +18.583074866403408 +89.19140929014333 +0 +120 +absolute + + + +0.01 +smooth + +8.536339283983914 +47.34969236469116 +424.35535963770747 +18.623909753579106 +89.19734150513375 +0 +120 +absolute + + + +0.01 +smooth + +8.5363394373859 +47.34969239145695 +424.4091977059198 +18.66481644858881 +89.20327462736465 +0 +120 +absolute + + + +0.01 +smooth + +8.536339595070311 +47.34969241933152 +424.462791590949 +18.705784675934073 +89.20920692444233 +0 +120 +absolute + + + +0.01 +smooth + +8.536339756746647 +47.34969244822307 +424.5161312777509 +18.746804160116476 +89.21513666397317 +0 +120 +absolute + + + +0.01 +smooth + +8.536339922124412 +47.349692478039756 +424.5692067512811 +18.787864625637575 +89.22106211356348 +0 +120 +absolute + + + +0.01 +smooth + +8.536340090913107 +47.34969250868978 +424.6220079964952 +18.828955796998937 +89.22698154081958 +0 +120 +absolute + + + +0.01 +smooth + +8.536340262822232 +47.34969254008131 +424.6745249983487 +18.870067398702126 +89.23289321334781 +0 +120 +absolute + + + +0.01 +smooth + +8.536340437561291 +47.349692572122535 +424.72674774179734 +18.911189155248714 +89.23879539875455 +0 +120 +absolute + + + +0.01 +smooth + +8.536340614839782 +47.34969260472163 +424.77866621179663 +18.95231079114026 +89.24468636464607 +0 +120 +absolute + + + +0.01 +smooth + +8.53634079436721 +47.34969263778679 +424.8302703933024 +18.993422030878335 +89.25056437862872 +0 +120 +absolute + + + +0.01 +smooth + +8.536340975853072 +47.349692671226165 +424.88155027127004 +19.034512598964497 +89.25642770830886 +0 +120 +absolute + + + +0.01 +smooth + +8.536341159006874 +47.349692704947955 +424.9324958306553 +19.07557221990032 +89.26227462129278 +0 +120 +absolute + + + +0.01 +smooth + +8.536341343538115 +47.34969273886034 +424.9830970564138 +19.11659061818736 +89.26810338518685 +0 +120 +absolute + + + +0.01 +smooth + +8.536341529156296 +47.34969277287149 +425.0333439335011 +19.157557518327195 +89.27391226759738 +0 +120 +absolute + + + +0.01 +smooth + +8.53634171655825 +47.34969280729827 +425.0832535208232 +19.19848961467073 +89.27970420765719 +0 +120 +absolute + + + +0.01 +smooth + +8.536341911406524 +47.3496928444994 +425.1329784502907 +19.23953738113673 +89.28550528492748 +0 +120 +absolute + + + +0.01 +smooth + +8.536342114472271 +47.34969288478784 +425.18253630023156 +19.28071477845221 +89.29131788346348 +0 +120 +absolute + + + +0.01 +smooth + +8.536342325542545 +47.34969292806777 +425.23191759760687 +19.322008678641613 +89.29713969166018 +0 +120 +absolute + + + +0.01 +smooth + +8.536342544404395 +47.34969297424329 +425.281112869378 +19.363405953729384 +89.30296839791257 +0 +120 +absolute + + + +0.01 +smooth + +8.536342770844875 +47.34969302321855 +425.33011264250575 +19.404893475739964 +89.3088016906156 +0 +120 +absolute + + + +0.01 +smooth + +8.536343004651043 +47.3496930748977 +425.3789074439517 +19.446458116697805 +89.3146372581643 +0 +120 +absolute + + + +0.01 +smooth + +8.536343245609949 +47.349693129184914 +425.4274878006769 +19.48808674862735 +89.32047278895364 +0 +120 +absolute + + + +0.01 +smooth + +8.536343493508646 +47.34969318598428 +425.4758442396424 +19.52976624355305 +89.3263059713786 +0 +120 +absolute + + + +0.01 +smooth + +8.536343748134184 +47.349693245199944 +425.5239672878095 +19.571483473499335 +89.33213449383413 +0 +120 +absolute + + + +0.01 +smooth + +8.536344009273623 +47.349693306736086 +425.57184747213944 +19.61322531049067 +89.33795604471527 +0 +120 +absolute + + + +0.01 +smooth + +8.53634427671401 +47.34969337049682 +425.61947531959316 +19.654978626551483 +89.34376831241698 +0 +120 +absolute + + + +0.01 +smooth + +8.536344550242397 +47.349693436386296 +425.66684135713194 +19.696730293706228 +89.34956898533422 +0 +120 +absolute + + + +0.01 +smooth + +8.536344829645845 +47.34969350430867 +425.7139361117172 +19.738467183979363 +89.35535575186204 +0 +120 +absolute + + + +0.01 +smooth + +8.5363451147114 +47.34969357416805 +425.7607501103097 +19.78017616939531 +89.36112630039531 +0 +120 +absolute + + + +0.01 +smooth + +8.53634540522612 +47.349693645868584 +425.80727387987076 +19.82184412197853 +89.36687831932912 +0 +120 +absolute + + + +0.01 +smooth + +8.536345700977051 +47.349693719314445 +425.85349794736175 +19.86345791375346 +89.37260949705838 +0 +120 +absolute + + + +0.01 +smooth + +8.536346001751255 +47.34969379440975 +425.89941283974366 +19.905004416744553 +89.37831752197812 +0 +120 +absolute + + + +0.01 +smooth + +8.536346307335776 +47.34969387105864 +425.9450090839777 +19.946470502976247 +89.3840000824833 +0 +120 +absolute + + + +0.01 +smooth + +8.536346617517676 +47.34969394916526 +425.9902772070251 +19.98784304447299 +89.3896548669689 +0 +120 +absolute + + + +0.01 +smooth + +8.536346932084003 +47.34969402863376 +426.0352077358469 +20.029108913259236 +89.39527956382992 +0 +120 +absolute + + + +0.01 +smooth + +8.536347250821809 +47.34969410936827 +426.0797911974044 +20.07025498135942 +89.40087186146135 +0 +120 +absolute + + + +0.01 +smooth + +8.536347573518151 +47.34969419127294 +426.1240181186588 +20.111268120797988 +89.40642944825812 +0 +120 +absolute + + + +0.01 +smooth + +8.536347899960079 +47.34969427425191 +426.1678790265711 +20.152135203599386 +89.41195001261526 +0 +120 +absolute + + + +0.01 +smooth + +8.536348229934648 +47.34969435820931 +426.2113644481026 +20.192843101788068 +89.41743124292776 +0 +120 +absolute + + + +0.01 +smooth + +8.53634856322891 +47.34969444304929 +426.25446491021455 +20.233378687388466 +89.42287082759057 +0 +120 +absolute + + + +0.01 +smooth + +8.536348899629917 +47.349694528676004 +426.29717093986784 +20.27372883242504 +89.42826645499869 +0 +120 +absolute + + + +0.01 +smooth + +8.536349238924725 +47.349694614993574 +426.33947306402405 +20.313880408922227 +89.43361581354709 +0 +120 +absolute + + + +0.01 +smooth + +8.53634958324986 +47.349694702947524 +426.3814441314269 +20.35392671749093 +89.43893706751678 +0 +120 +absolute + + + +0.01 +smooth + +8.53634993648465 +47.34969479426147 +426.4232179693714 +20.394036495375254 +89.4442627954864 +0 +120 +absolute + + + +0.01 +smooth + +8.536350298508824 +47.34969488889052 +426.464788201868 +20.434194682734468 +89.44959014123606 +0 +120 +absolute + + + +0.01 +smooth + +8.536350669129032 +47.34969498675746 +426.50614589128105 +20.4743828855953 +89.45491560643845 +0 +120 +absolute + + + +0.01 +smooth + +8.536351048151912 +47.34969508778503 +426.54728209997467 +20.514582709984467 +89.46023569276608 +0 +120 +absolute + + + +0.01 +smooth + +8.536351435384105 +47.34969519189595 +426.58818789031295 +20.554775761928692 +89.46554690189149 +0 +120 +absolute + + + +0.01 +smooth + +8.536351830632261 +47.34969529901299 +426.62885432466044 +20.5949436474547 +89.47084573548739 +0 +120 +absolute + + + +0.01 +smooth + +8.536352233703019 +47.34969540905894 +426.66927246538114 +20.635067972589233 +89.47612869522631 +0 +120 +absolute + + + +0.01 +smooth + +8.536352644403014 +47.3496955219565 +426.7094333748391 +20.675130343358994 +89.4813922827808 +0 +120 +absolute + + + +0.01 +smooth + +8.536353062538902 +47.34969563762846 +426.74932811539884 +20.715112365790727 +89.48663299982353 +0 +120 +absolute + + + +0.01 +smooth + +8.536353487917316 +47.34969575599754 +426.78894774942427 +20.754995645911134 +89.49184734802698 +0 +120 +absolute + + + +0.01 +smooth + +8.536353920344899 +47.349695876986516 +426.8282833392799 +20.794761789746957 +89.49703182906383 +0 +120 +absolute + + + +0.01 +smooth + +8.536354359628302 +47.34969600051814 +426.8673259473298 +20.834392403324923 +89.50218294460662 +0 +120 +absolute + + + +0.01 +smooth + +8.536354805574154 +47.34969612651515 +426.90606663593803 +20.87386909267174 +89.50729719632791 +0 +120 +absolute + + + +0.01 +smooth + +8.536355257989108 +47.34969625490031 +426.9444964674689 +20.913173463814154 +89.51237108590036 +0 +120 +absolute + + + +0.01 +smooth + +8.536355716679804 +47.34969638559637 +426.9826065042869 +20.95228712277887 +89.5174011149965 +0 +120 +absolute + + + +0.01 +smooth + +8.536356181452883 +47.34969651852607 +427.02038780875586 +20.99119167559263 +89.52238378528895 +0 +120 +absolute + + + +0.01 +smooth + +8.53635665211499 +47.349696653612185 +427.05783144324005 +21.029868728282153 +89.52731559845027 +0 +120 +absolute + + + +0.01 +smooth + +8.536357128472766 +47.34969679077746 +427.09492847010387 +21.068299886874154 +89.53219305615308 +0 +120 +absolute + + + +0.01 +smooth + +8.536357610332852 +47.34969692994464 +427.13166995171133 +21.106466757395374 +89.53701266006993 +0 +120 +absolute + + + +0.01 +smooth + +8.536358097501893 +47.34969707103648 +427.16804695042686 +21.144350945872525 +89.54177091187341 +0 +120 +absolute + + + +0.01 +smooth + +8.53635858978653 +47.34969721397573 +427.2040505286144 +21.181934058332338 +89.54646431323613 +0 +120 +absolute + + + +0.01 +smooth + +8.536359086993407 +47.349697358685155 +427.23967174863833 +21.219197700801537 +89.55108936583066 +0 +120 +absolute + + + +0.01 +smooth + +8.536359588929166 +47.34969750508749 +427.2749016728628 +21.25612347930685 +89.55564257132963 +0 +120 +absolute + + + +0.01 +smooth + +8.53636009540045 +47.34969765310551 +427.30973136365213 +21.292692999874994 +89.56012043140552 +0 +120 +absolute + + + +0.01 +smooth + +8.5363606062139 +47.34969780266194 +427.3441518833703 +21.328887868532703 +89.56451944773104 +0 +120 +absolute + + + +0.01 +smooth + +8.536361121176162 +47.34969795367955 +427.37815429438183 +21.364689691306697 +89.5688361219787 +0 +120 +absolute + + + +0.01 +smooth + +8.536361640211501 +47.34969810613234 +427.4117344595601 +21.400089825290053 +89.57306915211043 +0 +120 +absolute + + + +0.01 +smooth + +8.53636216700938 +47.34969826163526 +427.4450419629186 +21.435388894375237 +89.57728672859068 +0 +120 +absolute + + + +0.01 +smooth + +8.536362703262343 +47.34969842093548 +427.47814506519927 +21.47071422105629 +89.58151755779537 +0 +120 +absolute + + + +0.01 +smooth + +8.536363248781326 +47.349698583960866 +427.51103526558654 +21.506035880843896 +89.58575485491282 +0 +120 +absolute + + + +0.01 +smooth + +8.536363803377268 +47.349698750639234 +427.54370406326535 +21.541323949248746 +89.58999183513136 +0 +120 +absolute + + + +0.01 +smooth + +8.53636436686111 +47.34969892089846 +427.57614295742053 +21.576548501781552 +89.59422171363927 +0 +120 +absolute + + + +0.01 +smooth + +8.536364939043777 +47.34969909466634 +427.60834344723634 +21.611679613952997 +89.59843770562483 +0 +120 +absolute + + + +0.01 +smooth + +8.53636551973622 +47.34969927187079 +427.64029703189794 +21.64668736127379 +89.6026330262764 +0 +120 +absolute + + + +0.01 +smooth + +8.536366108749366 +47.349699452439594 +427.6719952105899 +21.681541819254626 +89.60680089078224 +0 +120 +absolute + + + +0.01 +smooth + +8.536366705894151 +47.34969963630059 +427.7034294824966 +21.716213063406176 +89.61093451433065 +0 +120 +absolute + + + +0.01 +smooth + +8.536367310981516 +47.34969982338166 +427.7345913468032 +21.750671169239176 +89.61502711210997 +0 +120 +absolute + + + +0.01 +smooth + +8.5363679238224 +47.34970001361065 +427.76547230269426 +21.784886212264293 +89.61907189930847 +0 +120 +absolute + + + +0.01 +smooth + +8.53636854422773 +47.34970020691536 +427.79606384935425 +21.818828267992235 +89.62306209111445 +0 +120 +absolute + + + +0.01 +smooth + +8.536369172008454 +47.34970040322369 +427.8263574859683 +21.852467411933702 +89.62699090271624 +0 +120 +absolute + + + +0.01 +smooth + +8.536369806975497 +47.34970060246345 +427.85634471172057 +21.885773719599378 +89.63085154930214 +0 +120 +absolute + + + +0.01 +smooth + +8.536370448939802 +47.34970080456247 +427.88601702579626 +21.91871726649996 +89.6346372460604 +0 +120 +absolute + + + +0.01 +smooth + +8.536371097712307 +47.34970100944863 +427.91536592737987 +21.95126812814616 +89.63834120817938 +0 +120 +absolute + + + +0.01 +smooth + +8.536371753103944 +47.34970121704974 +427.9443829156561 +21.983396380048664 +89.64195665084736 +0 +120 +absolute + + + +0.01 +smooth + +8.536372414925651 +47.34970142729368 +427.9730594898096 +22.01507209771817 +89.64547678925267 +0 +120 +absolute + + + +0.01 +smooth + +8.536373082988367 +47.349701640108265 +428.00138714902516 +22.04626535666537 +89.64889483858354 +0 +120 +absolute + + + +0.01 +smooth + +8.536373757103025 +47.349701855421344 +428.02935739248744 +22.076946232400964 +89.65220401402837 +0 +120 +absolute + + + +0.01 +smooth + +8.536374437080564 +47.34970207316077 +428.0569617193812 +22.10708480043565 +89.6553975307754 +0 +120 +absolute + + + +0.01 +smooth + +8.536375122731918 +47.34970229325438 +428.0841916288911 +22.136651136280122 +89.65846860401295 +0 +120 +absolute + + + +0.01 +smooth + +8.536375813868027 +47.34970251563003 +428.1110386202018 +22.165615315445073 +89.66141044892933 +0 +120 +absolute + + + +0.01 +smooth + +8.536376510299824 +47.34970274021555 +428.13749419249814 +22.193947413441204 +89.66421628071281 +0 +120 +absolute + + + +0.01 +smooth + +8.536377211838248 +47.34970296693878 +428.16354984496456 +22.221617505779214 +89.66687931455172 +0 +120 +absolute + + + +0.01 +smooth + +8.536377918294235 +47.34970319572757 +428.1891970767862 +22.24859566796979 +89.66939276563437 +0 +120 +absolute + + + +0.01 +smooth + +8.53637862947872 +47.349703426509784 +428.2144273871473 +22.274851975523642 +89.67174984914905 +0 +120 +absolute + + + +0.01 +smooth + +8.5363793460251 +47.349703659580975 +428.2392706629167 +22.30052110366576 +89.6739725555363 +0 +120 +absolute + + + +0.01 +smooth + +8.536380071808955 +47.349703896686954 +428.26390818717766 +22.32637032954716 +89.67619602092407 +0 +120 +absolute + + + +0.01 +smooth + +8.536380807191641 +47.34970413800303 +428.2883573165339 +22.35244064276107 +89.6784320219324 +0 +120 +absolute + + + +0.01 +smooth + +8.536381551983936 +47.349704383458324 +428.3126097156327 +22.378661474571757 +89.68067304791204 +0 +120 +absolute + + + +0.01 +smooth + +8.536382305996622 +47.34970463298203 +428.3366570491218 +22.40496225624351 +89.68291158821383 +0 +120 +absolute + + + +0.01 +smooth + +8.536383069040477 +47.349704886503325 +428.36049098164875 +22.43127241904062 +89.68514013218858 +0 +120 +absolute + + + +0.01 +smooth + +8.536383840926275 +47.349705143951326 +428.38410317786077 +22.45752139422736 +89.68735116918705 +0 +120 +absolute + + + +0.01 +smooth + +8.536384621464805 +47.34970540525522 +428.40748530240546 +22.48363861306802 +89.68953718856011 +0 +120 +absolute + + + +0.01 +smooth + +8.53638541046684 +47.349705670344164 +428.4306290199305 +22.50955350682689 +89.69169067965852 +0 +120 +absolute + + + +0.01 +smooth + +8.536386207743165 +47.34970593914734 +428.4535259950831 +22.535195506768233 +89.69380413183309 +0 +120 +absolute + + + +0.01 +smooth + +8.536387013104552 +47.34970621159388 +428.476167892511 +22.560494044156354 +89.69587003443463 +0 +120 +absolute + + + +0.01 +smooth + +8.536387826361787 +47.34970648761299 +428.4985463768618 +22.585378550255534 +89.69788087681401 +0 +120 +absolute + + + +0.01 +smooth + +8.536388647325643 +47.34970676713378 +428.52065311278255 +22.609778456330048 +89.69982914832191 +0 +120 +absolute + + + +0.01 +smooth + +8.536389475806903 +47.349707050085435 +428.5424797649211 +22.63362319364418 +89.70170733830923 +0 +120 +absolute + + + +0.01 +smooth + +8.536390311616348 +47.349707336397124 +428.56401799792496 +22.656842193462218 +89.70350793612678 +0 +120 +absolute + + + +0.01 +smooth + +8.536391154564754 +47.34970762599799 +428.58525947644154 +22.67936488704845 +89.70522343112532 +0 +120 +absolute + + + +0.01 +smooth + +8.5363920044629 +47.34970791881723 +428.6061958651183 +22.70112070566715 +89.70684631265564 +0 +120 +absolute + + + +0.01 +smooth + +8.536392861121568 +47.34970821478397 +428.6268188286029 +22.722039080582615 +89.70836907006861 +0 +120 +absolute + + + +0.01 +smooth + +8.536393724351537 +47.34970851382739 +428.64712003154267 +22.742049443059113 +89.70978419271499 +0 +120 +absolute + + + +0.01 +smooth + +8.536394593963585 +47.34970881587665 +428.66709113858525 +22.761081224360943 +89.71108416994562 +0 +120 +absolute + + + +0.01 +smooth + +8.536395469768493 +47.34970912086091 +428.68672381437807 +22.779063855752376 +89.71226149111126 +0 +120 +absolute + + + +0.01 +smooth + +8.536396351577038 +47.34970942870933 +428.7060097235686 +22.7959267684977 +89.71330864556278 +0 +120 +absolute + + + +0.01 +smooth + +8.536397239200003 +47.349709739351084 +428.7249405308045 +22.811599393861208 +89.71421812265092 +0 +120 +absolute + + + +0.01 +smooth + +8.536398132448161 +47.349710052715324 +428.7435079007331 +22.826011163107175 +89.71498241172654 +0 +120 +absolute + + + +0.01 +smooth + +8.536399031132298 +47.34971036873121 +428.7617034980019 +22.83909150749988 +89.71559400214039 +0 +120 +absolute + + + +0.01 +smooth + +8.536399935063189 +47.3497106873279 +428.7795189872586 +22.850769858303615 +89.71604538324333 +0 +120 +absolute + + + +0.01 +smooth + +8.536400844051615 +47.34971100843458 +428.79694603315056 +22.860975646782663 +89.71632904438613 +0 +120 +absolute + + + +0.01 +smooth + +8.536401757908358 +47.349711331980394 +428.81397630032524 +22.86963830420131 +89.71643747491963 +0 +120 +absolute + + + +0.01 +smooth + +8.536402678477701 +47.34971165884328 +428.8307121739871 +22.877313285177625 +89.71638811490861 +0 +120 +absolute + + + +0.01 +smooth + +8.53640360853283 +47.3497119903347 +428.8473063424903 +22.884876345781716 +89.71621669031303 +0 +120 +absolute + + + +0.01 +smooth + +8.536404547909664 +47.34971232639586 +428.86375138457436 +22.892321625905858 +89.71592742872402 +0 +120 +absolute + + + +0.01 +smooth + +8.536405496418993 +47.34971266695624 +428.8800385113017 +22.89963563188409 +89.71552426878117 +0 +120 +absolute + + + +0.01 +smooth + +8.53640645387162 +47.34971301194525 +428.8961589337349 +22.906804870050408 +89.71501114912412 +0 +120 +absolute + + + +0.01 +smooth + +8.536407420078351 +47.3497133612924 +428.9121038629367 +22.913815846738846 +89.71439200839257 +0 +120 +absolute + + + +0.01 +smooth + +8.536408394849984 +47.34971371492714 +428.9278645099699 +22.920655068283406 +89.71367078522614 +0 +120 +absolute + + + +0.01 +smooth + +8.536409377997323 +47.349714072778944 +428.9434320858971 +22.92730904101812 +89.71285141826455 +0 +120 +absolute + + + +0.01 +smooth + +8.536410369331172 +47.34971443477728 +428.9587978017809 +22.933764271276996 +89.71193784614742 +0 +120 +absolute + + + +0.01 +smooth + +8.536411368662325 +47.34971480085161 +428.97395286868414 +22.940007265394073 +89.71093400751445 +0 +120 +absolute + + + +0.01 +smooth + +8.536412375801593 +47.3497151709314 +428.98888849766934 +22.94602452970335 +89.70984384100524 +0 +120 +absolute + + + +0.01 +smooth + +8.536413390559773 +47.3497155449461 +429.0035958997993 +22.95180257053885 +89.70867128525953 +0 +120 +absolute + + + +0.01 +smooth + +8.536414412747662 +47.34971592282518 +429.0180662861367 +22.95732789423459 +89.70742027891689 +0 +120 +absolute + + + +0.01 +smooth + +8.536415442176066 +47.349716304498116 +429.03229086774394 +22.962587007124593 +89.70609476061702 +0 +120 +absolute + + + +0.01 +smooth + +8.536416478655788 +47.349716689894365 +429.046260855684 +22.96756641554287 +89.70469866899961 +0 +120 +absolute + + + +0.01 +smooth + +8.53641752199763 +47.3497170789434 +429.05996746101954 +22.97225262582345 +89.70323594270431 +0 +120 +absolute + + + +0.01 +smooth + +8.536418572012392 +47.349717471574685 +429.07340189481323 +22.976632144300346 +89.70171052037074 +0 +120 +absolute + + + +0.01 +smooth + +8.536419628510874 +47.34971786771767 +429.0865553681275 +22.980691477307573 +89.70012634063863 +0 +120 +absolute + + + +0.01 +smooth + +8.536420691303881 +47.34971826730185 +429.0994190920253 +22.98441713117916 +89.69848734214759 +0 +120 +absolute + + + +0.01 +smooth + +8.536421760202213 +47.349718670256664 +429.11198427756926 +22.987795612249116 +89.69679746353728 +0 +120 +absolute + + + +0.01 +smooth + +8.536422835016673 +47.34971907651159 +429.124242135822 +22.990813426851464 +89.69506064344739 +0 +120 +absolute + + + +0.01 +smooth + +8.53642391555806 +47.34971948599608 +429.1361838778463 +22.99345708132022 +89.69328082051756 +0 +120 +absolute + + + +0.01 +smooth + +8.536425001637177 +47.34971989863962 +429.14780071470454 +22.9957130819894 +89.69146193338744 +0 +120 +absolute + + + +0.01 +smooth + +8.536426093064827 +47.34972031437166 +429.15908385745973 +22.997567935193032 +89.68960792069674 +0 +120 +absolute + + + +0.01 +smooth + +8.536427189651809 +47.349720733121664 +429.1700245171744 +22.999008147265123 +89.68772272108508 +0 +120 +absolute + + + +0.01 +smooth + +8.536428291208928 +47.34972115481911 +429.1806139049113 +23.0000202245397 +89.68581027319212 +0 +120 +absolute + + + +0.01 +smooth + +8.536429397546982 +47.34972157939346 +429.190843231733 +23.00059067335078 +89.68387451565755 +0 +120 +absolute + + + +0.01 +smooth + +8.536430508620315 +47.34972200684472 +429.2007135858 +23.000660140177626 +89.68191041188477 +0 +120 +absolute + + + +0.01 +smooth + +8.536431627398285 +47.34972243865455 +429.2104328981763 +22.999229311730595 +89.67972619845013 +0 +120 +absolute + + + +0.01 +smooth + +8.536432754985707 +47.34972287538755 +429.22007926880866 +22.995952333839714 +89.67725113777254 +0 +120 +absolute + + + +0.01 +smooth + +8.536433891195758 +47.34972331697335 +429.22964169635196 +22.990904406012795 +89.67449590052523 +0 +120 +absolute + + + +0.01 +smooth + +8.536435035841603 +47.34972376334159 +429.2391091794604 +22.984160727757615 +89.67147115738136 +0 +120 +absolute + + + +0.01 +smooth + +8.536436188736419 +47.349724214421954 +429.24847071678846 +22.975796498581975 +89.66818757901409 +0 +120 +absolute + + + +0.01 +smooth + +8.536437349693362 +47.349724670144006 +429.2577153069907 +22.965886917993643 +89.6646558360966 +0 +120 +absolute + + + +0.01 +smooth + +8.536438518525609 +47.34972513043748 +429.2668319487217 +22.95450718550043 +89.66088659930209 +0 +120 +absolute + + + +0.01 +smooth + +8.536439695046328 +47.349725595231945 +429.2758096406357 +22.941732500610104 +89.6568905393037 +0 +120 +absolute + + + +0.01 +smooth + +8.53644087906869 +47.34972606445709 +429.2846373813873 +22.92763806283048 +89.65267832677466 +0 +120 +absolute + + + +0.01 +smooth + +8.536442070405856 +47.34972653804252 +429.2933041696309 +22.912299071669317 +89.64826063238807 +0 +120 +absolute + + + +0.01 +smooth + +8.536443268871006 +47.34972701591791 +429.3017990040212 +22.895790726634427 +89.64364812681718 +0 +120 +absolute + + + +0.01 +smooth + +8.5364444742773 +47.34972749801288 +429.31011088321225 +22.87818822723358 +89.63885148073511 +0 +120 +absolute + + + +0.01 +smooth + +8.536445686437908 +47.34972798425707 +429.31822880585895 +22.85956677297458 +89.63388136481507 +0 +120 +absolute + + + +0.01 +smooth + +8.536446905166004 +47.349728474580175 +429.32614177061566 +22.840001563365217 +89.62874844973025 +0 +120 +absolute + + + +0.01 +smooth + +8.536448130274753 +47.349728968911776 +429.33383877613676 +22.81956779791327 +89.62346340615379 +0 +120 +absolute + + + +0.01 +smooth + +8.536449361577326 +47.34972946718154 +429.3413088210767 +22.79834067612653 +89.61803690475887 +0 +120 +absolute + + + +0.01 +smooth + +8.536450598886889 +47.349729969319114 +429.34854090409004 +22.77639539751279 +89.61247961621869 +0 +120 +absolute + + + +0.01 +smooth + +8.53645184201661 +47.349730475254134 +429.3555240238313 +22.753807161579836 +89.60680221120641 +0 +120 +absolute + + + +0.01 +smooth + +8.536453090779665 +47.34973098491622 +429.36224717895493 +22.730651167835454 +89.6010153603952 +0 +120 +absolute + + + +0.01 +smooth + +8.536454344989217 +47.34973149823507 +429.36869936811536 +22.707002615787438 +89.59512973445825 +0 +120 +absolute + + + +0.01 +smooth + +8.536455604458435 +47.349732015140276 +429.374869589967 +22.68293670494358 +89.58915600406874 +0 +120 +absolute + + + +0.01 +smooth + +8.53645686900049 +47.34973253556151 +429.3807468431644 +22.65852863481166 +89.58310483989985 +0 +120 +absolute + + + +0.01 +smooth + +8.53645813842855 +47.3497330594284 +429.3863201263621 +22.63385360489947 +89.57698691262473 +0 +120 +absolute + + + +0.01 +smooth + +8.536459412555784 +47.34973358667058 +429.3915784382144 +22.6089868147148 +89.57081289291658 +0 +120 +absolute + + + +0.01 +smooth + +8.53646069119536 +47.34973411721773 +429.396510777376 +22.584003463765445 +89.56459345144856 +0 +120 +absolute + + + +0.01 +smooth + +8.536461974160447 +47.34973465099945 +429.40110614250125 +22.558978751559177 +89.55833925889384 +0 +120 +absolute + + + +0.01 +smooth + +8.536463261264219 +47.34973518794541 +429.4053535322446 +22.5339878776038 +89.55206098592564 +0 +120 +absolute + + + +0.01 +smooth + +8.536464553068363 +47.34973572837566 +429.4093087476031 +22.508718982565412 +89.54572277520263 +0 +120 +absolute + + + +0.01 +smooth + +8.536465852465634 +47.34973627382501 +429.4132354937452 +22.481650279155872 +89.53914238510488 +0 +120 +absolute + + + +0.01 +smooth + +8.536467159607126 +47.34973682439669 +429.41715262957666 +22.45267183519812 +89.53230608771067 +0 +120 +absolute + + + +0.01 +smooth + +8.536468474311386 +47.34973738002038 +429.42104932873946 +22.421845385611217 +89.52522073231223 +0 +120 +absolute + + + +0.01 +smooth + +8.536469796396975 +47.34973794062584 +429.4249147648758 +22.389232665314236 +89.51789316820194 +0 +120 +absolute + + + +0.01 +smooth + +8.536471125682445 +47.34973850614274 +429.4287381116274 +22.354895409226252 +89.51033024467199 +0 +120 +absolute + + + +0.01 +smooth + +8.536472461986357 +47.34973907650084 +429.4325085426367 +22.318895352266352 +89.50253881101473 +0 +120 +absolute + + + +0.01 +smooth + +8.536473805127258 +47.34973965162979 +429.43621523154536 +22.28129422935359 +89.49452571652243 +0 +120 +absolute + + + +0.01 +smooth + +8.536475154923714 +47.34974023145936 +429.43984735199587 +22.242153775407065 +89.4862978104874 +0 +120 +absolute + + + +0.01 +smooth + +8.536476511194273 +47.34974081591924 +429.44339407763 +22.20153572534584 +89.47786194220194 +0 +120 +absolute + + + +0.01 +smooth + +8.536477873757487 +47.349741404939124 +429.44684458208957 +22.15950181408898 +89.46922496095826 +0 +120 +absolute + + + +0.01 +smooth + +8.536479242431923 +47.34974199844877 +429.45018803901706 +22.116113776555576 +89.46039371604877 +0 +120 +absolute + + + +0.01 +smooth + +8.53648061703613 +47.349742596377865 +429.4534136220544 +22.071433347664705 +89.45137505676568 +0 +120 +absolute + + + +0.01 +smooth + +8.536481997388657 +47.349743198656085 +429.45651050484344 +22.025522262335418 +89.44217583240126 +0 +120 +absolute + + + +0.01 +smooth + +8.536483383308072 +47.349743805213215 +429.4594678610265 +21.978442255486826 +89.4328028922479 +0 +120 +absolute + + + +0.01 +smooth + +8.536484774612921 +47.34974441597893 +429.4622748642454 +21.930255062037972 +89.42326308559784 +0 +120 +absolute + + + +0.01 +smooth + +8.536486171121762 +47.349745030882936 +429.4649206881423 +21.88102241690795 +89.41356326174332 +0 +120 +absolute + + + +0.01 +smooth + +8.536487572653153 +47.34974564985495 +429.4673945063592 +21.83080605501583 +89.4037102699767 +0 +120 +absolute + + + +0.01 +smooth + +8.536488979025645 +47.34974627282471 +429.46968549253813 +21.779667711280688 +89.39371095959022 +0 +120 +absolute + + + +0.01 +smooth + +8.536490390057796 +47.3497468997219 +429.4717828203212 +21.72766912062159 +89.38357217987621 +0 +120 +absolute + + + +0.01 +smooth + +8.536491805568163 +47.34974753047624 +429.4736756633504 +21.674872017957632 +89.37330078012694 +0 +120 +absolute + + + +0.01 +smooth + +8.536493225375299 +47.34974816501745 +429.47535319526787 +21.621338138207868 +89.36290360963473 +0 +120 +absolute + + + +0.01 +smooth + +8.536494649297758 +47.34974880327524 +429.4768045897155 +21.56712921629138 +89.35238751769182 +0 +120 +absolute + + + +0.01 +smooth + +8.5364960771541 +47.34974944517931 +429.4780190203354 +21.512306987127246 +89.34175935359055 +0 +120 +absolute + + + +0.01 +smooth + +8.536497508762876 +47.349750090659384 +429.4789856607697 +21.456933185634544 +89.33102596662319 +0 +120 +absolute + + + +0.01 +smooth + +8.536498943942643 +47.34975073964519 +429.4796936846604 +21.401069546732337 +89.320194206082 +0 +120 +absolute + + + +0.01 +smooth + +8.536500382511957 +47.34975139206641 +429.4801322656495 +21.34477780533971 +89.30927092125933 +0 +120 +absolute + + + +0.01 +smooth + +8.536501824289374 +47.34975204785278 +429.48029057737904 +21.28811969637574 +89.2982629614474 +0 +120 +absolute + + + +0.01 +smooth + +8.536503270779148 +47.34975270787328 +429.4802526141333 +21.230422444589948 +89.28709056741202 +0 +120 +absolute + + + +0.01 +smooth + +8.536504723850218 +47.349753373197 +429.48013123597747 +21.17084594135921 +89.27565474938949 +0 +120 +absolute + + + +0.01 +smooth + +8.53650618333388 +47.34975404375579 +429.4799295080576 +21.10943306556019 +89.26396092239706 +0 +120 +absolute + + + +0.01 +smooth + +8.53650764905677 +47.34975471947893 +429.47965023853953 +21.046228723711888 +89.25201474086695 +0 +120 +absolute + + + +0.01 +smooth + +8.536509120845526 +47.34975540029568 +429.4792962355896 +20.981277822333325 +89.23982185923137 +0 +120 +absolute + + + +0.01 +smooth + +8.53651059852678 +47.34975608613531 +429.4788703073737 +20.914625267943546 +89.22738793192252 +0 +120 +absolute + + + +0.01 +smooth + +8.536512081927166 +47.34975677692708 +429.4783752620579 +20.84631596706155 +89.21471861337265 +0 +120 +absolute + + + +0.01 +smooth + +8.536513570873321 +47.349757472600295 +429.4778139078083 +20.776394826206367 +89.20181955801398 +0 +120 +absolute + + + +0.01 +smooth + +8.53651506519188 +47.34975817308418 +429.4771890527909 +20.704906751897017 +89.18869642027875 +0 +120 +absolute + + + +0.01 +smooth + +8.536516564709476 +47.34975887830801 +429.4765035051716 +20.631896650652518 +89.17535485459908 +0 +120 +absolute + + + +0.01 +smooth + +8.536518069252743 +47.34975958820107 +429.4757600731166 +20.5574094289919 +89.16180051540724 +0 +120 +absolute + + + +0.01 +smooth + +8.536519578648319 +47.349760302692616 +429.4749615647919 +20.48148999343417 +89.14803905713546 +0 +120 +absolute + + + +0.01 +smooth + +8.536521092722834 +47.34976102171191 +429.4741107883634 +20.404183250498356 +89.13407613421595 +0 +120 +absolute + + + +0.01 +smooth + +8.536522611302928 +47.34976174518824 +429.4732105519974 +20.32553410670349 +89.11991740108088 +0 +120 +absolute + + + +0.01 +smooth + +8.536524134215233 +47.34976247305086 +429.4722636638596 +20.245587468568583 +89.10556851216253 +0 +120 +absolute + + + +0.01 +smooth + +8.536525661286383 +47.34976320522904 +429.47127293211645 +20.164388242612652 +89.0910351218931 +0 +120 +absolute + + + +0.01 +smooth + +8.536527192343017 +47.34976394165206 +429.4702411649336 +20.08198133535473 +89.07632288470478 +0 +120 +absolute + + + +0.01 +smooth + +8.536528727211767 +47.349764682249166 +429.46917117047735 +19.998411653313827 +89.06143745502979 +0 +120 +absolute + + + +0.01 +smooth + +8.536530265719266 +47.34976542694964 +429.4680657569135 +19.91372410300897 +89.04638448730039 +0 +120 +absolute + + + +0.01 +smooth + +8.53653180769215 +47.349766175682745 +429.4669277324083 +19.827963590959182 +89.03116963594873 +0 +120 +absolute + + + +0.01 +smooth + +8.536533352957058 +47.349766928377754 +429.4657599051277 +19.741175023683482 +89.01579855540706 +0 +120 +absolute + + + +0.01 +smooth + +8.536534901340616 +47.349767684963936 +429.4645650832378 +19.653403307700884 +89.00027690010761 +0 +120 +absolute + + + +0.01 +smooth + +8.536536452669468 +47.34976844537056 +429.4633460749045 +19.56469334953042 +88.98461032448257 +0 +120 +absolute + + + +0.01 +smooth + +8.536538006770243 +47.34976920952687 +429.46210568829395 +19.475090055691116 +88.96880448296417 +0 +120 +absolute + + + +0.01 +smooth + +8.53653956346958 +47.349769977362165 +429.46084673157213 +19.38463833270197 +88.95286502998461 +0 +120 +absolute + + + +0.01 +smooth + +8.536541122594109 +47.3497707488057 +429.45957201290514 +19.293383087082027 +88.93679761997612 +0 +120 +absolute + + + +0.01 +smooth + +8.536542683970467 +47.34977152378675 +429.458284340459 +19.2013692253503 +88.92060790737091 +0 +120 +absolute + + + +0.01 +smooth + +8.53654424757582 +47.34977230232472 +429.45697728171695 +19.108583010461455 +88.90429417764994 +0 +120 +absolute + + + +0.01 +smooth + +8.53654581561463 +47.34977308577106 +429.45550982259846 +19.01414236380239 +88.88774568769566 +0 +120 +absolute + + + +0.01 +smooth + +8.536547388742056 +47.34977387454456 +429.45384090070996 +18.917767302434726 +88.87092754213528 +0 +120 +absolute + + + +0.01 +smooth + +8.53654896679448 +47.349774668573076 +429.4519803367294 +18.819496626348343 +88.85384492720584 +0 +120 +absolute + + + +0.01 +smooth + +8.536550549608311 +47.34977546778447 +429.4499379513355 +18.719369135533103 +88.8365030291443 +0 +120 +absolute + + + +0.01 +smooth + +8.536552137019926 +47.34977627210657 +429.44772356520645 +18.617423629978877 +88.81890703418759 +0 +120 +absolute + + + +0.01 +smooth + +8.536553728865728 +47.34977708146724 +429.44534699902067 +18.513698909675565 +88.80106212857268 +0 +120 +absolute + + + +0.01 +smooth + +8.536555324982107 +47.34977789579435 +429.4428180734567 +18.40823377461301 +88.78297349853653 +0 +120 +absolute + + + +0.01 +smooth + +8.536556925205451 +47.349778715015695 +429.4401466091924 +18.30106702478109 +88.76464633031608 +0 +120 +absolute + + + +0.01 +smooth + +8.536558529372158 +47.34977953905916 +429.43734242690664 +18.19223746016971 +88.74608581014837 +0 +120 +absolute + + + +0.01 +smooth + +8.536560137318618 +47.349780367852595 +429.4344153472774 +18.081783880768707 +88.72729712427028 +0 +120 +absolute + + + +0.01 +smooth + +8.536561748881224 +47.34978120132385 +429.4313751909833 +17.969745086567976 +88.70828545891881 +0 +120 +absolute + + + +0.01 +smooth + +8.53656336389637 +47.349782039400765 +429.4282317787025 +17.85615987755738 +88.68905600033091 +0 +120 +absolute + + + +0.01 +smooth + +8.53656498220044 +47.349782882011176 +429.42499493111325 +17.741067053726805 +88.66961393474348 +0 +120 +absolute + + + +0.01 +smooth + +8.536566603629838 +47.349783729082944 +429.4216744688943 +17.62450541506611 +88.64996444839359 +0 +120 +absolute + + + +0.01 +smooth + +8.536568228020947 +47.349784580543925 +429.4182802127237 +17.506513761565177 +88.63011272751812 +0 +120 +absolute + + + +0.01 +smooth + +8.536569855210164 +47.34978543632196 +429.41482198327975 +17.387130893213886 +88.61006395835406 +0 +120 +absolute + + + +0.01 +smooth + +8.536571485033882 +47.349786296344895 +429.411309601241 +17.266395610002093 +88.58982332713838 +0 +120 +absolute + + + +0.01 +smooth + +8.53657311732849 +47.34978716054058 +429.4077528872857 +17.14434671191968 +88.56939602010802 +0 +120 +absolute + + + +0.01 +smooth + +8.536574751930385 +47.34978802883687 +429.4041616620922 +17.02102299895653 +88.54878722349994 +0 +120 +absolute + + + +0.01 +smooth + +8.536576388675954 +47.34978890116161 +429.4005457463388 +16.896463271102515 +88.5280021235511 +0 +120 +absolute + + + +0.01 +smooth + +8.536578027401593 +47.349789777442645 +429.396914960704 +16.770706328347494 +88.50704590649848 +0 +120 +absolute + + + +0.01 +smooth + +8.536579667943691 +47.34979065760783 +429.393279125866 +16.64379097068135 +88.48592375857902 +0 +120 +absolute + + + +0.01 +smooth + +8.536581310138644 +47.349791541585 +429.3896480625033 +16.515755998093972 +88.4646408660297 +0 +120 +absolute + + + +0.01 +smooth + +8.536582953822844 +47.34979242930202 +429.38603159129406 +16.386640210575205 +88.44320241508746 +0 +120 +absolute + + + +0.01 +smooth + +8.536584598832683 +47.349793320686736 +429.38243953291675 +16.25648240811494 +88.42161359198924 +0 +120 +absolute + + + +0.01 +smooth + +8.53658624500455 +47.34979421566698 +429.37888170804973 +16.12532139070306 +88.39987958297208 +0 +120 +absolute + + + +0.01 +smooth + +8.536587892174841 +47.34979511417062 +429.37536793737127 +15.993195958329416 +88.37800557427286 +0 +120 +absolute + + + +0.01 +smooth + +8.536589540817442 +47.34979601653537 +429.3718783170236 +15.859902245662832 +88.35596559918451 +0 +120 +absolute + + + +0.01 +smooth + +8.53659119296863 +47.34979692409934 +429.3683176675143 +15.72464224611557 +88.3336574929326 +0 +120 +absolute + + + +0.01 +smooth + +8.53659284865935 +47.34979783690675 +429.3646815021354 +15.587381985534911 +88.31107726479868 +0 +120 +absolute + + + +0.01 +smooth + +8.53659450773591 +47.34979875488282 +429.3609738339627 +15.448157798006749 +88.28822995356397 +0 +120 +absolute + + + +0.01 +smooth + +8.536596170044621 +47.34979967795286 +429.35719867607327 +15.307006017617034 +88.26512059800982 +0 +120 +absolute + + + +0.01 +smooth + +8.536597835431794 +47.349800606042116 +429.35336004154306 +15.163962978451707 +88.2417542369174 +0 +120 +absolute + + + +0.01 +smooth + +8.536599503743735 +47.3498015390759 +429.3494619434486 +15.01906501459668 +88.21813590906811 +0 +120 +absolute + + + +0.01 +smooth + +8.536601174826759 +47.349802476979455 +429.34550839486633 +14.872348460137896 +88.19427065324321 +0 +120 +absolute + + + +0.01 +smooth + +8.536602848527169 +47.349803419678054 +429.3415034088724 +14.723849649161279 +88.17016350822394 +0 +120 +absolute + + + +0.01 +smooth + +8.536604524691278 +47.349804367097 +429.3374509985437 +14.573604915752783 +88.14581951279166 +0 +120 +absolute + + + +0.01 +smooth + +8.536606203165395 +47.34980531916153 +429.3333551769561 +14.421650593998308 +88.12124370572761 +0 +120 +absolute + + + +0.01 +smooth + +8.536607883795828 +47.349806275796944 +429.3292199571862 +14.268023017983797 +88.09644112581306 +0 +120 +absolute + + + +0.01 +smooth + +8.536609566428893 +47.349807236928534 +429.3250493523106 +14.112758521795206 +88.07141681182938 +0 +120 +absolute + + + +0.01 +smooth + +8.536611250910893 +47.349808202481526 +429.32084737540544 +13.955893439518427 +88.04617580255776 +0 +120 +absolute + + + +0.01 +smooth + +8.536612937088142 +47.34980917238124 +429.31661803954734 +13.797464105239415 +88.0207231367796 +0 +120 +absolute + + + +0.01 +smooth + +8.536614624806946 +47.349810146552926 +429.3123653578124 +13.637506853044105 +87.99506385327608 +0 +120 +absolute + + + +0.01 +smooth + +8.536616313913616 +47.34981112492188 +429.3080933432773 +13.47605801701841 +87.96920299082853 +0 +120 +absolute + + + +0.01 +smooth + +8.53661800425446 +47.34981210741334 +429.30380600901816 +13.313153931248271 +87.94314558821824 +0 +120 +absolute + + + +0.01 +smooth + +8.53661969567579 +47.349813093952605 +429.29950736811156 +13.14883092981962 +87.91689668422651 +0 +120 +absolute + + + +0.01 +smooth + +8.536621388023917 +47.34981408446495 +429.2952014336339 +12.983125346818404 +87.89046131763465 +0 +120 +absolute + + + +0.01 +smooth + +8.536623081145146 +47.34981507887566 +429.2908922186615 +12.816073516330526 +87.86384452722386 +0 +120 +absolute + + + +0.01 +smooth + +8.53662477488579 +47.34981607710997 +429.2865837362709 +12.647711772441932 +87.8370513517755 +0 +120 +absolute + + + +0.01 +smooth + +8.536626469092159 +47.34981707909319 +429.28227999953833 +12.478076449238566 +87.81008683007087 +0 +120 +absolute + + + +0.01 +smooth + +8.53662816361056 +47.349818084750595 +429.2779850215403 +12.307203880806332 +87.7829560008912 +0 +120 +absolute + + + +0.01 +smooth + +8.536629858287304 +47.34981909400744 +429.2737028153531 +12.135130401231178 +87.75566390301782 +0 +120 +absolute + + + +0.01 +smooth + +8.536631552968702 +47.34982010678901 +429.2694373940532 +11.961892344599045 +87.72821557523201 +0 +120 +absolute + + + +0.01 +smooth + +8.53663324750106 +47.34982112302058 +429.265192770717 +11.787526044995843 +87.70061605631506 +0 +120 +absolute + + + +0.01 +smooth + +8.536634941730691 +47.349822142627424 +429.2609729584209 +11.612067836507512 +87.67287038504823 +0 +120 +absolute + + + +0.01 +smooth + +8.536636636891535 +47.349823166480526 +429.256751806716 +11.435028356270731 +87.6449155669286 +0 +120 +absolute + + + +0.01 +smooth + +8.536638334223023 +47.34982419544859 +429.2525021062257 +11.255917714895938 +87.616688623022 +0 +120 +absolute + + + +0.01 +smooth + +8.536640033579681 +47.34982522945336 +429.24822628163395 +11.074771456679631 +87.58819461546285 +0 +120 +absolute + + + +0.01 +smooth + +8.536641734816042 +47.34982626841666 +429.2439267576253 +10.891625125918369 +87.55943860638557 +0 +120 +absolute + + + +0.01 +smooth + +8.53664343778664 +47.34982731226026 +429.23960595888377 +10.706514266908696 +87.53042565792454 +0 +120 +absolute + + + +0.01 +smooth + +8.536645142346007 +47.349828360905946 +429.2352663100938 +10.519474423947123 +87.50116083221425 +0 +120 +absolute + + + +0.01 +smooth + +8.536646848348676 +47.34982941427554 +429.2309102359396 +10.330541141330203 +87.4716491913891 +0 +120 +absolute + + + +0.01 +smooth + +8.536648555649178 +47.34983047229077 +429.2265401611051 +10.139749963354467 +87.44189579758346 +0 +120 +absolute + + + +0.01 +smooth + +8.536650264102045 +47.34983153487349 +429.22215851027516 +9.947136434316475 +87.41190571293181 +0 +120 +absolute + + + +0.01 +smooth + +8.536651973561806 +47.34983260194544 +429.21776770813364 +9.75273609851272 +87.38168399956854 +0 +120 +absolute + + + +0.01 +smooth + +8.536653683883 +47.34983367342842 +429.2133701793647 +9.556584500239762 +87.35123571962806 +0 +120 +absolute + + + +0.01 +smooth + +8.536655394920157 +47.34983474924425 +429.20896834865306 +9.358717183794159 +87.32056593524486 +0 +120 +absolute + + + +0.01 +smooth + +8.536657106527805 +47.349835829314664 +429.2045646406826 +9.159169693472402 +87.2896797085533 +0 +120 +absolute + + + +0.01 +smooth + +8.536658818560479 +47.349836913561504 +429.20016148013775 +8.957977573571057 +87.25858210168784 +0 +120 +absolute + + + +0.01 +smooth + +8.536660530872712 +47.349838001906534 +429.19576129170264 +8.75517636838667 +87.22727817678285 +0 +120 +absolute + + + +0.01 +smooth + +8.536662243319038 +47.34983909427154 +429.19136650006163 +8.55080162221574 +87.19577299597279 +0 +120 +absolute + + + +0.01 +smooth + +8.536663955753983 +47.349840190578306 +429.186979529899 +8.344888879354828 +87.16407162139207 +0 +120 +absolute + + + +0.01 +smooth + +8.536665668032084 +47.34984129074864 +429.18260280589897 +8.137473684100469 +87.1321791151751 +0 +120 +absolute + + + +0.01 +smooth + +8.536667380007872 +47.34984239470432 +429.17823875274564 +7.928591580749212 +87.10010053945635 +0 +120 +absolute + + + +0.01 +smooth + +8.53666909153588 +47.34984350236713 +429.1738897951235 +7.718278113597564 +87.06784095637019 +0 +120 +absolute + + + +0.01 +smooth + +8.536670802470638 +47.34984461365886 +429.1695583577168 +7.506568826942077 +87.03540542805106 +0 +120 +absolute + + + +0.01 +smooth + +8.53667251266668 +47.34984572850131 +429.1652468652097 +7.293499265079305 +87.00279901663339 +0 +120 +absolute + + + +0.01 +smooth + +8.536674221978538 +47.34984684681626 +429.16095774228654 +7.079104972305748 +86.97002678425159 +0 +120 +absolute + + + +0.01 +smooth + +8.536675930260744 +47.349847968525495 +429.1566934136314 +6.863421492917961 +86.93709379304008 +0 +120 +absolute + + + +0.01 +smooth + +8.536677637367829 +47.3498490935508 +429.1524563039287 +6.64648437121248 +86.90400510513328 +0 +120 +absolute + + + +0.01 +smooth + +8.536679343154326 +47.34985022181398 +429.1482488378628 +6.428329151485864 +86.87076578266564 +0 +120 +absolute + + + +0.01 +smooth + +8.53668104747477 +47.349851353236815 +429.1440734401177 +6.2089913780346055 +86.83738088777156 +0 +120 +absolute + + + +0.01 +smooth + +8.536682750345612 +47.34985248785463 +429.1399300997027 +5.988446677272251 +86.8038476904054 +0 +120 +absolute + + + +0.01 +smooth + +8.536684453545995 +47.349853626936486 +429.1357921084365 +5.7660189273704745 +86.77007873612064 +0 +120 +absolute + + + +0.01 +smooth + +8.536686157493 +47.34985477079224 +429.1316528691295 +5.5415370525323855 +86.73605232042527 +0 +120 +absolute + + + +0.01 +smooth + +8.536687862045552 +47.34985591933985 +429.12751413812265 +5.315036635203149 +86.70177362211187 +0 +120 +absolute + + + +0.01 +smooth + +8.536689567062576 +47.349857072497365 +429.1233776717579 +5.086553257827929 +86.66724781997304 +0 +120 +absolute + + + +0.01 +smooth + +8.536691272402983 +47.34985823018273 +429.11924522637656 +4.856122502851831 +86.63248009280139 +0 +120 +absolute + + + +0.01 +smooth + +8.536692977925702 +47.349859392313974 +429.11511855832015 +4.623779952720021 +86.59747561938948 +0 +120 +absolute + + + +0.01 +smooth + +8.536694683489657 +47.349860558809105 +429.1109994239304 +4.389561189877643 +86.56223957852995 +0 +120 +absolute + + + +0.01 +smooth + +8.536696388953759 +47.34986172958609 +429.1068895795485 +4.153501796769863 +86.52677714901537 +0 +120 +absolute + + + +0.01 +smooth + +8.53669809417694 +47.349862904562954 +429.10279078151626 +3.9156373558417847 +86.49109350963839 +0 +120 +absolute + + + +0.01 +smooth + +8.536699799018116 +47.34986408365768 +429.09870478617506 +3.6760034495385745 +86.45519383919152 +0 +120 +absolute + + + +0.01 +smooth + +8.536701503336207 +47.34986526678825 +429.0946333498663 +3.434635660305396 +86.41908331646736 +0 +120 +absolute + + + +0.01 +smooth + +8.536703206990138 +47.34986645387269 +429.0905782289317 +3.1915695705873537 +86.38276712025859 +0 +120 +absolute + + + +0.01 +smooth + +8.536704909838825 +47.349867644829 +429.0865411797126 +2.946840762829613 +86.3462504293577 +0 +120 +absolute + + + +0.01 +smooth + +8.536706611741195 +47.34986883957514 +429.0825239585505 +2.700484819477319 +86.30953842255735 +0 +120 +absolute + + + +0.01 +smooth + +8.536708312556167 +47.349870038029145 +429.07852832178713 +2.452537322975641 +86.27263627865015 +0 +120 +absolute + + + +0.01 +smooth + +8.53671001214266 +47.349871240108996 +429.0745560257638 +2.203033855769677 +86.23554917642863 +0 +120 +absolute + + + +0.01 +smooth + +8.5367117103596 +47.34987244573271 +429.0706088268222 +1.9520100003045948 +86.19828229468543 +0 +120 +absolute + + + +0.01 +smooth + +8.536713407065903 +47.34987365481827 +429.0666884813036 +1.6995013390255616 +86.16084081221315 +0 +120 +absolute + + + +0.01 +smooth + +8.536715102120494 +47.34987486728366 +429.0627967455497 +1.4455434543776788 +86.12322990780436 +0 +120 +absolute + + + +0.01 +smooth + +8.536716795382294 +47.349876083046894 +429.05893537590197 +1.1901719288061121 +86.08545476025168 +0 +120 +absolute + + + +0.01 +smooth + +8.536718486710221 +47.34987730202597 +429.05510612870194 +0.9334223447560308 +86.04752054834768 +0 +120 +absolute + + + +0.01 +smooth + +8.536720175963202 +47.34987852413889 +429.051310760291 +0.675330284672533 +86.00943245088496 +0 +120 +absolute + + + +0.01 +smooth + +8.536721863000153 +47.34987974930364 +429.04755102701085 +0.4159313310007876 +85.97119564665611 +0 +120 +absolute + + + +0.01 +smooth + +8.536723547679998 +47.349880977438225 +429.04382868520287 +0.15526106618593832 +85.93281531445376 +0 +120 +absolute + + + +0.01 +smooth + +8.536725229861657 +47.349882208460635 +429.0401454912086 +-0.10664492732684505 +85.89429663307047 +0 +120 +absolute + + + +0.01 +smooth + +8.536726909404052 +47.34988344228888 +429.0365032013696 +-0.36975106709246564 +85.85564478129885 +0 +120 +absolute + + + +0.01 +smooth + +8.536728586166102 +47.34988467884094 +429.0329035720273 +-0.6340217706657538 +85.81686493793148 +0 +120 +absolute + + + +0.01 +smooth + +8.536730260658528 +47.349885918479735 +429.02933979907124 +-0.8996458944520318 +85.77793288839644 +0 +120 +absolute + + + +0.01 +smooth + +8.5367319346283 +47.34988716241093 +429.025788687339 +-1.1672380911375424 +85.73876870719035 +0 +120 +absolute + + + +0.01 +smooth + +8.536733608052373 +47.34988841063103 +429.02225012705594 +-1.4368036346719948 +85.69937233071475 +0 +120 +absolute + + + +0.01 +smooth + +8.536735280787958 +47.3498896630547 +429.0187255763009 +-1.708306569952926 +85.65974909653376 +0 +120 +absolute + + + +0.01 +smooth + +8.536736952692264 +47.34989091959661 +429.0152164931527 +-1.9817109418778496 +85.61990434221156 +0 +120 +absolute + + + +0.01 +smooth + +8.536738623622504 +47.34989218017149 +429.011724335691 +-2.256980795344352 +85.57984340531239 +0 +120 +absolute + + + +0.01 +smooth + +8.536740293435887 +47.34989344469401 +429.0082505619941 +-2.534080175249946 +85.5395716234004 +0 +120 +absolute + + + +0.01 +smooth + +8.536741961989627 +47.34989471307888 +429.00479663014175 +-2.812973126492145 +85.49909433403988 +0 +120 +absolute + + + +0.01 +smooth + +8.53674362914093 +47.3498959852408 +429.00136399821247 +-3.0936236939685364 +85.45841687479493 +0 +120 +absolute + + + +0.01 +smooth + +8.536745294747009 +47.349897261094426 +428.9979541242857 +-3.375995922576631 +85.4175445832298 +0 +120 +absolute + + + +0.01 +smooth + +8.536746958665079 +47.349898540554484 +428.9945684664402 +-3.6600538572139447 +85.3764827969087 +0 +120 +absolute + + + +0.01 +smooth + +8.536748620752347 +47.34989982353566 +428.9912084827552 +-3.945761542778062 +85.33523685339578 +0 +120 +absolute + + + +0.01 +smooth + +8.536750280866023 +47.34990110995265 +428.98787563130975 +-4.233083024166498 +85.2938120902553 +0 +120 +absolute + + + +0.01 +smooth + +8.53675193886332 +47.34990239972013 +428.9845713701828 +-4.521982346276788 +85.2522138450514 +0 +120 +absolute + + + +0.01 +smooth + +8.536753594601448 +47.349903692752804 +428.98129715745335 +-4.812423554006446 +85.21044745534832 +0 +120 +absolute + + + +0.01 +smooth + +8.536755247937617 +47.34990498896537 +428.9780544512007 +-5.1043706922530605 +85.16851825871022 +0 +120 +absolute + + + +0.01 +smooth + +8.536756898729038 +47.34990628827252 +428.97484470950354 +-5.3977878059141435 +85.12643159270134 +0 +120 +absolute + + + +0.01 +smooth + +8.536758546832923 +47.349907590588934 +428.9716693904413 +-5.692638939887205 +85.08419279488587 +0 +120 +absolute + + + +0.01 +smooth + +8.536760192106481 +47.349908895829316 +428.9685299520928 +-5.988888139069836 +85.04180720282798 +0 +120 +absolute + + + +0.01 +smooth + +8.536761834406928 +47.34991020390835 +428.9654278525371 +-6.286499448359549 +84.9992801540919 +0 +120 +absolute + + + +0.01 +smooth + +8.536763473591467 +47.349911514740754 +428.9623645498533 +-6.585436912653853 +84.95661698624183 +0 +120 +absolute + + + +0.01 +smooth + +8.536765109517315 +47.34991282824119 +428.9593415021204 +-6.885664576850338 +84.91382303684193 +0 +120 +absolute + + + +0.01 +smooth + +8.53676674204168 +47.349914144324366 +428.9563601674176 +-7.18714648584652 +84.87090364345644 +0 +120 +absolute + + + +0.01 +smooth + +8.536768371021774 +47.349915462904974 +428.9534220038238 +-7.4898466845399305 +84.82786414364955 +0 +120 +absolute + + + +0.01 +smooth + +8.536769996314806 +47.34991678389771 +428.95052846941803 +-7.7937292178280835 +84.78470987498547 +0 +120 +absolute + + + +0.01 +smooth + +8.53677161777799 +47.34991810721725 +428.9476810222794 +-8.098758130608571 +84.74144617502836 +0 +120 +absolute + + + +0.01 +smooth + +8.536773235268534 +47.3499194327783 +428.9448811204871 +-8.404897467778904 +84.69807838134244 +0 +120 +absolute + + + +0.01 +smooth + +8.53677484864723 +47.34992076049779 +428.9421301767768 +-8.712112347909093 +84.65461168880442 +0 +120 +absolute + + + +0.01 +smooth + +8.536776459337695 +47.3499220912604 +428.9394097755343 +-9.020837018369795 +84.61098896764662 +0 +120 +absolute + + + +0.01 +smooth + +8.536778068481222 +47.349923425778904 +428.9367049441377 +-9.331422814289452 +84.56716418301089 +0 +120 +absolute + + + +0.01 +smooth + +8.536779675925073 +47.34992476396599 +428.934017067923 +-9.643833420927086 +84.52314283462121 +0 +120 +absolute + + + +0.01 +smooth + +8.536781281516504 +47.34992610573428 +428.93134753222574 +-9.958032523541654 +84.47893042220153 +0 +120 +absolute + + + +0.01 +smooth + +8.53678288510278 +47.34992745099646 +428.92869772238186 +-10.273983807392222 +84.43453244547581 +0 +120 +absolute + + + +0.01 +smooth + +8.536784486531154 +47.34992879966512 +428.92606902372705 +-10.59165095773776 +84.38995440416795 +0 +120 +absolute + + + +0.01 +smooth + +8.536786085648892 +47.349930151653 +428.9234628215971 +-10.910997659837253 +84.34520179800201 +0 +120 +absolute + + + +0.01 +smooth + +8.536787682303247 +47.34993150687268 +428.92088050132764 +-11.231987598949745 +84.30028012670185 +0 +120 +absolute + + + +0.01 +smooth + +8.536789276341484 +47.34993286523685 +428.9183234482545 +-11.554584460334217 +84.25519488999146 +0 +120 +absolute + + + +0.01 +smooth + +8.536790867610863 +47.34993422665818 +428.9157930477136 +-11.878751929249647 +84.20995158759483 +0 +120 +absolute + + + +0.01 +smooth + +8.536792455958638 +47.349935591049295 +428.91329068504047 +-12.204453690955086 +84.16455571923584 +0 +120 +absolute + + + +0.01 +smooth + +8.536794041232076 +47.349936958322864 +428.91081774557097 +-12.531653430709515 +84.1190127846385 +0 +120 +absolute + + + +0.01 +smooth + +8.536795623278431 +47.34993832839155 +428.9083756146409 +-12.86031483377193 +84.07332828352679 +0 +120 +absolute + + + +0.01 +smooth + +8.536797201944964 +47.34993970116798 +428.90596567758587 +-13.190401585401304 +84.02750771562458 +0 +120 +absolute + + + +0.01 +smooth + +8.536798777078936 +47.349941076564825 +428.9035893197419 +-13.521877370856707 +83.98155658065589 +0 +120 +absolute + + + +0.01 +smooth + +8.536800348527604 +47.34994245449475 +428.90124792644446 +-13.854705875397102 +83.93548037834466 +0 +120 +absolute + + + +0.01 +smooth + +8.536801916138232 +47.349943834870395 +428.8989428830296 +-14.188850784281467 +83.88928460841484 +0 +120 +absolute + + + +0.01 +smooth + +8.536803479758076 +47.34994521760442 +428.8966755748327 +-14.524275782768857 +83.84297477059036 +0 +120 +absolute + + + +0.01 +smooth + +8.536805039234396 +47.34994660260947 +428.89444738719 +-14.860944556118255 +83.79655636459523 +0 +120 +absolute + + + +0.01 +smooth + +8.536806594414452 +47.34994798979821 +428.8922597054368 +-15.198820789588655 +83.75003489015337 +0 +120 +absolute + + + +0.01 +smooth + +8.536808145145505 +47.34994937908329 +428.8901139149092 +-15.537868168439031 +83.70341584698875 +0 +120 +absolute + + + +0.01 +smooth + +8.536809691274811 +47.349950770377376 +428.8880114009428 +-15.878050377928446 +83.6567047348253 +0 +120 +absolute + + + +0.01 +smooth + +8.536811232649637 +47.34995216359311 +428.8859535488734 +-16.219331103315874 +83.60990705338702 +0 +120 +absolute + + + +0.01 +smooth + +8.536812769117233 +47.34995355864315 +428.8839417440367 +-16.561674029860285 +83.56302830239781 +0 +120 +absolute + + + +0.01 +smooth + +8.536814300524867 +47.349954955440154 +428.88197737176847 +-16.90504284282074 +83.51607398158167 +0 +120 +absolute + + + +0.01 +smooth + +8.536815826719792 +47.34995635389676 +428.8800618174047 +-17.24940122745621 +83.46904959066254 +0 +120 +absolute + + + +0.01 +smooth + +8.53681734754927 +47.34995775392565 +428.87819646628077 +-17.594712869025674 +83.42196062936435 +0 +120 +absolute + + + +0.01 +smooth + +8.536818863124486 +47.349959155576705 +428.8763793258997 +-17.9410057823904 +83.37480382059172 +0 +120 +absolute + + + +0.01 +smooth + +8.536820375727332 +47.349960560032024 +428.8745805985529 +-18.28883867253264 +83.32750352321507 +0 +120 +absolute + + + +0.01 +smooth + +8.536821885779839 +47.34996196751285 +428.87279424760635 +-18.638319882588057 +83.2800456178161 +0 +120 +absolute + + + +0.01 +smooth + +8.53682339310899 +47.349963377931566 +428.8710218479215 +-18.98941300874293 +83.23243574103488 +0 +120 +absolute + + + +0.01 +smooth + +8.536824897541777 +47.34996479120062 +428.8692649743602 +-19.342081647183644 +83.1846795295117 +0 +120 +absolute + + + +0.01 +smooth + +8.536826398905188 +47.34996620723243 +428.86752520178425 +-19.696289394096503 +83.13678261988679 +0 +120 +absolute + + + +0.01 +smooth + +8.536827897026203 +47.34996762593937 +428.865804105055 +-20.051999845667776 +83.08875064880024 +0 +120 +absolute + + + +0.01 +smooth + +8.536829391731821 +47.34996904723391 +428.86410325903444 +-20.409176598083864 +83.04058925289235 +0 +120 +absolute + + + +0.01 +smooth + +8.536830882849024 +47.349970471028435 +428.86242423858414 +-20.76778324753105 +82.99230406880328 +0 +120 +absolute + + + +0.01 +smooth + +8.536832370204795 +47.34997189723535 +428.86076861856566 +-21.127783390195656 +82.94390073317321 +0 +120 +absolute + + + +0.01 +smooth + +8.53683385362613 +47.349973325767095 +428.8591379738409 +-21.48914062226398 +82.89538488264238 +0 +120 +absolute + + + +0.01 +smooth + +8.536835332940008 +47.349974756536064 +428.8575338792714 +-21.85181853992239 +82.84676215385097 +0 +120 +absolute + + + +0.01 +smooth + +8.53683680797342 +47.34997618945468 +428.8559579097188 +-22.21578073935719 +82.79803818343917 +0 +120 +absolute + + + +0.01 +smooth + +8.53683827855336 +47.34997762443536 +428.854411640045 +-22.58099081675467 +82.74921860804723 +0 +120 +absolute + + + +0.01 +smooth + +8.536839744506809 +47.34997906139052 +428.85289664511146 +-22.94741236830122 +82.7003090643153 +0 +120 +absolute + + + +0.01 +smooth + +8.536841205660755 +47.349980500232576 +428.85141449978005 +-23.315008990183117 +82.65131518888359 +0 +120 +absolute + + + +0.01 +smooth + +8.536842661842186 +47.349981940873946 +428.8499667789124 +-23.683744278586655 +82.60224261839232 +0 +120 +absolute + + + +0.01 +smooth + +8.536844112878093 +47.34998338322703 +428.84855505737016 +-24.053581829698228 +82.55309698948169 +0 +120 +absolute + + + +0.01 +smooth + +8.53684555859546 +47.34998482720426 +428.8471809100149 +-24.42448523970412 +82.50388393879189 +0 +120 +absolute + + + +0.01 +smooth + +8.536846998821273 +47.34998627271803 +428.8458459117086 +-24.796418104790643 +82.4546091029631 +0 +120 +absolute + + + +0.01 +smooth + +8.536848433382524 +47.34998771968078 +428.84455163731263 +-25.169344021144102 +82.40527811863555 +0 +120 +absolute + + + +0.01 +smooth + +8.536849862106198 +47.34998916800492 +428.8432996616889 +-25.54322658495088 +82.35589662244942 +0 +120 +absolute + + + +0.01 +smooth + +8.536851284819283 +47.34999061760284 +428.8420915596988 +-25.918029392397266 +82.30647025104496 +0 +120 +absolute + + + +0.01 +smooth + +8.536852701348769 +47.34999206838698 +428.84092890620445 +-26.29371603966954 +82.25700464106231 +0 +120 +absolute + + + +0.01 +smooth + +8.536854111521642 +47.34999352026976 +428.8398132760672 +-26.67025012295411 +82.20750542914169 +0 +120 +absolute + + + +0.01 +smooth + +8.536855515164886 +47.34999497316358 +428.8387462441489 +-27.047595238437243 +82.15797825192332 +0 +120 +absolute + + + +0.01 +smooth + +8.536856912105494 +47.34999642698085 +428.83772938531115 +-27.425714982305273 +82.1084287460474 +0 +120 +absolute + + + +0.01 +smooth + +8.536858302170451 +47.349997881634 +428.8367642744157 +-27.80457295074449 +82.0588625481541 +0 +120 +absolute + + + +0.01 +smooth + +8.536859686320774 +47.34999933749828 +428.8358355035034 +-28.184343989844052 +82.00925521905545 +0 +120 +absolute + + + +0.01 +smooth + +8.536861067138501 +47.350000795618335 +428.83490371481264 +-28.56550826830336 +81.95953892467253 +0 +120 +absolute + + + +0.01 +smooth + +8.536862444543594 +47.35000225595961 +428.83396972253433 +-28.948053210986984 +81.90971605289378 +0 +120 +absolute + + + +0.01 +smooth + +8.536863818329683 +47.35000371843622 +428.8330362396958 +-29.331942774300458 +81.85979233434541 +0 +120 +absolute + + + +0.01 +smooth + +8.53686518829038 +47.350005182962214 +428.83210597932396 +-29.717140914649224 +81.80977349965356 +0 +120 +absolute + + + +0.01 +smooth + +8.536866554219314 +47.35000664945169 +428.8311816544461 +-30.10361158843872 +81.75966527944443 +0 +120 +absolute + + + +0.01 +smooth + +8.536867915910099 +47.35000811781868 +428.830265978089 +-30.491318752074474 +81.70947340434411 +0 +120 +absolute + + + +0.01 +smooth + +8.53686927315636 +47.35000958797731 +428.82936166328 +-30.880226361961935 +81.65920360497887 +0 +120 +absolute + + + +0.01 +smooth + +8.536870625751716 +47.350011059841634 +428.8284714230463 +-31.270298374506563 +81.60886161197485 +0 +120 +absolute + + + +0.01 +smooth + +8.53687197348979 +47.3500125333257 +428.82759797041473 +-31.661498746113818 +81.55845315595819 +0 +120 +absolute + + + +0.01 +smooth + +8.536873316164197 +47.35001400834362 +428.82674401841246 +-32.05379143318921 +81.5079839675551 +0 +120 +absolute + + + +0.01 +smooth + +8.536874653568566 +47.35001548480946 +428.82591228006686 +-32.447140392138195 +81.45745977739173 +0 +120 +absolute + + + +0.01 +smooth + +8.53687598549651 +47.35001696263727 +428.8251054684045 +-32.841509579366196 +81.40688631609426 +0 +120 +absolute + + + +0.01 +smooth + +8.536877311741655 +47.35001844174115 +428.8243262964529 +-33.236862951278766 +81.35626931428885 +0 +120 +absolute + + + +0.01 +smooth + +8.53687863209762 +47.35001992203517 +428.823577477239 +-33.63316446428133 +81.30561450260167 +0 +120 +absolute + + + +0.01 +smooth + +8.536879946358024 +47.35002140343339 +428.82286172378974 +-34.030378074779335 +81.25492761165889 +0 +120 +absolute + + + +0.01 +smooth + +8.53688125431649 +47.35002288584988 +428.8221817491325 +-34.42846773917831 +81.2042143720867 +0 +120 +absolute + + + +0.01 +smooth + +8.536882555766637 +47.350024369198735 +428.8215402662943 +-34.8273974138837 +81.15348051451123 +0 +120 +absolute + + + +0.01 +smooth + +8.53688385050209 +47.35002585339402 +428.82093998830203 +-35.22713105530097 +81.10273176955869 +0 +120 +absolute + + + +0.01 +smooth + +8.53688513831646 +47.35002733834982 +428.8203836281829 +-35.62763261983555 +81.05197386785525 +0 +120 +absolute + + + +0.01 +smooth + +8.536886419003379 +47.35002882398018 +428.8198738989641 +-36.028866063893005 +81.00121254002704 +0 +120 +absolute + + + +0.01 +smooth + +8.536887692356462 +47.3500303101992 +428.81941351367266 +-36.43079534387874 +80.95045351670026 +0 +120 +absolute + + + +0.01 +smooth + +8.536888958169328 +47.35003179692096 +428.81900518533564 +-36.833384416198214 +80.8997025285011 +0 +120 +absolute + + + +0.01 +smooth + +8.536890216235603 +47.35003328405949 +428.8186516269801 +-37.23659723725696 +80.8489653060557 +0 +120 +absolute + + + +0.01 +smooth + +8.536891466348903 +47.35003477152892 +428.81835555163326 +-37.64039776346041 +80.79824757999023 +0 +120 +absolute + + + +0.01 +smooth + +8.536892708302853 +47.35003625924328 +428.8181196723221 +-38.044749951214044 +80.74755508093088 +0 +120 +absolute + + + +0.01 +smooth + +8.53689394189107 +47.35003774711667 +428.8179467020737 +-38.44961775692329 +80.6968935395038 +0 +120 +absolute + + + +0.01 +smooth + +8.536895166933181 +47.350039235070994 +428.81783902493646 +-38.85496863558436 +80.64626815578757 +0 +120 +absolute + + + +0.01 +smooth + +8.53689638628137 +47.35004072394495 +428.8177599953717 +-39.261179562229174 +80.59562206476913 +0 +120 +absolute + + + +0.01 +smooth + +8.53689760179106 +47.35004221428967 +428.8176833669254 +-39.668498672304935 +80.54491806122626 +0 +120 +absolute + + + +0.01 +smooth + +8.536898813203994 +47.350043706022454 +428.81760917956365 +-40.07689083920782 +80.49416192030236 +0 +120 +absolute + + + +0.01 +smooth + +8.536900020261895 +47.350045199060546 +428.8175374732517 +-40.48632093633385 +80.44335941714066 +0 +120 +absolute + + + +0.01 +smooth + +8.536901222706508 +47.35004669332129 +428.8174682879559 +-40.89675383707909 +80.39251632688458 +0 +120 +absolute + + + +0.01 +smooth + +8.536902420279562 +47.350048188721935 +428.81740166364125 +-41.30815441483965 +80.34163842467734 +0 +120 +absolute + + + +0.01 +smooth + +8.536903612722787 +47.35004968517978 +428.8173376402739 +-41.72048754301159 +80.2907314856623 +0 +120 +absolute + + + +0.01 +smooth + +8.536904799777924 +47.350051182612134 +428.81727625781963 +-42.133718094991 +80.23980128498285 +0 +120 +absolute + + + +0.01 +smooth + +8.536905981186697 +47.35005268093623 +428.8172175562438 +-42.547810944173904 +80.18885359778216 +0 +120 +absolute + + + +0.01 +smooth + +8.53690715669085 +47.350054180069435 +428.81716157551244 +-42.96273096395646 +80.1378941992037 +0 +120 +absolute + + + +0.01 +smooth + +8.536908326032114 +47.35005567992897 +428.8171083555913 +-43.3784430277347 +80.08692886439071 +0 +120 +absolute + + + +0.01 +smooth + +8.536909488952215 +47.350057180432145 +428.81705793644574 +-43.79491200890465 +80.0359633684865 +0 +120 +absolute + + + +0.01 +smooth + +8.536910645192897 +47.35005868149625 +428.81701035804184 +-44.212102780862494 +79.98500348663443 +0 +120 +absolute + + + +0.01 +smooth + +8.536911794495886 +47.35006018303856 +428.816965660345 +-44.62998021700423 +79.93405499397775 +0 +120 +absolute + + + +0.01 +smooth + +8.536912936602915 +47.350061684976396 +428.8169238833212 +-45.04850919072598 +79.88312366565987 +0 +120 +absolute + + + +0.01 +smooth + +8.536914071255726 +47.350063187227015 +428.8168850669361 +-45.46765457542374 +79.83221527682404 +0 +120 +absolute + + + +0.01 +smooth + +8.536915198196045 +47.350064689707715 +428.81684925115536 +-45.88738124449369 +79.78133560261364 +0 +120 +absolute + + + +0.01 +smooth + +8.536916317165609 +47.35006619233578 +428.81681647594473 +-46.307654071331854 +79.73049041817194 +0 +120 +absolute + + + +0.01 +smooth + +8.536917427906152 +47.35006769502851 +428.8167867812699 +-46.72843792933428 +79.67968549864227 +0 +120 +absolute + + + +0.01 +smooth + +8.536918530159404 +47.35006919770318 +428.81676020709654 +-47.149697691897096 +79.62892661916794 +0 +120 +absolute + + + +0.01 +smooth + +8.536919623667103 +47.35007070027707 +428.81673679339053 +-47.57139823241638 +79.57821955489229 +0 +120 +absolute + + + +0.01 +smooth + +8.536920708170982 +47.350072202667505 +428.8167165801175 +-47.99350442428813 +79.52757008095863 +0 +120 +absolute + + + +0.01 +smooth + +8.53692178341277 +47.350073704791726 +428.81669960724304 +-48.41598114090853 +79.47698397251028 +0 +120 +absolute + + + +0.01 +smooth + +8.536922849134207 +47.35007520656705 +428.81668591473306 +-48.83879325567361 +79.42646700469055 +0 +120 +absolute + + + +0.01 +smooth + +8.536923905077021 +47.350076707910745 +428.8166755425532 +-49.261905641979425 +79.37602495264278 +0 +120 +absolute + + + +0.01 +smooth + +8.536924950982948 +47.35007820874013 +428.8166685306692 +-49.68528317322204 +79.32566359151026 +0 +120 +absolute + + + +0.01 +smooth + +8.536925986593724 +47.350079708972466 +428.8166649190466 +-50.10889072279758 +79.27538869643635 +0 +120 +absolute + + + +0.01 +smooth + +8.536927012364352 +47.350081208675654 +428.8166695864197 +-50.53275902854002 +79.22519516791023 +0 +120 +absolute + + + +0.01 +smooth + +8.536928033273078 +47.350082708880144 +428.81671744123787 +-50.957339755691244 +79.17500849621682 +0 +120 +absolute + + + +0.01 +smooth + +8.536929050047549 +47.35008420973213 +428.8168134354387 +-51.38269761318632 +79.12481821062904 +0 +120 +absolute + + + +0.01 +smooth + +8.536930062345673 +47.350085711152985 +428.816955169695 +-51.80879899661798 +79.07463008521951 +0 +120 +absolute + + + +0.01 +smooth + +8.536931069825368 +47.35008721306418 +428.81714024467993 +-52.23561030157905 +79.02444989406088 +0 +120 +absolute + + + +0.01 +smooth + +8.536932072144541 +47.350088715387066 +428.8173662610661 +-52.66309792366229 +78.97428341122571 +0 +120 +absolute + + + +0.01 +smooth + +8.536933068961115 +47.3500902180431 +428.81763081952687 +-53.09122825846057 +78.92413641078667 +0 +120 +absolute + + + +0.01 +smooth + +8.536934059932996 +47.35009172095365 +428.8179315207349 +-53.51996770156665 +78.87401466681634 +0 +120 +absolute + + + +0.01 +smooth + +8.536935044718103 +47.350093224040165 +428.8182659653633 +-53.949282648573316 +78.82392395338732 +0 +120 +absolute + + + +0.01 +smooth + +8.536936022974338 +47.35009472722404 +428.8186317540849 +-54.37913949507339 +78.77387004457225 +0 +120 +absolute + + + +0.01 +smooth + +8.536936994359623 +47.35009623042667 +428.81902648757256 +-54.809504636659675 +78.72385871444371 +0 +120 +absolute + + + +0.01 +smooth + +8.536937958531874 +47.35009773356952 +428.81944776649965 +-55.240344468924945 +78.67389573707439 +0 +120 +absolute + + + +0.01 +smooth + +8.536938915148994 +47.35009923657394 +428.8198931915387 +-55.67162538746206 +78.6239868865368 +0 +120 +absolute + + + +0.01 +smooth + +8.536939863868904 +47.35010073936138 +428.8203603633628 +-56.10331378786378 +78.57413793690364 +0 +120 +absolute + + + +0.01 +smooth + +8.536940804349515 +47.35010224185324 +428.82084688264507 +-56.5353760657229 +78.52435466224748 +0 +120 +absolute + + + +0.01 +smooth + +8.536941736248739 +47.35010374397093 +428.82135035005825 +-56.9677786166322 +78.47464283664095 +0 +120 +absolute + + + +0.01 +smooth + +8.53694265922449 +47.35010524563586 +428.8218683662753 +-57.40048783618454 +78.42500823415664 +0 +120 +absolute + + + +0.01 +smooth + +8.536943572934682 +47.350106746769434 +428.82239853196927 +-57.8334701199727 +78.37545662886718 +0 +120 +absolute + + + +0.01 +smooth + +8.536944477037228 +47.35010824729308 +428.82293844781304 +-58.26669186358943 +78.32599379484519 +0 +120 +absolute + + + +0.01 +smooth + +8.53694537119004 +47.3501097471282 +428.8234857144795 +-58.70011946262759 +78.27662550616328 +0 +120 +absolute + + + +0.01 +smooth + +8.536946255051028 +47.35011124619621 +428.8240379326419 +-59.13371931267997 +78.22735753689406 +0 +120 +absolute + + + +0.01 +smooth + +8.536947128278111 +47.35011274441851 +428.82459270297284 +-59.56745780933937 +78.17819566111015 +0 +120 +absolute + + + +0.01 +smooth + +8.536947990529201 +47.35011424171653 +428.8251476261454 +-60.00130134819855 +78.12914565288415 +0 +120 +absolute + + + +0.01 +smooth + +8.536948841462209 +47.35011573801167 +428.8257003028326 +-60.43521632485037 +78.08021328628868 +0 +120 +absolute + + + +0.01 +smooth + +8.53694968073505 +47.35011723322534 +428.8262483337073 +-60.86916913488762 +78.03140433539636 +0 +120 +absolute + + + +0.01 +smooth + +8.536950508005638 +47.350118727278954 +428.82678931944247 +-61.30312617390303 +77.98272457427979 +0 +120 +absolute + + + +0.01 +smooth + +8.536951322931882 +47.35012022009393 +428.8273208607112 +-61.7370538374895 +77.93417977701161 +0 +120 +absolute + + + +0.01 +smooth + +8.536952125171698 +47.35012171159167 +428.82784055818615 +-62.170918521239784 +77.88577571766439 +0 +120 +absolute + + + +0.01 +smooth + +8.53695291766974 +47.350123202147635 +428.8283574890819 +-62.60487962628394 +77.83748265432862 +0 +120 +absolute + + + +0.01 +smooth + +8.536953706778021 +47.3501246926221 +428.8288937271178 +-63.039302771574185 +77.78923309171414 +0 +120 +absolute + + + +0.01 +smooth + +8.536954492203883 +47.35012618296908 +428.82944906678534 +-63.474168529948884 +77.74103055167804 +0 +120 +absolute + + + +0.01 +smooth + +8.536955273448202 +47.35012767311429 +428.83002259520174 +-63.909445425591 +77.6928807756086 +0 +120 +absolute + + + +0.01 +smooth + +8.536956050011845 +47.3501291629834 +428.830613399484 +-64.34510198268336 +77.64478950489398 +0 +120 +absolute + + + +0.01 +smooth + +8.536956821395693 +47.35013065250214 +428.8312205667497 +-64.78110672540905 +77.59676248092235 +0 +120 +absolute + + + +0.01 +smooth + +8.536957587100616 +47.35013214159617 +428.83184318411554 +-65.21742817795091 +77.5488054450819 +0 +120 +absolute + + + +0.01 +smooth + +8.536958346627488 +47.35013363019121 +428.83248033869916 +-65.65403486449183 +77.5009241387608 +0 +120 +absolute + + + +0.01 +smooth + +8.536959099477183 +47.350135118212954 +428.8331311176179 +-66.09089530921486 +77.45312430334728 +0 +120 +absolute + + + +0.01 +smooth + +8.536959845150577 +47.35013660558712 +428.8337946079886 +-66.52797803630288 +77.40541168022948 +0 +120 +absolute + + + +0.01 +smooth + +8.536960583148536 +47.350138092239334 +428.83446989692845 +-66.96525156993874 +77.35779201079558 +0 +120 +absolute + + + +0.01 +smooth + +8.536961312971941 +47.350139578095366 +428.83515607155516 +-67.40268443430553 +77.31027103643379 +0 +120 +absolute + + + +0.01 +smooth + +8.536962034121663 +47.350141063080855 +428.8358522189854 +-67.84024515358605 +77.26285449853226 +0 +120 +absolute + + + +0.01 +smooth + +8.536962746098574 +47.350142547121536 +428.8365574263365 +-68.27790225196327 +77.2155481384792 +0 +120 +absolute + + + +0.01 +smooth + +8.536963448403553 +47.3501440301431 +428.83727078072604 +-68.71562425362012 +77.16835769766283 +0 +120 +absolute + + + +0.01 +smooth + +8.536964140537465 +47.35014551207124 +428.8379913692709 +-69.15337968273958 +77.12128891747125 +0 +120 +absolute + + + +0.01 +smooth + +8.536964822001194 +47.35014699283164 +428.83871827908837 +-69.59113706350453 +77.0743475392927 +0 +120 +absolute + + + +0.01 +smooth + +8.536965492295606 +47.35014847235001 +428.83945059729575 +-70.02886492009789 +77.02753930451536 +0 +120 +absolute + + + +0.01 +smooth + +8.536966150921575 +47.35014995055202 +428.8401874110101 +-70.46653177670262 +76.98086995452738 +0 +120 +absolute + + + +0.01 +smooth + +8.536966797379979 +47.3501514273634 +428.84092780734875 +-70.90410615750166 +76.93434523071699 +0 +120 +absolute + + + +0.01 +smooth + +8.536967431171687 +47.350152902709844 +428.84167087342894 +-71.34155658667794 +76.88797087447233 +0 +120 +absolute + + + +0.01 +smooth + +8.536968051797574 +47.350154376517025 +428.84241569636777 +-71.77885158841433 +76.84175262718162 +0 +120 +absolute + + + +0.01 +smooth + +8.536968658758516 +47.35015584871065 +428.84316136328255 +-72.21595968689384 +76.79569623023302 +0 +120 +absolute + + + +0.01 +smooth + +8.536969251555384 +47.35015731921642 +428.84390696129043 +-72.65284940629937 +76.74980742501471 +0 +120 +absolute + + + +0.01 +smooth + +8.536969829689053 +47.35015878796002 +428.8446515775087 +-73.08948927081383 +76.7040919529149 +0 +120 +absolute + + + +0.01 +smooth + +8.536970392660395 +47.35016025486716 +428.84539429905465 +-73.5258478046202 +76.65855555532174 +0 +120 +absolute + + + +0.01 +smooth + +8.536970939970283 +47.35016171986352 +428.8461342130453 +-73.96189353190135 +76.61320397362346 +0 +120 +absolute + + + +0.01 +smooth + +8.536971471319767 +47.35016318289022 +428.84687056237317 +-74.3976012307898 +76.56804163375064 +0 +120 +absolute + + + +0.01 +smooth + +8.536971997279634 +47.35016464473301 +428.84761121091503 +-74.83328885106545 +76.52300089519952 +0 +120 +absolute + + + +0.01 +smooth + +8.536972523398768 +47.350166105815624 +428.84836059892166 +-75.2691281093388 +76.47804522426621 +0 +120 +absolute + + + +0.01 +smooth + +8.53697304874635 +47.35016756606749 +428.8491182125815 +-75.70509022557104 +76.43318032335661 +0 +120 +absolute + + + +0.01 +smooth + +8.536973572391576 +47.350169025418104 +428.849883538084 +-76.14114641972331 +76.38841189487673 +0 +120 +absolute + + + +0.01 +smooth + +8.536974093403629 +47.350170483796944 +428.85065606161754 +-76.5772679117569 +76.34374564123249 +0 +120 +absolute + + + +0.01 +smooth + +8.536974610851695 +47.35017194113344 +428.8514352693711 +-77.01342592163309 +76.29918726482983 +0 +120 +absolute + + + +0.01 +smooth + +8.536975123804968 +47.350173397357096 +428.8522206475337 +-77.44959166931297 +76.25474246807468 +0 +120 +absolute + + + +0.01 +smooth + +8.536975631332638 +47.35017485239738 +428.8530116822944 +-77.88573637475793 +76.21041695337304 +0 +120 +absolute + + + +0.01 +smooth + +8.53697613250389 +47.350176306183776 +428.8538078598419 +-78.32183125792903 +76.16621642313083 +0 +120 +absolute + + + +0.01 +smooth + +8.536976626387913 +47.35017775864574 +428.85460866636504 +-78.7578475387876 +76.122146579754 +0 +120 +absolute + + + +0.01 +smooth + +8.536977112053894 +47.35017920971273 +428.85541358805267 +-79.1937564372949 +76.07821312564849 +0 +120 +absolute + + + +0.01 +smooth + +8.536977588571025 +47.35018065931422 +428.85622211109387 +-79.62952917341198 +76.03442176322022 +0 +120 +absolute + + + +0.01 +smooth + +8.536978055008495 +47.350182107379716 +428.85703372167757 +-80.06513696710026 +75.99077819487522 +0 +120 +absolute + + + +0.01 +smooth + +8.536978510435489 +47.35018355383865 +428.85784790599246 +-80.50055103832092 +75.94728812301935 +0 +120 +absolute + + + +0.01 +smooth + +8.5369789539212 +47.35018499862051 +428.8586641502275 +-80.93574260703508 +75.90395725005861 +0 +120 +absolute + + + +0.01 +smooth + +8.536979384534813 +47.35018644165477 +428.8594819405717 +-81.37068289320406 +75.86079127839892 +0 +120 +absolute + + + +0.01 +smooth + +8.536979801345518 +47.350187882870884 +428.8603007632138 +-81.80534311678915 +75.81779591044624 +0 +120 +absolute + + + +0.01 +smooth + +8.536980203422505 +47.35018932219835 +428.86112010434283 +-82.2396944977514 +75.77497684860651 +0 +120 +absolute + + + +0.01 +smooth + +8.53698058983496 +47.350190759566615 +428.8619394501476 +-82.67370825605214 +75.7323397952857 +0 +120 +absolute + + + +0.01 +smooth + +8.536980959652073 +47.35019219490516 +428.8627582868169 +-83.10735561165268 +75.68989045288971 +0 +120 +absolute + + + +0.01 +smooth + +8.536981311943034 +47.35019362814346 +428.86357610053983 +-83.54060778451405 +75.64763452382455 +0 +120 +absolute + + + +0.01 +smooth + +8.536981645777031 +47.350195059210975 +428.86439237750517 +-83.9734359945976 +75.6055777104961 +0 +120 +absolute + + + +0.01 +smooth + +8.53698196022325 +47.3501964880372 +428.8652066039019 +-84.4058114618646 +75.56372571531037 +0 +120 +absolute + + + +0.01 +smooth + +8.536982254350882 +47.35019791455157 +428.86601826591885 +-84.83770540627613 +75.52208424067328 +0 +120 +absolute + + + +0.01 +smooth + +8.536982527229116 +47.35019933868358 +428.86682684974494 +-85.26908904779359 +75.48065898899075 +0 +120 +absolute + + + +0.01 +smooth + +8.53698277792714 +47.3502007603627 +428.867631841569 +-85.69993360637804 +75.43945566266879 +0 +120 +absolute + + + +0.01 +smooth + +8.536983005514143 +47.3502021795184 +428.86843272757994 +-86.13021030199079 +75.39847996411329 +0 +120 +absolute + + + +0.01 +smooth + +8.53698321208407 +47.35020359624887 +428.869229996073 +-86.55995401735035 +75.35772191639579 +0 +120 +absolute + + + +0.01 +smooth + +8.536983415014305 +47.350205011496854 +428.8700292061671 +-86.98951913969312 +75.31709314480769 +0 +120 +absolute + + + +0.01 +smooth + +8.536983616806786 +47.35020642536313 +428.8708310002415 +-87.41894359471857 +75.27658366958974 +0 +120 +absolute + + + +0.01 +smooth + +8.536983816956427 +47.35020783777976 +428.87163502526823 +-87.8482017776724 +75.23619919019394 +0 +120 +absolute + + + +0.01 +smooth + +8.536984014958152 +47.35020924867891 +428.87244092821953 +-88.27726808380024 +75.19594540607243 +0 +120 +absolute + + + +0.01 +smooth + +8.536984210306876 +47.35021065799267 +428.8732483560675 +-88.70611690834775 +75.15582801667715 +0 +120 +absolute + + + +0.01 +smooth + +8.536984402497517 +47.35021206565316 +428.8740569557843 +-89.13472264656076 +75.11585272146023 +0 +120 +absolute + + + +0.01 +smooth + +8.536984591024991 +47.350213471592504 +428.87486637434205 +-89.56305969368475 +75.07602521987374 +0 +120 +absolute + + + +0.01 +smooth + +8.536984775384218 +47.3502148757428 +428.8756762587129 +-89.99110244496549 +75.03635121136969 +0 +120 +absolute + + + +0.01 +smooth + +8.536984955070114 +47.350216278036214 +428.87648625586917 +-90.4188252956488 +74.99683639540021 +0 +120 +absolute + + + +0.01 +smooth + +8.536985129577602 +47.35021767840484 +428.8772960127829 +-90.84620264098015 +74.9574864714173 +0 +120 +absolute + + + +0.01 +smooth + +8.536985298401593 +47.35021907678076 +428.87810517642595 +-91.27320887620529 +74.91830713887299 +0 +120 +absolute + + + +0.01 +smooth + +8.536985461037007 +47.35022047309613 +428.8789133937708 +-91.69981839657001 +74.87930409721938 +0 +120 +absolute + + + +0.01 +smooth + +8.536985616978766 +47.35022186728308 +428.87972031178964 +-92.12600559731983 +74.84048304590854 +0 +120 +absolute + + + +0.01 +smooth + +8.536985765721784 +47.35022325927369 +428.88052557745453 +-92.55174487370056 +74.80184968439251 +0 +120 +absolute + + + +0.01 +smooth + +8.53698590676098 +47.350224649000104 +428.88132883773756 +-92.97701062095778 +74.76340971212335 +0 +120 +absolute + + + +0.01 +smooth + +8.536986039591273 +47.350226036394446 +428.8821297396109 +-93.40177723433722 +74.72516882855311 +0 +120 +absolute + + + +0.01 +smooth + +8.53698616370758 +47.35022742138881 +428.8829279300468 +-93.82601910908463 +74.68713273313384 +0 +120 +absolute + + + +0.01 +smooth + +8.536986278604816 +47.35022880391533 +428.8837230560172 +-94.24971064044556 +74.6493071253176 +0 +120 +absolute + + + +0.01 +smooth + +8.536986383777904 +47.35023018390611 +428.8845147644945 +-94.67282622366575 +74.61169770455649 +0 +120 +absolute + + + +0.01 +smooth + +8.536986478721758 +47.350231561293285 +428.8853027024507 +-95.09534025399097 +74.57431017030251 +0 +120 +absolute + + + +0.01 +smooth + +8.5369865629313 +47.35023293600897 +428.886086516858 +-95.51722712666674 +74.53715022200774 +0 +120 +absolute + + + +0.01 +smooth + +8.536986635901442 +47.350234307985275 +428.8868658546885 +-95.93846123693885 +74.50022355912427 +0 +120 +absolute + + + +0.01 +smooth + +8.536986697127109 +47.35023567715433 +428.8876403629144 +-96.35901698005303 +74.4635358811041 +0 +120 +absolute + + + +0.01 +smooth + +8.536986746103212 +47.35023704344824 +428.88840968850786 +-96.7788687512548 +74.4270928873993 +0 +120 +absolute + + + +0.01 +smooth + +8.536986782324675 +47.35023840679913 +428.8891734784411 +-97.19799094578994 +74.39090027746198 +0 +120 +absolute + + + +0.01 +smooth + +8.53698680528641 +47.350239767139115 +428.889931379686 +-97.61635795890419 +74.35496375074413 +0 +120 +absolute + + + +0.01 +smooth + +8.536986814483342 +47.35024112440031 +428.89068303921493 +-98.03394418584313 +74.31928900669784 +0 +120 +absolute + + + +0.01 +smooth + +8.536986807910155 +47.35024247900895 +428.89143033687157 +-98.45089079827777 +74.28383224352905 +0 +120 +absolute + + + +0.01 +smooth + +8.536986783144773 +47.35024383175587 +428.89217684320363 +-98.86746388957286 +74.24851323423145 +0 +120 +absolute + + + +0.01 +smooth + +8.536986740838636 +47.35024518258943 +428.89292235335324 +-99.28364654775216 +74.21333623870211 +0 +120 +absolute + + + +0.01 +smooth + +8.536986681694442 +47.35024653144269 +428.89366659322354 +-99.69941668028109 +74.17830705878336 +0 +120 +absolute + + + +0.01 +smooth + +8.536986606414873 +47.35024787824862 +428.89440928871693 +-100.11475219462469 +74.14343149631749 +0 +120 +absolute + + + +0.01 +smooth + +8.536986515702626 +47.35024922294021 +428.89515016573654 +-100.52963099824836 +74.1087153531469 +0 +120 +absolute + + + +0.01 +smooth + +8.536986410260388 +47.35025056545045 +428.8958889501848 +-100.94403099861738 +74.07416443111386 +0 +120 +absolute + + + +0.01 +smooth + +8.536986290790855 +47.35025190571237 +428.89662536796465 +-101.35793010319686 +74.03978453206072 +0 +120 +absolute + + + +0.01 +smooth + +8.53698615799672 +47.350253243658955 +428.89735914497885 +-101.77130621945214 +74.0055814578298 +0 +120 +absolute + + + +0.01 +smooth + +8.536986012580666 +47.350254579223204 +428.89809000713007 +-102.18413725484855 +73.97156101026346 +0 +120 +absolute + + + +0.01 +smooth + +8.53698585524539 +47.350255912338106 +428.89881768032103 +-102.5964011168511 +73.93772899120397 +0 +120 +absolute + + + +0.01 +smooth + +8.53698568669358 +47.35025724293666 +428.8995418904545 +-103.00807571292519 +73.90409120249367 +0 +120 +absolute + + + +0.01 +smooth + +8.53698550762793 +47.350258570951894 +428.90026236343334 +-103.41913895053618 +73.87065344597494 +0 +120 +absolute + + + +0.01 +smooth + +8.536985318751128 +47.35025989631677 +428.9009788251602 +-103.82956873714909 +73.83742152349006 +0 +120 +absolute + + + +0.01 +smooth + +8.53698512076587 +47.35026121896432 +428.90169100153787 +-104.23934298022928 +73.80440123688139 +0 +120 +absolute + + + +0.01 +smooth + +8.536984914374845 +47.35026253882751 +428.9023986184691 +-104.64843958724207 +73.77159838799122 +0 +120 +absolute + + + +0.01 +smooth + +8.536984700280742 +47.35026385583935 +428.9031014018566 +-105.05683646565252 +73.73901877866189 +0 +120 +absolute + + + +0.01 +smooth + +8.536984479186255 +47.350265169932854 +428.9037990776031 +-105.46451152292605 +73.70666821073577 +0 +120 +absolute + + + +0.01 +smooth + +8.536984251794074 +47.350266481041004 +428.90449137161147 +-105.87144266652788 +73.67455248605512 +0 +120 +absolute + + + +0.01 +smooth + +8.53698401880689 +47.3502677890968 +428.9051780097843 +-106.27760780392319 +73.6426774064623 +0 +120 +absolute + + + +0.01 +smooth + +8.536983780927393 +47.35026909403325 +428.90585871802466 +-106.68298484257733 +73.61104877379967 +0 +120 +absolute + + + +0.01 +smooth + +8.53698353885828 +47.350270395783355 +428.9065332222349 +-107.0875516899554 +73.57967238990949 +0 +120 +absolute + + + +0.01 +smooth + +8.536983293302235 +47.350271694280096 +428.907201248318 +-107.49128625352274 +73.54855405663415 +0 +120 +absolute + + + +0.01 +smooth + +8.536983044961952 +47.350272989456485 +428.90786252217674 +-107.89416644074467 +73.51769957581594 +0 +120 +absolute + + + +0.01 +smooth + +8.536982794540123 +47.35027428124552 +428.9085167697137 +-108.2961701590863 +73.48711474929722 +0 +120 +absolute + + + +0.01 +smooth + +8.536982542739437 +47.3502755695802 +428.9091637168317 +-108.6972753160129 +73.45680537892028 +0 +120 +absolute + + + +0.01 +smooth + +8.536982290262591 +47.35027685439351 +428.90980308943364 +-109.09745981898989 +73.42677726652747 +0 +120 +absolute + + + +0.01 +smooth + +8.53698203730529 +47.35027813564717 +428.9104347291879 +-109.49670980561329 +73.39703314962883 +0 +120 +absolute + + + +0.01 +smooth + +8.536981767884319 +47.35027941422084 +428.9110621914417 +-109.89527565502544 +73.36747778500977 +0 +120 +absolute + + + +0.01 +smooth + +8.536981474755786 +47.35028069050526 +428.91168708848176 +-110.29327022249022 +73.33806823518533 +0 +120 +absolute + + + +0.01 +smooth + +8.536981158807167 +47.350281964431886 +428.91230918441573 +-110.69067507110952 +73.30881062661246 +0 +120 +absolute + + + +0.01 +smooth + +8.536980820925924 +47.35028323593211 +428.91292824335073 +-111.08747176398528 +73.27971108574792 +0 +120 +absolute + + + +0.01 +smooth + +8.536980461999526 +47.350284504937385 +428.9135440293947 +-111.48364186421959 +73.25077573904859 +0 +120 +absolute + + + +0.01 +smooth + +8.536980082915438 +47.35028577137911 +428.91415630665483 +-111.87916693491422 +73.22201071297128 +0 +120 +absolute + + + +0.01 +smooth + +8.53697968456113 +47.35028703518874 +428.91476483923856 +-112.27402853917117 +73.19342213397289 +0 +120 +absolute + + + +0.01 +smooth + +8.53697926782407 +47.350288296297684 +428.9153693912535 +-112.66820824009251 +73.16501612851022 +0 +120 +absolute + + + +0.01 +smooth + +8.536978833591723 +47.35028955463739 +428.9159697268072 +-113.06168760078008 +73.13679882304012 +0 +120 +absolute + + + +0.01 +smooth + +8.536978382751556 +47.35029081013925 +428.9165656100069 +-113.45444818433586 +73.10877634401942 +0 +120 +absolute + + + +0.01 +smooth + +8.536977916191033 +47.350292062734674 +428.91715680496003 +-113.84647155386169 +73.08095481790494 +0 +120 +absolute + + + +0.01 +smooth + +8.53697743479763 +47.35029331235515 +428.9177430757745 +-114.23773927245966 +73.0533403711536 +0 +120 +absolute + + + +0.01 +smooth + +8.536976939458807 +47.35029455893207 +428.91832418655747 +-114.62823290323176 +73.02593913022216 +0 +120 +absolute + + + +0.01 +smooth + +8.536976431062032 +47.35029580239684 +428.9188999014163 +-115.01793400927976 +72.99875722156747 +0 +120 +absolute + + + +0.01 +smooth + +8.536975910494775 +47.35029704268092 +428.9194699844587 +-115.40682415370568 +72.97180077164643 +0 +120 +absolute + + + +0.01 +smooth + +8.536975378644502 +47.35029827971571 +428.9200341997921 +-115.79488489961162 +72.94507590691582 +0 +120 +absolute + + + +0.01 +smooth + +8.536974836398679 +47.35029951343266 +428.9205923115238 +-116.1820978100993 +72.9185887538325 +0 +120 +absolute + + + +0.01 +smooth + +8.536974284644776 +47.350300743763164 +428.9211440837616 +-116.56844444827075 +72.89234543885333 +0 +120 +absolute + + + +0.01 +smooth + +8.536973724270258 +47.35030197063867 +428.9216892806128 +-116.95390637722804 +72.86635208843511 +0 +120 +absolute + + + +0.01 +smooth + +8.536973156162592 +47.3503031939906 +428.92222766618465 +-117.33846516007297 +72.8406148290347 +0 +120 +absolute + + + +0.01 +smooth + +8.536972581209245 +47.350304413750365 +428.92275900458503 +-117.72210235990752 +72.81513978710896 +0 +120 +absolute + + + +0.01 +smooth + +8.536972000297688 +47.350305629849416 +428.9232830599212 +-118.10479953983375 +72.7899330891147 +0 +120 +absolute + + + +0.01 +smooth + +8.536971414315381 +47.350306842219155 +428.9237995963006 +-118.48653826295345 +72.76500086150878 +0 +120 +absolute + + + +0.01 +smooth + +8.5369708241498 +47.35030805079102 +428.92430837783087 +-118.86730009236862 +72.74034923074805 +0 +120 +absolute + + + +0.01 +smooth + +8.536970230688405 +47.350309255496434 +428.92480916861933 +-119.24706659118131 +72.71598432328932 +0 +120 +absolute + + + +0.01 +smooth + +8.536969634818666 +47.35031045626682 +428.92530173277356 +-119.62581932249333 +72.69191226558945 +0 +120 +absolute + + + +0.01 +smooth + +8.536969037428051 +47.35031165303361 +428.9257858344009 +-120.00353984940672 +72.66813918410527 +0 +120 +absolute + + + +0.01 +smooth + +8.536968436615233 +47.35031284596474 +428.92626216192383 +-120.38026448150784 +72.6446443941445 +0 +120 +absolute + + + +0.01 +smooth + +8.5369678193398 +47.3503140361587 +428.92673505114806 +-120.75624678104211 +72.62130182405302 +0 +120 +absolute + + + +0.01 +smooth + +8.53696718427182 +47.35031522370085 +428.9272048936188 +-121.13150841968046 +72.59810039213117 +0 +120 +absolute + + + +0.01 +smooth + +8.536966531935986 +47.350316408518076 +428.927671462427 +-121.50603454147755 +72.57504699047918 +0 +120 +absolute + + + +0.01 +smooth + +8.536965862857011 +47.35031759053721 +428.92813453066475 +-121.87981029048832 +72.55214851119726 +0 +120 +absolute + + + +0.01 +smooth + +8.536965177559589 +47.3503187696851 +428.92859387142323 +-122.25282081076766 +72.52941184638556 +0 +120 +absolute + + + +0.01 +smooth + +8.536964476568423 +47.35031994588863 +428.92904925779396 +-122.6250512463703 +72.5068438881443 +0 +120 +absolute + + + +0.01 +smooth + +8.536963760408211 +47.35032111907465 +428.92950046286865 +-122.99648674135115 +72.48445152857369 +0 +120 +absolute + + + +0.01 +smooth + +8.536963029603662 +47.35032228917002 +428.92994725973887 +-123.3671124397652 +72.46224165977391 +0 +120 +absolute + + + +0.01 +smooth + +8.536962284679472 +47.35032345610162 +428.9303894214963 +-123.73691348566709 +72.44022117384516 +0 +120 +absolute + + + +0.01 +smooth + +8.536961526160342 +47.350324619796275 +428.93082672123205 +-124.10587502311171 +72.4183969628876 +0 +120 +absolute + + + +0.01 +smooth + +8.536960754570973 +47.350325780180874 +428.9312589320382 +-124.4739821961541 +72.3967759190015 +0 +120 +absolute + + + +0.01 +smooth + +8.536959970436074 +47.350326937182295 +428.9316858270063 +-124.84122014884896 +72.37536493428703 +0 +120 +absolute + + + +0.01 +smooth + +8.536959174280335 +47.350328090727345 +428.93210717922744 +-125.20757402525108 +72.35417090084434 +0 +120 +absolute + + + +0.01 +smooth + +8.536958366628463 +47.35032924074292 +428.9325227617935 +-125.57302896941549 +72.33320071077367 +0 +120 +absolute + + + +0.01 +smooth + +8.53695754800516 +47.35033038715588 +428.93293234779605 +-125.93757012539689 +72.3124612561752 +0 +120 +absolute + + + +0.01 +smooth + +8.536956718935127 +47.350331529893076 +428.93333571032656 +-126.30118263725026 +72.29195942914914 +0 +120 +absolute + + + +0.01 +smooth + +8.536955879943063 +47.35033266888138 +428.93373262247667 +-126.66385164903033 +72.27170212179567 +0 +120 +absolute + + + +0.01 +smooth + +8.536955031553672 +47.350333804047644 +428.93412285733785 +-127.02556230479199 +72.251696226215 +0 +120 +absolute + + + +0.01 +smooth + +8.536954174291655 +47.35033493531873 +428.9345061880017 +-127.38629974859018 +72.2319486345073 +0 +120 +absolute + + + +0.01 +smooth + +8.53695330868171 +47.350336062621494 +428.9348823875598 +-127.74604912447961 +72.2124662387728 +0 +120 +absolute + + + +0.01 +smooth + +8.536952435248542 +47.35033718588281 +428.9352512291038 +-128.10479557651524 +72.19325593111168 +0 +120 +absolute + + + +0.01 +smooth + +8.53695155451685 +47.350338305029524 +428.9356124857251 +-128.46252424875192 +72.17432460362413 +0 +120 +absolute + + + +0.01 +smooth + +8.536950667011338 +47.350339419988515 +428.9359659305153 +-128.81922028524443 +72.15567914841036 +0 +120 +absolute + + + +0.01 +smooth + +8.536949773256705 +47.35034053068662 +428.936311336566 +-129.17486883004767 +72.13732645757055 +0 +120 +absolute + + + +0.01 +smooth + +8.536948873777654 +47.35034163705072 +428.9366484769687 +-129.52945502721656 +72.11927342320489 +0 +120 +absolute + + + +0.01 +smooth + +8.536947969098883 +47.350342739007665 +428.9369771248151 +-129.88296402080582 +72.10152693741361 +0 +120 +absolute + + + +0.01 +smooth + +8.536947059745097 +47.35034383648433 +428.93729705319663 +-130.23538095487032 +72.08409389229689 +0 +120 +absolute + + + +0.01 +smooth + +8.536946141483826 +47.350344930122695 +428.9376108828341 +-130.58681791560554 +72.06689299812979 +0 +120 +absolute + + + +0.01 +smooth + +8.536945207825577 +47.35034602088675 +428.9379225178531 +-130.9374469542045 +72.04980372595989 +0 +120 +absolute + + + +0.01 +smooth + +8.536944259096927 +47.35034710870426 +428.9382317376877 +-131.28725806575935 +72.03283360712933 +0 +120 +absolute + + + +0.01 +smooth + +8.53694329568297 +47.350348193494284 +428.9385382865689 +-131.63623968365783 +72.0159912645294 +0 +120 +absolute + + + +0.01 +smooth + +8.536942317968787 +47.3503492751758 +428.938841908727 +-131.9843802412872 +71.99928532105142 +0 +120 +absolute + + + +0.01 +smooth + +8.536941326339454 +47.35035035366775 +428.93914234839247 +-132.33166817203505 +71.98272439958656 +0 +120 +absolute + + + +0.01 +smooth + +8.536940321180069 +47.350351428889184 +428.9394393497959 +-132.67809190928887 +71.96631712302622 +0 +120 +absolute + + + +0.01 +smooth + +8.536939302875703 +47.350352500759044 +428.9397326571679 +-133.02363988643611 +71.95007211426163 +0 +120 +absolute + + + +0.01 +smooth + +8.53693827181145 +47.350353569196386 +428.94002201473893 +-133.3683005368644 +71.93399799618408 +0 +120 +absolute + + + +0.01 +smooth + +8.536937228372393 +47.35035463412014 +428.9403071667397 +-133.71206229396108 +71.91810339168488 +0 +120 +absolute + + + +0.01 +smooth + +8.536936172943607 +47.35035569544931 +428.94058785740043 +-134.05491359111372 +71.90239692365526 +0 +120 +absolute + + + +0.01 +smooth + +8.536935105910183 +47.35035675310289 +428.9408638309518 +-134.39684286170984 +71.88688721498653 +0 +120 +absolute + + + +0.01 +smooth + +8.536934027657205 +47.35035780699989 +428.9411348316244 +-134.7378385391369 +71.87158288856999 +0 +120 +absolute + + + +0.01 +smooth + +8.536932938569759 +47.35035885705929 +428.94140060364884 +-135.07788905678242 +71.85649256729693 +0 +120 +absolute + + + +0.01 +smooth + +8.536931839032928 +47.35035990320008 +428.94166089125554 +-135.41698284803394 +71.8416248740586 +0 +120 +absolute + + + +0.01 +smooth + +8.536930729431791 +47.35036094534123 +428.941915438675 +-135.7551083462788 +71.82698843174629 +0 +120 +absolute + + + +0.01 +smooth + +8.536929610151438 +47.35036198340176 +428.94216399013783 +-136.09225398490466 +71.8125918632513 +0 +120 +absolute + + + +0.01 +smooth + +8.536928481576949 +47.35036301730065 +428.94240628987444 +-136.42840819729898 +71.7984437914649 +0 +120 +absolute + + + +0.01 +smooth + +8.536927344093414 +47.350364046956884 +428.94264208211564 +-136.7635594168492 +71.7845528392784 +0 +120 +absolute + + + +0.01 +smooth + +8.536926198085908 +47.35036507228946 +428.9428711110917 +-137.09769607694287 +71.77092762958306 +0 +120 +absolute + + + +0.01 +smooth + +8.536925043939524 +47.35036609321738 +428.9430931210332 +-137.4308066109675 +71.75757678527016 +0 +120 +absolute + + + +0.01 +smooth + +8.53692388203934 +47.350367109659615 +428.94330785617075 +-137.76287945231053 +71.74450892923099 +0 +120 +absolute + + + +0.01 +smooth + +8.536922712770442 +47.35036812153517 +428.9435150607349 +-138.09390303435944 +71.73173268435684 +0 +120 +absolute + + + +0.01 +smooth + +8.536921536517916 +47.350369128763035 +428.94371447895605 +-138.42386579050188 +71.71925667353901 +0 +120 +absolute + + + +0.01 +smooth + +8.536920353666845 +47.35037013126219 +428.94390585506494 +-138.75275615412517 +71.70708951966874 +0 +120 +absolute + + + +0.01 +smooth + +8.536919164602311 +47.35037112895163 +428.94408893329194 +-139.08056255861698 +71.69523984563735 +0 +120 +absolute + + + +0.01 +smooth + +8.536917969709403 +47.35037212175035 +428.94426345786775 +-139.40727343736458 +71.6837162743361 +0 +120 +absolute + + + +0.01 +smooth + +8.53691676910514 +47.35037310964161 +428.9444294761476 +-139.73288557872738 +71.67251790330009 +0 +120 +absolute + + + +0.01 +smooth + +8.536915557257345 +47.35037409395556 +428.94459335920214 +-140.05757195456758 +71.66144501219891 +0 +120 +absolute + + + +0.01 +smooth + +8.536914332069099 +47.35037507517933 +428.94475743353786 +-140.38139873027126 +71.65042472257574 +0 +120 +absolute + + + +0.01 +smooth + +8.536913093848836 +47.35037605322056 +428.9449212824485 +-140.70435713895355 +71.63947032144048 +0 +120 +absolute + + + +0.01 +smooth + +8.536911842904992 +47.35037702798681 +428.94508448922744 +-141.02643841372915 +71.62859509580305 +0 +120 +absolute + + + +0.01 +smooth + +8.536910579545989 +47.350377999385735 +428.9452466371688 +-141.34763378771294 +71.61781233267341 +0 +120 +absolute + + + +0.01 +smooth + +8.536909304080261 +47.350378967324886 +428.9454073095656 +-141.6679344940198 +71.60713531906144 +0 +120 +absolute + + + +0.01 +smooth + +8.536908016816241 +47.350379931711906 +428.945566089712 +-141.98733176576468 +71.59657734197711 +0 +120 +absolute + + + +0.01 +smooth + +8.536906718062362 +47.35038089245437 +428.94572256090123 +-142.30581683606226 +71.58615168843029 +0 +120 +absolute + + + +0.01 +smooth + +8.536905408127051 +47.3503818494599 +428.9458763064272 +-142.62338093802748 +71.57587164543094 +0 +120 +absolute + + + +0.01 +smooth + +8.536904087318742 +47.35038280263609 +428.94602690958357 +-142.94001530477536 +71.56575049998898 +0 +120 +absolute + + + +0.01 +smooth + +8.536902755945867 +47.35038375189057 +428.94617395366373 +-143.25571116942052 +71.55580153911433 +0 +120 +absolute + + + +0.01 +smooth + +8.536901414316853 +47.35038469713088 +428.94631702196136 +-143.57045976507789 +71.5460380498169 +0 +120 +absolute + + + +0.01 +smooth + +8.536900062740134 +47.350385638264676 +428.9464556977703 +-143.8842523248624 +71.53647331910663 +0 +120 +absolute + + + +0.01 +smooth + +8.536898701524144 +47.350386575199565 +428.94658956438406 +-144.19708008188888 +71.52712063399345 +0 +120 +absolute + + + +0.01 +smooth + +8.536897330977311 +47.35038750784312 +428.9467182050964 +-144.50893426927217 +71.51799328148728 +0 +120 +absolute + + + +0.01 +smooth + +8.536895951408065 +47.35038843610295 +428.94684120320073 +-144.81980612012714 +71.50910454859802 +0 +120 +absolute + + + +0.01 +smooth + +8.53689456312484 +47.35038935988666 +428.94695814199076 +-145.12968686756864 +71.50046772233563 +0 +120 +absolute + + + +0.01 +smooth + +8.536893166436066 +47.35039027910187 +428.94706860476026 +-145.43856774471158 +71.49209608971 +0 +120 +absolute + + + +0.01 +smooth + +8.536891761650175 +47.35039119365618 +428.9471721748027 +-145.74643998467076 +71.48400293773106 +0 +120 +absolute + + + +0.01 +smooth + +8.536890349075598 +47.35039210345717 +428.94726843541184 +-146.05329482056106 +71.47620155340877 +0 +120 +absolute + + + +0.01 +smooth + +8.536888929020765 +47.35039300841246 +428.9473569698812 +-146.3591234854974 +71.46870522375302 +0 +120 +absolute + + + +0.01 +smooth + +8.536887501794109 +47.35039390842965 +428.9474373615045 +-146.66391721259453 +71.46152723577373 +0 +120 +absolute + + + +0.01 +smooth + +8.53688606770406 +47.350394803416336 +428.94750919357534 +-146.96766723496737 +71.45468087648084 +0 +120 +absolute + + + +0.01 +smooth + +8.53688462705905 +47.350395693280134 +428.9475720493874 +-147.27036478573083 +71.44817943288427 +0 +120 +absolute + + + +0.01 +smooth + +8.536883180167512 +47.35039657792865 +428.94762551223425 +-147.57200109799967 +71.44203619199392 +0 +120 +absolute + + + +0.01 +smooth + +8.536881727337873 +47.350397457269466 +428.9476691654096 +-147.8725674048888 +71.43626444081977 +0 +120 +absolute + + + +0.01 +smooth + +8.536880268878567 +47.35039833121021 +428.947702592207 +-148.17205493951315 +71.43087746637167 +0 +120 +absolute + + + +0.01 +smooth + +8.536878803896947 +47.35039920009898 +428.94772723189084 +-148.4704960994225 +71.42581016220247 +0 +120 +absolute + + + +0.01 +smooth + +8.53687732774221 +47.350400065647705 +428.9477504668308 +-148.76805226525894 +71.42075448182659 +0 +120 +absolute + + + +0.01 +smooth + +8.53687584014006 +47.35040092794495 +428.9477730906712 +-149.06473505497888 +71.41569103954137 +0 +120 +absolute + + + +0.01 +smooth + +8.536874341348652 +47.350401786882976 +428.9477950827408 +-149.3605378484813 +71.41063535060034 +0 +120 +absolute + + + +0.01 +smooth + +8.536872831626152 +47.3504026423541 +428.9478164223688 +-149.6554540256656 +71.40560293025722 +0 +120 +absolute + + + +0.01 +smooth + +8.536871311230723 +47.35040349425063 +428.94783708888406 +-149.94947696643086 +71.40060929376551 +0 +120 +absolute + + + +0.01 +smooth + +8.536869780420533 +47.35040434246486 +428.9478570616157 +-150.24260005067643 +71.39566995637892 +0 +120 +absolute + + + +0.01 +smooth + +8.536868239453739 +47.35040518688909 +428.9478763198928 +-150.5348166583016 +71.39080043335102 +0 +120 +absolute + + + +0.01 +smooth + +8.536866688588507 +47.350406027415616 +428.94789484304414 +-150.82612016920538 +71.3860162399354 +0 +120 +absolute + + + +0.01 +smooth + +8.536865128083003 +47.35040686393676 +428.94791261039904 +-151.11650396328724 +71.38133289138572 +0 +120 +absolute + + + +0.01 +smooth + +8.536863558195389 +47.35040769634482 +428.9479296012864 +-151.40596142044637 +71.37676590295558 +0 +120 +absolute + + + +0.01 +smooth + +8.53686197918383 +47.350408524532085 +428.9479457950353 +-151.69448592058194 +71.37233078989858 +0 +120 +absolute + + + +0.01 +smooth + +8.536860391306483 +47.35040934839087 +428.94796117097457 +-151.98207084359316 +71.36804306746838 +0 +120 +absolute + + + +0.01 +smooth + +8.536858794821521 +47.35041016781349 +428.9479757084335 +-152.26870956937944 +71.36391825091853 +0 +120 +absolute + + + +0.01 +smooth + +8.536857189987106 +47.35041098269225 +428.947989386741 +-152.55439547783988 +71.35997185550269 +0 +120 +absolute + + + +0.01 +smooth + +8.536855577061397 +47.35041179291942 +428.9480021852262 +-152.83912194887375 +71.35621939647446 +0 +120 +absolute + + + +0.01 +smooth + +8.536853956302561 +47.35041259838732 +428.9480140832179 +-153.12288236238032 +71.35267638908746 +0 +120 +absolute + + + +0.01 +smooth + +8.53685232796876 +47.35041339898827 +428.9480250600452 +-153.40567009825875 +71.34935834859529 +0 +120 +absolute + + + +0.01 +smooth + +8.536850692318158 +47.35041419461456 +428.9480350950373 +-153.68747853640832 +71.34628079025157 +0 +120 +absolute + + + +0.01 +smooth + +8.53684904960892 +47.35041498515847 +428.9480441675231 +-153.96830105672834 +71.34345922930991 +0 +120 +absolute + + + +0.01 +smooth + +8.536847400099209 +47.35041577051234 +428.9480522568317 +-154.24813103911794 +71.34090918102395 +0 +120 +absolute + + + +0.01 +smooth + +8.536845744047188 +47.35041655056847 +428.94805934229197 +-154.5269618634764 +71.33864616064727 +0 +120 +absolute + + + +0.01 +smooth + +8.536844081711022 +47.350417325219134 +428.94806540323304 +-154.80478690970298 +71.33668568343352 +0 +120 +absolute + + + +0.01 +smooth + +8.536842413348872 +47.350418094356655 +428.9480704189839 +-155.08159955769688 +71.33504326463628 +0 +120 +absolute + + + +0.01 +smooth + +8.536840739218906 +47.35041885787335 +428.9480743688737 +-155.3573931873574 +71.33373441950917 +0 +120 +absolute + + + +0.01 +smooth + +8.536839059579284 +47.350419615661494 +428.9480772322313 +-155.6321611785837 +71.33277466330583 +0 +120 +absolute + + + +0.01 +smooth + +8.53683737468817 +47.3504203676134 +428.9480789883858 +-155.90589691127508 +71.33217951127986 +0 +120 +absolute + + + +0.01 +smooth + +8.536835684803728 +47.350421113621394 +428.94807961666635 +-156.17859376533073 +71.33196447868487 +0 +120 +absolute + + + +0.01 +smooth + +8.53683398776213 +47.350421854917876 +428.94807613799384 +-156.45033505355926 +71.3320290722935 +0 +120 +absolute + + + +0.01 +smooth + +8.5368322808599 +47.35042259300827 +428.94806518281814 +-156.7212241480687 +71.33223540239044 +0 +120 +absolute + + + +0.01 +smooth + +8.536830564312156 +47.35042332776819 +428.94804710167386 +-156.9912560610255 +71.33257870701833 +0 +120 +absolute + + + +0.01 +smooth + +8.536828838340698 +47.35042405906962 +428.94802225344944 +-157.26042555605054 +71.33305453725441 +0 +120 +absolute + + + +0.01 +smooth + +8.536827103167345 +47.350424786784465 +428.94799099703323 +-157.52872739676528 +71.33365844417605 +0 +120 +absolute + + + +0.01 +smooth + +8.536825359013903 +47.350425510784696 +428.9479536913135 +-157.79615634679092 +71.33438597886061 +0 +120 +absolute + + + +0.01 +smooth + +8.536823606102184 +47.35042623094224 +428.94791069517856 +-158.06270716974862 +71.33523269238538 +0 +120 +absolute + + + +0.01 +smooth + +8.536821844653991 +47.35042694712901 +428.9478623675167 +-158.32837462925954 +71.33619413582765 +0 +120 +absolute + + + +0.01 +smooth + +8.536820074891134 +47.350427659216976 +428.94780906721587 +-158.59315348894503 +71.33726586026478 +0 +120 +absolute + + + +0.01 +smooth + +8.53681829703543 +47.35042836707809 +428.9477511531651 +-158.85703851242616 +71.3384434167741 +0 +120 +absolute + + + +0.01 +smooth + +8.536816511308679 +47.35042907058427 +428.94768898425224 +-159.12002446332428 +71.33972235643293 +0 +120 +absolute + + + +0.01 +smooth + +8.53681471793269 +47.350429769607445 +428.9476229193653 +-159.38210610526045 +71.3410982303186 +0 +120 +absolute + + + +0.01 +smooth + +8.536812917129282 +47.350430464019574 +428.9475533173931 +-159.64327820185594 +71.3425665895084 +0 +120 +absolute + + + +0.01 +smooth + +8.536811109120254 +47.3504311536926 +428.9474805372238 +-159.90353551673203 +71.34412298507965 +0 +120 +absolute + + + +0.01 +smooth + +8.536809294127421 +47.350431838498444 +428.9474049377455 +-160.16287281350986 +71.34576296810975 +0 +120 +absolute + + + +0.01 +smooth + +8.536807472372589 +47.350432518309056 +428.94732687784665 +-160.42128485581065 +71.34748208967595 +0 +120 +absolute + + + +0.01 +smooth + +8.536805644077567 +47.350433192996384 +428.9472467164155 +-160.67876640725564 +71.3492759008556 +0 +120 +absolute + + + +0.01 +smooth + +8.536803809464166 +47.350433862432354 +428.94716481234036 +-160.93531223146596 +71.35113995272602 +0 +120 +absolute + + + +0.01 +smooth + +8.536801968754194 +47.35043452648891 +428.9470815245095 +-161.19091709206293 +71.35306979636454 +0 +120 +absolute + + + +0.01 +smooth + +8.536800122169462 +47.350435185037995 +428.9469972118112 +-161.44557575266774 +71.35506098284849 +0 +120 +absolute + + + +0.01 +smooth + +8.536798269931776 +47.35043583795155 +428.9469122331339 +-161.69928297690154 +71.35710906325517 +0 +120 +absolute + + + +0.01 +smooth + +8.536796412262946 +47.35043648510152 +428.9468269473657 +-161.95203352838556 +71.35920958866191 +0 +120 +absolute + + + +0.01 +smooth + +8.536794549384783 +47.35043712635982 +428.94674171339506 +-162.20382217074103 +71.36135811014606 +0 +120 +absolute + + + +0.01 +smooth + +8.536792681519096 +47.350437761598414 +428.94665689011015 +-162.45464366758918 +71.3635501787849 +0 +120 +absolute + + + +0.01 +smooth + +8.53679080888769 +47.350438390689234 +428.94657283639924 +-162.70449278255117 +71.3657813456558 +0 +120 +absolute + + + +0.01 +smooth + +8.536788931712378 +47.35043901350422 +428.9464899111507 +-162.95336427924826 +71.36804716183606 +0 +120 +absolute + + + +0.01 +smooth + +8.53678705021497 +47.350439629915314 +428.94640847325286 +-163.20125292130166 +71.370343178403 +0 +120 +absolute + + + +0.01 +smooth + +8.536785164418632 +47.350440239960996 +428.94632862723927 +-163.44816163718008 +71.3726824368214 +0 +120 +absolute + + + +0.01 +smooth + +8.5367832714033 +47.35044084613287 +428.94624666172393 +-163.69421417776275 +71.37533307642676 +0 +120 +absolute + + + +0.01 +smooth + +8.536781370284027 +47.350441449183265 +428.94616136453686 +-163.93945029478095 +71.37837488246905 +0 +120 +absolute + + + +0.01 +smooth + +8.536779461255108 +47.35044204895537 +428.9460728917658 +-164.1838653344887 +71.38179143731034 +0 +120 +absolute + + + +0.01 +smooth + +8.53677754451084 +47.35044264529241 +428.9459813994989 +-164.42745464314 +71.38556632331282 +0 +120 +absolute + + + +0.01 +smooth + +8.536775620245518 +47.350443238037606 +428.9458870438244 +-164.67021356698902 +71.38968312283863 +0 +120 +absolute + + + +0.01 +smooth + +8.536773688653438 +47.350443827034155 +428.94578998083 +-164.91213745228984 +71.39412541824989 +0 +120 +absolute + + + +0.01 +smooth + +8.536771749928892 +47.35044441212527 +428.9456903666037 +-165.15322164529647 +71.39887679190869 +0 +120 +absolute + + + +0.01 +smooth + +8.536769804266177 +47.35044499315416 +428.9455883572336 +-165.39346149226301 +71.40392082617723 +0 +120 +absolute + + + +0.01 +smooth + +8.536767851859594 +47.35044556996405 +428.9454841088077 +-165.63285233944364 +71.40924110341761 +0 +120 +absolute + + + +0.01 +smooth + +8.536765892903436 +47.35044614239816 +428.9453777774141 +-165.87138953309233 +71.414821205992 +0 +120 +absolute + + + +0.01 +smooth + +8.536763927591995 +47.350446710299664 +428.94526951914054 +-166.10906841946306 +71.42064471626249 +0 +120 +absolute + + + +0.01 +smooth + +8.536761956119566 +47.3504472735118 +428.94515949007507 +-166.34588434481014 +71.4266952165912 +0 +120 +absolute + + + +0.01 +smooth + +8.536759978680454 +47.35044783187777 +428.9450478463059 +-166.58183265538747 +71.43295628934035 +0 +120 +absolute + + + +0.01 +smooth + +8.536757995468944 +47.3504483852408 +428.9449347439209 +-166.81690869744924 +71.43941151687198 +0 +120 +absolute + + + +0.01 +smooth + +8.536756006679338 +47.350448933444085 +428.944820339008 +-167.0511078172495 +71.4460444815483 +0 +120 +absolute + + + +0.01 +smooth + +8.536754012505929 +47.350449476330844 +428.94470478765544 +-167.28442536104222 +71.45283876573139 +0 +120 +absolute + + + +0.01 +smooth + +8.536752013143014 +47.3504500137443 +428.94458824595085 +-167.5168566750816 +71.45977795178341 +0 +120 +absolute + + + +0.01 +smooth + +8.536750008784889 +47.35045054552764 +428.9444708699826 +-167.74839710562168 +71.4668456220665 +0 +120 +absolute + + + +0.01 +smooth + +8.536747999625847 +47.35045107152409 +428.94435281583844 +-167.97904199891653 +71.47402535894275 +0 +120 +absolute + + + +0.01 +smooth + +8.536745985860186 +47.35045159157687 +428.94423423960643 +-168.20878670122028 +71.48130074477436 +0 +120 +absolute + + + +0.01 +smooth + +8.536743967682202 +47.35045210552917 +428.94411529737465 +-168.43762655878692 +71.48865536192343 +0 +120 +absolute + + + +0.01 +smooth + +8.536741945286188 +47.35045261322423 +428.9439961452309 +-168.66555691787053 +71.49607279275207 +0 +120 +absolute + + + +0.01 +smooth + +8.536739918866445 +47.35045311450523 +428.9438769392635 +-168.8925731247253 +71.50353661962248 +0 +120 +absolute + + + +0.01 +smooth + +8.53673788861726 +47.35045360921539 +428.9437578355602 +-169.11867052560515 +71.51103042489675 +0 +120 +absolute + + + +0.01 +smooth + +8.536735854732937 +47.350454097197954 +428.943638990209 +-169.3438444667643 +71.518537790937 +0 +120 +absolute + + + +0.01 +smooth + +8.536733817407768 +47.35045457829609 +428.94352055929807 +-169.5680902944568 +71.5260423001054 +0 +120 +absolute + + + +0.01 +smooth + +8.53673177683605 +47.35045505235303 +428.94340269891524 +-169.79140335493662 +71.53352753476406 +0 +120 +absolute + + + +0.01 +smooth + +8.536729732425771 +47.35045552022484 +428.9432850658614 +-170.0138164134381 +71.54104039033665 +0 +120 +absolute + + + +0.01 +smooth + +8.536727681653833 +47.3504559852216 +428.94316606480567 +-170.23545360090964 +71.54878644235389 +0 +120 +absolute + + + +0.01 +smooth + +8.536725624465944 +47.350456447434404 +428.943045638031 +-170.45632094385087 +71.55677617169304 +0 +120 +absolute + + + +0.01 +smooth + +8.536723561035377 +47.35045690665972 +428.9429238711451 +-170.676413615948 +71.56500188021282 +0 +120 +absolute + + + +0.01 +smooth + +8.5367214915354 +47.35045736269402 +428.9428008497561 +-170.89572679088755 +71.57345586977208 +0 +120 +absolute + + + +0.01 +smooth + +8.53671941613928 +47.3504578153338 +428.94267665947143 +-171.11425564235566 +71.58213044222953 +0 +120 +absolute + + + +0.01 +smooth + +8.536717335020287 +47.350458264375504 +428.9425513858994 +-171.33199534403877 +71.59101789944397 +0 +120 +absolute + + + +0.01 +smooth + +8.536715248351685 +47.35045870961562 +428.9424251146473 +-171.54894106962308 +71.60011054327418 +0 +120 +absolute + + + +0.01 +smooth + +8.536713156306753 +47.350459150850654 +428.94229793132354 +-171.76508799279506 +71.60940067557894 +0 +120 +absolute + + + +0.01 +smooth + +8.536711059058751 +47.350459587877054 +428.9421699215354 +-171.98043128724092 +71.61888059821705 +0 +120 +absolute + + + +0.01 +smooth + +8.536708956780949 +47.35046002049126 +428.942041170891 +-172.19496612664693 +71.62854261304722 +0 +120 +absolute + + + +0.01 +smooth + +8.536706849646613 +47.3504604484898 +428.941911764998 +-172.40868768469946 +71.63837902192826 +0 +120 +absolute + + + +0.01 +smooth + +8.536704737829021 +47.350460871669135 +428.94178178946447 +-172.62159113508486 +71.64838212671897 +0 +120 +absolute + + + +0.01 +smooth + +8.536702621501432 +47.35046128982574 +428.9416513298981 +-172.83367165148945 +71.6585442292781 +0 +120 +absolute + + + +0.01 +smooth + +8.536700500837119 +47.35046170275607 +428.9415204719066 +-173.0449244075995 +71.66885763146443 +0 +120 +absolute + + + +0.01 +smooth + +8.536698376009348 +47.35046211025662 +428.94138930109796 +-173.2553445771014 +71.67931463513675 +0 +120 +absolute + + + +0.01 +smooth + +8.53669624719139 +47.35046251212387 +428.94125790308 +-173.46492733368135 +71.6899075421538 +0 +120 +absolute + + + +0.01 +smooth + +8.53669411455651 +47.35046290815426 +428.9411263634604 +-173.6736678510257 +71.7006286543744 +0 +120 +absolute + + + +0.01 +smooth + +8.536691978277982 +47.35046329814431 +428.9409947678471 +-173.88156130282087 +71.71147027365728 +0 +120 +absolute + + + +0.01 +smooth + +8.536689838529073 +47.350463681890474 +428.94086320184783 +-174.08860286275308 +71.72242470186127 +0 +120 +absolute + + + +0.01 +smooth + +8.536687695483048 +47.35046405918922 +428.94073175107064 +-174.29478770450862 +71.73348424084509 +0 +120 +absolute + + + +0.01 +smooth + +8.536685549313177 +47.35046442983704 +428.9406005011231 +-174.50011100177394 +71.74464119246757 +0 +120 +absolute + + + +0.01 +smooth + +8.536683400192729 +47.350464793630394 +428.9404695376131 +-174.7045679282352 +71.75588785858744 +0 +120 +absolute + + + +0.01 +smooth + +8.536681248294975 +47.35046515036576 +428.9403389461486 +-174.9081536575788 +71.7672165410635 +0 +120 +absolute + + + +0.01 +smooth + +8.53667909379318 +47.350465499839615 +428.9402088123373 +-175.1108633634911 +71.77861954175452 +0 +120 +absolute + + + +0.01 +smooth + +8.536676936860614 +47.35046584184844 +428.940079221787 +-175.31269221965832 +71.79008916251928 +0 +120 +absolute + + + +0.01 +smooth + +8.536674777670546 +47.3504661761887 +428.93995026010566 +-175.51363539976686 +71.80161770521656 +0 +120 +absolute + + + +0.01 +smooth + +8.536672616396244 +47.35046650265687 +428.93982201290095 +-175.7136880775029 +71.81319747170512 +0 +120 +absolute + + + +0.01 +smooth + +8.536670451601717 +47.35046682444409 +428.9396938989037 +-175.91293832019602 +71.8249002779977 +0 +120 +absolute + + + +0.01 +smooth + +8.536668281840466 +47.35046714467505 +428.93956531851035 +-176.111473661348 +71.83679987777023 +0 +120 +absolute + + + +0.01 +smooth + +8.536666107269973 +47.350467463046485 +428.9394363298262 +-176.30928847390297 +71.84889147937606 +0 +120 +absolute + + + +0.01 +smooth + +8.536663928047739 +47.35046777925517 +428.9393069909574 +-176.50637713080562 +71.86117029116872 +0 +120 +absolute + + + +0.01 +smooth + +8.536661744331251 +47.35046809299784 +428.9391773600096 +-176.70273400500042 +71.87363152150161 +0 +120 +absolute + + + +0.01 +smooth + +8.536659556278 +47.350468403971284 +428.93904749508823 +-176.89835346943164 +71.88627037872816 +0 +120 +absolute + + + +0.01 +smooth + +8.536657364045476 +47.35046871187224 +428.9389174542994 +-177.09322989704384 +71.89908207120186 +0 +120 +absolute + + + +0.01 +smooth + +8.536655167791178 +47.3504690163975 +428.938787295749 +-177.2873576607816 +71.91206180727616 +0 +120 +absolute + + + +0.01 +smooth + +8.536652967672595 +47.3504693172438 +428.9386570775425 +-177.48073113358922 +71.92520479530448 +0 +120 +absolute + + + +0.01 +smooth + +8.536650763847211 +47.35046961410787 +428.9385268577856 +-177.67334468841108 +71.93850624364026 +0 +120 +absolute + + + +0.01 +smooth + +8.536648556472528 +47.350469906686534 +428.9383966945843 +-177.86519269819195 +71.95196136063697 +0 +120 +absolute + + + +0.01 +smooth + +8.536646345706032 +47.35047019467652 +428.93826664604427 +-178.05626953587605 +71.96556535464806 +0 +120 +absolute + + + +0.01 +smooth + +8.536644131705216 +47.35047047777458 +428.9381367702712 +-178.24656957440786 +71.97931343402698 +0 +120 +absolute + + + +0.01 +smooth + +8.536641914627573 +47.35047075567749 +428.938007125371 +-178.43608718673192 +71.99320080712715 +0 +120 +absolute + + + +0.01 +smooth + +8.536639694630594 +47.35047102808201 +428.9378777694493 +-178.62481674579263 +72.00722268230203 +0 +120 +absolute + + + +0.01 +smooth + +8.536637471871769 +47.35047129468489 +428.9377487606119 +-178.81275262453448 +72.02137426790509 +0 +120 +absolute + + + +0.01 +smooth + +8.53663524650859 +47.350471555182885 +428.9376201569645 +-178.99988919590186 +72.03565077228974 +0 +120 +absolute + + + +0.01 +smooth + +8.536633018698552 +47.350471809272776 +428.93749201661296 +-179.18622083283935 +72.05004740380943 +0 +120 +absolute + + + +0.01 +smooth + +8.536630788599144 +47.3504720566513 +428.93736439766303 +-179.3717419082913 +72.06455937081765 +0 +120 +absolute + + + +0.01 +smooth + +8.536628556367857 +47.350472297015244 +428.9372373582204 +-179.5564467952022 +72.07918188166781 +0 +120 +absolute + + + +0.01 +smooth + +8.536626322162185 +47.35047253006134 +428.9371109563908 +-179.74032986651656 +72.09391014471336 +0 +120 +absolute + + + +0.01 +smooth + +8.536624086139618 +47.350472755486365 +428.9369852502801 +-179.92338549517876 +72.10873936830777 +0 +120 +absolute + + + +0.01 +smooth + +8.536621848457647 +47.350472972987085 +428.93686029799403 +-180.10560805413328 +72.12366476080446 +0 +120 +absolute + + + +0.01 +smooth + +8.536619609273767 +47.35047318226023 +428.9367361576383 +-180.28699191632464 +72.13868153055688 +0 +120 +absolute + + + +0.01 +smooth + +8.536617368745468 +47.3504733830026 +428.9366128873187 +-180.46753145469728 +72.1537848859185 +0 +120 +absolute + + + +0.01 +smooth + +8.53661512703024 +47.35047357491093 +428.936490545141 +-180.6472210421956 +72.16897003524275 +0 +120 +absolute + + + +0.01 +smooth + +8.536612884285578 +47.35047375768198 +428.93636918921095 +-180.8260550517641 +72.18423218688308 +0 +120 +absolute + + + +0.01 +smooth + +8.536610640493604 +47.35047393176344 +428.9362488156876 +-181.0040404893863 +72.19957290933218 +0 +120 +absolute + + + +0.01 +smooth + +8.536608393725476 +47.35047410566807 +428.93612874286873 +-181.1813214005007 +72.21506340536243 +0 +120 +absolute + + + +0.01 +smooth + +8.536606143523384 +47.3504742813674 +428.93600880286976 +-181.35793457517232 +72.23072220119347 +0 +120 +absolute + + + +0.01 +smooth + +8.53660389003356 +47.350474458219225 +428.9358890405245 +-181.53387314495802 +72.24654599173277 +0 +120 +absolute + + + +0.01 +smooth + +8.53660163340223 +47.350474635581314 +428.93576950066654 +-181.7091302414143 +72.26253147188761 +0 +120 +absolute + + + +0.01 +smooth + +8.536599373775617 +47.35047481281141 +428.93565022812965 +-181.88369899609793 +72.27867533656541 +0 +120 +absolute + + + +0.01 +smooth + +8.536597111299958 +47.35047498926733 +428.9355312677477 +-182.05757254056553 +72.29497428067356 +0 +120 +absolute + + + +0.01 +smooth + +8.536594846121483 +47.35047516430684 +428.9354126643546 +-182.230744006374 +72.31142499911947 +0 +120 +absolute + + + +0.01 +smooth + +8.53659257838642 +47.35047533728773 +428.93529446278404 +-182.40320652508004 +72.3280241868105 +0 +120 +absolute + + + +0.01 +smooth + +8.536590308240992 +47.350475507567744 +428.9351767078695 +-182.5749532282402 +72.34476853865402 +0 +120 +absolute + + + +0.01 +smooth + +8.53658803583143 +47.350475674504665 +428.9350594444451 +-182.7459772474112 +72.36165474955743 +0 +120 +absolute + + + +0.01 +smooth + +8.53658576130397 +47.3504758374563 +428.9349427173446 +-182.91627171414993 +72.37867951442817 +0 +120 +absolute + + + +0.01 +smooth + +8.536583484804837 +47.3504759957804 +428.93482657140186 +-183.08582976001298 +72.39583952817355 +0 +120 +absolute + + + +0.01 +smooth + +8.536581206480257 +47.350476148834744 +428.9347110514502 +-183.254644516557 +72.41313148570099 +0 +120 +absolute + + + +0.01 +smooth + +8.53657892647646 +47.3504762959771 +428.9345962023238 +-183.42270911533885 +72.43055208191788 +0 +120 +absolute + + + +0.01 +smooth + +8.536576644939679 +47.35047643656527 +428.93448206885637 +-183.59001668791512 +72.4480980117316 +0 +120 +absolute + + + +0.01 +smooth + +8.536574362016138 +47.35047656995702 +428.93436869588174 +-183.7565603658426 +72.46576597004955 +0 +120 +absolute + + + +0.01 +smooth + +8.536572077852071 +47.350476695510125 +428.9342561282335 +-183.92233328067803 +72.48355265177909 +0 +120 +absolute + + + +0.01 +smooth + +8.536569792593703 +47.35047681258235 +428.9341444107457 +-184.08732856397796 +72.50145475182762 +0 +120 +absolute + + + +0.01 +smooth + +8.536567506387266 +47.35047692053148 +428.93403358825185 +-184.25153934729926 +72.51946896510255 +0 +120 +absolute + + + +0.01 +smooth + +8.536565219378987 +47.350477018715296 +428.9339237055859 +-184.41495876219858 +72.53759198651122 +0 +120 +absolute + + + +0.01 +smooth + +8.536562931715096 +47.350477106491574 +428.9338148075816 +-184.57757994023262 +72.55582051096106 +0 +120 +absolute + + + +0.01 +smooth + +8.536560643541822 +47.35047718321809 +428.93370693907264 +-184.73939601295814 +72.57415123335943 +0 +120 +absolute + + + +0.01 +smooth + +8.536558355005393 +47.350477248252616 +428.9336001448929 +-184.9004001119318 +72.59258084861372 +0 +120 +absolute + + + +0.01 +smooth + +8.53655606625204 +47.35047730095293 +428.93349446987617 +-185.06058536871032 +72.61110605163131 +0 +120 +absolute + + + +0.01 +smooth + +8.53655377742799 +47.350477340676825 +428.93338995885614 +-185.21994491485046 +72.62972353731963 +0 +120 +absolute + + + +0.01 +smooth + +8.536551488679477 +47.35047736678206 +428.9332866566666 +-185.3784718819088 +72.64843000058602 +0 +120 +absolute + + + +0.01 +smooth + +8.53654920015272 +47.350477378626394 +428.9331846081414 +-185.53615940144226 +72.66722213633788 +0 +120 +absolute + + + +0.01 +smooth + +8.53654691134717 +47.35047737917221 +428.9330836261331 +-185.69305821738538 +72.68611509988861 +0 +120 +absolute + + + +0.01 +smooth + +8.536544620531135 +47.35047737853507 +428.93298308014636 +-185.84932771245187 +72.70515948636046 +0 +120 +absolute + + + +0.01 +smooth + +8.536542327724778 +47.35047737737244 +428.93288296615464 +-186.004970153928 +72.72435620488618 +0 +120 +absolute + + + +0.01 +smooth + +8.536540033066965 +47.350477375689564 +428.93278332264555 +-186.1599772052126 +72.74370278645304 +0 +120 +absolute + + + +0.01 +smooth + +8.53653773669654 +47.35047737349158 +428.93268418810607 +-186.314340529704 +72.76319676204814 +0 +120 +absolute + + + +0.01 +smooth + +8.536535438752363 +47.35047737078368 +428.9325856010238 +-186.46805179080098 +72.78283566265871 +0 +120 +absolute + + + +0.01 +smooth + +8.536533139373292 +47.350477367571074 +428.932487599886 +-186.6211026519022 +72.80261701927195 +0 +120 +absolute + + + +0.01 +smooth + +8.536530838698182 +47.35047736385891 +428.93239022317994 +-186.77348477640615 +72.82253836287502 +0 +120 +absolute + + + +0.01 +smooth + +8.53652853686588 +47.35047735965234 +428.9322935093927 +-186.9251898277114 +72.84259722445509 +0 +120 +absolute + + + +0.01 +smooth + +8.536526234015248 +47.350477354956595 +428.9321974970118 +-187.07620946921665 +72.86279113499936 +0 +120 +absolute + + + +0.01 +smooth + +8.53652393028514 +47.35047734977685 +428.93210222452467 +-187.22653536432057 +72.88311762549503 +0 +120 +absolute + + + +0.01 +smooth + +8.536521625814416 +47.35047734411828 +428.9320077304184 +-187.3761591764217 +72.90357422692928 +0 +120 +absolute + + + +0.01 +smooth + +8.536519320741922 +47.35047733798602 +428.9319140531802 +-187.52507256891857 +72.92415847028924 +0 +120 +absolute + + + +0.01 +smooth + +8.536517015206517 +47.3504773313853 +428.9318212312977 +-187.67326720520987 +72.94486788656215 +0 +120 +absolute + + + +0.01 +smooth + +8.53651470934706 +47.35047732432129 +428.9317293032579 +-187.8207347486943 +72.9657000067352 +0 +120 +absolute + + + +0.01 +smooth + +8.536512403302401 +47.35047731679917 +428.9316383075484 +-187.96746686277032 +72.98665236179554 +0 +120 +absolute + + + +0.01 +smooth + +8.536510097211398 +47.35047730882411 +428.93154828265614 +-188.1134552108366 +73.00772248273034 +0 +120 +absolute + + + +0.01 +smooth + +8.536507791212905 +47.350477300401295 +428.9314592670687 +-188.25869145629179 +73.02890790052685 +0 +120 +absolute + + + +0.01 +smooth + +8.536505485445776 +47.3504772915359 +428.93137129927317 +-188.40316726253442 +73.05020614617219 +0 +120 +absolute + + + +0.01 +smooth + +8.53650318004887 +47.350477282233115 +428.9312844177571 +-188.54687429296317 +73.07161475065357 +0 +120 +absolute + + + +0.01 +smooth + +8.536500875161039 +47.35047727249811 +428.93119866100767 +-188.68980421097666 +73.09313124495819 +0 +120 +absolute + + + +0.01 +smooth + +8.53649857092114 +47.35047726233607 +428.9311140675121 +-188.8319486799734 +73.1147531600732 +0 +120 +absolute + + + +0.01 +smooth + +8.536496267468024 +47.35047725175217 +428.9310306757578 +-188.9732993633521 +73.1364780269858 +0 +120 +absolute + + + +0.01 +smooth + +8.536493964940552 +47.3504772407516 +428.930948524232 +-189.11384792451133 +73.15830337668316 +0 +120 +absolute + + + +0.01 +smooth + +8.536491663477577 +47.35047722933952 +428.93086765142215 +-189.2535860268497 +73.18022674015249 +0 +120 +absolute + + + +0.01 +smooth + +8.536489363217953 +47.35047721752113 +428.9307880958154 +-189.39250533376585 +73.20224564838097 +0 +120 +absolute + + + +0.01 +smooth + +8.536487064300537 +47.35047720530161 +428.93070989589904 +-189.53059750865836 +73.22435763235576 +0 +120 +absolute + + + +0.01 +smooth + +8.536484766861028 +47.35047719266886 +428.93063308891254 +-189.66785455270733 +73.24656029738306 +0 +120 +absolute + + + +0.01 +smooth + +8.536482469656999 +47.35047717218265 +428.93055716649536 +-189.80441580254572 +73.26888380268174 +0 +120 +absolute + + + +0.01 +smooth + +8.536480171685843 +47.350477138139865 +428.9304817154073 +-189.94039358897257 +73.29135286216615 +0 +120 +absolute + + + +0.01 +smooth + +8.536477873082138 +47.350477091159156 +428.93040677268243 +-190.07577807852425 +73.31396542323048 +0 +120 +absolute + + + +0.01 +smooth + +8.536475573980445 +47.35047703185913 +428.9303323753542 +-190.2105594377369 +73.33671943326874 +0 +120 +absolute + + + +0.01 +smooth + +8.536473274515343 +47.35047696085844 +428.93025856045676 +-190.34472783314683 +73.35961283967511 +0 +120 +absolute + + + +0.01 +smooth + +8.536470974821395 +47.350476878775716 +428.9301853650239 +-190.47827343129026 +73.38264358984371 +0 +120 +absolute + + + +0.01 +smooth + +8.53646867503317 +47.350476786229585 +428.9301128260892 +-190.61118639870358 +73.40580963116861 +0 +120 +absolute + + + +0.01 +smooth + +8.536466375285242 +47.35047668383866 +428.9300409806866 +-190.7434569019227 +73.42910891104387 +0 +120 +absolute + + + +0.01 +smooth + +8.536464075712173 +47.350476572221595 +428.92996986584984 +-190.87507510748418 +73.45253937686367 +0 +120 +absolute + + + +0.01 +smooth + +8.536461776448542 +47.35047645199703 +428.92989951861296 +-191.00603118192421 +73.4760989760221 +0 +120 +absolute + + + +0.01 +smooth + +8.536459477628915 +47.35047632378358 +428.9298299760096 +-191.136315291779 +73.49978565591329 +0 +120 +absolute + + + +0.01 +smooth + +8.536457179387856 +47.35047618819986 +428.92976127507336 +-191.26591760358468 +73.52359736393127 +0 +120 +absolute + + + +0.01 +smooth + +8.536454881859935 +47.350476045864525 +428.9296934528383 +-191.39482828387767 +73.54753204747021 +0 +120 +absolute + + + +0.01 +smooth + +8.536452585179733 +47.35047589739622 +428.92962654633834 +-191.5230374991942 +73.57158765392423 +0 +120 +absolute + + + +0.01 +smooth + +8.536450289481808 +47.35047574341355 +428.9295605926071 +-191.65053541607054 +73.59576213068739 +0 +120 +absolute + + + +0.01 +smooth + +8.536447994900733 +47.35047558453514 +428.9294956286784 +-191.7773122010428 +73.62005342515383 +0 +120 +absolute + + + +0.01 +smooth + +8.536445701571076 +47.35047542137965 +428.92943169158616 +-191.90335802064732 +73.64445948471763 +0 +120 +absolute + + + +0.01 +smooth + +8.53644340962741 +47.35047525456569 +428.929368818364 +-192.02866304142037 +73.66897825677295 +0 +120 +absolute + + + +0.01 +smooth + +8.536441119204301 +47.35047508471189 +428.9293070460459 +-192.15321742989818 +73.69360768871383 +0 +120 +absolute + + + +0.01 +smooth + +8.53643883043632 +47.350474912436894 +428.9292464116656 +-192.27701135261697 +73.7183457279344 +0 +120 +absolute + + + +0.01 +smooth + +8.536436543458034 +47.350474738359324 +428.9291869522568 +-192.400034976113 +73.74319032182879 +0 +120 +absolute + + + +0.01 +smooth + +8.536434258404018 +47.350474563097826 +428.92912870485367 +-192.52227846692256 +73.7681394177911 +0 +120 +absolute + + + +0.01 +smooth + +8.536431975408837 +47.350474387271014 +428.9290717064896 +-192.64373199158183 +73.79319096321542 +0 +120 +absolute + + + +0.01 +smooth + +8.536429694607058 +47.35047421149753 +428.9290159941986 +-192.7643857166271 +73.81834290549588 +0 +120 +absolute + + + +0.01 +smooth + +8.53642741613326 +47.350474036395994 +428.9289616050145 +-192.88422980859463 +73.84359319202657 +0 +120 +absolute + + + +0.01 +smooth + +8.536425140122002 +47.35047386258504 +428.92890857597104 +-193.00325443402065 +73.8689397702016 +0 +120 +absolute + + + +0.01 +smooth + +8.53642286670786 +47.350473690683316 +428.92885694410205 +-193.12144975944145 +73.8943805874151 +0 +120 +absolute + + + +0.01 +smooth + +8.536420595826167 +47.35047352047381 +428.9288066542702 +-193.2388305719246 +73.91991773746925 +0 +120 +absolute + + + +0.01 +smooth + +8.536418325767892 +47.350473344725906 +428.928756892522 +-193.3556143258289 +73.94558755219744 +0 +120 +absolute + + + +0.01 +smooth + +8.536416056217297 +47.35047316183359 +428.928707493104 +-193.47184528296606 +73.97139739521107 +0 +120 +absolute + + + +0.01 +smooth + +8.536413787306778 +47.35047297204902 +428.9286584979406 +-193.5875122259143 +73.9973453062437 +0 +120 +absolute + + + +0.01 +smooth + +8.536411519168738 +47.35047277562436 +428.9286099489568 +-193.70260393725232 +74.02342932502884 +0 +120 +absolute + + + +0.01 +smooth + +8.536409251935577 +47.35047257281182 +428.92856188807747 +-193.81710919955856 +74.04964749130006 +0 +120 +absolute + + + +0.01 +smooth + +8.536406985739697 +47.35047236386353 +428.92851435722747 +-193.9310167954114 +74.0759978447909 +0 +120 +absolute + + + +0.01 +smooth + +8.536404720713495 +47.35047214903163 +428.9284673983313 +-194.04431550738937 +74.10247842523485 +0 +120 +absolute + + + +0.01 +smooth + +8.536402456989372 +47.35047192856833 +428.9284210533141 +-194.15699411807086 +74.12908727236547 +0 +120 +absolute + + + +0.01 +smooth + +8.536400194699734 +47.35047170272579 +428.9283753641005 +-194.26904141003448 +74.15582242591631 +0 +120 +absolute + + + +0.01 +smooth + +8.536397933976977 +47.350471471756165 +428.92833037261556 +-194.38044616585861 +74.18268192562091 +0 +120 +absolute + + + +0.01 +smooth + +8.536395674953496 +47.35047123591161 +428.92828612078375 +-194.4911971681217 +74.20966381121278 +0 +120 +absolute + + + +0.01 +smooth + +8.536393417761701 +47.3504709954443 +428.92824265053025 +-194.6012831994022 +74.23676612242545 +0 +120 +absolute + + + +0.01 +smooth + +8.536391162533992 +47.35047075060642 +428.92820000377975 +-194.7106930422788 +74.26398689899251 +0 +120 +absolute + + + +0.01 +smooth + +8.536388909402763 +47.350470501650115 +428.92815822245706 +-194.8194154793297 +74.29132418064745 +0 +120 +absolute + + + +0.01 +smooth + +8.536386658500417 +47.35047024882755 +428.9281173484869 +-194.9274392931335 +74.31877600712382 +0 +120 +absolute + + + +0.01 +smooth + +8.536384409959359 +47.3504699923909 +428.9280774237942 +-195.03475326626864 +74.34634041815515 +0 +120 +absolute + + + +0.01 +smooth + +8.536382163911984 +47.350469732592316 +428.92803849030395 +-195.14134618131362 +74.37401545347498 +0 +120 +absolute + + + +0.01 +smooth + +8.536379920490694 +47.350469469683986 +428.92800058994067 +-195.24720682084694 +74.40179915281688 +0 +120 +absolute + + + +0.01 +smooth + +8.53637767982789 +47.35046920391807 +428.92796376462934 +-195.35232396744695 +74.42968955591432 +0 +120 +absolute + + + +0.01 +smooth + +8.536375442055974 +47.350468935546715 +428.92792805629466 +-195.45668640369223 +74.45768470250088 +0 +120 +absolute + + + +0.01 +smooth + +8.536373207307342 +47.3504686648221 +428.92789350686166 +-195.5602829121612 +74.4857826323101 +0 +120 +absolute + + + +0.01 +smooth + +8.536370975714398 +47.3504683919964 +428.92786015825504 +-195.66310227543238 +74.51398138507551 +0 +120 +absolute + + + +0.01 +smooth + +8.536368747409544 +47.35046811732176 +428.9278280523996 +-195.76513327608419 +74.54227900053064 +0 +120 +absolute + + + +0.01 +smooth + +8.536366522525178 +47.35046784105036 +428.9277972312202 +-195.86636469669514 +74.57067351840902 +0 +120 +absolute + + + +0.01 +smooth + +8.536364301193698 +47.35046756343437 +428.9277677366417 +-195.9667853198436 +74.59916297844421 +0 +120 +absolute + + + +0.01 +smooth + +8.536362083547512 +47.350467284725944 +428.9277396105889 +-196.06638392810822 +74.62774542036972 +0 +120 +absolute + + + +0.01 +smooth + +8.536359869719014 +47.35046700517725 +428.9277128949866 +-196.16514930406737 +74.65641888391912 +0 +120 +absolute + + + +0.01 +smooth + +8.53635765913053 +47.350466723647514 +428.9276871811871 +-196.26316770676846 +74.68519543116749 +0 +120 +absolute + + + +0.01 +smooth + +8.536355450178267 +47.350466436937744 +428.9276614239954 +-196.36066557325128 +74.71410729147556 +0 +120 +absolute + + + +0.01 +smooth + +8.536353242914826 +47.35046614505587 +428.9276356429572 +-196.45764131215145 +74.74315389353858 +0 +120 +absolute + + + +0.01 +smooth + +8.536351037471695 +47.35046584816359 +428.9276099079733 +-196.55408248870472 +74.77233310623406 +0 +120 +absolute + + + +0.01 +smooth + +8.536348833980371 +47.35046554642265 +428.92758428894484 +-196.6499766681474 +74.80164279843954 +0 +120 +absolute + + + +0.01 +smooth + +8.536346632572338 +47.35046523999479 +428.9275588557724 +-196.74531141571552 +74.83108083903254 +0 +120 +absolute + + + +0.01 +smooth + +8.536344433379089 +47.3504649290417 +428.92753367835695 +-196.840074296645 +74.86064509689056 +0 +120 +absolute + + + +0.01 +smooth + +8.536342236532116 +47.350464613725144 +428.9275088265993 +-196.93425287617202 +74.89033344089117 +0 +120 +absolute + + + +0.01 +smooth + +8.536340042162907 +47.35046429420684 +428.9274843704004 +-197.02783471953262 +74.92014373991182 +0 +120 +absolute + + + +0.01 +smooth + +8.53633785040296 +47.350463970648526 +428.9274603796611 +-197.12080739196284 +74.95007386283011 +0 +120 +absolute + + + +0.01 +smooth + +8.536335661383761 +47.35046364321193 +428.9274369242822 +-197.21315845869879 +74.98012167852353 +0 +120 +absolute + + + +0.01 +smooth + +8.536333475236795 +47.35046331205875 +428.9274140741644 +-197.3048754849764 +75.0102850558696 +0 +120 +absolute + + + +0.01 +smooth + +8.536331292093562 +47.350462977350745 +428.9273918992088 +-197.39594603603177 +75.04056186374584 +0 +120 +absolute + + + +0.01 +smooth + +8.536329112085552 +47.35046263924967 +428.92737046931626 +-197.48635767710113 +75.07094997102979 +0 +120 +absolute + + + +0.01 +smooth + +8.53632693534425 +47.350462297917204 +428.9273498543875 +-197.57609797342033 +75.10144724659898 +0 +120 +absolute + + + +0.01 +smooth + +8.53632476200115 +47.35046195351508 +428.9273301243234 +-197.66515449022546 +75.1320515593309 +0 +120 +absolute + + + +0.01 +smooth + +8.536322592187744 +47.35046160620507 +428.927311349025 +-197.7535147927527 +75.16276077810312 +0 +120 +absolute + + + +0.01 +smooth + +8.536320426035523 +47.35046125614887 +428.9272935983928 +-197.841166446238 +75.19357277179313 +0 +120 +absolute + + + +0.01 +smooth + +8.536318263675975 +47.350460903508214 +428.92727694232804 +-197.92809701591744 +75.22448540927844 +0 +120 +absolute + + + +0.01 +smooth + +8.536316105240594 +47.35046054844483 +428.92726145073135 +-198.0142940670271 +75.25549655943662 +0 +120 +absolute + + + +0.01 +smooth + +8.536313950860867 +47.35046019112045 +428.9272471935036 +-198.09974516480298 +75.28660409114516 +0 +120 +absolute + + + +0.01 +smooth + +8.536311800668289 +47.3504598316968 +428.9272342405458 +-198.1844378744812 +75.3178058732816 +0 +120 +absolute + + + +0.01 +smooth + +8.536309654794348 +47.35045947033562 +428.9272226617585 +-198.26835976129783 +75.34909977472347 +0 +120 +absolute + + + +0.01 +smooth + +8.536307513370534 +47.35045910719864 +428.92721252704297 +-198.35149839048884 +75.38048366434826 +0 +120 +absolute + + + +0.01 +smooth + +8.536305376528341 +47.35045874244757 +428.92720390629984 +-198.4338413272904 +75.41195541103353 +0 +120 +absolute + + + +0.01 +smooth + +8.536303244399258 +47.350458376244156 +428.92719686942996 +-198.5153761369385 +75.44351288365678 +0 +120 +absolute + + + +0.01 +smooth + +8.536301117114776 +47.350458008750124 +428.9271914863342 +-198.59609038466917 +75.47515395109555 +0 +120 +absolute + + + +0.01 +smooth + +8.536298994793343 +47.35045764011136 +428.9271878183662 +-198.67597357039736 +75.50687674288079 +0 +120 +absolute + + + +0.01 +smooth + +8.536296876026812 +47.35045726861238 +428.92718491316117 +-198.75524132905286 +75.53870980878052 +0 +120 +absolute + + + +0.01 +smooth + +8.536294759889708 +47.35045689309649 +428.9271820895471 +-198.83403698090356 +75.5706718036866 +0 +120 +absolute + + + +0.01 +smooth + +8.536292646513363 +47.350456513684485 +428.92717934950565 +-198.91234698835206 +75.6027602185395 +0 +120 +absolute + + + +0.01 +smooth + +8.53629053602911 +47.35045613049707 +428.9271766950191 +-198.99015781380103 +75.63497254427985 +0 +120 +absolute + + + +0.01 +smooth + +8.53628842856829 +47.350455743655026 +428.92717412806917 +-199.06745591965304 +75.66730627184808 +0 +120 +absolute + + + +0.01 +smooth + +8.536286324262225 +47.350455353279045 +428.9271716506373 +-199.1442277683105 +75.69975889218469 +0 +120 +absolute + + + +0.01 +smooth + +8.53628422324226 +47.35045495948991 +428.92716926470575 +-199.22045982217608 +75.73232789623027 +0 +120 +absolute + + + +0.01 +smooth + +8.536282125639731 +47.350454562408366 +428.9271669722562 +-199.29613854365243 +75.7650107749253 +0 +120 +absolute + + + +0.01 +smooth + +8.536280031585969 +47.35045416215513 +428.9271647752705 +-199.37125039514206 +75.7978050192103 +0 +120 +absolute + + + +0.01 +smooth + +8.536277941212303 +47.350453758850946 +428.9271626757304 +-199.44578183904747 +75.83070812002575 +0 +120 +absolute + + + +0.01 +smooth + +8.536275854650077 +47.35045335261659 +428.9271606756178 +-199.51971933777128 +75.8637175683122 +0 +120 +absolute + + + +0.01 +smooth + +8.536273772030624 +47.35045294357279 +428.92715877691455 +-199.59304935371617 +75.8968308550102 +0 +120 +absolute + + + +0.01 +smooth + +8.536271693485277 +47.350452531840276 +428.9271569816025 +-199.6657583492846 +75.9300454710602 +0 +120 +absolute + + + +0.01 +smooth + +8.536269619145369 +47.35045211753979 +428.92715529166327 +-199.73783278687912 +75.96335890740275 +0 +120 +absolute + + + +0.01 +smooth + +8.536267549142234 +47.3504517007921 +428.9271537090789 +-199.80925912890237 +75.99676865497834 +0 +120 +absolute + + + +0.01 +smooth + +8.536265483607213 +47.35045128171792 +428.9271522358313 +-199.8800238377569 +76.03027220472751 +0 +120 +absolute + + + +0.01 +smooth + +8.536263422671638 +47.35045086043803 +428.92715087390206 +-199.95011337584532 +76.06386704759079 +0 +120 +absolute + + + +0.01 +smooth + +8.536261366466842 +47.35045043707314 +428.92714962527305 +-200.01951420557015 +76.09755067450867 +0 +120 +absolute + + + +0.01 +smooth + +8.53625931512416 +47.35045001174401 +428.92714849192623 +-200.08821278933402 +76.13132057642167 +0 +120 +absolute + + + +0.01 +smooth + +8.536257268774929 +47.35044958457138 +428.9271474758434 +-200.15619558953938 +76.1651742442703 +0 +120 +absolute + + + +0.01 +smooth + +8.53625522755048 +47.35044915567599 +428.9271465790063 +-200.22344906858896 +76.19910916899511 +0 +120 +absolute + + + +0.01 +smooth + +8.536253191582151 +47.350448725178595 +428.9271458033968 +-200.28995968888523 +76.23312284153656 +0 +120 +absolute + + + +0.01 +smooth + +8.536251161001278 +47.350448293199925 +428.9271451509968 +-200.35571391283082 +76.2672127528352 +0 +120 +absolute + + + +0.01 +smooth + +8.53624913593919 +47.35044785986072 +428.9271446237881 +-200.42069820282828 +76.30137639383156 +0 +120 +absolute + + + +0.01 +smooth + +8.536247116527228 +47.35044742528174 +428.92714422375235 +-200.48489902128017 +76.33561125546612 +0 +120 +absolute + + + +0.01 +smooth + +8.536245102896723 +47.350446989583716 +428.92714395287163 +-200.54830283058908 +76.36991482867944 +0 +120 +absolute + + + +0.01 +smooth + +8.536243095179012 +47.3504465528874 +428.92714381312766 +-200.61089609315758 +76.40428460441197 +0 +120 +absolute + + + +0.01 +smooth + +8.536241093228348 +47.350446115081446 +428.92714392520963 +-200.67270881976094 +76.43872387712304 +0 +120 +absolute + + + +0.01 +smooth + +8.536239095130643 +47.35044567456545 +428.9271451454289 +-200.73404856761957 +76.47327279891469 +0 +120 +absolute + + + +0.01 +smooth + +8.536237100603763 +47.35044523109258 +428.92714759333694 +-200.7949657406069 +76.5079370300229 +0 +120 +absolute + + + +0.01 +smooth + +8.536235109779517 +47.350444784761514 +428.92715120798397 +-200.8554456297997 +76.54271353467439 +0 +120 +absolute + + + +0.01 +smooth + +8.5362331227897 +47.35044433567097 +428.92715592842046 +-200.91547352627518 +76.5775992770961 +0 +120 +absolute + + + +0.01 +smooth + +8.536231139766116 +47.350443883919645 +428.9271616936966 +-200.9750347211102 +76.61259122151476 +0 +120 +absolute + + + +0.01 +smooth + +8.53622916084057 +47.350443429606266 +428.9271684428627 +-201.03411450538187 +76.64768633215728 +0 +120 +absolute + + + +0.01 +smooth + +8.536227186144863 +47.350442972829555 +428.9271761149692 +-201.0926981701672 +76.68288157325047 +0 +120 +absolute + + + +0.01 +smooth + +8.536225215810797 +47.35044251368821 +428.9271846490663 +-201.1507710065432 +76.71817390902115 +0 +120 +absolute + + + +0.01 +smooth + +8.536223249970169 +47.350442052280904 +428.92719398420434 +-201.20831830558677 +76.75356030369609 +0 +120 +absolute + + + +0.01 +smooth + +8.536221288754785 +47.350441588706396 +428.9272040594337 +-201.26532535837507 +76.7890377215022 +0 +120 +absolute + + + +0.01 +smooth + +8.536219332296449 +47.35044112306339 +428.92721481380465 +-201.32177745598506 +76.8246031266663 +0 +120 +absolute + + + +0.01 +smooth + +8.536217380726963 +47.35044065545059 +428.92722618636776 +-201.37765988949377 +76.86025348341519 +0 +120 +absolute + + + +0.01 +smooth + +8.536215434178121 +47.350440185966676 +428.9272381161729 +-201.4329579499781 +76.89598575597569 +0 +120 +absolute + + + +0.01 +smooth + +8.536213492781737 +47.35043971471039 +428.92725054227077 +-201.48765692851515 +76.93179690857465 +0 +120 +absolute + + + +0.01 +smooth + +8.536211556669606 +47.35043924178045 +428.92726340371144 +-201.54174211618192 +76.96768390543893 +0 +120 +absolute + + + +0.01 +smooth + +8.53620962597353 +47.35043876727554 +428.9272766395454 +-201.59519880405543 +77.0036437107953 +0 +120 +absolute + + + +0.01 +smooth + +8.536207700825313 +47.35043829129439 +428.927290188823 +-201.6480122832127 +77.03967328887062 +0 +120 +absolute + + + +0.01 +smooth + +8.536205781356756 +47.3504378139357 +428.92730399059445 +-201.70016784473074 +77.0757696038917 +0 +120 +absolute + + + +0.01 +smooth + +8.536203867699662 +47.35043733529818 +428.92731798391014 +-201.75165077968649 +77.11192962008539 +0 +120 +absolute + + + +0.01 +smooth + +8.536201959985831 +47.35043685548054 +428.92733210782035 +-201.80244637915706 +77.14815030167854 +0 +120 +absolute + + + +0.01 +smooth + +8.536200058347067 +47.3504363745815 +428.92734630137545 +-201.85253993421938 +77.18442861289793 +0 +120 +absolute + + + +0.01 +smooth + +8.53619816291517 +47.35043589269976 +428.92736050362566 +-201.90191673595052 +77.2207615179704 +0 +120 +absolute + + + +0.01 +smooth + +8.536196273821945 +47.35043540993402 +428.9273746536215 +-201.95056207542746 +77.25714598112282 +0 +120 +absolute + + + +0.01 +smooth + +8.536194391199192 +47.35043492638301 +428.92738869041307 +-201.99846124372723 +77.29357896658198 +0 +120 +absolute + + + +0.01 +smooth + +8.536192515178712 +47.350434442145435 +428.9274025530509 +-202.04559953192683 +77.3300574385747 +0 +120 +absolute + + + +0.01 +smooth + +8.53619064589231 +47.35043395732 +428.92741618058506 +-202.09196223110325 +77.36657836132783 +0 +120 +absolute + + + +0.01 +smooth + +8.536188783471786 +47.35043347200541 +428.92742951206617 +-202.13753463233354 +77.40313869906821 +0 +120 +absolute + + + +0.01 +smooth + +8.536186927120006 +47.35043298572058 +428.9274427837883 +-202.1824564308811 +77.43975612681501 +0 +120 +absolute + + + +0.01 +smooth + +8.536185075053508 +47.35043249736186 +428.92745656757495 +-202.22703048122443 +77.4764699908644 +0 +120 +absolute + + + +0.01 +smooth + +8.536183227347255 +47.350432006979666 +428.927470857306 +-202.27125007791523 +77.51327793558283 +0 +120 +absolute + + + +0.01 +smooth + +8.536181384134284 +47.35043151466062 +428.92748562852694 +-202.3150988541914 +77.55017630678971 +0 +120 +absolute + + + +0.01 +smooth + +8.53617954554762 +47.35043102049131 +428.92750085678307 +-202.3585604432907 +77.58716145030422 +0 +120 +absolute + + + +0.01 +smooth + +8.536177711720306 +47.35043052455835 +428.92751651762 +-202.40161847845116 +77.62422971194573 +0 +120 +absolute + + + +0.01 +smooth + +8.536175882785368 +47.35043002694831 +428.927532586583 +-202.4442565929105 +77.66137743753346 +0 +120 +absolute + + + +0.01 +smooth + +8.536174058875842 +47.350429527747835 +428.9275490392179 +-202.48645841990663 +77.69860097288678 +0 +120 +absolute + + + +0.01 +smooth + +8.536172240124753 +47.350429027043475 +428.92756585106974 +-202.52820759267732 +77.73589666382496 +0 +120 +absolute + + + +0.01 +smooth + +8.53617042666514 +47.35042852492188 +428.92758299768406 +-202.56948774446053 +77.77326085616727 +0 +120 +absolute + + + +0.01 +smooth + +8.53616861863004 +47.35042802146962 +428.92760045460653 +-202.61028250849415 +77.81068989573305 +0 +120 +absolute + + + +0.01 +smooth + +8.53616681615248 +47.350427516773316 +428.92761819738257 +-202.65057551801596 +77.84818012834157 +0 +120 +absolute + + + +0.01 +smooth + +8.536165019365487 +47.35042701091953 +428.9276362015572 +-202.69035040626372 +77.88572789981211 +0 +120 +absolute + + + +0.01 +smooth + +8.536163228402103 +47.350426503994896 +428.92765444267627 +-202.72959080647547 +77.92332955596397 +0 +120 +absolute + + + +0.01 +smooth + +8.53616144339536 +47.35042599608602 +428.9276728962854 +-202.76828035188902 +77.96098144261651 +0 +120 +absolute + + + +0.01 +smooth + +8.536159664478284 +47.35042548727948 +428.92769153792955 +-202.80640267574216 +77.99867990558896 +0 +120 +absolute + + + +0.01 +smooth + +8.536157891783915 +47.35042497766187 +428.9277103431545 +-202.8439414112728 +78.03642129070062 +0 +120 +absolute + + + +0.01 +smooth + +8.53615612544528 +47.350424467319826 +428.9277292875056 +-202.88088019171877 +78.07420194377079 +0 +120 +absolute + + + +0.01 +smooth + +8.536154365595413 +47.350423956339924 +428.92774834652835 +-202.91720265031796 +78.11201821061879 +0 +120 +absolute + + + +0.01 +smooth + +8.53615261236735 +47.35042344480877 +428.9277674957681 +-202.95289242030822 +78.14986643706388 +0 +120 +absolute + + + +0.01 +smooth + +8.536150865894118 +47.350422932812954 +428.9277867107704 +-202.9879331349273 +78.18774296892536 +0 +120 +absolute + + + +0.01 +smooth + +8.536149126308755 +47.35042242043909 +428.92780596708076 +-203.02230842741324 +78.22564415202257 +0 +120 +absolute + + + +0.01 +smooth + +8.536147393744292 +47.35042190777378 +428.9278252402444 +-203.05600193100378 +78.26356633217476 +0 +120 +absolute + + + +0.01 +smooth + +8.53614566833376 +47.35042139490361 +428.927844505807 +-203.08899727893677 +78.30150585520121 +0 +120 +absolute + + + +0.01 +smooth + +8.536143950210192 +47.35042088191519 +428.9278637393139 +-203.12127810445017 +78.33945906692128 +0 +120 +absolute + + + +0.01 +smooth + +8.536142239506622 +47.350420368895115 +428.92788291631064 +-203.1528280407817 +78.3774223131542 +0 +120 +absolute + + + +0.01 +smooth + +8.536140536356083 +47.35041985593 +428.92790201234254 +-203.1836307211693 +78.4153919397193 +0 +120 +absolute + + + +0.01 +smooth + +8.536138840856612 +47.35041934308886 +428.92792100708687 +-203.2136761045309 +78.45336512771796 +0 +120 +absolute + + + +0.01 +smooth + +8.536137151190132 +47.35041882947745 +428.9279401089594 +-203.243299934742 +78.49138466740548 +0 +120 +absolute + + + +0.01 +smooth + +8.536135466368096 +47.35041831461321 +428.9279594358038 +-203.27268608951184 +78.52947314484817 +0 +120 +absolute + + + +0.01 +smooth + +8.536133786525799 +47.35041779857684 +428.9279789741072 +-203.30181492763563 +78.56762624465672 +0 +120 +absolute + + + +0.01 +smooth + +8.536132111798516 +47.35041728144902 +428.9279987103565 +-203.33066680790847 +78.60583965144161 +0 +120 +absolute + + + +0.01 +smooth + +8.53613044232153 +47.35041676331045 +428.92801863103904 +-203.35922208912555 +78.64410904981347 +0 +120 +absolute + + + +0.01 +smooth + +8.536128778230125 +47.35041624424181 +428.9280387226414 +-203.38746113008185 +78.68243012438282 +0 +120 +absolute + + + +0.01 +smooth + +8.536127119659582 +47.35041572432382 +428.92805897165124 +-203.4153642895726 +78.72079855976033 +0 +120 +absolute + + + +0.01 +smooth + +8.536125466745181 +47.35041520363711 +428.928079364555 +-203.4429119263929 +78.75921004055647 +0 +120 +absolute + + + +0.01 +smooth + +8.536123819622203 +47.3504146822624 +428.9280998878399 +-203.47008439933782 +78.79766025138188 +0 +120 +absolute + + + +0.01 +smooth + +8.536122178425936 +47.350414160280394 +428.92812052799326 +-203.4968620672026 +78.83614487684714 +0 +120 +absolute + + + +0.01 +smooth + +8.536120543291656 +47.35041363777177 +428.9281412715018 +-203.52322528878227 +78.87465960156283 +0 +120 +absolute + + + +0.01 +smooth + +8.53611891435465 +47.35041311481721 +428.9281621048527 +-203.54915442287196 +78.91320011013951 +0 +120 +absolute + + + +0.01 +smooth + +8.536117291750193 +47.3504125914974 +428.92818301453275 +-203.57462982826678 +78.95176208718773 +0 +120 +absolute + + + +0.01 +smooth + +8.536115675613575 +47.350412067893046 +428.9282039870294 +-203.599631863762 +78.99034121731815 +0 +120 +absolute + + + +0.01 +smooth + +8.536114066080073 +47.35041154408482 +428.92822500882954 +-203.6241408881525 +79.02893318514127 +0 +120 +absolute + + + +0.01 +smooth + +8.536112463284969 +47.35041102015342 +428.92824606642 +-203.64813726023357 +79.06753367526767 +0 +120 +absolute + + + +0.01 +smooth + +8.536110867363545 +47.350410496179535 +428.92826714628796 +-203.67160133880031 +79.10613837230798 +0 +120 +absolute + + + +0.01 +smooth + +8.536109278451086 +47.350409972243845 +428.9282882349206 +-203.69451348264784 +79.14474296087275 +0 +120 +absolute + + + +0.01 +smooth + +8.536107696682869 +47.35040944842705 +428.92830931880474 +-203.71685405057121 +79.18334312557255 +0 +120 +absolute + + + +0.01 +smooth + +8.53610612219418 +47.35040892480983 +428.9283303844275 +-203.7386034013656 +79.22193455101797 +0 +120 +absolute + + + +0.01 +smooth + +8.5361045551203 +47.35040840147288 +428.92835141827595 +-203.75974189382617 +79.26051292181957 +0 +120 +absolute + + + +0.01 +smooth + +8.53610299559651 +47.35040787849689 +428.92837240683707 +-203.78024988674798 +79.29907392258795 +0 +120 +absolute + + + +0.01 +smooth + +8.536101443758092 +47.350407355962545 +428.928393336598 +-203.80010773892613 +79.33761323793368 +0 +120 +absolute + + + +0.01 +smooth + +8.536099899740329 +47.35040683395053 +428.92841419404556 +-203.81929580915585 +79.37612655246733 +0 +120 +absolute + + + +0.01 +smooth + +8.536098363678501 +47.35040631254154 +428.9284349656671 +-203.8377944562322 +79.41460955079947 +0 +120 +absolute + + + +0.01 +smooth + +8.536096835707891 +47.35040579181626 +428.9284556379494 +-203.8555840389503 +79.45305791754072 +0 +120 +absolute + + + +0.01 +smooth + +8.536095315963784 +47.35040527185539 +428.92847619737967 +-203.87264491610523 +79.49146733730161 +0 +120 +absolute + + + +0.01 +smooth + +8.536093804161503 +47.35040475255541 +428.9284966566159 +-203.8890499397081 +79.52984419890336 +0 +120 +absolute + + + +0.01 +smooth + +8.536092297917914 +47.3504042328913 +428.9285171608224 +-203.90533059495993 +79.56824816095816 +0 +120 +absolute + + + +0.01 +smooth + +8.536090796951713 +47.350403712757966 +428.9285377268735 +-203.92154993871023 +79.60668497017332 +0 +120 +absolute + + + +0.01 +smooth + +8.536089301401688 +47.350403192234445 +428.9285583456562 +-203.937678108716 +79.64514964112763 +0 +120 +absolute + + + +0.01 +smooth + +8.53608781140663 +47.35040267139978 +428.9285790080572 +-203.9536852427342 +79.68363718839976 +0 +120 +absolute + + + +0.01 +smooth + +8.53608632710533 +47.35040215033301 +428.9285997049636 +-203.96954147852193 +79.7221426265685 +0 +120 +absolute + + + +0.01 +smooth + +8.53608484863658 +47.35040162911318 +428.928620427262 +-203.9852169538361 +79.76066097021254 +0 +120 +absolute + + + +0.01 +smooth + +8.536083376139166 +47.3504011078193 +428.928641165839 +-204.00068180643368 +79.7991872339106 +0 +120 +absolute + + + +0.01 +smooth + +8.536081909751884 +47.350400586530434 +428.92866191158157 +-204.01590617407174 +79.83771643224144 +0 +120 +absolute + + + +0.01 +smooth + +8.536080449613525 +47.35040006532562 +428.9286826553768 +-204.03086019450728 +79.87624357978379 +0 +120 +absolute + + + +0.01 +smooth + +8.53607899586288 +47.350399544283896 +428.9287033881113 +-204.04551400549735 +79.91476369111636 +0 +120 +absolute + + + +0.01 +smooth + +8.536077548638737 +47.350399023484286 +428.92872410067173 +-204.05983774479876 +79.95327178081786 +0 +120 +absolute + + + +0.01 +smooth + +8.53607610807989 +47.35039850300583 +428.92874478394504 +-204.07380155016867 +79.99176286346709 +0 +120 +absolute + + + +0.01 +smooth + +8.536074674325125 +47.350397982927575 +428.92876542881794 +-204.08737555936403 +80.0302319536427 +0 +120 +absolute + + + +0.01 +smooth + +8.536073247513242 +47.350397463328555 +428.9287860261776 +-204.1005299101419 +80.06867406592347 +0 +120 +absolute + + + +0.01 +smooth + +8.536071827783024 +47.35039694428782 +428.92880656691034 +-204.11323474025914 +80.10708421488813 +0 +120 +absolute + + + +0.01 +smooth + +8.536070415273265 +47.3503964258844 +428.92882704190333 +-204.12546018747287 +80.14545741511537 +0 +120 +absolute + + + +0.01 +smooth + +8.536069010122755 +47.35039590819733 +428.92884744204315 +-204.13717638954012 +80.18378868118398 +0 +120 +absolute + + + +0.01 +smooth + +8.536067612470287 +47.35039539130563 +428.9288677582168 +-204.14835348421772 +80.22207302767262 +0 +120 +absolute + + + +0.01 +smooth + +8.536066222454648 +47.35039487528837 +428.92888798131094 +-204.1589616092628 +80.26030546916007 +0 +120 +absolute + + + +0.01 +smooth + +8.536064840214634 +47.35039436022458 +428.9289081022126 +-204.16897090243236 +80.29848102022505 +0 +120 +absolute + + + +0.01 +smooth + +8.53606346588903 +47.350393846193285 +428.9289281118082 +-204.17835150148335 +80.33659469544628 +0 +120 +absolute + + + +0.01 +smooth + +8.536062099616634 +47.350393333273544 +428.928948000985 +-204.1870735441728 +80.3746415094025 +0 +120 +absolute + + + +0.01 +smooth + +8.53606074153623 +47.35039282154436 +428.92896776062946 +-204.19510716825766 +80.41261647667241 +0 +120 +absolute + + + +0.01 +smooth + +8.536059391786615 +47.35039231108482 +428.92898738162853 +-204.202422511495 +80.4505146118348 +0 +120 +absolute + + + +0.01 +smooth + +8.536058050506577 +47.35039180197392 +428.9290068548692 +-204.2089897116418 +80.48833092946836 +0 +120 +absolute + + + +0.01 +smooth + +8.536056717834905 +47.35039129429072 +428.929026171238 +-204.21477890645502 +80.5260604441518 +0 +120 +absolute + + + +0.01 +smooth + +8.536055393910395 +47.35039078811426 +428.92904532162186 +-204.21976023369166 +80.56369817046388 +0 +120 +absolute + + + +0.01 +smooth + +8.536054077551697 +47.35039028297838 +428.9290643541954 +-204.22419075177964 +80.60127513970143 +0 +120 +absolute + + + +0.01 +smooth + +8.536052766607309 +47.35038977801595 +428.9290833606556 +-204.22855163112388 +80.63884855055711 +0 +120 +absolute + + + +0.01 +smooth + +8.536051461179797 +47.35038927329046 +428.9291023359428 +-204.23284402871747 +80.67641387940216 +0 +120 +absolute + + + +0.01 +smooth + +8.536050161412875 +47.35038876888237 +428.92912127322245 +-204.23706024943453 +80.71396547849635 +0 +120 +absolute + + + +0.01 +smooth + +8.536048867450248 +47.35038826487214 +428.92914016565936 +-204.24119259814904 +80.75149770009932 +0 +120 +absolute + + + +0.01 +smooth + +8.536047579435623 +47.35038776134024 +428.92915900641884 +-204.24523337973503 +80.7890048964708 +0 +120 +absolute + + + +0.01 +smooth + +8.536046297512705 +47.350387258367114 +428.9291777886658 +-204.2491748990666 +80.82648141987049 +0 +120 +absolute + + + +0.01 +smooth + +8.536045021825197 +47.350386756033245 +428.9291965055657 +-204.25300946101765 +80.86392162255807 +0 +120 +absolute + + + +0.01 +smooth + +8.536043752516813 +47.35038625441911 +428.9292151502835 +-204.2567293704624 +80.90131985679331 +0 +120 +absolute + + + +0.01 +smooth + +8.536042489731257 +47.35038575360515 +428.9292337159842 +-204.26032693227478 +80.93867047483583 +0 +120 +absolute + + + +0.01 +smooth + +8.53604123361223 +47.350385253671824 +428.929252195833 +-204.2637944513287 +80.97596782894536 +0 +120 +absolute + + + +0.01 +smooth + +8.536039984303445 +47.35038475469962 +428.92927058299483 +-204.2671242324983 +81.01320627138158 +0 +120 +absolute + + + +0.01 +smooth + +8.536038741948605 +47.350384256769 +428.9292888706353 +-204.27030858065774 +81.05038015440427 +0 +120 +absolute + + + +0.01 +smooth + +8.536037506691418 +47.35038375996041 +428.92930705191907 +-204.27333980068093 +81.08748383027302 +0 +120 +absolute + + + +0.01 +smooth + +8.53603627867559 +47.350383264354335 +428.9293251200114 +-204.27621019744186 +81.12451165124759 +0 +120 +absolute + + + +0.01 +smooth + +8.536035058044826 +47.35038277003123 +428.92934306807746 +-204.27891207581465 +81.1614579695877 +0 +120 +absolute + + + +0.01 +smooth + +8.536033844942835 +47.35038227707156 +428.9293608892823 +-204.28143774067325 +81.198317137553 +0 +120 +absolute + + + +0.01 +smooth + +8.536032639513323 +47.35038178555578 +428.92937857679107 +-204.2837794968918 +81.23508350740323 +0 +120 +absolute + + + +0.01 +smooth + +8.536031441899995 +47.350381295564375 +428.9293961237689 +-204.28592964934424 +81.27175143139809 +0 +120 +absolute + + + +0.01 +smooth + +8.536030252246558 +47.350380807177785 +428.92941352338084 +-204.28788050290467 +81.30831526179725 +0 +120 +absolute + + + +0.01 +smooth + +8.536029070696717 +47.35038032047649 +428.92943076879214 +-204.28962436244706 +81.34476935086042 +0 +120 +absolute + + + +0.01 +smooth + +8.536027897394181 +47.35037983554096 +428.92944785316774 +-204.29115353284547 +81.38110805084733 +0 +120 +absolute + + + +0.01 +smooth + +8.536026732482657 +47.35037935245164 +428.9294647696729 +-204.29246031897395 +81.41732571401765 +0 +120 +absolute + + + +0.01 +smooth + +8.53602557610585 +47.35037887128901 +428.92948151147266 +-204.29353702570648 +81.4534166926311 +0 +120 +absolute + + + +0.01 +smooth + +8.536024428407465 +47.350378392133535 +428.92949807173216 +-204.29437595791717 +81.48937533894737 +0 +120 +absolute + + + +0.01 +smooth + +8.53602328953121 +47.35037791506566 +428.92951444361654 +-204.29496942048002 +81.52519600522615 +0 +120 +absolute + + + +0.01 +smooth + +8.53602215962079 +47.35037744016588 +428.9295306202909 +-204.29530971826907 +81.56087304372714 +0 +120 +absolute + + + +0.01 +smooth + +8.536021038739948 +47.35037696748162 +428.92954659777115 +-204.29538436517728 +81.59640315785344 +0 +120 +absolute + + + +0.01 +smooth + +8.536019924395044 +47.35037649600548 +428.92956246362706 +-204.29503469461082 +81.63185813082869 +0 +120 +absolute + + + +0.01 +smooth + +8.536018815456 +47.35037602529329 +428.9295782578528 +-204.29420289856176 +81.6672693496826 +0 +120 +absolute + + + +0.01 +smooth + +8.53601771207288 +47.350375555429245 +428.92959397497503 +-204.29291099401001 +81.70263051347648 +0 +120 +absolute + + + +0.01 +smooth + +8.53601661439574 +47.35037508649754 +428.92960960951956 +-204.29118099793502 +81.73793532127146 +0 +120 +absolute + + + +0.01 +smooth + +8.536015522574639 +47.350374618582364 +428.9296251560127 +-204.28903492731655 +81.77317747212889 +0 +120 +absolute + + + +0.01 +smooth + +8.53601443675963 +47.350374151767866 +428.92964060898055 +-204.2864947991342 +81.80835066510986 +0 +120 +absolute + + + +0.01 +smooth + +8.536013357100776 +47.350373686138276 +428.9296559629494 +-204.28358263036765 +81.84344859927566 +0 +120 +absolute + + + +0.01 +smooth + +8.53601228374814 +47.350373221777765 +428.92967121244544 +-204.28032043799666 +81.87846497368751 +0 +120 +absolute + + + +0.01 +smooth + +8.536011216851776 +47.35037275877052 +428.92968635199503 +-204.27673023900084 +81.91339348740662 +0 +120 +absolute + + + +0.01 +smooth + +8.536010156561733 +47.3503722972007 +428.9297013761238 +-204.27283405035973 +81.9482278394942 +0 +120 +absolute + + + +0.01 +smooth + +8.53600910302808 +47.35037183715251 +428.9297162793583 +-204.26865388905313 +81.98296172901148 +0 +120 +absolute + + + +0.01 +smooth + +8.536008056400876 +47.35037137871015 +428.9297310562249 +-204.26421177206072 +82.0175888550197 +0 +120 +absolute + + + +0.01 +smooth + +8.536007016830176 +47.35037092195778 +428.9297457012495 +-204.25952971636212 +82.05210291658007 +0 +120 +absolute + + + +0.01 +smooth + +8.536005984466033 +47.3503704669796 +428.9297602089582 +-204.25462973893693 +82.08649761275376 +0 +120 +absolute + + + +0.01 +smooth + +8.536004959458515 +47.35037001385979 +428.9297745738774 +-204.2495338567649 +82.12076664260206 +0 +120 +absolute + + + +0.01 +smooth + +8.536003941957674 +47.35036956268254 +428.9297887905334 +-204.24426408682567 +82.15490370518617 +0 +120 +absolute + + + +0.01 +smooth + +8.53600293211357 +47.35036911353202 +428.92980285345203 +-204.2388424460989 +82.1889024995673 +0 +120 +absolute + + + +0.01 +smooth + +8.53600193007626 +47.35036866649243 +428.9298167571597 +-204.23329095156421 +82.22275672480669 +0 +120 +absolute + + + +0.01 +smooth + +8.536000935995803 +47.35036822164796 +428.9298304961826 +-204.22763162020135 +82.25646007996555 +0 +120 +absolute + + + +0.01 +smooth + +8.535999950022259 +47.35036777908278 +428.92984406504684 +-204.2218864689899 +82.29000626410507 +0 +120 +absolute + + + +0.01 +smooth + +8.535998972305682 +47.350367338881085 +428.9298574582786 +-204.2160775149096 +82.32338897628654 +0 +120 +absolute + + + +0.01 +smooth + +8.535998002996134 +47.35036690112705 +428.92987067040406 +-204.2102267749401 +82.35660191557112 +0 +120 +absolute + + + +0.01 +smooth + +8.535997042243672 +47.35036646590487 +428.92988369594957 +-204.20435626606104 +82.38963878102005 +0 +120 +absolute + + + +0.01 +smooth + +8.535996090198353 +47.35036603329874 +428.929896529441 +-204.198488005252 +82.42249327169458 +0 +120 +absolute + + + +0.01 +smooth + +8.535995147010237 +47.35036560339282 +428.9299091654048 +-204.1926440094928 +82.4551590866559 +0 +120 +absolute + + + +0.01 +smooth + +8.535994212829383 +47.350365176271296 +428.92992159836706 +-204.18684629576302 +82.48762992496522 +0 +120 +absolute + + + +0.01 +smooth + +8.535993287805846 +47.35036475201839 +428.92993382285397 +-204.1811168810423 +82.51989948568378 +0 +120 +absolute + + + +0.01 +smooth + +8.535992371425946 +47.35036433043355 +428.92994585434377 +-204.17540874447238 +82.55198260151246 +0 +120 +absolute + + + +0.01 +smooth + +8.535991460562492 +47.35036391019616 +428.9299577912754 +-204.16940034292708 +82.58397715581921 +0 +120 +absolute + + + +0.01 +smooth + +8.535990554928645 +47.350363491205144 +428.92996964308054 +-204.1630617713516 +82.61589036446935 +0 +120 +absolute + + + +0.01 +smooth + +8.53598965468213 +47.35036307355011 +428.92998140519563 +-204.15640914077733 +82.64771527399267 +0 +120 +absolute + + + +0.01 +smooth + +8.53598875998068 +47.350362657320794 +428.92999307305746 +-204.14945856223585 +82.67944493091916 +0 +120 +absolute + + + +0.01 +smooth + +8.53598787098203 +47.35036224260679 +428.93000464210246 +-204.14222614675865 +82.7110723817786 +0 +120 +absolute + + + +0.01 +smooth + +8.535986987843907 +47.3503618294978 +428.93001610776696 +-204.13472800537713 +82.74259067310089 +0 +120 +absolute + + + +0.01 +smooth + +8.535986110724046 +47.35036141808349 +428.9300274654877 +-204.12698024912282 +82.77399285141593 +0 +120 +absolute + + + +0.01 +smooth + +8.535985239780178 +47.350361008453504 +428.93003871070147 +-204.11899898902735 +82.80527196325356 +0 +120 +absolute + + + +0.01 +smooth + +8.535984375170042 +47.35036060069752 +428.93004983884464 +-204.11080033612214 +82.83642105514369 +0 +120 +absolute + + + +0.01 +smooth + +8.535983517051354 +47.350360194905186 +428.9300608453536 +-204.1024004014386 +82.86743317361612 +0 +120 +absolute + + + +0.01 +smooth + +8.535982665581862 +47.35035979116618 +428.93007172566524 +-204.09381529600842 +82.89830136520082 +0 +120 +absolute + + + +0.01 +smooth + +8.535981820919295 +47.35035938957019 +428.9300824752161 +-204.08506113086304 +82.92901867642766 +0 +120 +absolute + + + +0.01 +smooth + +8.535980983221375 +47.35035899020682 +428.9300930894425 +-204.07615401703382 +82.95957815382643 +0 +120 +absolute + + + +0.01 +smooth + +8.535980152645847 +47.35035859316578 +428.93010356378113 +-204.06711006555244 +82.98997284392703 +0 +120 +absolute + + + +0.01 +smooth + +8.535979329350432 +47.350358198536725 +428.9301138936686 +-204.05794538745027 +83.02019579325938 +0 +120 +absolute + + + +0.01 +smooth + +8.535978513492871 +47.350357806409306 +428.9301240745415 +-204.0486760937589 +83.05024004835332 +0 +120 +absolute + + + +0.01 +smooth + +8.535977705230893 +47.350357416873194 +428.9301341018362 +-204.03931829550982 +83.08009865573875 +0 +120 +absolute + + + +0.01 +smooth + +8.53597690472223 +47.35035703001806 +428.93014397098955 +-204.0298881037345 +83.1097646619455 +0 +120 +absolute + + + +0.01 +smooth + +8.535976112124612 +47.350356645933566 +428.93015367743783 +-204.02040162946446 +83.13923111350347 +0 +120 +absolute + + + +0.01 +smooth + +8.535975327595771 +47.35035626470936 +428.93016321661776 +-204.01087498373118 +83.16849105694254 +0 +120 +absolute + + + +0.01 +smooth + +8.535974551293442 +47.35035588643513 +428.93017258396594 +-204.00132427756623 +83.19753753879257 +0 +120 +absolute + + + +0.01 +smooth + +8.535973783375358 +47.35035551120052 +428.9301817749189 +-203.99176562200103 +83.22636360558344 +0 +120 +absolute + + + +0.01 +smooth + +8.535973023999246 +47.3503551390952 +428.9301907849132 +-203.9822151280671 +83.25496230384502 +0 +120 +absolute + + + +0.01 +smooth + +8.535972273322841 +47.350354770208845 +428.9301996093853 +-203.972688906796 +83.2833266801072 +0 +120 +absolute + + + +0.01 +smooth + +8.535971531503876 +47.3503544046311 +428.930208243772 +-203.96320306921916 +83.31144978089982 +0 +120 +absolute + + + +0.01 +smooth + +8.535970798700081 +47.35035404245164 +428.9302166835095 +-203.95377372636818 +83.3393246527528 +0 +120 +absolute + + + +0.01 +smooth + +8.53597007506919 +47.35035368376013 +428.9302249240348 +-203.94441698927437 +83.36694434219596 +0 +120 +absolute + + + +0.01 +smooth + +8.535969358815018 +47.350353327755116 +428.93023301579274 +-203.9350490502593 +83.39436962009094 +0 +120 +absolute + + + +0.01 +smooth + +8.535968647254082 +47.35035297323218 +428.9302410347605 +-203.92553624801698 +83.42169179443758 +0 +120 +absolute + + + +0.01 +smooth + +8.53596794052864 +47.3503526202768 +428.930248977725 +-203.91588647154796 +83.44890408636788 +0 +120 +absolute + + + +0.01 +smooth + +8.535967238805098 +47.350352268985496 +428.9302568407954 +-203.9061088317502 +83.47599887980655 +0 +120 +absolute + + + +0.01 +smooth + +8.535966542249863 +47.35035191945474 +428.9302646200804 +-203.8962124395216 +83.50296855867832 +0 +120 +absolute + + + +0.01 +smooth + +8.53596585102933 +47.350351571781 +428.9302723116889 +-203.88620640575994 +83.52980550690783 +0 +120 +absolute + + + +0.01 +smooth + +8.535965165309909 +47.350351226060766 +428.9302799117297 +-203.87609984136316 +83.55650210841983 +0 +120 +absolute + + + +0.01 +smooth + +8.535964485258008 +47.350350882390565 +428.9302874163123 +-203.86590185722923 +83.5830507471391 +0 +120 +absolute + + + +0.01 +smooth + +8.535963811040023 +47.35035054086687 +428.93029482154526 +-203.85562156425607 +83.60944380699027 +0 +120 +absolute + + + +0.01 +smooth + +8.535963142822357 +47.35035020158613 +428.93030212353733 +-203.84526807334143 +83.63567367189806 +0 +120 +absolute + + + +0.01 +smooth + +8.535962480771419 +47.350349864644876 +428.9303093183977 +-203.83485049538325 +83.66173272578722 +0 +120 +absolute + + + +0.01 +smooth + +8.535961825053612 +47.350349530139596 +428.9303164022354 +-203.82437794127952 +83.68761335258246 +0 +120 +absolute + + + +0.01 +smooth + +8.535961175835338 +47.350349198166775 +428.93032337115926 +-203.81385952192812 +83.7133079362085 +0 +120 +absolute + + + +0.01 +smooth + +8.535960533282998 +47.35034886882288 +428.93033022127804 +-203.80330434822682 +83.73880886059 +0 +120 +absolute + + + +0.01 +smooth + +8.535959897562996 +47.35034854220441 +428.93033694870087 +-203.79272153107365 +83.76410850965172 +0 +120 +absolute + + + +0.01 +smooth + +8.53595926884174 +47.35034821840786 +428.93034354953664 +-203.78212018136645 +83.78919926731841 +0 +120 +absolute + + + +0.01 +smooth + +8.535958647285634 +47.35034789752973 +428.9303500198944 +-203.77150941000312 +83.81407351751469 +0 +120 +absolute + + + +0.01 +smooth + +8.535958033061075 +47.35034757966648 +428.9303563558828 +-203.76089832788162 +83.83872364416537 +0 +120 +absolute + + + +0.01 +smooth + +8.535957426334472 +47.35034726491463 +428.930362553611 +-203.7502960458998 +83.8631420311951 +0 +120 +absolute + + + +0.01 +smooth + +8.535956827272226 +47.35034695337065 +428.930368609188 +-203.73971167495552 +83.88732106252861 +0 +120 +absolute + + + +0.01 +smooth + +8.535956236040741 +47.35034664513102 +428.9303745187225 +-203.72915432594672 +83.91125312209063 +0 +120 +absolute + + + +0.01 +smooth + +8.535955652806422 +47.35034634029225 +428.93038027832364 +-203.7186331097713 +83.93493059380586 +0 +120 +absolute + + + +0.01 +smooth + +8.535955077735672 +47.35034603895082 +428.93038588410025 +-203.70815713732713 +83.958345861599 +0 +120 +absolute + + + +0.01 +smooth + +8.535954510994895 +47.3503457412032 +428.9303913321613 +-203.69773551951215 +83.98149130939481 +0 +120 +absolute + + + +0.01 +smooth + +8.535953952750493 +47.35034544714591 +428.9303966186157 +-203.6873773672242 +84.00435932111796 +0 +120 +absolute + + + +0.01 +smooth + +8.535953403168868 +47.35034515687542 +428.9304017395724 +-203.67709179136122 +84.02694228069319 +0 +120 +absolute + + + +0.01 +smooth + +8.53595286241643 +47.35034487048823 +428.93040669114043 +-203.6668879028211 +84.0492325720452 +0 +120 +absolute + + + +0.01 +smooth + +8.535952330493886 +47.35034458799962 +428.9304114734962 +-203.65677010277835 +84.07122884799155 +0 +120 +absolute + + + +0.01 +smooth + +8.535951803924764 +47.35034430772128 +428.93041617237003 +-203.6466433827997 +84.09306123287048 +0 +120 +absolute + + + +0.01 +smooth + +8.535951281392382 +47.35034402902577 +428.9304208209528 +-203.63647270742626 +84.1147779208472 +0 +120 +absolute + + + +0.01 +smooth + +8.535950763072115 +47.35034375201731 +428.93042541587596 +-203.62626524676048 +84.13637062296918 +0 +120 +absolute + + + +0.01 +smooth + +8.535950249139335 +47.35034347680008 +428.9304299537713 +-203.61602817090454 +84.15783105028395 +0 +120 +absolute + + + +0.01 +smooth + +8.535949739769423 +47.35034320347825 +428.9304344312703 +-203.6057686499608 +84.17915091383898 +0 +120 +absolute + + + +0.01 +smooth + +8.535949235137755 +47.35034293215605 +428.93043884500463 +-203.59549385403153 +84.2003219246818 +0 +120 +absolute + + + +0.01 +smooth + +8.535948735419707 +47.35034266293772 +428.9304431916063 +-203.58521095321922 +84.22133579385992 +0 +120 +absolute + + + +0.01 +smooth + +8.53594824079066 +47.3503423959274 +428.9304474677067 +-203.5749271176261 +84.24218423242087 +0 +120 +absolute + + + +0.01 +smooth + +8.535947751425983 +47.35034213122929 +428.9304516699373 +-203.56464951735447 +84.2628589514121 +0 +120 +absolute + + + +0.01 +smooth + +8.535947267501054 +47.35034186894762 +428.93045579493025 +-203.55438532250668 +84.28335166188118 +0 +120 +absolute + + + +0.01 +smooth + +8.535946789191259 +47.35034160918659 +428.93045983931694 +-203.54414170318515 +84.30365407487561 +0 +120 +absolute + + + +0.01 +smooth + +8.535946316671964 +47.35034135205041 +428.93046379972924 +-203.53392582949212 +84.32375790144289 +0 +120 +absolute + + + +0.01 +smooth + +8.535945850118548 +47.35034109764322 +428.93046767279844 +-203.52374487152994 +84.34365485263051 +0 +120 +absolute + + + +0.01 +smooth + +8.53594538970639 +47.35034084606927 +428.9304714551566 +-203.51360599940094 +84.363336639486 +0 +120 +absolute + + + +0.01 +smooth + +8.535944935610866 +47.35034059743277 +428.9304751434352 +-203.50351638320745 +84.38279497305685 +0 +120 +absolute + + + +0.01 +smooth + +8.535944488007353 +47.35034035183789 +428.930478734266 +-203.49348319305182 +84.40202156439058 +0 +120 +absolute + + + +0.01 +smooth + +8.535944047071226 +47.350340109388846 +428.93048222428064 +-203.48351359903634 +84.42100812453472 +0 +120 +absolute + + + +0.01 +smooth + +8.535943612977862 +47.35033987018984 +428.93048561011074 +-203.47361477126336 +84.43974636453675 +0 +120 +absolute + + + +0.01 +smooth + +8.535943185902639 +47.350339634345055 +428.930488888388 +-203.4637938798352 +84.45822799544422 +0 +120 +absolute + + + +0.01 +smooth + +8.53594276602093 +47.35033940195871 +428.93049205574425 +-203.45405809485425 +84.47644472830457 +0 +120 +absolute + + + +0.01 +smooth + +8.53594235350812 +47.350339173135 +428.930495108811 +-203.4444145864228 +84.49438827416537 +0 +120 +absolute + + + +0.01 +smooth + +8.535941948539577 +47.350338947978116 +428.9304980442199 +-203.43487052464315 +84.51205034407411 +0 +120 +absolute + + + +0.01 +smooth + +8.535941551290682 +47.35033872659227 +428.93050085860267 +-203.42543307961762 +84.5294226490783 +0 +120 +absolute + + + +0.01 +smooth + +8.53594116193681 +47.350338509081666 +428.93050354859105 +-203.41610942144862 +84.54649690022543 +0 +120 +absolute + + + +0.01 +smooth + +8.535940780653338 +47.35033829555049 +428.9305061108166 +-203.4069067202384 +84.56326480856303 +0 +120 +absolute + + + +0.01 +smooth + +8.535940407615643 +47.35033808610296 +428.9305085419111 +-203.3978321460894 +84.57971808513862 +0 +120 +absolute + + + +0.01 +smooth + +8.535940042999101 +47.350337880843256 +428.93051083850605 +-203.38889286910387 +84.5958484409997 +0 +120 +absolute + + + +0.01 +smooth + +8.535939685936466 +47.350337679325214 +428.9305130191778 +-203.3800700781281 +84.61169056360933 +0 +120 +absolute + + + +0.01 +smooth + +8.53593933232005 +47.35033747939372 +428.93051517090834 +-203.37126396052932 +84.62741257228718 +0 +120 +absolute + + + +0.01 +smooth + +8.53593898186928 +47.350337280915824 +428.93051730038763 +-203.36246974930617 +84.64302465696065 +0 +120 +absolute + + + +0.01 +smooth + +8.53593863476719 +47.350337084003364 +428.9305194045613 +-203.35369421400105 +84.65851788989374 +0 +120 +absolute + + + +0.01 +smooth + +8.535938291196807 +47.35033688876821 +428.9305214803748 +-203.3449441241561 +84.67388334335055 +0 +120 +absolute + + + +0.01 +smooth + +8.535937951341161 +47.35033669532223 +428.9305235247737 +-203.33622624931365 +84.68911208959517 +0 +120 +absolute + + + +0.01 +smooth + +8.535937615383279 +47.35033650377731 +428.93052553470363 +-203.32754735901594 +84.7041952008916 +0 +120 +absolute + + + +0.01 +smooth + +8.53593728350619 +47.35033631424526 +428.93052750710973 +-203.31891422280512 +84.71912374950391 +0 +120 +absolute + + + +0.01 +smooth + +8.535936955892918 +47.35033612683796 +428.93052943893764 +-203.31033361022338 +84.73388880769609 +0 +120 +absolute + + + +0.01 +smooth + +8.535936632726496 +47.35033594166727 +428.9305313271329 +-203.30181229081305 +84.74848144773227 +0 +120 +absolute + + + +0.01 +smooth + +8.535936314189954 +47.35033575884508 +428.93053316864103 +-203.29335703411635 +84.76289274187651 +0 +120 +absolute + + + +0.01 +smooth + +8.535936000466318 +47.35033557848321 +428.9305349604075 +-203.28497460967546 +84.77711376239282 +0 +120 +absolute + + + +0.01 +smooth + +8.535935691738615 +47.350335400693545 +428.9305366993777 +-203.27667178703263 +84.79113558154523 +0 +120 +absolute + + + +0.01 +smooth + +8.535935388189872 +47.350335225587926 +428.9305383824972 +-203.26845533573007 +84.80494927159785 +0 +120 +absolute + + + +0.01 +smooth + +8.535935090003122 +47.350335053278236 +428.93054000671145 +-203.26033202531008 +84.81854590481471 +0 +120 +absolute + + + +0.01 +smooth + +8.53593479736139 +47.35033488387633 +428.9305415689661 +-203.25230862531487 +84.83191655345988 +0 +120 +absolute + + + +0.01 +smooth + +8.535934510447706 +47.35033471749406 +428.93054306620644 +-203.2443919052866 +84.84505228979737 +0 +120 +absolute + + + +0.01 +smooth + +8.535934229445099 +47.35033455424328 +428.93054449537806 +-203.23658863476757 +84.85794418609125 +0 +120 +absolute + + + +0.01 +smooth + +8.535933954536596 +47.35033439423588 +428.9305458534264 +-203.22890558329996 +84.87058331460558 +0 +120 +absolute + + + +0.01 +smooth + +8.535933685905222 +47.350334237583695 +428.930547137297 +-203.22134952042603 +84.88296074760441 +0 +120 +absolute + + + +0.01 +smooth + +8.535933423734011 +47.3503340843986 +428.93054834393536 +-203.21392721568805 +84.8950675573518 +0 +120 +absolute + + + +0.01 +smooth + +8.53593316820599 +47.350333934792445 +428.93054947028696 +-203.2066454386282 +84.90689481611179 +0 +120 +absolute + + + +0.01 +smooth + +8.535932919504184 +47.35033378887711 +428.93055051329725 +-203.1995109587887 +84.91843359614843 +0 +120 +absolute + + + +0.01 +smooth + +8.535932677811626 +47.350333646764426 +428.93055146991185 +-203.1925305457118 +84.9296749697258 +0 +120 +absolute + + + +0.01 +smooth + +8.53593244331134 +47.35033350856627 +428.930552337076 +-203.18571096893976 +84.94061000910791 +0 +120 +absolute + + + +0.01 +smooth + +8.535932216186358 +47.35033337439451 +428.9305531117355 +-203.17905899801474 +84.95122978655883 +0 +120 +absolute + + + +0.01 +smooth + +8.535931996619706 +47.35033324436101 +428.9305537908355 +-203.172581402479 +84.96152537434263 +0 +120 +absolute + + + +0.01 +smooth + +8.535931784794416 +47.35033311857761 +428.9305543713218 +-203.1662849518748 +84.97148784472334 +0 +120 +absolute + + + +0.01 +smooth + +8.535931578086316 +47.35033299556427 +428.9305548931017 +-203.16009919407875 +84.98123377739196 +0 +120 +absolute + + + +0.01 +smooth + +8.535931373273174 +47.35033287350417 +428.93055540664716 +-203.15393728194599 +84.99090629098104 +0 +120 +absolute + + + +0.01 +smooth + +8.53593117053129 +47.35033275250903 +428.9305559112313 +-203.14780589110748 +85.00049644053803 +0 +120 +absolute + + + +0.01 +smooth + +8.535930970044763 +47.35033263269507 +428.9305564060099 +-203.14171191115514 +85.0099949332923 +0 +120 +absolute + + + +0.01 +smooth + +8.53593077199768 +47.35033251417844 +428.9305568901383 +-203.13566223168056 +85.01939247647324 +0 +120 +absolute + + + +0.01 +smooth + +8.535930576574144 +47.35033239707536 +428.93055736277205 +-203.12966374227548 +85.02867977731024 +0 +120 +absolute + + + +0.01 +smooth + +8.535930383958233 +47.350332281501956 +428.9305578230664 +-203.1237233325316 +85.03784754303263 +0 +120 +absolute + + + +0.01 +smooth + +8.535930194334046 +47.350332167574464 +428.930558270177 +-203.11784789204066 +85.04688648086984 +0 +120 +absolute + + + +0.01 +smooth + +8.535930007885678 +47.35033205540904 +428.93055870325946 +-203.11204431039434 +85.05578729805127 +0 +120 +absolute + + + +0.01 +smooth + +8.535929824797215 +47.35033194512185 +428.9305591214688 +-203.10631947718434 +85.06454070180621 +0 +120 +absolute + + + +0.01 +smooth + +8.535929645252754 +47.35033183682909 +428.9305595239607 +-203.10068028200237 +85.07313739936411 +0 +120 +absolute + + + +0.01 +smooth + +8.535929469436386 +47.35033173064696 +428.9305599098908 +-203.09513361444027 +85.08156809795435 +0 +120 +absolute + + + +0.01 +smooth + +8.535929297532203 +47.35033162669161 +428.9305602784143 +-203.08968636408954 +85.08982350480626 +0 +120 +absolute + + + +0.01 +smooth + +8.535929129724295 +47.35033152507924 +428.93056062868686 +-203.084345420542 +85.09789432714926 +0 +120 +absolute + + + +0.01 +smooth + +8.535928966196755 +47.35033142592602 +428.9305609598637 +-203.07911767338936 +85.10577127221273 +0 +120 +absolute + + + +0.01 +smooth + +8.535928807133676 +47.35033132934814 +428.9305612711005 +-203.0740100122233 +85.11344504722602 +0 +120 +absolute + + + +0.01 +smooth + +8.53592865271915 +47.350331235461766 +428.9305615615526 +-203.06902932663553 +85.12090635941853 +0 +120 +absolute + + + +0.01 +smooth + +8.535928503137269 +47.350331144383084 +428.9305618303755 +-203.0641825062178 +85.12814591601963 +0 +120 +absolute + + + +0.01 +smooth + +8.535928358572125 +47.35033105622829 +428.93056207672464 +-203.05947644056175 +85.1351544242587 +0 +120 +absolute + + + +0.01 +smooth + +8.535928219207811 +47.35033097111355 +428.9305622997556 +-203.05491801925913 +85.14192259136513 +0 +120 +absolute + + + +0.01 +smooth + +8.535928085228417 +47.35033088915505 +428.93056249862354 +-203.05051413190165 +85.14844112456828 +0 +120 +absolute + + + +0.01 +smooth + +8.535927956818037 +47.350330810468975 +428.93056267248426 +-203.04627166808103 +85.15470073109753 +0 +120 +absolute + + + +0.01 +smooth + +8.535927834160763 +47.35033073517148 +428.930562820493 +-203.04219751738896 +85.1606921181823 +0 +120 +absolute + + + +0.01 +smooth + +8.535927717440686 +47.350330663378784 +428.9305629418052 +-203.0382985694171 +85.16640599305191 +0 +120 +absolute + + + +0.01 +smooth + +8.535927606841897 +47.350330595207055 +428.9305630355766 +-203.03458171375723 +85.17183306293578 +0 +120 +absolute + + + +0.01 +smooth + +8.53592750254849 +47.35033053077245 +428.93056310096233 +-203.03105384000105 +85.17696403506326 +0 +120 +absolute + + + +0.01 +smooth + +8.535927404744559 +47.350330470191174 +428.93056313711804 +-203.02772183774024 +85.18178961666375 +0 +120 +absolute + + + +0.01 +smooth + +8.535927313335572 +47.350330413410965 +428.93056314353254 +-203.0245836254047 +85.18631389843729 +0 +120 +absolute + + + +0.01 +smooth + +8.535927224099623 +47.35033035788509 +428.930563125246 +-203.02150427549986 +85.19073917696119 +0 +120 +absolute + + + +0.01 +smooth + +8.535927135671345 +47.35033030279506 +428.9305630852592 +-203.01844094751806 +85.19513042020334 +0 +120 +absolute + + + +0.01 +smooth + +8.535927048199436 +47.35033024823779 +428.9305630249386 +-203.01539956505414 +85.19947985464114 +0 +120 +absolute + + + +0.01 +smooth + +8.535926961832587 +47.35033019431027 +428.9305629456498 +-203.01238605170278 +85.20377970675183 +0 +120 +absolute + + + +0.01 +smooth + +8.535926876719476 +47.35033014110942 +428.9305628487587 +-203.00940633105859 +85.20802220301266 +0 +120 +absolute + + + +0.01 +smooth + +8.535926793008798 +47.35033008873221 +428.9305627356316 +-203.0064663267165 +85.212199569901 +0 +120 +absolute + + + +0.01 +smooth + +8.535926710849242 +47.35033003727557 +428.9305626076342 +-203.00357196227105 +85.21630403389408 +0 +120 +absolute + + + +0.01 +smooth + +8.535926630389497 +47.35032998683647 +428.93056246613276 +-203.00072916131708 +85.22032782146921 +0 +120 +absolute + + + +0.01 +smooth + +8.535926551778253 +47.350329937511866 +428.9305623124931 +-202.99794384744933 +85.22426315910371 +0 +120 +absolute + + + +0.01 +smooth + +8.535926475164194 +47.35032988939869 +428.930562148081 +-202.99522194426245 +85.2281022732748 +0 +120 +absolute + + + +0.01 +smooth + +8.535926400696011 +47.35032984259388 +428.9305619742627 +-202.99256937535114 +85.23183739045979 +0 +120 +absolute + + + +0.01 +smooth + +8.535926328522393 +47.35032979719443 +428.93056179240403 +-202.9899920643103 +85.23546073713602 +0 +120 +absolute + + + +0.01 +smooth + +8.535926258792035 +47.350329753297274 +428.9305616038713 +-202.98749593473445 +85.23896453978077 +0 +120 +absolute + + + +0.01 +smooth + +8.535926191653617 +47.35032971099935 +428.93056141002984 +-202.98508691021846 +85.24234102487128 +0 +120 +absolute + + + +0.01 +smooth + +8.535926127255832 +47.350329670397606 +428.93056121224623 +-202.98277091435696 +85.24558241888488 +0 +120 +absolute + + + +0.01 +smooth + +8.535926065747368 +47.35032963158901 +428.93056101188614 +-202.9805538707447 +85.24868094829883 +0 +120 +absolute + + + +0.01 +smooth + +8.535926007276915 +47.350329594670505 +428.9305608103157 +-202.9784417029764 +85.25162883959044 +0 +120 +absolute + + + +0.01 +smooth + +8.535925951993162 +47.35032955973905 +428.9305606089007 +-202.97644033464687 +85.25441831923699 +0 +120 +absolute + + + +0.01 +smooth + +8.535925900044795 +47.350329526891585 +428.93056040900717 +-202.9745556893507 +85.25704161371577 +0 +120 +absolute + + + +0.01 +smooth + +8.535925851580506 +47.35032949622506 +428.9305602120013 +-202.97279369068272 +85.25949094950411 +0 +120 +absolute + + + +0.01 +smooth + +8.535925806748983 +47.35032946783643 +428.9305600192487 +-202.97116026223762 +85.26175855307925 +0 +120 +absolute + + + +0.01 +smooth + +8.535925765698913 +47.35032944182265 +428.9305598321156 +-202.9696613276101 +85.26383665091848 +0 +120 +absolute + + + +0.01 +smooth + +8.53592572857899 +47.35032941828066 +428.930559651968 +-202.9683028103949 +85.2657174694991 +0 +120 +absolute + + + +0.01 +smooth + +8.535925695537896 +47.350329397307426 +428.9305594801717 +-202.96709063418672 +85.26739323529841 +0 +120 +absolute + + + +0.01 +smooth + +8.535925666724324 +47.350329378999874 +428.9305593180928 +-202.96603072258037 +85.2688561747937 +0 +120 +absolute + + + +0.01 +smooth + +8.535925642286964 +47.35032936345499 +428.93055916709716 +-202.96512899917053 +85.27009851446226 +0 +120 +absolute + + + +0.01 +smooth + +8.535925622374503 +47.3503293507697 +428.9305590285509 +-202.96439138755187 +85.27111248078135 +0 +120 +absolute + + + +0.01 +smooth + +8.535925606199614 +47.350329340448255 +428.9305589009529 +-202.96378964885002 +85.27193764679483 +0 +120 +absolute + + + +0.01 +smooth + +8.5359255906284 +47.35032933050792 +428.93055877518697 +-202.9632096971928 +85.27273238372193 +0 +120 +absolute + + + +0.01 +smooth + +8.53592557541052 +47.35032932079048 +428.9305586504744 +-202.9626424535766 +85.27350932364605 +0 +120 +absolute + + + +0.01 +smooth + +8.535925560564346 +47.35032931130792 +428.93055852684 +-202.9620886378491 +85.27426751013006 +0 +120 +absolute + + + +0.01 +smooth + +8.535925546108253 +47.35032930207216 +428.93055840430924 +-202.9615489698582 +85.27500598673686 +0 +120 +absolute + + + +0.01 +smooth + +8.535925532060611 +47.35032929309511 +428.93055828290653 +-202.96102416945152 +85.27572379702919 +0 +120 +absolute + + + +0.01 +smooth + +8.535925518439807 +47.35032928438874 +428.93055816265735 +-202.96051495647694 +85.27641998457004 +0 +120 +absolute + + + +0.01 +smooth + +8.535925505264212 +47.35032927596497 +428.9305580435864 +-202.9600220507821 +85.27709359292218 +0 +120 +absolute + + + +0.01 +smooth + +8.5359254925522 +47.35032926783577 +428.93055792571903 +-202.95954617221497 +85.27774366564854 +0 +120 +absolute + + + +0.01 +smooth + +8.53592548032215 +47.35032926001305 +428.93055780908 +-202.9590880406232 +85.27836924631191 +0 +120 +absolute + + + +0.01 +smooth + +8.535925468592435 +47.35032925250874 +428.93055769369425 +-202.95864837585447 +85.27896937847514 +0 +120 +absolute + + + +0.01 +smooth + +8.53592545738143 +47.350329245334784 +428.9305575795869 +-202.9582278977567 +85.27954310570111 +0 +120 +absolute + + + +0.01 +smooth + +8.535925446707516 +47.35032923850313 +428.93055746678306 +-202.95782732617758 +85.28008947155267 +0 +120 +absolute + + + +0.01 +smooth + +8.535925436589066 +47.35032923202573 +428.9305573553078 +-202.95744738096494 +85.28060751959272 +0 +120 +absolute + + + +0.01 +smooth + +8.535925427044456 +47.35032922591449 +428.9305572451859 +-202.9570887819665 +85.28109629338405 +0 +120 +absolute + + + +0.01 +smooth + +8.53592541809206 +47.350329220181365 +428.9305571364425 +-202.95675224902996 +85.28155483648955 +0 +120 +absolute + + + +0.01 +smooth + +8.535925409750257 +47.350329214838276 +428.9305570291025 +-202.95643850200327 +85.28198219247206 +0 +120 +absolute + + + +0.01 +smooth + +8.535925402037421 +47.35032920989718 +428.9305569231911 +-202.95614826073398 +85.28237740489445 +0 +120 +absolute + + + +0.01 +smooth + +8.535925394971928 +47.35032920537001 +428.93055681873307 +-202.95588224507003 +85.28273951731956 +0 +120 +absolute + + + +0.01 +smooth + +8.535925388572153 +47.35032920126871 +428.9305567157537 +-202.95564117485912 +85.28306757331025 +0 +120 +absolute + + + +0.01 +smooth + +8.535925382856474 +47.35032919760519 +428.9305566142778 +-202.95542576994904 +85.28336061642938 +0 +120 +absolute + + + +0.01 +smooth + +8.535925377843267 +47.35032919439142 +428.9305565143305 +-202.95523675018757 +85.28361769023982 +0 +120 +absolute + + + +0.01 +smooth + +8.535925373550905 +47.35032919163932 +428.9305564159366 +-202.9550748354224 +85.28383783830441 +0 +120 +absolute + + + +0.01 +smooth + +8.535925369997768 +47.35032918936083 +428.93055631912154 +-202.9549407455014 +85.28402010418598 +0 +120 +absolute + + + +0.01 +smooth + +8.535925367202228 +47.350329187567894 +428.9305562239099 +-202.9548352002722 +85.28416353144743 +0 +120 +absolute + + + +0.01 +smooth + +8.535925365182663 +47.35032918627244 +428.93055613032686 +-202.95475891958276 +85.2842671636516 +0 +120 +absolute + + + +0.01 +smooth + +8.535925363957448 +47.35032918548642 +428.9305560383975 +-202.95471262328073 +85.28433004436133 +0 +120 +absolute + + + +0.01 +smooth + +8.53592536354496 +47.35032918522176 +428.9305559481468 +-202.95469703121387 +85.2843512171395 +0 +120 +absolute + + + + + + diff --git a/parameter-learning_nd_disc/kmls/saffa0.kml b/parameter-learning_nd_disc/kmls/saffa0.kml new file mode 100755 index 0000000..00295df --- /dev/null +++ b/parameter-learning_nd_disc/kmls/saffa0.kml @@ -0,0 +1,23252 @@ + + + + + +Tour + + +0.01 +smooth + +8.536348154452593 +47.34969652396877 +412.35755233845094 +14.0290626583571 +88.46603184312883 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815433275 +47.34969652393905 +412.35815092098494 +14.029073686345917 +88.46603395117614 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815397688 +47.34969652385084 +412.35948744455135 +14.029106448585653 +88.46604021312702 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815339046 +47.34969652370542 +412.3615345136845 +14.029160462486212 +88.46605053569476 +0 +120 +absolute + + + +0.01 +smooth + +8.536348152578977 +47.34969652350416 +412.3642647329194 +14.029235245457528 +88.4660648255928 +0 +120 +absolute + + + +0.01 +smooth + +8.536348151547909 +47.349696523248355 +412.3676507067905 +14.029330314909503 +88.4660829895344 +0 +120 +absolute + + + +0.01 +smooth + +8.536348150302747 +47.34969652293936 +412.37166503983275 +14.02944518825206 +88.46610493423294 +0 +120 +absolute + + + +0.01 +smooth + +8.536348148848969 +47.34969652257852 +412.3762803365807 +14.02957938289512 +88.46613056640184 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814719206 +47.34969652216715 +412.38146920156896 +14.029732416248592 +88.4661597927544 +0 +120 +absolute + + + +0.01 +smooth + +8.536348145337499 +47.34969652170657 +412.38720423933216 +14.029903805722393 +88.46619252000391 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814329077 +47.34969652119811 +412.39345805440496 +14.030093068726444 +88.46622865486383 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814105736 +47.34969652064314 +412.40020325132247 +14.030299722670662 +88.46626810404746 +0 +120 +absolute + + + +0.01 +smooth + +8.536348138642747 +47.349696520042954 +412.4074124346189 +14.030523284964962 +88.46631077426817 +0 +120 +absolute + + + +0.01 +smooth + +8.536348136052418 +47.349696519398904 +412.4150582088292 +14.030763273019257 +88.46635657223928 +0 +120 +absolute + + + +0.01 +smooth + +8.536348133291854 +47.34969651871232 +412.4231131784879 +14.031019204243474 +88.46640540467418 +0 +120 +absolute + + + +0.01 +smooth + +8.536348130366537 +47.34969651798452 +412.43154994812977 +14.031290596047516 +88.4664571782862 +0 +120 +absolute + + + +0.01 +smooth + +8.53634812728195 +47.34969651721684 +412.44034112228945 +14.031576965841314 +88.46651179978869 +0 +120 +absolute + + + +0.01 +smooth + +8.53634812404358 +47.34969651641062 +412.44945930550165 +14.03187783103477 +88.46656917589503 +0 +120 +absolute + + + +0.01 +smooth + +8.536348120656903 +47.34969651556719 +412.458877102301 +14.032192709037812 +88.46662921331856 +0 +120 +absolute + + + +0.01 +smooth + +8.536348117127408 +47.34969651468789 +412.4685671172223 +14.032521117260355 +88.46669181877262 +0 +120 +absolute + + + +0.01 +smooth + +8.536348113460573 +47.34969651377403 +412.47850195480015 +14.032862573112311 +88.46675689897056 +0 +120 +absolute + + + +0.01 +smooth + +8.536348109661885 +47.34969651282695 +412.4886542195692 +14.0332165940036 +88.46682436062575 +0 +120 +absolute + + + +0.01 +smooth + +8.536348105736824 +47.349696511847995 +412.4989965160642 +14.033582697344139 +88.46689411045153 +0 +120 +absolute + + + +0.01 +smooth + +8.536348101690876 +47.349696510838484 +412.50950144881983 +14.033960400543842 +88.4669660551613 +0 +120 +absolute + + + +0.01 +smooth + +8.53634809752952 +47.34969650979974 +412.5201416223708 +14.034349221012631 +88.46704010146831 +0 +120 +absolute + + + +0.01 +smooth + +8.536348093258244 +47.349696508733125 +412.53088964125163 +14.034748676160417 +88.46711615608602 +0 +120 +absolute + + + +0.01 +smooth + +8.536348088882523 +47.34969650763995 +412.54171810999725 +14.03515828339712 +88.46719412572772 +0 +120 +absolute + + + +0.01 +smooth + +8.536348084407848 +47.34969650652154 +412.5525996331421 +14.035577560132657 +88.46727391710677 +0 +120 +absolute + + + +0.01 +smooth + +8.53634807976364 +47.34969650535996 +412.56357796141157 +14.036013371720559 +88.46735682248489 +0 +120 +absolute + + + +0.01 +smooth + +8.536348074063994 +47.34969650393043 +412.5754656818743 +14.03655146708096 +88.46745900387448 +0 +120 +absolute + + + +0.01 +smooth + +8.53634806708885 +47.34969650217669 +412.58846529550107 +14.037213511320145 +88.4675845296821 +0 +120 +absolute + + + +0.01 +smooth + +8.536348058883258 +47.34969650010964 +412.6025327484782 +14.037995584597057 +88.46773264284545 +0 +120 +absolute + + + +0.01 +smooth + +8.536348049492267 +47.349696497740204 +412.6176239869925 +14.038893767070663 +88.46790258630233 +0 +120 +absolute + + + +0.01 +smooth + +8.536348038960934 +47.349696495079286 +412.63369495723015 +14.039904138899914 +88.4680936029905 +0 +120 +absolute + + + +0.01 +smooth + +8.536348027334311 +47.3496964921378 +412.6507016053778 +14.041022780243757 +88.46830493584767 +0 +120 +absolute + + + +0.01 +smooth + +8.536348014657445 +47.349696488926675 +412.6685998776217 +14.042245771261161 +88.46853582781165 +0 +120 +absolute + + + +0.01 +smooth + +8.536348000975389 +47.34969648545681 +412.6873457201486 +14.043569192111066 +88.46878552182011 +0 +120 +absolute + + + +0.01 +smooth + +8.536347986333196 +47.3496964817391 +412.70689507914466 +14.044989122952433 +88.46905326081087 +0 +120 +absolute + + + +0.01 +smooth + +8.536347970775914 +47.34969647778448 +412.72720390079655 +14.046501643944218 +88.46933828772163 +0 +120 +absolute + + + +0.01 +smooth + +8.536347954348601 +47.349696473603856 +412.74822813129066 +14.04810283524537 +88.46963984549019 +0 +120 +absolute + + + +0.01 +smooth + +8.536347937096306 +47.34969646920813 +412.7699237168135 +14.049788777014847 +88.46995717705428 +0 +120 +absolute + + + +0.01 +smooth + +8.536347919064076 +47.34969646460824 +412.79224660355146 +14.0515555494116 +88.47028952535166 +0 +120 +absolute + + + +0.01 +smooth + +8.536347900296969 +47.349696459815064 +412.815152737691 +14.053399232594584 +88.47063613332003 +0 +120 +absolute + + + +0.01 +smooth + +8.536347880840033 +47.34969645483954 +412.83859806541864 +14.055315906722758 +88.47099624389722 +0 +120 +absolute + + + +0.01 +smooth + +8.536347860738323 +47.349696449692566 +412.8625385329209 +14.057301651955072 +88.47136910002092 +0 +120 +absolute + + + +0.01 +smooth + +8.536347840036886 +47.34969644438506 +412.88693008638415 +14.059352548450484 +88.47175394462892 +0 +120 +absolute + + + +0.01 +smooth + +8.536347818780776 +47.34969643892795 +412.91172867199487 +14.061464676367944 +88.47215002065897 +0 +120 +absolute + + + +0.01 +smooth + +8.536347797015047 +47.34969643333211 +412.93689023593953 +14.063634115866407 +88.47255657104878 +0 +120 +absolute + + + +0.01 +smooth + +8.536347774784748 +47.34969642760849 +412.96237072440465 +14.06585694710483 +88.47297283873615 +0 +120 +absolute + + + +0.01 +smooth + +8.53634775213493 +47.34969642176797 +412.9881260835765 +14.068129250242162 +88.47339806665882 +0 +120 +absolute + + + +0.01 +smooth + +8.536347729110645 +47.34969641582149 +413.0141122596418 +14.070447105437365 +88.47383149775453 +0 +120 +absolute + + + +0.01 +smooth + +8.536347705756949 +47.34969640977995 +413.0402851987869 +14.072806592849386 +88.47427237496103 +0 +120 +absolute + + + +0.01 +smooth + +8.536347682118887 +47.349696403654264 +413.0666008471983 +14.075203792637184 +88.47471994121608 +0 +120 +absolute + + + +0.01 +smooth + +8.536347658241514 +47.34969639745534 +413.09301515106233 +14.077634784959713 +88.47517343945742 +0 +120 +absolute + + + +0.01 +smooth + +8.536347634169882 +47.34969639119409 +413.11948405656557 +14.080095649975924 +88.47563211262282 +0 +120 +absolute + + + +0.01 +smooth + +8.536347609949038 +47.349696384881426 +413.1459635098944 +14.082582467844775 +88.47609520365 +0 +120 +absolute + + + +0.01 +smooth + +8.536347585232276 +47.3496963784213 +413.1726199867664 +14.085135704202896 +88.47656997886385 +0 +120 +absolute + + + +0.01 +smooth + +8.53634755893377 +47.34969637151605 +413.20002858973027 +14.08787940755074 +88.47707882657683 +0 +120 +absolute + + + +0.01 +smooth + +8.536347531035734 +47.349696364160124 +413.22820244152166 +14.090816462917768 +88.4776222464916 +0 +120 +absolute + + + +0.01 +smooth + +8.536347501592468 +47.34969635636757 +413.25711627803287 +14.093941582377472 +88.47819926132411 +0 +120 +absolute + + + +0.01 +smooth + +8.536347470658287 +47.34969634815249 +413.2867448351556 +14.09724947800335 +88.47880889379023 +0 +120 +absolute + + + +0.01 +smooth + +8.536347438287489 +47.349696339529 +413.3170628487823 +14.100734861868915 +88.47945016660597 +0 +120 +absolute + + + +0.01 +smooth + +8.536347404534386 +47.349696330511144 +413.3480450548046 +14.104392446047648 +88.48012210248723 +0 +120 +absolute + + + +0.01 +smooth + +8.536347369453274 +47.349696321113015 +413.3796661891145 +14.108216942613055 +88.48082372414996 +0 +120 +absolute + + + +0.01 +smooth + +8.536347333098472 +47.34969631134872 +413.4119009876042 +14.112203063638635 +88.4815540543101 +0 +120 +absolute + + + +0.01 +smooth + +8.536347295524276 +47.349696301232335 +413.4447241861655 +14.116345521197887 +88.48231211568357 +0 +120 +absolute + + + +0.01 +smooth + +8.536347256784994 +47.34969629077795 +413.4781105206906 +14.12063902736431 +88.4830969309863 +0 +120 +absolute + + + +0.01 +smooth + +8.536347216934933 +47.34969627999964 +413.51203472707147 +14.125078294211399 +88.48390752293429 +0 +120 +absolute + + + +0.01 +smooth + +8.536347176028398 +47.34969626891151 +413.5464715412 +14.129658033812653 +88.4847429142434 +0 +120 +absolute + + + +0.01 +smooth + +8.536347134119696 +47.34969625752764 +413.5813956989683 +14.134372958241578 +88.48560212762962 +0 +120 +absolute + + + +0.01 +smooth + +8.536347091263131 +47.349696245862106 +413.6167819362683 +14.139217779571661 +88.48648418580886 +0 +120 +absolute + + + +0.01 +smooth + +8.53634704751301 +47.34969623392901 +413.6526049889921 +14.144187209876408 +88.48738811149708 +0 +120 +absolute + + + +0.01 +smooth + +8.53634700292364 +47.34969622174245 +413.6888395930317 +14.14927596122932 +88.48831292741022 +0 +120 +absolute + + + +0.01 +smooth + +8.536346957549323 +47.34969620931649 +413.725460484279 +14.15447874570389 +88.48925765626419 +0 +120 +absolute + + + +0.01 +smooth + +8.536346911444367 +47.34969619666522 +413.76244239862615 +14.159790275373618 +88.49022132077496 +0 +120 +absolute + + + +0.01 +smooth + +8.53634686466308 +47.349696183802735 +413.79976007196495 +14.165205262312007 +88.49120294365845 +0 +120 +absolute + + + +0.01 +smooth + +8.536346817259766 +47.34969617074312 +413.8373882401877 +14.17071841859255 +88.49220154763059 +0 +120 +absolute + + + +0.01 +smooth + +8.536346769288729 +47.349696157500475 +413.87530163918615 +14.176324456288746 +88.49321615540734 +0 +120 +absolute + + + +0.01 +smooth + +8.536346720804275 +47.34969614408885 +413.91347500485233 +14.182018087474098 +88.49424578970462 +0 +120 +absolute + + + +0.01 +smooth + +8.536346671860713 +47.349696130522375 +413.95188307307853 +14.187794024222098 +88.49528947323836 +0 +120 +absolute + + + +0.01 +smooth + +8.536346622512344 +47.34969611681511 +413.9905005797564 +14.193646978606255 +88.49634622872453 +0 +120 +absolute + + + +0.01 +smooth + +8.536346572813478 +47.34969610298115 +414.0293022607781 +14.199571662700055 +88.49741507887906 +0 +120 +absolute + + + +0.01 +smooth + +8.53634652281842 +47.34969608903458 +414.06826285203556 +14.205562788577007 +88.49849504641786 +0 +120 +absolute + + + +0.01 +smooth + +8.536346472579678 +47.34969607498898 +414.1073577299254 +14.211615315345055 +88.49958519653084 +0 +120 +absolute + + + +0.01 +smooth + +8.53634642136528 +47.34969606062494 +414.1468434213787 +14.217832066396312 +88.50070314701608 +0 +120 +absolute + + + +0.01 +smooth + +8.53634636858247 +47.34969604576499 +414.18693166424845 +14.224296518178448 +88.50186321437882 +0 +120 +absolute + + + +0.01 +smooth + +8.536346314286966 +47.349696030424276 +414.2276039975793 +14.231002894216646 +88.50306437507678 +0 +120 +absolute + + + +0.01 +smooth + +8.536346258534495 +47.34969601461802 +414.26884196041675 +14.237945418036094 +88.50430560556782 +0 +120 +absolute + + + +0.01 +smooth + +8.536346201380779 +47.349695998361355 +414.3106270918055 +14.245118313161983 +88.5055858823097 +0 +120 +absolute + + + +0.01 +smooth + +8.53634614288154 +47.3496959816695 +414.35294093079045 +14.252515803119486 +88.5069041817602 +0 +120 +absolute + + + +0.01 +smooth + +8.536346083092504 +47.34969596455763 +414.395765016417 +14.260132111433807 +88.50825948037718 +0 +120 +absolute + + + +0.01 +smooth + +8.53634602206939 +47.34969594704093 +414.43908088772974 +14.267961461630119 +88.50965075461832 +0 +120 +absolute + + + +0.01 +smooth + +8.53634595986792 +47.34969592913458 +414.48287008377395 +14.275998077233615 +88.51107698094152 +0 +120 +absolute + + + +0.01 +smooth + +8.536345896543825 +47.349695910853804 +414.52711414359464 +14.284236181769483 +88.51253713580452 +0 +120 +absolute + + + +0.01 +smooth + +8.536345832152819 +47.349695892213724 +414.57179460623667 +14.292669998762904 +88.5140301956651 +0 +120 +absolute + + + +0.01 +smooth + +8.53634576675063 +47.349695873229564 +414.6168930107451 +14.301293751739069 +88.51555513698106 +0 +120 +absolute + + + +0.01 +smooth + +8.536345700392982 +47.349695853916515 +414.6623908961653 +14.310101664223167 +88.51711093621026 +0 +120 +absolute + + + +0.01 +smooth + +8.536345633135591 +47.34969583428972 +414.70826980154163 +14.319087959740372 +88.51869656981037 +0 +120 +absolute + + + +0.01 +smooth + +8.536345565034186 +47.349695814364416 +414.75451126591963 +14.328246861815886 +88.5203110142393 +0 +120 +absolute + + + +0.01 +smooth + +8.536345496144492 +47.34969579415575 +414.80109682834404 +14.337572593974885 +88.52195324595479 +0 +120 +absolute + + + +0.01 +smooth + +8.536345426522226 +47.34969577367893 +414.84800802786015 +14.347059379742566 +88.52362224141463 +0 +120 +absolute + + + +0.01 +smooth + +8.536345356223112 +47.34969575294914 +414.89522640351265 +14.356701442644107 +88.52531697707661 +0 +120 +absolute + + + +0.01 +smooth + +8.536345285302879 +47.34969573198155 +414.9427334943467 +14.366493006204696 +88.52703642939855 +0 +120 +absolute + + + +0.01 +smooth + +8.536345213817244 +47.34969571079135 +414.99051083940753 +14.376428293949523 +88.52877957483823 +0 +120 +absolute + + + +0.01 +smooth + +8.536345141821931 +47.34969568939373 +415.0385399777398 +14.38650152940377 +88.53054538985342 +0 +120 +absolute + + + +0.01 +smooth + +8.536345069372665 +47.34969566780387 +415.08680244838865 +14.396706936092627 +88.53233285090194 +0 +120 +absolute + + + +0.01 +smooth + +8.536344996525166 +47.34969564603696 +415.1352797903992 +14.407038737541281 +88.53414093444158 +0 +120 +absolute + + + +0.01 +smooth + +8.53634492333516 +47.349695624108186 +415.1839535428163 +14.417491157274917 +88.53596861693012 +0 +120 +absolute + + + +0.01 +smooth + +8.536344849858368 +47.349695602032725 +415.23280524468504 +14.428058418818722 +88.53781487482534 +0 +120 +absolute + + + +0.01 +smooth + +8.536344776150512 +47.34969557982577 +415.28181643505053 +14.43873474569788 +88.53967868458508 +0 +120 +absolute + + + +0.01 +smooth + +8.53634470226732 +47.34969555750251 +415.33096865295767 +14.449514361437583 +88.5415590226671 +0 +120 +absolute + + + +0.01 +smooth + +8.53634462816372 +47.34969553504696 +415.3802723987781 +14.460407288862118 +88.5434574589927 +0 +120 +absolute + + + +0.01 +smooth + +8.536344552965277 +47.34969551218688 +415.4299782233412 +14.471553787538474 +88.54539695257722 +0 +120 +absolute + + + +0.01 +smooth + +8.5363444765071 +47.34969548886906 +415.4801360501315 +14.482983320150261 +88.54738229508655 +0 +120 +absolute + + + +0.01 +smooth + +8.53634439885146 +47.3496954651105 +415.5307308452727 +14.49468978121781 +88.54941244161151 +0 +120 +absolute + + + +0.01 +smooth + +8.536344320060634 +47.34969544092821 +415.5817475748896 +14.506667065261459 +88.55148634724308 +0 +120 +absolute + + + +0.01 +smooth + +8.5363442401969 +47.3496954163392 +415.6331712051062 +14.51890906680154 +88.5536029670722 +0 +120 +absolute + + + +0.01 +smooth + +8.536344159322532 +47.34969539136044 +415.6849867020465 +14.531409680358383 +88.55576125618973 +0 +120 +absolute + + + +0.01 +smooth + +8.536344077499804 +47.349695366008966 +415.73717903183496 +14.544162800452325 +88.55796016968665 +0 +120 +absolute + + + +0.01 +smooth + +8.536343994790993 +47.34969534030174 +415.7897331605957 +14.557162321603698 +88.56019866265383 +0 +120 +absolute + + + +0.01 +smooth + +8.536343911258381 +47.34969531425582 +415.842634054453 +14.57040213833284 +88.56247569018228 +0 +120 +absolute + + + +0.01 +smooth + +8.536343826964233 +47.349695287888146 +415.895866679531 +14.583876145160083 +88.56479020736283 +0 +120 +absolute + + + +0.01 +smooth + +8.53634374197083 +47.34969526121574 +415.94941600195386 +14.597578236605756 +88.56714116928643 +0 +120 +absolute + + + +0.01 +smooth + +8.53634365634045 +47.34969523425563 +416.00326698784596 +14.611502307190195 +88.56952753104403 +0 +120 +absolute + + + +0.01 +smooth + +8.536343570135365 +47.34969520702479 +416.05740460333146 +14.62564225143374 +88.57194824772654 +0 +120 +absolute + + + +0.01 +smooth + +8.536343483417854 +47.349695179540205 +416.11181381453446 +14.639991963856719 +88.57440227442486 +0 +120 +absolute + + + +0.01 +smooth + +8.536343396250189 +47.349695151818906 +416.16647958757915 +14.654545338979466 +88.57688856622994 +0 +120 +absolute + + + +0.01 +smooth + +8.536343308694647 +47.349695123877886 +416.22138688858985 +14.66929627132231 +88.57940607823268 +0 +120 +absolute + + + +0.01 +smooth + +8.536343220813505 +47.349695095734134 +416.27652068369065 +14.684238655405593 +88.581953765524 +0 +120 +absolute + + + +0.01 +smooth + +8.536343132669037 +47.34969506740466 +416.331865939006 +14.699366385749645 +88.58453058319488 +0 +120 +absolute + + + +0.01 +smooth + +8.536343044323521 +47.34969503890646 +416.3874076206599 +14.714673356874801 +88.58713548633617 +0 +120 +absolute + + + +0.01 +smooth + +8.536342955839231 +47.349695010256546 +416.4431306947765 +14.730153463301392 +88.58976743003882 +0 +120 +absolute + + + +0.01 +smooth + +8.536342867278446 +47.349694981471906 +416.49902012748026 +14.745800599549755 +88.59242536939374 +0 +120 +absolute + + + +0.01 +smooth + +8.536342778703435 +47.34969495256955 +416.55506088489517 +14.76160866014022 +88.5951082594919 +0 +120 +absolute + + + +0.01 +smooth + +8.536342690176477 +47.34969492356646 +416.6112379331455 +14.777571539593122 +88.59781505542415 +0 +120 +absolute + + + +0.01 +smooth + +8.53634260175985 +47.34969489447966 +416.66753623835547 +14.793683132428797 +88.60054471228146 +0 +120 +absolute + + + +0.01 +smooth + +8.536342513515828 +47.34969486532614 +416.72394076664943 +14.809937333167579 +88.60329618515475 +0 +120 +absolute + + + +0.01 +smooth + +8.536342425506687 +47.34969483612289 +416.7804364841513 +14.826328036329796 +88.60606842913492 +0 +120 +absolute + + + +0.01 +smooth + +8.536342337794702 +47.34969480688694 +416.8370083569855 +14.842849136435786 +88.60886039931292 +0 +120 +absolute + + + +0.01 +smooth + +8.536342250058661 +47.34969477752681 +416.89372018535107 +14.859548407765727 +88.61167955594875 +0 +120 +absolute + + + +0.01 +smooth + +8.536342161434938 +47.34969474779675 +416.95075064017686 +14.876551277474936 +88.61454562946649 +0 +120 +absolute + + + +0.01 +smooth + +8.53634207196551 +47.34969471770615 +417.0080953843243 +14.893857290453514 +88.61745849073867 +0 +120 +absolute + + + +0.01 +smooth + +8.53634198173521 +47.34969468727656 +417.0657413417069 +14.911460001411895 +88.6204170653113 +0 +120 +absolute + + + +0.01 +smooth + +8.536341890828858 +47.34969465652943 +417.1236754362376 +14.929352965060506 +88.62342027873031 +0 +120 +absolute + + + +0.01 +smooth + +8.536341799331286 +47.349694625486286 +417.1818845918301 +14.947529736109784 +88.6264670565417 +0 +120 +absolute + + + +0.01 +smooth + +8.536341707327317 +47.34969459416866 +417.2403557323976 +14.96598386927016 +88.62955632429147 +0 +120 +absolute + + + +0.01 +smooth + +8.536341614901774 +47.349694562598025 +417.2990757818535 +14.98470891925206 +88.63268700752559 +0 +120 +absolute + + + +0.01 +smooth + +8.536341522139491 +47.34969453079591 +417.3580316641112 +15.00369844076593 +88.63585803179006 +0 +120 +absolute + + + +0.01 +smooth + +8.536341429125288 +47.34969449878382 +417.41721030308395 +15.022945988522185 +88.63906832263083 +0 +120 +absolute + + + +0.01 +smooth + +8.536341335943998 +47.34969446658327 +417.47659862268523 +15.042445117231276 +88.64231680559395 +0 +120 +absolute + + + +0.01 +smooth + +8.536341242680443 +47.34969443421575 +417.53618354682845 +15.062189381603623 +88.64560240622536 +0 +120 +absolute + + + +0.01 +smooth + +8.536341149419448 +47.34969440170279 +417.59595199942686 +15.082172336349661 +88.64892405007103 +0 +120 +absolute + + + +0.01 +smooth + +8.536341056245844 +47.34969436906589 +417.65589090439386 +15.102387536179823 +88.65228066267699 +0 +120 +absolute + + + +0.01 +smooth + +8.536340963244452 +47.349694336326536 +417.71598718564275 +15.122828535804539 +88.65567116958918 +0 +120 +absolute + + + +0.01 +smooth + +8.536340870500105 +47.349694303506276 +417.776227767087 +15.143488889934245 +88.65909449635359 +0 +120 +absolute + + + +0.01 +smooth + +8.536340778097625 +47.349694270626586 +417.8365995726399 +15.16436215327937 +88.66254956851624 +0 +120 +absolute + + + +0.01 +smooth + +8.53634068612184 +47.34969423770898 +417.8970895262147 +15.185441880550352 +88.66603531162309 +0 +120 +absolute + + + +0.01 +smooth + +8.536340594657572 +47.34969420477498 +417.95768455172504 +15.206721626457615 +88.66955065122012 +0 +120 +absolute + + + +0.01 +smooth + +8.536340503789653 +47.34969417184608 +418.018371573084 +15.228194945711595 +88.67309451285331 +0 +120 +absolute + + + +0.01 +smooth + +8.536340413602908 +47.34969413894378 +418.07913751420506 +15.249855393022726 +88.67666582206866 +0 +120 +absolute + + + +0.01 +smooth + +8.536340324182163 +47.349694106089615 +418.13996929900156 +15.271696523101438 +88.68026350441215 +0 +120 +absolute + + + +0.01 +smooth + +8.536340235612244 +47.34969407330507 +418.200853851387 +15.293711890658164 +88.68388648542977 +0 +120 +absolute + + + +0.01 +smooth + +8.536340147977977 +47.349694040611666 +418.26177809527445 +15.315895050403336 +88.6875336906675 +0 +120 +absolute + + + +0.01 +smooth + +8.53634006136419 +47.3496940080309 +418.32272895457754 +15.338239557047388 +88.6912040456713 +0 +120 +absolute + + + +0.01 +smooth + +8.53633997585571 +47.349693975584294 +418.3836933532095 +15.360738965300747 +88.69489647598718 +0 +120 +absolute + + + +0.01 +smooth + +8.53633989153736 +47.349693943293346 +418.44465821508373 +15.383386829873855 +88.69860990716114 +0 +120 +absolute + + + +0.01 +smooth + +8.536339808481973 +47.349693911177006 +418.50561163663747 +15.406177623517847 +88.70234340547765 +0 +120 +absolute + + + +0.01 +smooth + +8.536339725375091 +47.34969387895936 +418.56667913932165 +15.429213139254378 +88.70611249230883 +0 +120 +absolute + + + +0.01 +smooth + +8.536339641399923 +47.34969384646657 +418.6279436496465 +15.452560904943077 +88.70992744446183 +0 +120 +absolute + + + +0.01 +smooth + +8.536339556722364 +47.3496938137323 +418.68939328014113 +15.476214026567442 +88.71378713134351 +0 +120 +absolute + + + +0.01 +smooth + +8.536339471508306 +47.34969378079031 +418.75101614333397 +15.500165610110978 +88.71769042236072 +0 +120 +absolute + + + +0.01 +smooth + +8.536339385923641 +47.349693747674195 +418.8128003517539 +15.524408761557186 +88.72163618692026 +0 +120 +absolute + + + +0.01 +smooth + +8.53633930013427 +47.349693714417704 +418.87473401792977 +15.54893658688958 +88.72562329442904 +0 +120 +absolute + + + +0.01 +smooth + +8.536339214306082 +47.349693681054504 +418.9368052543901 +15.573742192091657 +88.72965061429385 +0 +120 +absolute + + + +0.01 +smooth + +8.536339128604977 +47.34969364761829 +418.999002173664 +15.598818683146918 +88.73371701592154 +0 +120 +absolute + + + +0.01 +smooth + +8.536339043196849 +47.34969361414274 +419.06131288828 +15.624159166038876 +88.73782136871895 +0 +120 +absolute + + + +0.01 +smooth + +8.536338958247583 +47.34969358066155 +419.12372551076675 +15.649756746751022 +88.74196254209292 +0 +120 +absolute + + + +0.01 +smooth + +8.536338873923087 +47.34969354720841 +419.1862281536533 +15.675604531266876 +88.74613940545032 +0 +120 +absolute + + + +0.01 +smooth + +8.536338790389248 +47.349693513817 +419.24880892946834 +15.701695625569934 +88.75035082819798 +0 +120 +absolute + + + +0.01 +smooth + +8.536338707811966 +47.34969348052103 +419.31145595074065 +15.728023135643697 +88.75459567974272 +0 +120 +absolute + + + +0.01 +smooth + +8.536338626357132 +47.34969344735417 +419.3741573299989 +15.754580167471676 +88.75887282949141 +0 +120 +absolute + + + +0.01 +smooth + +8.536338546190642 +47.349693414350114 +419.4369011797719 +15.78135982703737 +88.7631811468509 +0 +120 +absolute + + + +0.01 +smooth + +8.536338467478389 +47.349693381542544 +419.4996756125884 +15.808355220324286 +88.76751950122798 +0 +120 +absolute + + + +0.01 +smooth + +8.53633839038627 +47.34969334896516 +419.5624687409772 +15.835559453315925 +88.77188676202954 +0 +120 +absolute + + + +0.01 +smooth + +8.536338315080176 +47.34969331665164 +419.6252686774669 +15.862965631995795 +88.77628179866241 +0 +120 +absolute + + + +0.01 +smooth + +8.536338241726007 +47.34969328463567 +419.68806353458655 +15.890566862347399 +88.78070348053342 +0 +120 +absolute + + + +0.01 +smooth + +8.536338170489653 +47.349693252950956 +419.7508414248647 +15.918356250354236 +88.78515067704942 +0 +120 +absolute + + + +0.01 +smooth + +8.536338101537012 +47.34969322163116 +419.8135904608302 +15.946326901999816 +88.78962225761725 +0 +120 +absolute + + + +0.01 +smooth + +8.536338035033978 +47.34969319071 +419.8762987550118 +15.974471923267643 +88.79411709164376 +0 +120 +absolute + + + +0.01 +smooth + +8.536337971146445 +47.349693160221136 +419.9389544199383 +16.002784420141218 +88.7986340485358 +0 +120 +absolute + + + +0.01 +smooth + +8.536337910040306 +47.34969313019828 +420.00154556813845 +16.03125749860405 +88.80317199770019 +0 +120 +absolute + + + +0.01 +smooth + +8.53633785188146 +47.34969310067511 +420.0640603121409 +16.05988426463963 +88.80772980854377 +0 +120 +absolute + + + +0.01 +smooth + +8.536337796835797 +47.34969307168531 +420.12648676447463 +16.088657824231483 +88.8123063504734 +0 +120 +absolute + + + +0.01 +smooth + +8.536337745069215 +47.34969304326258 +420.1888130376681 +16.117571283363095 +88.8169004928959 +0 +120 +absolute + + + +0.01 +smooth + +8.5363376963203 +47.34969301532608 +420.25104872632505 +16.14663560931416 +88.82151380717524 +0 +120 +absolute + + + +0.01 +smooth + +8.53633764760363 +47.349692987081006 +420.3133408093133 +16.17597554008877 +88.82616507438036 +0 +120 +absolute + + + +0.01 +smooth + +8.536337598455956 +47.34969295843576 +420.3757102220977 +16.205610232346736 +88.83085710229562 +0 +120 +absolute + + + +0.01 +smooth + +8.53633754905283 +47.34969292947232 +420.4381458485246 +16.23553212755585 +88.83558865725182 +0 +120 +absolute + + + +0.01 +smooth + +8.536337499569797 +47.349692900272586 +420.50063657243925 +16.265733667183877 +88.84035850557963 +0 +120 +absolute + + + +0.01 +smooth + +8.536337450182424 +47.34969287091852 +420.56317127768745 +16.29620729269862 +88.84516541360982 +0 +120 +absolute + + + +0.01 +smooth + +8.536337401066262 +47.34969284149205 +420.6257388481152 +16.326945445567866 +88.85000814767318 +0 +120 +absolute + + + +0.01 +smooth + +8.53633735239686 +47.34969281207509 +420.68832816756805 +16.357940567259377 +88.85488547410037 +0 +120 +absolute + + + +0.01 +smooth + +8.53633730434978 +47.349692782749614 +420.7509281198919 +16.389185099240954 +88.85979615922217 +0 +120 +absolute + + + +0.01 +smooth + +8.536337257100575 +47.349692753597544 +420.8135275889324 +16.420671482980385 +88.86473896936934 +0 +120 +absolute + + + +0.01 +smooth + +8.536337210824792 +47.349692724700795 +420.8761154585352 +16.45239215994544 +88.86971267087259 +0 +120 +absolute + + + +0.01 +smooth + +8.536337165697997 +47.349692696141325 +420.9386806125464 +16.48433957160392 +88.8747160300627 +0 +120 +absolute + + + +0.01 +smooth + +8.536337121895743 +47.349692668001076 +421.00121193481164 +16.516506159423592 +88.8797478132704 +0 +120 +absolute + + + +0.01 +smooth + +8.536337079593574 +47.34969264036194 +421.06369830917635 +16.54888436487225 +88.88480678682636 +0 +120 +absolute + + + +0.01 +smooth + +8.536337038967055 +47.34969261330591 +421.12612861948674 +16.581466629417683 +88.88989171706142 +0 +120 +absolute + + + +0.01 +smooth + +8.536337000191738 +47.3496925869149 +421.18849174958837 +16.614245394527668 +88.89500137030629 +0 +120 +absolute + + + +0.01 +smooth + +8.536336963443176 +47.34969256127083 +421.2507765833269 +16.647213101669994 +88.9001345128917 +0 +120 +absolute + + + +0.01 +smooth + +8.536336928896926 +47.34969253645565 +421.3129720045483 +16.680362192312444 +88.90528991114837 +0 +120 +absolute + + + +0.01 +smooth + +8.536336896728539 +47.349692512551286 +421.3750668970982 +16.713685107922796 +88.91046633140712 +0 +120 +absolute + + + +0.01 +smooth + +8.536336867113574 +47.349692489639686 +421.43705014482236 +16.747174289968843 +88.91566253999862 +0 +120 +absolute + + + +0.01 +smooth + +8.536336840227582 +47.34969246780279 +421.49891063156656 +16.780822179918367 +88.92087730325363 +0 +120 +absolute + + + +0.01 +smooth + +8.53633681624612 +47.349692447122514 +421.56063724117655 +16.814621219239157 +88.92610938750289 +0 +120 +absolute + + + +0.01 +smooth + +8.536336795344743 +47.34969242768081 +421.6222188574981 +16.848563849398985 +88.93135755907718 +0 +120 +absolute + + + +0.01 +smooth + +8.536336777699002 +47.34969240955961 +421.68364436437696 +16.882642511865647 +88.93662058430718 +0 +120 +absolute + + + +0.01 +smooth + +8.536336763484456 +47.34969239284084 +421.74490264565895 +16.916849648106925 +88.94189722952368 +0 +120 +absolute + + + +0.01 +smooth + +8.536336752876657 +47.34969237760645 +421.8059825851898 +16.9511776995906 +88.9471862610574 +0 +120 +absolute + + + +0.01 +smooth + +8.53633674605116 +47.349692363938374 +421.8668730668152 +16.98561910778446 +88.95248644523907 +0 +120 +absolute + + + +0.01 +smooth + +8.536336743183519 +47.34969235191854 +421.9275629743809 +17.020166314156285 +88.95779654839947 +0 +120 +absolute + + + +0.01 +smooth + +8.536336744266041 +47.34969234108394 +421.98810684160554 +17.05486747742782 +88.96312386130184 +0 +120 +absolute + + + +0.01 +smooth + +8.536336748939089 +47.349692330361314 +422.0486292659702 +17.089829395769552 +88.96848463399442 +0 +120 +absolute + + + +0.01 +smooth + +8.536336757077532 +47.349692319741024 +422.109123806105 +17.125046962608426 +88.97387798545176 +0 +120 +absolute + + + +0.01 +smooth + +8.536336768565743 +47.34969230924708 +422.16957992136025 +17.16051158212779 +88.97930250066267 +0 +120 +absolute + + + +0.01 +smooth + +8.536336783288107 +47.34969229890355 +422.2299870710864 +17.196214658511 +88.9847567646159 +0 +120 +absolute + + + +0.01 +smooth + +8.536336801128998 +47.34969228873445 +422.2903347146335 +17.232147595941413 +88.99023936230013 +0 +120 +absolute + + + +0.01 +smooth + +8.536336821972796 +47.34969227876382 +422.3506123113517 +17.268301798602362 +88.9957488787041 +0 +120 +absolute + + + +0.01 +smooth + +8.536336845703877 +47.349692269015684 +422.4108093205911 +17.30466867067721 +89.00128389881652 +0 +120 +absolute + + + +0.01 +smooth + +8.536336872206622 +47.34969225951408 +422.47091520170204 +17.3412396163493 +89.00684300762613 +0 +120 +absolute + + + +0.01 +smooth + +8.53633690136541 +47.349692250283084 +422.5309194140349 +17.378006039801992 +89.01242479012166 +0 +120 +absolute + + + +0.01 +smooth + +8.536336933064614 +47.34969224134665 +422.59081141693935 +17.414959345218623 +89.01802783129177 +0 +120 +absolute + + + +0.01 +smooth + +8.536336967188616 +47.349692232728884 +422.650580669766 +17.452090936782557 +89.02365071612525 +0 +120 +absolute + + + +0.01 +smooth + +8.536337003621794 +47.34969222445379 +422.710216631865 +17.48939221867714 +89.02929202961083 +0 +120 +absolute + + + +0.01 +smooth + +8.536337042248524 +47.34969221654541 +422.76970876258633 +17.526854595085712 +89.03495035673716 +0 +120 +absolute + + + +0.01 +smooth + +8.536337082953189 +47.34969220902776 +422.82904652128036 +17.564469470191636 +89.04062428249301 +0 +120 +absolute + + + +0.01 +smooth + +8.536337125620161 +47.3496922019249 +422.8882193672972 +17.602228248178257 +89.04631239186712 +0 +120 +absolute + + + +0.01 +smooth + +8.536337170133823 +47.349692195260864 +422.9472167599872 +17.64012233322893 +89.05201326984819 +0 +120 +absolute + + + +0.01 +smooth + +8.536337216378552 +47.34969218905967 +423.00602815870036 +17.678143129526998 +89.05772550142494 +0 +120 +absolute + + + +0.01 +smooth + +8.536337264238725 +47.349692183345354 +423.0646430227869 +17.716282041255816 +89.0634476715861 +0 +120 +absolute + + + +0.01 +smooth + +8.536337313598722 +47.34969217814196 +423.12305081159707 +17.754530472598734 +89.0691783653204 +0 +120 +absolute + + + +0.01 +smooth + +8.53633736434292 +47.349692173473514 +423.18124098448106 +17.792879827739103 +89.07491616761654 +0 +120 +absolute + + + +0.01 +smooth + +8.5363374163557 +47.34969216936406 +423.2392030007891 +17.83132151086027 +89.08065966346325 +0 +120 +absolute + + + +0.01 +smooth + +8.536337469521433 +47.34969216583764 +423.2969263198713 +17.86984692614559 +89.08640743784926 +0 +120 +absolute + + + +0.01 +smooth + +8.536337523724505 +47.349692162918274 +423.3544004010778 +17.90844747777841 +89.09215807576331 +0 +120 +absolute + + + +0.01 +smooth + +8.536337578849292 +47.349692160629985 +423.411614703759 +17.94711456994208 +89.09791016219408 +0 +120 +absolute + + + +0.01 +smooth + +8.53633763478017 +47.34969215899683 +423.4685586872649 +17.98583960681995 +89.10366228213033 +0 +120 +absolute + + + +0.01 +smooth + +8.536337691401517 +47.34969215804284 +423.5252218109457 +18.024613992595373 +89.10941302056078 +0 +120 +absolute + + + +0.01 +smooth + +8.536337748689943 +47.34969215781195 +423.58159587337605 +18.063431197801254 +89.11516129326932 +0 +120 +absolute + + + +0.01 +smooth + +8.536337811635628 +47.34969215941364 +423.63780092649006 +18.10239751277738 +89.12092406630991 +0 +120 +absolute + + + +0.01 +smooth + +8.53633788293072 +47.34969216340959 +423.6939020070424 +18.14156921706716 +89.12671026770865 +0 +120 +absolute + + + +0.01 +smooth + +8.536337962284716 +47.34969216970798 +423.74988909998865 +18.180936035172152 +89.13251816507184 +0 +120 +absolute + + + +0.01 +smooth + +8.536338049407119 +47.349692178217005 +423.80575219028464 +18.220487691593927 +89.13834602600586 +0 +120 +absolute + + + +0.01 +smooth + +8.536338144007436 +47.34969218884482 +423.86148126288583 +18.260213910834054 +89.14419211811702 +0 +120 +absolute + + + +0.01 +smooth + +8.536338245795159 +47.34969220149963 +423.91706630274774 +18.300104417394092 +89.15005470901167 +0 +120 +absolute + + + +0.01 +smooth + +8.536338354479795 +47.349692216089586 +423.9724972948261 +18.340148935775606 +89.15593206629607 +0 +120 +absolute + + + +0.01 +smooth + +8.536338469770845 +47.349692232522905 +424.02776422407663 +18.380337190480166 +89.16182245757666 +0 +120 +absolute + + + +0.01 +smooth + +8.536338591377811 +47.34969225070775 +424.08285707545474 +18.420658906009336 +89.1677241504597 +0 +120 +absolute + + + +0.01 +smooth + +8.536338719010192 +47.34969227055228 +424.13776583391615 +18.461103806864674 +89.17363541255158 +0 +120 +absolute + + + +0.01 +smooth + +8.536338852377495 +47.34969229196474 +424.19248048441665 +18.501661617547768 +89.1795545114586 +0 +120 +absolute + + + +0.01 +smooth + +8.536338991189211 +47.349692314853236 +424.2469910119115 +18.54232206256015 +89.18547971478705 +0 +120 +absolute + + + +0.01 +smooth + +8.53633913515485 +47.34969233912597 +424.30128740135655 +18.583074866403408 +89.19140929014333 +0 +120 +absolute + + + +0.01 +smooth + +8.536339283983914 +47.34969236469116 +424.35535963770747 +18.623909753579106 +89.19734150513375 +0 +120 +absolute + + + +0.01 +smooth + +8.5363394373859 +47.34969239145695 +424.4091977059198 +18.66481644858881 +89.20327462736465 +0 +120 +absolute + + + +0.01 +smooth + +8.536339595070311 +47.34969241933152 +424.462791590949 +18.705784675934073 +89.20920692444233 +0 +120 +absolute + + + +0.01 +smooth + +8.536339756746647 +47.34969244822307 +424.5161312777509 +18.746804160116476 +89.21513666397317 +0 +120 +absolute + + + +0.01 +smooth + +8.536339922124412 +47.349692478039756 +424.5692067512811 +18.787864625637575 +89.22106211356348 +0 +120 +absolute + + + +0.01 +smooth + +8.536340090913107 +47.34969250868978 +424.6220079964952 +18.828955796998937 +89.22698154081958 +0 +120 +absolute + + + +0.01 +smooth + +8.536340262822232 +47.34969254008131 +424.6745249983487 +18.870067398702126 +89.23289321334781 +0 +120 +absolute + + + +0.01 +smooth + +8.536340437561291 +47.349692572122535 +424.72674774179734 +18.911189155248714 +89.23879539875455 +0 +120 +absolute + + + +0.01 +smooth + +8.536340614839782 +47.34969260472163 +424.77866621179663 +18.95231079114026 +89.24468636464607 +0 +120 +absolute + + + +0.01 +smooth + +8.53634079436721 +47.34969263778679 +424.8302703933024 +18.993422030878335 +89.25056437862872 +0 +120 +absolute + + + +0.01 +smooth + +8.536340975853072 +47.349692671226165 +424.88155027127004 +19.034512598964497 +89.25642770830886 +0 +120 +absolute + + + +0.01 +smooth + +8.536341159006874 +47.349692704947955 +424.9324958306553 +19.07557221990032 +89.26227462129278 +0 +120 +absolute + + + +0.01 +smooth + +8.536341343538115 +47.34969273886034 +424.9830970564138 +19.11659061818736 +89.26810338518685 +0 +120 +absolute + + + +0.01 +smooth + +8.536341529156296 +47.34969277287149 +425.0333439335011 +19.157557518327195 +89.27391226759738 +0 +120 +absolute + + + +0.01 +smooth + +8.53634171655825 +47.34969280729827 +425.0832535208232 +19.19848961467073 +89.27970420765719 +0 +120 +absolute + + + +0.01 +smooth + +8.536341911406524 +47.3496928444994 +425.1329784502907 +19.23953738113673 +89.28550528492748 +0 +120 +absolute + + + +0.01 +smooth + +8.536342114472271 +47.34969288478784 +425.18253630023156 +19.28071477845221 +89.29131788346348 +0 +120 +absolute + + + +0.01 +smooth + +8.536342325542545 +47.34969292806777 +425.23191759760687 +19.322008678641613 +89.29713969166018 +0 +120 +absolute + + + +0.01 +smooth + +8.536342544404395 +47.34969297424329 +425.281112869378 +19.363405953729384 +89.30296839791257 +0 +120 +absolute + + + +0.01 +smooth + +8.536342770844875 +47.34969302321855 +425.33011264250575 +19.404893475739964 +89.3088016906156 +0 +120 +absolute + + + +0.01 +smooth + +8.536343004651043 +47.3496930748977 +425.3789074439517 +19.446458116697805 +89.3146372581643 +0 +120 +absolute + + + +0.01 +smooth + +8.536343245609949 +47.349693129184914 +425.4274878006769 +19.48808674862735 +89.32047278895364 +0 +120 +absolute + + + +0.01 +smooth + +8.536343493508646 +47.34969318598428 +425.4758442396424 +19.52976624355305 +89.3263059713786 +0 +120 +absolute + + + +0.01 +smooth + +8.536343748134184 +47.349693245199944 +425.5239672878095 +19.571483473499335 +89.33213449383413 +0 +120 +absolute + + + +0.01 +smooth + +8.536344009273623 +47.349693306736086 +425.57184747213944 +19.61322531049067 +89.33795604471527 +0 +120 +absolute + + + +0.01 +smooth + +8.53634427671401 +47.34969337049682 +425.61947531959316 +19.654978626551483 +89.34376831241698 +0 +120 +absolute + + + +0.01 +smooth + +8.536344550242397 +47.349693436386296 +425.66684135713194 +19.696730293706228 +89.34956898533422 +0 +120 +absolute + + + +0.01 +smooth + +8.536344829645845 +47.34969350430867 +425.7139361117172 +19.738467183979363 +89.35535575186204 +0 +120 +absolute + + + +0.01 +smooth + +8.5363451147114 +47.34969357416805 +425.7607501103097 +19.78017616939531 +89.36112630039531 +0 +120 +absolute + + + +0.01 +smooth + +8.53634540522612 +47.349693645868584 +425.80727387987076 +19.82184412197853 +89.36687831932912 +0 +120 +absolute + + + +0.01 +smooth + +8.536345700977051 +47.349693719314445 +425.85349794736175 +19.86345791375346 +89.37260949705838 +0 +120 +absolute + + + +0.01 +smooth + +8.536346001751255 +47.34969379440975 +425.89941283974366 +19.905004416744553 +89.37831752197812 +0 +120 +absolute + + + +0.01 +smooth + +8.536346307335776 +47.34969387105864 +425.9450090839777 +19.946470502976247 +89.3840000824833 +0 +120 +absolute + + + +0.01 +smooth + +8.536346617517676 +47.34969394916526 +425.9902772070251 +19.98784304447299 +89.3896548669689 +0 +120 +absolute + + + +0.01 +smooth + +8.536346932084003 +47.34969402863376 +426.0352077358469 +20.029108913259236 +89.39527956382992 +0 +120 +absolute + + + +0.01 +smooth + +8.536347250821809 +47.34969410936827 +426.0797911974044 +20.07025498135942 +89.40087186146135 +0 +120 +absolute + + + +0.01 +smooth + +8.536347573518151 +47.34969419127294 +426.1240181186588 +20.111268120797988 +89.40642944825812 +0 +120 +absolute + + + +0.01 +smooth + +8.536347899960079 +47.34969427425191 +426.1678790265711 +20.152135203599386 +89.41195001261526 +0 +120 +absolute + + + +0.01 +smooth + +8.536348229934648 +47.34969435820931 +426.2113644481026 +20.192843101788068 +89.41743124292776 +0 +120 +absolute + + + +0.01 +smooth + +8.53634856322891 +47.34969444304929 +426.25446491021455 +20.233378687388466 +89.42287082759057 +0 +120 +absolute + + + +0.01 +smooth + +8.536348899629917 +47.349694528676004 +426.29717093986784 +20.27372883242504 +89.42826645499869 +0 +120 +absolute + + + +0.01 +smooth + +8.536349238924725 +47.349694614993574 +426.33947306402405 +20.313880408922227 +89.43361581354709 +0 +120 +absolute + + + +0.01 +smooth + +8.53634958324986 +47.349694702947524 +426.3814441314269 +20.35392671749093 +89.43893706751678 +0 +120 +absolute + + + +0.01 +smooth + +8.53634993648465 +47.34969479426147 +426.4232179693714 +20.394036495375254 +89.4442627954864 +0 +120 +absolute + + + +0.01 +smooth + +8.536350298508824 +47.34969488889052 +426.464788201868 +20.434194682734468 +89.44959014123606 +0 +120 +absolute + + + +0.01 +smooth + +8.536350669129032 +47.34969498675746 +426.50614589128105 +20.4743828855953 +89.45491560643845 +0 +120 +absolute + + + +0.01 +smooth + +8.536351048151912 +47.34969508778503 +426.54728209997467 +20.514582709984467 +89.46023569276608 +0 +120 +absolute + + + +0.01 +smooth + +8.536351435384105 +47.34969519189595 +426.58818789031295 +20.554775761928692 +89.46554690189149 +0 +120 +absolute + + + +0.01 +smooth + +8.536351830632261 +47.34969529901299 +426.62885432466044 +20.5949436474547 +89.47084573548739 +0 +120 +absolute + + + +0.01 +smooth + +8.536352233703019 +47.34969540905894 +426.66927246538114 +20.635067972589233 +89.47612869522631 +0 +120 +absolute + + + +0.01 +smooth + +8.536352644403014 +47.3496955219565 +426.7094333748391 +20.675130343358994 +89.4813922827808 +0 +120 +absolute + + + +0.01 +smooth + +8.536353062538902 +47.34969563762846 +426.74932811539884 +20.715112365790727 +89.48663299982353 +0 +120 +absolute + + + +0.01 +smooth + +8.536353487917316 +47.34969575599754 +426.78894774942427 +20.754995645911134 +89.49184734802698 +0 +120 +absolute + + + +0.01 +smooth + +8.536353920344899 +47.349695876986516 +426.8282833392799 +20.794761789746957 +89.49703182906383 +0 +120 +absolute + + + +0.01 +smooth + +8.536354359628302 +47.34969600051814 +426.8673259473298 +20.834392403324923 +89.50218294460662 +0 +120 +absolute + + + +0.01 +smooth + +8.536354805574154 +47.34969612651515 +426.90606663593803 +20.87386909267174 +89.50729719632791 +0 +120 +absolute + + + +0.01 +smooth + +8.536355257989108 +47.34969625490031 +426.9444964674689 +20.913173463814154 +89.51237108590036 +0 +120 +absolute + + + +0.01 +smooth + +8.536355716679804 +47.34969638559637 +426.9826065042869 +20.95228712277887 +89.5174011149965 +0 +120 +absolute + + + +0.01 +smooth + +8.536356181452883 +47.34969651852607 +427.02038780875586 +20.99119167559263 +89.52238378528895 +0 +120 +absolute + + + +0.01 +smooth + +8.53635665211499 +47.349696653612185 +427.05783144324005 +21.029868728282153 +89.52731559845027 +0 +120 +absolute + + + +0.01 +smooth + +8.536357128472766 +47.34969679077746 +427.09492847010387 +21.068299886874154 +89.53219305615308 +0 +120 +absolute + + + +0.01 +smooth + +8.536357610332852 +47.34969692994464 +427.13166995171133 +21.106466757395374 +89.53701266006993 +0 +120 +absolute + + + +0.01 +smooth + +8.536358097501893 +47.34969707103648 +427.16804695042686 +21.144350945872525 +89.54177091187341 +0 +120 +absolute + + + +0.01 +smooth + +8.53635858978653 +47.34969721397573 +427.2040505286144 +21.181934058332338 +89.54646431323613 +0 +120 +absolute + + + +0.01 +smooth + +8.536359086993407 +47.349697358685155 +427.23967174863833 +21.219197700801537 +89.55108936583066 +0 +120 +absolute + + + +0.01 +smooth + +8.536359588929166 +47.34969750508749 +427.2749016728628 +21.25612347930685 +89.55564257132963 +0 +120 +absolute + + + +0.01 +smooth + +8.53636009540045 +47.34969765310551 +427.30973136365213 +21.292692999874994 +89.56012043140552 +0 +120 +absolute + + + +0.01 +smooth + +8.5363606062139 +47.34969780266194 +427.3441518833703 +21.328887868532703 +89.56451944773104 +0 +120 +absolute + + + +0.01 +smooth + +8.536361121176162 +47.34969795367955 +427.37815429438183 +21.364689691306697 +89.5688361219787 +0 +120 +absolute + + + +0.01 +smooth + +8.536361640211501 +47.34969810613234 +427.4117344595601 +21.400089825290053 +89.57306915211043 +0 +120 +absolute + + + +0.01 +smooth + +8.53636216700938 +47.34969826163526 +427.4450419629186 +21.435388894375237 +89.57728672859068 +0 +120 +absolute + + + +0.01 +smooth + +8.536362703262343 +47.34969842093548 +427.47814506519927 +21.47071422105629 +89.58151755779537 +0 +120 +absolute + + + +0.01 +smooth + +8.536363248781326 +47.349698583960866 +427.51103526558654 +21.506035880843896 +89.58575485491282 +0 +120 +absolute + + + +0.01 +smooth + +8.536363803377268 +47.349698750639234 +427.54370406326535 +21.541323949248746 +89.58999183513136 +0 +120 +absolute + + + +0.01 +smooth + +8.53636436686111 +47.34969892089846 +427.57614295742053 +21.576548501781552 +89.59422171363927 +0 +120 +absolute + + + +0.01 +smooth + +8.536364939043777 +47.34969909466634 +427.60834344723634 +21.611679613952997 +89.59843770562483 +0 +120 +absolute + + + +0.01 +smooth + +8.53636551973622 +47.34969927187079 +427.64029703189794 +21.64668736127379 +89.6026330262764 +0 +120 +absolute + + + +0.01 +smooth + +8.536366108749366 +47.349699452439594 +427.6719952105899 +21.681541819254626 +89.60680089078224 +0 +120 +absolute + + + +0.01 +smooth + +8.536366705894151 +47.34969963630059 +427.7034294824966 +21.716213063406176 +89.61093451433065 +0 +120 +absolute + + + +0.01 +smooth + +8.536367310981516 +47.34969982338166 +427.7345913468032 +21.750671169239176 +89.61502711210997 +0 +120 +absolute + + + +0.01 +smooth + +8.5363679238224 +47.34970001361065 +427.76547230269426 +21.784886212264293 +89.61907189930847 +0 +120 +absolute + + + +0.01 +smooth + +8.53636854422773 +47.34970020691536 +427.79606384935425 +21.818828267992235 +89.62306209111445 +0 +120 +absolute + + + +0.01 +smooth + +8.536369172008454 +47.34970040322369 +427.8263574859683 +21.852467411933702 +89.62699090271624 +0 +120 +absolute + + + +0.01 +smooth + +8.536369806975497 +47.34970060246345 +427.85634471172057 +21.885773719599378 +89.63085154930214 +0 +120 +absolute + + + +0.01 +smooth + +8.536370448939802 +47.34970080456247 +427.88601702579626 +21.91871726649996 +89.6346372460604 +0 +120 +absolute + + + +0.01 +smooth + +8.536371097712307 +47.34970100944863 +427.91536592737987 +21.95126812814616 +89.63834120817938 +0 +120 +absolute + + + +0.01 +smooth + +8.536371753103944 +47.34970121704974 +427.9443829156561 +21.983396380048664 +89.64195665084736 +0 +120 +absolute + + + +0.01 +smooth + +8.536372414925651 +47.34970142729368 +427.9730594898096 +22.01507209771817 +89.64547678925267 +0 +120 +absolute + + + +0.01 +smooth + +8.536373082988367 +47.349701640108265 +428.00138714902516 +22.04626535666537 +89.64889483858354 +0 +120 +absolute + + + +0.01 +smooth + +8.536373757103025 +47.349701855421344 +428.02935739248744 +22.076946232400964 +89.65220401402837 +0 +120 +absolute + + + +0.01 +smooth + +8.536374437080564 +47.34970207316077 +428.0569617193812 +22.10708480043565 +89.6553975307754 +0 +120 +absolute + + + +0.01 +smooth + +8.536375122731918 +47.34970229325438 +428.0841916288911 +22.136651136280122 +89.65846860401295 +0 +120 +absolute + + + +0.01 +smooth + +8.536375813868027 +47.34970251563003 +428.1110386202018 +22.165615315445073 +89.66141044892933 +0 +120 +absolute + + + +0.01 +smooth + +8.536376510299824 +47.34970274021555 +428.13749419249814 +22.193947413441204 +89.66421628071281 +0 +120 +absolute + + + +0.01 +smooth + +8.536377211838248 +47.34970296693878 +428.16354984496456 +22.221617505779214 +89.66687931455172 +0 +120 +absolute + + + +0.01 +smooth + +8.536377918294235 +47.34970319572757 +428.1891970767862 +22.24859566796979 +89.66939276563437 +0 +120 +absolute + + + +0.01 +smooth + +8.53637862947872 +47.349703426509784 +428.2144273871473 +22.274851975523642 +89.67174984914905 +0 +120 +absolute + + + +0.01 +smooth + +8.5363793460251 +47.349703659580975 +428.2392706629167 +22.30052110366576 +89.6739725555363 +0 +120 +absolute + + + +0.01 +smooth + +8.536380071808955 +47.349703896686954 +428.26390818717766 +22.32637032954716 +89.67619602092407 +0 +120 +absolute + + + +0.01 +smooth + +8.536380807191641 +47.34970413800303 +428.2883573165339 +22.35244064276107 +89.6784320219324 +0 +120 +absolute + + + +0.01 +smooth + +8.536381551983936 +47.349704383458324 +428.3126097156327 +22.378661474571757 +89.68067304791204 +0 +120 +absolute + + + +0.01 +smooth + +8.536382305996622 +47.34970463298203 +428.3366570491218 +22.40496225624351 +89.68291158821383 +0 +120 +absolute + + + +0.01 +smooth + +8.536383069040477 +47.349704886503325 +428.36049098164875 +22.43127241904062 +89.68514013218858 +0 +120 +absolute + + + +0.01 +smooth + +8.536383840926275 +47.349705143951326 +428.38410317786077 +22.45752139422736 +89.68735116918705 +0 +120 +absolute + + + +0.01 +smooth + +8.536384621464805 +47.34970540525522 +428.40748530240546 +22.48363861306802 +89.68953718856011 +0 +120 +absolute + + + +0.01 +smooth + +8.53638541046684 +47.349705670344164 +428.4306290199305 +22.50955350682689 +89.69169067965852 +0 +120 +absolute + + + +0.01 +smooth + +8.536386207743165 +47.34970593914734 +428.4535259950831 +22.535195506768233 +89.69380413183309 +0 +120 +absolute + + + +0.01 +smooth + +8.536387013104552 +47.34970621159388 +428.476167892511 +22.560494044156354 +89.69587003443463 +0 +120 +absolute + + + +0.01 +smooth + +8.536387826361787 +47.34970648761299 +428.4985463768618 +22.585378550255534 +89.69788087681401 +0 +120 +absolute + + + +0.01 +smooth + +8.536388647325643 +47.34970676713378 +428.52065311278255 +22.609778456330048 +89.69982914832191 +0 +120 +absolute + + + +0.01 +smooth + +8.536389475806903 +47.349707050085435 +428.5424797649211 +22.63362319364418 +89.70170733830923 +0 +120 +absolute + + + +0.01 +smooth + +8.536390311616348 +47.349707336397124 +428.56401799792496 +22.656842193462218 +89.70350793612678 +0 +120 +absolute + + + +0.01 +smooth + +8.536391154564754 +47.34970762599799 +428.58525947644154 +22.67936488704845 +89.70522343112532 +0 +120 +absolute + + + +0.01 +smooth + +8.5363920044629 +47.34970791881723 +428.6061958651183 +22.70112070566715 +89.70684631265564 +0 +120 +absolute + + + +0.01 +smooth + +8.536392861121568 +47.34970821478397 +428.6268188286029 +22.722039080582615 +89.70836907006861 +0 +120 +absolute + + + +0.01 +smooth + +8.536393724351537 +47.34970851382739 +428.64712003154267 +22.742049443059113 +89.70978419271499 +0 +120 +absolute + + + +0.01 +smooth + +8.536394593963585 +47.34970881587665 +428.66709113858525 +22.761081224360943 +89.71108416994562 +0 +120 +absolute + + + +0.01 +smooth + +8.536395469768493 +47.34970912086091 +428.68672381437807 +22.779063855752376 +89.71226149111126 +0 +120 +absolute + + + +0.01 +smooth + +8.536396351577038 +47.34970942870933 +428.7060097235686 +22.7959267684977 +89.71330864556278 +0 +120 +absolute + + + +0.01 +smooth + +8.536397239200003 +47.349709739351084 +428.7249405308045 +22.811599393861208 +89.71421812265092 +0 +120 +absolute + + + +0.01 +smooth + +8.536398132448161 +47.349710052715324 +428.7435079007331 +22.826011163107175 +89.71498241172654 +0 +120 +absolute + + + +0.01 +smooth + +8.536399031132298 +47.34971036873121 +428.7617034980019 +22.83909150749988 +89.71559400214039 +0 +120 +absolute + + + +0.01 +smooth + +8.536399935063189 +47.3497106873279 +428.7795189872586 +22.850769858303615 +89.71604538324333 +0 +120 +absolute + + + +0.01 +smooth + +8.536400844051615 +47.34971100843458 +428.79694603315056 +22.860975646782663 +89.71632904438613 +0 +120 +absolute + + + +0.01 +smooth + +8.536401757908358 +47.349711331980394 +428.81397630032524 +22.86963830420131 +89.71643747491963 +0 +120 +absolute + + + +0.01 +smooth + +8.536402678477701 +47.34971165884328 +428.8307121739871 +22.877313285177625 +89.71638811490861 +0 +120 +absolute + + + +0.01 +smooth + +8.53640360853283 +47.3497119903347 +428.8473063424903 +22.884876345781716 +89.71621669031303 +0 +120 +absolute + + + +0.01 +smooth + +8.536404547909664 +47.34971232639586 +428.86375138457436 +22.892321625905858 +89.71592742872402 +0 +120 +absolute + + + +0.01 +smooth + +8.536405496418993 +47.34971266695624 +428.8800385113017 +22.89963563188409 +89.71552426878117 +0 +120 +absolute + + + +0.01 +smooth + +8.53640645387162 +47.34971301194525 +428.8961589337349 +22.906804870050408 +89.71501114912412 +0 +120 +absolute + + + +0.01 +smooth + +8.536407420078351 +47.3497133612924 +428.9121038629367 +22.913815846738846 +89.71439200839257 +0 +120 +absolute + + + +0.01 +smooth + +8.536408394849984 +47.34971371492714 +428.9278645099699 +22.920655068283406 +89.71367078522614 +0 +120 +absolute + + + +0.01 +smooth + +8.536409377997323 +47.349714072778944 +428.9434320858971 +22.92730904101812 +89.71285141826455 +0 +120 +absolute + + + +0.01 +smooth + +8.536410369331172 +47.34971443477728 +428.9587978017809 +22.933764271276996 +89.71193784614742 +0 +120 +absolute + + + +0.01 +smooth + +8.536411368662325 +47.34971480085161 +428.97395286868414 +22.940007265394073 +89.71093400751445 +0 +120 +absolute + + + +0.01 +smooth + +8.536412375801593 +47.3497151709314 +428.98888849766934 +22.94602452970335 +89.70984384100524 +0 +120 +absolute + + + +0.01 +smooth + +8.536413390559773 +47.3497155449461 +429.0035958997993 +22.95180257053885 +89.70867128525953 +0 +120 +absolute + + + +0.01 +smooth + +8.536414412747662 +47.34971592282518 +429.0180662861367 +22.95732789423459 +89.70742027891689 +0 +120 +absolute + + + +0.01 +smooth + +8.536415442176066 +47.349716304498116 +429.03229086774394 +22.962587007124593 +89.70609476061702 +0 +120 +absolute + + + +0.01 +smooth + +8.536416478655788 +47.349716689894365 +429.046260855684 +22.96756641554287 +89.70469866899961 +0 +120 +absolute + + + +0.01 +smooth + +8.53641752199763 +47.3497170789434 +429.05996746101954 +22.97225262582345 +89.70323594270431 +0 +120 +absolute + + + +0.01 +smooth + +8.536418572012392 +47.349717471574685 +429.07340189481323 +22.976632144300346 +89.70171052037074 +0 +120 +absolute + + + +0.01 +smooth + +8.536419628510874 +47.34971786771767 +429.0865553681275 +22.980691477307573 +89.70012634063863 +0 +120 +absolute + + + +0.01 +smooth + +8.536420691303881 +47.34971826730185 +429.0994190920253 +22.98441713117916 +89.69848734214759 +0 +120 +absolute + + + +0.01 +smooth + +8.536421760202213 +47.349718670256664 +429.11198427756926 +22.987795612249116 +89.69679746353728 +0 +120 +absolute + + + +0.01 +smooth + +8.536422835016673 +47.34971907651159 +429.124242135822 +22.990813426851464 +89.69506064344739 +0 +120 +absolute + + + +0.01 +smooth + +8.53642391555806 +47.34971948599608 +429.1361838778463 +22.99345708132022 +89.69328082051756 +0 +120 +absolute + + + +0.01 +smooth + +8.536425001637177 +47.34971989863962 +429.14780071470454 +22.9957130819894 +89.69146193338744 +0 +120 +absolute + + + +0.01 +smooth + +8.536426093064827 +47.34972031437166 +429.15908385745973 +22.997567935193032 +89.68960792069674 +0 +120 +absolute + + + +0.01 +smooth + +8.536427189651809 +47.349720733121664 +429.1700245171744 +22.999008147265123 +89.68772272108508 +0 +120 +absolute + + + +0.01 +smooth + +8.536428291208928 +47.34972115481911 +429.1806139049113 +23.0000202245397 +89.68581027319212 +0 +120 +absolute + + + +0.01 +smooth + +8.536429397546982 +47.34972157939346 +429.190843231733 +23.00059067335078 +89.68387451565755 +0 +120 +absolute + + + +0.01 +smooth + +8.536430508620315 +47.34972200684472 +429.2007135858 +23.000660140177626 +89.68191041188477 +0 +120 +absolute + + + +0.01 +smooth + +8.536431627398285 +47.34972243865455 +429.2104328981763 +22.999229311730595 +89.67972619845013 +0 +120 +absolute + + + +0.01 +smooth + +8.536432754985707 +47.34972287538755 +429.22007926880866 +22.995952333839714 +89.67725113777254 +0 +120 +absolute + + + +0.01 +smooth + +8.536433891195758 +47.34972331697335 +429.22964169635196 +22.990904406012795 +89.67449590052523 +0 +120 +absolute + + + +0.01 +smooth + +8.536435035841603 +47.34972376334159 +429.2391091794604 +22.984160727757615 +89.67147115738136 +0 +120 +absolute + + + +0.01 +smooth + +8.536436188736419 +47.349724214421954 +429.24847071678846 +22.975796498581975 +89.66818757901409 +0 +120 +absolute + + + +0.01 +smooth + +8.536437349693362 +47.349724670144006 +429.2577153069907 +22.965886917993643 +89.6646558360966 +0 +120 +absolute + + + +0.01 +smooth + +8.536438518525609 +47.34972513043748 +429.2668319487217 +22.95450718550043 +89.66088659930209 +0 +120 +absolute + + + +0.01 +smooth + +8.536439695046328 +47.349725595231945 +429.2758096406357 +22.941732500610104 +89.6568905393037 +0 +120 +absolute + + + +0.01 +smooth + +8.53644087906869 +47.34972606445709 +429.2846373813873 +22.92763806283048 +89.65267832677466 +0 +120 +absolute + + + +0.01 +smooth + +8.536442070405856 +47.34972653804252 +429.2933041696309 +22.912299071669317 +89.64826063238807 +0 +120 +absolute + + + +0.01 +smooth + +8.536443268871006 +47.34972701591791 +429.3017990040212 +22.895790726634427 +89.64364812681718 +0 +120 +absolute + + + +0.01 +smooth + +8.5364444742773 +47.34972749801288 +429.31011088321225 +22.87818822723358 +89.63885148073511 +0 +120 +absolute + + + +0.01 +smooth + +8.536445686437908 +47.34972798425707 +429.31822880585895 +22.85956677297458 +89.63388136481507 +0 +120 +absolute + + + +0.01 +smooth + +8.536446905166004 +47.349728474580175 +429.32614177061566 +22.840001563365217 +89.62874844973025 +0 +120 +absolute + + + +0.01 +smooth + +8.536448130274753 +47.349728968911776 +429.33383877613676 +22.81956779791327 +89.62346340615379 +0 +120 +absolute + + + +0.01 +smooth + +8.536449361577326 +47.34972946718154 +429.3413088210767 +22.79834067612653 +89.61803690475887 +0 +120 +absolute + + + +0.01 +smooth + +8.536450598886889 +47.349729969319114 +429.34854090409004 +22.77639539751279 +89.61247961621869 +0 +120 +absolute + + + +0.01 +smooth + +8.53645184201661 +47.349730475254134 +429.3555240238313 +22.753807161579836 +89.60680221120641 +0 +120 +absolute + + + +0.01 +smooth + +8.536453090779665 +47.34973098491622 +429.36224717895493 +22.730651167835454 +89.6010153603952 +0 +120 +absolute + + + +0.01 +smooth + +8.536454344989217 +47.34973149823507 +429.36869936811536 +22.707002615787438 +89.59512973445825 +0 +120 +absolute + + + +0.01 +smooth + +8.536455604458435 +47.349732015140276 +429.374869589967 +22.68293670494358 +89.58915600406874 +0 +120 +absolute + + + +0.01 +smooth + +8.53645686900049 +47.34973253556151 +429.3807468431644 +22.65852863481166 +89.58310483989985 +0 +120 +absolute + + + +0.01 +smooth + +8.53645813842855 +47.3497330594284 +429.3863201263621 +22.63385360489947 +89.57698691262473 +0 +120 +absolute + + + +0.01 +smooth + +8.536459412555784 +47.34973358667058 +429.3915784382144 +22.6089868147148 +89.57081289291658 +0 +120 +absolute + + + +0.01 +smooth + +8.53646069119536 +47.34973411721773 +429.396510777376 +22.584003463765445 +89.56459345144856 +0 +120 +absolute + + + +0.01 +smooth + +8.536461974160447 +47.34973465099945 +429.40110614250125 +22.558978751559177 +89.55833925889384 +0 +120 +absolute + + + +0.01 +smooth + +8.536463261264219 +47.34973518794541 +429.4053535322446 +22.5339878776038 +89.55206098592564 +0 +120 +absolute + + + +0.01 +smooth + +8.536464553068363 +47.34973572837566 +429.4093087476031 +22.508718982565412 +89.54572277520263 +0 +120 +absolute + + + +0.01 +smooth + +8.536465852465634 +47.34973627382501 +429.4132354937452 +22.481650279155872 +89.53914238510488 +0 +120 +absolute + + + +0.01 +smooth + +8.536467159607126 +47.34973682439669 +429.41715262957666 +22.45267183519812 +89.53230608771067 +0 +120 +absolute + + + +0.01 +smooth + +8.536468474311386 +47.34973738002038 +429.42104932873946 +22.421845385611217 +89.52522073231223 +0 +120 +absolute + + + +0.01 +smooth + +8.536469796396975 +47.34973794062584 +429.4249147648758 +22.389232665314236 +89.51789316820194 +0 +120 +absolute + + + +0.01 +smooth + +8.536471125682445 +47.34973850614274 +429.4287381116274 +22.354895409226252 +89.51033024467199 +0 +120 +absolute + + + +0.01 +smooth + +8.536472461986357 +47.34973907650084 +429.4325085426367 +22.318895352266352 +89.50253881101473 +0 +120 +absolute + + + +0.01 +smooth + +8.536473805127258 +47.34973965162979 +429.43621523154536 +22.28129422935359 +89.49452571652243 +0 +120 +absolute + + + +0.01 +smooth + +8.536475154923714 +47.34974023145936 +429.43984735199587 +22.242153775407065 +89.4862978104874 +0 +120 +absolute + + + +0.01 +smooth + +8.536476511194273 +47.34974081591924 +429.44339407763 +22.20153572534584 +89.47786194220194 +0 +120 +absolute + + + +0.01 +smooth + +8.536477873757487 +47.349741404939124 +429.44684458208957 +22.15950181408898 +89.46922496095826 +0 +120 +absolute + + + +0.01 +smooth + +8.536479242431923 +47.34974199844877 +429.45018803901706 +22.116113776555576 +89.46039371604877 +0 +120 +absolute + + + +0.01 +smooth + +8.53648061703613 +47.349742596377865 +429.4534136220544 +22.071433347664705 +89.45137505676568 +0 +120 +absolute + + + +0.01 +smooth + +8.536481997388657 +47.349743198656085 +429.45651050484344 +22.025522262335418 +89.44217583240126 +0 +120 +absolute + + + +0.01 +smooth + +8.536483383308072 +47.349743805213215 +429.4594678610265 +21.978442255486826 +89.4328028922479 +0 +120 +absolute + + + +0.01 +smooth + +8.536484774612921 +47.34974441597893 +429.4622748642454 +21.930255062037972 +89.42326308559784 +0 +120 +absolute + + + +0.01 +smooth + +8.536486171121762 +47.349745030882936 +429.4649206881423 +21.88102241690795 +89.41356326174332 +0 +120 +absolute + + + +0.01 +smooth + +8.536487572653153 +47.34974564985495 +429.4673945063592 +21.83080605501583 +89.4037102699767 +0 +120 +absolute + + + +0.01 +smooth + +8.536488979025645 +47.34974627282471 +429.46968549253813 +21.779667711280688 +89.39371095959022 +0 +120 +absolute + + + +0.01 +smooth + +8.536490390057796 +47.3497468997219 +429.4717828203212 +21.72766912062159 +89.38357217987621 +0 +120 +absolute + + + +0.01 +smooth + +8.536491805568163 +47.34974753047624 +429.4736756633504 +21.674872017957632 +89.37330078012694 +0 +120 +absolute + + + +0.01 +smooth + +8.536493225375299 +47.34974816501745 +429.47535319526787 +21.621338138207868 +89.36290360963473 +0 +120 +absolute + + + +0.01 +smooth + +8.536494649297758 +47.34974880327524 +429.4768045897155 +21.56712921629138 +89.35238751769182 +0 +120 +absolute + + + +0.01 +smooth + +8.5364960771541 +47.34974944517931 +429.4780190203354 +21.512306987127246 +89.34175935359055 +0 +120 +absolute + + + +0.01 +smooth + +8.536497508762876 +47.349750090659384 +429.4789856607697 +21.456933185634544 +89.33102596662319 +0 +120 +absolute + + + +0.01 +smooth + +8.536498943942643 +47.34975073964519 +429.4796936846604 +21.401069546732337 +89.320194206082 +0 +120 +absolute + + + +0.01 +smooth + +8.536500382511957 +47.34975139206641 +429.4801322656495 +21.34477780533971 +89.30927092125933 +0 +120 +absolute + + + +0.01 +smooth + +8.536501824289374 +47.34975204785278 +429.48029057737904 +21.28811969637574 +89.2982629614474 +0 +120 +absolute + + + +0.01 +smooth + +8.536503270779148 +47.34975270787328 +429.4802526141333 +21.230422444589948 +89.28709056741202 +0 +120 +absolute + + + +0.01 +smooth + +8.536504723850218 +47.349753373197 +429.48013123597747 +21.17084594135921 +89.27565474938949 +0 +120 +absolute + + + +0.01 +smooth + +8.53650618333388 +47.34975404375579 +429.4799295080576 +21.10943306556019 +89.26396092239706 +0 +120 +absolute + + + +0.01 +smooth + +8.53650764905677 +47.34975471947893 +429.47965023853953 +21.046228723711888 +89.25201474086695 +0 +120 +absolute + + + +0.01 +smooth + +8.536509120845526 +47.34975540029568 +429.4792962355896 +20.981277822333325 +89.23982185923137 +0 +120 +absolute + + + +0.01 +smooth + +8.53651059852678 +47.34975608613531 +429.4788703073737 +20.914625267943546 +89.22738793192252 +0 +120 +absolute + + + +0.01 +smooth + +8.536512081927166 +47.34975677692708 +429.4783752620579 +20.84631596706155 +89.21471861337265 +0 +120 +absolute + + + +0.01 +smooth + +8.536513570873321 +47.349757472600295 +429.4778139078083 +20.776394826206367 +89.20181955801398 +0 +120 +absolute + + + +0.01 +smooth + +8.53651506519188 +47.34975817308418 +429.4771890527909 +20.704906751897017 +89.18869642027875 +0 +120 +absolute + + + +0.01 +smooth + +8.536516564709476 +47.34975887830801 +429.4765035051716 +20.631896650652518 +89.17535485459908 +0 +120 +absolute + + + +0.01 +smooth + +8.536518069252743 +47.34975958820107 +429.4757600731166 +20.5574094289919 +89.16180051540724 +0 +120 +absolute + + + +0.01 +smooth + +8.536519578648319 +47.349760302692616 +429.4749615647919 +20.48148999343417 +89.14803905713546 +0 +120 +absolute + + + +0.01 +smooth + +8.536521092722834 +47.34976102171191 +429.4741107883634 +20.404183250498356 +89.13407613421595 +0 +120 +absolute + + + +0.01 +smooth + +8.536522611302928 +47.34976174518824 +429.4732105519974 +20.32553410670349 +89.11991740108088 +0 +120 +absolute + + + +0.01 +smooth + +8.536524134215233 +47.34976247305086 +429.4722636638596 +20.245587468568583 +89.10556851216253 +0 +120 +absolute + + + +0.01 +smooth + +8.536525661286383 +47.34976320522904 +429.47127293211645 +20.164388242612652 +89.0910351218931 +0 +120 +absolute + + + +0.01 +smooth + +8.536527192343017 +47.34976394165206 +429.4702411649336 +20.08198133535473 +89.07632288470478 +0 +120 +absolute + + + +0.01 +smooth + +8.536528727211767 +47.349764682249166 +429.46917117047735 +19.998411653313827 +89.06143745502979 +0 +120 +absolute + + + +0.01 +smooth + +8.536530265719266 +47.34976542694964 +429.4680657569135 +19.91372410300897 +89.04638448730039 +0 +120 +absolute + + + +0.01 +smooth + +8.53653180769215 +47.349766175682745 +429.4669277324083 +19.827963590959182 +89.03116963594873 +0 +120 +absolute + + + +0.01 +smooth + +8.536533352957058 +47.349766928377754 +429.4657599051277 +19.741175023683482 +89.01579855540706 +0 +120 +absolute + + + +0.01 +smooth + +8.536534901340616 +47.349767684963936 +429.4645650832378 +19.653403307700884 +89.00027690010761 +0 +120 +absolute + + + +0.01 +smooth + +8.536536452669468 +47.34976844537056 +429.4633460749045 +19.56469334953042 +88.98461032448257 +0 +120 +absolute + + + +0.01 +smooth + +8.536538006770243 +47.34976920952687 +429.46210568829395 +19.475090055691116 +88.96880448296417 +0 +120 +absolute + + + +0.01 +smooth + +8.53653956346958 +47.349769977362165 +429.46084673157213 +19.38463833270197 +88.95286502998461 +0 +120 +absolute + + + +0.01 +smooth + +8.536541122594109 +47.3497707488057 +429.45957201290514 +19.293383087082027 +88.93679761997612 +0 +120 +absolute + + + +0.01 +smooth + +8.536542683970467 +47.34977152378675 +429.458284340459 +19.2013692253503 +88.92060790737091 +0 +120 +absolute + + + +0.01 +smooth + +8.53654424757582 +47.34977230232472 +429.45697728171695 +19.108583010461455 +88.90429417764994 +0 +120 +absolute + + + +0.01 +smooth + +8.53654581561463 +47.34977308577106 +429.45550982259846 +19.01414236380239 +88.88774568769566 +0 +120 +absolute + + + +0.01 +smooth + +8.536547388742056 +47.34977387454456 +429.45384090070996 +18.917767302434726 +88.87092754213528 +0 +120 +absolute + + + +0.01 +smooth + +8.53654896679448 +47.349774668573076 +429.4519803367294 +18.819496626348343 +88.85384492720584 +0 +120 +absolute + + + +0.01 +smooth + +8.536550549608311 +47.34977546778447 +429.4499379513355 +18.719369135533103 +88.8365030291443 +0 +120 +absolute + + + +0.01 +smooth + +8.536552137019926 +47.34977627210657 +429.44772356520645 +18.617423629978877 +88.81890703418759 +0 +120 +absolute + + + +0.01 +smooth + +8.536553728865728 +47.34977708146724 +429.44534699902067 +18.513698909675565 +88.80106212857268 +0 +120 +absolute + + + +0.01 +smooth + +8.536555324982107 +47.34977789579435 +429.4428180734567 +18.40823377461301 +88.78297349853653 +0 +120 +absolute + + + +0.01 +smooth + +8.536556925205451 +47.349778715015695 +429.4401466091924 +18.30106702478109 +88.76464633031608 +0 +120 +absolute + + + +0.01 +smooth + +8.536558529372158 +47.34977953905916 +429.43734242690664 +18.19223746016971 +88.74608581014837 +0 +120 +absolute + + + +0.01 +smooth + +8.536560137318618 +47.349780367852595 +429.4344153472774 +18.081783880768707 +88.72729712427028 +0 +120 +absolute + + + +0.01 +smooth + +8.536561748881224 +47.34978120132385 +429.4313751909833 +17.969745086567976 +88.70828545891881 +0 +120 +absolute + + + +0.01 +smooth + +8.53656336389637 +47.349782039400765 +429.4282317787025 +17.85615987755738 +88.68905600033091 +0 +120 +absolute + + + +0.01 +smooth + +8.53656498220044 +47.349782882011176 +429.42499493111325 +17.741067053726805 +88.66961393474348 +0 +120 +absolute + + + +0.01 +smooth + +8.536566603629838 +47.349783729082944 +429.4216744688943 +17.62450541506611 +88.64996444839359 +0 +120 +absolute + + + +0.01 +smooth + +8.536568228020947 +47.349784580543925 +429.4182802127237 +17.506513761565177 +88.63011272751812 +0 +120 +absolute + + + +0.01 +smooth + +8.536569855210164 +47.34978543632196 +429.41482198327975 +17.387130893213886 +88.61006395835406 +0 +120 +absolute + + + +0.01 +smooth + +8.536571485033882 +47.349786296344895 +429.411309601241 +17.266395610002093 +88.58982332713838 +0 +120 +absolute + + + +0.01 +smooth + +8.53657311732849 +47.34978716054058 +429.4077528872857 +17.14434671191968 +88.56939602010802 +0 +120 +absolute + + + +0.01 +smooth + +8.536574751930385 +47.34978802883687 +429.4041616620922 +17.02102299895653 +88.54878722349994 +0 +120 +absolute + + + +0.01 +smooth + +8.536576388675954 +47.34978890116161 +429.4005457463388 +16.896463271102515 +88.5280021235511 +0 +120 +absolute + + + +0.01 +smooth + +8.536578027401593 +47.349789777442645 +429.396914960704 +16.770706328347494 +88.50704590649848 +0 +120 +absolute + + + +0.01 +smooth + +8.536579667943691 +47.34979065760783 +429.393279125866 +16.64379097068135 +88.48592375857902 +0 +120 +absolute + + + +0.01 +smooth + +8.536581310138644 +47.349791541585 +429.3896480625033 +16.515755998093972 +88.4646408660297 +0 +120 +absolute + + + +0.01 +smooth + +8.536582953822844 +47.34979242930202 +429.38603159129406 +16.386640210575205 +88.44320241508746 +0 +120 +absolute + + + +0.01 +smooth + +8.536584598832683 +47.349793320686736 +429.38243953291675 +16.25648240811494 +88.42161359198924 +0 +120 +absolute + + + +0.01 +smooth + +8.53658624500455 +47.34979421566698 +429.37888170804973 +16.12532139070306 +88.39987958297208 +0 +120 +absolute + + + +0.01 +smooth + +8.536587892174841 +47.34979511417062 +429.37536793737127 +15.993195958329416 +88.37800557427286 +0 +120 +absolute + + + +0.01 +smooth + +8.536589540817442 +47.34979601653537 +429.3718783170236 +15.859902245662832 +88.35596559918451 +0 +120 +absolute + + + +0.01 +smooth + +8.53659119296863 +47.34979692409934 +429.3683176675143 +15.72464224611557 +88.3336574929326 +0 +120 +absolute + + + +0.01 +smooth + +8.53659284865935 +47.34979783690675 +429.3646815021354 +15.587381985534911 +88.31107726479868 +0 +120 +absolute + + + +0.01 +smooth + +8.53659450773591 +47.34979875488282 +429.3609738339627 +15.448157798006749 +88.28822995356397 +0 +120 +absolute + + + +0.01 +smooth + +8.536596170044621 +47.34979967795286 +429.35719867607327 +15.307006017617034 +88.26512059800982 +0 +120 +absolute + + + +0.01 +smooth + +8.536597835431794 +47.349800606042116 +429.35336004154306 +15.163962978451707 +88.2417542369174 +0 +120 +absolute + + + +0.01 +smooth + +8.536599503743735 +47.3498015390759 +429.3494619434486 +15.01906501459668 +88.21813590906811 +0 +120 +absolute + + + +0.01 +smooth + +8.536601174826759 +47.349802476979455 +429.34550839486633 +14.872348460137896 +88.19427065324321 +0 +120 +absolute + + + +0.01 +smooth + +8.536602848527169 +47.349803419678054 +429.3415034088724 +14.723849649161279 +88.17016350822394 +0 +120 +absolute + + + +0.01 +smooth + +8.536604524691278 +47.349804367097 +429.3374509985437 +14.573604915752783 +88.14581951279166 +0 +120 +absolute + + + +0.01 +smooth + +8.536606203165395 +47.34980531916153 +429.3333551769561 +14.421650593998308 +88.12124370572761 +0 +120 +absolute + + + +0.01 +smooth + +8.536607883795828 +47.349806275796944 +429.3292199571862 +14.268023017983797 +88.09644112581306 +0 +120 +absolute + + + +0.01 +smooth + +8.536609566428893 +47.349807236928534 +429.3250493523106 +14.112758521795206 +88.07141681182938 +0 +120 +absolute + + + +0.01 +smooth + +8.536611250910893 +47.349808202481526 +429.32084737540544 +13.955893439518427 +88.04617580255776 +0 +120 +absolute + + + +0.01 +smooth + +8.536612937088142 +47.34980917238124 +429.31661803954734 +13.797464105239415 +88.0207231367796 +0 +120 +absolute + + + +0.01 +smooth + +8.536614624806946 +47.349810146552926 +429.3123653578124 +13.637506853044105 +87.99506385327608 +0 +120 +absolute + + + +0.01 +smooth + +8.536616313913616 +47.34981112492188 +429.3080933432773 +13.47605801701841 +87.96920299082853 +0 +120 +absolute + + + +0.01 +smooth + +8.53661800425446 +47.34981210741334 +429.30380600901816 +13.313153931248271 +87.94314558821824 +0 +120 +absolute + + + +0.01 +smooth + +8.53661969567579 +47.349813093952605 +429.29950736811156 +13.14883092981962 +87.91689668422651 +0 +120 +absolute + + + +0.01 +smooth + +8.536621388023917 +47.34981408446495 +429.2952014336339 +12.983125346818404 +87.89046131763465 +0 +120 +absolute + + + +0.01 +smooth + +8.536623081145146 +47.34981507887566 +429.2908922186615 +12.816073516330526 +87.86384452722386 +0 +120 +absolute + + + +0.01 +smooth + +8.53662477488579 +47.34981607710997 +429.2865837362709 +12.647711772441932 +87.8370513517755 +0 +120 +absolute + + + +0.01 +smooth + +8.536626469092159 +47.34981707909319 +429.28227999953833 +12.478076449238566 +87.81008683007087 +0 +120 +absolute + + + +0.01 +smooth + +8.53662816361056 +47.349818084750595 +429.2779850215403 +12.307203880806332 +87.7829560008912 +0 +120 +absolute + + + +0.01 +smooth + +8.536629858287304 +47.34981909400744 +429.2737028153531 +12.135130401231178 +87.75566390301782 +0 +120 +absolute + + + +0.01 +smooth + +8.536631552968702 +47.34982010678901 +429.2694373940532 +11.961892344599045 +87.72821557523201 +0 +120 +absolute + + + +0.01 +smooth + +8.53663324750106 +47.34982112302058 +429.265192770717 +11.787526044995843 +87.70061605631506 +0 +120 +absolute + + + +0.01 +smooth + +8.536634941730691 +47.349822142627424 +429.2609729584209 +11.612067836507512 +87.67287038504823 +0 +120 +absolute + + + +0.01 +smooth + +8.536636636891535 +47.349823166480526 +429.256751806716 +11.435028356270731 +87.6449155669286 +0 +120 +absolute + + + +0.01 +smooth + +8.536638334223023 +47.34982419544859 +429.2525021062257 +11.255917714895938 +87.616688623022 +0 +120 +absolute + + + +0.01 +smooth + +8.536640033579681 +47.34982522945336 +429.24822628163395 +11.074771456679631 +87.58819461546285 +0 +120 +absolute + + + +0.01 +smooth + +8.536641734816042 +47.34982626841666 +429.2439267576253 +10.891625125918369 +87.55943860638557 +0 +120 +absolute + + + +0.01 +smooth + +8.53664343778664 +47.34982731226026 +429.23960595888377 +10.706514266908696 +87.53042565792454 +0 +120 +absolute + + + +0.01 +smooth + +8.536645142346007 +47.349828360905946 +429.2352663100938 +10.519474423947123 +87.50116083221425 +0 +120 +absolute + + + +0.01 +smooth + +8.536646848348676 +47.34982941427554 +429.2309102359396 +10.330541141330203 +87.4716491913891 +0 +120 +absolute + + + +0.01 +smooth + +8.536648555649178 +47.34983047229077 +429.2265401611051 +10.139749963354467 +87.44189579758346 +0 +120 +absolute + + + +0.01 +smooth + +8.536650264102045 +47.34983153487349 +429.22215851027516 +9.947136434316475 +87.41190571293181 +0 +120 +absolute + + + +0.01 +smooth + +8.536651973561806 +47.34983260194544 +429.21776770813364 +9.75273609851272 +87.38168399956854 +0 +120 +absolute + + + +0.01 +smooth + +8.536653683883 +47.34983367342842 +429.2133701793647 +9.556584500239762 +87.35123571962806 +0 +120 +absolute + + + +0.01 +smooth + +8.536655394920157 +47.34983474924425 +429.20896834865306 +9.358717183794159 +87.32056593524486 +0 +120 +absolute + + + +0.01 +smooth + +8.536657106527805 +47.349835829314664 +429.2045646406826 +9.159169693472402 +87.2896797085533 +0 +120 +absolute + + + +0.01 +smooth + +8.536658818560479 +47.349836913561504 +429.20016148013775 +8.957977573571057 +87.25858210168784 +0 +120 +absolute + + + +0.01 +smooth + +8.536660530872712 +47.349838001906534 +429.19576129170264 +8.75517636838667 +87.22727817678285 +0 +120 +absolute + + + +0.01 +smooth + +8.536662243319038 +47.34983909427154 +429.19136650006163 +8.55080162221574 +87.19577299597279 +0 +120 +absolute + + + +0.01 +smooth + +8.536663955753983 +47.349840190578306 +429.186979529899 +8.344888879354828 +87.16407162139207 +0 +120 +absolute + + + +0.01 +smooth + +8.536665668032084 +47.34984129074864 +429.18260280589897 +8.137473684100469 +87.1321791151751 +0 +120 +absolute + + + +0.01 +smooth + +8.536667380007872 +47.34984239470432 +429.17823875274564 +7.928591580749212 +87.10010053945635 +0 +120 +absolute + + + +0.01 +smooth + +8.53666909153588 +47.34984350236713 +429.1738897951235 +7.718278113597564 +87.06784095637019 +0 +120 +absolute + + + +0.01 +smooth + +8.536670802470638 +47.34984461365886 +429.1695583577168 +7.506568826942077 +87.03540542805106 +0 +120 +absolute + + + +0.01 +smooth + +8.53667251266668 +47.34984572850131 +429.1652468652097 +7.293499265079305 +87.00279901663339 +0 +120 +absolute + + + +0.01 +smooth + +8.536674221978538 +47.34984684681626 +429.16095774228654 +7.079104972305748 +86.97002678425159 +0 +120 +absolute + + + +0.01 +smooth + +8.536675930260744 +47.349847968525495 +429.1566934136314 +6.863421492917961 +86.93709379304008 +0 +120 +absolute + + + +0.01 +smooth + +8.536677637367829 +47.3498490935508 +429.1524563039287 +6.64648437121248 +86.90400510513328 +0 +120 +absolute + + + +0.01 +smooth + +8.536679343154326 +47.34985022181398 +429.1482488378628 +6.428329151485864 +86.87076578266564 +0 +120 +absolute + + + +0.01 +smooth + +8.53668104747477 +47.349851353236815 +429.1440734401177 +6.2089913780346055 +86.83738088777156 +0 +120 +absolute + + + +0.01 +smooth + +8.536682750345612 +47.34985248785463 +429.1399300997027 +5.988446677272251 +86.8038476904054 +0 +120 +absolute + + + +0.01 +smooth + +8.536684453545995 +47.349853626936486 +429.1357921084365 +5.7660189273704745 +86.77007873612064 +0 +120 +absolute + + + +0.01 +smooth + +8.536686157493 +47.34985477079224 +429.1316528691295 +5.5415370525323855 +86.73605232042527 +0 +120 +absolute + + + +0.01 +smooth + +8.536687862045552 +47.34985591933985 +429.12751413812265 +5.315036635203149 +86.70177362211187 +0 +120 +absolute + + + +0.01 +smooth + +8.536689567062576 +47.349857072497365 +429.1233776717579 +5.086553257827929 +86.66724781997304 +0 +120 +absolute + + + +0.01 +smooth + +8.536691272402983 +47.34985823018273 +429.11924522637656 +4.856122502851831 +86.63248009280139 +0 +120 +absolute + + + +0.01 +smooth + +8.536692977925702 +47.349859392313974 +429.11511855832015 +4.623779952720021 +86.59747561938948 +0 +120 +absolute + + + +0.01 +smooth + +8.536694683489657 +47.349860558809105 +429.1109994239304 +4.389561189877643 +86.56223957852995 +0 +120 +absolute + + + +0.01 +smooth + +8.536696388953759 +47.34986172958609 +429.1068895795485 +4.153501796769863 +86.52677714901537 +0 +120 +absolute + + + +0.01 +smooth + +8.53669809417694 +47.349862904562954 +429.10279078151626 +3.9156373558417847 +86.49109350963839 +0 +120 +absolute + + + +0.01 +smooth + +8.536699799018116 +47.34986408365768 +429.09870478617506 +3.6760034495385745 +86.45519383919152 +0 +120 +absolute + + + +0.01 +smooth + +8.536701503336207 +47.34986526678825 +429.0946333498663 +3.434635660305396 +86.41908331646736 +0 +120 +absolute + + + +0.01 +smooth + +8.536703206990138 +47.34986645387269 +429.0905782289317 +3.1915695705873537 +86.38276712025859 +0 +120 +absolute + + + +0.01 +smooth + +8.536704909838825 +47.349867644829 +429.0865411797126 +2.946840762829613 +86.3462504293577 +0 +120 +absolute + + + +0.01 +smooth + +8.536706611741195 +47.34986883957514 +429.0825239585505 +2.700484819477319 +86.30953842255735 +0 +120 +absolute + + + +0.01 +smooth + +8.536708312556167 +47.349870038029145 +429.07852832178713 +2.452537322975641 +86.27263627865015 +0 +120 +absolute + + + +0.01 +smooth + +8.53671001214266 +47.349871240108996 +429.0745560257638 +2.203033855769677 +86.23554917642863 +0 +120 +absolute + + + +0.01 +smooth + +8.5367117103596 +47.34987244573271 +429.0706088268222 +1.9520100003045948 +86.19828229468543 +0 +120 +absolute + + + +0.01 +smooth + +8.536713407065903 +47.34987365481827 +429.0666884813036 +1.6995013390255616 +86.16084081221315 +0 +120 +absolute + + + +0.01 +smooth + +8.536715102120494 +47.34987486728366 +429.0627967455497 +1.4455434543776788 +86.12322990780436 +0 +120 +absolute + + + +0.01 +smooth + +8.536716795382294 +47.349876083046894 +429.05893537590197 +1.1901719288061121 +86.08545476025168 +0 +120 +absolute + + + +0.01 +smooth + +8.536718486710221 +47.34987730202597 +429.05510612870194 +0.9334223447560308 +86.04752054834768 +0 +120 +absolute + + + +0.01 +smooth + +8.536720175963202 +47.34987852413889 +429.051310760291 +0.675330284672533 +86.00943245088496 +0 +120 +absolute + + + +0.01 +smooth + +8.536721863000153 +47.34987974930364 +429.04755102701085 +0.4159313310007876 +85.97119564665611 +0 +120 +absolute + + + +0.01 +smooth + +8.536723547679998 +47.349880977438225 +429.04382868520287 +0.15526106618593832 +85.93281531445376 +0 +120 +absolute + + + +0.01 +smooth + +8.536725229861657 +47.349882208460635 +429.0401454912086 +-0.10664492732684505 +85.89429663307047 +0 +120 +absolute + + + +0.01 +smooth + +8.536726909404052 +47.34988344228888 +429.0365032013696 +-0.36975106709246564 +85.85564478129885 +0 +120 +absolute + + + +0.01 +smooth + +8.536728586166102 +47.34988467884094 +429.0329035720273 +-0.6340217706657538 +85.81686493793148 +0 +120 +absolute + + + +0.01 +smooth + +8.536730260658528 +47.349885918479735 +429.02933979907124 +-0.8996458944520318 +85.77793288839644 +0 +120 +absolute + + + +0.01 +smooth + +8.5367319346283 +47.34988716241093 +429.025788687339 +-1.1672380911375424 +85.73876870719035 +0 +120 +absolute + + + +0.01 +smooth + +8.536733608052373 +47.34988841063103 +429.02225012705594 +-1.4368036346719948 +85.69937233071475 +0 +120 +absolute + + + +0.01 +smooth + +8.536735280787958 +47.3498896630547 +429.0187255763009 +-1.708306569952926 +85.65974909653376 +0 +120 +absolute + + + +0.01 +smooth + +8.536736952692264 +47.34989091959661 +429.0152164931527 +-1.9817109418778496 +85.61990434221156 +0 +120 +absolute + + + +0.01 +smooth + +8.536738623622504 +47.34989218017149 +429.011724335691 +-2.256980795344352 +85.57984340531239 +0 +120 +absolute + + + +0.01 +smooth + +8.536740293435887 +47.34989344469401 +429.0082505619941 +-2.534080175249946 +85.5395716234004 +0 +120 +absolute + + + +0.01 +smooth + +8.536741961989627 +47.34989471307888 +429.00479663014175 +-2.812973126492145 +85.49909433403988 +0 +120 +absolute + + + +0.01 +smooth + +8.53674362914093 +47.3498959852408 +429.00136399821247 +-3.0936236939685364 +85.45841687479493 +0 +120 +absolute + + + +0.01 +smooth + +8.536745294747009 +47.349897261094426 +428.9979541242857 +-3.375995922576631 +85.4175445832298 +0 +120 +absolute + + + +0.01 +smooth + +8.536746958665079 +47.349898540554484 +428.9945684664402 +-3.6600538572139447 +85.3764827969087 +0 +120 +absolute + + + +0.01 +smooth + +8.536748620752347 +47.34989982353566 +428.9912084827552 +-3.945761542778062 +85.33523685339578 +0 +120 +absolute + + + +0.01 +smooth + +8.536750280866023 +47.34990110995265 +428.98787563130975 +-4.233083024166498 +85.2938120902553 +0 +120 +absolute + + + +0.01 +smooth + +8.53675193886332 +47.34990239972013 +428.9845713701828 +-4.521982346276788 +85.2522138450514 +0 +120 +absolute + + + +0.01 +smooth + +8.536753594601448 +47.349903692752804 +428.98129715745335 +-4.812423554006446 +85.21044745534832 +0 +120 +absolute + + + +0.01 +smooth + +8.536755247937617 +47.34990498896537 +428.9780544512007 +-5.1043706922530605 +85.16851825871022 +0 +120 +absolute + + + +0.01 +smooth + +8.536756898729038 +47.34990628827252 +428.97484470950354 +-5.3977878059141435 +85.12643159270134 +0 +120 +absolute + + + +0.01 +smooth + +8.536758546832923 +47.349907590588934 +428.9716693904413 +-5.692638939887205 +85.08419279488587 +0 +120 +absolute + + + +0.01 +smooth + +8.536760192106481 +47.349908895829316 +428.9685299520928 +-5.988888139069836 +85.04180720282798 +0 +120 +absolute + + + +0.01 +smooth + +8.536761834406928 +47.34991020390835 +428.9654278525371 +-6.286499448359549 +84.9992801540919 +0 +120 +absolute + + + +0.01 +smooth + +8.536763473591467 +47.349911514740754 +428.9623645498533 +-6.585436912653853 +84.95661698624183 +0 +120 +absolute + + + +0.01 +smooth + +8.536765109517315 +47.34991282824119 +428.9593415021204 +-6.885664576850338 +84.91382303684193 +0 +120 +absolute + + + +0.01 +smooth + +8.53676674204168 +47.349914144324366 +428.9563601674176 +-7.18714648584652 +84.87090364345644 +0 +120 +absolute + + + +0.01 +smooth + +8.536768371021774 +47.349915462904974 +428.9534220038238 +-7.4898466845399305 +84.82786414364955 +0 +120 +absolute + + + +0.01 +smooth + +8.536769996314806 +47.34991678389771 +428.95052846941803 +-7.7937292178280835 +84.78470987498547 +0 +120 +absolute + + + +0.01 +smooth + +8.53677161777799 +47.34991810721725 +428.9476810222794 +-8.098758130608571 +84.74144617502836 +0 +120 +absolute + + + +0.01 +smooth + +8.536773235268534 +47.3499194327783 +428.9448811204871 +-8.404897467778904 +84.69807838134244 +0 +120 +absolute + + + +0.01 +smooth + +8.53677484864723 +47.34992076049779 +428.9421301767768 +-8.712112347909093 +84.65461168880442 +0 +120 +absolute + + + +0.01 +smooth + +8.536776459337695 +47.3499220912604 +428.9394097755343 +-9.020837018369795 +84.61098896764662 +0 +120 +absolute + + + +0.01 +smooth + +8.536778068481222 +47.349923425778904 +428.9367049441377 +-9.331422814289452 +84.56716418301089 +0 +120 +absolute + + + +0.01 +smooth + +8.536779675925073 +47.34992476396599 +428.934017067923 +-9.643833420927086 +84.52314283462121 +0 +120 +absolute + + + +0.01 +smooth + +8.536781281516504 +47.34992610573428 +428.93134753222574 +-9.958032523541654 +84.47893042220153 +0 +120 +absolute + + + +0.01 +smooth + +8.53678288510278 +47.34992745099646 +428.92869772238186 +-10.273983807392222 +84.43453244547581 +0 +120 +absolute + + + +0.01 +smooth + +8.536784486531154 +47.34992879966512 +428.92606902372705 +-10.59165095773776 +84.38995440416795 +0 +120 +absolute + + + +0.01 +smooth + +8.536786085648892 +47.349930151653 +428.9234628215971 +-10.910997659837253 +84.34520179800201 +0 +120 +absolute + + + +0.01 +smooth + +8.536787682303247 +47.34993150687268 +428.92088050132764 +-11.231987598949745 +84.30028012670185 +0 +120 +absolute + + + +0.01 +smooth + +8.536789276341484 +47.34993286523685 +428.9183234482545 +-11.554584460334217 +84.25519488999146 +0 +120 +absolute + + + +0.01 +smooth + +8.536790867610863 +47.34993422665818 +428.9157930477136 +-11.878751929249647 +84.20995158759483 +0 +120 +absolute + + + +0.01 +smooth + +8.536792455958638 +47.349935591049295 +428.91329068504047 +-12.204453690955086 +84.16455571923584 +0 +120 +absolute + + + +0.01 +smooth + +8.536794041232076 +47.349936958322864 +428.91081774557097 +-12.531653430709515 +84.1190127846385 +0 +120 +absolute + + + +0.01 +smooth + +8.536795623278431 +47.34993832839155 +428.9083756146409 +-12.86031483377193 +84.07332828352679 +0 +120 +absolute + + + +0.01 +smooth + +8.536797201944964 +47.34993970116798 +428.90596567758587 +-13.190401585401304 +84.02750771562458 +0 +120 +absolute + + + +0.01 +smooth + +8.536798777078936 +47.349941076564825 +428.9035893197419 +-13.521877370856707 +83.98155658065589 +0 +120 +absolute + + + +0.01 +smooth + +8.536800348527604 +47.34994245449475 +428.90124792644446 +-13.854705875397102 +83.93548037834466 +0 +120 +absolute + + + +0.01 +smooth + +8.536801916138232 +47.349943834870395 +428.8989428830296 +-14.188850784281467 +83.88928460841484 +0 +120 +absolute + + + +0.01 +smooth + +8.536803479758076 +47.34994521760442 +428.8966755748327 +-14.524275782768857 +83.84297477059036 +0 +120 +absolute + + + +0.01 +smooth + +8.536805039234396 +47.34994660260947 +428.89444738719 +-14.860944556118255 +83.79655636459523 +0 +120 +absolute + + + +0.01 +smooth + +8.536806594414452 +47.34994798979821 +428.8922597054368 +-15.198820789588655 +83.75003489015337 +0 +120 +absolute + + + +0.01 +smooth + +8.536808145145505 +47.34994937908329 +428.8901139149092 +-15.537868168439031 +83.70341584698875 +0 +120 +absolute + + + +0.01 +smooth + +8.536809691274811 +47.349950770377376 +428.8880114009428 +-15.878050377928446 +83.6567047348253 +0 +120 +absolute + + + +0.01 +smooth + +8.536811232649637 +47.34995216359311 +428.8859535488734 +-16.219331103315874 +83.60990705338702 +0 +120 +absolute + + + +0.01 +smooth + +8.536812769117233 +47.34995355864315 +428.8839417440367 +-16.561674029860285 +83.56302830239781 +0 +120 +absolute + + + +0.01 +smooth + +8.536814300524867 +47.349954955440154 +428.88197737176847 +-16.90504284282074 +83.51607398158167 +0 +120 +absolute + + + +0.01 +smooth + +8.536815826719792 +47.34995635389676 +428.8800618174047 +-17.24940122745621 +83.46904959066254 +0 +120 +absolute + + + +0.01 +smooth + +8.53681734754927 +47.34995775392565 +428.87819646628077 +-17.594712869025674 +83.42196062936435 +0 +120 +absolute + + + +0.01 +smooth + +8.536818863124486 +47.349959155576705 +428.8763793258997 +-17.9410057823904 +83.37480382059172 +0 +120 +absolute + + + +0.01 +smooth + +8.536820375727332 +47.349960560032024 +428.8745805985529 +-18.28883867253264 +83.32750352321507 +0 +120 +absolute + + + +0.01 +smooth + +8.536821885779839 +47.34996196751285 +428.87279424760635 +-18.638319882588057 +83.2800456178161 +0 +120 +absolute + + + +0.01 +smooth + +8.53682339310899 +47.349963377931566 +428.8710218479215 +-18.98941300874293 +83.23243574103488 +0 +120 +absolute + + + +0.01 +smooth + +8.536824897541777 +47.34996479120062 +428.8692649743602 +-19.342081647183644 +83.1846795295117 +0 +120 +absolute + + + +0.01 +smooth + +8.536826398905188 +47.34996620723243 +428.86752520178425 +-19.696289394096503 +83.13678261988679 +0 +120 +absolute + + + +0.01 +smooth + +8.536827897026203 +47.34996762593937 +428.865804105055 +-20.051999845667776 +83.08875064880024 +0 +120 +absolute + + + +0.01 +smooth + +8.536829391731821 +47.34996904723391 +428.86410325903444 +-20.409176598083864 +83.04058925289235 +0 +120 +absolute + + + +0.01 +smooth + +8.536830882849024 +47.349970471028435 +428.86242423858414 +-20.76778324753105 +82.99230406880328 +0 +120 +absolute + + + +0.01 +smooth + +8.536832370204795 +47.34997189723535 +428.86076861856566 +-21.127783390195656 +82.94390073317321 +0 +120 +absolute + + + +0.01 +smooth + +8.53683385362613 +47.349973325767095 +428.8591379738409 +-21.48914062226398 +82.89538488264238 +0 +120 +absolute + + + +0.01 +smooth + +8.536835332940008 +47.349974756536064 +428.8575338792714 +-21.85181853992239 +82.84676215385097 +0 +120 +absolute + + + +0.01 +smooth + +8.53683680797342 +47.34997618945468 +428.8559579097188 +-22.21578073935719 +82.79803818343917 +0 +120 +absolute + + + +0.01 +smooth + +8.53683827855336 +47.34997762443536 +428.854411640045 +-22.58099081675467 +82.74921860804723 +0 +120 +absolute + + + +0.01 +smooth + +8.536839744506809 +47.34997906139052 +428.85289664511146 +-22.94741236830122 +82.7003090643153 +0 +120 +absolute + + + +0.01 +smooth + +8.536841205660755 +47.349980500232576 +428.85141449978005 +-23.315008990183117 +82.65131518888359 +0 +120 +absolute + + + +0.01 +smooth + +8.536842661842186 +47.349981940873946 +428.8499667789124 +-23.683744278586655 +82.60224261839232 +0 +120 +absolute + + + +0.01 +smooth + +8.536844112878093 +47.34998338322703 +428.84855505737016 +-24.053581829698228 +82.55309698948169 +0 +120 +absolute + + + +0.01 +smooth + +8.53684555859546 +47.34998482720426 +428.8471809100149 +-24.42448523970412 +82.50388393879189 +0 +120 +absolute + + + +0.01 +smooth + +8.536846998821273 +47.34998627271803 +428.8458459117086 +-24.796418104790643 +82.4546091029631 +0 +120 +absolute + + + +0.01 +smooth + +8.536848433382524 +47.34998771968078 +428.84455163731263 +-25.169344021144102 +82.40527811863555 +0 +120 +absolute + + + +0.01 +smooth + +8.536849862106198 +47.34998916800492 +428.8432996616889 +-25.54322658495088 +82.35589662244942 +0 +120 +absolute + + + +0.01 +smooth + +8.536851284819283 +47.34999061760284 +428.8420915596988 +-25.918029392397266 +82.30647025104496 +0 +120 +absolute + + + +0.01 +smooth + +8.536852701348769 +47.34999206838698 +428.84092890620445 +-26.29371603966954 +82.25700464106231 +0 +120 +absolute + + + +0.01 +smooth + +8.536854111521642 +47.34999352026976 +428.8398132760672 +-26.67025012295411 +82.20750542914169 +0 +120 +absolute + + + +0.01 +smooth + +8.536855515164886 +47.34999497316358 +428.8387462441489 +-27.047595238437243 +82.15797825192332 +0 +120 +absolute + + + +0.01 +smooth + +8.536856912105494 +47.34999642698085 +428.83772938531115 +-27.425714982305273 +82.1084287460474 +0 +120 +absolute + + + +0.01 +smooth + +8.536858302170451 +47.349997881634 +428.8367642744157 +-27.80457295074449 +82.0588625481541 +0 +120 +absolute + + + +0.01 +smooth + +8.536859686320774 +47.34999933749828 +428.8358355035034 +-28.184343989844052 +82.00925521905545 +0 +120 +absolute + + + +0.01 +smooth + +8.536861067138501 +47.350000795618335 +428.83490371481264 +-28.56550826830336 +81.95953892467253 +0 +120 +absolute + + + +0.01 +smooth + +8.536862444543594 +47.35000225595961 +428.83396972253433 +-28.948053210986984 +81.90971605289378 +0 +120 +absolute + + + +0.01 +smooth + +8.536863818329683 +47.35000371843622 +428.8330362396958 +-29.331942774300458 +81.85979233434541 +0 +120 +absolute + + + +0.01 +smooth + +8.53686518829038 +47.350005182962214 +428.83210597932396 +-29.717140914649224 +81.80977349965356 +0 +120 +absolute + + + +0.01 +smooth + +8.536866554219314 +47.35000664945169 +428.8311816544461 +-30.10361158843872 +81.75966527944443 +0 +120 +absolute + + + +0.01 +smooth + +8.536867915910099 +47.35000811781868 +428.830265978089 +-30.491318752074474 +81.70947340434411 +0 +120 +absolute + + + +0.01 +smooth + +8.53686927315636 +47.35000958797731 +428.82936166328 +-30.880226361961935 +81.65920360497887 +0 +120 +absolute + + + +0.01 +smooth + +8.536870625751716 +47.350011059841634 +428.8284714230463 +-31.270298374506563 +81.60886161197485 +0 +120 +absolute + + + +0.01 +smooth + +8.53687197348979 +47.3500125333257 +428.82759797041473 +-31.661498746113818 +81.55845315595819 +0 +120 +absolute + + + +0.01 +smooth + +8.536873316164197 +47.35001400834362 +428.82674401841246 +-32.05379143318921 +81.5079839675551 +0 +120 +absolute + + + +0.01 +smooth + +8.536874653568566 +47.35001548480946 +428.82591228006686 +-32.447140392138195 +81.45745977739173 +0 +120 +absolute + + + +0.01 +smooth + +8.53687598549651 +47.35001696263727 +428.8251054684045 +-32.841509579366196 +81.40688631609426 +0 +120 +absolute + + + +0.01 +smooth + +8.536877311741655 +47.35001844174115 +428.8243262964529 +-33.236862951278766 +81.35626931428885 +0 +120 +absolute + + + +0.01 +smooth + +8.53687863209762 +47.35001992203517 +428.823577477239 +-33.63316446428133 +81.30561450260167 +0 +120 +absolute + + + +0.01 +smooth + +8.536879946358024 +47.35002140343339 +428.82286172378974 +-34.030378074779335 +81.25492761165889 +0 +120 +absolute + + + +0.01 +smooth + +8.53688125431649 +47.35002288584988 +428.8221817491325 +-34.42846773917831 +81.2042143720867 +0 +120 +absolute + + + +0.01 +smooth + +8.536882555766637 +47.350024369198735 +428.8215402662943 +-34.8273974138837 +81.15348051451123 +0 +120 +absolute + + + +0.01 +smooth + +8.53688385050209 +47.35002585339402 +428.82093998830203 +-35.22713105530097 +81.10273176955869 +0 +120 +absolute + + + +0.01 +smooth + +8.53688513831646 +47.35002733834982 +428.8203836281829 +-35.62763261983555 +81.05197386785525 +0 +120 +absolute + + + +0.01 +smooth + +8.536886419003379 +47.35002882398018 +428.8198738989641 +-36.028866063893005 +81.00121254002704 +0 +120 +absolute + + + +0.01 +smooth + +8.536887692356462 +47.3500303101992 +428.81941351367266 +-36.43079534387874 +80.95045351670026 +0 +120 +absolute + + + +0.01 +smooth + +8.536888958169328 +47.35003179692096 +428.81900518533564 +-36.833384416198214 +80.8997025285011 +0 +120 +absolute + + + +0.01 +smooth + +8.536890216235603 +47.35003328405949 +428.8186516269801 +-37.23659723725696 +80.8489653060557 +0 +120 +absolute + + + +0.01 +smooth + +8.536891466348903 +47.35003477152892 +428.81835555163326 +-37.64039776346041 +80.79824757999023 +0 +120 +absolute + + + +0.01 +smooth + +8.536892708302853 +47.35003625924328 +428.8181196723221 +-38.044749951214044 +80.74755508093088 +0 +120 +absolute + + + +0.01 +smooth + +8.53689394189107 +47.35003774711667 +428.8179467020737 +-38.44961775692329 +80.6968935395038 +0 +120 +absolute + + + +0.01 +smooth + +8.536895166933181 +47.350039235070994 +428.81783902493646 +-38.85496863558436 +80.64626815578757 +0 +120 +absolute + + + +0.01 +smooth + +8.53689638628137 +47.35004072394495 +428.8177599953717 +-39.261179562229174 +80.59562206476913 +0 +120 +absolute + + + +0.01 +smooth + +8.53689760179106 +47.35004221428967 +428.8176833669254 +-39.668498672304935 +80.54491806122626 +0 +120 +absolute + + + +0.01 +smooth + +8.536898813203994 +47.350043706022454 +428.81760917956365 +-40.07689083920782 +80.49416192030236 +0 +120 +absolute + + + +0.01 +smooth + +8.536900020261895 +47.350045199060546 +428.8175374732517 +-40.48632093633385 +80.44335941714066 +0 +120 +absolute + + + +0.01 +smooth + +8.536901222706508 +47.35004669332129 +428.8174682879559 +-40.89675383707909 +80.39251632688458 +0 +120 +absolute + + + +0.01 +smooth + +8.536902420279562 +47.350048188721935 +428.81740166364125 +-41.30815441483965 +80.34163842467734 +0 +120 +absolute + + + +0.01 +smooth + +8.536903612722787 +47.35004968517978 +428.8173376402739 +-41.72048754301159 +80.2907314856623 +0 +120 +absolute + + + +0.01 +smooth + +8.536904799777924 +47.350051182612134 +428.81727625781963 +-42.133718094991 +80.23980128498285 +0 +120 +absolute + + + +0.01 +smooth + +8.536905981186697 +47.35005268093623 +428.8172175562438 +-42.547810944173904 +80.18885359778216 +0 +120 +absolute + + + +0.01 +smooth + +8.53690715669085 +47.350054180069435 +428.81716157551244 +-42.96273096395646 +80.1378941992037 +0 +120 +absolute + + + +0.01 +smooth + +8.536908326032114 +47.35005567992897 +428.8171083555913 +-43.3784430277347 +80.08692886439071 +0 +120 +absolute + + + +0.01 +smooth + +8.536909488952215 +47.350057180432145 +428.81705793644574 +-43.79491200890465 +80.0359633684865 +0 +120 +absolute + + + +0.01 +smooth + +8.536910645192897 +47.35005868149625 +428.81701035804184 +-44.212102780862494 +79.98500348663443 +0 +120 +absolute + + + +0.01 +smooth + +8.536911794495886 +47.35006018303856 +428.816965660345 +-44.62998021700423 +79.93405499397775 +0 +120 +absolute + + + +0.01 +smooth + +8.536912936602915 +47.350061684976396 +428.8169238833212 +-45.04850919072598 +79.88312366565987 +0 +120 +absolute + + + +0.01 +smooth + +8.536914071255726 +47.350063187227015 +428.8168850669361 +-45.46765457542374 +79.83221527682404 +0 +120 +absolute + + + +0.01 +smooth + +8.536915198196045 +47.350064689707715 +428.81684925115536 +-45.88738124449369 +79.78133560261364 +0 +120 +absolute + + + +0.01 +smooth + +8.536916317165609 +47.35006619233578 +428.81681647594473 +-46.307654071331854 +79.73049041817194 +0 +120 +absolute + + + +0.01 +smooth + +8.536917427906152 +47.35006769502851 +428.8167867812699 +-46.72843792933428 +79.67968549864227 +0 +120 +absolute + + + +0.01 +smooth + +8.536918530159404 +47.35006919770318 +428.81676020709654 +-47.149697691897096 +79.62892661916794 +0 +120 +absolute + + + +0.01 +smooth + +8.536919623667103 +47.35007070027707 +428.81673679339053 +-47.57139823241638 +79.57821955489229 +0 +120 +absolute + + + +0.01 +smooth + +8.536920708170982 +47.350072202667505 +428.8167165801175 +-47.99350442428813 +79.52757008095863 +0 +120 +absolute + + + +0.01 +smooth + +8.53692178341277 +47.350073704791726 +428.81669960724304 +-48.41598114090853 +79.47698397251028 +0 +120 +absolute + + + +0.01 +smooth + +8.536922849134207 +47.35007520656705 +428.81668591473306 +-48.83879325567361 +79.42646700469055 +0 +120 +absolute + + + +0.01 +smooth + +8.536923905077021 +47.350076707910745 +428.8166755425532 +-49.261905641979425 +79.37602495264278 +0 +120 +absolute + + + +0.01 +smooth + +8.536924950982948 +47.35007820874013 +428.8166685306692 +-49.68528317322204 +79.32566359151026 +0 +120 +absolute + + + +0.01 +smooth + +8.536925986593724 +47.350079708972466 +428.8166649190466 +-50.10889072279758 +79.27538869643635 +0 +120 +absolute + + + +0.01 +smooth + +8.536927012364352 +47.350081208675654 +428.8166695864197 +-50.53275902854002 +79.22519516791023 +0 +120 +absolute + + + +0.01 +smooth + +8.536928033273078 +47.350082708880144 +428.81671744123787 +-50.957339755691244 +79.17500849621682 +0 +120 +absolute + + + +0.01 +smooth + +8.536929050047549 +47.35008420973213 +428.8168134354387 +-51.38269761318632 +79.12481821062904 +0 +120 +absolute + + + +0.01 +smooth + +8.536930062345673 +47.350085711152985 +428.816955169695 +-51.80879899661798 +79.07463008521951 +0 +120 +absolute + + + +0.01 +smooth + +8.536931069825368 +47.35008721306418 +428.81714024467993 +-52.23561030157905 +79.02444989406088 +0 +120 +absolute + + + +0.01 +smooth + +8.536932072144541 +47.350088715387066 +428.8173662610661 +-52.66309792366229 +78.97428341122571 +0 +120 +absolute + + + +0.01 +smooth + +8.536933068961115 +47.3500902180431 +428.81763081952687 +-53.09122825846057 +78.92413641078667 +0 +120 +absolute + + + +0.01 +smooth + +8.536934059932996 +47.35009172095365 +428.8179315207349 +-53.51996770156665 +78.87401466681634 +0 +120 +absolute + + + +0.01 +smooth + +8.536935044718103 +47.350093224040165 +428.8182659653633 +-53.949282648573316 +78.82392395338732 +0 +120 +absolute + + + +0.01 +smooth + +8.536936022974338 +47.35009472722404 +428.8186317540849 +-54.37913949507339 +78.77387004457225 +0 +120 +absolute + + + +0.01 +smooth + +8.536936994359623 +47.35009623042667 +428.81902648757256 +-54.809504636659675 +78.72385871444371 +0 +120 +absolute + + + +0.01 +smooth + +8.536937958531874 +47.35009773356952 +428.81944776649965 +-55.240344468924945 +78.67389573707439 +0 +120 +absolute + + + +0.01 +smooth + +8.536938915148994 +47.35009923657394 +428.8198931915387 +-55.67162538746206 +78.6239868865368 +0 +120 +absolute + + + +0.01 +smooth + +8.536939863868904 +47.35010073936138 +428.8203603633628 +-56.10331378786378 +78.57413793690364 +0 +120 +absolute + + + +0.01 +smooth + +8.536940804349515 +47.35010224185324 +428.82084688264507 +-56.5353760657229 +78.52435466224748 +0 +120 +absolute + + + +0.01 +smooth + +8.536941736248739 +47.35010374397093 +428.82135035005825 +-56.9677786166322 +78.47464283664095 +0 +120 +absolute + + + +0.01 +smooth + +8.53694265922449 +47.35010524563586 +428.8218683662753 +-57.40048783618454 +78.42500823415664 +0 +120 +absolute + + + +0.01 +smooth + +8.536943572934682 +47.350106746769434 +428.82239853196927 +-57.8334701199727 +78.37545662886718 +0 +120 +absolute + + + +0.01 +smooth + +8.536944477037228 +47.35010824729308 +428.82293844781304 +-58.26669186358943 +78.32599379484519 +0 +120 +absolute + + + +0.01 +smooth + +8.53694537119004 +47.3501097471282 +428.8234857144795 +-58.70011946262759 +78.27662550616328 +0 +120 +absolute + + + +0.01 +smooth + +8.536946255051028 +47.35011124619621 +428.8240379326419 +-59.13371931267997 +78.22735753689406 +0 +120 +absolute + + + +0.01 +smooth + +8.536947128278111 +47.35011274441851 +428.82459270297284 +-59.56745780933937 +78.17819566111015 +0 +120 +absolute + + + +0.01 +smooth + +8.536947990529201 +47.35011424171653 +428.8251476261454 +-60.00130134819855 +78.12914565288415 +0 +120 +absolute + + + +0.01 +smooth + +8.536948841462209 +47.35011573801167 +428.8257003028326 +-60.43521632485037 +78.08021328628868 +0 +120 +absolute + + + +0.01 +smooth + +8.53694968073505 +47.35011723322534 +428.8262483337073 +-60.86916913488762 +78.03140433539636 +0 +120 +absolute + + + +0.01 +smooth + +8.536950508005638 +47.350118727278954 +428.82678931944247 +-61.30312617390303 +77.98272457427979 +0 +120 +absolute + + + +0.01 +smooth + +8.536951322931882 +47.35012022009393 +428.8273208607112 +-61.7370538374895 +77.93417977701161 +0 +120 +absolute + + + +0.01 +smooth + +8.536952125171698 +47.35012171159167 +428.82784055818615 +-62.170918521239784 +77.88577571766439 +0 +120 +absolute + + + +0.01 +smooth + +8.53695291766974 +47.350123202147635 +428.8283574890819 +-62.60487962628394 +77.83748265432862 +0 +120 +absolute + + + +0.01 +smooth + +8.536953706778021 +47.3501246926221 +428.8288937271178 +-63.039302771574185 +77.78923309171414 +0 +120 +absolute + + + +0.01 +smooth + +8.536954492203883 +47.35012618296908 +428.82944906678534 +-63.474168529948884 +77.74103055167804 +0 +120 +absolute + + + +0.01 +smooth + +8.536955273448202 +47.35012767311429 +428.83002259520174 +-63.909445425591 +77.6928807756086 +0 +120 +absolute + + + +0.01 +smooth + +8.536956050011845 +47.3501291629834 +428.830613399484 +-64.34510198268336 +77.64478950489398 +0 +120 +absolute + + + +0.01 +smooth + +8.536956821395693 +47.35013065250214 +428.8312205667497 +-64.78110672540905 +77.59676248092235 +0 +120 +absolute + + + +0.01 +smooth + +8.536957587100616 +47.35013214159617 +428.83184318411554 +-65.21742817795091 +77.5488054450819 +0 +120 +absolute + + + +0.01 +smooth + +8.536958346627488 +47.35013363019121 +428.83248033869916 +-65.65403486449183 +77.5009241387608 +0 +120 +absolute + + + +0.01 +smooth + +8.536959099477183 +47.350135118212954 +428.8331311176179 +-66.09089530921486 +77.45312430334728 +0 +120 +absolute + + + +0.01 +smooth + +8.536959845150577 +47.35013660558712 +428.8337946079886 +-66.52797803630288 +77.40541168022948 +0 +120 +absolute + + + +0.01 +smooth + +8.536960583148536 +47.350138092239334 +428.83446989692845 +-66.96525156993874 +77.35779201079558 +0 +120 +absolute + + + +0.01 +smooth + +8.536961312971941 +47.350139578095366 +428.83515607155516 +-67.40268443430553 +77.31027103643379 +0 +120 +absolute + + + +0.01 +smooth + +8.536962034121663 +47.350141063080855 +428.8358522189854 +-67.84024515358605 +77.26285449853226 +0 +120 +absolute + + + +0.01 +smooth + +8.536962746098574 +47.350142547121536 +428.8365574263365 +-68.27790225196327 +77.2155481384792 +0 +120 +absolute + + + +0.01 +smooth + +8.536963448403553 +47.3501440301431 +428.83727078072604 +-68.71562425362012 +77.16835769766283 +0 +120 +absolute + + + +0.01 +smooth + +8.536964140537465 +47.35014551207124 +428.8379913692709 +-69.15337968273958 +77.12128891747125 +0 +120 +absolute + + + +0.01 +smooth + +8.536964822001194 +47.35014699283164 +428.83871827908837 +-69.59113706350453 +77.0743475392927 +0 +120 +absolute + + + +0.01 +smooth + +8.536965492295606 +47.35014847235001 +428.83945059729575 +-70.02886492009789 +77.02753930451536 +0 +120 +absolute + + + +0.01 +smooth + +8.536966150921575 +47.35014995055202 +428.8401874110101 +-70.46653177670262 +76.98086995452738 +0 +120 +absolute + + + +0.01 +smooth + +8.536966797379979 +47.3501514273634 +428.84092780734875 +-70.90410615750166 +76.93434523071699 +0 +120 +absolute + + + +0.01 +smooth + +8.536967431171687 +47.350152902709844 +428.84167087342894 +-71.34155658667794 +76.88797087447233 +0 +120 +absolute + + + +0.01 +smooth + +8.536968051797574 +47.350154376517025 +428.84241569636777 +-71.77885158841433 +76.84175262718162 +0 +120 +absolute + + + +0.01 +smooth + +8.536968658758516 +47.35015584871065 +428.84316136328255 +-72.21595968689384 +76.79569623023302 +0 +120 +absolute + + + +0.01 +smooth + +8.536969251555384 +47.35015731921642 +428.84390696129043 +-72.65284940629937 +76.74980742501471 +0 +120 +absolute + + + +0.01 +smooth + +8.536969829689053 +47.35015878796002 +428.8446515775087 +-73.08948927081383 +76.7040919529149 +0 +120 +absolute + + + +0.01 +smooth + +8.536970392660395 +47.35016025486716 +428.84539429905465 +-73.5258478046202 +76.65855555532174 +0 +120 +absolute + + + +0.01 +smooth + +8.536970939970283 +47.35016171986352 +428.8461342130453 +-73.96189353190135 +76.61320397362346 +0 +120 +absolute + + + +0.01 +smooth + +8.536971471319767 +47.35016318289022 +428.84687056237317 +-74.3976012307898 +76.56804163375064 +0 +120 +absolute + + + +0.01 +smooth + +8.536971997279634 +47.35016464473301 +428.84761121091503 +-74.83328885106545 +76.52300089519952 +0 +120 +absolute + + + +0.01 +smooth + +8.536972523398768 +47.350166105815624 +428.84836059892166 +-75.2691281093388 +76.47804522426621 +0 +120 +absolute + + + +0.01 +smooth + +8.53697304874635 +47.35016756606749 +428.8491182125815 +-75.70509022557104 +76.43318032335661 +0 +120 +absolute + + + +0.01 +smooth + +8.536973572391576 +47.350169025418104 +428.849883538084 +-76.14114641972331 +76.38841189487673 +0 +120 +absolute + + + +0.01 +smooth + +8.536974093403629 +47.350170483796944 +428.85065606161754 +-76.5772679117569 +76.34374564123249 +0 +120 +absolute + + + +0.01 +smooth + +8.536974610851695 +47.35017194113344 +428.8514352693711 +-77.01342592163309 +76.29918726482983 +0 +120 +absolute + + + +0.01 +smooth + +8.536975123804968 +47.350173397357096 +428.8522206475337 +-77.44959166931297 +76.25474246807468 +0 +120 +absolute + + + +0.01 +smooth + +8.536975631332638 +47.35017485239738 +428.8530116822944 +-77.88573637475793 +76.21041695337304 +0 +120 +absolute + + + +0.01 +smooth + +8.53697613250389 +47.350176306183776 +428.8538078598419 +-78.32183125792903 +76.16621642313083 +0 +120 +absolute + + + +0.01 +smooth + +8.536976626387913 +47.35017775864574 +428.85460866636504 +-78.7578475387876 +76.122146579754 +0 +120 +absolute + + + +0.01 +smooth + +8.536977112053894 +47.35017920971273 +428.85541358805267 +-79.1937564372949 +76.07821312564849 +0 +120 +absolute + + + +0.01 +smooth + +8.536977588571025 +47.35018065931422 +428.85622211109387 +-79.62952917341198 +76.03442176322022 +0 +120 +absolute + + + +0.01 +smooth + +8.536978055008495 +47.350182107379716 +428.85703372167757 +-80.06513696710026 +75.99077819487522 +0 +120 +absolute + + + +0.01 +smooth + +8.536978510435489 +47.35018355383865 +428.85784790599246 +-80.50055103832092 +75.94728812301935 +0 +120 +absolute + + + +0.01 +smooth + +8.5369789539212 +47.35018499862051 +428.8586641502275 +-80.93574260703508 +75.90395725005861 +0 +120 +absolute + + + +0.01 +smooth + +8.536979384534813 +47.35018644165477 +428.8594819405717 +-81.37068289320406 +75.86079127839892 +0 +120 +absolute + + + +0.01 +smooth + +8.536979801345518 +47.350187882870884 +428.8603007632138 +-81.80534311678915 +75.81779591044624 +0 +120 +absolute + + + +0.01 +smooth + +8.536980203422505 +47.35018932219835 +428.86112010434283 +-82.2396944977514 +75.77497684860651 +0 +120 +absolute + + + +0.01 +smooth + +8.53698058983496 +47.350190759566615 +428.8619394501476 +-82.67370825605214 +75.7323397952857 +0 +120 +absolute + + + +0.01 +smooth + +8.536980959652073 +47.35019219490516 +428.8627582868169 +-83.10735561165268 +75.68989045288971 +0 +120 +absolute + + + +0.01 +smooth + +8.536981311943034 +47.35019362814346 +428.86357610053983 +-83.54060778451405 +75.64763452382455 +0 +120 +absolute + + + +0.01 +smooth + +8.536981645777031 +47.350195059210975 +428.86439237750517 +-83.9734359945976 +75.6055777104961 +0 +120 +absolute + + + +0.01 +smooth + +8.53698196022325 +47.3501964880372 +428.8652066039019 +-84.4058114618646 +75.56372571531037 +0 +120 +absolute + + + +0.01 +smooth + +8.536982254350882 +47.35019791455157 +428.86601826591885 +-84.83770540627613 +75.52208424067328 +0 +120 +absolute + + + +0.01 +smooth + +8.536982527229116 +47.35019933868358 +428.86682684974494 +-85.26908904779359 +75.48065898899075 +0 +120 +absolute + + + +0.01 +smooth + +8.53698277792714 +47.3502007603627 +428.867631841569 +-85.69993360637804 +75.43945566266879 +0 +120 +absolute + + + +0.01 +smooth + +8.536983005514143 +47.3502021795184 +428.86843272757994 +-86.13021030199079 +75.39847996411329 +0 +120 +absolute + + + +0.01 +smooth + +8.53698321208407 +47.35020359624887 +428.869229996073 +-86.55995401735035 +75.35772191639579 +0 +120 +absolute + + + +0.01 +smooth + +8.536983415014305 +47.350205011496854 +428.8700292061671 +-86.98951913969312 +75.31709314480769 +0 +120 +absolute + + + +0.01 +smooth + +8.536983616806786 +47.35020642536313 +428.8708310002415 +-87.41894359471857 +75.27658366958974 +0 +120 +absolute + + + +0.01 +smooth + +8.536983816956427 +47.35020783777976 +428.87163502526823 +-87.8482017776724 +75.23619919019394 +0 +120 +absolute + + + +0.01 +smooth + +8.536984014958152 +47.35020924867891 +428.87244092821953 +-88.27726808380024 +75.19594540607243 +0 +120 +absolute + + + +0.01 +smooth + +8.536984210306876 +47.35021065799267 +428.8732483560675 +-88.70611690834775 +75.15582801667715 +0 +120 +absolute + + + +0.01 +smooth + +8.536984402497517 +47.35021206565316 +428.8740569557843 +-89.13472264656076 +75.11585272146023 +0 +120 +absolute + + + +0.01 +smooth + +8.536984591024991 +47.350213471592504 +428.87486637434205 +-89.56305969368475 +75.07602521987374 +0 +120 +absolute + + + +0.01 +smooth + +8.536984775384218 +47.3502148757428 +428.8756762587129 +-89.99110244496549 +75.03635121136969 +0 +120 +absolute + + + +0.01 +smooth + +8.536984955070114 +47.350216278036214 +428.87648625586917 +-90.4188252956488 +74.99683639540021 +0 +120 +absolute + + + +0.01 +smooth + +8.536985129577602 +47.35021767840484 +428.8772960127829 +-90.84620264098015 +74.9574864714173 +0 +120 +absolute + + + +0.01 +smooth + +8.536985298401593 +47.35021907678076 +428.87810517642595 +-91.27320887620529 +74.91830713887299 +0 +120 +absolute + + + +0.01 +smooth + +8.536985461037007 +47.35022047309613 +428.8789133937708 +-91.69981839657001 +74.87930409721938 +0 +120 +absolute + + + +0.01 +smooth + +8.536985616978766 +47.35022186728308 +428.87972031178964 +-92.12600559731983 +74.84048304590854 +0 +120 +absolute + + + +0.01 +smooth + +8.536985765721784 +47.35022325927369 +428.88052557745453 +-92.55174487370056 +74.80184968439251 +0 +120 +absolute + + + +0.01 +smooth + +8.53698590676098 +47.350224649000104 +428.88132883773756 +-92.97701062095778 +74.76340971212335 +0 +120 +absolute + + + +0.01 +smooth + +8.536986039591273 +47.350226036394446 +428.8821297396109 +-93.40177723433722 +74.72516882855311 +0 +120 +absolute + + + +0.01 +smooth + +8.53698616370758 +47.35022742138881 +428.8829279300468 +-93.82601910908463 +74.68713273313384 +0 +120 +absolute + + + +0.01 +smooth + +8.536986278604816 +47.35022880391533 +428.8837230560172 +-94.24971064044556 +74.6493071253176 +0 +120 +absolute + + + +0.01 +smooth + +8.536986383777904 +47.35023018390611 +428.8845147644945 +-94.67282622366575 +74.61169770455649 +0 +120 +absolute + + + +0.01 +smooth + +8.536986478721758 +47.350231561293285 +428.8853027024507 +-95.09534025399097 +74.57431017030251 +0 +120 +absolute + + + +0.01 +smooth + +8.5369865629313 +47.35023293600897 +428.886086516858 +-95.51722712666674 +74.53715022200774 +0 +120 +absolute + + + +0.01 +smooth + +8.536986635901442 +47.350234307985275 +428.8868658546885 +-95.93846123693885 +74.50022355912427 +0 +120 +absolute + + + +0.01 +smooth + +8.536986697127109 +47.35023567715433 +428.8876403629144 +-96.35901698005303 +74.4635358811041 +0 +120 +absolute + + + +0.01 +smooth + +8.536986746103212 +47.35023704344824 +428.88840968850786 +-96.7788687512548 +74.4270928873993 +0 +120 +absolute + + + +0.01 +smooth + +8.536986782324675 +47.35023840679913 +428.8891734784411 +-97.19799094578994 +74.39090027746198 +0 +120 +absolute + + + +0.01 +smooth + +8.53698680528641 +47.350239767139115 +428.889931379686 +-97.61635795890419 +74.35496375074413 +0 +120 +absolute + + + +0.01 +smooth + +8.536986814483342 +47.35024112440031 +428.89068303921493 +-98.03394418584313 +74.31928900669784 +0 +120 +absolute + + + +0.01 +smooth + +8.536986807910155 +47.35024247900895 +428.89143033687157 +-98.45089079827777 +74.28383224352905 +0 +120 +absolute + + + +0.01 +smooth + +8.536986783144773 +47.35024383175587 +428.89217684320363 +-98.86746388957286 +74.24851323423145 +0 +120 +absolute + + + +0.01 +smooth + +8.536986740838636 +47.35024518258943 +428.89292235335324 +-99.28364654775216 +74.21333623870211 +0 +120 +absolute + + + +0.01 +smooth + +8.536986681694442 +47.35024653144269 +428.89366659322354 +-99.69941668028109 +74.17830705878336 +0 +120 +absolute + + + +0.01 +smooth + +8.536986606414873 +47.35024787824862 +428.89440928871693 +-100.11475219462469 +74.14343149631749 +0 +120 +absolute + + + +0.01 +smooth + +8.536986515702626 +47.35024922294021 +428.89515016573654 +-100.52963099824836 +74.1087153531469 +0 +120 +absolute + + + +0.01 +smooth + +8.536986410260388 +47.35025056545045 +428.8958889501848 +-100.94403099861738 +74.07416443111386 +0 +120 +absolute + + + +0.01 +smooth + +8.536986290790855 +47.35025190571237 +428.89662536796465 +-101.35793010319686 +74.03978453206072 +0 +120 +absolute + + + +0.01 +smooth + +8.53698615799672 +47.350253243658955 +428.89735914497885 +-101.77130621945214 +74.0055814578298 +0 +120 +absolute + + + +0.01 +smooth + +8.536986012580666 +47.350254579223204 +428.89809000713007 +-102.18413725484855 +73.97156101026346 +0 +120 +absolute + + + +0.01 +smooth + +8.53698585524539 +47.350255912338106 +428.89881768032103 +-102.5964011168511 +73.93772899120397 +0 +120 +absolute + + + +0.01 +smooth + +8.53698568669358 +47.35025724293666 +428.8995418904545 +-103.00807571292519 +73.90409120249367 +0 +120 +absolute + + + +0.01 +smooth + +8.53698550762793 +47.350258570951894 +428.90026236343334 +-103.41913895053618 +73.87065344597494 +0 +120 +absolute + + + +0.01 +smooth + +8.536985318751128 +47.35025989631677 +428.9009788251602 +-103.82956873714909 +73.83742152349006 +0 +120 +absolute + + + +0.01 +smooth + +8.53698512076587 +47.35026121896432 +428.90169100153787 +-104.23934298022928 +73.80440123688139 +0 +120 +absolute + + + +0.01 +smooth + +8.536984914374845 +47.35026253882751 +428.9023986184691 +-104.64843958724207 +73.77159838799122 +0 +120 +absolute + + + +0.01 +smooth + +8.536984700280742 +47.35026385583935 +428.9031014018566 +-105.05683646565252 +73.73901877866189 +0 +120 +absolute + + + +0.01 +smooth + +8.536984479186255 +47.350265169932854 +428.9037990776031 +-105.46451152292605 +73.70666821073577 +0 +120 +absolute + + + +0.01 +smooth + +8.536984251794074 +47.350266481041004 +428.90449137161147 +-105.87144266652788 +73.67455248605512 +0 +120 +absolute + + + +0.01 +smooth + +8.53698401880689 +47.3502677890968 +428.9051780097843 +-106.27760780392319 +73.6426774064623 +0 +120 +absolute + + + +0.01 +smooth + +8.536983780927393 +47.35026909403325 +428.90585871802466 +-106.68298484257733 +73.61104877379967 +0 +120 +absolute + + + +0.01 +smooth + +8.53698353885828 +47.350270395783355 +428.9065332222349 +-107.0875516899554 +73.57967238990949 +0 +120 +absolute + + + +0.01 +smooth + +8.536983293302235 +47.350271694280096 +428.907201248318 +-107.49128625352274 +73.54855405663415 +0 +120 +absolute + + + +0.01 +smooth + +8.536983044961952 +47.350272989456485 +428.90786252217674 +-107.89416644074467 +73.51769957581594 +0 +120 +absolute + + + +0.01 +smooth + +8.536982794540123 +47.35027428124552 +428.9085167697137 +-108.2961701590863 +73.48711474929722 +0 +120 +absolute + + + +0.01 +smooth + +8.536982542739437 +47.3502755695802 +428.9091637168317 +-108.6972753160129 +73.45680537892028 +0 +120 +absolute + + + +0.01 +smooth + +8.536982290262591 +47.35027685439351 +428.90980308943364 +-109.09745981898989 +73.42677726652747 +0 +120 +absolute + + + +0.01 +smooth + +8.53698203730529 +47.35027813564717 +428.9104347291879 +-109.49670980561329 +73.39703314962883 +0 +120 +absolute + + + +0.01 +smooth + +8.536981767884319 +47.35027941422084 +428.9110621914417 +-109.89527565502544 +73.36747778500977 +0 +120 +absolute + + + +0.01 +smooth + +8.536981474755786 +47.35028069050526 +428.91168708848176 +-110.29327022249022 +73.33806823518533 +0 +120 +absolute + + + +0.01 +smooth + +8.536981158807167 +47.350281964431886 +428.91230918441573 +-110.69067507110952 +73.30881062661246 +0 +120 +absolute + + + +0.01 +smooth + +8.536980820925924 +47.35028323593211 +428.91292824335073 +-111.08747176398528 +73.27971108574792 +0 +120 +absolute + + + +0.01 +smooth + +8.536980461999526 +47.350284504937385 +428.9135440293947 +-111.48364186421959 +73.25077573904859 +0 +120 +absolute + + + +0.01 +smooth + +8.536980082915438 +47.35028577137911 +428.91415630665483 +-111.87916693491422 +73.22201071297128 +0 +120 +absolute + + + +0.01 +smooth + +8.53697968456113 +47.35028703518874 +428.91476483923856 +-112.27402853917117 +73.19342213397289 +0 +120 +absolute + + + +0.01 +smooth + +8.53697926782407 +47.350288296297684 +428.9153693912535 +-112.66820824009251 +73.16501612851022 +0 +120 +absolute + + + +0.01 +smooth + +8.536978833591723 +47.35028955463739 +428.9159697268072 +-113.06168760078008 +73.13679882304012 +0 +120 +absolute + + + +0.01 +smooth + +8.536978382751556 +47.35029081013925 +428.9165656100069 +-113.45444818433586 +73.10877634401942 +0 +120 +absolute + + + +0.01 +smooth + +8.536977916191033 +47.350292062734674 +428.91715680496003 +-113.84647155386169 +73.08095481790494 +0 +120 +absolute + + + +0.01 +smooth + +8.53697743479763 +47.35029331235515 +428.9177430757745 +-114.23773927245966 +73.0533403711536 +0 +120 +absolute + + + +0.01 +smooth + +8.536976939458807 +47.35029455893207 +428.91832418655747 +-114.62823290323176 +73.02593913022216 +0 +120 +absolute + + + +0.01 +smooth + +8.536976431062032 +47.35029580239684 +428.9188999014163 +-115.01793400927976 +72.99875722156747 +0 +120 +absolute + + + +0.01 +smooth + +8.536975910494775 +47.35029704268092 +428.9194699844587 +-115.40682415370568 +72.97180077164643 +0 +120 +absolute + + + +0.01 +smooth + +8.536975378644502 +47.35029827971571 +428.9200341997921 +-115.79488489961162 +72.94507590691582 +0 +120 +absolute + + + +0.01 +smooth + +8.536974836398679 +47.35029951343266 +428.9205923115238 +-116.1820978100993 +72.9185887538325 +0 +120 +absolute + + + +0.01 +smooth + +8.536974284644776 +47.350300743763164 +428.9211440837616 +-116.56844444827075 +72.89234543885333 +0 +120 +absolute + + + +0.01 +smooth + +8.536973724270258 +47.35030197063867 +428.9216892806128 +-116.95390637722804 +72.86635208843511 +0 +120 +absolute + + + +0.01 +smooth + +8.536973156162592 +47.3503031939906 +428.92222766618465 +-117.33846516007297 +72.8406148290347 +0 +120 +absolute + + + +0.01 +smooth + +8.536972581209245 +47.350304413750365 +428.92275900458503 +-117.72210235990752 +72.81513978710896 +0 +120 +absolute + + + +0.01 +smooth + +8.536972000297688 +47.350305629849416 +428.9232830599212 +-118.10479953983375 +72.7899330891147 +0 +120 +absolute + + + +0.01 +smooth + +8.536971414315381 +47.350306842219155 +428.9237995963006 +-118.48653826295345 +72.76500086150878 +0 +120 +absolute + + + +0.01 +smooth + +8.5369708241498 +47.35030805079102 +428.92430837783087 +-118.86730009236862 +72.74034923074805 +0 +120 +absolute + + + +0.01 +smooth + +8.536970230688405 +47.350309255496434 +428.92480916861933 +-119.24706659118131 +72.71598432328932 +0 +120 +absolute + + + +0.01 +smooth + +8.536969634818666 +47.35031045626682 +428.92530173277356 +-119.62581932249333 +72.69191226558945 +0 +120 +absolute + + + +0.01 +smooth + +8.536969037428051 +47.35031165303361 +428.9257858344009 +-120.00353984940672 +72.66813918410527 +0 +120 +absolute + + + +0.01 +smooth + +8.536968436615233 +47.35031284596474 +428.92626216192383 +-120.38026448150784 +72.6446443941445 +0 +120 +absolute + + + +0.01 +smooth + +8.5369678193398 +47.3503140361587 +428.92673505114806 +-120.75624678104211 +72.62130182405302 +0 +120 +absolute + + + +0.01 +smooth + +8.53696718427182 +47.35031522370085 +428.9272048936188 +-121.13150841968046 +72.59810039213117 +0 +120 +absolute + + + +0.01 +smooth + +8.536966531935986 +47.350316408518076 +428.927671462427 +-121.50603454147755 +72.57504699047918 +0 +120 +absolute + + + +0.01 +smooth + +8.536965862857011 +47.35031759053721 +428.92813453066475 +-121.87981029048832 +72.55214851119726 +0 +120 +absolute + + + +0.01 +smooth + +8.536965177559589 +47.3503187696851 +428.92859387142323 +-122.25282081076766 +72.52941184638556 +0 +120 +absolute + + + +0.01 +smooth + +8.536964476568423 +47.35031994588863 +428.92904925779396 +-122.6250512463703 +72.5068438881443 +0 +120 +absolute + + + +0.01 +smooth + +8.536963760408211 +47.35032111907465 +428.92950046286865 +-122.99648674135115 +72.48445152857369 +0 +120 +absolute + + + +0.01 +smooth + +8.536963029603662 +47.35032228917002 +428.92994725973887 +-123.3671124397652 +72.46224165977391 +0 +120 +absolute + + + +0.01 +smooth + +8.536962284679472 +47.35032345610162 +428.9303894214963 +-123.73691348566709 +72.44022117384516 +0 +120 +absolute + + + +0.01 +smooth + +8.536961526160342 +47.350324619796275 +428.93082672123205 +-124.10587502311171 +72.4183969628876 +0 +120 +absolute + + + +0.01 +smooth + +8.536960754570973 +47.350325780180874 +428.9312589320382 +-124.4739821961541 +72.3967759190015 +0 +120 +absolute + + + +0.01 +smooth + +8.536959970436074 +47.350326937182295 +428.9316858270063 +-124.84122014884896 +72.37536493428703 +0 +120 +absolute + + + +0.01 +smooth + +8.536959174280335 +47.350328090727345 +428.93210717922744 +-125.20757402525108 +72.35417090084434 +0 +120 +absolute + + + +0.01 +smooth + +8.536958366628463 +47.35032924074292 +428.9325227617935 +-125.57302896941549 +72.33320071077367 +0 +120 +absolute + + + +0.01 +smooth + +8.53695754800516 +47.35033038715588 +428.93293234779605 +-125.93757012539689 +72.3124612561752 +0 +120 +absolute + + + +0.01 +smooth + +8.536956718935127 +47.350331529893076 +428.93333571032656 +-126.30118263725026 +72.29195942914914 +0 +120 +absolute + + + +0.01 +smooth + +8.536955879943063 +47.35033266888138 +428.93373262247667 +-126.66385164903033 +72.27170212179567 +0 +120 +absolute + + + +0.01 +smooth + +8.536955031553672 +47.350333804047644 +428.93412285733785 +-127.02556230479199 +72.251696226215 +0 +120 +absolute + + + +0.01 +smooth + +8.536954174291655 +47.35033493531873 +428.9345061880017 +-127.38629974859018 +72.2319486345073 +0 +120 +absolute + + + +0.01 +smooth + +8.53695330868171 +47.350336062621494 +428.9348823875598 +-127.74604912447961 +72.2124662387728 +0 +120 +absolute + + + +0.01 +smooth + +8.536952435248542 +47.35033718588281 +428.9352512291038 +-128.10479557651524 +72.19325593111168 +0 +120 +absolute + + + +0.01 +smooth + +8.53695155451685 +47.350338305029524 +428.9356124857251 +-128.46252424875192 +72.17432460362413 +0 +120 +absolute + + + +0.01 +smooth + +8.536950667011338 +47.350339419988515 +428.9359659305153 +-128.81922028524443 +72.15567914841036 +0 +120 +absolute + + + +0.01 +smooth + +8.536949773256705 +47.35034053068662 +428.936311336566 +-129.17486883004767 +72.13732645757055 +0 +120 +absolute + + + +0.01 +smooth + +8.536948873777654 +47.35034163705072 +428.9366484769687 +-129.52945502721656 +72.11927342320489 +0 +120 +absolute + + + +0.01 +smooth + +8.536947969098883 +47.350342739007665 +428.9369771248151 +-129.88296402080582 +72.10152693741361 +0 +120 +absolute + + + +0.01 +smooth + +8.536947059745097 +47.35034383648433 +428.93729705319663 +-130.23538095487032 +72.08409389229689 +0 +120 +absolute + + + +0.01 +smooth + +8.536946141483826 +47.350344930122695 +428.9376108828341 +-130.58681791560554 +72.06689299812979 +0 +120 +absolute + + + +0.01 +smooth + +8.536945207825577 +47.35034602088675 +428.9379225178531 +-130.9374469542045 +72.04980372595989 +0 +120 +absolute + + + +0.01 +smooth + +8.536944259096927 +47.35034710870426 +428.9382317376877 +-131.28725806575935 +72.03283360712933 +0 +120 +absolute + + + +0.01 +smooth + +8.53694329568297 +47.350348193494284 +428.9385382865689 +-131.63623968365783 +72.0159912645294 +0 +120 +absolute + + + +0.01 +smooth + +8.536942317968787 +47.3503492751758 +428.938841908727 +-131.9843802412872 +71.99928532105142 +0 +120 +absolute + + + +0.01 +smooth + +8.536941326339454 +47.35035035366775 +428.93914234839247 +-132.33166817203505 +71.98272439958656 +0 +120 +absolute + + + +0.01 +smooth + +8.536940321180069 +47.350351428889184 +428.9394393497959 +-132.67809190928887 +71.96631712302622 +0 +120 +absolute + + + +0.01 +smooth + +8.536939302875703 +47.350352500759044 +428.9397326571679 +-133.02363988643611 +71.95007211426163 +0 +120 +absolute + + + +0.01 +smooth + +8.53693827181145 +47.350353569196386 +428.94002201473893 +-133.3683005368644 +71.93399799618408 +0 +120 +absolute + + + +0.01 +smooth + +8.536937228372393 +47.35035463412014 +428.9403071667397 +-133.71206229396108 +71.91810339168488 +0 +120 +absolute + + + +0.01 +smooth + +8.536936172943607 +47.35035569544931 +428.94058785740043 +-134.05491359111372 +71.90239692365526 +0 +120 +absolute + + + +0.01 +smooth + +8.536935105910183 +47.35035675310289 +428.9408638309518 +-134.39684286170984 +71.88688721498653 +0 +120 +absolute + + + +0.01 +smooth + +8.536934027657205 +47.35035780699989 +428.9411348316244 +-134.7378385391369 +71.87158288856999 +0 +120 +absolute + + + +0.01 +smooth + +8.536932938569759 +47.35035885705929 +428.94140060364884 +-135.07788905678242 +71.85649256729693 +0 +120 +absolute + + + +0.01 +smooth + +8.536931839032928 +47.35035990320008 +428.94166089125554 +-135.41698284803394 +71.8416248740586 +0 +120 +absolute + + + +0.01 +smooth + +8.536930729431791 +47.35036094534123 +428.941915438675 +-135.7551083462788 +71.82698843174629 +0 +120 +absolute + + + +0.01 +smooth + +8.536929610151438 +47.35036198340176 +428.94216399013783 +-136.09225398490466 +71.8125918632513 +0 +120 +absolute + + + +0.01 +smooth + +8.536928481576949 +47.35036301730065 +428.94240628987444 +-136.42840819729898 +71.7984437914649 +0 +120 +absolute + + + +0.01 +smooth + +8.536927344093414 +47.350364046956884 +428.94264208211564 +-136.7635594168492 +71.7845528392784 +0 +120 +absolute + + + +0.01 +smooth + +8.536926198085908 +47.35036507228946 +428.9428711110917 +-137.09769607694287 +71.77092762958306 +0 +120 +absolute + + + +0.01 +smooth + +8.536925043939524 +47.35036609321738 +428.9430931210332 +-137.4308066109675 +71.75757678527016 +0 +120 +absolute + + + +0.01 +smooth + +8.53692388203934 +47.350367109659615 +428.94330785617075 +-137.76287945231053 +71.74450892923099 +0 +120 +absolute + + + +0.01 +smooth + +8.536922712770442 +47.35036812153517 +428.9435150607349 +-138.09390303435944 +71.73173268435684 +0 +120 +absolute + + + +0.01 +smooth + +8.536921536517916 +47.350369128763035 +428.94371447895605 +-138.42386579050188 +71.71925667353901 +0 +120 +absolute + + + +0.01 +smooth + +8.536920353666845 +47.35037013126219 +428.94390585506494 +-138.75275615412517 +71.70708951966874 +0 +120 +absolute + + + +0.01 +smooth + +8.536919164602311 +47.35037112895163 +428.94408893329194 +-139.08056255861698 +71.69523984563735 +0 +120 +absolute + + + +0.01 +smooth + +8.536917969709403 +47.35037212175035 +428.94426345786775 +-139.40727343736458 +71.6837162743361 +0 +120 +absolute + + + +0.01 +smooth + +8.53691676910514 +47.35037310964161 +428.9444294761476 +-139.73288557872738 +71.67251790330009 +0 +120 +absolute + + + +0.01 +smooth + +8.536915557257345 +47.35037409395556 +428.94459335920214 +-140.05757195456758 +71.66144501219891 +0 +120 +absolute + + + +0.01 +smooth + +8.536914332069099 +47.35037507517933 +428.94475743353786 +-140.38139873027126 +71.65042472257574 +0 +120 +absolute + + + +0.01 +smooth + +8.536913093848836 +47.35037605322056 +428.9449212824485 +-140.70435713895355 +71.63947032144048 +0 +120 +absolute + + + +0.01 +smooth + +8.536911842904992 +47.35037702798681 +428.94508448922744 +-141.02643841372915 +71.62859509580305 +0 +120 +absolute + + + +0.01 +smooth + +8.536910579545989 +47.350377999385735 +428.9452466371688 +-141.34763378771294 +71.61781233267341 +0 +120 +absolute + + + +0.01 +smooth + +8.536909304080261 +47.350378967324886 +428.9454073095656 +-141.6679344940198 +71.60713531906144 +0 +120 +absolute + + + +0.01 +smooth + +8.536908016816241 +47.350379931711906 +428.945566089712 +-141.98733176576468 +71.59657734197711 +0 +120 +absolute + + + +0.01 +smooth + +8.536906718062362 +47.35038089245437 +428.94572256090123 +-142.30581683606226 +71.58615168843029 +0 +120 +absolute + + + +0.01 +smooth + +8.536905408127051 +47.3503818494599 +428.9458763064272 +-142.62338093802748 +71.57587164543094 +0 +120 +absolute + + + +0.01 +smooth + +8.536904087318742 +47.35038280263609 +428.94602690958357 +-142.94001530477536 +71.56575049998898 +0 +120 +absolute + + + +0.01 +smooth + +8.536902755945867 +47.35038375189057 +428.94617395366373 +-143.25571116942052 +71.55580153911433 +0 +120 +absolute + + + +0.01 +smooth + +8.536901414316853 +47.35038469713088 +428.94631702196136 +-143.57045976507789 +71.5460380498169 +0 +120 +absolute + + + +0.01 +smooth + +8.536900062740134 +47.350385638264676 +428.9464556977703 +-143.8842523248624 +71.53647331910663 +0 +120 +absolute + + + +0.01 +smooth + +8.536898701524144 +47.350386575199565 +428.94658956438406 +-144.19708008188888 +71.52712063399345 +0 +120 +absolute + + + +0.01 +smooth + +8.536897330977311 +47.35038750784312 +428.9467182050964 +-144.50893426927217 +71.51799328148728 +0 +120 +absolute + + + +0.01 +smooth + +8.536895951408065 +47.35038843610295 +428.94684120320073 +-144.81980612012714 +71.50910454859802 +0 +120 +absolute + + + +0.01 +smooth + +8.53689456312484 +47.35038935988666 +428.94695814199076 +-145.12968686756864 +71.50046772233563 +0 +120 +absolute + + + +0.01 +smooth + +8.536893166436066 +47.35039027910187 +428.94706860476026 +-145.43856774471158 +71.49209608971 +0 +120 +absolute + + + +0.01 +smooth + +8.536891761650175 +47.35039119365618 +428.9471721748027 +-145.74643998467076 +71.48400293773106 +0 +120 +absolute + + + +0.01 +smooth + +8.536890349075598 +47.35039210345717 +428.94726843541184 +-146.05329482056106 +71.47620155340877 +0 +120 +absolute + + + +0.01 +smooth + +8.536888929020765 +47.35039300841246 +428.9473569698812 +-146.3591234854974 +71.46870522375302 +0 +120 +absolute + + + +0.01 +smooth + +8.536887501794109 +47.35039390842965 +428.9474373615045 +-146.66391721259453 +71.46152723577373 +0 +120 +absolute + + + +0.01 +smooth + +8.53688606770406 +47.350394803416336 +428.94750919357534 +-146.96766723496737 +71.45468087648084 +0 +120 +absolute + + + +0.01 +smooth + +8.53688462705905 +47.350395693280134 +428.9475720493874 +-147.27036478573083 +71.44817943288427 +0 +120 +absolute + + + +0.01 +smooth + +8.536883180167512 +47.35039657792865 +428.94762551223425 +-147.57200109799967 +71.44203619199392 +0 +120 +absolute + + + +0.01 +smooth + +8.536881727337873 +47.350397457269466 +428.9476691654096 +-147.8725674048888 +71.43626444081977 +0 +120 +absolute + + + +0.01 +smooth + +8.536880268878567 +47.35039833121021 +428.947702592207 +-148.17205493951315 +71.43087746637167 +0 +120 +absolute + + + +0.01 +smooth + +8.536878803896947 +47.35039920009898 +428.94772723189084 +-148.4704960994225 +71.42581016220247 +0 +120 +absolute + + + +0.01 +smooth + +8.53687732774221 +47.350400065647705 +428.9477504668308 +-148.76805226525894 +71.42075448182659 +0 +120 +absolute + + + +0.01 +smooth + +8.53687584014006 +47.35040092794495 +428.9477730906712 +-149.06473505497888 +71.41569103954137 +0 +120 +absolute + + + +0.01 +smooth + +8.536874341348652 +47.350401786882976 +428.9477950827408 +-149.3605378484813 +71.41063535060034 +0 +120 +absolute + + + +0.01 +smooth + +8.536872831626152 +47.3504026423541 +428.9478164223688 +-149.6554540256656 +71.40560293025722 +0 +120 +absolute + + + +0.01 +smooth + +8.536871311230723 +47.35040349425063 +428.94783708888406 +-149.94947696643086 +71.40060929376551 +0 +120 +absolute + + + +0.01 +smooth + +8.536869780420533 +47.35040434246486 +428.9478570616157 +-150.24260005067643 +71.39566995637892 +0 +120 +absolute + + + +0.01 +smooth + +8.536868239453739 +47.35040518688909 +428.9478763198928 +-150.5348166583016 +71.39080043335102 +0 +120 +absolute + + + +0.01 +smooth + +8.536866688588507 +47.350406027415616 +428.94789484304414 +-150.82612016920538 +71.3860162399354 +0 +120 +absolute + + + +0.01 +smooth + +8.536865128083003 +47.35040686393676 +428.94791261039904 +-151.11650396328724 +71.38133289138572 +0 +120 +absolute + + + +0.01 +smooth + +8.536863558195389 +47.35040769634482 +428.9479296012864 +-151.40596142044637 +71.37676590295558 +0 +120 +absolute + + + +0.01 +smooth + +8.53686197918383 +47.350408524532085 +428.9479457950353 +-151.69448592058194 +71.37233078989858 +0 +120 +absolute + + + +0.01 +smooth + +8.536860391306483 +47.35040934839087 +428.94796117097457 +-151.98207084359316 +71.36804306746838 +0 +120 +absolute + + + +0.01 +smooth + +8.536858794821521 +47.35041016781349 +428.9479757084335 +-152.26870956937944 +71.36391825091853 +0 +120 +absolute + + + +0.01 +smooth + +8.536857189987106 +47.35041098269225 +428.947989386741 +-152.55439547783988 +71.35997185550269 +0 +120 +absolute + + + +0.01 +smooth + +8.536855577061397 +47.35041179291942 +428.9480021852262 +-152.83912194887375 +71.35621939647446 +0 +120 +absolute + + + +0.01 +smooth + +8.536853956302561 +47.35041259838732 +428.9480140832179 +-153.12288236238032 +71.35267638908746 +0 +120 +absolute + + + +0.01 +smooth + +8.53685232796876 +47.35041339898827 +428.9480250600452 +-153.40567009825875 +71.34935834859529 +0 +120 +absolute + + + +0.01 +smooth + +8.536850692318158 +47.35041419461456 +428.9480350950373 +-153.68747853640832 +71.34628079025157 +0 +120 +absolute + + + +0.01 +smooth + +8.53684904960892 +47.35041498515847 +428.9480441675231 +-153.96830105672834 +71.34345922930991 +0 +120 +absolute + + + +0.01 +smooth + +8.536847400099209 +47.35041577051234 +428.9480522568317 +-154.24813103911794 +71.34090918102395 +0 +120 +absolute + + + +0.01 +smooth + +8.536845744047188 +47.35041655056847 +428.94805934229197 +-154.5269618634764 +71.33864616064727 +0 +120 +absolute + + + +0.01 +smooth + +8.536844081711022 +47.350417325219134 +428.94806540323304 +-154.80478690970298 +71.33668568343352 +0 +120 +absolute + + + +0.01 +smooth + +8.536842413348872 +47.350418094356655 +428.9480704189839 +-155.08159955769688 +71.33504326463628 +0 +120 +absolute + + + +0.01 +smooth + +8.536840739218906 +47.35041885787335 +428.9480743688737 +-155.3573931873574 +71.33373441950917 +0 +120 +absolute + + + +0.01 +smooth + +8.536839059579284 +47.350419615661494 +428.9480772322313 +-155.6321611785837 +71.33277466330583 +0 +120 +absolute + + + +0.01 +smooth + +8.53683737468817 +47.3504203676134 +428.9480789883858 +-155.90589691127508 +71.33217951127986 +0 +120 +absolute + + + +0.01 +smooth + +8.536835684803728 +47.350421113621394 +428.94807961666635 +-156.17859376533073 +71.33196447868487 +0 +120 +absolute + + + +0.01 +smooth + +8.53683398776213 +47.350421854917876 +428.94807613799384 +-156.45033505355926 +71.3320290722935 +0 +120 +absolute + + + +0.01 +smooth + +8.5368322808599 +47.35042259300827 +428.94806518281814 +-156.7212241480687 +71.33223540239044 +0 +120 +absolute + + + +0.01 +smooth + +8.536830564312156 +47.35042332776819 +428.94804710167386 +-156.9912560610255 +71.33257870701833 +0 +120 +absolute + + + +0.01 +smooth + +8.536828838340698 +47.35042405906962 +428.94802225344944 +-157.26042555605054 +71.33305453725441 +0 +120 +absolute + + + +0.01 +smooth + +8.536827103167345 +47.350424786784465 +428.94799099703323 +-157.52872739676528 +71.33365844417605 +0 +120 +absolute + + + +0.01 +smooth + +8.536825359013903 +47.350425510784696 +428.9479536913135 +-157.79615634679092 +71.33438597886061 +0 +120 +absolute + + + +0.01 +smooth + +8.536823606102184 +47.35042623094224 +428.94791069517856 +-158.06270716974862 +71.33523269238538 +0 +120 +absolute + + + +0.01 +smooth + +8.536821844653991 +47.35042694712901 +428.9478623675167 +-158.32837462925954 +71.33619413582765 +0 +120 +absolute + + + +0.01 +smooth + +8.536820074891134 +47.350427659216976 +428.94780906721587 +-158.59315348894503 +71.33726586026478 +0 +120 +absolute + + + +0.01 +smooth + +8.53681829703543 +47.35042836707809 +428.9477511531651 +-158.85703851242616 +71.3384434167741 +0 +120 +absolute + + + +0.01 +smooth + +8.536816511308679 +47.35042907058427 +428.94768898425224 +-159.12002446332428 +71.33972235643293 +0 +120 +absolute + + + +0.01 +smooth + +8.53681471793269 +47.350429769607445 +428.9476229193653 +-159.38210610526045 +71.3410982303186 +0 +120 +absolute + + + +0.01 +smooth + +8.536812917129282 +47.350430464019574 +428.9475533173931 +-159.64327820185594 +71.3425665895084 +0 +120 +absolute + + + +0.01 +smooth + +8.536811109120254 +47.3504311536926 +428.9474805372238 +-159.90353551673203 +71.34412298507965 +0 +120 +absolute + + + +0.01 +smooth + +8.536809294127421 +47.350431838498444 +428.9474049377455 +-160.16287281350986 +71.34576296810975 +0 +120 +absolute + + + +0.01 +smooth + +8.536807472372589 +47.350432518309056 +428.94732687784665 +-160.42128485581065 +71.34748208967595 +0 +120 +absolute + + + +0.01 +smooth + +8.536805644077567 +47.350433192996384 +428.9472467164155 +-160.67876640725564 +71.3492759008556 +0 +120 +absolute + + + +0.01 +smooth + +8.536803809464166 +47.350433862432354 +428.94716481234036 +-160.93531223146596 +71.35113995272602 +0 +120 +absolute + + + +0.01 +smooth + +8.536801968754194 +47.35043452648891 +428.9470815245095 +-161.19091709206293 +71.35306979636454 +0 +120 +absolute + + + +0.01 +smooth + +8.536800122169462 +47.350435185037995 +428.9469972118112 +-161.44557575266774 +71.35506098284849 +0 +120 +absolute + + + +0.01 +smooth + +8.536798269931776 +47.35043583795155 +428.9469122331339 +-161.69928297690154 +71.35710906325517 +0 +120 +absolute + + + +0.01 +smooth + +8.536796412262946 +47.35043648510152 +428.9468269473657 +-161.95203352838556 +71.35920958866191 +0 +120 +absolute + + + +0.01 +smooth + +8.536794549384783 +47.35043712635982 +428.94674171339506 +-162.20382217074103 +71.36135811014606 +0 +120 +absolute + + + +0.01 +smooth + +8.536792681519096 +47.350437761598414 +428.94665689011015 +-162.45464366758918 +71.3635501787849 +0 +120 +absolute + + + +0.01 +smooth + +8.53679080888769 +47.350438390689234 +428.94657283639924 +-162.70449278255117 +71.3657813456558 +0 +120 +absolute + + + +0.01 +smooth + +8.536788931712378 +47.35043901350422 +428.9464899111507 +-162.95336427924826 +71.36804716183606 +0 +120 +absolute + + + +0.01 +smooth + +8.53678705021497 +47.350439629915314 +428.94640847325286 +-163.20125292130166 +71.370343178403 +0 +120 +absolute + + + +0.01 +smooth + +8.536785164418632 +47.350440239960996 +428.94632862723927 +-163.44816163718008 +71.3726824368214 +0 +120 +absolute + + + +0.01 +smooth + +8.5367832714033 +47.35044084613287 +428.94624666172393 +-163.69421417776275 +71.37533307642676 +0 +120 +absolute + + + +0.01 +smooth + +8.536781370284027 +47.350441449183265 +428.94616136453686 +-163.93945029478095 +71.37837488246905 +0 +120 +absolute + + + +0.01 +smooth + +8.536779461255108 +47.35044204895537 +428.9460728917658 +-164.1838653344887 +71.38179143731034 +0 +120 +absolute + + + +0.01 +smooth + +8.53677754451084 +47.35044264529241 +428.9459813994989 +-164.42745464314 +71.38556632331282 +0 +120 +absolute + + + +0.01 +smooth + +8.536775620245518 +47.350443238037606 +428.9458870438244 +-164.67021356698902 +71.38968312283863 +0 +120 +absolute + + + +0.01 +smooth + +8.536773688653438 +47.350443827034155 +428.94578998083 +-164.91213745228984 +71.39412541824989 +0 +120 +absolute + + + +0.01 +smooth + +8.536771749928892 +47.35044441212527 +428.9456903666037 +-165.15322164529647 +71.39887679190869 +0 +120 +absolute + + + +0.01 +smooth + +8.536769804266177 +47.35044499315416 +428.9455883572336 +-165.39346149226301 +71.40392082617723 +0 +120 +absolute + + + +0.01 +smooth + +8.536767851859594 +47.35044556996405 +428.9454841088077 +-165.63285233944364 +71.40924110341761 +0 +120 +absolute + + + +0.01 +smooth + +8.536765892903436 +47.35044614239816 +428.9453777774141 +-165.87138953309233 +71.414821205992 +0 +120 +absolute + + + +0.01 +smooth + +8.536763927591995 +47.350446710299664 +428.94526951914054 +-166.10906841946306 +71.42064471626249 +0 +120 +absolute + + + +0.01 +smooth + +8.536761956119566 +47.3504472735118 +428.94515949007507 +-166.34588434481014 +71.4266952165912 +0 +120 +absolute + + + +0.01 +smooth + +8.536759978680454 +47.35044783187777 +428.9450478463059 +-166.58183265538747 +71.43295628934035 +0 +120 +absolute + + + +0.01 +smooth + +8.536757995468944 +47.3504483852408 +428.9449347439209 +-166.81690869744924 +71.43941151687198 +0 +120 +absolute + + + +0.01 +smooth + +8.536756006679338 +47.350448933444085 +428.944820339008 +-167.0511078172495 +71.4460444815483 +0 +120 +absolute + + + +0.01 +smooth + +8.536754012505929 +47.350449476330844 +428.94470478765544 +-167.28442536104222 +71.45283876573139 +0 +120 +absolute + + + +0.01 +smooth + +8.536752013143014 +47.3504500137443 +428.94458824595085 +-167.5168566750816 +71.45977795178341 +0 +120 +absolute + + + +0.01 +smooth + +8.536750008784889 +47.35045054552764 +428.9444708699826 +-167.74839710562168 +71.4668456220665 +0 +120 +absolute + + + +0.01 +smooth + +8.536747999625847 +47.35045107152409 +428.94435281583844 +-167.97904199891653 +71.47402535894275 +0 +120 +absolute + + + +0.01 +smooth + +8.536745985860186 +47.35045159157687 +428.94423423960643 +-168.20878670122028 +71.48130074477436 +0 +120 +absolute + + + +0.01 +smooth + +8.536743967682202 +47.35045210552917 +428.94411529737465 +-168.43762655878692 +71.48865536192343 +0 +120 +absolute + + + +0.01 +smooth + +8.536741945286188 +47.35045261322423 +428.9439961452309 +-168.66555691787053 +71.49607279275207 +0 +120 +absolute + + + +0.01 +smooth + +8.536739918866445 +47.35045311450523 +428.9438769392635 +-168.8925731247253 +71.50353661962248 +0 +120 +absolute + + + +0.01 +smooth + +8.53673788861726 +47.35045360921539 +428.9437578355602 +-169.11867052560515 +71.51103042489675 +0 +120 +absolute + + + +0.01 +smooth + +8.536735854732937 +47.350454097197954 +428.943638990209 +-169.3438444667643 +71.518537790937 +0 +120 +absolute + + + +0.01 +smooth + +8.536733817407768 +47.35045457829609 +428.94352055929807 +-169.5680902944568 +71.5260423001054 +0 +120 +absolute + + + +0.01 +smooth + +8.53673177683605 +47.35045505235303 +428.94340269891524 +-169.79140335493662 +71.53352753476406 +0 +120 +absolute + + + +0.01 +smooth + +8.536729732425771 +47.35045552022484 +428.9432850658614 +-170.0138164134381 +71.54104039033665 +0 +120 +absolute + + + +0.01 +smooth + +8.536727681653833 +47.3504559852216 +428.94316606480567 +-170.23545360090964 +71.54878644235389 +0 +120 +absolute + + + +0.01 +smooth + +8.536725624465944 +47.350456447434404 +428.943045638031 +-170.45632094385087 +71.55677617169304 +0 +120 +absolute + + + +0.01 +smooth + +8.536723561035377 +47.35045690665972 +428.9429238711451 +-170.676413615948 +71.56500188021282 +0 +120 +absolute + + + +0.01 +smooth + +8.5367214915354 +47.35045736269402 +428.9428008497561 +-170.89572679088755 +71.57345586977208 +0 +120 +absolute + + + +0.01 +smooth + +8.53671941613928 +47.3504578153338 +428.94267665947143 +-171.11425564235566 +71.58213044222953 +0 +120 +absolute + + + +0.01 +smooth + +8.536717335020287 +47.350458264375504 +428.9425513858994 +-171.33199534403877 +71.59101789944397 +0 +120 +absolute + + + +0.01 +smooth + +8.536715248351685 +47.35045870961562 +428.9424251146473 +-171.54894106962308 +71.60011054327418 +0 +120 +absolute + + + +0.01 +smooth + +8.536713156306753 +47.350459150850654 +428.94229793132354 +-171.76508799279506 +71.60940067557894 +0 +120 +absolute + + + +0.01 +smooth + +8.536711059058751 +47.350459587877054 +428.9421699215354 +-171.98043128724092 +71.61888059821705 +0 +120 +absolute + + + +0.01 +smooth + +8.536708956780949 +47.35046002049126 +428.942041170891 +-172.19496612664693 +71.62854261304722 +0 +120 +absolute + + + +0.01 +smooth + +8.536706849646613 +47.3504604484898 +428.941911764998 +-172.40868768469946 +71.63837902192826 +0 +120 +absolute + + + +0.01 +smooth + +8.536704737829021 +47.350460871669135 +428.94178178946447 +-172.62159113508486 +71.64838212671897 +0 +120 +absolute + + + +0.01 +smooth + +8.536702621501432 +47.35046128982574 +428.9416513298981 +-172.83367165148945 +71.6585442292781 +0 +120 +absolute + + + +0.01 +smooth + +8.536700500837119 +47.35046170275607 +428.9415204719066 +-173.0449244075995 +71.66885763146443 +0 +120 +absolute + + + +0.01 +smooth + +8.536698376009348 +47.35046211025662 +428.94138930109796 +-173.2553445771014 +71.67931463513675 +0 +120 +absolute + + + +0.01 +smooth + +8.53669624719139 +47.35046251212387 +428.94125790308 +-173.46492733368135 +71.6899075421538 +0 +120 +absolute + + + +0.01 +smooth + +8.53669411455651 +47.35046290815426 +428.9411263634604 +-173.6736678510257 +71.7006286543744 +0 +120 +absolute + + + +0.01 +smooth + +8.536691978277982 +47.35046329814431 +428.9409947678471 +-173.88156130282087 +71.71147027365728 +0 +120 +absolute + + + +0.01 +smooth + +8.536689838529073 +47.350463681890474 +428.94086320184783 +-174.08860286275308 +71.72242470186127 +0 +120 +absolute + + + +0.01 +smooth + +8.536687695483048 +47.35046405918922 +428.94073175107064 +-174.29478770450862 +71.73348424084509 +0 +120 +absolute + + + +0.01 +smooth + +8.536685549313177 +47.35046442983704 +428.9406005011231 +-174.50011100177394 +71.74464119246757 +0 +120 +absolute + + + +0.01 +smooth + +8.536683400192729 +47.350464793630394 +428.9404695376131 +-174.7045679282352 +71.75588785858744 +0 +120 +absolute + + + +0.01 +smooth + +8.536681248294975 +47.35046515036576 +428.9403389461486 +-174.9081536575788 +71.7672165410635 +0 +120 +absolute + + + +0.01 +smooth + +8.53667909379318 +47.350465499839615 +428.9402088123373 +-175.1108633634911 +71.77861954175452 +0 +120 +absolute + + + +0.01 +smooth + +8.536676936860614 +47.35046584184844 +428.940079221787 +-175.31269221965832 +71.79008916251928 +0 +120 +absolute + + + +0.01 +smooth + +8.536674777670546 +47.3504661761887 +428.93995026010566 +-175.51363539976686 +71.80161770521656 +0 +120 +absolute + + + +0.01 +smooth + +8.536672616396244 +47.35046650265687 +428.93982201290095 +-175.7136880775029 +71.81319747170512 +0 +120 +absolute + + + +0.01 +smooth + +8.536670451601717 +47.35046682444409 +428.9396938989037 +-175.91293832019602 +71.8249002779977 +0 +120 +absolute + + + +0.01 +smooth + +8.536668281840466 +47.35046714467505 +428.93956531851035 +-176.111473661348 +71.83679987777023 +0 +120 +absolute + + + +0.01 +smooth + +8.536666107269973 +47.350467463046485 +428.9394363298262 +-176.30928847390297 +71.84889147937606 +0 +120 +absolute + + + +0.01 +smooth + +8.536663928047739 +47.35046777925517 +428.9393069909574 +-176.50637713080562 +71.86117029116872 +0 +120 +absolute + + + +0.01 +smooth + +8.536661744331251 +47.35046809299784 +428.9391773600096 +-176.70273400500042 +71.87363152150161 +0 +120 +absolute + + + +0.01 +smooth + +8.536659556278 +47.350468403971284 +428.93904749508823 +-176.89835346943164 +71.88627037872816 +0 +120 +absolute + + + +0.01 +smooth + +8.536657364045476 +47.35046871187224 +428.9389174542994 +-177.09322989704384 +71.89908207120186 +0 +120 +absolute + + + +0.01 +smooth + +8.536655167791178 +47.3504690163975 +428.938787295749 +-177.2873576607816 +71.91206180727616 +0 +120 +absolute + + + +0.01 +smooth + +8.536652967672595 +47.3504693172438 +428.9386570775425 +-177.48073113358922 +71.92520479530448 +0 +120 +absolute + + + +0.01 +smooth + +8.536650763847211 +47.35046961410787 +428.9385268577856 +-177.67334468841108 +71.93850624364026 +0 +120 +absolute + + + +0.01 +smooth + +8.536648556472528 +47.350469906686534 +428.9383966945843 +-177.86519269819195 +71.95196136063697 +0 +120 +absolute + + + +0.01 +smooth + +8.536646345706032 +47.35047019467652 +428.93826664604427 +-178.05626953587605 +71.96556535464806 +0 +120 +absolute + + + +0.01 +smooth + +8.536644131705216 +47.35047047777458 +428.9381367702712 +-178.24656957440786 +71.97931343402698 +0 +120 +absolute + + + +0.01 +smooth + +8.536641914627573 +47.35047075567749 +428.938007125371 +-178.43608718673192 +71.99320080712715 +0 +120 +absolute + + + +0.01 +smooth + +8.536639694630594 +47.35047102808201 +428.9378777694493 +-178.62481674579263 +72.00722268230203 +0 +120 +absolute + + + +0.01 +smooth + +8.536637471871769 +47.35047129468489 +428.9377487606119 +-178.81275262453448 +72.02137426790509 +0 +120 +absolute + + + +0.01 +smooth + +8.53663524650859 +47.350471555182885 +428.9376201569645 +-178.99988919590186 +72.03565077228974 +0 +120 +absolute + + + +0.01 +smooth + +8.536633018698552 +47.350471809272776 +428.93749201661296 +-179.18622083283935 +72.05004740380943 +0 +120 +absolute + + + +0.01 +smooth + +8.536630788599144 +47.3504720566513 +428.93736439766303 +-179.3717419082913 +72.06455937081765 +0 +120 +absolute + + + +0.01 +smooth + +8.536628556367857 +47.350472297015244 +428.9372373582204 +-179.5564467952022 +72.07918188166781 +0 +120 +absolute + + + +0.01 +smooth + +8.536626322162185 +47.35047253006134 +428.9371109563908 +-179.74032986651656 +72.09391014471336 +0 +120 +absolute + + + +0.01 +smooth + +8.536624086139618 +47.350472755486365 +428.9369852502801 +-179.92338549517876 +72.10873936830777 +0 +120 +absolute + + + +0.01 +smooth + +8.536621848457647 +47.350472972987085 +428.93686029799403 +-180.10560805413328 +72.12366476080446 +0 +120 +absolute + + + +0.01 +smooth + +8.536619609273767 +47.35047318226023 +428.9367361576383 +-180.28699191632464 +72.13868153055688 +0 +120 +absolute + + + +0.01 +smooth + +8.536617368745468 +47.3504733830026 +428.9366128873187 +-180.46753145469728 +72.1537848859185 +0 +120 +absolute + + + +0.01 +smooth + +8.53661512703024 +47.35047357491093 +428.936490545141 +-180.6472210421956 +72.16897003524275 +0 +120 +absolute + + + +0.01 +smooth + +8.536612884285578 +47.35047375768198 +428.93636918921095 +-180.8260550517641 +72.18423218688308 +0 +120 +absolute + + + +0.01 +smooth + +8.536610640493604 +47.35047393176344 +428.9362488156876 +-181.0040404893863 +72.19957290933218 +0 +120 +absolute + + + +0.01 +smooth + +8.536608393725476 +47.35047410566807 +428.93612874286873 +-181.1813214005007 +72.21506340536243 +0 +120 +absolute + + + +0.01 +smooth + +8.536606143523384 +47.3504742813674 +428.93600880286976 +-181.35793457517232 +72.23072220119347 +0 +120 +absolute + + + +0.01 +smooth + +8.53660389003356 +47.350474458219225 +428.9358890405245 +-181.53387314495802 +72.24654599173277 +0 +120 +absolute + + + +0.01 +smooth + +8.53660163340223 +47.350474635581314 +428.93576950066654 +-181.7091302414143 +72.26253147188761 +0 +120 +absolute + + + +0.01 +smooth + +8.536599373775617 +47.35047481281141 +428.93565022812965 +-181.88369899609793 +72.27867533656541 +0 +120 +absolute + + + +0.01 +smooth + +8.536597111299958 +47.35047498926733 +428.9355312677477 +-182.05757254056553 +72.29497428067356 +0 +120 +absolute + + + +0.01 +smooth + +8.536594846121483 +47.35047516430684 +428.9354126643546 +-182.230744006374 +72.31142499911947 +0 +120 +absolute + + + +0.01 +smooth + +8.53659257838642 +47.35047533728773 +428.93529446278404 +-182.40320652508004 +72.3280241868105 +0 +120 +absolute + + + +0.01 +smooth + +8.536590308240992 +47.350475507567744 +428.9351767078695 +-182.5749532282402 +72.34476853865402 +0 +120 +absolute + + + +0.01 +smooth + +8.53658803583143 +47.350475674504665 +428.9350594444451 +-182.7459772474112 +72.36165474955743 +0 +120 +absolute + + + +0.01 +smooth + +8.53658576130397 +47.3504758374563 +428.9349427173446 +-182.91627171414993 +72.37867951442817 +0 +120 +absolute + + + +0.01 +smooth + +8.536583484804837 +47.3504759957804 +428.93482657140186 +-183.08582976001298 +72.39583952817355 +0 +120 +absolute + + + +0.01 +smooth + +8.536581206480257 +47.350476148834744 +428.9347110514502 +-183.254644516557 +72.41313148570099 +0 +120 +absolute + + + +0.01 +smooth + +8.53657892647646 +47.3504762959771 +428.9345962023238 +-183.42270911533885 +72.43055208191788 +0 +120 +absolute + + + +0.01 +smooth + +8.536576644939679 +47.35047643656527 +428.93448206885637 +-183.59001668791512 +72.4480980117316 +0 +120 +absolute + + + +0.01 +smooth + +8.536574362016138 +47.35047656995702 +428.93436869588174 +-183.7565603658426 +72.46576597004955 +0 +120 +absolute + + + +0.01 +smooth + +8.536572077852071 +47.350476695510125 +428.9342561282335 +-183.92233328067803 +72.48355265177909 +0 +120 +absolute + + + +0.01 +smooth + +8.536569792593703 +47.35047681258235 +428.9341444107457 +-184.08732856397796 +72.50145475182762 +0 +120 +absolute + + + +0.01 +smooth + +8.536567506387266 +47.35047692053148 +428.93403358825185 +-184.25153934729926 +72.51946896510255 +0 +120 +absolute + + + +0.01 +smooth + +8.536565219378987 +47.350477018715296 +428.9339237055859 +-184.41495876219858 +72.53759198651122 +0 +120 +absolute + + + +0.01 +smooth + +8.536562931715096 +47.350477106491574 +428.9338148075816 +-184.57757994023262 +72.55582051096106 +0 +120 +absolute + + + +0.01 +smooth + +8.536560643541822 +47.35047718321809 +428.93370693907264 +-184.73939601295814 +72.57415123335943 +0 +120 +absolute + + + +0.01 +smooth + +8.536558355005393 +47.350477248252616 +428.9336001448929 +-184.9004001119318 +72.59258084861372 +0 +120 +absolute + + + +0.01 +smooth + +8.53655606625204 +47.35047730095293 +428.93349446987617 +-185.06058536871032 +72.61110605163131 +0 +120 +absolute + + + +0.01 +smooth + +8.53655377742799 +47.350477340676825 +428.93338995885614 +-185.21994491485046 +72.62972353731963 +0 +120 +absolute + + + +0.01 +smooth + +8.536551488679477 +47.35047736678206 +428.9332866566666 +-185.3784718819088 +72.64843000058602 +0 +120 +absolute + + + +0.01 +smooth + +8.53654920015272 +47.350477378626394 +428.9331846081414 +-185.53615940144226 +72.66722213633788 +0 +120 +absolute + + + +0.01 +smooth + +8.53654691134717 +47.35047737917221 +428.9330836261331 +-185.69305821738538 +72.68611509988861 +0 +120 +absolute + + + +0.01 +smooth + +8.536544620531135 +47.35047737853507 +428.93298308014636 +-185.84932771245187 +72.70515948636046 +0 +120 +absolute + + + +0.01 +smooth + +8.536542327724778 +47.35047737737244 +428.93288296615464 +-186.004970153928 +72.72435620488618 +0 +120 +absolute + + + +0.01 +smooth + +8.536540033066965 +47.350477375689564 +428.93278332264555 +-186.1599772052126 +72.74370278645304 +0 +120 +absolute + + + +0.01 +smooth + +8.53653773669654 +47.35047737349158 +428.93268418810607 +-186.314340529704 +72.76319676204814 +0 +120 +absolute + + + +0.01 +smooth + +8.536535438752363 +47.35047737078368 +428.9325856010238 +-186.46805179080098 +72.78283566265871 +0 +120 +absolute + + + +0.01 +smooth + +8.536533139373292 +47.350477367571074 +428.932487599886 +-186.6211026519022 +72.80261701927195 +0 +120 +absolute + + + +0.01 +smooth + +8.536530838698182 +47.35047736385891 +428.93239022317994 +-186.77348477640615 +72.82253836287502 +0 +120 +absolute + + + +0.01 +smooth + +8.53652853686588 +47.35047735965234 +428.9322935093927 +-186.9251898277114 +72.84259722445509 +0 +120 +absolute + + + +0.01 +smooth + +8.536526234015248 +47.350477354956595 +428.9321974970118 +-187.07620946921665 +72.86279113499936 +0 +120 +absolute + + + +0.01 +smooth + +8.53652393028514 +47.35047734977685 +428.93210222452467 +-187.22653536432057 +72.88311762549503 +0 +120 +absolute + + + +0.01 +smooth + +8.536521625814416 +47.35047734411828 +428.9320077304184 +-187.3761591764217 +72.90357422692928 +0 +120 +absolute + + + +0.01 +smooth + +8.536519320741922 +47.35047733798602 +428.9319140531802 +-187.52507256891857 +72.92415847028924 +0 +120 +absolute + + + +0.01 +smooth + +8.536517015206517 +47.3504773313853 +428.9318212312977 +-187.67326720520987 +72.94486788656215 +0 +120 +absolute + + + +0.01 +smooth + +8.53651470934706 +47.35047732432129 +428.9317293032579 +-187.8207347486943 +72.9657000067352 +0 +120 +absolute + + + +0.01 +smooth + +8.536512403302401 +47.35047731679917 +428.9316383075484 +-187.96746686277032 +72.98665236179554 +0 +120 +absolute + + + +0.01 +smooth + +8.536510097211398 +47.35047730882411 +428.93154828265614 +-188.1134552108366 +73.00772248273034 +0 +120 +absolute + + + +0.01 +smooth + +8.536507791212905 +47.350477300401295 +428.9314592670687 +-188.25869145629179 +73.02890790052685 +0 +120 +absolute + + + +0.01 +smooth + +8.536505485445776 +47.3504772915359 +428.93137129927317 +-188.40316726253442 +73.05020614617219 +0 +120 +absolute + + + +0.01 +smooth + +8.53650318004887 +47.350477282233115 +428.9312844177571 +-188.54687429296317 +73.07161475065357 +0 +120 +absolute + + + +0.01 +smooth + +8.536500875161039 +47.35047727249811 +428.93119866100767 +-188.68980421097666 +73.09313124495819 +0 +120 +absolute + + + +0.01 +smooth + +8.53649857092114 +47.35047726233607 +428.9311140675121 +-188.8319486799734 +73.1147531600732 +0 +120 +absolute + + + +0.01 +smooth + +8.536496267468024 +47.35047725175217 +428.9310306757578 +-188.9732993633521 +73.1364780269858 +0 +120 +absolute + + + +0.01 +smooth + +8.536493964940552 +47.3504772407516 +428.930948524232 +-189.11384792451133 +73.15830337668316 +0 +120 +absolute + + + +0.01 +smooth + +8.536491663477577 +47.35047722933952 +428.93086765142215 +-189.2535860268497 +73.18022674015249 +0 +120 +absolute + + + +0.01 +smooth + +8.536489363217953 +47.35047721752113 +428.9307880958154 +-189.39250533376585 +73.20224564838097 +0 +120 +absolute + + + +0.01 +smooth + +8.536487064300537 +47.35047720530161 +428.93070989589904 +-189.53059750865836 +73.22435763235576 +0 +120 +absolute + + + +0.01 +smooth + +8.536484766861028 +47.35047719266886 +428.93063308891254 +-189.66785455270733 +73.24656029738306 +0 +120 +absolute + + + +0.01 +smooth + +8.536482469656999 +47.35047717218265 +428.93055716649536 +-189.80441580254572 +73.26888380268174 +0 +120 +absolute + + + +0.01 +smooth + +8.536480171685843 +47.350477138139865 +428.9304817154073 +-189.94039358897257 +73.29135286216615 +0 +120 +absolute + + + +0.01 +smooth + +8.536477873082138 +47.350477091159156 +428.93040677268243 +-190.07577807852425 +73.31396542323048 +0 +120 +absolute + + + +0.01 +smooth + +8.536475573980445 +47.35047703185913 +428.9303323753542 +-190.2105594377369 +73.33671943326874 +0 +120 +absolute + + + +0.01 +smooth + +8.536473274515343 +47.35047696085844 +428.93025856045676 +-190.34472783314683 +73.35961283967511 +0 +120 +absolute + + + +0.01 +smooth + +8.536470974821395 +47.350476878775716 +428.9301853650239 +-190.47827343129026 +73.38264358984371 +0 +120 +absolute + + + +0.01 +smooth + +8.53646867503317 +47.350476786229585 +428.9301128260892 +-190.61118639870358 +73.40580963116861 +0 +120 +absolute + + + +0.01 +smooth + +8.536466375285242 +47.35047668383866 +428.9300409806866 +-190.7434569019227 +73.42910891104387 +0 +120 +absolute + + + +0.01 +smooth + +8.536464075712173 +47.350476572221595 +428.92996986584984 +-190.87507510748418 +73.45253937686367 +0 +120 +absolute + + + +0.01 +smooth + +8.536461776448542 +47.35047645199703 +428.92989951861296 +-191.00603118192421 +73.4760989760221 +0 +120 +absolute + + + +0.01 +smooth + +8.536459477628915 +47.35047632378358 +428.9298299760096 +-191.136315291779 +73.49978565591329 +0 +120 +absolute + + + +0.01 +smooth + +8.536457179387856 +47.35047618819986 +428.92976127507336 +-191.26591760358468 +73.52359736393127 +0 +120 +absolute + + + +0.01 +smooth + +8.536454881859935 +47.350476045864525 +428.9296934528383 +-191.39482828387767 +73.54753204747021 +0 +120 +absolute + + + +0.01 +smooth + +8.536452585179733 +47.35047589739622 +428.92962654633834 +-191.5230374991942 +73.57158765392423 +0 +120 +absolute + + + +0.01 +smooth + +8.536450289481808 +47.35047574341355 +428.9295605926071 +-191.65053541607054 +73.59576213068739 +0 +120 +absolute + + + +0.01 +smooth + +8.536447994900733 +47.35047558453514 +428.9294956286784 +-191.7773122010428 +73.62005342515383 +0 +120 +absolute + + + +0.01 +smooth + +8.536445701571076 +47.35047542137965 +428.92943169158616 +-191.90335802064732 +73.64445948471763 +0 +120 +absolute + + + +0.01 +smooth + +8.53644340962741 +47.35047525456569 +428.929368818364 +-192.02866304142037 +73.66897825677295 +0 +120 +absolute + + + +0.01 +smooth + +8.536441119204301 +47.35047508471189 +428.9293070460459 +-192.15321742989818 +73.69360768871383 +0 +120 +absolute + + + +0.01 +smooth + +8.53643883043632 +47.350474912436894 +428.9292464116656 +-192.27701135261697 +73.7183457279344 +0 +120 +absolute + + + +0.01 +smooth + +8.536436543458034 +47.350474738359324 +428.9291869522568 +-192.400034976113 +73.74319032182879 +0 +120 +absolute + + + +0.01 +smooth + +8.536434258404018 +47.350474563097826 +428.92912870485367 +-192.52227846692256 +73.7681394177911 +0 +120 +absolute + + + +0.01 +smooth + +8.536431975408837 +47.350474387271014 +428.9290717064896 +-192.64373199158183 +73.79319096321542 +0 +120 +absolute + + + +0.01 +smooth + +8.536429694607058 +47.35047421149753 +428.9290159941986 +-192.7643857166271 +73.81834290549588 +0 +120 +absolute + + + +0.01 +smooth + +8.53642741613326 +47.350474036395994 +428.9289616050145 +-192.88422980859463 +73.84359319202657 +0 +120 +absolute + + + +0.01 +smooth + +8.536425140122002 +47.35047386258504 +428.92890857597104 +-193.00325443402065 +73.8689397702016 +0 +120 +absolute + + + +0.01 +smooth + +8.53642286670786 +47.350473690683316 +428.92885694410205 +-193.12144975944145 +73.8943805874151 +0 +120 +absolute + + + +0.01 +smooth + +8.536420595826167 +47.35047352047381 +428.9288066542702 +-193.2388305719246 +73.91991773746925 +0 +120 +absolute + + + +0.01 +smooth + +8.536418325767892 +47.350473344725906 +428.928756892522 +-193.3556143258289 +73.94558755219744 +0 +120 +absolute + + + +0.01 +smooth + +8.536416056217297 +47.35047316183359 +428.928707493104 +-193.47184528296606 +73.97139739521107 +0 +120 +absolute + + + +0.01 +smooth + +8.536413787306778 +47.35047297204902 +428.9286584979406 +-193.5875122259143 +73.9973453062437 +0 +120 +absolute + + + +0.01 +smooth + +8.536411519168738 +47.35047277562436 +428.9286099489568 +-193.70260393725232 +74.02342932502884 +0 +120 +absolute + + + +0.01 +smooth + +8.536409251935577 +47.35047257281182 +428.92856188807747 +-193.81710919955856 +74.04964749130006 +0 +120 +absolute + + + +0.01 +smooth + +8.536406985739697 +47.35047236386353 +428.92851435722747 +-193.9310167954114 +74.0759978447909 +0 +120 +absolute + + + +0.01 +smooth + +8.536404720713495 +47.35047214903163 +428.9284673983313 +-194.04431550738937 +74.10247842523485 +0 +120 +absolute + + + +0.01 +smooth + +8.536402456989372 +47.35047192856833 +428.9284210533141 +-194.15699411807086 +74.12908727236547 +0 +120 +absolute + + + +0.01 +smooth + +8.536400194699734 +47.35047170272579 +428.9283753641005 +-194.26904141003448 +74.15582242591631 +0 +120 +absolute + + + +0.01 +smooth + +8.536397933976977 +47.350471471756165 +428.92833037261556 +-194.38044616585861 +74.18268192562091 +0 +120 +absolute + + + +0.01 +smooth + +8.536395674953496 +47.35047123591161 +428.92828612078375 +-194.4911971681217 +74.20966381121278 +0 +120 +absolute + + + +0.01 +smooth + +8.536393417761701 +47.3504709954443 +428.92824265053025 +-194.6012831994022 +74.23676612242545 +0 +120 +absolute + + + +0.01 +smooth + +8.536391162533992 +47.35047075060642 +428.92820000377975 +-194.7106930422788 +74.26398689899251 +0 +120 +absolute + + + +0.01 +smooth + +8.536388909402763 +47.350470501650115 +428.92815822245706 +-194.8194154793297 +74.29132418064745 +0 +120 +absolute + + + +0.01 +smooth + +8.536386658500417 +47.35047024882755 +428.9281173484869 +-194.9274392931335 +74.31877600712382 +0 +120 +absolute + + + +0.01 +smooth + +8.536384409959359 +47.3504699923909 +428.9280774237942 +-195.03475326626864 +74.34634041815515 +0 +120 +absolute + + + +0.01 +smooth + +8.536382163911984 +47.350469732592316 +428.92803849030395 +-195.14134618131362 +74.37401545347498 +0 +120 +absolute + + + +0.01 +smooth + +8.536379920490694 +47.350469469683986 +428.92800058994067 +-195.24720682084694 +74.40179915281688 +0 +120 +absolute + + + +0.01 +smooth + +8.53637767982789 +47.35046920391807 +428.92796376462934 +-195.35232396744695 +74.42968955591432 +0 +120 +absolute + + + +0.01 +smooth + +8.536375442055974 +47.350468935546715 +428.92792805629466 +-195.45668640369223 +74.45768470250088 +0 +120 +absolute + + + +0.01 +smooth + +8.536373207307342 +47.3504686648221 +428.92789350686166 +-195.5602829121612 +74.4857826323101 +0 +120 +absolute + + + +0.01 +smooth + +8.536370975714398 +47.3504683919964 +428.92786015825504 +-195.66310227543238 +74.51398138507551 +0 +120 +absolute + + + +0.01 +smooth + +8.536368747409544 +47.35046811732176 +428.9278280523996 +-195.76513327608419 +74.54227900053064 +0 +120 +absolute + + + +0.01 +smooth + +8.536366522525178 +47.35046784105036 +428.9277972312202 +-195.86636469669514 +74.57067351840902 +0 +120 +absolute + + + +0.01 +smooth + +8.536364301193698 +47.35046756343437 +428.9277677366417 +-195.9667853198436 +74.59916297844421 +0 +120 +absolute + + + +0.01 +smooth + +8.536362083547512 +47.350467284725944 +428.9277396105889 +-196.06638392810822 +74.62774542036972 +0 +120 +absolute + + + +0.01 +smooth + +8.536359869719014 +47.35046700517725 +428.9277128949866 +-196.16514930406737 +74.65641888391912 +0 +120 +absolute + + + +0.01 +smooth + +8.53635765913053 +47.350466723647514 +428.9276871811871 +-196.26316770676846 +74.68519543116749 +0 +120 +absolute + + + +0.01 +smooth + +8.536355450178267 +47.350466436937744 +428.9276614239954 +-196.36066557325128 +74.71410729147556 +0 +120 +absolute + + + +0.01 +smooth + +8.536353242914826 +47.35046614505587 +428.9276356429572 +-196.45764131215145 +74.74315389353858 +0 +120 +absolute + + + +0.01 +smooth + +8.536351037471695 +47.35046584816359 +428.9276099079733 +-196.55408248870472 +74.77233310623406 +0 +120 +absolute + + + +0.01 +smooth + +8.536348833980371 +47.35046554642265 +428.92758428894484 +-196.6499766681474 +74.80164279843954 +0 +120 +absolute + + + +0.01 +smooth + +8.536346632572338 +47.35046523999479 +428.9275588557724 +-196.74531141571552 +74.83108083903254 +0 +120 +absolute + + + +0.01 +smooth + +8.536344433379089 +47.3504649290417 +428.92753367835695 +-196.840074296645 +74.86064509689056 +0 +120 +absolute + + + +0.01 +smooth + +8.536342236532116 +47.350464613725144 +428.9275088265993 +-196.93425287617202 +74.89033344089117 +0 +120 +absolute + + + +0.01 +smooth + +8.536340042162907 +47.35046429420684 +428.9274843704004 +-197.02783471953262 +74.92014373991182 +0 +120 +absolute + + + +0.01 +smooth + +8.53633785040296 +47.350463970648526 +428.9274603796611 +-197.12080739196284 +74.95007386283011 +0 +120 +absolute + + + +0.01 +smooth + +8.536335661383761 +47.35046364321193 +428.9274369242822 +-197.21315845869879 +74.98012167852353 +0 +120 +absolute + + + +0.01 +smooth + +8.536333475236795 +47.35046331205875 +428.9274140741644 +-197.3048754849764 +75.0102850558696 +0 +120 +absolute + + + +0.01 +smooth + +8.536331292093562 +47.350462977350745 +428.9273918992088 +-197.39594603603177 +75.04056186374584 +0 +120 +absolute + + + +0.01 +smooth + +8.536329112085552 +47.35046263924967 +428.92737046931626 +-197.48635767710113 +75.07094997102979 +0 +120 +absolute + + + +0.01 +smooth + +8.53632693534425 +47.350462297917204 +428.9273498543875 +-197.57609797342033 +75.10144724659898 +0 +120 +absolute + + + +0.01 +smooth + +8.53632476200115 +47.35046195351508 +428.9273301243234 +-197.66515449022546 +75.1320515593309 +0 +120 +absolute + + + +0.01 +smooth + +8.536322592187744 +47.35046160620507 +428.927311349025 +-197.7535147927527 +75.16276077810312 +0 +120 +absolute + + + +0.01 +smooth + +8.536320426035523 +47.35046125614887 +428.9272935983928 +-197.841166446238 +75.19357277179313 +0 +120 +absolute + + + +0.01 +smooth + +8.536318263675975 +47.350460903508214 +428.92727694232804 +-197.92809701591744 +75.22448540927844 +0 +120 +absolute + + + +0.01 +smooth + +8.536316105240594 +47.35046054844483 +428.92726145073135 +-198.0142940670271 +75.25549655943662 +0 +120 +absolute + + + +0.01 +smooth + +8.536313950860867 +47.35046019112045 +428.9272471935036 +-198.09974516480298 +75.28660409114516 +0 +120 +absolute + + + +0.01 +smooth + +8.536311800668289 +47.3504598316968 +428.9272342405458 +-198.1844378744812 +75.3178058732816 +0 +120 +absolute + + + +0.01 +smooth + +8.536309654794348 +47.35045947033562 +428.9272226617585 +-198.26835976129783 +75.34909977472347 +0 +120 +absolute + + + +0.01 +smooth + +8.536307513370534 +47.35045910719864 +428.92721252704297 +-198.35149839048884 +75.38048366434826 +0 +120 +absolute + + + +0.01 +smooth + +8.536305376528341 +47.35045874244757 +428.92720390629984 +-198.4338413272904 +75.41195541103353 +0 +120 +absolute + + + +0.01 +smooth + +8.536303244399258 +47.350458376244156 +428.92719686942996 +-198.5153761369385 +75.44351288365678 +0 +120 +absolute + + + +0.01 +smooth + +8.536301117114776 +47.350458008750124 +428.9271914863342 +-198.59609038466917 +75.47515395109555 +0 +120 +absolute + + + +0.01 +smooth + +8.536298994793343 +47.35045764011136 +428.9271878183662 +-198.67597357039736 +75.50687674288079 +0 +120 +absolute + + + +0.01 +smooth + +8.536296876026812 +47.35045726861238 +428.92718491316117 +-198.75524132905286 +75.53870980878052 +0 +120 +absolute + + + +0.01 +smooth + +8.536294759889708 +47.35045689309649 +428.9271820895471 +-198.83403698090356 +75.5706718036866 +0 +120 +absolute + + + +0.01 +smooth + +8.536292646513363 +47.350456513684485 +428.92717934950565 +-198.91234698835206 +75.6027602185395 +0 +120 +absolute + + + +0.01 +smooth + +8.53629053602911 +47.35045613049707 +428.9271766950191 +-198.99015781380103 +75.63497254427985 +0 +120 +absolute + + + +0.01 +smooth + +8.53628842856829 +47.350455743655026 +428.92717412806917 +-199.06745591965304 +75.66730627184808 +0 +120 +absolute + + + +0.01 +smooth + +8.536286324262225 +47.350455353279045 +428.9271716506373 +-199.1442277683105 +75.69975889218469 +0 +120 +absolute + + + +0.01 +smooth + +8.53628422324226 +47.35045495948991 +428.92716926470575 +-199.22045982217608 +75.73232789623027 +0 +120 +absolute + + + +0.01 +smooth + +8.536282125639731 +47.350454562408366 +428.9271669722562 +-199.29613854365243 +75.7650107749253 +0 +120 +absolute + + + +0.01 +smooth + +8.536280031585969 +47.35045416215513 +428.9271647752705 +-199.37125039514206 +75.7978050192103 +0 +120 +absolute + + + +0.01 +smooth + +8.536277941212303 +47.350453758850946 +428.9271626757304 +-199.44578183904747 +75.83070812002575 +0 +120 +absolute + + + +0.01 +smooth + +8.536275854650077 +47.35045335261659 +428.9271606756178 +-199.51971933777128 +75.8637175683122 +0 +120 +absolute + + + +0.01 +smooth + +8.536273772030624 +47.35045294357279 +428.92715877691455 +-199.59304935371617 +75.8968308550102 +0 +120 +absolute + + + +0.01 +smooth + +8.536271693485277 +47.350452531840276 +428.9271569816025 +-199.6657583492846 +75.9300454710602 +0 +120 +absolute + + + +0.01 +smooth + +8.536269619145369 +47.35045211753979 +428.92715529166327 +-199.73783278687912 +75.96335890740275 +0 +120 +absolute + + + +0.01 +smooth + +8.536267549142234 +47.3504517007921 +428.9271537090789 +-199.80925912890237 +75.99676865497834 +0 +120 +absolute + + + +0.01 +smooth + +8.536265483607213 +47.35045128171792 +428.9271522358313 +-199.8800238377569 +76.03027220472751 +0 +120 +absolute + + + +0.01 +smooth + +8.536263422671638 +47.35045086043803 +428.92715087390206 +-199.95011337584532 +76.06386704759079 +0 +120 +absolute + + + +0.01 +smooth + +8.536261366466842 +47.35045043707314 +428.92714962527305 +-200.01951420557015 +76.09755067450867 +0 +120 +absolute + + + +0.01 +smooth + +8.53625931512416 +47.35045001174401 +428.92714849192623 +-200.08821278933402 +76.13132057642167 +0 +120 +absolute + + + +0.01 +smooth + +8.536257268774929 +47.35044958457138 +428.9271474758434 +-200.15619558953938 +76.1651742442703 +0 +120 +absolute + + + +0.01 +smooth + +8.53625522755048 +47.35044915567599 +428.9271465790063 +-200.22344906858896 +76.19910916899511 +0 +120 +absolute + + + +0.01 +smooth + +8.536253191582151 +47.350448725178595 +428.9271458033968 +-200.28995968888523 +76.23312284153656 +0 +120 +absolute + + + +0.01 +smooth + +8.536251161001278 +47.350448293199925 +428.9271451509968 +-200.35571391283082 +76.2672127528352 +0 +120 +absolute + + + +0.01 +smooth + +8.53624913593919 +47.35044785986072 +428.9271446237881 +-200.42069820282828 +76.30137639383156 +0 +120 +absolute + + + +0.01 +smooth + +8.536247116527228 +47.35044742528174 +428.92714422375235 +-200.48489902128017 +76.33561125546612 +0 +120 +absolute + + + +0.01 +smooth + +8.536245102896723 +47.350446989583716 +428.92714395287163 +-200.54830283058908 +76.36991482867944 +0 +120 +absolute + + + +0.01 +smooth + +8.536243095179012 +47.3504465528874 +428.92714381312766 +-200.61089609315758 +76.40428460441197 +0 +120 +absolute + + + +0.01 +smooth + +8.536241093228348 +47.350446115081446 +428.92714392520963 +-200.67270881976094 +76.43872387712304 +0 +120 +absolute + + + +0.01 +smooth + +8.536239095130643 +47.35044567456545 +428.9271451454289 +-200.73404856761957 +76.47327279891469 +0 +120 +absolute + + + +0.01 +smooth + +8.536237100603763 +47.35044523109258 +428.92714759333694 +-200.7949657406069 +76.5079370300229 +0 +120 +absolute + + + +0.01 +smooth + +8.536235109779517 +47.350444784761514 +428.92715120798397 +-200.8554456297997 +76.54271353467439 +0 +120 +absolute + + + +0.01 +smooth + +8.5362331227897 +47.35044433567097 +428.92715592842046 +-200.91547352627518 +76.5775992770961 +0 +120 +absolute + + + +0.01 +smooth + +8.536231139766116 +47.350443883919645 +428.9271616936966 +-200.9750347211102 +76.61259122151476 +0 +120 +absolute + + + +0.01 +smooth + +8.53622916084057 +47.350443429606266 +428.9271684428627 +-201.03411450538187 +76.64768633215728 +0 +120 +absolute + + + +0.01 +smooth + +8.536227186144863 +47.350442972829555 +428.9271761149692 +-201.0926981701672 +76.68288157325047 +0 +120 +absolute + + + +0.01 +smooth + +8.536225215810797 +47.35044251368821 +428.9271846490663 +-201.1507710065432 +76.71817390902115 +0 +120 +absolute + + + +0.01 +smooth + +8.536223249970169 +47.350442052280904 +428.92719398420434 +-201.20831830558677 +76.75356030369609 +0 +120 +absolute + + + +0.01 +smooth + +8.536221288754785 +47.350441588706396 +428.9272040594337 +-201.26532535837507 +76.7890377215022 +0 +120 +absolute + + + +0.01 +smooth + +8.536219332296449 +47.35044112306339 +428.92721481380465 +-201.32177745598506 +76.8246031266663 +0 +120 +absolute + + + +0.01 +smooth + +8.536217380726963 +47.35044065545059 +428.92722618636776 +-201.37765988949377 +76.86025348341519 +0 +120 +absolute + + + +0.01 +smooth + +8.536215434178121 +47.350440185966676 +428.9272381161729 +-201.4329579499781 +76.89598575597569 +0 +120 +absolute + + + +0.01 +smooth + +8.536213492781737 +47.35043971471039 +428.92725054227077 +-201.48765692851515 +76.93179690857465 +0 +120 +absolute + + + +0.01 +smooth + +8.536211556669606 +47.35043924178045 +428.92726340371144 +-201.54174211618192 +76.96768390543893 +0 +120 +absolute + + + +0.01 +smooth + +8.53620962597353 +47.35043876727554 +428.9272766395454 +-201.59519880405543 +77.0036437107953 +0 +120 +absolute + + + +0.01 +smooth + +8.536207700825313 +47.35043829129439 +428.927290188823 +-201.6480122832127 +77.03967328887062 +0 +120 +absolute + + + +0.01 +smooth + +8.536205781356756 +47.3504378139357 +428.92730399059445 +-201.70016784473074 +77.0757696038917 +0 +120 +absolute + + + +0.01 +smooth + +8.536203867699662 +47.35043733529818 +428.92731798391014 +-201.75165077968649 +77.11192962008539 +0 +120 +absolute + + + +0.01 +smooth + +8.536201959985831 +47.35043685548054 +428.92733210782035 +-201.80244637915706 +77.14815030167854 +0 +120 +absolute + + + +0.01 +smooth + +8.536200058347067 +47.3504363745815 +428.92734630137545 +-201.85253993421938 +77.18442861289793 +0 +120 +absolute + + + +0.01 +smooth + +8.53619816291517 +47.35043589269976 +428.92736050362566 +-201.90191673595052 +77.2207615179704 +0 +120 +absolute + + + +0.01 +smooth + +8.536196273821945 +47.35043540993402 +428.9273746536215 +-201.95056207542746 +77.25714598112282 +0 +120 +absolute + + + +0.01 +smooth + +8.536194391199192 +47.35043492638301 +428.92738869041307 +-201.99846124372723 +77.29357896658198 +0 +120 +absolute + + + +0.01 +smooth + +8.536192515178712 +47.350434442145435 +428.9274025530509 +-202.04559953192683 +77.3300574385747 +0 +120 +absolute + + + +0.01 +smooth + +8.53619064589231 +47.35043395732 +428.92741618058506 +-202.09196223110325 +77.36657836132783 +0 +120 +absolute + + + +0.01 +smooth + +8.536188783471786 +47.35043347200541 +428.92742951206617 +-202.13753463233354 +77.40313869906821 +0 +120 +absolute + + + +0.01 +smooth + +8.536186927120006 +47.35043298572058 +428.9274427837883 +-202.1824564308811 +77.43975612681501 +0 +120 +absolute + + + +0.01 +smooth + +8.536185075053508 +47.35043249736186 +428.92745656757495 +-202.22703048122443 +77.4764699908644 +0 +120 +absolute + + + +0.01 +smooth + +8.536183227347255 +47.350432006979666 +428.927470857306 +-202.27125007791523 +77.51327793558283 +0 +120 +absolute + + + +0.01 +smooth + +8.536181384134284 +47.35043151466062 +428.92748562852694 +-202.3150988541914 +77.55017630678971 +0 +120 +absolute + + + +0.01 +smooth + +8.53617954554762 +47.35043102049131 +428.92750085678307 +-202.3585604432907 +77.58716145030422 +0 +120 +absolute + + + +0.01 +smooth + +8.536177711720306 +47.35043052455835 +428.92751651762 +-202.40161847845116 +77.62422971194573 +0 +120 +absolute + + + +0.01 +smooth + +8.536175882785368 +47.35043002694831 +428.927532586583 +-202.4442565929105 +77.66137743753346 +0 +120 +absolute + + + +0.01 +smooth + +8.536174058875842 +47.350429527747835 +428.9275490392179 +-202.48645841990663 +77.69860097288678 +0 +120 +absolute + + + +0.01 +smooth + +8.536172240124753 +47.350429027043475 +428.92756585106974 +-202.52820759267732 +77.73589666382496 +0 +120 +absolute + + + +0.01 +smooth + +8.53617042666514 +47.35042852492188 +428.92758299768406 +-202.56948774446053 +77.77326085616727 +0 +120 +absolute + + + +0.01 +smooth + +8.53616861863004 +47.35042802146962 +428.92760045460653 +-202.61028250849415 +77.81068989573305 +0 +120 +absolute + + + +0.01 +smooth + +8.53616681615248 +47.350427516773316 +428.92761819738257 +-202.65057551801596 +77.84818012834157 +0 +120 +absolute + + + +0.01 +smooth + +8.536165019365487 +47.35042701091953 +428.9276362015572 +-202.69035040626372 +77.88572789981211 +0 +120 +absolute + + + +0.01 +smooth + +8.536163228402103 +47.350426503994896 +428.92765444267627 +-202.72959080647547 +77.92332955596397 +0 +120 +absolute + + + +0.01 +smooth + +8.53616144339536 +47.35042599608602 +428.9276728962854 +-202.76828035188902 +77.96098144261651 +0 +120 +absolute + + + +0.01 +smooth + +8.536159664478284 +47.35042548727948 +428.92769153792955 +-202.80640267574216 +77.99867990558896 +0 +120 +absolute + + + +0.01 +smooth + +8.536157891783915 +47.35042497766187 +428.9277103431545 +-202.8439414112728 +78.03642129070062 +0 +120 +absolute + + + +0.01 +smooth + +8.53615612544528 +47.350424467319826 +428.9277292875056 +-202.88088019171877 +78.07420194377079 +0 +120 +absolute + + + +0.01 +smooth + +8.536154365595413 +47.350423956339924 +428.92774834652835 +-202.91720265031796 +78.11201821061879 +0 +120 +absolute + + + +0.01 +smooth + +8.53615261236735 +47.35042344480877 +428.9277674957681 +-202.95289242030822 +78.14986643706388 +0 +120 +absolute + + + +0.01 +smooth + +8.536150865894118 +47.350422932812954 +428.9277867107704 +-202.9879331349273 +78.18774296892536 +0 +120 +absolute + + + +0.01 +smooth + +8.536149126308755 +47.35042242043909 +428.92780596708076 +-203.02230842741324 +78.22564415202257 +0 +120 +absolute + + + +0.01 +smooth + +8.536147393744292 +47.35042190777378 +428.9278252402444 +-203.05600193100378 +78.26356633217476 +0 +120 +absolute + + + +0.01 +smooth + +8.53614566833376 +47.35042139490361 +428.927844505807 +-203.08899727893677 +78.30150585520121 +0 +120 +absolute + + + +0.01 +smooth + +8.536143950210192 +47.35042088191519 +428.9278637393139 +-203.12127810445017 +78.33945906692128 +0 +120 +absolute + + + +0.01 +smooth + +8.536142239506622 +47.350420368895115 +428.92788291631064 +-203.1528280407817 +78.3774223131542 +0 +120 +absolute + + + +0.01 +smooth + +8.536140536356083 +47.35041985593 +428.92790201234254 +-203.1836307211693 +78.4153919397193 +0 +120 +absolute + + + +0.01 +smooth + +8.536138840856612 +47.35041934308886 +428.92792100708687 +-203.2136761045309 +78.45336512771796 +0 +120 +absolute + + + +0.01 +smooth + +8.536137151190132 +47.35041882947745 +428.9279401089594 +-203.243299934742 +78.49138466740548 +0 +120 +absolute + + + +0.01 +smooth + +8.536135466368096 +47.35041831461321 +428.9279594358038 +-203.27268608951184 +78.52947314484817 +0 +120 +absolute + + + +0.01 +smooth + +8.536133786525799 +47.35041779857684 +428.9279789741072 +-203.30181492763563 +78.56762624465672 +0 +120 +absolute + + + +0.01 +smooth + +8.536132111798516 +47.35041728144902 +428.9279987103565 +-203.33066680790847 +78.60583965144161 +0 +120 +absolute + + + +0.01 +smooth + +8.53613044232153 +47.35041676331045 +428.92801863103904 +-203.35922208912555 +78.64410904981347 +0 +120 +absolute + + + +0.01 +smooth + +8.536128778230125 +47.35041624424181 +428.9280387226414 +-203.38746113008185 +78.68243012438282 +0 +120 +absolute + + + +0.01 +smooth + +8.536127119659582 +47.35041572432382 +428.92805897165124 +-203.4153642895726 +78.72079855976033 +0 +120 +absolute + + + +0.01 +smooth + +8.536125466745181 +47.35041520363711 +428.928079364555 +-203.4429119263929 +78.75921004055647 +0 +120 +absolute + + + +0.01 +smooth + +8.536123819622203 +47.3504146822624 +428.9280998878399 +-203.47008439933782 +78.79766025138188 +0 +120 +absolute + + + +0.01 +smooth + +8.536122178425936 +47.350414160280394 +428.92812052799326 +-203.4968620672026 +78.83614487684714 +0 +120 +absolute + + + +0.01 +smooth + +8.536120543291656 +47.35041363777177 +428.9281412715018 +-203.52322528878227 +78.87465960156283 +0 +120 +absolute + + + +0.01 +smooth + +8.53611891435465 +47.35041311481721 +428.9281621048527 +-203.54915442287196 +78.91320011013951 +0 +120 +absolute + + + +0.01 +smooth + +8.536117291750193 +47.3504125914974 +428.92818301453275 +-203.57462982826678 +78.95176208718773 +0 +120 +absolute + + + +0.01 +smooth + +8.536115675613575 +47.350412067893046 +428.9282039870294 +-203.599631863762 +78.99034121731815 +0 +120 +absolute + + + +0.01 +smooth + +8.536114066080073 +47.35041154408482 +428.92822500882954 +-203.6241408881525 +79.02893318514127 +0 +120 +absolute + + + +0.01 +smooth + +8.536112463284969 +47.35041102015342 +428.92824606642 +-203.64813726023357 +79.06753367526767 +0 +120 +absolute + + + +0.01 +smooth + +8.536110867363545 +47.350410496179535 +428.92826714628796 +-203.67160133880031 +79.10613837230798 +0 +120 +absolute + + + +0.01 +smooth + +8.536109278451086 +47.350409972243845 +428.9282882349206 +-203.69451348264784 +79.14474296087275 +0 +120 +absolute + + + +0.01 +smooth + +8.536107696682869 +47.35040944842705 +428.92830931880474 +-203.71685405057121 +79.18334312557255 +0 +120 +absolute + + + +0.01 +smooth + +8.53610612219418 +47.35040892480983 +428.9283303844275 +-203.7386034013656 +79.22193455101797 +0 +120 +absolute + + + +0.01 +smooth + +8.5361045551203 +47.35040840147288 +428.92835141827595 +-203.75974189382617 +79.26051292181957 +0 +120 +absolute + + + +0.01 +smooth + +8.53610299559651 +47.35040787849689 +428.92837240683707 +-203.78024988674798 +79.29907392258795 +0 +120 +absolute + + + +0.01 +smooth + +8.536101443758092 +47.350407355962545 +428.928393336598 +-203.80010773892613 +79.33761323793368 +0 +120 +absolute + + + +0.01 +smooth + +8.536099899740329 +47.35040683395053 +428.92841419404556 +-203.81929580915585 +79.37612655246733 +0 +120 +absolute + + + +0.01 +smooth + +8.536098363678501 +47.35040631254154 +428.9284349656671 +-203.8377944562322 +79.41460955079947 +0 +120 +absolute + + + +0.01 +smooth + +8.536096835707891 +47.35040579181626 +428.9284556379494 +-203.8555840389503 +79.45305791754072 +0 +120 +absolute + + + +0.01 +smooth + +8.536095315963784 +47.35040527185539 +428.92847619737967 +-203.87264491610523 +79.49146733730161 +0 +120 +absolute + + + +0.01 +smooth + +8.536093804161503 +47.35040475255541 +428.9284966566159 +-203.8890499397081 +79.52984419890336 +0 +120 +absolute + + + +0.01 +smooth + +8.536092297917914 +47.3504042328913 +428.9285171608224 +-203.90533059495993 +79.56824816095816 +0 +120 +absolute + + + +0.01 +smooth + +8.536090796951713 +47.350403712757966 +428.9285377268735 +-203.92154993871023 +79.60668497017332 +0 +120 +absolute + + + +0.01 +smooth + +8.536089301401688 +47.350403192234445 +428.9285583456562 +-203.937678108716 +79.64514964112763 +0 +120 +absolute + + + +0.01 +smooth + +8.53608781140663 +47.35040267139978 +428.9285790080572 +-203.9536852427342 +79.68363718839976 +0 +120 +absolute + + + +0.01 +smooth + +8.53608632710533 +47.35040215033301 +428.9285997049636 +-203.96954147852193 +79.7221426265685 +0 +120 +absolute + + + +0.01 +smooth + +8.53608484863658 +47.35040162911318 +428.928620427262 +-203.9852169538361 +79.76066097021254 +0 +120 +absolute + + + +0.01 +smooth + +8.536083376139166 +47.3504011078193 +428.928641165839 +-204.00068180643368 +79.7991872339106 +0 +120 +absolute + + + +0.01 +smooth + +8.536081909751884 +47.350400586530434 +428.92866191158157 +-204.01590617407174 +79.83771643224144 +0 +120 +absolute + + + +0.01 +smooth + +8.536080449613525 +47.35040006532562 +428.9286826553768 +-204.03086019450728 +79.87624357978379 +0 +120 +absolute + + + +0.01 +smooth + +8.53607899586288 +47.350399544283896 +428.9287033881113 +-204.04551400549735 +79.91476369111636 +0 +120 +absolute + + + +0.01 +smooth + +8.536077548638737 +47.350399023484286 +428.92872410067173 +-204.05983774479876 +79.95327178081786 +0 +120 +absolute + + + +0.01 +smooth + +8.53607610807989 +47.35039850300583 +428.92874478394504 +-204.07380155016867 +79.99176286346709 +0 +120 +absolute + + + +0.01 +smooth + +8.536074674325125 +47.350397982927575 +428.92876542881794 +-204.08737555936403 +80.0302319536427 +0 +120 +absolute + + + +0.01 +smooth + +8.536073247513242 +47.350397463328555 +428.9287860261776 +-204.1005299101419 +80.06867406592347 +0 +120 +absolute + + + +0.01 +smooth + +8.536071827783024 +47.35039694428782 +428.92880656691034 +-204.11323474025914 +80.10708421488813 +0 +120 +absolute + + + +0.01 +smooth + +8.536070415273265 +47.3503964258844 +428.92882704190333 +-204.12546018747287 +80.14545741511537 +0 +120 +absolute + + + +0.01 +smooth + +8.536069010122755 +47.35039590819733 +428.92884744204315 +-204.13717638954012 +80.18378868118398 +0 +120 +absolute + + + +0.01 +smooth + +8.536067612470287 +47.35039539130563 +428.9288677582168 +-204.14835348421772 +80.22207302767262 +0 +120 +absolute + + + +0.01 +smooth + +8.536066222454648 +47.35039487528837 +428.92888798131094 +-204.1589616092628 +80.26030546916007 +0 +120 +absolute + + + +0.01 +smooth + +8.536064840214634 +47.35039436022458 +428.9289081022126 +-204.16897090243236 +80.29848102022505 +0 +120 +absolute + + + +0.01 +smooth + +8.53606346588903 +47.350393846193285 +428.9289281118082 +-204.17835150148335 +80.33659469544628 +0 +120 +absolute + + + +0.01 +smooth + +8.536062099616634 +47.350393333273544 +428.928948000985 +-204.1870735441728 +80.3746415094025 +0 +120 +absolute + + + +0.01 +smooth + +8.53606074153623 +47.35039282154436 +428.92896776062946 +-204.19510716825766 +80.41261647667241 +0 +120 +absolute + + + +0.01 +smooth + +8.536059391786615 +47.35039231108482 +428.92898738162853 +-204.202422511495 +80.4505146118348 +0 +120 +absolute + + + +0.01 +smooth + +8.536058050506577 +47.35039180197392 +428.9290068548692 +-204.2089897116418 +80.48833092946836 +0 +120 +absolute + + + +0.01 +smooth + +8.536056717834905 +47.35039129429072 +428.929026171238 +-204.21477890645502 +80.5260604441518 +0 +120 +absolute + + + +0.01 +smooth + +8.536055393910395 +47.35039078811426 +428.92904532162186 +-204.21976023369166 +80.56369817046388 +0 +120 +absolute + + + +0.01 +smooth + +8.536054077551697 +47.35039028297838 +428.9290643541954 +-204.22419075177964 +80.60127513970143 +0 +120 +absolute + + + +0.01 +smooth + +8.536052766607309 +47.35038977801595 +428.9290833606556 +-204.22855163112388 +80.63884855055711 +0 +120 +absolute + + + +0.01 +smooth + +8.536051461179797 +47.35038927329046 +428.9291023359428 +-204.23284402871747 +80.67641387940216 +0 +120 +absolute + + + +0.01 +smooth + +8.536050161412875 +47.35038876888237 +428.92912127322245 +-204.23706024943453 +80.71396547849635 +0 +120 +absolute + + + +0.01 +smooth + +8.536048867450248 +47.35038826487214 +428.92914016565936 +-204.24119259814904 +80.75149770009932 +0 +120 +absolute + + + +0.01 +smooth + +8.536047579435623 +47.35038776134024 +428.92915900641884 +-204.24523337973503 +80.7890048964708 +0 +120 +absolute + + + +0.01 +smooth + +8.536046297512705 +47.350387258367114 +428.9291777886658 +-204.2491748990666 +80.82648141987049 +0 +120 +absolute + + + +0.01 +smooth + +8.536045021825197 +47.350386756033245 +428.9291965055657 +-204.25300946101765 +80.86392162255807 +0 +120 +absolute + + + +0.01 +smooth + +8.536043752516813 +47.35038625441911 +428.9292151502835 +-204.2567293704624 +80.90131985679331 +0 +120 +absolute + + + +0.01 +smooth + +8.536042489731257 +47.35038575360515 +428.9292337159842 +-204.26032693227478 +80.93867047483583 +0 +120 +absolute + + + +0.01 +smooth + +8.53604123361223 +47.350385253671824 +428.929252195833 +-204.2637944513287 +80.97596782894536 +0 +120 +absolute + + + +0.01 +smooth + +8.536039984303445 +47.35038475469962 +428.92927058299483 +-204.2671242324983 +81.01320627138158 +0 +120 +absolute + + + +0.01 +smooth + +8.536038741948605 +47.350384256769 +428.9292888706353 +-204.27030858065774 +81.05038015440427 +0 +120 +absolute + + + +0.01 +smooth + +8.536037506691418 +47.35038375996041 +428.92930705191907 +-204.27333980068093 +81.08748383027302 +0 +120 +absolute + + + +0.01 +smooth + +8.53603627867559 +47.350383264354335 +428.9293251200114 +-204.27621019744186 +81.12451165124759 +0 +120 +absolute + + + +0.01 +smooth + +8.536035058044826 +47.35038277003123 +428.92934306807746 +-204.27891207581465 +81.1614579695877 +0 +120 +absolute + + + +0.01 +smooth + +8.536033844942835 +47.35038227707156 +428.9293608892823 +-204.28143774067325 +81.198317137553 +0 +120 +absolute + + + +0.01 +smooth + +8.536032639513323 +47.35038178555578 +428.92937857679107 +-204.2837794968918 +81.23508350740323 +0 +120 +absolute + + + +0.01 +smooth + +8.536031441899995 +47.350381295564375 +428.9293961237689 +-204.28592964934424 +81.27175143139809 +0 +120 +absolute + + + +0.01 +smooth + +8.536030252246558 +47.350380807177785 +428.92941352338084 +-204.28788050290467 +81.30831526179725 +0 +120 +absolute + + + +0.01 +smooth + +8.536029070696717 +47.35038032047649 +428.92943076879214 +-204.28962436244706 +81.34476935086042 +0 +120 +absolute + + + +0.01 +smooth + +8.536027897394181 +47.35037983554096 +428.92944785316774 +-204.29115353284547 +81.38110805084733 +0 +120 +absolute + + + +0.01 +smooth + +8.536026732482657 +47.35037935245164 +428.9294647696729 +-204.29246031897395 +81.41732571401765 +0 +120 +absolute + + + +0.01 +smooth + +8.53602557610585 +47.35037887128901 +428.92948151147266 +-204.29353702570648 +81.4534166926311 +0 +120 +absolute + + + +0.01 +smooth + +8.536024428407465 +47.350378392133535 +428.92949807173216 +-204.29437595791717 +81.48937533894737 +0 +120 +absolute + + + +0.01 +smooth + +8.53602328953121 +47.35037791506566 +428.92951444361654 +-204.29496942048002 +81.52519600522615 +0 +120 +absolute + + + +0.01 +smooth + +8.53602215962079 +47.35037744016588 +428.9295306202909 +-204.29530971826907 +81.56087304372714 +0 +120 +absolute + + + +0.01 +smooth + +8.536021038739948 +47.35037696748162 +428.92954659777115 +-204.29538436517728 +81.59640315785344 +0 +120 +absolute + + + +0.01 +smooth + +8.536019924395044 +47.35037649600548 +428.92956246362706 +-204.29503469461082 +81.63185813082869 +0 +120 +absolute + + + +0.01 +smooth + +8.536018815456 +47.35037602529329 +428.9295782578528 +-204.29420289856176 +81.6672693496826 +0 +120 +absolute + + + +0.01 +smooth + +8.53601771207288 +47.350375555429245 +428.92959397497503 +-204.29291099401001 +81.70263051347648 +0 +120 +absolute + + + +0.01 +smooth + +8.53601661439574 +47.35037508649754 +428.92960960951956 +-204.29118099793502 +81.73793532127146 +0 +120 +absolute + + + +0.01 +smooth + +8.536015522574639 +47.350374618582364 +428.9296251560127 +-204.28903492731655 +81.77317747212889 +0 +120 +absolute + + + +0.01 +smooth + +8.53601443675963 +47.350374151767866 +428.92964060898055 +-204.2864947991342 +81.80835066510986 +0 +120 +absolute + + + +0.01 +smooth + +8.536013357100776 +47.350373686138276 +428.9296559629494 +-204.28358263036765 +81.84344859927566 +0 +120 +absolute + + + +0.01 +smooth + +8.53601228374814 +47.350373221777765 +428.92967121244544 +-204.28032043799666 +81.87846497368751 +0 +120 +absolute + + + +0.01 +smooth + +8.536011216851776 +47.35037275877052 +428.92968635199503 +-204.27673023900084 +81.91339348740662 +0 +120 +absolute + + + +0.01 +smooth + +8.536010156561733 +47.3503722972007 +428.9297013761238 +-204.27283405035973 +81.9482278394942 +0 +120 +absolute + + + +0.01 +smooth + +8.53600910302808 +47.35037183715251 +428.9297162793583 +-204.26865388905313 +81.98296172901148 +0 +120 +absolute + + + +0.01 +smooth + +8.536008056400876 +47.35037137871015 +428.9297310562249 +-204.26421177206072 +82.0175888550197 +0 +120 +absolute + + + +0.01 +smooth + +8.536007016830176 +47.35037092195778 +428.9297457012495 +-204.25952971636212 +82.05210291658007 +0 +120 +absolute + + + +0.01 +smooth + +8.536005984466033 +47.3503704669796 +428.9297602089582 +-204.25462973893693 +82.08649761275376 +0 +120 +absolute + + + +0.01 +smooth + +8.536004959458515 +47.35037001385979 +428.9297745738774 +-204.2495338567649 +82.12076664260206 +0 +120 +absolute + + + +0.01 +smooth + +8.536003941957674 +47.35036956268254 +428.9297887905334 +-204.24426408682567 +82.15490370518617 +0 +120 +absolute + + + +0.01 +smooth + +8.53600293211357 +47.35036911353202 +428.92980285345203 +-204.2388424460989 +82.1889024995673 +0 +120 +absolute + + + +0.01 +smooth + +8.53600193007626 +47.35036866649243 +428.9298167571597 +-204.23329095156421 +82.22275672480669 +0 +120 +absolute + + + +0.01 +smooth + +8.536000935995803 +47.35036822164796 +428.9298304961826 +-204.22763162020135 +82.25646007996555 +0 +120 +absolute + + + +0.01 +smooth + +8.535999950022259 +47.35036777908278 +428.92984406504684 +-204.2218864689899 +82.29000626410507 +0 +120 +absolute + + + +0.01 +smooth + +8.535998972305682 +47.350367338881085 +428.9298574582786 +-204.2160775149096 +82.32338897628654 +0 +120 +absolute + + + +0.01 +smooth + +8.535998002996134 +47.35036690112705 +428.92987067040406 +-204.2102267749401 +82.35660191557112 +0 +120 +absolute + + + +0.01 +smooth + +8.535997042243672 +47.35036646590487 +428.92988369594957 +-204.20435626606104 +82.38963878102005 +0 +120 +absolute + + + +0.01 +smooth + +8.535996090198353 +47.35036603329874 +428.929896529441 +-204.198488005252 +82.42249327169458 +0 +120 +absolute + + + +0.01 +smooth + +8.535995147010237 +47.35036560339282 +428.9299091654048 +-204.1926440094928 +82.4551590866559 +0 +120 +absolute + + + +0.01 +smooth + +8.535994212829383 +47.350365176271296 +428.92992159836706 +-204.18684629576302 +82.48762992496522 +0 +120 +absolute + + + +0.01 +smooth + +8.535993287805846 +47.35036475201839 +428.92993382285397 +-204.1811168810423 +82.51989948568378 +0 +120 +absolute + + + +0.01 +smooth + +8.535992371425946 +47.35036433043355 +428.92994585434377 +-204.17540874447238 +82.55198260151246 +0 +120 +absolute + + + +0.01 +smooth + +8.535991460562492 +47.35036391019616 +428.9299577912754 +-204.16940034292708 +82.58397715581921 +0 +120 +absolute + + + +0.01 +smooth + +8.535990554928645 +47.350363491205144 +428.92996964308054 +-204.1630617713516 +82.61589036446935 +0 +120 +absolute + + + +0.01 +smooth + +8.53598965468213 +47.35036307355011 +428.92998140519563 +-204.15640914077733 +82.64771527399267 +0 +120 +absolute + + + +0.01 +smooth + +8.53598875998068 +47.350362657320794 +428.92999307305746 +-204.14945856223585 +82.67944493091916 +0 +120 +absolute + + + +0.01 +smooth + +8.53598787098203 +47.35036224260679 +428.93000464210246 +-204.14222614675865 +82.7110723817786 +0 +120 +absolute + + + +0.01 +smooth + +8.535986987843907 +47.3503618294978 +428.93001610776696 +-204.13472800537713 +82.74259067310089 +0 +120 +absolute + + + +0.01 +smooth + +8.535986110724046 +47.35036141808349 +428.9300274654877 +-204.12698024912282 +82.77399285141593 +0 +120 +absolute + + + +0.01 +smooth + +8.535985239780178 +47.350361008453504 +428.93003871070147 +-204.11899898902735 +82.80527196325356 +0 +120 +absolute + + + +0.01 +smooth + +8.535984375170042 +47.35036060069752 +428.93004983884464 +-204.11080033612214 +82.83642105514369 +0 +120 +absolute + + + +0.01 +smooth + +8.535983517051354 +47.350360194905186 +428.9300608453536 +-204.1024004014386 +82.86743317361612 +0 +120 +absolute + + + +0.01 +smooth + +8.535982665581862 +47.35035979116618 +428.93007172566524 +-204.09381529600842 +82.89830136520082 +0 +120 +absolute + + + +0.01 +smooth + +8.535981820919295 +47.35035938957019 +428.9300824752161 +-204.08506113086304 +82.92901867642766 +0 +120 +absolute + + + +0.01 +smooth + +8.535980983221375 +47.35035899020682 +428.9300930894425 +-204.07615401703382 +82.95957815382643 +0 +120 +absolute + + + +0.01 +smooth + +8.535980152645847 +47.35035859316578 +428.93010356378113 +-204.06711006555244 +82.98997284392703 +0 +120 +absolute + + + +0.01 +smooth + +8.535979329350432 +47.350358198536725 +428.9301138936686 +-204.05794538745027 +83.02019579325938 +0 +120 +absolute + + + +0.01 +smooth + +8.535978513492871 +47.350357806409306 +428.9301240745415 +-204.0486760937589 +83.05024004835332 +0 +120 +absolute + + + +0.01 +smooth + +8.535977705230893 +47.350357416873194 +428.9301341018362 +-204.03931829550982 +83.08009865573875 +0 +120 +absolute + + + +0.01 +smooth + +8.53597690472223 +47.35035703001806 +428.93014397098955 +-204.0298881037345 +83.1097646619455 +0 +120 +absolute + + + +0.01 +smooth + +8.535976112124612 +47.350356645933566 +428.93015367743783 +-204.02040162946446 +83.13923111350347 +0 +120 +absolute + + + +0.01 +smooth + +8.535975327595771 +47.35035626470936 +428.93016321661776 +-204.01087498373118 +83.16849105694254 +0 +120 +absolute + + + +0.01 +smooth + +8.535974551293442 +47.35035588643513 +428.93017258396594 +-204.00132427756623 +83.19753753879257 +0 +120 +absolute + + + +0.01 +smooth + +8.535973783375358 +47.35035551120052 +428.9301817749189 +-203.99176562200103 +83.22636360558344 +0 +120 +absolute + + + +0.01 +smooth + +8.535973023999246 +47.3503551390952 +428.9301907849132 +-203.9822151280671 +83.25496230384502 +0 +120 +absolute + + + +0.01 +smooth + +8.535972273322841 +47.350354770208845 +428.9301996093853 +-203.972688906796 +83.2833266801072 +0 +120 +absolute + + + +0.01 +smooth + +8.535971531503876 +47.3503544046311 +428.930208243772 +-203.96320306921916 +83.31144978089982 +0 +120 +absolute + + + +0.01 +smooth + +8.535970798700081 +47.35035404245164 +428.9302166835095 +-203.95377372636818 +83.3393246527528 +0 +120 +absolute + + + +0.01 +smooth + +8.53597007506919 +47.35035368376013 +428.9302249240348 +-203.94441698927437 +83.36694434219596 +0 +120 +absolute + + + +0.01 +smooth + +8.535969358815018 +47.350353327755116 +428.93023301579274 +-203.9350490502593 +83.39436962009094 +0 +120 +absolute + + + +0.01 +smooth + +8.535968647254082 +47.35035297323218 +428.9302410347605 +-203.92553624801698 +83.42169179443758 +0 +120 +absolute + + + +0.01 +smooth + +8.53596794052864 +47.3503526202768 +428.930248977725 +-203.91588647154796 +83.44890408636788 +0 +120 +absolute + + + +0.01 +smooth + +8.535967238805098 +47.350352268985496 +428.9302568407954 +-203.9061088317502 +83.47599887980655 +0 +120 +absolute + + + +0.01 +smooth + +8.535966542249863 +47.35035191945474 +428.9302646200804 +-203.8962124395216 +83.50296855867832 +0 +120 +absolute + + + +0.01 +smooth + +8.53596585102933 +47.350351571781 +428.9302723116889 +-203.88620640575994 +83.52980550690783 +0 +120 +absolute + + + +0.01 +smooth + +8.535965165309909 +47.350351226060766 +428.9302799117297 +-203.87609984136316 +83.55650210841983 +0 +120 +absolute + + + +0.01 +smooth + +8.535964485258008 +47.350350882390565 +428.9302874163123 +-203.86590185722923 +83.5830507471391 +0 +120 +absolute + + + +0.01 +smooth + +8.535963811040023 +47.35035054086687 +428.93029482154526 +-203.85562156425607 +83.60944380699027 +0 +120 +absolute + + + +0.01 +smooth + +8.535963142822357 +47.35035020158613 +428.93030212353733 +-203.84526807334143 +83.63567367189806 +0 +120 +absolute + + + +0.01 +smooth + +8.535962480771419 +47.350349864644876 +428.9303093183977 +-203.83485049538325 +83.66173272578722 +0 +120 +absolute + + + +0.01 +smooth + +8.535961825053612 +47.350349530139596 +428.9303164022354 +-203.82437794127952 +83.68761335258246 +0 +120 +absolute + + + +0.01 +smooth + +8.535961175835338 +47.350349198166775 +428.93032337115926 +-203.81385952192812 +83.7133079362085 +0 +120 +absolute + + + +0.01 +smooth + +8.535960533282998 +47.35034886882288 +428.93033022127804 +-203.80330434822682 +83.73880886059 +0 +120 +absolute + + + +0.01 +smooth + +8.535959897562996 +47.35034854220441 +428.93033694870087 +-203.79272153107365 +83.76410850965172 +0 +120 +absolute + + + +0.01 +smooth + +8.53595926884174 +47.35034821840786 +428.93034354953664 +-203.78212018136645 +83.78919926731841 +0 +120 +absolute + + + +0.01 +smooth + +8.535958647285634 +47.35034789752973 +428.9303500198944 +-203.77150941000312 +83.81407351751469 +0 +120 +absolute + + + +0.01 +smooth + +8.535958033061075 +47.35034757966648 +428.9303563558828 +-203.76089832788162 +83.83872364416537 +0 +120 +absolute + + + +0.01 +smooth + +8.535957426334472 +47.35034726491463 +428.930362553611 +-203.7502960458998 +83.8631420311951 +0 +120 +absolute + + + +0.01 +smooth + +8.535956827272226 +47.35034695337065 +428.930368609188 +-203.73971167495552 +83.88732106252861 +0 +120 +absolute + + + +0.01 +smooth + +8.535956236040741 +47.35034664513102 +428.9303745187225 +-203.72915432594672 +83.91125312209063 +0 +120 +absolute + + + +0.01 +smooth + +8.535955652806422 +47.35034634029225 +428.93038027832364 +-203.7186331097713 +83.93493059380586 +0 +120 +absolute + + + +0.01 +smooth + +8.535955077735672 +47.35034603895082 +428.93038588410025 +-203.70815713732713 +83.958345861599 +0 +120 +absolute + + + +0.01 +smooth + +8.535954510994895 +47.3503457412032 +428.9303913321613 +-203.69773551951215 +83.98149130939481 +0 +120 +absolute + + + +0.01 +smooth + +8.535953952750493 +47.35034544714591 +428.9303966186157 +-203.6873773672242 +84.00435932111796 +0 +120 +absolute + + + +0.01 +smooth + +8.535953403168868 +47.35034515687542 +428.9304017395724 +-203.67709179136122 +84.02694228069319 +0 +120 +absolute + + + +0.01 +smooth + +8.53595286241643 +47.35034487048823 +428.93040669114043 +-203.6668879028211 +84.0492325720452 +0 +120 +absolute + + + +0.01 +smooth + +8.535952330493886 +47.35034458799962 +428.9304114734962 +-203.65677010277835 +84.07122884799155 +0 +120 +absolute + + + +0.01 +smooth + +8.535951803924764 +47.35034430772128 +428.93041617237003 +-203.6466433827997 +84.09306123287048 +0 +120 +absolute + + + +0.01 +smooth + +8.535951281392382 +47.35034402902577 +428.9304208209528 +-203.63647270742626 +84.1147779208472 +0 +120 +absolute + + + +0.01 +smooth + +8.535950763072115 +47.35034375201731 +428.93042541587596 +-203.62626524676048 +84.13637062296918 +0 +120 +absolute + + + +0.01 +smooth + +8.535950249139335 +47.35034347680008 +428.9304299537713 +-203.61602817090454 +84.15783105028395 +0 +120 +absolute + + + +0.01 +smooth + +8.535949739769423 +47.35034320347825 +428.9304344312703 +-203.6057686499608 +84.17915091383898 +0 +120 +absolute + + + +0.01 +smooth + +8.535949235137755 +47.35034293215605 +428.93043884500463 +-203.59549385403153 +84.2003219246818 +0 +120 +absolute + + + +0.01 +smooth + +8.535948735419707 +47.35034266293772 +428.9304431916063 +-203.58521095321922 +84.22133579385992 +0 +120 +absolute + + + +0.01 +smooth + +8.53594824079066 +47.3503423959274 +428.9304474677067 +-203.5749271176261 +84.24218423242087 +0 +120 +absolute + + + +0.01 +smooth + +8.535947751425983 +47.35034213122929 +428.9304516699373 +-203.56464951735447 +84.2628589514121 +0 +120 +absolute + + + +0.01 +smooth + +8.535947267501054 +47.35034186894762 +428.93045579493025 +-203.55438532250668 +84.28335166188118 +0 +120 +absolute + + + +0.01 +smooth + +8.535946789191259 +47.35034160918659 +428.93045983931694 +-203.54414170318515 +84.30365407487561 +0 +120 +absolute + + + +0.01 +smooth + +8.535946316671964 +47.35034135205041 +428.93046379972924 +-203.53392582949212 +84.32375790144289 +0 +120 +absolute + + + +0.01 +smooth + +8.535945850118548 +47.35034109764322 +428.93046767279844 +-203.52374487152994 +84.34365485263051 +0 +120 +absolute + + + +0.01 +smooth + +8.53594538970639 +47.35034084606927 +428.9304714551566 +-203.51360599940094 +84.363336639486 +0 +120 +absolute + + + +0.01 +smooth + +8.535944935610866 +47.35034059743277 +428.9304751434352 +-203.50351638320745 +84.38279497305685 +0 +120 +absolute + + + +0.01 +smooth + +8.535944488007353 +47.35034035183789 +428.930478734266 +-203.49348319305182 +84.40202156439058 +0 +120 +absolute + + + +0.01 +smooth + +8.535944047071226 +47.350340109388846 +428.93048222428064 +-203.48351359903634 +84.42100812453472 +0 +120 +absolute + + + +0.01 +smooth + +8.535943612977862 +47.35033987018984 +428.93048561011074 +-203.47361477126336 +84.43974636453675 +0 +120 +absolute + + + +0.01 +smooth + +8.535943185902639 +47.350339634345055 +428.930488888388 +-203.4637938798352 +84.45822799544422 +0 +120 +absolute + + + +0.01 +smooth + +8.53594276602093 +47.35033940195871 +428.93049205574425 +-203.45405809485425 +84.47644472830457 +0 +120 +absolute + + + +0.01 +smooth + +8.53594235350812 +47.350339173135 +428.930495108811 +-203.4444145864228 +84.49438827416537 +0 +120 +absolute + + + +0.01 +smooth + +8.535941948539577 +47.350338947978116 +428.9304980442199 +-203.43487052464315 +84.51205034407411 +0 +120 +absolute + + + +0.01 +smooth + +8.535941551290682 +47.35033872659227 +428.93050085860267 +-203.42543307961762 +84.5294226490783 +0 +120 +absolute + + + +0.01 +smooth + +8.53594116193681 +47.350338509081666 +428.93050354859105 +-203.41610942144862 +84.54649690022543 +0 +120 +absolute + + + +0.01 +smooth + +8.535940780653338 +47.35033829555049 +428.9305061108166 +-203.4069067202384 +84.56326480856303 +0 +120 +absolute + + + +0.01 +smooth + +8.535940407615643 +47.35033808610296 +428.9305085419111 +-203.3978321460894 +84.57971808513862 +0 +120 +absolute + + + +0.01 +smooth + +8.535940042999101 +47.350337880843256 +428.93051083850605 +-203.38889286910387 +84.5958484409997 +0 +120 +absolute + + + +0.01 +smooth + +8.535939685936466 +47.350337679325214 +428.9305130191778 +-203.3800700781281 +84.61169056360933 +0 +120 +absolute + + + +0.01 +smooth + +8.53593933232005 +47.35033747939372 +428.93051517090834 +-203.37126396052932 +84.62741257228718 +0 +120 +absolute + + + +0.01 +smooth + +8.53593898186928 +47.350337280915824 +428.93051730038763 +-203.36246974930617 +84.64302465696065 +0 +120 +absolute + + + +0.01 +smooth + +8.53593863476719 +47.350337084003364 +428.9305194045613 +-203.35369421400105 +84.65851788989374 +0 +120 +absolute + + + +0.01 +smooth + +8.535938291196807 +47.35033688876821 +428.9305214803748 +-203.3449441241561 +84.67388334335055 +0 +120 +absolute + + + +0.01 +smooth + +8.535937951341161 +47.35033669532223 +428.9305235247737 +-203.33622624931365 +84.68911208959517 +0 +120 +absolute + + + +0.01 +smooth + +8.535937615383279 +47.35033650377731 +428.93052553470363 +-203.32754735901594 +84.7041952008916 +0 +120 +absolute + + + +0.01 +smooth + +8.53593728350619 +47.35033631424526 +428.93052750710973 +-203.31891422280512 +84.71912374950391 +0 +120 +absolute + + + +0.01 +smooth + +8.535936955892918 +47.35033612683796 +428.93052943893764 +-203.31033361022338 +84.73388880769609 +0 +120 +absolute + + + +0.01 +smooth + +8.535936632726496 +47.35033594166727 +428.9305313271329 +-203.30181229081305 +84.74848144773227 +0 +120 +absolute + + + +0.01 +smooth + +8.535936314189954 +47.35033575884508 +428.93053316864103 +-203.29335703411635 +84.76289274187651 +0 +120 +absolute + + + +0.01 +smooth + +8.535936000466318 +47.35033557848321 +428.9305349604075 +-203.28497460967546 +84.77711376239282 +0 +120 +absolute + + + +0.01 +smooth + +8.535935691738615 +47.350335400693545 +428.9305366993777 +-203.27667178703263 +84.79113558154523 +0 +120 +absolute + + + +0.01 +smooth + +8.535935388189872 +47.350335225587926 +428.9305383824972 +-203.26845533573007 +84.80494927159785 +0 +120 +absolute + + + +0.01 +smooth + +8.535935090003122 +47.350335053278236 +428.93054000671145 +-203.26033202531008 +84.81854590481471 +0 +120 +absolute + + + +0.01 +smooth + +8.53593479736139 +47.35033488387633 +428.9305415689661 +-203.25230862531487 +84.83191655345988 +0 +120 +absolute + + + +0.01 +smooth + +8.535934510447706 +47.35033471749406 +428.93054306620644 +-203.2443919052866 +84.84505228979737 +0 +120 +absolute + + + +0.01 +smooth + +8.535934229445099 +47.35033455424328 +428.93054449537806 +-203.23658863476757 +84.85794418609125 +0 +120 +absolute + + + +0.01 +smooth + +8.535933954536596 +47.35033439423588 +428.9305458534264 +-203.22890558329996 +84.87058331460558 +0 +120 +absolute + + + +0.01 +smooth + +8.535933685905222 +47.350334237583695 +428.930547137297 +-203.22134952042603 +84.88296074760441 +0 +120 +absolute + + + +0.01 +smooth + +8.535933423734011 +47.3503340843986 +428.93054834393536 +-203.21392721568805 +84.8950675573518 +0 +120 +absolute + + + +0.01 +smooth + +8.53593316820599 +47.350333934792445 +428.93054947028696 +-203.2066454386282 +84.90689481611179 +0 +120 +absolute + + + +0.01 +smooth + +8.535932919504184 +47.35033378887711 +428.93055051329725 +-203.1995109587887 +84.91843359614843 +0 +120 +absolute + + + +0.01 +smooth + +8.535932677811626 +47.350333646764426 +428.93055146991185 +-203.1925305457118 +84.9296749697258 +0 +120 +absolute + + + +0.01 +smooth + +8.53593244331134 +47.35033350856627 +428.930552337076 +-203.18571096893976 +84.94061000910791 +0 +120 +absolute + + + +0.01 +smooth + +8.535932216186358 +47.35033337439451 +428.9305531117355 +-203.17905899801474 +84.95122978655883 +0 +120 +absolute + + + +0.01 +smooth + +8.535931996619706 +47.35033324436101 +428.9305537908355 +-203.172581402479 +84.96152537434263 +0 +120 +absolute + + + +0.01 +smooth + +8.535931784794416 +47.35033311857761 +428.9305543713218 +-203.1662849518748 +84.97148784472334 +0 +120 +absolute + + + +0.01 +smooth + +8.535931578086316 +47.35033299556427 +428.9305548931017 +-203.16009919407875 +84.98123377739196 +0 +120 +absolute + + + +0.01 +smooth + +8.535931373273174 +47.35033287350417 +428.93055540664716 +-203.15393728194599 +84.99090629098104 +0 +120 +absolute + + + +0.01 +smooth + +8.53593117053129 +47.35033275250903 +428.9305559112313 +-203.14780589110748 +85.00049644053803 +0 +120 +absolute + + + +0.01 +smooth + +8.535930970044763 +47.35033263269507 +428.9305564060099 +-203.14171191115514 +85.0099949332923 +0 +120 +absolute + + + +0.01 +smooth + +8.53593077199768 +47.35033251417844 +428.9305568901383 +-203.13566223168056 +85.01939247647324 +0 +120 +absolute + + + +0.01 +smooth + +8.535930576574144 +47.35033239707536 +428.93055736277205 +-203.12966374227548 +85.02867977731024 +0 +120 +absolute + + + +0.01 +smooth + +8.535930383958233 +47.350332281501956 +428.9305578230664 +-203.1237233325316 +85.03784754303263 +0 +120 +absolute + + + +0.01 +smooth + +8.535930194334046 +47.350332167574464 +428.930558270177 +-203.11784789204066 +85.04688648086984 +0 +120 +absolute + + + +0.01 +smooth + +8.535930007885678 +47.35033205540904 +428.93055870325946 +-203.11204431039434 +85.05578729805127 +0 +120 +absolute + + + +0.01 +smooth + +8.535929824797215 +47.35033194512185 +428.9305591214688 +-203.10631947718434 +85.06454070180621 +0 +120 +absolute + + + +0.01 +smooth + +8.535929645252754 +47.35033183682909 +428.9305595239607 +-203.10068028200237 +85.07313739936411 +0 +120 +absolute + + + +0.01 +smooth + +8.535929469436386 +47.35033173064696 +428.9305599098908 +-203.09513361444027 +85.08156809795435 +0 +120 +absolute + + + +0.01 +smooth + +8.535929297532203 +47.35033162669161 +428.9305602784143 +-203.08968636408954 +85.08982350480626 +0 +120 +absolute + + + +0.01 +smooth + +8.535929129724295 +47.35033152507924 +428.93056062868686 +-203.084345420542 +85.09789432714926 +0 +120 +absolute + + + +0.01 +smooth + +8.535928966196755 +47.35033142592602 +428.9305609598637 +-203.07911767338936 +85.10577127221273 +0 +120 +absolute + + + +0.01 +smooth + +8.535928807133676 +47.35033132934814 +428.9305612711005 +-203.0740100122233 +85.11344504722602 +0 +120 +absolute + + + +0.01 +smooth + +8.53592865271915 +47.350331235461766 +428.9305615615526 +-203.06902932663553 +85.12090635941853 +0 +120 +absolute + + + +0.01 +smooth + +8.535928503137269 +47.350331144383084 +428.9305618303755 +-203.0641825062178 +85.12814591601963 +0 +120 +absolute + + + +0.01 +smooth + +8.535928358572125 +47.35033105622829 +428.93056207672464 +-203.05947644056175 +85.1351544242587 +0 +120 +absolute + + + +0.01 +smooth + +8.535928219207811 +47.35033097111355 +428.9305622997556 +-203.05491801925913 +85.14192259136513 +0 +120 +absolute + + + +0.01 +smooth + +8.535928085228417 +47.35033088915505 +428.93056249862354 +-203.05051413190165 +85.14844112456828 +0 +120 +absolute + + + +0.01 +smooth + +8.535927956818037 +47.350330810468975 +428.93056267248426 +-203.04627166808103 +85.15470073109753 +0 +120 +absolute + + + +0.01 +smooth + +8.535927834160763 +47.35033073517148 +428.930562820493 +-203.04219751738896 +85.1606921181823 +0 +120 +absolute + + + +0.01 +smooth + +8.535927717440686 +47.350330663378784 +428.9305629418052 +-203.0382985694171 +85.16640599305191 +0 +120 +absolute + + + +0.01 +smooth + +8.535927606841897 +47.350330595207055 +428.9305630355766 +-203.03458171375723 +85.17183306293578 +0 +120 +absolute + + + +0.01 +smooth + +8.53592750254849 +47.35033053077245 +428.93056310096233 +-203.03105384000105 +85.17696403506326 +0 +120 +absolute + + + +0.01 +smooth + +8.535927404744559 +47.350330470191174 +428.93056313711804 +-203.02772183774024 +85.18178961666375 +0 +120 +absolute + + + +0.01 +smooth + +8.535927313335572 +47.350330413410965 +428.93056314353254 +-203.0245836254047 +85.18631389843729 +0 +120 +absolute + + + +0.01 +smooth + +8.535927224099623 +47.35033035788509 +428.930563125246 +-203.02150427549986 +85.19073917696119 +0 +120 +absolute + + + +0.01 +smooth + +8.535927135671345 +47.35033030279506 +428.9305630852592 +-203.01844094751806 +85.19513042020334 +0 +120 +absolute + + + +0.01 +smooth + +8.535927048199436 +47.35033024823779 +428.9305630249386 +-203.01539956505414 +85.19947985464114 +0 +120 +absolute + + + +0.01 +smooth + +8.535926961832587 +47.35033019431027 +428.9305629456498 +-203.01238605170278 +85.20377970675183 +0 +120 +absolute + + + +0.01 +smooth + +8.535926876719476 +47.35033014110942 +428.9305628487587 +-203.00940633105859 +85.20802220301266 +0 +120 +absolute + + + +0.01 +smooth + +8.535926793008798 +47.35033008873221 +428.9305627356316 +-203.0064663267165 +85.212199569901 +0 +120 +absolute + + + +0.01 +smooth + +8.535926710849242 +47.35033003727557 +428.9305626076342 +-203.00357196227105 +85.21630403389408 +0 +120 +absolute + + + +0.01 +smooth + +8.535926630389497 +47.35032998683647 +428.93056246613276 +-203.00072916131708 +85.22032782146921 +0 +120 +absolute + + + +0.01 +smooth + +8.535926551778253 +47.350329937511866 +428.9305623124931 +-202.99794384744933 +85.22426315910371 +0 +120 +absolute + + + +0.01 +smooth + +8.535926475164194 +47.35032988939869 +428.930562148081 +-202.99522194426245 +85.2281022732748 +0 +120 +absolute + + + +0.01 +smooth + +8.535926400696011 +47.35032984259388 +428.9305619742627 +-202.99256937535114 +85.23183739045979 +0 +120 +absolute + + + +0.01 +smooth + +8.535926328522393 +47.35032979719443 +428.93056179240403 +-202.9899920643103 +85.23546073713602 +0 +120 +absolute + + + +0.01 +smooth + +8.535926258792035 +47.350329753297274 +428.9305616038713 +-202.98749593473445 +85.23896453978077 +0 +120 +absolute + + + +0.01 +smooth + +8.535926191653617 +47.35032971099935 +428.93056141002984 +-202.98508691021846 +85.24234102487128 +0 +120 +absolute + + + +0.01 +smooth + +8.535926127255832 +47.350329670397606 +428.93056121224623 +-202.98277091435696 +85.24558241888488 +0 +120 +absolute + + + +0.01 +smooth + +8.535926065747368 +47.35032963158901 +428.93056101188614 +-202.9805538707447 +85.24868094829883 +0 +120 +absolute + + + +0.01 +smooth + +8.535926007276915 +47.350329594670505 +428.9305608103157 +-202.9784417029764 +85.25162883959044 +0 +120 +absolute + + + +0.01 +smooth + +8.535925951993162 +47.35032955973905 +428.9305606089007 +-202.97644033464687 +85.25441831923699 +0 +120 +absolute + + + +0.01 +smooth + +8.535925900044795 +47.350329526891585 +428.93056040900717 +-202.9745556893507 +85.25704161371577 +0 +120 +absolute + + + +0.01 +smooth + +8.535925851580506 +47.35032949622506 +428.9305602120013 +-202.97279369068272 +85.25949094950411 +0 +120 +absolute + + + +0.01 +smooth + +8.535925806748983 +47.35032946783643 +428.9305600192487 +-202.97116026223762 +85.26175855307925 +0 +120 +absolute + + + +0.01 +smooth + +8.535925765698913 +47.35032944182265 +428.9305598321156 +-202.9696613276101 +85.26383665091848 +0 +120 +absolute + + + +0.01 +smooth + +8.53592572857899 +47.35032941828066 +428.930559651968 +-202.9683028103949 +85.2657174694991 +0 +120 +absolute + + + +0.01 +smooth + +8.535925695537896 +47.350329397307426 +428.9305594801717 +-202.96709063418672 +85.26739323529841 +0 +120 +absolute + + + +0.01 +smooth + +8.535925666724324 +47.350329378999874 +428.9305593180928 +-202.96603072258037 +85.2688561747937 +0 +120 +absolute + + + +0.01 +smooth + +8.535925642286964 +47.35032936345499 +428.93055916709716 +-202.96512899917053 +85.27009851446226 +0 +120 +absolute + + + +0.01 +smooth + +8.535925622374503 +47.3503293507697 +428.9305590285509 +-202.96439138755187 +85.27111248078135 +0 +120 +absolute + + + +0.01 +smooth + +8.535925606199614 +47.350329340448255 +428.9305589009529 +-202.96378964885002 +85.27193764679483 +0 +120 +absolute + + + +0.01 +smooth + +8.5359255906284 +47.35032933050792 +428.93055877518697 +-202.9632096971928 +85.27273238372193 +0 +120 +absolute + + + +0.01 +smooth + +8.53592557541052 +47.35032932079048 +428.9305586504744 +-202.9626424535766 +85.27350932364605 +0 +120 +absolute + + + +0.01 +smooth + +8.535925560564346 +47.35032931130792 +428.93055852684 +-202.9620886378491 +85.27426751013006 +0 +120 +absolute + + + +0.01 +smooth + +8.535925546108253 +47.35032930207216 +428.93055840430924 +-202.9615489698582 +85.27500598673686 +0 +120 +absolute + + + +0.01 +smooth + +8.535925532060611 +47.35032929309511 +428.93055828290653 +-202.96102416945152 +85.27572379702919 +0 +120 +absolute + + + +0.01 +smooth + +8.535925518439807 +47.35032928438874 +428.93055816265735 +-202.96051495647694 +85.27641998457004 +0 +120 +absolute + + + +0.01 +smooth + +8.535925505264212 +47.35032927596497 +428.9305580435864 +-202.9600220507821 +85.27709359292218 +0 +120 +absolute + + + +0.01 +smooth + +8.5359254925522 +47.35032926783577 +428.93055792571903 +-202.95954617221497 +85.27774366564854 +0 +120 +absolute + + + +0.01 +smooth + +8.53592548032215 +47.35032926001305 +428.93055780908 +-202.9590880406232 +85.27836924631191 +0 +120 +absolute + + + +0.01 +smooth + +8.535925468592435 +47.35032925250874 +428.93055769369425 +-202.95864837585447 +85.27896937847514 +0 +120 +absolute + + + +0.01 +smooth + +8.53592545738143 +47.350329245334784 +428.9305575795869 +-202.9582278977567 +85.27954310570111 +0 +120 +absolute + + + +0.01 +smooth + +8.535925446707516 +47.35032923850313 +428.93055746678306 +-202.95782732617758 +85.28008947155267 +0 +120 +absolute + + + +0.01 +smooth + +8.535925436589066 +47.35032923202573 +428.9305573553078 +-202.95744738096494 +85.28060751959272 +0 +120 +absolute + + + +0.01 +smooth + +8.535925427044456 +47.35032922591449 +428.9305572451859 +-202.9570887819665 +85.28109629338405 +0 +120 +absolute + + + +0.01 +smooth + +8.53592541809206 +47.350329220181365 +428.9305571364425 +-202.95675224902996 +85.28155483648955 +0 +120 +absolute + + + +0.01 +smooth + +8.535925409750257 +47.350329214838276 +428.9305570291025 +-202.95643850200327 +85.28198219247206 +0 +120 +absolute + + + +0.01 +smooth + +8.535925402037421 +47.35032920989718 +428.9305569231911 +-202.95614826073398 +85.28237740489445 +0 +120 +absolute + + + +0.01 +smooth + +8.535925394971928 +47.35032920537001 +428.93055681873307 +-202.95588224507003 +85.28273951731956 +0 +120 +absolute + + + +0.01 +smooth + +8.535925388572153 +47.35032920126871 +428.9305567157537 +-202.95564117485912 +85.28306757331025 +0 +120 +absolute + + + +0.01 +smooth + +8.535925382856474 +47.35032919760519 +428.9305566142778 +-202.95542576994904 +85.28336061642938 +0 +120 +absolute + + + +0.01 +smooth + +8.535925377843267 +47.35032919439142 +428.9305565143305 +-202.95523675018757 +85.28361769023982 +0 +120 +absolute + + + +0.01 +smooth + +8.535925373550905 +47.35032919163932 +428.9305564159366 +-202.9550748354224 +85.28383783830441 +0 +120 +absolute + + + +0.01 +smooth + +8.535925369997768 +47.35032918936083 +428.93055631912154 +-202.9549407455014 +85.28402010418598 +0 +120 +absolute + + + +0.01 +smooth + +8.535925367202228 +47.350329187567894 +428.9305562239099 +-202.9548352002722 +85.28416353144743 +0 +120 +absolute + + + +0.01 +smooth + +8.535925365182663 +47.35032918627244 +428.93055613032686 +-202.95475891958276 +85.2842671636516 +0 +120 +absolute + + + +0.01 +smooth + +8.535925363957448 +47.35032918548642 +428.9305560383975 +-202.95471262328073 +85.28433004436133 +0 +120 +absolute + + + +0.01 +smooth + +8.53592536354496 +47.35032918522176 +428.9305559481468 +-202.95469703121387 +85.2843512171395 +0 +120 +absolute + + + + + + diff --git a/parameter-learning_nd_disc/kmls/saffa1.kml b/parameter-learning_nd_disc/kmls/saffa1.kml new file mode 100755 index 0000000..adafa27 --- /dev/null +++ b/parameter-learning_nd_disc/kmls/saffa1.kml @@ -0,0 +1,31554 @@ + + + + + +Tour + + +0.01 +smooth + +8.536348154452593 +47.34969652396877 +412.35755233845094 +14.0290626583571 +88.46603184312883 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815437763 +47.34969652394572 +412.3578991841245 +14.029068705013271 +88.46603301079575 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154154453 +47.34969652387706 +412.3586316123806 +14.029086715501682 +88.46603648850459 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815378563 +47.349696523763605 +412.3597391771253 +14.029116495602173 +88.46604223831751 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153273721 +47.34969652360612 +412.3612114322642 +14.029157851094578 +88.46605022229663 +0 +120 +absolute + + + +0.01 +smooth + +8.536348152621297 +47.349696523405356 +412.3630379317033 +14.029210587758737 +88.46606040250408 +0 +120 +absolute + + + +0.01 +smooth + +8.536348151830921 +47.34969652316212 +412.3652082293488 +14.029274511374497 +88.46607274100202 +0 +120 +absolute + + + +0.01 +smooth + +8.536348150905166 +47.34969652287719 +412.3677118791064 +14.029349427721694 +88.46608719985261 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814984659 +47.34969652255134 +412.3705384348823 +14.02943514258017 +88.46610374111796 +0 +120 +absolute + + + +0.01 +smooth + +8.536348148657764 +47.34969652218532 +412.3736774505822 +14.029531461729759 +88.46612232686022 +0 +120 +absolute + + + +0.01 +smooth + +8.536348147341247 +47.34969652177993 +412.37711848011196 +14.029638190950298 +88.46614291914152 +0 +120 +absolute + + + +0.01 +smooth + +8.536348145899618 +47.34969652133597 +412.380851077378 +14.029755136021642 +88.46616548002402 +0 +120 +absolute + + + +0.01 +smooth + +8.536348144335427 +47.34969652085418 +412.3848647962855 +14.029882102723615 +88.46618997156979 +0 +120 +absolute + + + +0.01 +smooth + +8.536348142651253 +47.349696520335364 +412.38914919074114 +14.030018896836065 +88.46621635584108 +0 +120 +absolute + + + +0.01 +smooth + +8.536348140849658 +47.34969651978028 +412.3936938146505 +14.030165324138828 +88.46624459489996 +0 +120 +absolute + + + +0.01 +smooth + +8.536348138933203 +47.349696519189706 +412.3984882219194 +14.030321190411746 +88.46627465080857 +0 +120 +absolute + + + +0.01 +smooth + +8.536348136904465 +47.34969651856444 +412.4035219664542 +14.030486301434664 +88.46630648562912 +0 +120 +absolute + + + +0.01 +smooth + +8.536348134765996 +47.34969651790523 +412.4087846021603 +14.030660462987406 +88.46634006142362 +0 +120 +absolute + + + +0.01 +smooth + +8.536348132520374 +47.3496965172129 +412.41426568294423 +14.030843480849828 +88.46637534025433 +0 +120 +absolute + + + +0.01 +smooth + +8.53634813017016 +47.34969651648819 +412.4199547627114 +14.031035160801762 +88.46641228418333 +0 +120 +absolute + + + +0.01 +smooth + +8.536348127717918 +47.34969651573188 +412.425841395368 +14.03123530862305 +88.46645085527278 +0 +120 +absolute + + + +0.01 +smooth + +8.53634812516622 +47.34969651494475 +412.4319151348201 +14.031443730093528 +88.46649101558482 +0 +120 +absolute + + + +0.01 +smooth + +8.536348122517628 +47.34969651412759 +412.43816553497334 +14.03166023099304 +88.46653272718157 +0 +120 +absolute + + + +0.01 +smooth + +8.536348119774708 +47.34969651328117 +412.4445821497337 +14.031884617101426 +88.46657595212521 +0 +120 +absolute + + + +0.01 +smooth + +8.536348116940026 +47.349696512406254 +412.4511545330074 +14.032116694198521 +88.46662065247783 +0 +120 +absolute + + + +0.01 +smooth + +8.536348114016151 +47.34969651150364 +412.45787223870025 +14.03235626806417 +88.46666679030162 +0 +120 +absolute + + + +0.01 +smooth + +8.536348111005644 +47.34969651057409 +412.46472482071795 +14.032603144478207 +88.46671432765866 +0 +120 +absolute + + + +0.01 +smooth + +8.536348107911076 +47.3496965096184 +412.4717018329667 +14.032857129220478 +88.46676322661115 +0 +120 +absolute + + + +0.01 +smooth + +8.536348104735012 +47.34969650863733 +412.4787928293524 +14.033118028070817 +88.46681344922119 +0 +120 +absolute + + + +0.01 +smooth + +8.536348101480016 +47.34969650763166 +412.48598736378096 +14.03338564680907 +88.46686495755094 +0 +120 +absolute + + + +0.01 +smooth + +8.536348098148654 +47.349696506602186 +412.4932749901584 +14.033659791215072 +88.46691771366253 +0 +120 +absolute + + + +0.01 +smooth + +8.536348094743493 +47.34969650554967 +412.50064526239044 +14.033940267068665 +88.4669716796181 +0 +120 +absolute + + + +0.01 +smooth + +8.5363480912671 +47.349696504474885 +412.50808773438314 +14.034226880149685 +88.46702681747982 +0 +120 +absolute + + + +0.01 +smooth + +8.53634808772204 +47.34969650337862 +412.51559196004257 +14.034519436237975 +88.46708308930975 +0 +120 +absolute + + + +0.01 +smooth + +8.536348084110882 +47.349696502261644 +412.52314749327456 +14.034817741113375 +88.46714045717012 +0 +120 +absolute + + + +0.01 +smooth + +8.536348080436186 +47.34969650112474 +412.53074388798495 +14.035121600555723 +88.46719888312303 +0 +120 +absolute + + + +0.01 +smooth + +8.536348076700522 +47.34969649996868 +412.53837069807975 +14.035430820344862 +88.46725832923062 +0 +120 +absolute + + + +0.01 +smooth + +8.536348072906456 +47.34969649879425 +412.54601747746506 +14.035745206260625 +88.46731875755503 +0 +120 +absolute + + + +0.01 +smooth + +8.536348068973597 +47.349696497576346 +412.55373919567876 +14.03607172914076 +88.46738149439986 +0 +120 +absolute + + + +0.01 +smooth + +8.536348064340675 +47.349696496139735 +412.5619730430481 +14.03645897659263 +88.46745578766478 +0 +120 +absolute + + + +0.01 +smooth + +8.536348058919687 +47.3496964944567 +412.57078800165056 +14.0369147943603 +88.4675431240708 +0 +120 +absolute + + + +0.01 +smooth + +8.53634805273188 +47.349696492533695 +412.5801673135085 +14.03743760412849 +88.46764319567227 +0 +120 +absolute + + + +0.01 +smooth + +8.536348045798492 +47.34969649037708 +412.5900942206439 +14.038025827581937 +88.46775569452348 +0 +120 +absolute + + + +0.01 +smooth + +8.536348038140764 +47.34969648799324 +412.6005519650786 +14.038677886405356 +88.46788031267873 +0 +120 +absolute + + + +0.01 +smooth + +8.536348029779937 +47.349696485388584 +412.61152378883475 +14.039392202283484 +88.46801674219235 +0 +120 +absolute + + + +0.01 +smooth + +8.53634802073725 +47.349696482569506 +412.6229929339342 +14.040167196901047 +88.46816467511859 +0 +120 +absolute + + + +0.01 +smooth + +8.536348011033947 +47.3496964795424 +412.6349426423994 +14.041001291942763 +88.46832380351181 +0 +120 +absolute + + + +0.01 +smooth + +8.536348000691262 +47.349696476313646 +412.647356156252 +14.041892909093368 +88.4684938194263 +0 +120 +absolute + + + +0.01 +smooth + +8.53634798973044 +47.34969647288963 +412.6602167175139 +14.04284047003758 +88.46867441491632 +0 +120 +absolute + + + +0.01 +smooth + +8.53634797817272 +47.34969646927678 +412.6735075682076 +14.043842396460136 +88.46886528203623 +0 +120 +absolute + + + +0.01 +smooth + +8.536347966039344 +47.34969646548144 +412.6872119503546 +14.044897110045756 +88.4690661128403 +0 +120 +absolute + + + +0.01 +smooth + +8.53634795335155 +47.34969646151004 +412.70131310597725 +14.046003032479167 +88.46927659938282 +0 +120 +absolute + + + +0.01 +smooth + +8.536347940130577 +47.34969645736897 +412.7157942770975 +14.0471585854451 +88.46949643371815 +0 +120 +absolute + + + +0.01 +smooth + +8.536347926397674 +47.349696453064624 +412.7306387057375 +14.048362190628282 +88.46972530790056 +0 +120 +absolute + + + +0.01 +smooth + +8.536347912174072 +47.34969644860336 +412.7458296339191 +14.049612269713437 +88.46996291398433 +0 +120 +absolute + + + +0.01 +smooth + +8.536347897481017 +47.349696443991604 +412.7613503036642 +14.05090724438529 +88.4702089440238 +0 +120 +absolute + + + +0.01 +smooth + +8.536347882339745 +47.34969643923576 +412.77718395699526 +14.052245536328575 +88.47046309007325 +0 +120 +absolute + + + +0.01 +smooth + +8.5363478667715 +47.349696434342185 +412.7933138359338 +14.053625567228012 +88.47072504418703 +0 +120 +absolute + + + +0.01 +smooth + +8.536347850797522 +47.3496964293173 +412.8097231825022 +14.05504575876833 +88.47099449841936 +0 +120 +absolute + + + +0.01 +smooth + +8.536347834439049 +47.34969642416748 +412.8263952387224 +14.056504532634257 +88.47127114482461 +0 +120 +absolute + + + +0.01 +smooth + +8.536347817717324 +47.34969641889913 +412.84331324661616 +14.058000310510518 +88.47155467545706 +0 +120 +absolute + + + +0.01 +smooth + +8.536347800653585 +47.34969641351863 +412.8604604482059 +14.059531514081842 +88.47184478237102 +0 +120 +absolute + + + +0.01 +smooth + +8.536347783269076 +47.34969640803238 +412.87782008551346 +14.061096565032955 +88.47214115762077 +0 +120 +absolute + + + +0.01 +smooth + +8.536347765585033 +47.349696402446774 +412.89537540056074 +14.062693885048581 +88.47244349326066 +0 +120 +absolute + + + +0.01 +smooth + +8.5363477476227 +47.349696396768216 +412.9131096353699 +14.064321895813453 +88.47275148134494 +0 +120 +absolute + + + +0.01 +smooth + +8.536347729403317 +47.34969639100308 +412.9310060319631 +14.065979019012293 +88.47306481392796 +0 +120 +absolute + + + +0.01 +smooth + +8.536347710948121 +47.34969638515776 +412.9490478323621 +14.067663676329829 +88.473383183064 +0 +120 +absolute + + + +0.01 +smooth + +8.536347692278358 +47.349696379238665 +412.96721827858903 +14.069374289450792 +88.47370628080736 +0 +120 +absolute + + + +0.01 +smooth + +8.536347673415264 +47.34969637325217 +412.98550061266593 +14.0711092800599 +88.47403379921238 +0 +120 +absolute + + + +0.01 +smooth + +8.53634765438008 +47.34969636720468 +413.0038780766148 +14.072867069841887 +88.47436543033331 +0 +120 +absolute + + + +0.01 +smooth + +8.536347635194048 +47.34969636110258 +413.0223339124577 +14.074646080481479 +88.47470086622447 +0 +120 +absolute + + + +0.01 +smooth + +8.536347615878409 +47.349696354952265 +413.0408513622166 +14.076444733663404 +88.47503979894016 +0 +120 +absolute + + + +0.01 +smooth + +8.5363475964544 +47.34969634876013 +413.05941366791353 +14.078261451072386 +88.47538192053473 +0 +120 +absolute + + + +0.01 +smooth + +8.536347576943264 +47.349696342532575 +413.0780040715706 +14.080094654393152 +88.47572692306242 +0 +120 +absolute + + + +0.01 +smooth + +8.536347557366241 +47.34969633627598 +413.0966058152097 +14.081942765310428 +88.47607449857756 +0 +120 +absolute + + + +0.01 +smooth + +8.53634753774457 +47.34969632999675 +413.1152021408529 +14.083804205508946 +88.47642433913448 +0 +120 +absolute + + + +0.01 +smooth + +8.536347517696948 +47.34969632356929 +413.1339697804266 +14.085720961636364 +88.47678408025466 +0 +120 +absolute + + + +0.01 +smooth + +8.536347496727098 +47.34969631683039 +413.15314620641203 +14.087747335835427 +88.477163610169 +0 +120 +absolute + + + +0.01 +smooth + +8.53634747485758 +47.349696309787035 +413.1727228189493 +14.08988140437843 +88.47756256941874 +0 +120 +absolute + + + +0.01 +smooth + +8.536347452113016 +47.34969630244687 +413.19269003630086 +14.092121020846648 +88.477980557949 +0 +120 +absolute + + + +0.01 +smooth + +8.53634742851801 +47.34969629481749 +413.2130382767289 +14.094464038821338 +88.47841717570485 +0 +120 +absolute + + + +0.01 +smooth + +8.536347404097189 +47.349696286906564 +413.23375795849614 +14.096908311883773 +88.47887202263148 +0 +120 +absolute + + + +0.01 +smooth + +8.536347378875163 +47.34969627872171 +413.2548394998645 +14.099451693615219 +88.47934469867391 +0 +120 +absolute + + + +0.01 +smooth + +8.536347352876549 +47.349696270270584 +413.2762733190967 +14.102092037596941 +88.47983480377736 +0 +120 +absolute + + + +0.01 +smooth + +8.536347326125961 +47.34969626156077 +413.29804983445473 +14.104827197410204 +88.48034193788683 +0 +120 +absolute + + + +0.01 +smooth + +8.536347298648018 +47.34969625259999 +413.3201594642014 +14.107655026636284 +88.48086570094756 +0 +120 +absolute + + + +0.01 +smooth + +8.536347270467335 +47.349696243395805 +413.34259262659884 +14.110573378856433 +88.48140569290456 +0 +120 +absolute + + + +0.01 +smooth + +8.536347241608526 +47.34969623395586 +413.36533973990936 +14.113580107651927 +88.48196151370296 +0 +120 +absolute + + + +0.01 +smooth + +8.536347212096208 +47.34969622428782 +413.38839122239546 +14.116673066604031 +88.48253276328794 +0 +120 +absolute + + + +0.01 +smooth + +8.536347181955 +47.34969621439928 +413.4117374923195 +14.11985010929401 +88.48311904160452 +0 +120 +absolute + + + +0.01 +smooth + +8.536347151209513 +47.349696204297935 +413.43536896794393 +14.123109089303131 +88.48371994859791 +0 +120 +absolute + + + +0.01 +smooth + +8.53634711988436 +47.34969619399135 +413.45927606753077 +14.12644786021266 +88.48433508421316 +0 +120 +absolute + + + +0.01 +smooth + +8.536347088004165 +47.3496961834872 +413.4834492093426 +14.129864275603866 +88.48496404839538 +0 +120 +absolute + + + +0.01 +smooth + +8.536347055593538 +47.349696172793124 +413.50787881164206 +14.133356189058013 +88.48560644108971 +0 +120 +absolute + + + +0.01 +smooth + +8.536347022677099 +47.34969616191674 +413.5325552926912 +14.136921454156372 +88.48626186224128 +0 +120 +absolute + + + +0.01 +smooth + +8.53634698927946 +47.34969615086569 +413.5574690707524 +14.140557924480202 +88.48692991179517 +0 +120 +absolute + + + +0.01 +smooth + +8.536346955425238 +47.349696139647605 +413.58261056408804 +14.144263453610776 +88.48761018969651 +0 +120 +absolute + + + +0.01 +smooth + +8.536346921139051 +47.349696128270125 +413.60797019096066 +14.148035895129357 +88.4883022958904 +0 +120 +absolute + + + +0.01 +smooth + +8.53634688644551 +47.34969611674089 +413.63353836963245 +14.151873102617213 +88.48900583032199 +0 +120 +absolute + + + +0.01 +smooth + +8.536346851369235 +47.34969610506753 +413.6593055183657 +14.15577292965561 +88.48972039293633 +0 +120 +absolute + + + +0.01 +smooth + +8.53634681593484 +47.34969609325766 +413.68526205542304 +14.159733229825815 +88.4904455836786 +0 +120 +absolute + + + +0.01 +smooth + +8.53634678016694 +47.34969608131895 +413.71139839906675 +14.16375185670909 +88.49118100249387 +0 +120 +absolute + + + +0.01 +smooth + +8.536346744090153 +47.34969606925901 +413.737704967559 +14.167826663886714 +88.49192624932729 +0 +120 +absolute + + + +0.01 +smooth + +8.536346707729095 +47.34969605708549 +413.7641721791625 +14.171955504939937 +88.49268092412395 +0 +120 +absolute + + + +0.01 +smooth + +8.53634667110838 +47.34969604480601 +413.7907904521393 +14.17613623345004 +88.49344462682896 +0 +120 +absolute + + + +0.01 +smooth + +8.536346634252622 +47.34969603242822 +413.81755020475197 +14.180366702998281 +88.49421695738744 +0 +120 +absolute + + + +0.01 +smooth + +8.536346597186439 +47.34969601995975 +413.84444185526274 +14.18464476716593 +88.4949975157445 +0 +120 +absolute + + + +0.01 +smooth + +8.536346559934449 +47.349696007408234 +413.8714558219341 +14.188968279534247 +88.49578590184528 +0 +120 +absolute + + + +0.01 +smooth + +8.536346522521264 +47.3496959947813 +413.8985825230284 +14.19333509368451 +88.49658171563486 +0 +120 +absolute + + + +0.01 +smooth + +8.536346484971503 +47.3496959820866 +413.92581237680787 +14.197743063197978 +88.49738455705837 +0 +120 +absolute + + + +0.01 +smooth + +8.536346447309779 +47.34969596933175 +413.95313580153504 +14.20219004165592 +88.49819402606092 +0 +120 +absolute + + + +0.01 +smooth + +8.536346409560709 +47.349695956524386 +413.9805432154722 +14.206673882639599 +88.49900972258763 +0 +120 +absolute + + + +0.01 +smooth + +8.53634637174891 +47.34969594367217 +414.0080250368818 +14.211192439730286 +88.4998312465836 +0 +120 +absolute + + + +0.01 +smooth + +8.53634633383607 +47.34969593076116 +414.03559289050855 +14.215752355307282 +88.50065972138228 +0 +120 +absolute + + + +0.01 +smooth + +8.536346295264977 +47.349695917599675 +414.06343420868814 +14.220432708630925 +88.5015088311874 +0 +120 +absolute + + + +0.01 +smooth + +8.536346255919312 +47.34969590414703 +414.0915895820192 +14.225250924627284 +88.50238158318643 +0 +120 +absolute + + + +0.01 +smooth + +8.536346215824388 +47.34969589041105 +414.12005204339215 +14.230204640440602 +88.50327755564214 +0 +120 +absolute + + + +0.01 +smooth + +8.536346175005496 +47.34969587639948 +414.1488146256972 +14.235291493215119 +88.50419632681728 +0 +120 +absolute + + + +0.01 +smooth + +8.53634613348795 +47.34969586212018 +414.1778703618253 +14.240509120095101 +88.50513747497467 +0 +120 +absolute + + + +0.01 +smooth + +8.536346091297053 +47.34969584758092 +414.20721228466675 +14.245855158224789 +88.50610057837712 +0 +120 +absolute + + + +0.01 +smooth + +8.53634604845811 +47.3496958327895 +414.23683342711223 +14.251327244748431 +88.50708521528733 +0 +120 +absolute + + + +0.01 +smooth + +8.536346004996425 +47.34969581775372 +414.2667268220523 +14.256923016810285 +88.50809096396814 +0 +120 +absolute + + + +0.01 +smooth + +8.5363459609373 +47.34969580248139 +414.29688550237756 +14.262640111554594 +88.50911740268235 +0 +120 +absolute + + + +0.01 +smooth + +8.536345916306042 +47.34969578698031 +414.3273025009783 +14.268476166125613 +88.51016410969268 +0 +120 +absolute + + + +0.01 +smooth + +8.536345871127955 +47.34969577125829 +414.3579708507453 +14.274428817667589 +88.511230663262 +0 +120 +absolute + + + +0.01 +smooth + +8.536345825428347 +47.34969575532313 +414.38888358456916 +14.280495703324776 +88.51231664165306 +0 +120 +absolute + + + +0.01 +smooth + +8.53634577923252 +47.34969573918263 +414.42003373534027 +14.28667446024142 +88.51342162312862 +0 +120 +absolute + + + +0.01 +smooth + +8.536345732565778 +47.34969572284458 +414.45141433594927 +14.292962725561773 +88.5145451859515 +0 +120 +absolute + + + +0.01 +smooth + +8.536345685453428 +47.34969570631679 +414.4830184192868 +14.299358136430085 +88.51568690838448 +0 +120 +absolute + + + +0.01 +smooth + +8.536345637920771 +47.34969568960706 +414.51483901824315 +14.305858329990606 +88.51684636869034 +0 +120 +absolute + + + +0.01 +smooth + +8.536345589993115 +47.3496956727232 +414.54686916570915 +14.312460943387588 +88.51802314513186 +0 +120 +absolute + + + +0.01 +smooth + +8.536345541695765 +47.34969565567299 +414.57910189457505 +14.319163613765276 +88.51921681597183 +0 +120 +absolute + + + +0.01 +smooth + +8.536345493054021 +47.34969563846426 +414.6115302377317 +14.325963978267925 +88.52042695947304 +0 +120 +absolute + + + +0.01 +smooth + +8.536345444093191 +47.3496956211048 +414.6441472280696 +14.332859674039787 +88.52165315389828 +0 +120 +absolute + + + +0.01 +smooth + +8.536345394838582 +47.349695603602406 +414.6769458984792 +14.339848338225105 +88.52289497751033 +0 +120 +absolute + + + +0.01 +smooth + +8.536345345315494 +47.34969558596487 +414.709919281851 +14.34692760796813 +88.52415200857199 +0 +120 +absolute + + + +0.01 +smooth + +8.536345295549236 +47.349695568200026 +414.7430604110757 +14.35409512041312 +88.52542382534601 +0 +120 +absolute + + + +0.01 +smooth + +8.536345245565109 +47.349695550315644 +414.7763623190438 +14.36134851270432 +88.52671000609521 +0 +120 +absolute + + + +0.01 +smooth + +8.536345195388419 +47.34969553231955 +414.8098180386459 +14.36868542198598 +88.52801012908233 +0 +120 +absolute + + + +0.01 +smooth + +8.536345145044471 +47.34969551421953 +414.8434206027724 +14.37610348540235 +88.52932377257022 +0 +120 +absolute + + + +0.01 +smooth + +8.536345094558571 +47.349695496023394 +414.87716304431405 +14.38360034009768 +88.53065051482164 +0 +120 +absolute + + + +0.01 +smooth + +8.536345043956022 +47.34969547773893 +414.9110383961613 +14.391173623216222 +88.53198993409934 +0 +120 +absolute + + + +0.01 +smooth + +8.536344993262128 +47.349695459373955 +414.9450396912046 +14.398820971902222 +88.53334160866616 +0 +120 +absolute + + + +0.01 +smooth + +8.536344942502195 +47.34969544093626 +414.97915996233473 +14.406540023299936 +88.53470511678486 +0 +120 +absolute + + + +0.01 +smooth + +8.536344891701527 +47.34969542243366 +415.013392242442 +14.414328414553609 +88.53608003671822 +0 +120 +absolute + + + +0.01 +smooth + +8.536344840885429 +47.349695403873945 +415.0477295644172 +14.422183782807496 +88.53746594672904 +0 +120 +absolute + + + +0.01 +smooth + +8.536344790079205 +47.34969538526492 +415.08216496115074 +14.430103765205843 +88.5388624250801 +0 +120 +absolute + + + +0.01 +smooth + +8.536344739308161 +47.34969536661439 +415.1166914655331 +14.438085998892902 +88.54026905003418 +0 +120 +absolute + + + +0.01 +smooth + +8.536344688597602 +47.349695347930144 +415.15130211045505 +14.44612812101292 +88.54168539985406 +0 +120 +absolute + + + +0.01 +smooth + +8.536344637972828 +47.349695329220005 +415.185989928807 +14.454227768710153 +88.54311105280256 +0 +120 +absolute + + + +0.01 +smooth + +8.53634458745915 +47.349695310491754 +415.22074795347953 +14.462382579128844 +88.54454558714242 +0 +120 +absolute + + + +0.01 +smooth + +8.536344536806642 +47.34969529166437 +415.2556393867778 +14.470631660842981 +88.54599544406292 +0 +120 +absolute + + + +0.01 +smooth + +8.53634448559296 +47.34969527260062 +415.29077304377404 +14.479040536977207 +88.54747144386579 +0 +120 +absolute + + + +0.01 +smooth + +8.536344433842835 +47.34969525330719 +415.32614494146696 +14.4876076753356 +88.54897331581051 +0 +120 +absolute + + + +0.01 +smooth + +8.53634438158754 +47.34969523379289 +415.36174943997366 +14.49633056170147 +88.5505006266866 +0 +120 +absolute + + + +0.01 +smooth + +8.536344328858336 +47.34969521406654 +415.39758089941057 +14.505206681858121 +88.55205294328351 +0 +120 +absolute + + + +0.01 +smooth + +8.5363442756865 +47.349695194136906 +415.4336336798948 +14.514233521588858 +88.55362983239068 +0 +120 +absolute + + + +0.01 +smooth + +8.536344222103294 +47.34969517401283 +415.4699021415429 +14.523408566676986 +88.55523086079755 +0 +120 +absolute + + + +0.01 +smooth + +8.536344168139985 +47.34969515370307 +415.50638064447156 +14.532729302905805 +88.55685559529356 +0 +120 +absolute + + + +0.01 +smooth + +8.536344113827845 +47.34969513321646 +415.5430635487979 +14.54219321605863 +88.55850360266815 +0 +120 +absolute + + + +0.01 +smooth + +8.536344059198136 +47.34969511256178 +415.57994521463837 +14.551797791918753 +88.56017444971081 +0 +120 +absolute + + + +0.01 +smooth + +8.536344004282133 +47.34969509174787 +415.6170200021099 +14.56154051626949 +88.56186770321095 +0 +120 +absolute + + + +0.01 +smooth + +8.536343949111098 +47.34969507078349 +415.65428227132935 +14.571418874894144 +88.56358292995806 +0 +120 +absolute + + + +0.01 +smooth + +8.536343893716298 +47.34969504967745 +415.6917263824134 +14.581430353576012 +88.56531969674151 +0 +120 +absolute + + + +0.01 +smooth + +8.536343838129007 +47.34969502843857 +415.7293466954786 +14.591572438098405 +88.56707757035083 +0 +120 +absolute + + + +0.01 +smooth + +8.536343782380486 +47.34969500707564 +415.7671375706423 +14.601842614244628 +88.56885611757546 +0 +120 +absolute + + + +0.01 +smooth + +8.536343726502007 +47.34969498559745 +415.8050933680207 +14.612238367797982 +88.57065490520476 +0 +120 +absolute + + + +0.01 +smooth + +8.536343670524836 +47.34969496401281 +415.8432084477309 +14.622757184541774 +88.57247350002827 +0 +120 +absolute + + + +0.01 +smooth + +8.536343614480245 +47.34969494233056 +415.88147716988976 +14.633396550259317 +88.57431146883545 +0 +120 +absolute + + + +0.01 +smooth + +8.536343558399492 +47.349694920559436 +415.9198938946138 +14.644153950733898 +88.57616837841564 +0 +120 +absolute + + + +0.01 +smooth + +8.536343502313853 +47.34969489870828 +415.9584529820199 +14.655026871748836 +88.5780437955584 +0 +120 +absolute + + + +0.01 +smooth + +8.536343446254595 +47.349694876785875 +415.99714879222483 +14.666012799087431 +88.57993728705314 +0 +120 +absolute + + + +0.01 +smooth + +8.53634339025298 +47.34969485480105 +416.0359756853454 +14.677109218532987 +88.58184841968928 +0 +120 +absolute + + + +0.01 +smooth + +8.536343334340284 +47.34969483276259 +416.0749280214984 +14.688313615868813 +88.58377676025631 +0 +120 +absolute + + + +0.01 +smooth + +8.53634327854777 +47.34969481067928 +416.11400016080063 +14.699623476878207 +88.58572187554365 +0 +120 +absolute + + + +0.01 +smooth + +8.536343222906705 +47.34969478855996 +416.1531864633688 +14.711036287344482 +88.58768333234075 +0 +120 +absolute + + + +0.01 +smooth + +8.536343167448358 +47.34969476641338 +416.1924812893197 +14.722549533050936 +88.58966069743707 +0 +120 +absolute + + + +0.01 +smooth + +8.536343112204 +47.349694744248396 +416.2318789987702 +14.734160699780876 +88.59165353762208 +0 +120 +absolute + + + +0.01 +smooth + +8.536343057204892 +47.34969472207378 +416.27137395183695 +14.745867273317609 +88.59366141968516 +0 +120 +absolute + + + +0.01 +smooth + +8.536343002482306 +47.349694699898336 +416.31096050863687 +14.757666739444437 +88.59568391041581 +0 +120 +absolute + + + +0.01 +smooth + +8.53634294806751 +47.34969467773087 +416.35063302928666 +14.769556583944667 +88.59772057660349 +0 +120 +absolute + + + +0.01 +smooth + +8.53634289399177 +47.34969465558018 +416.390385873903 +14.781534292601599 +88.59977098503761 +0 +120 +absolute + + + +0.01 +smooth + +8.536342840286355 +47.349694633455066 +416.43021340260293 +14.793597351198542 +88.60183470250763 +0 +120 +absolute + + + +0.01 +smooth + +8.536342786982534 +47.34969461136435 +416.47010997550296 +14.805743245518803 +88.60391129580302 +0 +120 +absolute + + + +0.01 +smooth + +8.536342734111571 +47.3496945893168 +416.5100699527201 +14.817969461345681 +88.60600033171319 +0 +120 +absolute + + + +0.01 +smooth + +8.536342681704737 +47.34969456732125 +416.5500876943709 +14.830273484462486 +88.60810137702762 +0 +120 +absolute + + + +0.01 +smooth + +8.536342629793298 +47.34969454538648 +416.5901575605724 +14.84265280065252 +88.61021399853576 +0 +120 +absolute + + + +0.01 +smooth + +8.53634257840852 +47.3496945235213 +416.6302739114411 +14.855104895699085 +88.61233776302701 +0 +120 +absolute + + + +0.01 +smooth + +8.536342527518853 +47.34969450171972 +416.6704390914674 +14.8676332351947 +88.6144731891806 +0 +120 +absolute + + + +0.01 +smooth + +8.536342476346642 +47.34969447979934 +416.7107514832772 +14.880312996236963 +88.61663221393398 +0 +120 +absolute + + + +0.01 +smooth + +8.536342424696171 +47.34969445771317 +416.7512380896523 +14.893165439454116 +88.61881819782786 +0 +120 +absolute + + + +0.01 +smooth + +8.536342372624967 +47.349694435473616 +416.79189403229424 +14.906187894686202 +88.62103069273928 +0 +120 +absolute + + + +0.01 +smooth + +8.536342320190549 +47.349694413093054 +416.8327144329047 +14.919377691773265 +88.62326925054545 +0 +120 +absolute + + + +0.01 +smooth + +8.536342267450442 +47.349694390583934 +416.8736944131855 +14.932732160555364 +88.6255334231235 +0 +120 +absolute + + + +0.01 +smooth + +8.53634221446217 +47.349694367958655 +416.9148290948383 +14.94624863087255 +88.62782276235056 +0 +120 +absolute + + + +0.01 +smooth + +8.536342161283253 +47.34969434522962 +416.9561135995648 +14.959924432564861 +88.63013682010377 +0 +120 +absolute + + + +0.01 +smooth + +8.53634210797122 +47.34969432240928 +416.99754304906696 +14.973756895472363 +88.6324751482603 +0 +120 +absolute + + + +0.01 +smooth + +8.536342054583587 +47.34969429951 +417.0391125650461 +14.987743349435087 +88.6348372986972 +0 +120 +absolute + + + +0.01 +smooth + +8.536342001177882 +47.3496942765442 +417.0808172692041 +15.00188112429309 +88.63722282329168 +0 +120 +absolute + + + +0.01 +smooth + +8.536341947811627 +47.349694253524326 +417.1226522832428 +15.016167549886429 +88.6396312739209 +0 +120 +absolute + + + +0.01 +smooth + +8.53634189454234 +47.34969423046274 +417.1646127288635 +15.030599956055138 +88.64206220246189 +0 +120 +absolute + + + +0.01 +smooth + +8.536341841427557 +47.349694207371904 +417.20669372776854 +15.045175672639287 +88.64451516079193 +0 +120 +absolute + + + +0.01 +smooth + +8.536341788524785 +47.34969418426417 +417.24889040165897 +15.0598920294789 +88.64698970078804 +0 +120 +absolute + + + +0.01 +smooth + +8.53634173589156 +47.34969416115202 +417.29119787223715 +15.074746356414051 +88.64948537432743 +0 +120 +absolute + + + +0.01 +smooth + +8.536341683585396 +47.349694138047816 +417.3336112612043 +15.089735983284776 +88.6520017332872 +0 +120 +absolute + + + +0.01 +smooth + +8.536341631663822 +47.349694114963995 +417.3761256902623 +15.104858239931126 +88.6545383295445 +0 +120 +absolute + + + +0.01 +smooth + +8.53634158018436 +47.34969409191296 +417.41873628111284 +15.120110456193153 +88.65709471497645 +0 +120 +absolute + + + +0.01 +smooth + +8.536341529204531 +47.34969406890711 +417.46143815545776 +15.135489961910903 +88.65967044146022 +0 +120 +absolute + + + +0.01 +smooth + +8.536341478781859 +47.34969404595888 +417.50422643499854 +15.150994086924428 +88.66226506087294 +0 +120 +absolute + + + +0.01 +smooth + +8.536341428973868 +47.34969402308066 +417.54709624143703 +15.166620161073777 +88.66487812509175 +0 +120 +absolute + + + +0.01 +smooth + +8.536341379838078 +47.34969400028488 +417.5900426964749 +15.182365514198995 +88.66750918599375 +0 +120 +absolute + + + +0.01 +smooth + +8.536341331432016 +47.34969397758395 +417.6330609218139 +15.19822747614014 +88.67015779545612 +0 +120 +absolute + + + +0.01 +smooth + +8.536341283813204 +47.34969395499026 +417.6761460391558 +15.214203376737256 +88.67282350535599 +0 +120 +absolute + + + +0.01 +smooth + +8.536341237039164 +47.34969393251625 +417.71929317020226 +15.230290545830393 +88.67550586757048 +0 +120 +absolute + + + +0.01 +smooth + +8.53634119116742 +47.349693910174324 +417.76249743665477 +15.246486313259602 +88.67820443397676 +0 +120 +absolute + + + +0.01 +smooth + +8.536341146255495 +47.34969388797688 +417.8057539602154 +15.262788008864927 +88.68091875645194 +0 +120 +absolute + + + +0.01 +smooth + +8.536341102360911 +47.34969386593636 +417.84905786258565 +15.279192962486427 +88.68364838687317 +0 +120 +absolute + + + +0.01 +smooth + +8.536341059541193 +47.349693844065136 +417.89240426546723 +15.295698503964143 +88.68639287711758 +0 +120 +absolute + + + +0.01 +smooth + +8.536341017853863 +47.349693822375656 +417.935788290562 +15.312301963138129 +88.68915177906231 +0 +120 +absolute + + + +0.01 +smooth + +8.536340977356442 +47.349693800880296 +417.9792050595715 +15.32900066984843 +88.6919246445845 +0 +120 +absolute + + + +0.01 +smooth + +8.536340938106457 +47.349693779591504 +418.02264969419747 +15.345791953935102 +88.6947110255613 +0 +120 +absolute + + + +0.01 +smooth + +8.536340900161429 +47.34969375852168 +418.0661173161418 +15.362673145238187 +88.69751047386981 +0 +120 +absolute + + + +0.01 +smooth + +8.53634086357888 +47.34969373768322 +418.10960304710596 +15.37964157359774 +88.70032254138722 +0 +120 +absolute + + + +0.01 +smooth + +8.536340828416336 +47.34969371708855 +418.1531020087918 +15.39669456885381 +88.70314677999065 +0 +120 +absolute + + + +0.01 +smooth + +8.536340794731318 +47.34969369675008 +418.196609322901 +15.413829460846443 +88.7059827415572 +0 +120 +absolute + + + +0.01 +smooth + +8.536340762581348 +47.349693676680225 +418.2401201111353 +15.43104357941569 +88.70882997796404 +0 +120 +absolute + + + +0.01 +smooth + +8.536340731392148 +47.34969365672779 +418.2836677611054 +15.448367355065276 +88.7116931631872 +0 +120 +absolute + + + +0.01 +smooth + +8.53634069992159 +47.349693636575445 +418.32732656538917 +15.465866278573426 +88.71458239929001 +0 +120 +absolute + + + +0.01 +smooth + +8.536340668194033 +47.34969361623966 +418.3710944924724 +15.48353954773316 +88.71749753226518 +0 +120 +absolute + + + +0.01 +smooth + +8.536340636273376 +47.34969359574721 +418.41496712227615 +15.501384290198121 +88.72043808779961 +0 +120 +absolute + + + +0.01 +smooth + +8.536340604223517 +47.34969357512483 +418.4589400347218 +15.51939763362194 +88.72340359158024 +0 +120 +absolute + + + +0.01 +smooth + +8.536340572108342 +47.349693554399295 +418.5030088097303 +15.537576705658255 +88.72639356929395 +0 +120 +absolute + + + +0.01 +smooth + +8.536340539991757 +47.349693533597375 +418.5471690272232 +15.555918633960708 +88.7294075466277 +0 +120 +absolute + + + +0.01 +smooth + +8.536340507937652 +47.34969351274583 +418.5914162671216 +15.574420546182933 +88.73244504926843 +0 +120 +absolute + + + +0.01 +smooth + +8.536340476009922 +47.34969349187141 +418.63574610934666 +15.593079569978563 +88.73550560290298 +0 +120 +absolute + + + +0.01 +smooth + +8.536340444272465 +47.34969347100091 +418.68015413381966 +15.61189283300124 +88.73858873321834 +0 +120 +absolute + + + +0.01 +smooth + +8.536340412789174 +47.34969345016108 +418.7246359204618 +15.6308574629046 +88.74169396590139 +0 +120 +absolute + + + +0.01 +smooth + +8.536340381623944 +47.349693429378654 +418.76918704919416 +15.649970587342276 +88.74482082663903 +0 +120 +absolute + + + +0.01 +smooth + +8.536340350840671 +47.34969340868044 +418.81380309993824 +15.669229333967913 +88.74796884111824 +0 +120 +absolute + + + +0.01 +smooth + +8.536340320503252 +47.34969338809318 +418.858479652615 +15.688630830435141 +88.7511375350259 +0 +120 +absolute + + + +0.01 +smooth + +8.53634029067558 +47.34969336764363 +418.9032122871459 +15.708172204397599 +88.75432643404895 +0 +120 +absolute + + + +0.01 +smooth + +8.536340261421548 +47.34969334735855 +418.94799658345175 +15.727850583508918 +88.75753506387422 +0 +120 +absolute + + + +0.01 +smooth + +8.53634023280506 +47.34969332726476 +418.9928281214544 +15.747663095422752 +88.76076295018878 +0 +120 +absolute + + + +0.01 +smooth + +8.53634020489 +47.34969330738893 +419.0377024810743 +15.767606867792713 +88.76400961867941 +0 +120 +absolute + + + +0.01 +smooth + +8.536340177740273 +47.34969328775793 +419.0826152422334 +15.787679028272464 +88.76727459503313 +0 +120 +absolute + + + +0.01 +smooth + +8.536340151419768 +47.34969326839843 +419.12756198485243 +15.807876704515623 +88.7705574049368 +0 +120 +absolute + + + +0.01 +smooth + +8.536340125992382 +47.34969324933724 +419.1725382888528 +15.828197024175836 +88.77385757407735 +0 +120 +absolute + + + +0.01 +smooth + +8.536340101522013 +47.349693230601126 +419.21753973415576 +15.848637114906737 +88.7771746281417 +0 +120 +absolute + + + +0.01 +smooth + +8.536340078072552 +47.349693212216835 +419.2625619006824 +15.869194104361961 +88.78050809281676 +0 +120 +absolute + + + +0.01 +smooth + +8.536340055707896 +47.34969319421113 +419.30760036835403 +15.88986512019515 +88.78385749378945 +0 +120 +absolute + + + +0.01 +smooth + +8.536340034491941 +47.3496931766108 +419.3526507170918 +15.910647290059938 +88.78722235674672 +0 +120 +absolute + + + +0.01 +smooth + +8.536340014488584 +47.34969315944257 +419.39770852681704 +15.931537741609962 +88.79060220737546 +0 +120 +absolute + + + +0.01 +smooth + +8.536339995761715 +47.349693142733244 +419.4427693774509 +15.952533602498859 +88.79399657136258 +0 +120 +absolute + + + +0.01 +smooth + +8.536339978375235 +47.34969312650955 +419.48782884891455 +15.973632000380263 +88.79740497439502 +0 +120 +absolute + + + +0.01 +smooth + +8.536339962393033 +47.349693110798285 +419.5328825211291 +15.994830062907816 +88.80082694215969 +0 +120 +absolute + + + +0.01 +smooth + +8.53633994787901 +47.34969309562618 +419.5779259740161 +16.016124917735155 +88.8042620003435 +0 +120 +absolute + + + +0.01 +smooth + +8.53633993489706 +47.34969308102002 +419.62295478749655 +16.037513692515915 +88.80770967463339 +0 +120 +absolute + + + +0.01 +smooth + +8.536339923511076 +47.34969306700657 +419.6679645414917 +16.058993514903733 +88.81116949071625 +0 +120 +absolute + + + +0.01 +smooth + +8.536339913784957 +47.34969305361258 +419.7129508159228 +16.080561512552244 +88.814640974279 +0 +120 +absolute + + + +0.01 +smooth + +8.536339905782595 +47.34969304086482 +419.75790919071096 +16.102214813115083 +88.81812365100859 +0 +120 +absolute + + + +0.01 +smooth + +8.536339899567885 +47.34969302879006 +419.80283524577754 +16.123950544245893 +88.82161704659191 +0 +120 +absolute + + + +0.01 +smooth + +8.536339895204724 +47.349693017415056 +419.8477245610437 +16.14576583359831 +88.82512068671589 +0 +120 +absolute + + + +0.01 +smooth + +8.536339892757008 +47.349693006766564 +419.8925727164307 +16.167657808825968 +88.82863409706745 +0 +120 +absolute + + + +0.01 +smooth + +8.536339892275919 +47.3496929968428 +419.9373790990362 +16.18962714515629 +88.83215734542064 +0 +120 +absolute + + + +0.01 +smooth + +8.536339893549423 +47.349692987108554 +419.98221384328093 +16.211740290774284 +88.83570054965786 +0 +120 +absolute + + + +0.01 +smooth + +8.536339896452308 +47.3496929773642 +420.02710158166207 +16.234020933315954 +88.83926729283773 +0 +120 +absolute + + + +0.01 +smooth + +8.53633990094631 +47.349692967625074 +420.0720381805803 +16.25646590545126 +88.84285705433362 +0 +120 +absolute + + + +0.01 +smooth + +8.536339906993181 +47.349692957906576 +420.11701950643686 +16.279072039850174 +88.84646931351895 +0 +120 +absolute + + + +0.01 +smooth + +8.536339914554658 +47.34969294822404 +420.1620414256327 +16.301836169182653 +88.85010354976711 +0 +120 +absolute + + + +0.01 +smooth + +8.536339923592491 +47.34969293859288 +420.20709980456905 +16.324755126118678 +88.85375924245156 +0 +120 +absolute + + + +0.01 +smooth + +8.536339934068419 +47.34969292902843 +420.2521905096466 +16.347825743328197 +88.85743587094558 +0 +120 +absolute + + + +0.01 +smooth + +8.536339945944189 +47.349692919546094 +420.2973094072665 +16.371044853481187 +88.8611329146227 +0 +120 +absolute + + + +0.01 +smooth + +8.536339959181541 +47.34969291016123 +420.3424523638299 +16.394409289247612 +88.86484985285628 +0 +120 +absolute + + + +0.01 +smooth + +8.53633997374223 +47.34969290088923 +420.38761524573783 +16.417915883297443 +88.86858616501976 +0 +120 +absolute + + + +0.01 +smooth + +8.536339989587983 +47.34969289174542 +420.4327939193911 +16.441561468300637 +88.87234133048644 +0 +120 +absolute + + + +0.01 +smooth + +8.536340006680556 +47.349692882745224 +420.477984251191 +16.46534287692717 +88.87611482862987 +0 +120 +absolute + + + +0.01 +smooth + +8.536340024981685 +47.34969287390396 +420.52318210753816 +16.489256941846996 +88.87990613882332 +0 +120 +absolute + + + +0.01 +smooth + +8.53634004445312 +47.34969286523706 +420.56838335483405 +16.513300495730096 +88.8837147404403 +0 +120 +absolute + + + +0.01 +smooth + +8.536340065056603 +47.34969285675986 +420.6135838594794 +16.537470371246428 +88.88754011285414 +0 +120 +absolute + + + +0.01 +smooth + +8.536340086753876 +47.349692848487734 +420.6587794878754 +16.561763401065956 +88.8913817354383 +0 +120 +absolute + + + +0.01 +smooth + +8.536340109506684 +47.349692840436056 +420.70396610642285 +16.586176417858642 +88.89523908756614 +0 +120 +absolute + + + +0.01 +smooth + +8.536340133276775 +47.34969283262023 +420.74913958152314 +16.610706254294474 +88.89911164861111 +0 +120 +absolute + + + +0.01 +smooth + +8.536340158025885 +47.34969282505556 +420.79429577957694 +16.635349743043392 +88.90299889794657 +0 +120 +absolute + + + +0.01 +smooth + +8.536340183715762 +47.34969281775747 +420.8394305669854 +16.660103716775378 +88.90690031494596 +0 +120 +absolute + + + +0.01 +smooth + +8.53634021030815 +47.34969281074133 +420.8845398101496 +16.68496500816039 +88.91081537898265 +0 +120 +absolute + + + +0.01 +smooth + +8.536340237764792 +47.349692804022496 +420.92961937547057 +16.709930449868402 +88.91474356943009 +0 +120 +absolute + + + +0.01 +smooth + +8.536340266047432 +47.34969279761635 +420.9746651293492 +16.734996874569372 +88.91868436566165 +0 +120 +absolute + + + +0.01 +smooth + +8.536340295117814 +47.34969279153825 +421.01967293818666 +16.760161114933275 +88.92263724705074 +0 +120 +absolute + + + +0.01 +smooth + +8.536340324937681 +47.34969278580359 +421.06463866838385 +16.78542000363007 +88.92660169297076 +0 +120 +absolute + + + +0.01 +smooth + +8.536340355468777 +47.34969278042773 +421.1095581863418 +16.810770373329728 +88.93057718279515 +0 +120 +absolute + + + +0.01 +smooth + +8.536340386672848 +47.349692775426035 +421.1544273584618 +16.83620905670221 +88.93456319589728 +0 +120 +absolute + + + +0.01 +smooth + +8.536340418511633 +47.34969277081389 +421.19924205114444 +16.861732886417485 +88.93855921165057 +0 +120 +absolute + + + +0.01 +smooth + +8.536340450946883 +47.349692766606665 +421.2439981307911 +16.88733869514552 +88.94256470942841 +0 +120 +absolute + + + +0.01 +smooth + +8.536340483940334 +47.34969276281973 +421.2886914638026 +16.91302331555628 +88.94657916860422 +0 +120 +absolute + + + +0.01 +smooth + +8.536340517453734 +47.349692759468454 +421.33331791658003 +16.93878358031973 +88.9506020685514 +0 +120 +absolute + + + +0.01 +smooth + +8.536340551448827 +47.34969275656822 +421.37787335552446 +16.96461632210584 +88.95463288864335 +0 +120 +absolute + + + +0.01 +smooth + +8.536340585887357 +47.349692754134374 +421.42235364703686 +16.990518373584575 +88.9586711082535 +0 +120 +absolute + + + +0.01 +smooth + +8.536340620731066 +47.34969275218232 +421.4667546575182 +17.0164865674259 +88.96271620675522 +0 +120 +absolute + + + +0.01 +smooth + +8.536340655941698 +47.349692750727414 +421.51107225336955 +17.042517736299775 +88.9667676635219 +0 +120 +absolute + + + +0.01 +smooth + +8.536340691481 +47.34969274978503 +421.5553023009921 +17.06860871287618 +88.97082495792702 +0 +120 +absolute + + + +0.01 +smooth + +8.53634072731071 +47.34969274937054 +421.5994406667866 +17.09475632982507 +88.97488756934392 +0 +120 +absolute + + + +0.01 +smooth + +8.536340764448813 +47.34969274962093 +421.64351081528014 +17.120984017566936 +88.97895908994637 +0 +120 +absolute + + + +0.01 +smooth + +8.536340805556579 +47.34969275084543 +421.68758010389473 +17.14735718231677 +88.98304959783682 +0 +120 +absolute + + + +0.01 +smooth + +8.536340850670882 +47.34969275303472 +421.7316482473409 +17.173875722096355 +88.98715903696399 +0 +120 +absolute + + + +0.01 +smooth + +8.536340899688152 +47.34969275616292 +421.77571131337686 +17.20053601245181 +88.99128680648465 +0 +120 +absolute + + + +0.01 +smooth + +8.536340952504823 +47.34969276020416 +421.8197653697604 +17.22733442892925 +88.99543230555548 +0 +120 +absolute + + + +0.01 +smooth + +8.536341009017315 +47.349692765132495 +421.86380648424944 +17.254267347074773 +88.99959493333321 +0 +120 +absolute + + + +0.01 +smooth + +8.53634106912206 +47.349692770922054 +421.907830724602 +17.2813311424345 +89.00377408897454 +0 +120 +absolute + + + +0.01 +smooth + +8.536341132715487 +47.34969277754695 +421.951834158576 +17.30852219055453 +89.00796917163616 +0 +120 +absolute + + + +0.01 +smooth + +8.536341199694023 +47.349692784981265 +421.9958128539296 +17.335836866980976 +89.01217958047476 +0 +120 +absolute + + + +0.01 +smooth + +8.536341269954104 +47.34969279319913 +422.03976287842073 +17.36327154725996 +89.01640471464714 +0 +120 +absolute + + + +0.01 +smooth + +8.536341343392152 +47.34969280217465 +422.08368029980744 +17.390822606937576 +89.02064397330992 +0 +120 +absolute + + + +0.01 +smooth + +8.5363414199046 +47.34969281188191 +422.12756118584736 +17.418486421559944 +89.0248967556198 +0 +120 +absolute + + + +0.01 +smooth + +8.536341499387872 +47.349692822295026 +422.1714016042989 +17.446259366673168 +89.02916246073355 +0 +120 +absolute + + + +0.01 +smooth + +8.536341581738403 +47.34969283338812 +422.21519762291996 +17.474137817823365 +89.03344048780787 +0 +120 +absolute + + + +0.01 +smooth + +8.536341666852616 +47.34969284513525 +422.2589453094681 +17.50211815055663 +89.03773023599939 +0 +120 +absolute + + + +0.01 +smooth + +8.536341754626946 +47.34969285751058 +422.30264073170184 +17.53019674041909 +89.04203110446491 +0 +120 +absolute + + + +0.01 +smooth + +8.536341844957816 +47.349692870488184 +422.346279957379 +17.55836996295685 +89.0463424923611 +0 +120 +absolute + + + +0.01 +smooth + +8.53634193774166 +47.34969288404217 +422.38985905425756 +17.586634193716016 +89.05066379884467 +0 +120 +absolute + + + +0.01 +smooth + +8.536342032874908 +47.349692898146664 +422.4333740900954 +17.614985808242704 +89.05499442307234 +0 +120 +absolute + + + +0.01 +smooth + +8.536342130253981 +47.34969291277572 +422.4768211326505 +17.643421182083014 +89.05933376420077 +0 +120 +absolute + + + +0.01 +smooth + +8.536342229775313 +47.34969292790352 +422.52019624968085 +17.671936690783063 +89.06368122138674 +0 +120 +absolute + + + +0.01 +smooth + +8.536342331335335 +47.349692943504095 +422.56349550894464 +17.700528709888964 +89.0680361937869 +0 +120 +absolute + + + +0.01 +smooth + +8.536342434830473 +47.349692959551604 +422.60671497819965 +17.729193614946823 +89.07239808055797 +0 +120 +absolute + + + +0.01 +smooth + +8.536342540157156 +47.34969297602013 +422.6498507252039 +17.757927781502747 +89.0767662808567 +0 +120 +absolute + + + +0.01 +smooth + +8.536342647211814 +47.349692992883774 +422.6928988177154 +17.786727585102856 +89.08114019383976 +0 +120 +absolute + + + +0.01 +smooth + +8.536342755890876 +47.34969301011665 +422.73585532349205 +17.81558940129325 +89.08551921866385 +0 +120 +absolute + + + +0.01 +smooth + +8.53634286609077 +47.349693027692865 +422.778716310292 +17.844509605620043 +89.08990275448569 +0 +120 +absolute + + + +0.01 +smooth + +8.536342977707926 +47.349693045586534 +422.8214778458732 +17.87348457362934 +89.09429020046198 +0 +120 +absolute + + + +0.01 +smooth + +8.536343090638773 +47.34969306377173 +422.8641359979934 +17.90251068086726 +89.09868095574947 +0 +120 +absolute + + + +0.01 +smooth + +8.536343204779739 +47.3496930822226 +422.90668683441083 +17.931584302879905 +89.1030744195048 +0 +120 +absolute + + + +0.01 +smooth + +8.536343320027253 +47.349693100913214 +422.9491264228834 +17.96070181521339 +89.10746999088474 +0 +120 +absolute + + + +0.01 +smooth + +8.536343436277743 +47.34969311981771 +422.9914508311691 +17.989859593413826 +89.11186706904594 +0 +120 +absolute + + + +0.01 +smooth + +8.536343553427642 +47.34969313891016 +423.0336561270259 +18.019054013027315 +89.11626505314516 +0 +120 +absolute + + + +0.01 +smooth + +8.536343671373375 +47.3496931581647 +423.0757383782117 +18.048281449599976 +89.12066334233909 +0 +120 +absolute + + + +0.01 +smooth + +8.536343790011372 +47.34969317755541 +423.1176936524847 +18.077538278677917 +89.12506133578441 +0 +120 +absolute + + + +0.01 +smooth + +8.536343909238063 +47.34969319705641 +423.1595180176027 +18.10682087580724 +89.12945843263788 +0 +120 +absolute + + + +0.01 +smooth + +8.536344028949875 +47.34969321664181 +423.20120754132364 +18.13612561653407 +89.13385403205615 +0 +120 +absolute + + + +0.01 +smooth + +8.536344149119811 +47.349693236317705 +423.2427603581221 +18.165450977569055 +89.13824787302913 +0 +120 +absolute + + + +0.01 +smooth + +8.53634427217791 +47.34969325711174 +423.2842407804113 +18.1948624953216 +89.14265053565673 +0 +120 +absolute + + + +0.01 +smooth + +8.536344399270499 +47.34969327949975 +423.32567810352003 +18.224389503026714 +89.1470667315421 +0 +120 +absolute + + + +0.01 +smooth + +8.536344530321657 +47.34969330344424 +423.36706857443227 +18.254027636367848 +89.15149572004633 +0 +120 +absolute + + + +0.01 +smooth + +8.536344665255465 +47.34969332890767 +423.40840844013195 +18.28377253102844 +89.15593676053052 +0 +120 +absolute + + + +0.01 +smooth + +8.536344803996005 +47.34969335585254 +423.4496939476029 +18.313619822691937 +89.16038911235579 +0 +120 +absolute + + + +0.01 +smooth + +8.536344946467366 +47.34969338424132 +423.49092134382914 +18.3435651470418 +89.16485203488325 +0 +120 +absolute + + + +0.01 +smooth + +8.536345092593624 +47.34969341403652 +423.5320868757947 +18.373604139761465 +89.16932478747407 +0 +120 +absolute + + + +0.01 +smooth + +8.536345242298863 +47.349693445200614 +423.57318679048313 +18.403732436534376 +89.17380662948926 +0 +120 +absolute + + + +0.01 +smooth + +8.53634539550716 +47.34969347769604 +423.6142173348787 +18.433945673043983 +89.17829682028997 +0 +120 +absolute + + + +0.01 +smooth + +8.536345552142606 +47.34969351148538 +423.6551747559652 +18.464239484973742 +89.18279461923734 +0 +120 +absolute + + + +0.01 +smooth + +8.536345712129272 +47.34969354653101 +423.6960553007264 +18.494609508007084 +89.1872992856924 +0 +120 +absolute + + + +0.01 +smooth + +8.536345875391248 +47.34969358279548 +423.7368552161465 +18.525051377827467 +89.19181007901636 +0 +120 +absolute + + + +0.01 +smooth + +8.53634604185261 +47.349693620241254 +423.77757074920925 +18.555560730118334 +89.19632625857027 +0 +120 +absolute + + + +0.01 +smooth + +8.536346211437449 +47.34969365883082 +423.81819814689874 +18.586133200563125 +89.20084708371523 +0 +120 +absolute + + + +0.01 +smooth + +8.536346384069835 +47.34969369852665 +423.8587336561984 +18.616764424845297 +89.20537181381232 +0 +120 +absolute + + + +0.01 +smooth + +8.536346559673861 +47.34969373929125 +423.8991735240928 +18.647450038648298 +89.20989970822278 +0 +120 +absolute + + + +0.01 +smooth + +8.536346738173599 +47.34969378108706 +423.93951399756537 +18.67818567765556 +89.21443002630757 +0 +120 +absolute + + + +0.01 +smooth + +8.53634691949314 +47.34969382387661 +423.97975132360034 +18.708966977550546 +89.21896202742789 +0 +120 +absolute + + + +0.01 +smooth + +8.53634710355656 +47.34969386762237 +424.0198817491814 +18.739789574016694 +89.22349497094478 +0 +120 +absolute + + + +0.01 +smooth + +8.53634729028794 +47.349693912286824 +424.0599015212926 +18.770649102737455 +89.22802811621943 +0 +120 +absolute + + + +0.01 +smooth + +8.536347479611367 +47.34969395783244 +424.0998068869178 +18.801541199396272 +89.23256072261289 +0 +120 +absolute + + + +0.01 +smooth + +8.53634767145092 +47.34969400422172 +424.1395940930409 +18.832461499676594 +89.23709204948628 +0 +120 +absolute + + + +0.01 +smooth + +8.536347865730681 +47.34969405141713 +424.17925938664587 +18.863405639261867 +89.24162135620074 +0 +120 +absolute + + + +0.01 +smooth + +8.536348062374731 +47.34969409938117 +424.2187990147167 +18.894369253835535 +89.24614790211731 +0 +120 +absolute + + + +0.01 +smooth + +8.536348261307154 +47.34969414807632 +424.25820922423713 +18.925347979081053 +89.2506709465972 +0 +120 +absolute + + + +0.01 +smooth + +8.53634846245203 +47.349694197465055 +424.2974862621912 +18.956337450681858 +89.2551897490014 +0 +120 +absolute + + + +0.01 +smooth + +8.536348665733442 +47.349694247509866 +424.3366263755628 +18.987333304321403 +89.25970356869112 +0 +120 +absolute + + + +0.01 +smooth + +8.536348871075472 +47.34969429817323 +424.3756258113358 +19.01833117568313 +89.2642116650274 +0 +120 +absolute + + + +0.01 +smooth + +8.5363490784022 +47.349694349417646 +424.4144808164941 +19.049326700450493 +89.26871329737142 +0 +120 +absolute + + + +0.01 +smooth + +8.536349287637709 +47.34969440120558 +424.45318763802186 +19.080315514306932 +89.2732077250842 +0 +120 +absolute + + + +0.01 +smooth + +8.536349498706084 +47.34969445349953 +424.49174252290265 +19.111293252935894 +89.27769420752692 +0 +120 +absolute + + + +0.01 +smooth + +8.5363497115314 +47.34969450626196 +424.5301417181206 +19.142255552020828 +89.28217200406067 +0 +120 +absolute + + + +0.01 +smooth + +8.536349926037747 +47.34969455945537 +424.5683814706596 +19.17319804724518 +89.28664037404654 +0 +120 +absolute + + + +0.01 +smooth + +8.5363501421492 +47.34969461304224 +424.6064580275035 +19.2041163742924 +89.29109857684564 +0 +120 +absolute + + + +0.01 +smooth + +8.536350359789845 +47.34969466698506 +424.64436763563634 +19.235006168845928 +89.29554587181912 +0 +120 +absolute + + + +0.01 +smooth + +8.536350578883763 +47.349694721246294 +424.6821065420419 +19.26586306658922 +89.29998151832802 +0 +120 +absolute + + + +0.01 +smooth + +8.536350799355032 +47.349694775788436 +424.71967099370414 +19.29668270320571 +89.30440477573352 +0 +120 +absolute + + + +0.01 +smooth + +8.536351021829397 +47.349694830903005 +424.75708103752874 +19.327488470167754 +89.3088197519775 +0 +120 +absolute + + + +0.01 +smooth + +8.536351248514695 +47.34969488762575 +424.7944103589705 +19.358365624331697 +89.31324134573897 +0 +120 +absolute + + + +0.01 +smooth + +8.536351479517581 +47.34969494600979 +424.8316613430895 +19.389315499829255 +89.31766977715598 +0 +120 +absolute + + + +0.01 +smooth + +8.536351714769436 +47.3496950060261 +424.8688304285146 +19.4203324684393 +89.32210404947864 +0 +120 +absolute + + + +0.01 +smooth + +8.536351954201635 +47.349695067645705 +424.9059140538746 +19.451410901940676 +89.32654316595703 +0 +120 +absolute + + + +0.01 +smooth + +8.53635219774555 +47.349695130839606 +424.9429086577982 +19.482545172112243 +89.33098612984121 +0 +120 +absolute + + + +0.01 +smooth + +8.536352445332565 +47.34969519557877 +424.97981067891413 +19.513729650732852 +89.33543194438128 +0 +120 +absolute + + + +0.01 +smooth + +8.536352696894053 +47.34969526183426 +425.0166165558514 +19.544958709581373 +89.33987961282737 +0 +120 +absolute + + + +0.01 +smooth + +8.536352952361392 +47.34969532957704 +425.0533227272388 +19.576226720436654 +89.34432813842952 +0 +120 +absolute + + + +0.01 +smooth + +8.536353211665961 +47.349695398778124 +425.0899256317051 +19.60752805507756 +89.34877652443787 +0 +120 +absolute + + + +0.01 +smooth + +8.536353474739132 +47.34969546940849 +425.1264217078788 +19.638857085282933 +89.35322377410242 +0 +120 +absolute + + + +0.01 +smooth + +8.536353741512286 +47.34969554143919 +425.1628073943893 +19.670208182831654 +89.35766889067337 +0 +120 +absolute + + + +0.01 +smooth + +8.536354011916796 +47.34969561484117 +425.1990791298647 +19.701575719502554 +89.36211087740067 +0 +120 +absolute + + + +0.01 +smooth + +8.536354285884046 +47.349695689585474 +425.2352333529343 +19.73295406707451 +89.36654873753454 +0 +120 +absolute + + + +0.01 +smooth + +8.536354563345403 +47.349695765643084 +425.27126650222675 +19.764337597326367 +89.37098147432499 +0 +120 +absolute + + + +0.01 +smooth + +8.536354844232253 +47.34969584298502 +425.3071750163708 +19.795720682036997 +89.37540809102217 +0 +120 +absolute + + + +0.01 +smooth + +8.536355128475966 +47.34969592158225 +425.34295533399523 +19.82709769298523 +89.37982759087608 +0 +120 +absolute + + + +0.01 +smooth + +8.536355416007925 +47.34969600140583 +425.37860389372906 +19.85846300194996 +89.3842389771369 +0 +120 +absolute + + + +0.01 +smooth + +8.5363557067595 +47.34969608242672 +425.41411713420075 +19.889810980710003 +89.38864125305466 +0 +120 +absolute + + + +0.01 +smooth + +8.536356000662073 +47.34969616461594 +425.44949149403925 +19.921136001044253 +89.39303342187945 +0 +120 +absolute + + + +0.01 +smooth + +8.53635629764702 +47.34969624794447 +425.4847234118735 +19.952432434731545 +89.39741448686138 +0 +120 +absolute + + + +0.01 +smooth + +8.536356597645716 +47.349696332383346 +425.5198093263323 +19.983694653550742 +89.40178345125051 +0 +120 +absolute + + + +0.01 +smooth + +8.536356900589539 +47.34969641790356 +425.55474567604404 +20.014917029280703 +89.406139318297 +0 +120 +absolute + + + +0.01 +smooth + +8.536357206409868 +47.34969650447609 +425.58952889963786 +20.046093933700284 +89.41048109125082 +0 +120 +absolute + + + +0.01 +smooth + +8.536357515038075 +47.349696592071965 +425.6241554357425 +20.077219738588344 +89.41480777336216 +0 +120 +absolute + + + +0.01 +smooth + +8.53635782640554 +47.34969668066219 +425.6586217229868 +20.108288815723732 +89.41911836788105 +0 +120 +absolute + + + +0.01 +smooth + +8.536358140443642 +47.34969677021775 +425.6929241999994 +20.13929553688532 +89.4234118780576 +0 +120 +absolute + + + +0.01 +smooth + +8.536358457083754 +47.349696860709656 +425.7270593054094 +20.17023427385195 +89.42768730714192 +0 +120 +absolute + + + +0.01 +smooth + +8.536358776257254 +47.34969695210891 +425.76102347784524 +20.20109939840249 +89.43194365838406 +0 +120 +absolute + + + +0.01 +smooth + +8.53635909789552 +47.34969704438651 +425.794813155936 +20.231885282315787 +89.4361799350341 +0 +120 +absolute + + + +0.01 +smooth + +8.536359421929927 +47.349697137513466 +425.82842477831025 +20.262586297370706 +89.44039514034216 +0 +120 +absolute + + + +0.01 +smooth + +8.536359748291853 +47.34969723146078 +425.861854783597 +20.293196815346104 +89.44458827755834 +0 +120 +absolute + + + +0.01 +smooth + +8.536360076912676 +47.34969732619944 +425.89509961042484 +20.323711208020832 +89.44875834993269 +0 +120 +absolute + + + +0.01 +smooth + +8.53636040772377 +47.34969742170048 +425.9281556974227 +20.354123847173753 +89.45290436071531 +0 +120 +absolute + + + +0.01 +smooth + +8.536360740656514 +47.34969751793487 +425.96101948321933 +20.384429104583724 +89.4570253131563 +0 +120 +absolute + + + +0.01 +smooth + +8.536361075642285 +47.34969761487363 +425.99368740644366 +20.414621352029595 +89.4611202105057 +0 +120 +absolute + + + +0.01 +smooth + +8.53636141261246 +47.349697712487746 +426.02615590572424 +20.44469496129023 +89.46518805601367 +0 +120 +absolute + + + +0.01 +smooth + +8.536361751523815 +47.34969781075968 +426.05842241707626 +20.474645854225066 +89.46922815304195 +0 +120 +absolute + + + +0.01 +smooth + +8.536362094067075 +47.3496979104523 +426.09055249112146 +20.50457523875871 +89.47326017358998 +0 +120 +absolute + + + +0.01 +smooth + +8.536362441248407 +47.349698012021584 +426.12258488177565 +20.53454090598619 +89.4772953348297 +0 +120 +absolute + + + +0.01 +smooth + +8.53636279300109 +47.34969811544098 +426.15451622853357 +20.564534859655957 +89.48133210755965 +0 +120 +absolute + + + +0.01 +smooth + +8.536363149258381 +47.34969822068391 +426.1863431708905 +20.594549103516485 +89.4853689625784 +0 +120 +absolute + + + +0.01 +smooth + +8.536363509953542 +47.349698327723814 +426.21806234834105 +20.62457564131621 +89.48940437068451 +0 +120 +absolute + + + +0.01 +smooth + +8.536363875019847 +47.34969843653412 +426.2496704003806 +20.65460647680361 +89.49343680267658 +0 +120 +absolute + + + +0.01 +smooth + +8.536364244390557 +47.34969854708828 +426.2811639665039 +20.684633613727172 +89.49746472935318 +0 +120 +absolute + + + +0.01 +smooth + +8.536364617998935 +47.349698659359724 +426.31253968620615 +20.71464905583533 +89.50148662151288 +0 +120 +absolute + + + +0.01 +smooth + +8.536364995778245 +47.34969877332188 +426.3437941989821 +20.744644806876547 +89.50550094995423 +0 +120 +absolute + + + +0.01 +smooth + +8.536365377661758 +47.349698888948225 +426.3749241443269 +20.774612870599302 +89.50950618547584 +0 +120 +absolute + + + +0.01 +smooth + +8.536365763582737 +47.34969900621216 +426.4059261617355 +20.804545250752053 +89.51350079887625 +0 +120 +absolute + + + +0.01 +smooth + +8.536366153474443 +47.34969912508713 +426.43679689070296 +20.83443395108326 +89.51748326095402 +0 +120 +absolute + + + +0.01 +smooth + +8.536366547270145 +47.34969924554657 +426.4675329707242 +20.864270975341384 +89.52145204250778 +0 +120 +absolute + + + +0.01 +smooth + +8.536366944903108 +47.34969936756391 +426.4981310412942 +20.8940483272749 +89.52540561433604 +0 +120 +absolute + + + +0.01 +smooth + +8.536367346306598 +47.3496994911126 +426.528587741908 +20.923758010632252 +89.52934244723741 +0 +120 +absolute + + + +0.01 +smooth + +8.536367751413879 +47.3496996161661 +426.5588997120607 +20.953392029161922 +89.53326101201047 +0 +120 +absolute + + + +0.01 +smooth + +8.536368160158217 +47.34969974269781 +426.5890635912472 +20.982942386612375 +89.53715977945377 +0 +120 +absolute + + + +0.01 +smooth + +8.536368572472874 +47.349699870681164 +426.6190760189623 +21.01240108673205 +89.5410372203659 +0 +120 +absolute + + + +0.01 +smooth + +8.536368988291121 +47.34970000008964 +426.6489336347014 +21.04176013326944 +89.54489180554542 +0 +120 +absolute + + + +0.01 +smooth + +8.536369407546218 +47.34970013089663 +426.67863307795915 +21.071011529972992 +89.5487220057909 +0 +120 +absolute + + + +0.01 +smooth + +8.53636983017143 +47.349700263075604 +426.7081709882307 +21.100147280591166 +89.55252629190093 +0 +120 +absolute + + + +0.01 +smooth + +8.536370256100028 +47.349700396599985 +426.7375440050111 +21.129159388872434 +89.55630313467405 +0 +120 +absolute + + + +0.01 +smooth + +8.53637068526527 +47.34970053144322 +426.7667487677952 +21.158039858565253 +89.56005100490887 +0 +120 +absolute + + + +0.01 +smooth + +8.536371117600428 +47.34970066757874 +426.79578191607794 +21.186780693418093 +89.56376837340392 +0 +120 +absolute + + + +0.01 +smooth + +8.536371553038759 +47.34970080497996 +426.8246400893546 +21.21537389717941 +89.56745371095782 +0 +120 +absolute + + + +0.01 +smooth + +8.536371991513535 +47.34970094362036 +426.85331992711997 +21.243811473597674 +89.57110548836911 +0 +120 +absolute + + + +0.01 +smooth + +8.536372432958018 +47.34970108347335 +426.88181806886905 +21.27208542642135 +89.57472217643638 +0 +120 +absolute + + + +0.01 +smooth + +8.536372877305476 +47.34970122451237 +426.91013115409686 +21.300187759398888 +89.57830224595821 +0 +120 +absolute + + + +0.01 +smooth + +8.53637332448917 +47.34970136671087 +426.93825582229846 +21.328110476278763 +89.58184416773312 +0 +120 +absolute + + + +0.01 +smooth + +8.536373774442369 +47.349701510042266 +426.9661887129688 +21.355845580809437 +89.58534641255977 +0 +120 +absolute + + + +0.01 +smooth + +8.536374227098335 +47.34970165448003 +426.99392646560284 +21.38338507673937 +89.58880745123665 +0 +120 +absolute + + + +0.01 +smooth + +8.536374682390338 +47.34970179999755 +427.0214657196956 +21.410720967817024 +89.59222575456236 +0 +120 +absolute + + + +0.01 +smooth + +8.536375140251637 +47.34970194656832 +427.0488031147421 +21.437845257790872 +89.59559979333551 +0 +120 +absolute + + + +0.01 +smooth + +8.536375600615502 +47.34970209416572 +427.07593529023734 +21.464749950409363 +89.59892803835463 +0 +120 +absolute + + + +0.01 +smooth + +8.536376063415194 +47.34970224276323 +427.10285888567626 +21.491427049420977 +89.60220896041828 +0 +120 +absolute + + + +0.01 +smooth + +8.53637652858398 +47.349702392334265 +427.12957054055397 +21.517868558574165 +89.60544103032508 +0 +120 +absolute + + + +0.01 +smooth + +8.536376996055129 +47.34970254285227 +427.15606689436527 +21.544066481617392 +89.60862271887358 +0 +120 +absolute + + + +0.01 +smooth + +8.536377466238084 +47.34970269450814 +427.1823658242307 +21.570065824490204 +89.61176452239589 +0 +120 +absolute + + + +0.01 +smooth + +8.536377941023872 +47.34970284816961 +427.20855135419765 +21.596074198221874 +89.61491369120836 +0 +120 +absolute + + + +0.01 +smooth + +8.536378420557657 +47.3497030039075 +427.2346297322326 +21.622101937622705 +89.61807253793314 +0 +120 +absolute + + + +0.01 +smooth + +8.536378904772969 +47.34970316169603 +427.26059777200265 +21.64813567781013 +89.62123798933673 +0 +120 +absolute + + + +0.01 +smooth + +8.53637939360334 +47.349703321509416 +427.28645228717494 +21.6741620539016 +89.62440697218557 +0 +120 +absolute + + + +0.01 +smooth + +8.536379886982305 +47.34970348332185 +427.3121900914163 +21.700167701014543 +89.62757641324612 +0 +120 +absolute + + + +0.01 +smooth + +8.536380384843396 +47.34970364710759 +427.33780799839394 +21.726139254266414 +89.6307432392849 +0 +120 +absolute + + + +0.01 +smooth + +8.536380887120147 +47.349703812840794 +427.36330282177454 +21.75206334877464 +89.63390437706835 +0 +120 +absolute + + + +0.01 +smooth + +8.536381393746085 +47.34970398049569 +427.38867137522516 +21.77792661965667 +89.63705675336286 +0 +120 +absolute + + + +0.01 +smooth + +8.53638190465475 +47.349704150046485 +427.4139104724129 +21.803715702029937 +89.64019729493496 +0 +120 +absolute + + + +0.01 +smooth + +8.536382419779668 +47.34970432146742 +427.43901692700484 +21.8294172310119 +89.64332292855114 +0 +120 +absolute + + + +0.01 +smooth + +8.536382939054379 +47.34970449473268 +427.4639875526676 +21.855017841719977 +89.6464305809778 +0 +120 +absolute + + + +0.01 +smooth + +8.53638346241241 +47.34970466981649 +427.48881916306857 +21.880504169271628 +89.64951717898148 +0 +120 +absolute + + + +0.01 +smooth + +8.536383989787295 +47.34970484669303 +427.51350857187424 +21.905862848784274 +89.65257964932853 +0 +120 +absolute + + + +0.01 +smooth + +8.536384521112566 +47.34970502533655 +427.53805259275197 +21.93108051537537 +89.65561491878553 +0 +120 +absolute + + + +0.01 +smooth + +8.536385056321762 +47.349705205721264 +427.562448039369 +21.956143804162362 +89.65861991411892 +0 +120 +absolute + + + +0.01 +smooth + +8.536385595348404 +47.34970538782133 +427.58669172539146 +21.981039350262677 +89.66159156209507 +0 +120 +absolute + + + +0.01 +smooth + +8.536386138126034 +47.34970557161102 +427.61078046448705 +22.005753788793754 +89.66452678948056 +0 +120 +absolute + + + +0.01 +smooth + +8.536386684588182 +47.349705757064505 +427.63471107032257 +22.030273754873047 +89.66742252304175 +0 +120 +absolute + + + +0.01 +smooth + +8.536387234668378 +47.349705944156014 +427.65848035656484 +22.05458588361799 +89.67027568954522 +0 +120 +absolute + + + +0.01 +smooth + +8.536387788300159 +47.349706132859765 +427.68208513688097 +22.07867681014602 +89.67308321575733 +0 +120 +absolute + + + +0.01 +smooth + +8.536388345417055 +47.349706323149945 +427.70552222493797 +22.102533169574585 +89.6758420284446 +0 +120 +absolute + + + +0.01 +smooth + +8.536388905952599 +47.349706515000804 +427.7287884344027 +22.12614159702112 +89.67854905437348 +0 +120 +absolute + + + +0.01 +smooth + +8.536389469840323 +47.349706708386506 +427.7518805789423 +22.149488727603067 +89.68120122031043 +0 +120 +absolute + + + +0.01 +smooth + +8.53639003701376 +47.3497069032813 +427.77479547222356 +22.17256119643787 +89.6837954530219 +0 +120 +absolute + + + +0.01 +smooth + +8.536390607406444 +47.34970709965938 +427.7975299279136 +22.195345638642966 +89.68632867927437 +0 +120 +absolute + + + +0.01 +smooth + +8.53639118095191 +47.34970729749496 +427.8200807596795 +22.217828689335796 +89.68879782583431 +0 +120 +absolute + + + +0.01 +smooth + +8.536391757583683 +47.34970749676225 +427.842444781188 +22.239996983633805 +89.6911998194682 +0 +120 +absolute + + + +0.01 +smooth + +8.536392337235302 +47.34970769743546 +427.86461880610614 +22.26183715665443 +89.69353158694244 +0 +120 +absolute + + + +0.01 +smooth + +8.5363929198403 +47.349707899488806 +427.8865996481011 +22.28333584351511 +89.69579005502355 +0 +120 +absolute + + + +0.01 +smooth + +8.536393505332203 +47.3497081028965 +427.9083841208395 +22.30447967933329 +89.69797215047797 +0 +120 +absolute + + + +0.01 +smooth + +8.53639409364455 +47.34970830763275 +427.92996903798866 +22.325255299226406 +89.70007480007217 +0 +120 +absolute + + + +0.01 +smooth + +8.536394684710872 +47.34970851367177 +427.9513512132154 +22.345649338311905 +89.70209493057263 +0 +120 +absolute + + + +0.01 +smooth + +8.5363952784647 +47.34970872098777 +427.97252746018665 +22.36564843170722 +89.70402946874579 +0 +120 +absolute + + + +0.01 +smooth + +8.53639587483957 +47.34970892955496 +427.9934945925695 +22.385239214529797 +89.7058753413581 +0 +120 +absolute + + + +0.01 +smooth + +8.536396473769013 +47.349709139347546 +428.01424942403094 +22.404408321897073 +89.70762947517606 +0 +120 +absolute + + + +0.01 +smooth + +8.53639707518656 +47.34970935033976 +428.03478876823795 +22.423142388926497 +89.7092887969661 +0 +120 +absolute + + + +0.01 +smooth + +8.536397679031182 +47.34970956250838 +428.05510971552866 +22.441429641719534 +89.7108504736838 +0 +120 +absolute + + + +0.01 +smooth + +8.536398286612393 +47.34970977647896 +428.07527909380264 +22.459655129738202 +89.71237230001795 +0 +120 +absolute + + + +0.01 +smooth + +8.536398898929914 +47.34970999273055 +428.0953480183515 +22.478098818133237 +89.71389873097885 +0 +120 +absolute + + + +0.01 +smooth + +8.536399515917585 +47.34971021123772 +428.1153133895049 +22.496725696588946 +89.7154272211528 +0 +120 +absolute + + + +0.01 +smooth + +8.536400137509245 +47.34971043197491 +428.135172107592 +22.5155007547896 +89.71695522512583 +0 +120 +absolute + + + +0.01 +smooth + +8.536400763638726 +47.349710654916684 +428.15492107294244 +22.5343889824195 +89.7184801974842 +0 +120 +absolute + + + +0.01 +smooth + +8.536401394239872 +47.34971088003754 +428.1745571858859 +22.55335536916293 +89.71999959281409 +0 +120 +absolute + + + +0.01 +smooth + +8.53640202924652 +47.34971110731199 +428.1940773467517 +22.572364904704177 +89.72151086570169 +0 +120 +absolute + + + +0.01 +smooth + +8.536402668592503 +47.34971133671454 +428.21347845586934 +22.591382578727536 +89.72301147073313 +0 +120 +absolute + + + +0.01 +smooth + +8.536403312211664 +47.34971156821973 +428.23275741356844 +22.610373380917288 +89.72449886249468 +0 +120 +absolute + + + +0.01 +smooth + +8.536403960037843 +47.349711801802066 +428.25191112017853 +22.62930230095773 +89.72597049557248 +0 +120 +absolute + + + +0.01 +smooth + +8.536404612004869 +47.34971203743605 +428.2709364760289 +22.648134328533136 +89.72742382455264 +0 +120 +absolute + + + +0.01 +smooth + +8.536405268046586 +47.3497122750962 +428.28983038144935 +22.666834453327812 +89.72885630402143 +0 +120 +absolute + + + +0.01 +smooth + +8.536405928096833 +47.349712514757044 +428.3085897367693 +22.68536766502605 +89.73026538856504 +0 +120 +absolute + + + +0.01 +smooth + +8.536406592089447 +47.34971275639308 +428.3272114423181 +22.703698953312113 +89.7316485327696 +0 +120 +absolute + + + +0.01 +smooth + +8.536407259958263 +47.34971299997883 +428.3456923984254 +22.721793307870307 +89.73300319122131 +0 +120 +absolute + + + +0.01 +smooth + +8.536407931637124 +47.349713245488815 +428.3640295054208 +22.739615718384936 +89.7343268185064 +0 +120 +absolute + + + +0.01 +smooth + +8.536408607059863 +47.349713492897536 +428.3822196636336 +22.75713117454026 +89.73561686921096 +0 +120 +absolute + + + +0.01 +smooth + +8.536409286160321 +47.34971374217953 +428.4002597733935 +22.774304666020583 +89.73687079792127 +0 +120 +absolute + + + +0.01 +smooth + +8.536409968872332 +47.349713993309265 +428.4181467350298 +22.791101182510182 +89.73808605922342 +0 +120 +absolute + + + +0.01 +smooth + +8.536410655129739 +47.3497142462613 +428.43587744887225 +22.807485713693367 +89.73926010770364 +0 +120 +absolute + + + +0.01 +smooth + +8.536411344866378 +47.34971450101015 +428.45344881525017 +22.823423249254414 +89.74039039794813 +0 +120 +absolute + + + +0.01 +smooth + +8.536412038016085 +47.34971475753029 +428.4708577344932 +22.838878778877607 +89.74147438454304 +0 +120 +absolute + + + +0.01 +smooth + +8.536412734512702 +47.34971501579627 +428.4881011069308 +22.853817292247246 +89.74250952207456 +0 +120 +absolute + + + +0.01 +smooth + +8.536413434290061 +47.34971527578261 +428.5051758328925 +22.868203779047608 +89.74349326512888 +0 +120 +absolute + + + +0.01 +smooth + +8.536414137282007 +47.349715537463794 +428.52207881270766 +22.882003228962994 +89.74442306829218 +0 +120 +absolute + + + +0.01 +smooth + +8.536414843422373 +47.34971580081435 +428.5388069467061 +22.895180631677686 +89.74529638615064 +0 +120 +absolute + + + +0.01 +smooth + +8.536415552644996 +47.34971606580879 +428.55535713521715 +22.907700976875972 +89.74611067329046 +0 +120 +absolute + + + +0.01 +smooth + +8.53641626488372 +47.34971633242165 +428.57172627857017 +22.919529254242143 +89.74686338429778 +0 +120 +absolute + + + +0.01 +smooth + +8.536416980072378 +47.34971660062742 +428.5879112770949 +22.930630453460488 +89.74755197375882 +0 +120 +absolute + + + +0.01 +smooth + +8.536417698144806 +47.34971687040061 +428.6039090311208 +22.940969564215298 +89.74817389625977 +0 +120 +absolute + + + +0.01 +smooth + +8.536418419034849 +47.34971714171576 +428.61971644097736 +22.950511576190856 +89.74872660638675 +0 +120 +absolute + + + +0.01 +smooth + +8.536419142676339 +47.34971741454736 +428.6353304069941 +22.959221479071456 +89.74920755872603 +0 +120 +absolute + + + +0.01 +smooth + +8.536419869003115 +47.349717688869944 +428.65074782950046 +22.967064262541385 +89.74961420786371 +0 +120 +absolute + + + +0.01 +smooth + +8.536420597949014 +47.34971796465802 +428.66596560882607 +22.97400491628493 +89.74994400838602 +0 +120 +absolute + + + +0.01 +smooth + +8.536421329447881 +47.34971824188609 +428.68098064530034 +22.980008429986384 +89.75019441487916 +0 +120 +absolute + + + +0.01 +smooth + +8.536422063433545 +47.34971852052869 +428.6957898392528 +22.985039793330028 +89.75036288192926 +0 +120 +absolute + + + +0.01 +smooth + +8.536422799839848 +47.34971880056031 +428.71039009101315 +22.989063996000166 +89.75044686412252 +0 +120 +absolute + + + +0.01 +smooth + +8.53642353891975 +47.34971908211394 +428.7247972757238 +22.992189918000385 +89.7504437170074 +0 +120 +absolute + + + +0.01 +smooth + +8.536424282287856 +47.34971936599852 +428.7391081704888 +22.995153362212527 +89.75035224682571 +0 +120 +absolute + + + +0.01 +smooth + +8.536425030123302 +47.349719652310085 +428.7533341110593 +22.998061802108676 +89.75017443908644 +0 +120 +absolute + + + +0.01 +smooth + +8.53642578236095 +47.34971994102334 +428.7674719021242 +23.000913762329933 +89.74991252862989 +0 +120 +absolute + + + +0.01 +smooth + +8.536426538935652 +47.349720232113036 +428.781518348372 +23.003707767517387 +89.7495687502963 +0 +120 +absolute + + + +0.01 +smooth + +8.536427299782254 +47.349720525553906 +428.79547025449136 +23.006442342312127 +89.74914533892596 +0 +120 +absolute + + + +0.01 +smooth + +8.536428064835615 +47.34972082132066 +428.80932442517116 +23.009116011355253 +89.74864452935918 +0 +120 +absolute + + + +0.01 +smooth + +8.536428834030586 +47.349721119388036 +428.82307766509996 +23.011727299287866 +89.74806855643624 +0 +120 +absolute + + + +0.01 +smooth + +8.53642960730202 +47.34972141973075 +428.83672677896624 +23.01427473075104 +89.74741965499734 +0 +120 +absolute + + + +0.01 +smooth + +8.536430384584769 +47.34972172232352 +428.8502685714588 +23.016756830385876 +89.74670005988284 +0 +120 +absolute + + + +0.01 +smooth + +8.536431165813685 +47.3497220271411 +428.86369984726645 +23.019172122833467 +89.74591200593296 +0 +120 +absolute + + + +0.01 +smooth + +8.53643195092362 +47.34972233415818 +428.8770174110776 +23.021519132734916 +89.74505772798801 +0 +120 +absolute + + + +0.01 +smooth + +8.536432739849431 +47.34972264334953 +428.8902180675811 +23.023796384731302 +89.74413946088828 +0 +120 +absolute + + + +0.01 +smooth + +8.536433532525965 +47.34972295468983 +428.9032986214654 +23.026002403463714 +89.743159439474 +0 +120 +absolute + + + +0.01 +smooth + +8.536434328888076 +47.34972326815383 +428.9162558774192 +23.028135713573256 +89.74211989858547 +0 +120 +absolute + + + +0.01 +smooth + +8.536435128870622 +47.34972358371627 +428.9290866401315 +23.03019483970103 +89.741023073063 +0 +120 +absolute + + + +0.01 +smooth + +8.53643593240845 +47.34972390135185 +428.94178771429057 +23.03217830648811 +89.73987119774682 +0 +120 +absolute + + + +0.01 +smooth + +8.536436739436416 +47.34972422103531 +428.9543559045852 +23.0340846385756 +89.73866650747726 +0 +120 +absolute + + + +0.01 +smooth + +8.53643754988937 +47.34972454274138 +428.96678801570414 +23.035912360604588 +89.73741123709453 +0 +120 +absolute + + + +0.01 +smooth + +8.536438363702167 +47.34972486644477 +428.9790808523359 +23.03765999721617 +89.73610762143896 +0 +120 +absolute + + + +0.01 +smooth + +8.53643918080966 +47.34972519212022 +428.9912312191693 +23.039326073051438 +89.73475789535081 +0 +120 +absolute + + + +0.01 +smooth + +8.5364400011467 +47.34972551974245 +429.00323592089296 +23.040909112751486 +89.73336429367036 +0 +120 +absolute + + + +0.01 +smooth + +8.536440824648139 +47.349725849286195 +429.0150917621954 +23.042407640957403 +89.7319290512379 +0 +120 +absolute + + + +0.01 +smooth + +8.536441651248833 +47.34972618072617 +429.02679554776546 +23.043820182310288 +89.73045440289367 +0 +120 +absolute + + + +0.01 +smooth + +8.536442480883629 +47.349726514037116 +429.0383440822917 +23.045145261451232 +89.72894258347797 +0 +120 +absolute + + + +0.01 +smooth + +8.536443313487387 +47.349726849193736 +429.0497341704628 +23.04638140302133 +89.72739582783109 +0 +120 +absolute + + + +0.01 +smooth + +8.536444148994956 +47.34972718617079 +429.0609626169674 +23.047527131661667 +89.7258163707933 +0 +120 +absolute + + + +0.01 +smooth + +8.536444987341188 +47.34972752494297 +429.07202622649424 +23.04858097201334 +89.72420644720486 +0 +120 +absolute + + + +0.01 +smooth + +8.536445828460938 +47.34972786548502 +429.0829218037319 +23.04954144871745 +89.72256829190607 +0 +120 +absolute + + + +0.01 +smooth + +8.536446672289056 +47.34972820777166 +429.0936461533691 +23.050407086415078 +89.7209041397372 +0 +120 +absolute + + + +0.01 +smooth + +8.536447518760395 +47.34972855177763 +429.1041960800945 +23.051176409747328 +89.71921622553853 +0 +120 +absolute + + + +0.01 +smooth + +8.536448367809811 +47.34972889747764 +429.11456838859675 +23.051847943355284 +89.71750678415034 +0 +120 +absolute + + + +0.01 +smooth + +8.536449219372154 +47.34972924484643 +429.12475988356437 +23.05242021188004 +89.7157780504129 +0 +120 +absolute + + + +0.01 +smooth + +8.536450073382277 +47.3497295938587 +429.1347673696863 +23.052891739962696 +89.71403225916646 +0 +120 +absolute + + + +0.01 +smooth + +8.536450929775032 +47.34972994448921 +429.144587651651 +23.053261052244338 +89.71227164525135 +0 +120 +absolute + + + +0.01 +smooth + +8.536451788485273 +47.349730296712664 +429.1542175341473 +23.053526673366065 +89.71049844350783 +0 +120 +absolute + + + +0.01 +smooth + +8.536452649447853 +47.349730650503794 +429.1636538218636 +23.053687127968963 +89.70871488877616 +0 +120 +absolute + + + +0.01 +smooth + +8.536453512597623 +47.349731005837334 +429.17289331948876 +23.053740940694134 +89.70692321589664 +0 +120 +absolute + + + +0.01 +smooth + +8.536454378888424 +47.349731363222965 +429.1820076883038 +23.053087830906797 +89.70504461873502 +0 +120 +absolute + + + +0.01 +smooth + +8.536455249275278 +47.34973172317045 +429.19106824404554 +23.05115462704945 +89.70300161769853 +0 +120 +absolute + + + +0.01 +smooth + +8.536456123694812 +47.349732085654686 +429.2000712730869 +23.047980517379116 +89.70079843743981 +0 +120 +absolute + + + +0.01 +smooth + +8.53645700208365 +47.3497324506505 +429.2090130618002 +23.043604690152787 +89.69843930261148 +0 +120 +absolute + + + +0.01 +smooth + +8.536457884378411 +47.34973281813275 +429.217889896558 +23.038066333627476 +89.69592843786602 +0 +120 +absolute + + + +0.01 +smooth + +8.536458770515733 +47.34973318807631 +429.2266980637331 +23.031404636060206 +89.6932700678561 +0 +120 +absolute + + + +0.01 +smooth + +8.536459660432234 +47.34973356045602 +429.2354338496982 +23.023658785707983 +89.69046841723429 +0 +120 +absolute + + + +0.01 +smooth + +8.536460554064542 +47.34973393524676 +429.2440935408255 +23.014867970827797 +89.68752771065314 +0 +120 +absolute + + + +0.01 +smooth + +8.536461451349279 +47.34973431242336 +429.2526734234877 +23.005071379676668 +89.68445217276528 +0 +120 +absolute + + + +0.01 +smooth + +8.536462352223076 +47.3497346919607 +429.26116978405776 +22.994308200511615 +89.6812460282233 +0 +120 +absolute + + + +0.01 +smooth + +8.536463256622554 +47.349735073833614 +429.2695789089079 +22.982617621589633 +89.67791350167974 +0 +120 +absolute + + + +0.01 +smooth + +8.536464164484343 +47.34973545801701 +429.2778970844108 +22.97003883116774 +89.67445881778724 +0 +120 +absolute + + + +0.01 +smooth + +8.536465075745063 +47.34973584448568 +429.28612059693916 +22.956611017502933 +89.67088620119833 +0 +120 +absolute + + + +0.01 +smooth + +8.536465990341341 +47.349736233214514 +429.29424573286536 +22.942373368852234 +89.66719987656562 +0 +120 +absolute + + + +0.01 +smooth + +8.536466908209807 +47.34973662417838 +429.30226877856234 +22.927365073472647 +89.66340406854171 +0 +120 +absolute + + + +0.01 +smooth + +8.536467829287082 +47.34973701735212 +429.31018602040234 +22.91162531962118 +89.65950300177919 +0 +120 +absolute + + + +0.01 +smooth + +8.53646875350979 +47.349737412710596 +429.31799374475804 +22.89519329555484 +89.6555009009306 +0 +120 +absolute + + + +0.01 +smooth + +8.536469680814562 +47.34973781022866 +429.32568823800216 +22.87810818953064 +89.65140199064857 +0 +120 +absolute + + + +0.01 +smooth + +8.536470611138022 +47.34973820988118 +429.33326578650735 +22.860409189805594 +89.64721049558568 +0 +120 +absolute + + + +0.01 +smooth + +8.536471544416793 +47.34973861164302 +429.3407226766461 +22.842135484636696 +89.6429306403945 +0 +120 +absolute + + + +0.01 +smooth + +8.536472480587504 +47.34973901548902 +429.34805519479085 +22.823326262280965 +89.63856664972762 +0 +120 +absolute + + + +0.01 +smooth + +8.536473419586777 +47.34973942139405 +429.35525962731447 +22.80402071099541 +89.63412274823764 +0 +120 +absolute + + + +0.01 +smooth + +8.536474361351239 +47.34973982933296 +429.36233226058954 +22.78425801903704 +89.62960316057715 +0 +120 +absolute + + + +0.01 +smooth + +8.536475305817518 +47.34974023928061 +429.3692693809883 +22.76407737466286 +89.62501211139869 +0 +120 +absolute + + + +0.01 +smooth + +8.536476252922235 +47.34974065121186 +429.3760672748838 +22.743517966129883 +89.62035382535493 +0 +120 +absolute + + + +0.01 +smooth + +8.536477202602018 +47.34974106510157 +429.3827222286483 +22.722618981695117 +89.61563252709837 +0 +120 +absolute + + + +0.01 +smooth + +8.536478154793494 +47.34974148092459 +429.3892305286546 +22.70141960961557 +89.61085244128164 +0 +120 +absolute + + + +0.01 +smooth + +8.536479109433287 +47.34974189865579 +429.3955884612751 +22.67995903814825 +89.60601779255731 +0 +120 +absolute + + + +0.01 +smooth + +8.53648006645802 +47.34974231827002 +429.40179231288266 +22.65827645555017 +89.60113280557798 +0 +120 +absolute + + + +0.01 +smooth + +8.536481025804324 +47.349742739742126 +429.40783836984974 +22.636411050078333 +89.59620170499622 +0 +120 +absolute + + + +0.01 +smooth + +8.53648198740882 +47.34974316304698 +429.41372291854896 +22.614402009989753 +89.59122871546464 +0 +120 +absolute + + + +0.01 +smooth + +8.536482951208136 +47.34974358815945 +429.4194422453528 +22.592288523541434 +89.5862180616358 +0 +120 +absolute + + + +0.01 +smooth + +8.536483917138895 +47.34974401505438 +429.424992636634 +22.570109778990393 +89.58117396816232 +0 +120 +absolute + + + +0.01 +smooth + +8.536484885137726 +47.34974444370661 +429.4303703787651 +22.547904964593634 +89.57610065969672 +0 +120 +absolute + + + +0.01 +smooth + +8.536485855141253 +47.34974487409104 +429.43557175811856 +22.525713268608165 +89.57100236089167 +0 +120 +absolute + + + +0.01 +smooth + +8.536486827086101 +47.34974530618249 +429.44059306106726 +22.503573879291 +89.5658832963997 +0 +120 +absolute + + + +0.01 +smooth + +8.536487800908896 +47.34974573995584 +429.4454305739837 +22.481525984899136 +89.56074769087341 +0 +120 +absolute + + + +0.01 +smooth + +8.536488776746667 +47.349746175497835 +429.45010214128246 +22.459471356620874 +89.55558435255185 +0 +120 +absolute + + + +0.01 +smooth + +8.536489755915161 +47.3497466135529 +429.4547514925388 +22.436498676511096 +89.55029097269151 +0 +120 +absolute + + + +0.01 +smooth + +8.536490738614917 +47.34974705424191 +429.45940088395366 +22.4124532660337 +89.54485029516702 +0 +120 +absolute + + + +0.01 +smooth + +8.536491724784845 +47.3497474975397 +429.46404430541537 +22.38735921436255 +89.53926513263798 +0 +120 +absolute + + + +0.01 +smooth + +8.536492714363842 +47.349747943421015 +429.46867574681227 +22.361240610671466 +89.53353829776387 +0 +120 +absolute + + + +0.01 +smooth + +8.536493707290804 +47.349748391860615 +429.47328919803186 +22.3341215441343 +89.52767260320418 +0 +120 +absolute + + + +0.01 +smooth + +8.536494703504635 +47.34974884283329 +429.47787864896264 +22.30602610392491 +89.52167086161853 +0 +120 +absolute + + + +0.01 +smooth + +8.53649570294424 +47.349749296313824 +429.4824380894928 +22.276978379217127 +89.51553588566644 +0 +120 +absolute + + + +0.01 +smooth + +8.536496705548513 +47.34974975227697 +429.48696150951014 +22.247002459184788 +89.5092704880074 +0 +120 +absolute + + + +0.01 +smooth + +8.536497711256356 +47.34975021069747 +429.49144289890273 +22.216122433001743 +89.50287748130091 +0 +120 +absolute + + + +0.01 +smooth + +8.536498720006671 +47.349750671550154 +429.4958762475589 +22.184362389841848 +89.4963596782066 +0 +120 +absolute + + + +0.01 +smooth + +8.53649973173836 +47.34975113480977 +429.5002555453666 +22.15174641887893 +89.48971989138394 +0 +120 +absolute + + + +0.01 +smooth + +8.53650074639032 +47.34975160045109 +429.5045747822139 +22.118298609286835 +89.48296093349246 +0 +120 +absolute + + + +0.01 +smooth + +8.536501763901452 +47.34975206844889 +429.50882794798895 +22.084043050239423 +89.47608561719171 +0 +120 +absolute + + + +0.01 +smooth + +8.536502784210658 +47.34975253877792 +429.5130090325797 +22.049003830910515 +89.46909675514121 +0 +120 +absolute + + + +0.01 +smooth + +8.53650380725684 +47.349753011412986 +429.5171120258745 +22.013205040473977 +89.46199716000051 +0 +120 +absolute + + + +0.01 +smooth + +8.536504832978899 +47.349753486328844 +429.52113091776124 +21.976670768103634 +89.4547896444291 +0 +120 +absolute + + + +0.01 +smooth + +8.536505861315728 +47.349753963500255 +429.5250596981279 +21.93942510297333 +89.44747702108654 +0 +120 +absolute + + + +0.01 +smooth + +8.536506892206237 +47.34975444290201 +429.52889235686297 +21.901492134256937 +89.44006210263235 +0 +120 +absolute + + + +0.01 +smooth + +8.536507925589321 +47.34975492450887 +429.5326228838542 +21.86289595112827 +89.43254770172611 +0 +120 +absolute + + + +0.01 +smooth + +8.536508961403884 +47.34975540829562 +429.53624526898983 +21.82366064276118 +89.42493663102728 +0 +120 +absolute + + + +0.01 +smooth + +8.536509999588823 +47.349755894237006 +429.53975350215785 +21.78381029832952 +89.41723170319541 +0 +120 +absolute + + + +0.01 +smooth + +8.536511040083042 +47.349756382307824 +429.54314157324643 +21.74336900700712 +89.40943573089007 +0 +120 +absolute + + + +0.01 +smooth + +8.536512082825439 +47.34975687248286 +429.5464034721436 +21.702360857967832 +89.40155152677077 +0 +120 +absolute + + + +0.01 +smooth + +8.536513127754915 +47.349757364736845 +429.54953318873754 +21.66080994038551 +89.39358190349702 +0 +120 +absolute + + + +0.01 +smooth + +8.536514174810373 +47.34975785904458 +429.55252471291624 +21.61874034343397 +89.38552967372836 +0 +120 +absolute + + + +0.01 +smooth + +8.536515223930712 +47.34975835538083 +429.55537203456777 +21.576176156287083 +89.37739765012435 +0 +120 +absolute + + + +0.01 +smooth + +8.536516275054831 +47.34975885372036 +429.5580691435804 +21.53314146811868 +89.36918864534448 +0 +120 +absolute + + + +0.01 +smooth + +8.536517328121633 +47.34975935403796 +429.56061002984205 +21.48966036810261 +89.3609054720483 +0 +120 +absolute + + + +0.01 +smooth + +8.536518383070014 +47.34975985630838 +429.5629886832409 +21.44575694541271 +89.35255094289536 +0 +120 +absolute + + + +0.01 +smooth + +8.536519439838882 +47.34976036050641 +429.56519909366494 +21.401455289222827 +89.34412787054517 +0 +120 +absolute + + + +0.01 +smooth + +8.536520498367132 +47.349760866606815 +429.56723525100244 +21.356779488706813 +89.33563906765727 +0 +120 +absolute + + + +0.01 +smooth + +8.536521558593668 +47.34976137458436 +429.5690911451412 +21.311753633038506 +89.32708734689118 +0 +120 +absolute + + + +0.01 +smooth + +8.536522620457387 +47.34976188441384 +429.57076076596957 +21.266401811391745 +89.31847552090643 +0 +120 +absolute + + + +0.01 +smooth + +8.53652368389719 +47.34976239607 +429.5722381033755 +21.22074811294038 +89.30980640236257 +0 +120 +absolute + + + +0.01 +smooth + +8.536524748851981 +47.349762909527634 +429.5735171472472 +21.174816626858256 +89.30108280391912 +0 +120 +absolute + + + +0.01 +smooth + +8.536525815260658 +47.34976342476149 +429.57459188747265 +21.128631442319207 +89.2923075382356 +0 +120 +absolute + + + +0.01 +smooth + +8.536526883062123 +47.34976394174637 +429.57545631394004 +21.0822166484971 +89.28348341797157 +0 +120 +absolute + + + +0.01 +smooth + +8.536527952920354 +47.34976446088833 +429.5761941263462 +21.035214095613686 +89.27456655611171 +0 +120 +absolute + + + +0.01 +smooth + +8.536529025711724 +47.3497649827186 +429.5769186157471 +20.987150756596026 +89.26549919867367 +0 +120 +absolute + + + +0.01 +smooth + +8.5365301013813 +47.34976550721374 +429.5776298475447 +20.938042809849385 +89.25628346139489 +0 +120 +absolute + + + +0.01 +smooth + +8.536531179870439 +47.34976603434809 +429.57832743360194 +20.88790837955924 +89.24692169793633 +0 +120 +absolute + + + +0.01 +smooth + +8.536532261120508 +47.34976656409599 +429.57901098578196 +20.836765589911064 +89.23741626195908 +0 +120 +absolute + + + +0.01 +smooth + +8.536533345072872 +47.34976709643178 +429.5796801159479 +20.784632565090337 +89.22776950712418 +0 +120 +absolute + + + +0.01 +smooth + +8.53653443166889 +47.34976763132984 +429.58033443596264 +20.731527429282544 +89.21798378709258 +0 +120 +absolute + + + +0.01 +smooth + +8.53653552084993 +47.34976816876447 +429.58097355768945 +20.677468306673163 +89.20806145552537 +0 +120 +absolute + + + +0.01 +smooth + +8.536536612557352 +47.349768708710066 +429.5815970929914 +20.62247332144769 +89.19800486608356 +0 +120 +absolute + + + +0.01 +smooth + +8.536537706732519 +47.34976925114093 +429.58220465373125 +20.56656059779157 +89.18781637242814 +0 +120 +absolute + + + +0.01 +smooth + +8.536538803316796 +47.34976979603142 +429.58279585177246 +20.50974825989031 +89.17749832822021 +0 +120 +absolute + + + +0.01 +smooth + +8.536539902251542 +47.34977034335587 +429.58337029897785 +20.452054431929376 +89.1670530871207 +0 +120 +absolute + + + +0.01 +smooth + +8.536541003478128 +47.34977089308867 +429.5839276072106 +20.393497238094255 +89.15648300279074 +0 +120 +absolute + + + +0.01 +smooth + +8.536542106937913 +47.34977144520411 +429.5844673883339 +20.33409480257043 +89.1457904288913 +0 +120 +absolute + + + +0.01 +smooth + +8.536543212572255 +47.34977199967655 +429.5849892542104 +20.273865249543366 +89.13497771908335 +0 +120 +absolute + + + +0.01 +smooth + +8.536544320322527 +47.34977255648035 +429.5854928167037 +20.212826703198555 +89.12404722702802 +0 +120 +absolute + + + +0.01 +smooth + +8.536545430130088 +47.34977311558987 +429.58597768767663 +20.15099728772148 +89.11300130638631 +0 +120 +absolute + + + +0.01 +smooth + +8.5365465419363 +47.349773676979424 +429.58644347899224 +20.08839512729761 +89.1018423108192 +0 +120 +absolute + + + +0.01 +smooth + +8.536547655682527 +47.34977424062337 +429.58688980251355 +20.02503834611243 +89.09057259398774 +0 +120 +absolute + + + +0.01 +smooth + +8.536548771310134 +47.34977480649604 +429.58731627010377 +19.96094506835142 +89.07919450955299 +0 +120 +absolute + + + +0.01 +smooth + +8.536549888760481 +47.34977537457182 +429.5877224936258 +19.89613341820006 +89.06771041117592 +0 +120 +absolute + + + +0.01 +smooth + +8.536551007974936 +47.34977594482501 +429.5881080849429 +19.830621519843824 +89.05612265251759 +0 +120 +absolute + + + +0.01 +smooth + +8.536552128894856 +47.34977651722997 +429.58847265591805 +19.7644274974682 +89.04443358723903 +0 +120 +absolute + + + +0.01 +smooth + +8.53655325146161 +47.34977709176105 +429.58881581841445 +19.69756947525866 +89.03264556900125 +0 +120 +absolute + + + +0.01 +smooth + +8.536554375616557 +47.34977766839259 +429.5891371842949 +19.630065577400693 +89.02076095146526 +0 +120 +absolute + + + +0.01 +smooth + +8.536555501301065 +47.349778247098946 +429.5894363654227 +19.561933928079767 +89.00878208829214 +0 +120 +absolute + + + +0.01 +smooth + +8.536556628456493 +47.34977882785445 +429.5897129736608 +19.493192651481376 +88.99671133314285 +0 +120 +absolute + + + +0.01 +smooth + +8.536557757024207 +47.349779410633445 +429.58996662087236 +19.42385987179099 +88.98455103967848 +0 +120 +absolute + + + +0.01 +smooth + +8.536558886945567 +47.3497799954103 +429.59019691892047 +19.353953713194088 +88.97230356156001 +0 +120 +absolute + + + +0.01 +smooth + +8.53656001816194 +47.34978058215934 +429.5904034796681 +19.28349229987615 +88.95997125244848 +0 +120 +absolute + + + +0.01 +smooth + +8.53656115061469 +47.34978117085492 +429.5905859149783 +19.212493756022663 +88.94755646600493 +0 +120 +absolute + + + +0.01 +smooth + +8.536562284245173 +47.34978176147138 +429.5907438367143 +19.1409762058191 +88.93506155589034 +0 +120 +absolute + + + +0.01 +smooth + +8.536563418994762 +47.34978235398306 +429.59087685673904 +19.068957773450947 +88.92248887576581 +0 +120 +absolute + + + +0.01 +smooth + +8.536564554804812 +47.34978294836431 +429.5909845869156 +18.996456583103672 +88.90984077929231 +0 +120 +absolute + + + +0.01 +smooth + +8.536565691616692 +47.34978354458948 +429.59106663910717 +18.92349075896277 +88.89711962013087 +0 +120 +absolute + + + +0.01 +smooth + +8.536566829371763 +47.34978414263291 +429.59112262517664 +18.850078425213706 +88.88432775194254 +0 +120 +absolute + + + +0.01 +smooth + +8.536567968011388 +47.34978474246896 +429.5911521569873 +18.77623770604197 +88.87146752838834 +0 +120 +absolute + + + +0.01 +smooth + +8.536569107598405 +47.3497853441487 +429.5911449511073 +18.701929478994753 +88.85853394529506 +0 +120 +absolute + + + +0.01 +smooth + +8.53657024919864 +47.34978594835618 +429.5910108788004 +18.62664160730421 +88.84546123784207 +0 +120 +absolute + + + +0.01 +smooth + +8.536571393029003 +47.34978655523766 +429.59073244085323 +18.550261310904737 +88.83223503618257 +0 +120 +absolute + + + +0.01 +smooth + +8.536572539033223 +47.34978716476671 +429.59031473140186 +18.472804480668024 +88.81885751484884 +0 +120 +absolute + + + +0.01 +smooth + +8.53657368715504 +47.349787776916905 +429.5897628445828 +18.394287007465817 +88.80533084837336 +0 +120 +absolute + + + +0.01 +smooth + +8.536574837338176 +47.34978839166178 +429.58908187453216 +18.314724782169794 +88.79165721128852 +0 +120 +absolute + + + +0.01 +smooth + +8.53657598952637 +47.3497890089749 +429.5882769153863 +18.234133695651668 +88.77783877812669 +0 +120 +absolute + + + +0.01 +smooth + +8.536577143663349 +47.34978962882981 +429.5873530612811 +18.152529638783147 +88.76387772342024 +0 +120 +absolute + + + +0.01 +smooth + +8.53657829969285 +47.3497902512001 +429.5863154063532 +18.06992850243595 +88.74977622170167 +0 +120 +absolute + + + +0.01 +smooth + +8.5365794575586 +47.349790876059295 +429.5851690447385 +17.986346177481785 +88.73553644750325 +0 +120 +absolute + + + +0.01 +smooth + +8.536580617204331 +47.349791503380956 +429.5839190705734 +17.90179855479235 +88.72116057535742 +0 +120 +absolute + + + +0.01 +smooth + +8.536581778573778 +47.34979213313863 +429.5825705779939 +17.816301525239354 +88.70665077979658 +0 +120 +absolute + + + +0.01 +smooth + +8.53658294161067 +47.349792765305914 +429.5811286611366 +17.72987097969452 +88.69200923535313 +0 +120 +absolute + + + +0.01 +smooth + +8.53658410625874 +47.349793399856345 +429.5795984141374 +17.642522809029554 +88.67723811655951 +0 +120 +absolute + + + +0.01 +smooth + +8.536585272461718 +47.349794036763456 +429.57798493113256 +17.55427290411614 +88.662339597948 +0 +120 +absolute + + + +0.01 +smooth + +8.536586440163338 +47.34979467600084 +429.57629330625844 +17.465137155826017 +88.64731585405107 +0 +120 +absolute + + + +0.01 +smooth + +8.536587609307325 +47.34979531754202 +429.57452863365114 +17.375131455030875 +88.63216905940111 +0 +120 +absolute + + + +0.01 +smooth + +8.536588779837423 +47.34979596136058 +429.572696007447 +17.284271692602434 +88.61690138853052 +0 +120 +absolute + + + +0.01 +smooth + +8.536589951697357 +47.34979660743008 +429.5708005217823 +17.192573759412404 +88.60151501597169 +0 +120 +absolute + + + +0.01 +smooth + +8.536591124830858 +47.34979725572406 +429.568847270793 +17.10005354633248 +88.586012116257 +0 +120 +absolute + + + +0.01 +smooth + +8.536592299181658 +47.34979790621608 +429.5668413486155 +17.006726944234384 +88.5703948639188 +0 +120 +absolute + + + +0.01 +smooth + +8.536593474693486 +47.3497985588797 +429.5647878493859 +16.91260984398981 +88.55466543348959 +0 +120 +absolute + + + +0.01 +smooth + +8.53659465131008 +47.34979921368847 +429.5626918672406 +16.817718136470486 +88.53882599950168 +0 +120 +absolute + + + +0.01 +smooth + +8.53659582897517 +47.34979987061597 +429.5605584963156 +16.722067712548107 +88.52287873648753 +0 +120 +absolute + + + +0.01 +smooth + +8.536597007632484 +47.34980052963572 +429.5583928307474 +16.62567446309438 +88.50682581897948 +0 +120 +absolute + + + +0.01 +smooth + +8.536598187225755 +47.349801190721294 +429.556199964672 +16.528554278981026 +88.49066942150993 +0 +120 +absolute + + + +0.01 +smooth + +8.536599367698717 +47.34980185384627 +429.55398499222576 +16.430723051079745 +88.47441171861131 +0 +120 +absolute + + + +0.01 +smooth + +8.5366005489951 +47.34980251898419 +429.5517530075448 +16.33219667026225 +88.45805488481598 +0 +120 +absolute + + + +0.01 +smooth + +8.536601731058637 +47.349803186108595 +429.5495091047653 +16.232991027400246 +88.44160109465633 +0 +120 +absolute + + + +0.01 +smooth + +8.536602913833057 +47.34980385519306 +429.54725837802357 +16.133122013365437 +88.4250525226648 +0 +120 +absolute + + + +0.01 +smooth + +8.536604097262096 +47.349804526211145 +429.5450059214559 +16.032605519029545 +88.40841134337376 +0 +120 +absolute + + + +0.01 +smooth + +8.53660528128948 +47.349805199136384 +429.5427568291984 +15.931457435264265 +88.39167973131556 +0 +120 +absolute + + + +0.01 +smooth + +8.536606465858945 +47.349805873942366 +429.54051619538734 +15.82969365294132 +88.37485986102268 +0 +120 +absolute + + + +0.01 +smooth + +8.536607650914224 +47.34980655060262 +429.538289114159 +15.727330062932408 +88.35795390702745 +0 +120 +absolute + + + +0.01 +smooth + +8.536608836399045 +47.34980722909072 +429.5360806796494 +15.624382556109232 +88.34096404386227 +0 +120 +absolute + + + +0.01 +smooth + +8.536610022257141 +47.34980790938022 +429.533895985995 +15.52086702334352 +88.32389244605955 +0 +120 +absolute + + + +0.01 +smooth + +8.536611208432245 +47.34980859144466 +429.53174012733183 +15.41679935550696 +88.3067412881517 +0 +120 +absolute + + + +0.01 +smooth + +8.536612394868085 +47.34980927525764 +429.5296181977962 +15.31219544347128 +88.2895127446711 +0 +120 +absolute + + + +0.01 +smooth + +8.53661358203803 +47.34980996114335 +429.5274935074238 +15.206833060278107 +88.27217786377179 +0 +120 +absolute + + + +0.01 +smooth + +8.536614770755042 +47.349810649649534 +429.5253010328396 +15.100337290066038 +88.25468777127911 +0 +120 +absolute + + + +0.01 +smooth + +8.536615960977361 +47.34981134075701 +429.5230420787972 +14.99271749686581 +88.23704385192964 +0 +120 +absolute + + + +0.01 +smooth + +8.536617152650695 +47.34981203443825 +429.52071893070035 +14.88398867798552 +88.21924822702127 +0 +120 +absolute + + + +0.01 +smooth + +8.536618345720749 +47.34981273066584 +429.5183338739536 +14.774165830733264 +88.20130301785194 +0 +120 +absolute + + + +0.01 +smooth + +8.53661954013323 +47.34981342941224 +429.515889193961 +14.663263952417159 +88.1832103457195 +0 +120 +absolute + + + +0.01 +smooth + +8.53662073583384 +47.34981413064993 +429.51338717612646 +14.551298040345282 +88.16497233192189 +0 +120 +absolute + + + +0.01 +smooth + +8.536621932768284 +47.349814834351456 +429.510830105854 +14.438283091825758 +88.14659109775694 +0 +120 +absolute + + + +0.01 +smooth + +8.53662313088227 +47.34981554048932 +429.5082202685479 +14.32423410416668 +88.12806876452258 +0 +120 +absolute + + + +0.01 +smooth + +8.536624330121507 +47.34981624903602 +429.50555994961235 +14.209166074676139 +88.10940745351675 +0 +120 +absolute + + + +0.01 +smooth + +8.536625530431696 +47.34981695996409 +429.5028514344515 +14.09309400066226 +88.09060928603732 +0 +120 +absolute + + + +0.01 +smooth + +8.536626731758544 +47.34981767324601 +429.5000970084691 +13.976032879433118 +88.07167638338213 +0 +120 +absolute + + + +0.01 +smooth + +8.536627934047752 +47.34981838885429 +429.4972989570694 +13.857997708296832 +88.05261086684912 +0 +120 +absolute + + + +0.01 +smooth + +8.53662913724504 +47.34981910676146 +429.4944595656568 +13.739003484561508 +88.03341485773625 +0 +120 +absolute + + + +0.01 +smooth + +8.5366303412961 +47.34981982694001 +429.49158111963516 +13.619065205535225 +88.01409047734133 +0 +120 +absolute + + + +0.01 +smooth + +8.536631546146642 +47.349820549362455 +429.4886659044085 +13.498197868526107 +87.99463984696226 +0 +120 +absolute + + + +0.01 +smooth + +8.53663275174237 +47.34982127400129 +429.4857162053811 +13.376416470842237 +87.97506508789698 +0 +120 +absolute + + + +0.01 +smooth + +8.536633958028995 +47.34982200082905 +429.48273430795706 +13.25373600979174 +87.95536832144336 +0 +120 +absolute + + + +0.01 +smooth + +8.536635164952218 +47.349822729818214 +429.4797224975405 +13.130171482682702 +87.93555166889931 +0 +120 +absolute + + + +0.01 +smooth + +8.536636372457746 +47.34982346094131 +429.47668305953533 +13.005737886823216 +87.9156172515627 +0 +120 +absolute + + + +0.01 +smooth + +8.536637580491286 +47.34982419417085 +429.4736182793459 +12.880450219521407 +87.89556719073147 +0 +120 +absolute + + + +0.01 +smooth + +8.536638788998541 +47.34982492947931 +429.4705304423761 +12.75432347808535 +87.87540360770348 +0 +120 +absolute + + + +0.01 +smooth + +8.536639997925219 +47.34982566683924 +429.46742183403023 +12.627372659823171 +87.85512862377664 +0 +120 +absolute + + + +0.01 +smooth + +8.536641207217025 +47.349826406223116 +429.46429473971233 +12.49961276204296 +87.83474436024883 +0 +120 +absolute + + + +0.01 +smooth + +8.536642416819667 +47.34982714760346 +429.46115144482644 +12.371058782052812 +87.81425293841801 +0 +120 +absolute + + + +0.01 +smooth + +8.536643626678845 +47.34982789095278 +429.4579942347767 +12.241725717160845 +87.79365647958198 +0 +120 +absolute + + + +0.01 +smooth + +8.53664483674027 +47.349828636243586 +429.4548253949674 +12.11162856467514 +87.77295710503873 +0 +120 +absolute + + + +0.01 +smooth + +8.536646046949647 +47.34982938344838 +429.4516472108024 +11.980782321903824 +87.75215693608607 +0 +120 +absolute + + + +0.01 +smooth + +8.536647257252682 +47.34983013253968 +429.44846196768583 +11.849201986154984 +87.73125809402197 +0 +120 +absolute + + + +0.01 +smooth + +8.536648467595075 +47.34983088348997 +429.44527195102194 +11.71690255473671 +87.71026270014427 +0 +120 +absolute + + + +0.01 +smooth + +8.53664967792254 +47.349831636271794 +429.44207944621473 +11.583899024957127 +87.68917287575091 +0 +120 +absolute + + + +0.01 +smooth + +8.536650888180777 +47.34983239085763 +429.43888673866843 +11.450206394124326 +87.66799074213978 +0 +120 +absolute + + + +0.01 +smooth + +8.536652098315496 +47.349833147220004 +429.4356961137869 +11.315839659546395 +87.64671842060874 +0 +120 +absolute + + + +0.01 +smooth + +8.536653308272399 +47.34983390533141 +429.43250985697455 +11.180813818531464 +87.62535803245574 +0 +120 +absolute + + + +0.01 +smooth + +8.536654517997194 +47.34983466516437 +429.4293302536352 +11.045143868387605 +87.60391169897864 +0 +120 +absolute + + + +0.01 +smooth + +8.536655727435585 +47.349835426691385 +429.4261595891732 +10.908844806422945 +87.58238154147533 +0 +120 +absolute + + + +0.01 +smooth + +8.536656936533278 +47.34983618988497 +429.4230001489925 +10.771931629945575 +87.56076968124374 +0 +120 +absolute + + + +0.01 +smooth + +8.53665814531076 +47.34983695476824 +429.41985162576424 +10.634387074226112 +87.53907399525907 +0 +120 +absolute + + + +0.01 +smooth + +8.536659354686186 +47.3498377219716 +429.41668228547843 +10.49580665013587 +87.51724143262133 +0 +120 +absolute + + + +0.01 +smooth + +8.536660564905455 +47.34983849166903 +429.4134830617176 +10.356076056990357 +87.49525714982603 +0 +120 +absolute + + + +0.01 +smooth + +8.536661775915443 +47.34983926383188 +429.41025518052544 +10.215210022267598 +87.47312328165832 +0 +120 +absolute + + + +0.01 +smooth + +8.53666298766302 +47.34984003843158 +429.40699986794544 +10.073223273445585 +87.45084196290331 +0 +120 +absolute + + + +0.01 +smooth + +8.536664200095068 +47.34984081543953 +429.40371835002145 +9.930130538002317 +87.42841532834625 +0 +120 +absolute + + + +0.01 +smooth + +8.536665413158454 +47.34984159482708 +429.40041185279694 +9.785946543415816 +87.4058455127722 +0 +120 +absolute + + + +0.01 +smooth + +8.536666626800058 +47.34984237656563 +429.39708160231555 +9.640686017164068 +87.38313465096635 +0 +120 +absolute + + + +0.01 +smooth + +8.536667840966754 +47.3498431606266 +429.39372882462095 +9.494363686725102 +87.36028487771392 +0 +120 +absolute + + + +0.01 +smooth + +8.536669055605415 +47.349843946981345 +429.39035474575695 +9.346994279576908 +87.33729832779997 +0 +120 +absolute + + + +0.01 +smooth + +8.536670270662917 +47.34984473560124 +429.38696059176675 +9.198592523197478 +87.31417713600965 +0 +120 +absolute + + + +0.01 +smooth + +8.536671486086133 +47.34984552645773 +429.38354758869446 +9.04917314506485 +87.29092343712819 +0 +120 +absolute + + + +0.01 +smooth + +8.53667270182194 +47.34984631952216 +429.3801169625832 +8.898750872656995 +87.26753936594069 +0 +120 +absolute + + + +0.01 +smooth + +8.536673917817211 +47.34984711476593 +429.3766699394772 +8.74734043345195 +87.24402705723233 +0 +120 +absolute + + + +0.01 +smooth + +8.536675134018823 +47.349847912160435 +429.3732077454196 +8.5949565549277 +87.22038864578822 +0 +120 +absolute + + + +0.01 +smooth + +8.53667635037365 +47.34984871167707 +429.3697316064543 +8.441613964562247 +87.19662626639358 +0 +120 +absolute + + + +0.01 +smooth + +8.536677566828565 +47.3498495132872 +429.36624274862487 +8.287327389833615 +87.1727420538335 +0 +120 +absolute + + + +0.01 +smooth + +8.536678783330442 +47.34985031696223 +429.3627423979749 +8.132111558219783 +87.14873814289317 +0 +120 +absolute + + + +0.01 +smooth + +8.536679999826156 +47.34985112267354 +429.35923178054793 +7.975981197198784 +87.1246166683577 +0 +120 +absolute + + + +0.01 +smooth + +8.536681216262584 +47.34985193039254 +429.3557121223878 +7.818951034248612 +87.10037976501229 +0 +120 +absolute + + + +0.01 +smooth + +8.536682432586598 +47.349852740090604 +429.352184649538 +7.661035796847254 +87.07602956764208 +0 +120 +absolute + + + +0.01 +smooth + +8.536683648745075 +47.349853551739116 +429.3486505880421 +7.502250212472745 +87.05156821103223 +0 +120 +absolute + + + +0.01 +smooth + +8.536684864684888 +47.349854365309476 +429.34511116394395 +7.342609008603079 +87.02699782996788 +0 +120 +absolute + + + +0.01 +smooth + +8.536686080352915 +47.34985518077307 +429.341567603287 +7.182126912716241 +87.00232055923418 +0 +120 +absolute + + + +0.01 +smooth + +8.536687295696026 +47.34985599810129 +429.33802113211493 +7.02081865229027 +86.9775385336163 +0 +120 +absolute + + + +0.01 +smooth + +8.536688510661097 +47.34985681726551 +429.3344729764715 +6.858698954803138 +86.95265388789937 +0 +120 +absolute + + + +0.01 +smooth + +8.536689725195004 +47.34985763823713 +429.3309243624001 +6.6957825477328825 +86.92766875686856 +0 +120 +absolute + + + +0.01 +smooth + +8.53669093924462 +47.34985846098755 +429.3273765159445 +6.532084158557493 +86.90258527530904 +0 +120 +absolute + + + +0.01 +smooth + +8.536692152756824 +47.34985928548814 +429.3238306631483 +6.367618514754959 +86.87740557800592 +0 +120 +absolute + + + +0.01 +smooth + +8.536693365678484 +47.3498601117103 +429.3202880300552 +6.2024003438033155 +86.85213179974437 +0 +120 +absolute + + + +0.01 +smooth + +8.53669457795648 +47.34986093962541 +429.31674984270865 +6.036444373180542 +86.82676607530958 +0 +120 +absolute + + + +0.01 +smooth + +8.536695789537685 +47.349861769204864 +429.31321732715264 +5.869765330364665 +86.80131053948665 +0 +120 +absolute + + + +0.01 +smooth + +8.53669700036897 +47.34986260042007 +429.3096917094304 +5.702377942833682 +86.77576732706076 +0 +120 +absolute + + + +0.01 +smooth + +8.536698210397219 +47.34986343324239 +429.30617421558566 +5.534296938065579 +86.75013857281708 +0 +120 +absolute + + + +0.01 +smooth + +8.536699419569295 +47.34986426764321 +429.3026660716623 +5.365537043538393 +86.72442641154072 +0 +120 +absolute + + + +0.01 +smooth + +8.536700627832081 +47.34986510359395 +429.29916850370364 +5.196112986730099 +86.69863297801686 +0 +120 +absolute + + + +0.01 +smooth + +8.53670183513245 +47.34986594106597 +429.29568273775357 +5.026039495118731 +86.67276040703067 +0 +120 +absolute + + + +0.01 +smooth + +8.536703041417274 +47.34986678003067 +429.2922099998554 +4.855331296182281 +86.64681083336725 +0 +120 +absolute + + + +0.01 +smooth + +8.536704247061222 +47.34986762074365 +429.28874328441543 +4.683830419547125 +86.62076357476934 +0 +120 +absolute + + + +0.01 +smooth + +8.536705452893374 +47.34986846376192 +429.2852666208836 +4.511195418183761 +86.59457373201988 +0 +120 +absolute + + + +0.01 +smooth + +8.536706658887166 +47.34986930907368 +429.28178031826803 +4.337430253200114 +86.56824206193807 +0 +120 +absolute + + + +0.01 +smooth + +8.536707864989289 +47.34987015664938 +429.2782851973526 +4.162549679502753 +86.5417707477311 +0 +120 +absolute + + + +0.01 +smooth + +8.536709071146435 +47.34987100645942 +429.2747820789205 +3.9865684519982056 +86.51516197260617 +0 +120 +absolute + + + +0.01 +smooth + +8.536710277305293 +47.34987185847425 +429.2712717837557 +3.8095013255929913 +86.4884179197704 +0 +120 +absolute + + + +0.01 +smooth + +8.53671148341256 +47.34987271266427 +429.2677551326418 +3.6313630551936846 +86.46154077243101 +0 +120 +absolute + + + +0.01 +smooth + +8.536712689414921 +47.34987356899992 +429.26423294636226 +3.4521683957068063 +86.43453271379512 +0 +120 +absolute + + + +0.01 +smooth + +8.536713895259071 +47.349874427451624 +429.26070604570066 +3.271932102038882 +86.40739592706997 +0 +120 +absolute + + + +0.01 +smooth + +8.536715100891701 +47.3498752879898 +429.2571752514407 +3.0906689290964815 +86.38013259546268 +0 +120 +absolute + + + +0.01 +smooth + +8.536716306259507 +47.34987615058489 +429.2536413843663 +2.908393631786113 +86.35274490218046 +0 +120 +absolute + + + +0.01 +smooth + +8.536717511309176 +47.34987701520732 +429.2501052652608 +2.7251209650143493 +86.32523503043052 +0 +120 +absolute + + + +0.01 +smooth + +8.536718715987401 +47.349877881827496 +429.24656771490766 +2.540865683687695 +86.29760516341996 +0 +120 +absolute + + + +0.01 +smooth + +8.536719920240872 +47.34987875041585 +429.2430295540907 +2.3556425427127397 +86.26985748435595 +0 +120 +absolute + + + +0.01 +smooth + +8.536721124016282 +47.34987962094282 +429.23949160359376 +2.169466296995958 +86.24199417644573 +0 +120 +absolute + + + +0.01 +smooth + +8.536722327260323 +47.349880493378826 +429.2359546842 +1.9823517014439214 +86.21401742289643 +0 +120 +absolute + + + +0.01 +smooth + +8.536723529919687 +47.349881367694294 +429.2324196166934 +1.794313510963169 +86.18592940691526 +0 +120 +absolute + + + +0.01 +smooth + +8.536724731941064 +47.34988224385965 +429.22888722185735 +1.605366480460274 +86.15773231170934 +0 +120 +absolute + + + +0.01 +smooth + +8.53672593327115 +47.349883121845316 +429.2253583204758 +1.4155253648417094 +86.12942832048591 +0 +120 +absolute + + + +0.01 +smooth + +8.536727133856633 +47.34988400162174 +429.22183373333206 +1.2248049190140482 +86.10101961645208 +0 +120 +absolute + + + +0.01 +smooth + +8.536728333644204 +47.34988488315932 +429.2183142812099 +1.0332198978838636 +86.0725083828151 +0 +120 +absolute + + + +0.01 +smooth + +8.536729532580559 +47.349885766428486 +429.2148007848929 +0.8407850563576262 +86.04389680278209 +0 +120 +absolute + + + +0.01 +smooth + +8.536730730612383 +47.34988665139968 +429.2112940651647 +0.6475151493419105 +86.01518705956022 +0 +120 +absolute + + + +0.01 +smooth + +8.536731927686375 +47.34988753804331 +429.2077949428089 +0.45342493174329035 +85.98638133635669 +0 +120 +absolute + + + +0.01 +smooth + +8.536733123749222 +47.34988842632982 +429.2043042386091 +0.258529158468235 +85.95748181637867 +0 +120 +absolute + + + +0.01 +smooth + +8.536734318747618 +47.34988931622962 +429.200822773349 +0.06284258442331991 +85.92849068283331 +0 +120 +absolute + + + +0.01 +smooth + +8.536735512628253 +47.349890207713145 +429.1973513678122 +-0.13362003548488044 +85.89941011892785 +0 +120 +absolute + + + +0.01 +smooth + +8.536736705337818 +47.349891100750824 +429.19389084278237 +-0.33084394634989756 +85.87024230786939 +0 +120 +absolute + + + +0.01 +smooth + +8.536737896823007 +47.34989199531307 +429.19044201904296 +-0.5288143932651566 +85.84098943286514 +0 +120 +absolute + + + +0.01 +smooth + +8.536739087030512 +47.34989289137033 +429.18700571737776 +-0.7275166213241182 +85.81165367712227 +0 +120 +absolute + + + +0.01 +smooth + +8.536740275907023 +47.349893788893 +429.1835827585703 +-0.926935875620208 +85.78223722384797 +0 +120 +absolute + + + +0.01 +smooth + +8.536741463399233 +47.34989468785154 +429.18017396340434 +-1.1270574012469559 +85.75274225624938 +0 +120 +absolute + + + +0.01 +smooth + +8.536742649453831 +47.34989558821634 +429.17678015266335 +-1.3278664432977882 +85.72317095753371 +0 +120 +absolute + + + +0.01 +smooth + +8.536743834017514 +47.34989648995787 +429.1734021471311 +-1.5293482468661292 +85.69352551090813 +0 +120 +absolute + + + +0.01 +smooth + +8.536745017036967 +47.349897393046525 +429.1700407675911 +-1.7314880570455113 +85.66380809957977 +0 +120 +absolute + + + +0.01 +smooth + +8.536746198458887 +47.34989829745273 +429.16669683482695 +-1.934271118929359 +85.63402090675585 +0 +120 +absolute + + + +0.01 +smooth + +8.536747378229963 +47.34989920314692 +429.1633711696224 +-2.1376826776110973 +85.60416611564357 +0 +120 +absolute + + + +0.01 +smooth + +8.536748556346542 +47.34990011013017 +429.1600639151656 +-2.341725901924039 +85.57424352173689 +0 +120 +absolute + + + +0.01 +smooth + +8.536749733726044 +47.34990101897227 +429.1567625852955 +-2.5467366358858197 +85.54420861518904 +0 +120 +absolute + + + +0.01 +smooth + +8.53675091068869 +47.34990192987487 +429.15346270119704 +-2.752835556320425 +85.51404557858635 +0 +120 +absolute + + + +0.01 +smooth + +8.536752087179007 +47.3499028428078 +429.150164891112 +-2.960007780294742 +85.48375665715437 +0 +120 +absolute + + + +0.01 +smooth + +8.536753263141524 +47.34990375774085 +429.1468697832824 +-3.1682384248757702 +85.45334409611873 +0 +120 +absolute + + + +0.01 +smooth + +8.536754438520767 +47.34990467464386 +429.1435780059503 +-3.3775126071303965 +85.42281014070498 +0 +120 +absolute + + + +0.01 +smooth + +8.536755613261263 +47.349905593486625 +429.14029018735727 +-3.587815444125507 +85.39215703613876 +0 +120 +absolute + + + +0.01 +smooth + +8.53675678730755 +47.349906514239 +429.1370069557455 +-3.799132052928103 +85.3613870276456 +0 +120 +absolute + + + +0.01 +smooth + +8.536757960604145 +47.34990743687079 +429.1337289393568 +-4.01144755060507 +85.33050236045116 +0 +120 +absolute + + + +0.01 +smooth + +8.536759133095588 +47.34990836135181 +429.1304567664333 +-4.2247470542232985 +85.299505279781 +0 +120 +absolute + + + +0.01 +smooth + +8.536760304726398 +47.349909287651876 +429.12719106521644 +-4.439015680849781 +85.2683980308607 +0 +120 +absolute + + + +0.01 +smooth + +8.536761475441109 +47.34991021574082 +429.12393246394856 +-4.654238547551413 +85.23718285891584 +0 +120 +absolute + + + +0.01 +smooth + +8.536762645184249 +47.34991114558844 +429.1206815908716 +-4.870400771395076 +85.20586200917205 +0 +120 +absolute + + + +0.01 +smooth + +8.536763813900345 +47.34991207716459 +429.11743907422715 +-5.087487469447771 +85.1744377268549 +0 +120 +absolute + + + +0.01 +smooth + +8.536764981533924 +47.34991301043904 +429.1142055422574 +-5.3054837587763855 +85.14291225718998 +0 +120 +absolute + + + +0.01 +smooth + +8.536766148029521 +47.34991394538165 +429.11098162320405 +-5.524374756447844 +85.11128784540287 +0 +120 +absolute + + + +0.01 +smooth + +8.536767313331657 +47.34991488196223 +429.1077679453092 +-5.74414557952903 +85.0795667367192 +0 +120 +absolute + + + +0.01 +smooth + +8.536768477384868 +47.349915820150585 +429.10456513681476 +-5.96478134508695 +85.0477511763645 +0 +120 +absolute + + + +0.01 +smooth + +8.536769640133679 +47.34991675991655 +429.10137382596264 +-6.186267170188488 +85.01584340956444 +0 +120 +absolute + + + +0.01 +smooth + +8.536770801522618 +47.34991770122995 +429.0981946409946 +-6.408588171900527 +84.98384568154454 +0 +120 +absolute + + + +0.01 +smooth + +8.536771961496214 +47.34991864406058 +429.09502821015275 +-6.631729467290072 +84.95176023753042 +0 +120 +absolute + + + +0.01 +smooth + +8.536773119998998 +47.349919588378285 +429.09187516167884 +-6.85567617342401 +84.91958932274767 +0 +120 +absolute + + + +0.01 +smooth + +8.536774276975494 +47.34992053415286 +429.088736123815 +-7.080413407369221 +84.88733518242188 +0 +120 +absolute + + + +0.01 +smooth + +8.536775432370236 +47.349921481354144 +429.0856117248029 +-7.3059262861927134 +84.85500006177864 +0 +120 +absolute + + + +0.01 +smooth + +8.53677658612775 +47.34992242995195 +429.08250259288474 +-7.532199926961372 +84.82258620604355 +0 +120 +absolute + + + +0.01 +smooth + +8.536777738192566 +47.34992337991609 +429.0794093563021 +-7.759219446742118 +84.79009586044218 +0 +120 +absolute + + + +0.01 +smooth + +8.536778888509208 +47.3499243312164 +429.0763326432972 +-7.98696996260184 +84.75753127020015 +0 +120 +absolute + + + +0.01 +smooth + +8.536780037022211 +47.349925283822685 +429.0732730821118 +-8.215436591607538 +84.72489468054302 +0 +120 +absolute + + + +0.01 +smooth + +8.5367811836761 +47.349926237704764 +429.07023130098787 +-8.4446044508261 +84.6921883366964 +0 +120 +absolute + + + +0.01 +smooth + +8.536782328415406 +47.34992719283245 +429.0672079281673 +-8.67445865732441 +84.65941448388588 +0 +120 +absolute + + + +0.01 +smooth + +8.536783471184652 +47.3499281491756 +429.064203591892 +-8.904984328169473 +84.62657536733704 +0 +120 +absolute + + + +0.01 +smooth + +8.536784611928375 +47.34992910670398 +429.0612189204039 +-9.13616658042817 +84.5936732322755 +0 +120 +absolute + + + +0.01 +smooth + +8.536785750591097 +47.34993006538744 +429.0582545419451 +-9.36799053116739 +84.56071032392681 +0 +120 +absolute + + + +0.01 +smooth + +8.536786887117351 +47.34993102519582 +429.0553110847571 +-9.600441297454136 +84.52768888751659 +0 +120 +absolute + + + +0.01 +smooth + +8.536788021451663 +47.34993198609889 +429.05238917708215 +-9.833503996355295 +84.49461116827042 +0 +120 +absolute + + + +0.01 +smooth + +8.53678915353856 +47.349932948066495 +429.04948944716205 +-10.067163744937787 +84.46147941141389 +0 +120 +absolute + + + +0.01 +smooth + +8.536790283322578 +47.349933911068455 +429.04661252323876 +-10.301405660268495 +84.42829586217259 +0 +120 +absolute + + + +0.01 +smooth + +8.536791410748238 +47.34993487507459 +429.04375903355424 +-10.53621485941443 +84.39506276577212 +0 +120 +absolute + + + +0.01 +smooth + +8.536792536174737 +47.34993584027814 +429.0409248970852 +-10.771703130237688 +84.3617652089665 +0 +120 +absolute + + + +0.01 +smooth + +8.536793660616828 +47.349936807226904 +429.03809851445516 +-11.008183212310035 +84.32836108202777 +0 +120 +absolute + + + +0.01 +smooth + +8.536794784069103 +47.34993777592007 +429.03527980081134 +-11.24565688064202 +84.29485042085604 +0 +120 +absolute + + + +0.01 +smooth + +8.536795906471252 +47.34993874632734 +429.03246929292965 +-11.484109159284447 +84.2612355309547 +0 +120 +absolute + + + +0.01 +smooth + +8.536797027762974 +47.349939718418376 +429.02966752758635 +-11.72352507228811 +84.22751871782718 +0 +120 +absolute + + + +0.01 +smooth + +8.536798147883962 +47.34994069216288 +429.0268750415572 +-11.963889643703922 +84.19370228697677 +0 +120 +absolute + + + +0.01 +smooth + +8.536799266773912 +47.3499416675305 +429.0240923716184 +-12.205187897582686 +84.15978854390691 +0 +120 +absolute + + + +0.01 +smooth + +8.536800384372524 +47.349942644490945 +429.02132005454587 +-12.447404857975192 +84.12577979412097 +0 +120 +absolute + + + +0.01 +smooth + +8.536801500619488 +47.34994362301391 +429.01855862711557 +-12.69052554893237 +84.09167834312228 +0 +120 +absolute + + + +0.01 +smooth + +8.536802615454507 +47.349944603069034 +429.0158086261035 +-12.934534994505004 +84.05748649641428 +0 +120 +absolute + + + +0.01 +smooth + +8.53680372881727 +47.349945584626006 +429.01307058828576 +-13.179418218743939 +84.02320655950032 +0 +120 +absolute + + + +0.01 +smooth + +8.53680484064748 +47.34994656765453 +429.0103450504384 +-13.425160245699967 +83.98884083788377 +0 +120 +absolute + + + +0.01 +smooth + +8.536805950884828 +47.34994755212426 +429.0076325493371 +-13.671746099424011 +83.954391637068 +0 +120 +absolute + + + +0.01 +smooth + +8.53680705946901 +47.349948538004895 +429.00493362175825 +-13.919160803966866 +83.91986126255641 +0 +120 +absolute + + + +0.01 +smooth + +8.536808166339725 +47.34994952526611 +429.00224880447774 +-14.167389383379327 +83.88525201985237 +0 +120 +absolute + + + +0.01 +smooth + +8.536809271436665 +47.34995051387759 +428.9995786342715 +-14.416416861712314 +83.85056621445925 +0 +120 +absolute + + + +0.01 +smooth + +8.536810374699527 +47.349951503809 +428.99692364791554 +-14.666228263016627 +83.81580615188042 +0 +120 +absolute + + + +0.01 +smooth + +8.536811476068014 +47.34995249503003 +428.9942843821859 +-14.916808611343058 +83.78097413761928 +0 +120 +absolute + + + +0.01 +smooth + +8.53681257548181 +47.34995348751036 +428.99166137385873 +-15.168142930742523 +83.74607247717917 +0 +120 +absolute + + + +0.01 +smooth + +8.53681367288062 +47.349954481219676 +428.9890551597098 +-15.420216245265827 +83.7111034760635 +0 +120 +absolute + + + +0.01 +smooth + +8.536814768204135 +47.349955476127654 +428.9864662765151 +-15.673013578963804 +83.67606943977563 +0 +120 +absolute + + + +0.01 +smooth + +8.536815861392054 +47.34995647220397 +428.98389526105086 +-15.92651995588724 +83.64097267381896 +0 +120 +absolute + + + +0.01 +smooth + +8.53681695238407 +47.34995746941831 +428.981342650093 +-16.180720400087075 +83.60581548369683 +0 +120 +absolute + + + +0.01 +smooth + +8.536818041119883 +47.34995846774035 +428.9788089804175 +-16.43559993561409 +83.57060017491264 +0 +120 +absolute + + + +0.01 +smooth + +8.536819127539188 +47.34995946713976 +428.9762947888003 +-16.69114358651908 +83.53532905296976 +0 +120 +absolute + + + +0.01 +smooth + +8.536820211581677 +47.34996046758624 +428.9738006120175 +-16.947336376852974 +83.50000442337158 +0 +120 +absolute + + + +0.01 +smooth + +8.53682129318705 +47.349961469049475 +428.97132698684516 +-17.204163330666567 +83.46462859162145 +0 +120 +absolute + + + +0.01 +smooth + +8.536822372295001 +47.349962471499126 +428.96887445005905 +-17.461609472010643 +83.4292038632228 +0 +120 +absolute + + + +0.01 +smooth + +8.536823448845226 +47.34996347490488 +428.9664435384355 +-17.719659824936137 +83.39373254367891 +0 +120 +absolute + + + +0.01 +smooth + +8.536824522777422 +47.34996447923642 +428.96403478875027 +-17.978299413493836 +83.35821693849324 +0 +120 +absolute + + + +0.01 +smooth + +8.536825594031288 +47.349965484463425 +428.9616487377794 +-18.23751326173454 +83.32265935316916 +0 +120 +absolute + + + +0.01 +smooth + +8.536826662546513 +47.34996649055556 +428.95928592229905 +-18.49728639370917 +83.28706209321004 +0 +120 +absolute + + + +0.01 +smooth + +8.536827728262796 +47.34996749748253 +428.956946879085 +-18.757603833468515 +83.2514274641192 +0 +120 +absolute + + + +0.01 +smooth + +8.536828791119834 +47.34996850521401 +428.95463214491343 +-19.01845060506342 +83.21575777140008 +0 +120 +absolute + + + +0.01 +smooth + +8.536829851057325 +47.34996951371967 +428.9523422565603 +-19.279811732544676 +83.18005532055605 +0 +120 +absolute + + + +0.01 +smooth + +8.536830908014961 +47.3499705229692 +428.9500777508016 +-19.541672239963212 +83.14432241709046 +0 +120 +absolute + + + +0.01 +smooth + +8.536831961932439 +47.34997153293227 +428.9478391644133 +-19.80401715136981 +83.1085613665067 +0 +120 +absolute + + + +0.01 +smooth + +8.536833012785484 +47.34997254359449 +428.94562666831865 +-20.066840283684083 +83.07277324652166 +0 +120 +absolute + + + +0.01 +smooth + +8.536834061700755 +47.34997355545122 +428.94342872045394 +-20.330416834350178 +83.03691985727112 +0 +120 +absolute + + + +0.01 +smooth + +8.536835109186969 +47.349974568727205 +428.9412399827515 +-20.594872545785734 +83.00098390280748 +0 +120 +absolute + + + +0.01 +smooth + +8.536836155175482 +47.34997558339249 +428.9390609682592 +-20.860192478383826 +82.96496773691791 +0 +120 +absolute + + + +0.01 +smooth + +8.536837199597656 +47.34997659941704 +428.9368921900246 +-21.126361692537657 +82.92887371338959 +0 +120 +absolute + + + +0.01 +smooth + +8.536838242384851 +47.349977616770865 +428.9347341610951 +-21.393365248640293 +82.89270418600972 +0 +120 +absolute + + + +0.01 +smooth + +8.536839283468423 +47.349978635423966 +428.9325873945183 +-21.661188207084834 +82.85646150856545 +0 +120 +absolute + + + +0.01 +smooth + +8.536840322779733 +47.34997965534635 +428.93045240334203 +-21.929815628264357 +82.82014803484402 +0 +120 +absolute + + + +0.01 +smooth + +8.536841360250143 +47.349980676508004 +428.9283297006136 +-22.199232572572054 +82.78376611863257 +0 +120 +absolute + + + +0.01 +smooth + +8.536842395811012 +47.349981698878935 +428.92621979938076 +-22.469424100400992 +82.74731811371832 +0 +120 +absolute + + + +0.01 +smooth + +8.536843429393693 +47.349982722429125 +428.92412321269086 +-22.740375272144227 +82.71080637388835 +0 +120 +absolute + + + +0.01 +smooth + +8.536844460929554 +47.34998374712859 +428.92204045359165 +-23.012071148194973 +82.67423325292998 +0 +120 +absolute + + + +0.01 +smooth + +8.53684549034995 +47.34998477294735 +428.91997203513074 +-23.28449678894629 +82.63760110463032 +0 +120 +absolute + + + +0.01 +smooth + +8.536846517586245 +47.34998579985539 +428.91791847035563 +-23.55763725479124 +82.60091228277658 +0 +120 +absolute + + + +0.01 +smooth + +8.536847542569793 +47.349986827822676 +428.91588027231387 +-23.831477606123027 +82.5641691411559 +0 +120 +absolute + + + +0.01 +smooth + +8.536848565231951 +47.34998785681923 +428.9138579540532 +-24.106002903334705 +82.52737403355549 +0 +120 +absolute + + + +0.01 +smooth + +8.53684958550409 +47.349988886815076 +428.9118520286209 +-24.38119820681935 +82.49052931376255 +0 +120 +absolute + + + +0.01 +smooth + +8.536850603317557 +47.34998991778018 +428.90986300906474 +-24.657048576970155 +82.45363733556422 +0 +120 +absolute + + + +0.01 +smooth + +8.536851618603716 +47.34999094968454 +428.90789140843225 +-24.933539074180185 +82.41670045274773 +0 +120 +absolute + + + +0.01 +smooth + +8.536852631293927 +47.349991982498175 +428.90593773977093 +-25.210654758842548 +82.3797210191002 +0 +120 +absolute + + + +0.01 +smooth + +8.536853641319551 +47.34999301619108 +428.90400251612857 +-25.488380691350315 +82.3427013884089 +0 +120 +absolute + + + +0.01 +smooth + +8.536854648611945 +47.349994050733244 +428.9020862505526 +-25.766701932096687 +82.30564391446093 +0 +120 +absolute + + + +0.01 +smooth + +8.53685565310247 +47.34999508609469 +428.9001894560907 +-26.045603541474726 +82.26855095104351 +0 +120 +absolute + + + +0.01 +smooth + +8.536856654722484 +47.349996122245386 +428.8983126457901 +-26.325070579877483 +82.23142485194384 +0 +120 +absolute + + + +0.01 +smooth + +8.536857653403349 +47.34999715915535 +428.8964563326989 +-26.605088107698176 +82.19426797094907 +0 +120 +absolute + + + +0.01 +smooth + +8.536858649076418 +47.34999819679457 +428.8946210298643 +-26.885641185329867 +82.1570826618464 +0 +120 +absolute + + + +0.01 +smooth + +8.53685964167306 +47.34999923513307 +428.892807250334 +-27.166714873165603 +82.11987127842299 +0 +120 +absolute + + + +0.01 +smooth + +8.536860631124627 +47.35000027414082 +428.89101550715554 +-27.448294231598613 +82.08263617446607 +0 +120 +absolute + + + +0.01 +smooth + +8.536861617362481 +47.350001313787835 +428.8892463133766 +-27.730364321021938 +82.04537970376279 +0 +120 +absolute + + + +0.01 +smooth + +8.536862600317981 +47.35000235404411 +428.88750018204456 +-28.012910201828696 +82.00810422010032 +0 +120 +absolute + + + +0.01 +smooth + +8.536863579922489 +47.350003394879636 +428.8857776262072 +-28.29591693441195 +81.97081207726588 +0 +120 +absolute + + + +0.01 +smooth + +8.53686455610736 +47.35000443626443 +428.88407915891196 +-28.5793695791649 +81.9335056290466 +0 +120 +absolute + + + +0.01 +smooth + +8.536865528803958 +47.350005478168484 +428.88240529320643 +-28.863253196480613 +81.89618722922972 +0 +120 +absolute + + + +0.01 +smooth + +8.536866497943638 +47.35000652056179 +428.8807565421383 +-29.14755284675215 +81.8588592316024 +0 +120 +absolute + + + +0.01 +smooth + +8.536867463457764 +47.35000756341435 +428.879133418755 +-29.43225359037271 +81.8215239899518 +0 +120 +absolute + + + +0.01 +smooth + +8.53686842527769 +47.35000860669618 +428.87753643610415 +-29.717340487735363 +81.78418385806512 +0 +120 +absolute + + + +0.01 +smooth + +8.53686938333478 +47.35000965037726 +428.87596610723335 +-30.002798599233166 +81.74684118972958 +0 +120 +absolute + + + +0.01 +smooth + +8.536870337560392 +47.350010694427596 +428.8744229451902 +-30.288612985259327 +81.7094983387323 +0 +120 +absolute + + + +0.01 +smooth + +8.536871288376854 +47.350011738986275 +428.87290281394144 +-30.574859726750336 +81.67214432602535 +0 +120 +absolute + + + +0.01 +smooth + +8.536872237305118 +47.35001278457314 +428.87139114213943 +-30.861819806272504 +81.6347381878468 +0 +120 +absolute + + + +0.01 +smooth + +8.536873184386407 +47.35001383120112 +428.8698873338082 +-31.149501262817637 +81.59727897480484 +0 +120 +absolute + + + +0.01 +smooth + +8.536874129538957 +47.35001487884087 +428.86839195624697 +-31.43788938445814 +81.55976907128294 +0 +120 +absolute + + + +0.01 +smooth + +8.536875072681006 +47.35001592746303 +428.8669055767551 +-31.726969459266268 +81.5222108616648 +0 +120 +absolute + + + +0.01 +smooth + +8.536876013730796 +47.35001697703828 +428.86542876263144 +-32.016726775314254 +81.48460673033394 +0 +120 +absolute + + + +0.01 +smooth + +8.536876952606569 +47.35001802753726 +428.86396208117566 +-32.30714662067452 +81.44695906167392 +0 +120 +absolute + + + +0.01 +smooth + +8.536877889226558 +47.350019078930664 +428.8625060996869 +-32.598214283419324 +81.4092702400684 +0 +120 +absolute + + + +0.01 +smooth + +8.536878823509008 +47.350020131189105 +428.86106138546415 +-32.889915051620875 +81.37154264990087 +0 +120 +absolute + + + +0.01 +smooth + +8.536879755372155 +47.35002118428325 +428.85962850580654 +-33.182234213351606 +81.33377867555495 +0 +120 +absolute + + + +0.01 +smooth + +8.536880684734239 +47.35002223818376 +428.8582080280136 +-33.475157056683756 +81.29598070141418 +0 +120 +absolute + + + +0.01 +smooth + +8.536881611513497 +47.35002329286129 +428.85680051938414 +-33.76866886968956 +81.25815111186216 +0 +120 +absolute + + + +0.01 +smooth + +8.536882535628168 +47.35002434828651 +428.8554065472177 +-34.06275494044144 +81.22029229128246 +0 +120 +absolute + + + +0.01 +smooth + +8.536883456996497 +47.350025404430056 +428.85402667881334 +-34.35740055701164 +81.18240662405869 +0 +120 +absolute + + + +0.01 +smooth + +8.536884375536719 +47.35002646126261 +428.85266148147025 +-34.65259100747245 +81.14449649457437 +0 +120 +absolute + + + +0.01 +smooth + +8.536885291167069 +47.3500275187548 +428.8513115224876 +-34.94831157989613 +81.10656428721312 +0 +120 +absolute + + + +0.01 +smooth + +8.536886203805794 +47.35002857687732 +428.8499773691647 +-35.24454756235508 +81.0686123863585 +0 +120 +absolute + + + +0.01 +smooth + +8.53688711337113 +47.350029635600784 +428.84865958880084 +-35.54128424292154 +81.03064317639408 +0 +120 +absolute + + + +0.01 +smooth + +8.536888019781316 +47.350030694895885 +428.847358748695 +-35.83850690966777 +80.99265904170348 +0 +120 +absolute + + + +0.01 +smooth + +8.536888922954589 +47.35003175473328 +428.84607541614645 +-36.136200850666164 +80.95466236667019 +0 +120 +absolute + + + +0.01 +smooth + +8.536889822809192 +47.350032815083594 +428.84481015845444 +-36.43435135398897 +80.91665553567786 +0 +120 +absolute + + + +0.01 +smooth + +8.536890719263361 +47.350033875917504 +428.8435635429181 +-36.73294370770844 +80.87864093311005 +0 +120 +absolute + + + +0.01 +smooth + +8.536891612235337 +47.35003493720567 +428.8423361368367 +-37.03196319989697 +80.84062094335033 +0 +120 +absolute + + + +0.01 +smooth + +8.536892501643358 +47.35003599891874 +428.84112850750944 +-37.331395118626816 +80.80259795078226 +0 +120 +absolute + + + +0.01 +smooth + +8.536893387405662 +47.35003706102738 +428.83994122223544 +-37.63122475197028 +80.76457433978943 +0 +120 +absolute + + + +0.01 +smooth + +8.536894269440493 +47.35003812350224 +428.838774848314 +-37.931437387999594 +80.72655249475544 +0 +120 +absolute + + + +0.01 +smooth + +8.536895147666087 +47.35003918631398 +428.83762995304426 +-38.23201831478717 +80.68853480006383 +0 +120 +absolute + + + +0.01 +smooth + +8.53689602200068 +47.35004024943326 +428.83650710372547 +-38.53295282040526 +80.6505236400982 +0 +120 +absolute + + + +0.01 +smooth + +8.536896892362517 +47.35004131283073 +428.83540686765684 +-38.8342261929261 +80.61252139924213 +0 +120 +absolute + + + +0.01 +smooth + +8.536897758669834 +47.35004237647706 +428.8343298121374 +-39.13582372042211 +80.57453046187916 +0 +120 +absolute + + + +0.01 +smooth + +8.53689862084087 +47.350043440342894 +428.8332765044666 +-39.43773069096554 +80.5365532123929 +0 +120 +absolute + + + +0.01 +smooth + +8.536899478793865 +47.350044504398895 +428.83224751194354 +-39.7399323926286 +80.49859203516695 +0 +120 +absolute + + + +0.01 +smooth + +8.536900332447058 +47.35004556861571 +428.8312434018674 +-40.04241411348374 +80.46064931458483 +0 +120 +absolute + + + +0.01 +smooth + +8.536901181718687 +47.35004663296401 +428.8302647415374 +-40.34516114160318 +80.42272743503013 +0 +120 +absolute + + + +0.01 +smooth + +8.536902026526993 +47.35004769741445 +428.8293120982528 +-40.64815876505918 +80.38482878088645 +0 +120 +absolute + + + +0.01 +smooth + +8.536902866790214 +47.350048761937686 +428.82838603931265 +-40.95139227192413 +80.34695573653734 +0 +120 +absolute + + + +0.01 +smooth + +8.536903702426592 +47.35004982650437 +428.8274871320163 +-41.254846950270284 +80.3091106863664 +0 +120 +absolute + + + +0.01 +smooth + +8.536904533379666 +47.350050891091634 +428.8266156979397 +-41.55851147419672 +80.27129548314471 +0 +120 +absolute + + + +0.01 +smooth + +8.536905361315476 +47.35005195611876 +428.825755345218 +-41.862605711938095 +80.2334756994442 +0 +120 +absolute + + + +0.01 +smooth + +8.536906187203423 +47.35005302183073 +428.8248964929737 +-42.16725841089833 +80.19563126863865 +0 +120 +absolute + + + +0.01 +smooth + +8.536907010941302 +47.35005408819904 +428.82403997556855 +-42.47245531604785 +80.15776458610618 +0 +120 +absolute + + + +0.01 +smooth + +8.536907832426923 +47.350055155195115 +428.8231866273639 +-42.778182172357035 +80.1198780472248 +0 +120 +absolute + + + +0.01 +smooth + +8.536908651558091 +47.35005622279048 +428.82233728272183 +-43.084424724796484 +80.08197404737263 +0 +120 +absolute + + + +0.01 +smooth + +8.536909468232613 +47.350057290956585 +428.8214927760041 +-43.39116871833661 +80.04405498192769 +0 +120 +absolute + + + +0.01 +smooth + +8.536910282348297 +47.35005835966493 +428.82065394157223 +-43.69839989794784 +80.00612324626809 +0 +120 +absolute + + + +0.01 +smooth + +8.536911093802946 +47.35005942888696 +428.819821613788 +-44.00610400860072 +79.96818123577184 +0 +120 +absolute + + + +0.01 +smooth + +8.536911902494365 +47.35006049859418 +428.81899662701323 +-44.31426679526571 +79.93023134581703 +0 +120 +absolute + + + +0.01 +smooth + +8.536912708320363 +47.35006156875804 +428.8181798156097 +-44.62287400291325 +79.89227597178173 +0 +120 +absolute + + + +0.01 +smooth + +8.536913511178746 +47.35006263935006 +428.81737201393906 +-44.931911376513774 +79.85431750904404 +0 +120 +absolute + + + +0.01 +smooth + +8.536914310967319 +47.35006371034167 +428.81657405636304 +-45.24136466103785 +79.81635835298196 +0 +120 +absolute + + + +0.01 +smooth + +8.53691510758389 +47.35006478170437 +428.8157867772434 +-45.55121960145589 +79.7784008989736 +0 +120 +absolute + + + +0.01 +smooth + +8.536915900926264 +47.35006585340963 +428.8150110109417 +-45.86146194273831 +79.74044754239702 +0 +120 +absolute + + + +0.01 +smooth + +8.536916690892244 +47.35006692542892 +428.81424759182005 +-46.1720774298557 +79.70250067863026 +0 +120 +absolute + + + +0.01 +smooth + +8.536917477379642 +47.35006799773373 +428.81349735423987 +-46.48305180777848 +79.66456270305139 +0 +120 +absolute + + + +0.01 +smooth + +8.536918260286262 +47.35006907029555 +428.8127611325629 +-46.79437082147704 +79.6266360110385 +0 +120 +absolute + + + +0.01 +smooth + +8.53691903950991 +47.35007014308581 +428.81203976115114 +-47.10602021592199 +79.58872299796963 +0 +120 +absolute + + + +0.01 +smooth + +8.536919814948389 +47.350071216076024 +428.81133407436613 +-47.41798573608372 +79.55082605922287 +0 +120 +absolute + + + +0.01 +smooth + +8.536920586499509 +47.350072289237666 +428.81064490656956 +-47.73025312693272 +79.51294759017627 +0 +120 +absolute + + + +0.01 +smooth + +8.536921354061075 +47.350073362542204 +428.8099730921233 +-48.0428081334394 +79.47508998620789 +0 +120 +absolute + + + +0.01 +smooth + +8.536922117530894 +47.35007443596112 +428.80931946538897 +-48.355636500574334 +79.43725564269582 +0 +120 +absolute + + + +0.01 +smooth + +8.53692287680677 +47.35007550946588 +428.80868486072836 +-48.66872397330795 +79.39944695501809 +0 +120 +absolute + + + +0.01 +smooth + +8.536923631786511 +47.35007658302796 +428.80807011250323 +-48.98205629661065 +79.36166631855279 +0 +120 +absolute + + + +0.01 +smooth + +8.536924382367921 +47.350077656618865 +428.80747605507526 +-49.29561921545301 +79.323916128678 +0 +120 +absolute + + + +0.01 +smooth + +8.536925128448813 +47.350078730210036 +428.80690352280624 +-49.60939847480547 +79.28619878077174 +0 +120 +absolute + + + +0.01 +smooth + +8.536925869926984 +47.35007980377297 +428.80635335005786 +-49.92337981963841 +79.2485166702121 +0 +120 +absolute + + + +0.01 +smooth + +8.536926606700245 +47.35008087727914 +428.80582637119187 +-50.23754899492245 +79.21087219237717 +0 +120 +absolute + + + +0.01 +smooth + +8.5369273386664 +47.350081950700016 +428.80532342056995 +-50.55189174562798 +79.17326774264495 +0 +120 +absolute + + + +0.01 +smooth + +8.536928065723256 +47.35008302400708 +428.804845332554 +-50.86639381672542 +79.13570571639359 +0 +120 +absolute + + + +0.01 +smooth + +8.536928787768622 +47.3500840971718 +428.80439294150557 +-51.181040953185345 +79.09818850900109 +0 +120 +absolute + + + +0.01 +smooth + +8.5369295047003 +47.350085170165684 +428.8039670817865 +-51.495818899978175 +79.06071851584554 +0 +120 +absolute + + + +0.01 +smooth + +8.5369302164161 +47.35008624296017 +428.8035685877585 +-51.81071340207439 +79.02329813230499 +0 +120 +absolute + + + +0.01 +smooth + +8.536930922813823 +47.35008731552675 +428.80319829378317 +-52.1257102044444 +78.98592975375755 +0 +120 +absolute + + + +0.01 +smooth + +8.536931623791283 +47.3500883878369 +428.8028570342225 +-52.44079505205879 +78.94861577558122 +0 +120 +absolute + + + +0.01 +smooth + +8.536932319246278 +47.350089459862104 +428.802545643438 +-52.75595368988795 +78.9113585931541 +0 +120 +absolute + + + +0.01 +smooth + +8.536933009076618 +47.35009053157383 +428.8022649557916 +-53.07117186290233 +78.87416060185427 +0 +120 +absolute + + + +0.01 +smooth + +8.53693369387519 +47.35009160307027 +428.80201039123835 +-53.38649900296879 +78.83701323687379 +0 +120 +absolute + + + +0.01 +smooth + +8.536934376382888 +47.35009267484412 +428.8017602784412 +-53.702182979825366 +78.7998738320703 +0 +120 +absolute + + + +0.01 +smooth + +8.536935056773402 +47.35009374692397 +428.8015124830969 +-54.01823853006773 +78.76273990483462 +0 +120 +absolute + + + +0.01 +smooth + +8.536935734910587 +47.3500948192821 +428.801267261901 +-54.33465210380834 +78.72561384356506 +0 +120 +absolute + + + +0.01 +smooth + +8.536936410658313 +47.35009589189076 +428.8010248715486 +-54.651410151159425 +78.68849803666004 +0 +120 +absolute + + + +0.01 +smooth + +8.53693708388044 +47.35009696472223 +428.80078556873497 +-54.9684991222333 +78.65139487251794 +0 +120 +absolute + + + +0.01 +smooth + +8.53693775444083 +47.3500980377488 +428.8005496101556 +-55.285905467142236 +78.61430673953716 +0 +120 +absolute + + + +0.01 +smooth + +8.536938422203342 +47.350099110942715 +428.80031725250547 +-55.6036156359986 +78.57723602611605 +0 +120 +absolute + + + +0.01 +smooth + +8.536939087031838 +47.35010018427625 +428.80008875248 +-55.92161607891468 +78.54018512065305 +0 +120 +absolute + + + +0.01 +smooth + +8.536939748790179 +47.35010125772168 +428.7998643667744 +-56.23989324600272 +78.50315641154648 +0 +120 +absolute + + + +0.01 +smooth + +8.536940407342227 +47.35010233125129 +428.79964435208416 +-56.558433587375156 +78.46615228719476 +0 +120 +absolute + + + +0.01 +smooth + +8.536941062551845 +47.350103404837355 +428.7994289651043 +-56.87722355314419 +78.4291751359963 +0 +120 +absolute + + + +0.01 +smooth + +8.536941714282898 +47.350104478452124 +428.79921846253035 +-57.196249593422124 +78.39222734634947 +0 +120 +absolute + + + +0.01 +smooth + +8.53694236239924 +47.35010555206787 +428.79901310105737 +-57.51549815832134 +78.35531130665264 +0 +120 +absolute + + + +0.01 +smooth + +8.536943006764732 +47.35010662565689 +428.7988131373807 +-57.8349556979541 +78.3184294053042 +0 +120 +absolute + + + +0.01 +smooth + +8.536943647243243 +47.35010769919141 +428.7986188281955 +-58.154608662432665 +78.28158403070256 +0 +120 +absolute + + + +0.01 +smooth + +8.536944283698631 +47.35010877264376 +428.7984304301974 +-58.474443501869445 +78.24477757124606 +0 +120 +absolute + + + +0.01 +smooth + +8.536944915994756 +47.350109845986175 +428.7982482000814 +-58.79444666637669 +78.20801241533316 +0 +120 +absolute + + + +0.01 +smooth + +8.536945543995483 +47.35011091919093 +428.7980723945428 +-59.11460460606671 +78.17129095136217 +0 +120 +absolute + + + +0.01 +smooth + +8.53694616756467 +47.35011199223031 +428.797903270277 +-59.43490377105176 +78.13461556773153 +0 +120 +absolute + + + +0.01 +smooth + +8.536946786566183 +47.35011306507657 +428.7977410839792 +-59.75533061144425 +78.09798865283958 +0 +120 +absolute + + + +0.01 +smooth + +8.536947400863879 +47.35011413770201 +428.79758609234466 +-60.07587157735643 +78.06141259508473 +0 +120 +absolute + + + +0.01 +smooth + +8.53694801032162 +47.350115210078854 +428.79743855206874 +-60.39651311890055 +78.02488978286539 +0 +120 +absolute + + + +0.01 +smooth + +8.53694861480327 +47.35011628217942 +428.7972987198466 +-60.717241686189034 +77.98842260457991 +0 +120 +absolute + + + +0.01 +smooth + +8.53694921417269 +47.350117353975975 +428.7971668523736 +-61.03804372933414 +77.95201344862669 +0 +120 +absolute + + + +0.01 +smooth + +8.536949808293741 +47.35011842544075 +428.7970432063451 +-61.3589056984481 +77.91566470340413 +0 +120 +absolute + + + +0.01 +smooth + +8.536950397030283 +47.35011949654606 +428.79692803845614 +-61.67981404364333 +77.87937875731058 +0 +120 +absolute + + + +0.01 +smooth + +8.53695098024618 +47.35012056726416 +428.79682160540233 +-62.000755215032115 +77.84315799874446 +0 +120 +absolute + + + +0.01 +smooth + +8.536951557805294 +47.35012163756733 +428.7967241638786 +-62.32171566272673 +77.80700481610415 +0 +120 +absolute + + + +0.01 +smooth + +8.536952129571484 +47.35012270742783 +428.7966359705805 +-62.642681836839444 +77.77092159778803 +0 +120 +absolute + + + +0.01 +smooth + +8.536952695408614 +47.35012377681794 +428.79655728220314 +-62.96364018748265 +77.73491073219449 +0 +120 +absolute + + + +0.01 +smooth + +8.536953255180542 +47.35012484570993 +428.79648835544185 +-63.28457716476862 +77.69897460772191 +0 +120 +absolute + + + +0.01 +smooth + +8.536953808751132 +47.35012591407606 +428.79642944699197 +-63.60547921880959 +77.66311561276868 +0 +120 +absolute + + + +0.01 +smooth + +8.536954355984248 +47.35012698188862 +428.7963808135487 +-63.926332799718 +77.62733613573317 +0 +120 +absolute + + + +0.01 +smooth + +8.536954896743747 +47.35012804911988 +428.79634271180737 +-64.24712435760608 +77.59163856501382 +0 +120 +absolute + + + +0.01 +smooth + +8.536955430893492 +47.3501291157421 +428.7963153984632 +-64.5678403425861 +77.55602528900897 +0 +120 +absolute + + + +0.01 +smooth + +8.536955958297346 +47.35013018172756 +428.79629913021165 +-64.88846720477046 +77.520498696117 +0 +120 +absolute + + + +0.01 +smooth + +8.536956478831883 +47.350131247050065 +428.79629418039036 +-65.20899212201437 +77.48506103410892 +0 +120 +absolute + + + +0.01 +smooth + +8.536956995563987 +47.3501323120702 +428.79630485531106 +-65.52958584424279 +77.44967910907287 +0 +120 +absolute + + + +0.01 +smooth + +8.536957510791375 +47.350133377061425 +428.7963339480749 +-65.85037827439925 +77.41432773028772 +0 +120 +absolute + + + +0.01 +smooth + +8.536958024310735 +47.350134441996666 +428.7963808666142 +-66.17135681626613 +77.37900926725523 +0 +120 +absolute + + + +0.01 +smooth + +8.53695853591877 +47.350135506848765 +428.7964450188606 +-66.4925088736257 +77.34372608947712 +0 +120 +absolute + + + +0.01 +smooth + +8.536959045412168 +47.35013657159059 +428.7965258127468 +-66.81382185026028 +77.30848056645513 +0 +120 +absolute + + + +0.01 +smooth + +8.536959552587629 +47.35013763619503 +428.7966226562047 +-67.13528314995236 +77.27327506769099 +0 +120 +absolute + + + +0.01 +smooth + +8.536960057241846 +47.35013870063496 +428.79673495716634 +-67.45688017648416 +77.23811196268647 +0 +120 +absolute + + + +0.01 +smooth + +8.536960559171511 +47.3501397648832 +428.796862123564 +-67.778600333638 +77.20299362094325 +0 +120 +absolute + + + +0.01 +smooth + +8.536961058173324 +47.35014082891269 +428.7970035633297 +-68.10043102519636 +77.16792241196313 +0 +120 +absolute + + + +0.01 +smooth + +8.536961554043978 +47.35014189269627 +428.7971586843957 +-68.42235965494147 +77.13290070524778 +0 +120 +absolute + + + +0.01 +smooth + +8.53696204658017 +47.350142956206824 +428.7973268946941 +-68.74437362665569 +77.09793087029902 +0 +120 +absolute + + + +0.01 +smooth + +8.536962535578592 +47.35014401941721 +428.7975076021569 +-69.06646034412144 +77.0630152766185 +0 +120 +absolute + + + +0.01 +smooth + +8.536963020835936 +47.35014508230029 +428.7977002147162 +-69.38860721112096 +77.02815629370798 +0 +120 +absolute + + + +0.01 +smooth + +8.5369635021489 +47.35014614482894 +428.7979041403043 +-69.71080163143667 +76.99335629106922 +0 +120 +absolute + + + +0.01 +smooth + +8.536963979314182 +47.35014720697607 +428.79811878685325 +-70.03303100885081 +76.95861763820393 +0 +120 +absolute + + + +0.01 +smooth + +8.536964452128473 +47.35014826871449 +428.79834356229514 +-70.35528274714586 +76.92394270461388 +0 +120 +absolute + + + +0.01 +smooth + +8.536964920388467 +47.3501493300171 +428.79857787456217 +-70.67754425010409 +76.88933385980074 +0 +120 +absolute + + + +0.01 +smooth + +8.53696538389086 +47.350150390856776 +428.79882113158635 +-70.99980292150778 +76.8547934732663 +0 +120 +absolute + + + +0.01 +smooth + +8.536965842432352 +47.350151451206386 +428.79907274129994 +-71.32204616513941 +76.82032391451227 +0 +120 +absolute + + + +0.01 +smooth + +8.536966295809632 +47.35015251103881 +428.79933211163495 +-71.64426138478126 +76.78592755304042 +0 +120 +absolute + + + +0.01 +smooth + +8.536966743819395 +47.350153570326896 +428.7995986505236 +-71.96643598421561 +76.75160675835247 +0 +120 +absolute + + + +0.01 +smooth + +8.53696718625834 +47.35015462904354 +428.7998717658981 +-72.28855736722494 +76.71736389995013 +0 +120 +absolute + + + +0.01 +smooth + +8.536967622923155 +47.35015568716159 +428.8001508656904 +-72.6106129375915 +76.68320134733514 +0 +120 +absolute + + + +0.01 +smooth + +8.536968053610543 +47.350156744653944 +428.80043535783267 +-72.93259009909764 +76.64912147000928 +0 +120 +absolute + + + +0.01 +smooth + +8.536968478117194 +47.350157801493445 +428.800724650257 +-73.25447625552567 +76.61512663747425 +0 +120 +absolute + + + +0.01 +smooth + +8.536968896239804 +47.350158857652985 +428.80101815089574 +-73.57625881065805 +76.58121921923178 +0 +120 +absolute + + + +0.01 +smooth + +8.536969307775067 +47.35015991310543 +428.8013152676807 +-73.89792516827704 +76.54740158478363 +0 +120 +absolute + + + +0.01 +smooth + +8.53696971251968 +47.35016096782365 +428.80161540854425 +-74.21946273216494 +76.51367610363151 +0 +120 +absolute + + + +0.01 +smooth + +8.536970110270337 +47.350162021780505 +428.8019179814184 +-74.5408589061042 +76.48004514527717 +0 +120 +absolute + + + +0.01 +smooth + +8.536970500823731 +47.35016307494888 +428.8022223942354 +-74.86210109387711 +76.44651107922235 +0 +120 +absolute + + + +0.01 +smooth + +8.536970883976558 +47.35016412730166 +428.8025280549271 +-75.18317669926597 +76.41307627496877 +0 +120 +absolute + + + +0.01 +smooth + +8.536971259525515 +47.35016517881168 +428.80283437142594 +-75.50407312605321 +76.37974310201817 +0 +120 +absolute + + + +0.01 +smooth + +8.536971627267294 +47.350166229451844 +428.8031407516639 +-75.82477777802114 +76.34651392987229 +0 +120 +absolute + + + +0.01 +smooth + +8.53697198699859 +47.350167279195 +428.8034466035731 +-76.14527805895206 +76.31339112803288 +0 +120 +absolute + + + +0.01 +smooth + +8.536972338516103 +47.35016832801403 +428.80375133508574 +-76.46556137262839 +76.28037706600163 +0 +120 +absolute + + + +0.01 +smooth + +8.536972681616522 +47.350169375881805 +428.8040543541338 +-76.78561512283241 +76.24747411328033 +0 +120 +absolute + + + +0.01 +smooth + +8.53697301609654 +47.35017042277119 +428.80435506864967 +-77.10542671334649 +76.21468463937067 +0 +120 +absolute + + + +0.01 +smooth + +8.536973343232585 +47.35017146875341 +428.8046554727906 +-77.42502646854167 +76.18200148397027 +0 +120 +absolute + + + +0.01 +smooth + +8.536973670529814 +47.35017251431923 +428.8049686393459 +-77.74462826081295 +76.14937682853824 +0 +120 +absolute + + + +0.01 +smooth + +8.536973998713236 +47.35017355951708 +428.805296071336 +-78.06425349834319 +76.11680572746296 +0 +120 +absolute + + + +0.01 +smooth + +8.536974327367231 +47.350174604320124 +428.8056372960344 +-78.3838907713009 +76.08429053067889 +0 +120 +absolute + + + +0.01 +smooth + +8.536974656076184 +47.35017564870152 +428.8059918407146 +-78.70352866985472 +76.05183358812053 +0 +120 +absolute + + + +0.01 +smooth + +8.53697498442448 +47.350176692634435 +428.8063592326501 +-79.02315578417321 +76.01943724972234 +0 +120 +absolute + + + +0.01 +smooth + +8.536975311996507 +47.35017773609203 +428.8067389991143 +-79.3427607044249 +75.9871038654188 +0 +120 +absolute + + + +0.01 +smooth + +8.536975638376639 +47.35017877904745 +428.80713066738065 +-79.6623320207784 +75.95483578514435 +0 +120 +absolute + + + +0.01 +smooth + +8.536975963149267 +47.350179821473844 +428.8075337647226 +-79.98185832340225 +75.92263535883349 +0 +120 +absolute + + + +0.01 +smooth + +8.536976285898772 +47.350180863344406 +428.80794781841354 +-80.30132820246504 +75.89050493642068 +0 +120 +absolute + + + +0.01 +smooth + +8.53697660620954 +47.35018190463225 +428.80837235572693 +-80.62073024813522 +75.8584468678404 +0 +120 +absolute + + + +0.01 +smooth + +8.536976923665954 +47.35018294531057 +428.8088069039362 +-80.94005305058154 +75.82646350302711 +0 +120 +absolute + + + +0.01 +smooth + +8.536977237852398 +47.35018398535252 +428.809250990315 +-81.25928519997245 +75.79455719191527 +0 +120 +absolute + + + +0.01 +smooth + +8.536977548353253 +47.350185024731225 +428.80970414213647 +-81.57841528647651 +75.7627302844394 +0 +120 +absolute + + + +0.01 +smooth + +8.536977854752907 +47.3501860634199 +428.8101658866743 +-81.89743190026236 +75.73098513053391 +0 +120 +absolute + + + +0.01 +smooth + +8.536978156635744 +47.350187101391654 +428.8106357512019 +-82.21632363149854 +75.6993240801333 +0 +120 +absolute + + + +0.01 +smooth + +8.536978453586146 +47.35018813861968 +428.8111132629927 +-82.53507907035356 +75.66774948317206 +0 +120 +absolute + + + +0.01 +smooth + +8.536978745188499 +47.35018917507712 +428.81159794932 +-82.85368680699607 +75.63626368958464 +0 +120 +absolute + + + +0.01 +smooth + +8.536979031027183 +47.350190210737125 +428.81208933745756 +-83.1721354315946 +75.6048690493055 +0 +120 +absolute + + + +0.01 +smooth + +8.536979310686585 +47.350191245572866 +428.81258695467847 +-83.49041353431765 +75.57356791226913 +0 +120 +absolute + + + +0.01 +smooth + +8.536979583751085 +47.3501922795575 +428.81309032825635 +-83.8085097053339 +75.54236262840999 +0 +120 +absolute + + + +0.01 +smooth + +8.536979849805073 +47.350193312664175 +428.81359898546475 +-84.12641253481189 +75.51125554766256 +0 +120 +absolute + + + +0.01 +smooth + +8.53698010843293 +47.35019434486606 +428.814112453577 +-84.44411061292013 +75.48024901996132 +0 +120 +absolute + + + +0.01 +smooth + +8.53698035921904 +47.35019537613632 +428.8146302598664 +-84.76159252982717 +75.44934539524071 +0 +120 +absolute + + + +0.01 +smooth + +8.536980601747786 +47.3501964064481 +428.81515193160675 +-85.0788468757017 +75.41854702343522 +0 +120 +absolute + + + +0.01 +smooth + +8.53698083560355 +47.35019743577456 +428.81567699607126 +-85.39586224071219 +75.38785625447933 +0 +120 +absolute + + + +0.01 +smooth + +8.536981060370723 +47.35019846408886 +428.8162049805334 +-85.71262721502717 +75.35727543830751 +0 +120 +absolute + + + +0.01 +smooth + +8.536981275633682 +47.350199491364165 +428.81673541226667 +-86.02913038881535 +75.32680692485421 +0 +120 +absolute + + + +0.01 +smooth + +8.536981480976813 +47.350200517573626 +428.81726781854456 +-86.34536035224517 +75.2964530640539 +0 +120 +absolute + + + +0.01 +smooth + +8.5369816759845 +47.350201542690414 +428.81780172664037 +-86.6613056954852 +75.2662162058411 +0 +120 +absolute + + + +0.01 +smooth + +8.536981860241127 +47.35020256668766 +428.8183366638277 +-86.97695500870411 +75.23609870015022 +0 +120 +absolute + + + +0.01 +smooth + +8.53698203333108 +47.35020358953855 +428.81887215737993 +-87.29229688207039 +75.20610289691578 +0 +120 +absolute + + + +0.01 +smooth + +8.536982194838737 +47.35020461121624 +428.81940773457046 +-87.60731990575262 +75.17623114607221 +0 +120 +absolute + + + +0.01 +smooth + +8.53698234434849 +47.35020563169388 +428.8199429226728 +-87.92201266991928 +75.146485797554 +0 +120 +absolute + + + +0.01 +smooth + +8.536982481444715 +47.35020665094462 +428.8204772489604 +-88.23636376473911 +75.11686920129564 +0 +120 +absolute + + + +0.01 +smooth + +8.536982605711803 +47.350207668941636 +428.82101024070676 +-88.55036178038057 +75.08738370723157 +0 +120 +absolute + + + +0.01 +smooth + +8.536982716734132 +47.350208685658075 +428.82154142518516 +-88.86399530701217 +75.05803166529628 +0 +120 +absolute + + + +0.01 +smooth + +8.53698281409609 +47.35020970106711 +428.82207032966926 +-89.17725293480262 +75.02881542542423 +0 +120 +absolute + + + +0.01 +smooth + +8.536982904042441 +47.350210715496004 +428.82260144746715 +-89.49026104969514 +74.99970126749388 +0 +120 +absolute + + + +0.01 +smooth + +8.536982993040251 +47.35021172927202 +428.8231394259401 +-89.8031469613935 +74.97065547032923 +0 +120 +absolute + + + +0.01 +smooth + +8.536983081007355 +47.350212742368186 +428.8236840234405 +-90.11590064570714 +74.94168038228288 +0 +120 +absolute + + + +0.01 +smooth + +8.536983167861585 +47.35021375475761 +428.8242349983211 +-90.42851207844542 +74.91277835170753 +0 +120 +absolute + + + +0.01 +smooth + +8.536983253520779 +47.350214766413345 +428.8247921089348 +-90.74097123541765 +74.88395172695589 +0 +120 +absolute + + + +0.01 +smooth + +8.536983337902774 +47.35021577730847 +428.82535511363415 +-91.05326809243316 +74.8552028563806 +0 +120 +absolute + + + +0.01 +smooth + +8.536983420925399 +47.35021678741604 +428.8259237707716 +-91.36539262530141 +74.82653408833434 +0 +120 +absolute + + + +0.01 +smooth + +8.53698350250649 +47.35021779670914 +428.82649783870016 +-91.67733480983173 +74.7979477711698 +0 +120 +absolute + + + +0.01 +smooth + +8.536983582563883 +47.35021880516085 +428.82707707577237 +-91.98908462183343 +74.76944625323966 +0 +120 +absolute + + + +0.01 +smooth + +8.536983661015414 +47.35021981274423 +428.8276612403408 +-92.30063203711593 +74.74103188289659 +0 +120 +absolute + + + +0.01 +smooth + +8.536983737778915 +47.350220819432344 +428.82825009075833 +-92.61196703148859 +74.71270700849325 +0 +120 +absolute + + + +0.01 +smooth + +8.536983812772222 +47.350221825198275 +428.82884338537764 +-92.92307958076073 +74.68447397838234 +0 +120 +absolute + + + +0.01 +smooth + +8.536983885913164 +47.350222830015085 +428.8294408825509 +-93.2339596607417 +74.65633514091651 +0 +120 +absolute + + + +0.01 +smooth + +8.536983957119588 +47.35022383385586 +428.8300423406315 +-93.54459724724097 +74.62829284444848 +0 +120 +absolute + + + +0.01 +smooth + +8.536984026309321 +47.35022483669366 +428.83064751797167 +-93.85498231606779 +74.60034943733089 +0 +120 +absolute + + + +0.01 +smooth + +8.536984093400193 +47.350225838501544 +428.8312561729241 +-94.16510484303154 +74.5725072679164 +0 +120 +absolute + + + +0.01 +smooth + +8.53698415831005 +47.35022683925261 +428.83186806384185 +-94.47495480394167 +74.54476868455775 +0 +120 +absolute + + + +0.01 +smooth + +8.536984220956715 +47.35022783891991 +428.8324829490771 +-94.78452217460742 +74.51713603560756 +0 +120 +absolute + + + +0.01 +smooth + +8.536984281258029 +47.350228837476514 +428.83310058698277 +-95.09379693083818 +74.48961166941854 +0 +120 +absolute + + + +0.01 +smooth + +8.536984339131827 +47.35022983489551 +428.83372073591147 +-95.40276904844339 +74.46219793434332 +0 +120 +absolute + + + +0.01 +smooth + +8.536984394495942 +47.35023083114995 +428.8343431542159 +-95.71142850323236 +74.43489717873463 +0 +120 +absolute + + + +0.01 +smooth + +8.536984447268209 +47.35023182621293 +428.8349676002488 +-96.01976527101436 +74.40771175094513 +0 +120 +absolute + + + +0.01 +smooth + +8.536984497366461 +47.35023282005749 +428.8355938323627 +-96.32776932759893 +74.38064399932748 +0 +120 +absolute + + + +0.01 +smooth + +8.536984544708536 +47.350233812656725 +428.83622160891036 +-96.63543064879534 +74.35369627223436 +0 +120 +absolute + + + +0.01 +smooth + +8.536984589212267 +47.35023480398368 +428.83685068824445 +-96.9427392104129 +74.32687091801847 +0 +120 +absolute + + + +0.01 +smooth + +8.536984630795487 +47.35023579401147 +428.8374808287177 +-97.24968498826107 +74.30017028503245 +0 +120 +absolute + + + +0.01 +smooth + +8.536984669376032 +47.35023678271312 +428.8381117886827 +-97.55625795814916 +74.273596721629 +0 +120 +absolute + + + +0.01 +smooth + +8.536984704871738 +47.350237770061725 +428.8387433264921 +-97.86244809588655 +74.2471525761608 +0 +120 +absolute + + + +0.01 +smooth + +8.536984737200438 +47.35023875603035 +428.8393752004987 +-98.16824537728252 +74.22084019698053 +0 +120 +absolute + + + +0.01 +smooth + +8.536984766279968 +47.35023974059207 +428.84000716905496 +-98.47363977814658 +74.19466193244085 +0 +120 +absolute + + + +0.01 +smooth + +8.536984792028159 +47.35024072371995 +428.84063899051375 +-98.778621274288 +74.16862013089442 +0 +120 +absolute + + + +0.01 +smooth + +8.53698481436285 +47.35024170538708 +428.84127042322774 +-99.08317984151611 +74.14271714069397 +0 +120 +absolute + + + +0.01 +smooth + +8.536984833201874 +47.35024268556649 +428.8419012255495 +-99.38730545564036 +74.11695531019213 +0 +120 +absolute + + + +0.01 +smooth + +8.536984848463065 +47.3502436642313 +428.8425311558318 +-99.69098809247006 +74.09133698774158 +0 +120 +absolute + + + +0.01 +smooth + +8.536984860064258 +47.35024464135454 +428.8431599724272 +-99.99421772781453 +74.06586452169502 +0 +120 +absolute + + + +0.01 +smooth + +8.53698486792329 +47.35024561690931 +428.8437874336885 +-100.29698433748324 +74.0405402604051 +0 +120 +absolute + + + +0.01 +smooth + +8.536984871957992 +47.35024659086868 +428.84441329796823 +-100.5992778972855 +74.01536655222453 +0 +120 +absolute + + + +0.01 +smooth + +8.536984871082588 +47.350247563286516 +428.8450378774564 +-100.90111534330185 +73.99033714150428 +0 +120 +absolute + + + +0.01 +smooth + +8.536984858483288 +47.35024853469159 +428.84566476949124 +-101.20267262079518 +73.96539521896857 +0 +120 +absolute + + + +0.01 +smooth + +8.536984833220771 +47.35024950516203 +428.8462945353617 +-101.50397637719801 +73.94053193981352 +0 +120 +absolute + + + +0.01 +smooth + +8.53698479568914 +47.35025047467043 +428.8469270169365 +-101.80501811909758 +73.91574969934078 +0 +120 +absolute + + + +0.01 +smooth + +8.536984746282496 +47.350251443189315 +428.8475620560846 +-102.10578935308105 +73.89105089285192 +0 +120 +absolute + + + +0.01 +smooth + +8.536984685394936 +47.350252410691255 +428.84819949467476 +-102.40628158573578 +73.86643791564855 +0 +120 +absolute + + + +0.01 +smooth + +8.536984613420564 +47.350253377148825 +428.84883917457574 +-102.70648632364895 +73.84191316303225 +0 +120 +absolute + + + +0.01 +smooth + +8.536984530753472 +47.350254342534555 +428.8494809376564 +-103.00639507340773 +73.81747903030463 +0 +120 +absolute + + + +0.01 +smooth + +8.536984437787769 +47.350255306821005 +428.85012462578584 +-103.3059993415995 +73.79313791276732 +0 +120 +absolute + + + +0.01 +smooth + +8.536984334917552 +47.350256269980775 +428.85077008083283 +-103.60529063481145 +73.76889220572188 +0 +120 +absolute + + + +0.01 +smooth + +8.53698422253692 +47.35025723198638 +428.851417144666 +-103.90426045963075 +73.74474430446998 +0 +120 +absolute + + + +0.01 +smooth + +8.536984101039973 +47.35025819281041 +428.8520656591544 +-104.20290032264471 +73.72069660431313 +0 +120 +absolute + + + +0.01 +smooth + +8.536983970820817 +47.350259152425416 +428.85271546616684 +-104.50120173044063 +73.69675150055299 +0 +120 +absolute + + + +0.01 +smooth + +8.536983832273542 +47.35026011080395 +428.8533664075721 +-104.79915618960561 +73.67291138849117 +0 +120 +absolute + + + +0.01 +smooth + +8.536983685792253 +47.35026106791855 +428.8540183252388 +-105.0967552067269 +73.64917866342923 +0 +120 +absolute + + + +0.01 +smooth + +8.536983531771051 +47.35026202374183 +428.85467106103647 +-105.39399028839186 +73.62555572066881 +0 +120 +absolute + + + +0.01 +smooth + +8.536983370604037 +47.35026297824631 +428.85532445683344 +-105.69085294118767 +73.60204495551149 +0 +120 +absolute + + + +0.01 +smooth + +8.53698320268531 +47.35026393140456 +428.8559783544987 +-105.98733467170152 +73.5786487632589 +0 +120 +absolute + + + +0.01 +smooth + +8.536983028408967 +47.35026488318914 +428.8566325959009 +-106.28342698652072 +73.55536953921259 +0 +120 +absolute + + + +0.01 +smooth + +8.536982848169114 +47.350265833572614 +428.85728702290936 +-106.57912139223251 +73.53220967867423 +0 +120 +absolute + + + +0.01 +smooth + +8.536982662359845 +47.35026678252754 +428.8579414773925 +-106.87440939542404 +73.50917157694539 +0 +120 +absolute + + + +0.01 +smooth + +8.536982471375264 +47.35026773002646 +428.8585958012192 +-107.16928250268269 +73.48625762932764 +0 +120 +absolute + + + +0.01 +smooth + +8.53698227560947 +47.35026867604195 +428.85924983625847 +-107.46373222059557 +73.46347023112263 +0 +120 +absolute + + + +0.01 +smooth + +8.536982075456564 +47.35026962054657 +428.85990342437924 +-107.75775005574997 +73.44081177763192 +0 +120 +absolute + + + +0.01 +smooth + +8.536981871310644 +47.35027056351288 +428.86055640745 +-108.05132751473316 +73.41828466415718 +0 +120 +absolute + + + +0.01 +smooth + +8.536981663565811 +47.35027150491344 +428.8612086273399 +-108.34445610413236 +73.39589128599994 +0 +120 +absolute + + + +0.01 +smooth + +8.536981452616168 +47.35027244472079 +428.86185992591777 +-108.63712733053481 +73.37363403846182 +0 +120 +absolute + + + +0.01 +smooth + +8.536981238855809 +47.35027338290751 +428.86251014505245 +-108.92933270052768 +73.35151531684446 +0 +120 +absolute + + + +0.01 +smooth + +8.536981022678837 +47.35027431944616 +428.8631591266127 +-109.22106372069834 +73.32953751644942 +0 +120 +absolute + + + +0.01 +smooth + +8.536980804479356 +47.35027525430928 +428.8638067124673 +-109.51231189763396 +73.30770303257832 +0 +120 +absolute + + + +0.01 +smooth + +8.536980584651463 +47.35027618746946 +428.86445274448533 +-109.80306873792173 +73.28601426053275 +0 +120 +absolute + + + +0.01 +smooth + +8.536980363589254 +47.35027711889923 +428.8650970645356 +-110.09332574814898 +73.26447359561433 +0 +120 +absolute + + + +0.01 +smooth + +8.536980141686836 +47.35027804857117 +428.8657395144867 +-110.38307443490294 +73.24308343312467 +0 +120 +absolute + + + +0.01 +smooth + +8.536979919338307 +47.35027897645783 +428.8663799362077 +-110.67230630477076 +73.22184616836533 +0 +120 +absolute + + + +0.01 +smooth + +8.536979696937761 +47.35027990253177 +428.86701817156745 +-110.96101286433978 +73.20076419663795 +0 +120 +absolute + + + +0.01 +smooth + +8.536979474879308 +47.35028082676555 +428.8676540624348 +-111.24918562019721 +73.17983991324411 +0 +120 +absolute + + + +0.01 +smooth + +8.536979253557043 +47.35028174913173 +428.86828745067845 +-111.5368160789303 +73.15907571348544 +0 +120 +absolute + + + +0.01 +smooth + +8.536979033365066 +47.35028266960287 +428.86891817816746 +-111.82389574712622 +73.1384739926635 +0 +120 +absolute + + + +0.01 +smooth + +8.536978808931412 +47.35028358849782 +428.86954761286194 +-112.1105112682674 +73.11799859271206 +0 +120 +absolute + + + +0.01 +smooth + +8.536978573143069 +47.35028450623552 +428.87017759176575 +-112.39677794979208 +73.0976022360456 +0 +120 +absolute + + + +0.01 +smooth + +8.536978326261783 +47.35028542278923 +428.87080800500655 +-112.68268938225863 +73.07728726952601 +0 +120 +absolute + + + +0.01 +smooth + +8.536978068578636 +47.3502863381305 +428.87143873495586 +-112.96823867201826 +73.05705623682594 +0 +120 +absolute + + + +0.01 +smooth + +8.536977800384706 +47.35028725223086 +428.8720696639847 +-113.25341892542201 +73.03691168161807 +0 +120 +absolute + + + +0.01 +smooth + +8.536977521971082 +47.35028816506183 +428.8727006744647 +-113.53822324882091 +73.01685614757497 +0 +120 +absolute + + + +0.01 +smooth + +8.536977233628843 +47.35028907659495 +428.87333164876713 +-113.82264474856619 +72.99689217836932 +0 +120 +absolute + + + +0.01 +smooth + +8.536976935649076 +47.350289986801734 +428.8739624692634 +-114.1066765310089 +72.97702231767376 +0 +120 +absolute + + + +0.01 +smooth + +8.536976628322863 +47.350290895653714 +428.8745930183249 +-114.39031170250014 +72.95724910916097 +0 +120 +absolute + + + +0.01 +smooth + +8.536976311941284 +47.350291803122424 +428.875223178323 +-114.67354336939093 +72.93757509650354 +0 +120 +absolute + + + +0.01 +smooth + +8.536975986795424 +47.350292709179385 +428.8758528316289 +-114.95636463803247 +72.91800282337412 +0 +120 +absolute + + + +0.01 +smooth + +8.536975653176366 +47.350293613796126 +428.8764818606141 +-115.23876861477582 +72.89853483344535 +0 +120 +absolute + + + +0.01 +smooth + +8.536975311375196 +47.35029451694418 +428.87711014764994 +-115.52074840597206 +72.87917367038989 +0 +120 +absolute + + + +0.01 +smooth + +8.53697496168299 +47.35029541859506 +428.8777375751078 +-115.80229711797234 +72.85992187788038 +0 +120 +absolute + + + +0.01 +smooth + +8.536974604390835 +47.350296318720304 +428.87836402535896 +-116.0834078571277 +72.84078199958944 +0 +120 +absolute + + + +0.01 +smooth + +8.536974239789814 +47.35029721729142 +428.8789893807747 +-116.36407372978923 +72.82175657918972 +0 +120 +absolute + + + +0.01 +smooth + +8.53697386817101 +47.35029811427998 +428.8796135237268 +-116.64428784230812 +72.80284816035389 +0 +120 +absolute + + + +0.01 +smooth + +8.536973489825506 +47.35029900965747 +428.8802363365862 +-116.92404330103541 +72.78405928675457 +0 +120 +absolute + + + +0.01 +smooth + +8.536973105044385 +47.350299903395445 +428.88085770172455 +-117.20333321232215 +72.76539250206439 +0 +120 +absolute + + + +0.01 +smooth + +8.536972714118733 +47.350300795465415 +428.8814775015129 +-117.48215068251953 +72.746850349956 +0 +120 +absolute + + + +0.01 +smooth + +8.536972317339627 +47.35030168583893 +428.8820956183229 +-117.76048881797863 +72.72843537410206 +0 +120 +absolute + + + +0.01 +smooth + +8.536971914998153 +47.350302574487486 +428.8827119345258 +-118.0383407250505 +72.71015011817519 +0 +120 +absolute + + + +0.01 +smooth + +8.536971507385395 +47.35030346138264 +428.88332633249297 +-118.31569951008625 +72.69199712584805 +0 +120 +absolute + + + +0.01 +smooth + +8.536971094792435 +47.35030434649589 +428.8839386945958 +-118.59255827943703 +72.67397894079326 +0 +120 +absolute + + + +0.01 +smooth + +8.536970677510356 +47.350305229798785 +428.8845489032056 +-118.86891013945387 +72.65609810668349 +0 +120 +absolute + + + +0.01 +smooth + +8.53697025583024 +47.35030611126285 +428.8851568406938 +-119.14474819648791 +72.63835716719137 +0 +120 +absolute + + + +0.01 +smooth + +8.536969830043175 +47.35030699085962 +428.88576238943176 +-119.42006555689025 +72.62075866598953 +0 +120 +absolute + + + +0.01 +smooth + +8.536969400440237 +47.350307868560606 +428.88636543179075 +-119.694855327012 +72.60330514675061 +0 +120 +absolute + + + +0.01 +smooth + +8.53696896731251 +47.35030874433735 +428.88696585014213 +-119.96911061320418 +72.58599915314727 +0 +120 +absolute + + + +0.01 +smooth + +8.536968530951084 +47.35030961816136 +428.88756352685743 +-120.24282452181798 +72.56884322885216 +0 +120 +absolute + + + +0.01 +smooth + +8.536968091647037 +47.350310490004176 +428.88815834430795 +-120.51599015920448 +72.5518399175379 +0 +120 +absolute + + + +0.01 +smooth + +8.536967649691448 +47.35031135983735 +428.888750184865 +-120.78860063171476 +72.53499176287713 +0 +120 +absolute + + + +0.01 +smooth + +8.536967205375406 +47.35031222763237 +428.88933893089995 +-121.06064904569988 +72.5183013085425 +0 +120 +absolute + + + +0.01 +smooth + +8.536966758989994 +47.35031309336078 +428.8899244647841 +-121.332128507511 +72.50177109820665 +0 +120 +absolute + + + +0.01 +smooth + +8.536966310826292 +47.350313956994114 +428.890506668889 +-121.60303212349925 +72.48540367554223 +0 +120 +absolute + + + +0.01 +smooth + +8.536965861175386 +47.35031481850389 +428.8910854255858 +-121.87335300001557 +72.46920158422188 +0 +120 +absolute + + + +0.01 +smooth + +8.536965410328357 +47.35031567786164 +428.891660617246 +-122.14308424341125 +72.45316736791824 +0 +120 +absolute + + + +0.01 +smooth + +8.536964957902297 +47.350316535108576 +428.8922323642512 +-122.41223395430045 +72.4372953334288 +0 +120 +absolute + + + +0.01 +smooth + +8.536964497918209 +47.3503173908603 +428.8928027575794 +-122.68093445078989 +72.42151194937811 +0 +120 +absolute + + + +0.01 +smooth + +8.536964029048015 +47.35031824524352 +428.8933722353022 +-122.94921405774774 +72.40580156040066 +0 +120 +absolute + + + +0.01 +smooth + +8.53696355147354 +47.350319098228056 +428.8939407012562 +-123.21706745750907 +72.39016706541472 +0 +120 +absolute + + + +0.01 +smooth + +8.53696306537664 +47.35031994978371 +428.8945080592781 +-123.48448933240887 +72.37461136333857 +0 +120 +absolute + + + +0.01 +smooth + +8.536962570939139 +47.35032079988029 +428.8950742132041 +-123.7514743647823 +72.35913735309049 +0 +120 +absolute + + + +0.01 +smooth + +8.53696206834288 +47.350321648487615 +428.8956390668709 +-124.01801723696435 +72.34374793358873 +0 +120 +absolute + + + +0.01 +smooth + +8.536961557769699 +47.35032249557548 +428.8962025241152 +-124.28411263129013 +72.32844600375161 +0 +120 +absolute + + + +0.01 +smooth + +8.536961039401437 +47.350323341113715 +428.89676448877344 +-124.54975523009463 +72.31323446249736 +0 +120 +absolute + + + +0.01 +smooth + +8.53696051341993 +47.35032418507211 +428.89732486468205 +-124.81493971571301 +72.29811620874429 +0 +120 +absolute + + + +0.01 +smooth + +8.536959980007016 +47.3503250274205 +428.8978835556777 +-125.0796607704803 +72.28309414141066 +0 +120 +absolute + + + +0.01 +smooth + +8.536959439344532 +47.35032586812868 +428.8984404655971 +-125.3439130767315 +72.26817115941476 +0 +120 +absolute + + + +0.01 +smooth + +8.536958891614319 +47.35032670716646 +428.8989954982763 +-125.60769131680173 +72.25335016167483 +0 +120 +absolute + + + +0.01 +smooth + +8.536958336998211 +47.35032754450364 +428.8995485575523 +-125.87099017302607 +72.23863404710919 +0 +120 +absolute + + + +0.01 +smooth + +8.536957775678053 +47.35032838011007 +428.90009954726156 +-126.13380432773954 +72.22402571463611 +0 +120 +absolute + + + +0.01 +smooth + +8.53695720783567 +47.35032921395549 +428.90064837124027 +-126.39612846327718 +72.20952806317382 +0 +120 +absolute + + + +0.01 +smooth + +8.536956633652913 +47.35033004600979 +428.9011949333255 +-126.65795726197418 +72.19514399164066 +0 +120 +absolute + + + +0.01 +smooth + +8.536956053311616 +47.35033087624274 +428.90173913735356 +-126.91928540616549 +72.1808763989549 +0 +120 +absolute + + + +0.01 +smooth + +8.536955466993613 +47.350331704624125 +428.9022808871608 +-127.18010757818611 +72.16672818403475 +0 +120 +absolute + + + +0.01 +smooth + +8.536954874880749 +47.35033253112381 +428.90282008658414 +-127.44041846037128 +72.1527022457986 +0 +120 +absolute + + + +0.01 +smooth + +8.536954277154853 +47.350333355711584 +428.9033566394599 +-127.70021273505597 +72.1388014831646 +0 +120 +absolute + + + +0.01 +smooth + +8.536953673997772 +47.35033417835724 +428.9038904496248 +-127.95948508457516 +72.12502879505111 +0 +120 +absolute + + + +0.01 +smooth + +8.536953065591337 +47.3503349990306 +428.904421420915 +-128.2182301912641 +72.11138708037637 +0 +120 +absolute + + + +0.01 +smooth + +8.53695245211739 +47.350335817701485 +428.90494945716745 +-128.4764427374577 +72.09787923805868 +0 +120 +absolute + + + +0.01 +smooth + +8.536951833757765 +47.35033663433969 +428.9054744622184 +-128.73411740549105 +72.0845081670163 +0 +120 +absolute + + + +0.01 +smooth + +8.536951210694307 +47.350337448915035 +428.90599633990473 +-128.9912488776993 +72.07127676616751 +0 +120 +absolute + + + +0.01 +smooth + +8.536950583108846 +47.35033826139732 +428.90651499406266 +-129.2478318364174 +72.05818793443059 +0 +120 +absolute + + + +0.01 +smooth + +8.536949951183225 +47.350339071756366 +428.9070303285289 +-129.5038609639805 +72.04524457072381 +0 +120 +absolute + + + +0.01 +smooth + +8.536949315099282 +47.35033987996198 +428.90754224713993 +-129.75933094272352 +72.03244957396547 +0 +120 +absolute + + + +0.01 +smooth + +8.53694867503885 +47.350340685983966 +428.9080506537324 +-130.01423645498176 +72.01980584307381 +0 +120 +absolute + + + +0.01 +smooth + +8.536948031183773 +47.35034148979214 +428.90855545214276 +-130.26857218309007 +72.00731627696712 +0 +120 +absolute + + + +0.01 +smooth + +8.536947383715887 +47.35034229135632 +428.90905654620747 +-130.52233280938358 +71.9949837745637 +0 +120 +absolute + + + +0.01 +smooth + +8.536946732817027 +47.350343090646305 +428.90955383976336 +-130.7755130161974 +71.98281123478179 +0 +120 +absolute + + + +0.01 +smooth + +8.536946078669034 +47.35034388763191 +428.9100472366466 +-131.02810748586654 +71.9708015565397 +0 +120 +absolute + + + +0.01 +smooth + +8.536945421453746 +47.350344682282945 +428.9105366406941 +-131.28011090072607 +71.95895763875568 +0 +120 +absolute + + + +0.01 +smooth + +8.536944761352999 +47.35034547456922 +428.91102195574206 +-131.53151794311108 +71.94728238034801 +0 +120 +absolute + + + +0.01 +smooth + +8.536944098548634 +47.35034626446055 +428.9115030856274 +-131.78232329535663 +71.93577868023499 +0 +120 +absolute + + + +0.01 +smooth + +8.536943433222486 +47.350347051926725 +428.9119799341863 +-132.03252163979772 +71.92444943733486 +0 +120 +absolute + + + +0.01 +smooth + +8.536942763457828 +47.350347837304 +428.9124535025065 +-132.28216653769053 +71.91324937867057 +0 +120 +absolute + + + +0.01 +smooth + +8.536942085970155 +47.35034862116131 +428.9129254988988 +-132.53135002046787 +71.9021029351984 +0 +120 +absolute + + + +0.01 +smooth + +8.536941400845823 +47.350349403474475 +428.9133958635081 +-132.7800696120471 +71.89101270407319 +0 +120 +absolute + + + +0.01 +smooth + +8.536940708220724 +47.35035018421072 +428.91386451053944 +-133.0283214470648 +71.87998242510463 +0 +120 +absolute + + + +0.01 +smooth + +8.536940008230749 +47.3503509633372 +428.91433135419817 +-133.2761016601575 +71.86901583810224 +0 +120 +absolute + + + +0.01 +smooth + +8.536939301011785 +47.3503517408211 +428.9147963086894 +-133.52340638596172 +71.85811668287567 +0 +120 +absolute + + + +0.01 +smooth + +8.536938586699726 +47.350352516629606 +428.9152592882181 +-133.77023175911393 +71.84728869923453 +0 +120 +absolute + + + +0.01 +smooth + +8.536937865430465 +47.35035329072994 +428.91572020698993 +-134.01657391425084 +71.83653562698841 +0 +120 +absolute + + + +0.01 +smooth + +8.536937137339894 +47.35035406308924 +428.9161789792097 +-134.2624289860089 +71.82586120594694 +0 +120 +absolute + + + +0.01 +smooth + +8.536936402563898 +47.35035483367473 +428.91663551908266 +-134.50779310902462 +71.8152691759197 +0 +120 +absolute + + + +0.01 +smooth + +8.536935661238376 +47.350355602453575 +428.917089740814 +-134.7526624179347 +71.80476327671636 +0 +120 +absolute + + + +0.01 +smooth + +8.536934913499213 +47.35035636939296 +428.917541558609 +-134.99703304737548 +71.79434724814648 +0 +120 +absolute + + + +0.01 +smooth + +8.536934159482303 +47.35035713446009 +428.91799088667267 +-135.24090113198366 +71.78402483001969 +0 +120 +absolute + + + +0.01 +smooth + +8.536933399323539 +47.350357897622125 +428.9184376392105 +-135.4842628063957 +71.77379976214559 +0 +120 +absolute + + + +0.01 +smooth + +8.536932633158807 +47.35035865884627 +428.9188817304272 +-135.7271142052482 +71.76367578433378 +0 +120 +absolute + + + +0.01 +smooth + +8.536931861124 +47.35035941809971 +428.9193230745283 +-135.96945146317765 +71.75365663639387 +0 +120 +absolute + + + +0.01 +smooth + +8.536931083355013 +47.35036017534961 +428.9197615857189 +-136.2112707148206 +71.74374605813549 +0 +120 +absolute + + + +0.01 +smooth + +8.536930299987732 +47.35036093056317 +428.92019717820415 +-136.45256809481367 +71.73394778936823 +0 +120 +absolute + + + +0.01 +smooth + +8.536929511158048 +47.350361683707575 +428.92062976618905 +-136.69333973779328 +71.72426556990169 +0 +120 +absolute + + + +0.01 +smooth + +8.536928717001858 +47.35036243475001 +428.9210592638791 +-136.93358177839602 +71.71470313954552 +0 +120 +absolute + + + +0.01 +smooth + +8.536927917655047 +47.35036318365766 +428.92148558547933 +-137.17329035125854 +71.7052642381093 +0 +120 +absolute + + + +0.01 +smooth + +8.53692711325351 +47.35036393039773 +428.921908645195 +-137.4124615910173 +71.69595260540264 +0 +120 +absolute + + + +0.01 +smooth + +8.536926303933136 +47.350364674937374 +428.92232835723104 +-137.65109163230875 +71.68677198123514 +0 +120 +absolute + + + +0.01 +smooth + +8.536925489829818 +47.35036541724379 +428.9227446357929 +-137.88917660976963 +71.67772610541644 +0 +120 +absolute + + + +0.01 +smooth + +8.536924671079444 +47.35036615728417 +428.9231573950858 +-138.12671265803635 +71.66881871775612 +0 +120 +absolute + + + +0.01 +smooth + +8.53692384781791 +47.3503668950257 +428.9235665493146 +-138.36369591174548 +71.66005355806382 +0 +120 +absolute + + + +0.01 +smooth + +8.536923020181101 +47.35036763043556 +428.92397201268477 +-138.60012250553356 +71.65143436614912 +0 +120 +absolute + + + +0.01 +smooth + +8.536922188304914 +47.35036836348094 +428.92437369940143 +-138.83598857403717 +71.64296488182163 +0 +120 +absolute + + + +0.01 +smooth + +8.536921352325235 +47.350369094129015 +428.9247715236697 +-139.07129025189283 +71.63464884489098 +0 +120 +absolute + + + +0.01 +smooth + +8.536920512377957 +47.35036982234698 +428.9251653996946 +-139.30602367373706 +71.62648999516676 +0 +120 +absolute + + + +0.01 +smooth + +8.536919668598976 +47.35037054810202 +428.92555524168165 +-139.54018497420645 +71.6184920724586 +0 +120 +absolute + + + +0.01 +smooth + +8.536918821124175 +47.350371271361325 +428.9259409638359 +-139.77377028793757 +71.61065881657608 +0 +120 +absolute + + + +0.01 +smooth + +8.536917970089451 +47.35037199209208 +428.9263224803624 +-140.0067757495668 +71.60299396732883 +0 +120 +absolute + + + +0.01 +smooth + +8.536917115630693 +47.350372710261446 +428.9266997054665 +-140.2391974937309 +71.59550126452645 +0 +120 +absolute + + + +0.01 +smooth + +8.536916257883792 +47.35037342583666 +428.92707255335324 +-140.47103165506627 +71.58818444797856 +0 +120 +absolute + + + +0.01 +smooth + +8.53691539698464 +47.35037413878485 +428.92744093822785 +-140.70227436820957 +71.58104725749476 +0 +120 +absolute + + + +0.01 +smooth + +8.536914533069128 +47.35037484907325 +428.92780477429557 +-140.9329217677972 +71.57409343288467 +0 +120 +absolute + + + +0.01 +smooth + +8.53691366604194 +47.35037555673117 +428.9281641493993 +-141.16297706011486 +71.56731619724479 +0 +120 +absolute + + + +0.01 +smooth + +8.536912793025651 +47.350376262533 +428.9285212354092 +-141.39252867626232 +71.56058334817008 +0 +120 +absolute + + + +0.01 +smooth + +8.536911913207328 +47.350376966691115 +428.9288766422466 +-141.6216021781784 +71.55385898066554 +0 +120 +absolute + + + +0.01 +smooth + +8.536911026696925 +47.35037766916887 +428.9292302853747 +-141.85019493246216 +71.54714945035236 +0 +120 +absolute + + + +0.01 +smooth + +8.536910133604403 +47.350378369929686 +428.9295820802566 +-142.0783043057127 +71.54046111285177 +0 +120 +absolute + + + +0.01 +smooth + +8.536909234039722 +47.350379068936945 +428.9299319423555 +-142.30592766452904 +71.53380032378492 +0 +120 +absolute + + + +0.01 +smooth + +8.536908328112837 +47.35037976615403 +428.93027978713457 +-142.53306237551033 +71.52717343877299 +0 +120 +absolute + + + +0.01 +smooth + +8.536907415933706 +47.35038046154436 +428.93062553005694 +-142.75970580525563 +71.52058681343722 +0 +120 +absolute + + + +0.01 +smooth + +8.536906497612293 +47.35038115507133 +428.93096908658606 +-142.9858553203641 +71.51404680339876 +0 +120 +absolute + + + +0.01 +smooth + +8.53690557325855 +47.350381846698305 +428.9313103721847 +-143.21150828743475 +71.50755976427882 +0 +120 +absolute + + + +0.01 +smooth + +8.536904642982439 +47.3503825363887 +428.9316493023162 +-143.43666207306674 +71.50113205169856 +0 +120 +absolute + + + +0.01 +smooth + +8.536903706893915 +47.3503832241059 +428.9319857924438 +-143.66131404385905 +71.49477002127921 +0 +120 +absolute + + + +0.01 +smooth + +8.536902765102937 +47.35038390981329 +428.93231975803053 +-143.8854615664108 +71.4884800286419 +0 +120 +absolute + + + +0.01 +smooth + +8.53690181771947 +47.35038459347429 +428.93265111453974 +-144.10910200732118 +71.48226842940787 +0 +120 +absolute + + + +0.01 +smooth + +8.536900864853465 +47.35038527505228 +428.9329797774344 +-144.33223273318924 +71.4761415791983 +0 +120 +absolute + + + +0.01 +smooth + +8.536899906614883 +47.350385954510664 +428.93330566217793 +-144.55485111061395 +71.47010583363438 +0 +120 +absolute + + + +0.01 +smooth + +8.53689894311368 +47.350386631812796 +428.93362868423327 +-144.77695450619453 +71.46416754833729 +0 +120 +absolute + + + +0.01 +smooth + +8.536897974459817 +47.350387306922116 +428.9339487590637 +-144.99854028653002 +71.4583330789282 +0 +120 +absolute + + + +0.01 +smooth + +8.536897000763254 +47.35038797980201 +428.9342658021324 +-145.21960581821952 +71.45260878102835 +0 +120 +absolute + + + +0.01 +smooth + +8.536896022133941 +47.350388650415844 +428.9345797289024 +-145.4401484678621 +71.44700101025887 +0 +120 +absolute + + + +0.01 +smooth + +8.536895038681847 +47.35038931872702 +428.93489045483705 +-145.66016560205685 +71.44151612224097 +0 +120 +absolute + + + +0.01 +smooth + +8.536894050516922 +47.35038998469896 +428.93519789539937 +-145.8796545874029 +71.43616047259587 +0 +120 +absolute + + + +0.01 +smooth + +8.53689305774913 +47.35039064829502 +428.93550196605264 +-146.0986127904993 +71.43094041694471 +0 +120 +absolute + + + +0.01 +smooth + +8.536892060488428 +47.35039130947862 +428.9358025822601 +-146.31703757794514 +71.42586231090871 +0 +120 +absolute + + + +0.01 +smooth + +8.536891058844772 +47.35039196821314 +428.93609965948474 +-146.53492631633952 +71.42093251010905 +0 +120 +absolute + + + +0.01 +smooth + +8.536890052928122 +47.35039262446198 +428.93639311318987 +-146.75227637228147 +71.41615737016693 +0 +120 +absolute + + + +0.01 +smooth + +8.536889042848438 +47.350393278188534 +428.9366828588386 +-146.9690851123702 +71.41154324670352 +0 +120 +absolute + + + +0.01 +smooth + +8.536888028715675 +47.350393929356194 +428.9369688118941 +-147.18534990320472 +71.40709649534001 +0 +120 +absolute + + + +0.01 +smooth + +8.536887010639791 +47.350394577928355 +428.93725088781946 +-147.40106811138412 +71.40282347169762 +0 +120 +absolute + + + +0.01 +smooth + +8.536885988730749 +47.350395223868404 +428.937529002078 +-147.61623710350747 +71.39873053139749 +0 +120 +absolute + + + +0.01 +smooth + +8.536884963098505 +47.35039586713974 +428.9378030701329 +-147.83085424617394 +71.39482403006086 +0 +120 +absolute + + + +0.01 +smooth + +8.536883933853016 +47.35039650770577 +428.9380730074472 +-148.04491690598257 +71.39111032330888 +0 +120 +absolute + + + +0.01 +smooth + +8.53688290110424 +47.350397145529854 +428.9383387294841 +-148.25842244953236 +71.38759576676276 +0 +120 +absolute + + + +0.01 +smooth + +8.536881864962137 +47.350397780575406 +428.93860015170685 +-148.47136824342255 +71.38428671604365 +0 +120 +absolute + + + +0.01 +smooth + +8.536880825536667 +47.35039841280582 +428.9388571895785 +-148.68375165425218 +71.3811895267728 +0 +120 +absolute + + + +0.01 +smooth + +8.536879782937785 +47.3503990421845 +428.93910975856244 +-148.89557004862027 +71.37831055457136 +0 +120 +absolute + + + +0.01 +smooth + +8.536878737275448 +47.35039966867481 +428.9393577741216 +-149.10682079312602 +71.37565615506051 +0 +120 +absolute + + + +0.01 +smooth + +8.536877688659619 +47.35040029224017 +428.93960115171933 +-149.3175012543684 +71.3732326838615 +0 +120 +absolute + + + +0.01 +smooth + +8.536876636149241 +47.35040091326361 +428.9398409597438 +-149.52764146359644 +71.37097324135756 +0 +120 +absolute + + + +0.01 +smooth + +8.536875577677405 +47.350401532571226 +428.9400794852778 +-149.73730665980358 +71.36873108782689 +0 +120 +absolute + + + +0.01 +smooth + +8.536874513271567 +47.350402150147346 +428.94031670427455 +-149.9464971737415 +71.36650430962564 +0 +120 +absolute + + + +0.01 +smooth + +8.536873443024746 +47.3504027659501 +428.9405525205518 +-150.15521130081314 +71.36429554679175 +0 +120 +absolute + + + +0.01 +smooth + +8.53687236702996 +47.35040337993756 +428.9407868379269 +-150.36344733642147 +71.36210743936316 +0 +120 +absolute + + + +0.01 +smooth + +8.536871285380244 +47.35040399206784 +428.94101956021785 +-150.57120357596952 +71.35994262737786 +0 +120 +absolute + + + +0.01 +smooth + +8.536870198168614 +47.350404602299044 +428.94125059124207 +-150.7784783148603 +71.35780375087381 +0 +120 +absolute + + + +0.01 +smooth + +8.5368691054881 +47.350405210589265 +428.9414798348175 +-150.98526984849678 +71.355693449889 +0 +120 +absolute + + + +0.01 +smooth + +8.536868007431714 +47.3504058168966 +428.94170719476165 +-151.19157647228198 +71.35361436446132 +0 +120 +absolute + + + +0.01 +smooth + +8.53686690409249 +47.35040642117913 +428.9419325748921 +-151.39739648161884 +71.35156913462876 +0 +120 +absolute + + + +0.01 +smooth + +8.536865795563445 +47.35040702339501 +428.9421558790268 +-151.6027281719104 +71.34956040042931 +0 +120 +absolute + + + +0.01 +smooth + +8.536864681937608 +47.35040762350227 +428.9423770109832 +-151.8075698385596 +71.34759080190088 +0 +120 +absolute + + + +0.01 +smooth + +8.536863563307996 +47.35040822145905 +428.942595874579 +-152.0119197769695 +71.34566297908145 +0 +120 +absolute + + + +0.01 +smooth + +8.536862439767637 +47.35040881722343 +428.94281237363185 +-152.215776282543 +71.34377957200898 +0 +120 +absolute + + + +0.01 +smooth + +8.536861311409554 +47.35040941075352 +428.9430264119595 +-152.41913765068324 +71.34194322072143 +0 +120 +absolute + + + +0.01 +smooth + +8.53686017832677 +47.35041000200742 +428.94323789337966 +-152.6220021767931 +71.34015656525679 +0 +120 +absolute + + + +0.01 +smooth + +8.536859040612308 +47.35041059094323 +428.94344672170985 +-152.82436815627568 +71.33842224565295 +0 +120 +absolute + + + +0.01 +smooth + +8.536857898359191 +47.350411177519035 +428.9436528007678 +-153.02623388453378 +71.33674290194794 +0 +120 +absolute + + + +0.01 +smooth + +8.536856751660444 +47.35041176169295 +428.94385603437144 +-153.2275976569706 +71.33512117417969 +0 +120 +absolute + + + +0.01 +smooth + +8.53685560060909 +47.35041234342308 +428.94405632633794 +-153.42845776898906 +71.33355970238617 +0 +120 +absolute + + + +0.01 +smooth + +8.536854445298152 +47.3504129226675 +428.9442535804854 +-153.62881251599208 +71.33206112660532 +0 +120 +absolute + + + +0.01 +smooth + +8.536853285820653 +47.350413499384324 +428.9444477006313 +-153.82866019338275 +71.33062808687511 +0 +120 +absolute + + + +0.01 +smooth + +8.536852122269618 +47.350414073531645 +428.9446385905934 +-154.02799909656403 +71.3292632232335 +0 +120 +absolute + + + +0.01 +smooth + +8.53685095473807 +47.350414645067566 +428.9448261541893 +-154.2268275209389 +71.32796917571845 +0 +120 +absolute + + + +0.01 +smooth + +8.53684978331903 +47.35041521395018 +428.94501029523667 +-154.42514376191042 +71.32674858436793 +0 +120 +absolute + + + +0.01 +smooth + +8.536848608105526 +47.350415780137595 +428.9451909175532 +-154.62294611488153 +71.3256040892199 +0 +120 +absolute + + + +0.01 +smooth + +8.536847429190576 +47.35041634358791 +428.9453679249566 +-154.8202328752552 +71.32453833031228 +0 +120 +absolute + + + +0.01 +smooth + +8.53684624666721 +47.35041690425921 +428.94554122126453 +-155.01700233843445 +71.32355394768308 +0 +120 +absolute + + + +0.01 +smooth + +8.536845060628446 +47.350417462109604 +428.9457107102947 +-155.21325279982233 +71.32265358137023 +0 +120 +absolute + + + +0.01 +smooth + +8.53684387116731 +47.3504180170972 +428.94587629586465 +-155.4089825548217 +71.32183987141171 +0 +120 +absolute + + + +0.01 +smooth + +8.536842678376823 +47.35041856918008 +428.9460378817921 +-155.60418989883567 +71.32111545784548 +0 +120 +absolute + + + +0.01 +smooth + +8.536841482350011 +47.35041911831635 +428.9461953718949 +-155.79887312726723 +71.32048298070946 +0 +120 +absolute + + + +0.01 +smooth + +8.536840283179899 +47.35041966446412 +428.94634866999036 +-155.99303053551932 +71.31994508004165 +0 +120 +absolute + + + +0.01 +smooth + +8.536839080959506 +47.35042020758147 +428.94649767989654 +-156.18666041899496 +71.31950439588 +0 +120 +absolute + + + +0.01 +smooth + +8.536837875781858 +47.3504207476265 +428.9466423054309 +-156.37976107309714 +71.31916356826247 +0 +120 +absolute + + + +0.01 +smooth + +8.536836667739978 +47.35042128455733 +428.94678245041115 +-156.5723307932289 +71.31892523722702 +0 +120 +absolute + + + +0.01 +smooth + +8.53683545692689 +47.35042181833203 +428.9469180186549 +-156.76436787479315 +71.31879204281162 +0 +120 +absolute + + + +0.01 +smooth + +8.536834243340403 +47.35042234896473 +428.94704908731086 +-156.95587355389014 +71.31876853181869 +0 +120 +absolute + + + +0.01 +smooth + +8.536833025207658 +47.35042287750708 +428.94717893639785 +-157.14690380533096 +71.31889267382242 +0 +120 +absolute + + + +0.01 +smooth + +8.536831801890761 +47.35042340433399 +428.9473087309009 +-157.33747968108054 +71.31917481677938 +0 +120 +absolute + + + +0.01 +smooth + +8.536830573470809 +47.350423929396165 +428.94743832010244 +-157.52760004503503 +71.31961022791764 +0 +120 +absolute + + + +0.01 +smooth + +8.536829340028898 +47.350424452644305 +428.94756755328496 +-157.71726376109063 +71.32019417446513 +0 +120 +absolute + + + +0.01 +smooth + +8.536828101646138 +47.35042497402913 +428.947696279731 +-157.90646969314352 +71.32092192364988 +0 +120 +absolute + + + +0.01 +smooth + +8.536826858403629 +47.35042549350136 +428.9478243487231 +-158.09521670508983 +71.32178874269985 +0 +120 +absolute + + + +0.01 +smooth + +8.53682561038247 +47.350426011011685 +428.94795160954334 +-158.2835036608257 +71.32278989884301 +0 +120 +absolute + + + +0.01 +smooth + +8.53682435766377 +47.35042652651086 +428.948077911475 +-158.47132942424747 +71.32392065930748 +0 +120 +absolute + + + +0.01 +smooth + +8.536823100328624 +47.35042703994956 +428.9482031038001 +-158.65869285925118 +71.32517629132111 +0 +120 +absolute + + + +0.01 +smooth + +8.536821838458135 +47.35042755127847 +428.94832703580084 +-158.84559282973296 +71.32655206211192 +0 +120 +absolute + + + +0.01 +smooth + +8.536820572133411 +47.35042806044839 +428.9484495567604 +-159.03202819958923 +71.32804323890797 +0 +120 +absolute + + + +0.01 +smooth + +8.536819301435546 +47.35042856740993 +428.94857051596057 +-159.2179978327159 +71.32964508893716 +0 +120 +absolute + + + +0.01 +smooth + +8.536818026445651 +47.35042907211387 +428.9486897626844 +-159.4035005930092 +71.33135287942754 +0 +120 +absolute + + + +0.01 +smooth + +8.536816747244824 +47.35042957451092 +428.9488071462142 +-159.5885353443655 +71.33316187760713 +0 +120 +absolute + + + +0.01 +smooth + +8.536815463914161 +47.35043007455174 +428.94892251583224 +-159.77310095068069 +71.33506735070382 +0 +120 +absolute + + + +0.01 +smooth + +8.536814176534772 +47.350430572187086 +428.94903572082137 +-159.95719627585115 +71.3370645659457 +0 +120 +absolute + + + +0.01 +smooth + +8.53681288518776 +47.35043106736769 +428.949146610464 +-160.140820183773 +71.33914879056073 +0 +120 +absolute + + + +0.01 +smooth + +8.536811589954223 +47.35043156004417 +428.9492550340423 +-160.32397153834236 +71.34131529177687 +0 +120 +absolute + + + +0.01 +smooth + +8.536810290915263 +47.35043205016735 +428.9493608408393 +-160.50664920345548 +71.34355933682215 +0 +120 +absolute + + + +0.01 +smooth + +8.536808988151986 +47.35043253768787 +428.949463880137 +-160.68885204300852 +71.34587619292455 +0 +120 +absolute + + + +0.01 +smooth + +8.536807681745488 +47.350433022556466 +428.94956400121816 +-160.87057892089766 +71.34826112731207 +0 +120 +absolute + + + +0.01 +smooth + +8.536806371776876 +47.35043350472385 +428.94966105336505 +-161.05182870101902 +71.35070940721268 +0 +120 +absolute + + + +0.01 +smooth + +8.536805058327252 +47.35043398414072 +428.94975488586056 +-161.2326002472688 +71.35321629985438 +0 +120 +absolute + + + +0.01 +smooth + +8.536803741477716 +47.35043446075781 +428.94984534798675 +-161.41289242354327 +71.35577707246517 +0 +120 +absolute + + + +0.01 +smooth + +8.536802421309373 +47.35043493452581 +428.94993228902644 +-161.59270409373852 +71.35838699227307 +0 +120 +absolute + + + +0.01 +smooth + +8.536801097903322 +47.350435405395444 +428.9500155582619 +-161.77203412175066 +71.361041326506 +0 +120 +absolute + + + +0.01 +smooth + +8.536799771340664 +47.35043587331743 +428.9500950049758 +-161.950881371476 +71.363735342392 +0 +120 +absolute + + + +0.01 +smooth + +8.536798441702507 +47.35043633824246 +428.95017047845045 +-162.12924470681065 +71.36646430715905 +0 +120 +absolute + + + +0.01 +smooth + +8.53679710906995 +47.35043680012125 +428.9502418279685 +-162.30712299165074 +71.36922348803515 +0 +120 +absolute + + + +0.01 +smooth + +8.536795773524094 +47.35043725890453 +428.9503089028124 +-162.48451508989257 +71.3720081522483 +0 +120 +absolute + + + +0.01 +smooth + +8.536794435146042 +47.35043771454299 +428.9503715522647 +-162.6614198654322 +71.37481356702645 +0 +120 +absolute + + + +0.01 +smooth + +8.536793094016895 +47.35043816698736 +428.9504296256077 +-162.83783618216586 +71.37763499959765 +0 +120 +absolute + + + +0.01 +smooth + +8.536791750217759 +47.35043861618833 +428.95048297212406 +-163.01376290398974 +71.38046771718984 +0 +120 +absolute + + + +0.01 +smooth + +8.53679040382973 +47.35043906209664 +428.95053144109613 +-163.18919889479997 +71.38330698703105 +0 +120 +absolute + + + +0.01 +smooth + +8.536789054933916 +47.35043950466299 +428.9505748818067 +-163.36414301849277 +71.38614807634924 +0 +120 +absolute + + + +0.01 +smooth + +8.536787703611418 +47.35043994383806 +428.9506131435379 +-163.5385941389643 +71.38898625237242 +0 +120 +absolute + + + +0.01 +smooth + +8.536786349943334 +47.350440379572596 +428.9506460755725 +-163.71255112011073 +71.39181678232859 +0 +120 +absolute + + + +0.01 +smooth + +8.536784993406805 +47.35044081234005 +428.9506749217075 +-163.88603205201292 +71.39468557341175 +0 +120 +absolute + + + +0.01 +smooth + +8.536783632516272 +47.350441243437885 +428.9507032033225 +-164.0590856265474 +71.39771889693311 +0 +120 +absolute + + + +0.01 +smooth + +8.536782267264417 +47.35044167287518 +428.9507310819698 +-164.231713435671 +71.40091873563557 +0 +120 +absolute + + + +0.01 +smooth + +8.536780897723691 +47.35044210059181 +428.9507585363371 +-164.40391453126284 +71.4042803763 +0 +120 +absolute + + + +0.01 +smooth + +8.536779523966533 +47.350442526527615 +428.9507855451116 +-164.57568796520215 +71.40779910570711 +0 +120 +absolute + + + +0.01 +smooth + +8.536778146065396 +47.350442950622465 +428.9508120869813 +-164.74703278936815 +71.41147021063779 +0 +120 +absolute + + + +0.01 +smooth + +8.536776764092723 +47.350443372816216 +428.95083814063366 +-164.91794805564012 +71.41528897787285 +0 +120 +absolute + + + +0.01 +smooth + +8.53677537812096 +47.350443793048704 +428.95086368475603 +-165.0884328158972 +71.41925069419307 +0 +120 +absolute + + + +0.01 +smooth + +8.536773988222553 +47.350444211259784 +428.9508886980362 +-165.2584861220187 +71.42335064637925 +0 +120 +absolute + + + +0.01 +smooth + +8.536772594469943 +47.35044462738931 +428.95091315916136 +-165.4281070258837 +71.42758412121218 +0 +120 +absolute + + + +0.01 +smooth + +8.536771196935584 +47.35044504137715 +428.9509370468195 +-165.59729457937152 +71.43194640547276 +0 +120 +absolute + + + +0.01 +smooth + +8.536769795691917 +47.35044545316315 +428.95096033969804 +-165.76604783436144 +71.43643278594173 +0 +120 +absolute + + + +0.01 +smooth + +8.536768390811392 +47.35044586268714 +428.9509830164844 +-165.9343658427326 +71.44103854939992 +0 +120 +absolute + + + +0.01 +smooth + +8.53676698236645 +47.35044626988901 +428.95100505586623 +-166.10224765636423 +71.44575898262812 +0 +120 +absolute + + + +0.01 +smooth + +8.536765570429539 +47.3504466747086 +428.9510264365311 +-166.26969232713552 +71.4505893724072 +0 +120 +absolute + + + +0.01 +smooth + +8.536764155073106 +47.35044707708574 +428.9510471371666 +-166.43669890692578 +71.45552500551786 +0 +120 +absolute + + + +0.01 +smooth + +8.536762736369594 +47.35044747696032 +428.95106713646004 +-166.60326644761415 +71.46056116874101 +0 +120 +absolute + + + +0.01 +smooth + +8.536761314391448 +47.350447874272156 +428.9510864130991 +-166.76939400107983 +71.4656931488574 +0 +120 +absolute + + + +0.01 +smooth + +8.536759889211119 +47.35044826896113 +428.9511049457716 +-166.93508061920213 +71.47091623264788 +0 +120 +absolute + + + +0.01 +smooth + +8.536758460901051 +47.35044866096709 +428.95112271316475 +-167.1003253538602 +71.47622570689323 +0 +120 +absolute + + + +0.01 +smooth + +8.536757029533689 +47.35044905022988 +428.9511396939663 +-167.26512725693334 +71.48161685837428 +0 +120 +absolute + + + +0.01 +smooth + +8.536755595181479 +47.35044943668936 +428.95115586686364 +-167.42948538030066 +71.48708497387184 +0 +120 +absolute + + + +0.01 +smooth + +8.536754157916866 +47.35044982028537 +428.9511712105445 +-167.5933987758415 +71.49262534016671 +0 +120 +absolute + + + +0.01 +smooth + +8.536752717812295 +47.350450200957795 +428.9511857036963 +-167.75686649543502 +71.49823324403971 +0 +120 +absolute + + + +0.01 +smooth + +8.536751274940217 +47.35045057864645 +428.95119932500666 +-167.9198875909604 +71.50390397227162 +0 +120 +absolute + + + +0.01 +smooth + +8.536749829373074 +47.350450953291215 +428.9512120531632 +-168.08246111429693 +71.50963281164329 +0 +120 +absolute + + + +0.01 +smooth + +8.536748381183312 +47.35045132483194 +428.9512238668533 +-168.24458611732382 +71.5154150489355 +0 +120 +absolute + + + +0.01 +smooth + +8.536746930443377 +47.350451693208456 +428.95123474476463 +-168.40626165192026 +71.52124597092907 +0 +120 +absolute + + + +0.01 +smooth + +8.536745477225715 +47.350452058360645 +428.95124466558474 +-168.56748676996546 +71.52712086440482 +0 +120 +absolute + + + +0.01 +smooth + +8.536744021602772 +47.350452420228336 +428.95125360800114 +-168.72826052333875 +71.53303501614354 +0 +120 +absolute + + + +0.01 +smooth + +8.536742563646992 +47.350452778751404 +428.9512615507014 +-168.8885819639192 +71.53898371292605 +0 +120 +absolute + + + +0.01 +smooth + +8.536741103430826 +47.350453133869685 +428.95126847237316 +-169.04845014358614 +71.54496224153317 +0 +120 +absolute + + + +0.01 +smooth + +8.536739641026715 +47.35045348552305 +428.95127435170383 +-169.20786411421872 +71.55096588874571 +0 +120 +absolute + + + +0.01 +smooth + +8.536738176507107 +47.35045383365133 +428.95127916738113 +-169.36682292769623 +71.55698994134444 +0 +120 +absolute + + + +0.01 +smooth + +8.536736709944448 +47.35045417819438 +428.95128289809236 +-169.5253256358978 +71.56302968611021 +0 +120 +absolute + + + +0.01 +smooth + +8.536735241411183 +47.35045451909208 +428.9512855225253 +-169.68337129070278 +71.56908040982381 +0 +120 +absolute + + + +0.01 +smooth + +8.536733770979756 +47.35045485628426 +428.9512870193675 +-169.8409589439903 +71.57513739926608 +0 +120 +absolute + + + +0.01 +smooth + +8.536732298684022 +47.350455189761114 +428.95128731540154 +-169.99808903042498 +71.58119835386537 +0 +120 +absolute + + + +0.01 +smooth + +8.536730823321236 +47.35045552111961 +428.9512847110563 +-170.15480619327593 +71.587338719193 +0 +120 +absolute + + + +0.01 +smooth + +8.536729344340666 +47.35045585108892 +428.9512784833275 +-170.3111314581297 +71.59359439967749 +0 +120 +absolute + + + +0.01 +smooth + +8.536727861808455 +47.350456179590765 +428.9512687550651 +-170.46706370799313 +71.59996293801734 +0 +120 +absolute + + + +0.01 +smooth + +8.536726375790739 +47.350456506546855 +428.95125564911876 +-170.62260182587278 +71.60644187691099 +0 +120 +absolute + + + +0.01 +smooth + +8.536724886353651 +47.350456831878894 +428.9512392883382 +-170.77774469477546 +71.61302875905692 +0 +120 +absolute + + + +0.01 +smooth + +8.536723393563323 +47.35045715550858 +428.951219795573 +-170.9324911977078 +71.61972112715355 +0 +120 +absolute + + + +0.01 +smooth + +8.5367218974859 +47.350457477357665 +428.9511972936733 +-171.08684021767652 +71.62651652389941 +0 +120 +absolute + + + +0.01 +smooth + +8.53672039818752 +47.35045779734783 +428.9511719054887 +-171.24079063768838 +71.63341249199291 +0 +120 +absolute + + + +0.01 +smooth + +8.536718895734312 +47.3504581154008 +428.95114375386885 +-171.39434134075012 +71.64040657413254 +0 +120 +absolute + + + +0.01 +smooth + +8.536717390192415 +47.35045843143825 +428.9511129616635 +-171.5474912098682 +71.64749631301676 +0 +120 +absolute + + + +0.01 +smooth + +8.536715881627968 +47.350458745381935 +428.9510796517227 +-171.7002391280496 +71.65467925134405 +0 +120 +absolute + + + +0.01 +smooth + +8.536714370107108 +47.350459057153564 +428.9510439468958 +-171.8525839783009 +71.66195293181285 +0 +120 +absolute + + + +0.01 +smooth + +8.536712855695967 +47.35045936667483 +428.9510059700329 +-172.00452464362883 +71.66931489712164 +0 +120 +absolute + + + +0.01 +smooth + +8.536711338460684 +47.35045967386744 +428.9509658439835 +-172.15606000704008 +71.67676268996885 +0 +120 +absolute + + + +0.01 +smooth + +8.536709818467397 +47.35045997865313 +428.95092369159744 +-172.30718895154143 +71.68429385305296 +0 +120 +absolute + + + +0.01 +smooth + +8.536708295782239 +47.350460280953584 +428.95087963572456 +-172.45791036013944 +71.69190592907245 +0 +120 +absolute + + + +0.01 +smooth + +8.536706770471351 +47.35046058069054 +428.95083379921454 +-172.60822311584093 +71.69959646072579 +0 +120 +absolute + + + +0.01 +smooth + +8.536705242600867 +47.35046087778568 +428.9507863049171 +-172.75812610165258 +71.7073629907114 +0 +120 +absolute + + + +0.01 +smooth + +8.536703712236921 +47.35046117216072 +428.950737275682 +-172.907618200581 +71.71520306172776 +0 +120 +absolute + + + +0.01 +smooth + +8.536702179445653 +47.35046146373739 +428.9506868343591 +-173.05669829563303 +71.72311421647338 +0 +120 +absolute + + + +0.01 +smooth + +8.536700644293202 +47.35046175243738 +428.950635103798 +-173.2053652698153 +71.73109399764665 +0 +120 +absolute + + + +0.01 +smooth + +8.536699106845699 +47.35046203818244 +428.9505822068486 +-173.35361800613455 +71.73913994794609 +0 +120 +absolute + + + +0.01 +smooth + +8.536697567169284 +47.35046232089423 +428.95052826636055 +-173.50145538759742 +71.74724961007013 +0 +120 +absolute + + + +0.01 +smooth + +8.536696025330091 +47.350462600494495 +428.95047340518363 +-173.64887629721076 +71.75542052671726 +0 +120 +absolute + + + +0.01 +smooth + +8.536694481394258 +47.35046287690492 +428.95041774616766 +-173.79587961798111 +71.76365024058592 +0 +120 +absolute + + + +0.01 +smooth + +8.536692935427922 +47.35046315004725 +428.95036141216235 +-173.94246423291526 +71.77193629437458 +0 +120 +absolute + + + +0.01 +smooth + +8.53669138749722 +47.350463419843166 +428.9503045260174 +-174.08862902501988 +71.78027623078171 +0 +120 +absolute + + + +0.01 +smooth + +8.536689837668286 +47.35046368621439 +428.9502472105827 +-174.23437287730172 +71.78866759250577 +0 +120 +absolute + + + +0.01 +smooth + +8.536688286007259 +47.350463949082645 +428.9501895887079 +-174.37969467276744 +71.79710792224523 +0 +120 +absolute + + + +0.01 +smooth + +8.536686732580275 +47.350464208369615 +428.9501317832427 +-174.5245932944237 +71.80559476269855 +0 +120 +absolute + + + +0.01 +smooth + +8.53668517745347 +47.35046446399704 +428.950073917037 +-174.66906762527736 +71.81412565656416 +0 +120 +absolute + + + +0.01 +smooth + +8.536683620692981 +47.350464715886616 +428.95001611294043 +-174.81311654833496 +71.82269814654057 +0 +120 +absolute + + + +0.01 +smooth + +8.536682062364944 +47.35046496396006 +428.94995849380285 +-174.9567389466033 +71.83130977532625 +0 +120 +absolute + + + +0.01 +smooth + +8.536680502535496 +47.35046520813907 +428.94990118247387 +-175.09993370308905 +71.83995808561961 +0 +120 +absolute + + + +0.01 +smooth + +8.536678941270774 +47.350465448345375 +428.9498443018034 +-175.2426997007989 +71.84864062011916 +0 +120 +absolute + + + +0.01 +smooth + +8.536677378636913 +47.35046568450066 +428.94978797464114 +-175.38503582273958 +71.85735492152335 +0 +120 +absolute + + + +0.01 +smooth + +8.53667581470005 +47.350465916526666 +428.9497323238369 +-175.52694095191782 +71.86609853253063 +0 +120 +absolute + + + +0.01 +smooth + +8.536674249147588 +47.350466145139286 +428.94967679552974 +-175.6684307277901 +71.87488420101623 +0 +120 +absolute + + + +0.01 +smooth + +8.536672680812671 +47.35046637282323 +428.9496192883723 +-175.8095582789785 +71.88375931216201 +0 +120 +absolute + + + +0.01 +smooth + +8.536671109662302 +47.35046659966028 +428.9495597032744 +-175.95032622636788 +71.89272611235752 +0 +120 +absolute + + + +0.01 +smooth + +8.536669535758078 +47.35046682553299 +428.94949810932786 +-176.09073299321682 +71.9017830637244 +0 +120 +absolute + + + +0.01 +smooth + +8.536667959161596 +47.350467050323886 +428.9494345756246 +-176.2307770027838 +71.91092862838433 +0 +120 +absolute + + + +0.01 +smooth + +8.53666637993446 +47.35046727391551 +428.9493691712566 +-176.37045667832746 +71.920161268459 +0 +120 +absolute + + + +0.01 +smooth + +8.536664798138267 +47.35046749619038 +428.94930196531544 +-176.50977044310622 +71.92947944607006 +0 +120 +absolute + + + +0.01 +smooth + +8.536663213834617 +47.35046771703106 +428.9492330268933 +-176.64871672037867 +71.93888162333926 +0 +120 +absolute + + + +0.01 +smooth + +8.536661627085106 +47.35046793632005 +428.94916242508214 +-176.78729393340336 +71.94836626238822 +0 +120 +absolute + + + +0.01 +smooth + +8.536660037951336 +47.35046815393989 +428.9490902289735 +-176.92550050543875 +71.95793182533863 +0 +120 +absolute + + + +0.01 +smooth + +8.536658446494911 +47.35046836977314 +428.94901650765973 +-177.06333485974358 +71.96757677431223 +0 +120 +absolute + + + +0.01 +smooth + +8.536656852777424 +47.35046858370231 +428.9489413302323 +-177.2007954195761 +71.9772995714306 +0 +120 +absolute + + + +0.01 +smooth + +8.536655256860474 +47.35046879560993 +428.9488647657833 +-177.33788060819504 +71.98709867881549 +0 +120 +absolute + + + +0.01 +smooth + +8.536653658805667 +47.350469005378564 +428.9487868834048 +-177.47458884885899 +71.99697255858857 +0 +120 +absolute + + + +0.01 +smooth + +8.536652058674594 +47.3504692128907 +428.9487077521882 +-177.61091856482622 +72.00691967287146 +0 +120 +absolute + + + +0.01 +smooth + +8.536650456528863 +47.35046941802891 +428.9486274412258 +-177.74686817935554 +72.01693848378594 +0 +120 +absolute + + + +0.01 +smooth + +8.536648852430067 +47.350469620675725 +428.9485460196097 +-177.88243611570542 +72.02702745345364 +0 +120 +absolute + + + +0.01 +smooth + +8.536647246439804 +47.35046982071365 +428.948463556431 +-178.0176207971343 +72.03718504399622 +0 +120 +absolute + + + +0.01 +smooth + +8.53664563861968 +47.35047001802524 +428.94838012078236 +-178.15242064690077 +72.04740971753539 +0 +120 +absolute + + + +0.01 +smooth + +8.536644029031292 +47.35047021249305 +428.9482957817554 +-178.28683408826342 +72.05769993619283 +0 +120 +absolute + + + +0.01 +smooth + +8.536642417736235 +47.35047040399957 +428.94821060844185 +-178.42085954448078 +72.0680541620902 +0 +120 +absolute + + + +0.01 +smooth + +8.536640804796114 +47.35047059242736 +428.9481246699338 +-178.55449543881127 +72.07847085734922 +0 +120 +absolute + + + +0.01 +smooth + +8.536639190272526 +47.35047077765895 +428.9480380353232 +-178.68774019451357 +72.0889484840915 +0 +120 +absolute + + + +0.01 +smooth + +8.536637574227068 +47.35047095957687 +428.9479507737017 +-178.82059223484615 +72.0994855044388 +0 +120 +absolute + + + +0.01 +smooth + +8.536635956721344 +47.35047113806365 +428.94786295416134 +-178.95304998306756 +72.11008038051274 +0 +120 +absolute + + + +0.01 +smooth + +8.536634337816949 +47.35047131300183 +428.94777464579397 +-179.08511186243632 +72.12073157443503 +0 +120 +absolute + + + +0.01 +smooth + +8.536632717575486 +47.35047148427395 +428.9476859176916 +-179.21677629621098 +72.13143754832734 +0 +120 +absolute + + + +0.01 +smooth + +8.536631096058551 +47.35047165176253 +428.94759683894597 +-179.34804170765014 +72.14219676431136 +0 +120 +absolute + + + +0.01 +smooth + +8.536629473327746 +47.35047181535013 +428.9475074786491 +-179.47890652001217 +72.15300768450876 +0 +120 +absolute + + + +0.01 +smooth + +8.53662784944467 +47.35047197491925 +428.9474179058928 +-179.6093691565558 +72.16386877104124 +0 +120 +absolute + + + +0.01 +smooth + +8.536626224470922 +47.350472130352436 +428.9473281897689 +-179.7394280405395 +72.17477848603045 +0 +120 +absolute + + + +0.01 +smooth + +8.536624598468102 +47.350472281532234 +428.94723839936944 +-179.8690815952217 +72.18573529159808 +0 +120 +absolute + + + +0.01 +smooth + +8.536622971497806 +47.35047242834116 +428.9471486037862 +-179.9983282438611 +72.19673764986582 +0 +120 +absolute + + + +0.01 +smooth + +8.536621343621638 +47.350472570661765 +428.94705887211114 +-180.12716640971618 +72.20778402295534 +0 +120 +absolute + + + +0.01 +smooth + +8.536619714901194 +47.35047270837657 +428.94696927343625 +-180.25559451604545 +72.21887287298833 +0 +120 +absolute + + + +0.01 +smooth + +8.536618085398075 +47.350472841368116 +428.94687987685313 +-180.38361098610744 +72.23000266208648 +0 +120 +absolute + + + +0.01 +smooth + +8.536616455173881 +47.350472969518925 +428.94679075145393 +-180.5112142431607 +72.24117185237144 +0 +120 +absolute + + + +0.01 +smooth + +8.536614824276459 +47.35047309276859 +428.9467019535341 +-180.63840350309172 +72.25237930571471 +0 +120 +absolute + + + +0.01 +smooth + +8.536613191814569 +47.350473214922374 +428.94661265912 +-180.76523193863966 +72.26365127509197 +0 +120 +absolute + + + +0.01 +smooth + +8.5366115572661 +47.35047333816126 +428.9465223683891 +-180.8917308894861 +72.27500355413042 +0 +120 +absolute + + + +0.01 +smooth + +8.53660992068949 +47.35047346224039 +428.9464311181211 +-181.01789812491828 +72.28643511028842 +0 +120 +absolute + + + +0.01 +smooth + +8.53660828214316 +47.350473586914866 +428.9463389450954 +-181.1437314142231 +72.29794491102442 +0 +120 +absolute + + + +0.01 +smooth + +8.536606641685534 +47.35047371193978 +428.94624588609116 +-181.26922852668778 +72.30953192379665 +0 +120 +absolute + + + +0.01 +smooth + +8.53660499937504 +47.35047383707025 +428.94615197788744 +-181.3943872315992 +72.32119511606354 +0 +120 +absolute + + + +0.01 +smooth + +8.536603355270108 +47.35047396206137 +428.94605725726393 +-181.5192052982446 +72.33293345528342 +0 +120 +absolute + + + +0.01 +smooth + +8.53660170942916 +47.350474086668285 +428.9459617609997 +-181.64368049591096 +72.34474590891466 +0 +120 +absolute + + + +0.01 +smooth + +8.536600061910626 +47.35047421064606 +428.94586552587396 +-181.76781059388537 +72.35663144441561 +0 +120 +absolute + + + +0.01 +smooth + +8.536598412772927 +47.350474333749844 +428.94576858866617 +-181.8915933614549 +72.36858902924465 +0 +120 +absolute + + + +0.01 +smooth + +8.536596762074492 +47.35047445573472 +428.94567098615556 +-182.0150265679066 +72.38061763086006 +0 +120 +absolute + + + +0.01 +smooth + +8.536595109873748 +47.350474576355786 +428.94557275512153 +-182.13810798252757 +72.3927162167203 +0 +120 +absolute + + + +0.01 +smooth + +8.536593456229124 +47.350474695368185 +428.9454739323434 +-182.26083537460485 +72.40488375428367 +0 +120 +absolute + + + +0.01 +smooth + +8.53659180119904 +47.350474812527004 +428.9453745546002 +-182.38320651342556 +72.41711921100853 +0 +120 +absolute + + + +0.01 +smooth + +8.536590144841925 +47.35047492758736 +428.9452746586716 +-182.50521916827677 +72.42942155435324 +0 +120 +absolute + + + +0.01 +smooth + +8.536588487216209 +47.35047504030437 +428.94517428133673 +-182.6268711084455 +72.44178975177618 +0 +120 +absolute + + + +0.01 +smooth + +8.536586828380315 +47.35047515043312 +428.9450734593749 +-182.74816010321885 +72.45422277073568 +0 +120 +absolute + + + +0.01 +smooth + +8.53658516839267 +47.35047525772873 +428.9449722295654 +-182.86908392188388 +72.46671957869012 +0 +120 +absolute + + + +0.01 +smooth + +8.536583507311699 +47.35047536194632 +428.94487062868745 +-182.98964033372766 +72.47927914309783 +0 +120 +absolute + + + +0.01 +smooth + +8.536581845195828 +47.350475462840976 +428.9447686935205 +-183.10982710803725 +72.49190043141716 +0 +120 +absolute + + + +0.01 +smooth + +8.536580182103487 +47.35047556016782 +428.94466646084385 +-183.2296420140997 +72.5045824111065 +0 +120 +absolute + + + +0.01 +smooth + +8.536578518093098 +47.35047565368197 +428.9445639674366 +-183.3490828212022 +72.5173240496242 +0 +120 +absolute + + + +0.01 +smooth + +8.536576853223089 +47.35047574313852 +428.94446125007823 +-183.4681472986317 +72.53012431442859 +0 +120 +absolute + + + +0.01 +smooth + +8.53657518755189 +47.35047582829259 +428.94435834554804 +-183.58683321567526 +72.54298217297807 +0 +120 +absolute + + + +0.01 +smooth + +8.536573521137921 +47.35047590889927 +428.9442552906253 +-183.70513834162 +72.55589659273095 +0 +120 +absolute + + + +0.01 +smooth + +8.536571854039613 +47.35047598471369 +428.94415212208924 +-183.82306044575304 +72.56886654114561 +0 +120 +absolute + + + +0.01 +smooth + +8.536570186315387 +47.350476055490944 +428.94404887671925 +-183.94059729736134 +72.58189098568042 +0 +120 +absolute + + + +0.01 +smooth + +8.536568518023676 +47.350476120986144 +428.9439455912946 +-184.057746665732 +72.59496889379372 +0 +120 +absolute + + + +0.01 +smooth + +8.536566849222902 +47.35047618095441 +428.9438423025946 +-184.17450632015215 +72.60809923294387 +0 +120 +absolute + + + +0.01 +smooth + +8.536565179971493 +47.350476235150836 +428.94373904739854 +-184.2908740299088 +72.62128097058923 +0 +120 +absolute + + + +0.01 +smooth + +8.536563510327877 +47.35047628333055 +428.94363586248573 +-184.40684756428905 +72.63451307418815 +0 +120 +absolute + + + +0.01 +smooth + +8.536561840350476 +47.350476325248636 +428.9435327846354 +-184.52242469258 +72.647794511199 +0 +120 +absolute + + + +0.01 +smooth + +8.536560170097719 +47.35047636066022 +428.9434298506271 +-184.63760318406867 +72.66112424908012 +0 +120 +absolute + + + +0.01 +smooth + +8.53655849962803 +47.350476389320406 +428.9433270972398 +-184.75238080804206 +72.67450125528987 +0 +120 +absolute + + + +0.01 +smooth + +8.53655682899984 +47.35047641098429 +428.94322456125303 +-184.8667553337874 +72.68792449728662 +0 +120 +absolute + + + +0.01 +smooth + +8.536555158271572 +47.350476425407 +428.94312227944596 +-184.98072453059171 +72.7013929425287 +0 +120 +absolute + + + +0.01 +smooth + +8.53655348750165 +47.350476432343655 +428.94302028859795 +-185.09428616774196 +72.7149055584745 +0 +120 +absolute + + + +0.01 +smooth + +8.536551816488059 +47.35047643290563 +428.94291848613983 +-185.20745746243603 +72.72846715058066 +0 +120 +absolute + + + +0.01 +smooth + +8.536550144217607 +47.35047643252968 +428.9428163307244 +-185.32031582056487 +72.74210080968493 +0 +120 +absolute + + + +0.01 +smooth + +8.53654847063091 +47.350476431814805 +428.942713785221 +-185.4328669342427 +72.75580837786563 +0 +120 +absolute + + + +0.01 +smooth + +8.536546795784293 +47.350476430763884 +428.9426108741043 +-185.5451078323234 +72.76958911020543 +0 +120 +absolute + + + +0.01 +smooth + +8.536545119734077 +47.35047642937973 +428.94250762184896 +-185.6570355436606 +72.78344226178679 +0 +120 +absolute + + + +0.01 +smooth + +8.536543442536578 +47.35047642766519 +428.94240405292885 +-185.7686470971079 +72.79736708769218 +0 +120 +absolute + + + +0.01 +smooth + +8.53654176424812 +47.35047642562313 +428.942300191819 +-185.87993952151905 +72.8113628430042 +0 +120 +absolute + + + +0.01 +smooth + +8.536540084925022 +47.35047642325635 +428.9421960629933 +-185.9909098457478 +72.8254287828053 +0 +120 +absolute + + + +0.01 +smooth + +8.536538404623608 +47.35047642056772 +428.9420916909263 +-186.10155509864768 +72.83956416217806 +0 +120 +absolute + + + +0.01 +smooth + +8.536536723400195 +47.350476417560095 +428.9419871000926 +-186.2118723090725 +72.85376823620498 +0 +120 +absolute + + + +0.01 +smooth + +8.536535041311101 +47.35047641423629 +428.9418823149664 +-186.32185850587587 +72.86804025996855 +0 +120 +absolute + + + +0.01 +smooth + +8.536533358412653 +47.35047641059913 +428.94177736002206 +-186.43151071791146 +72.8823794885513 +0 +120 +absolute + + + +0.01 +smooth + +8.536531674761168 +47.35047640665151 +428.94167225973416 +-186.54082597403297 +72.89678517703574 +0 +120 +absolute + + + +0.01 +smooth + +8.536529990412964 +47.35047640239622 +428.94156703857703 +-186.6498013030941 +72.91125658050444 +0 +120 +absolute + + + +0.01 +smooth + +8.536528305424364 +47.35047639783613 +428.941461721025 +-186.75843373394858 +72.92579295403986 +0 +120 +absolute + + + +0.01 +smooth + +8.53652661985169 +47.35047639297409 +428.9413563315526 +-186.86672029544994 +72.94039355272453 +0 +120 +absolute + + + +0.01 +smooth + +8.53652493375126 +47.350476387812904 +428.94125089463415 +-186.974658016452 +72.955057631641 +0 +120 +absolute + + + +0.01 +smooth + +8.536523247179394 +47.35047638235544 +428.94114543474404 +-187.08224392580837 +72.96978444587174 +0 +120 +absolute + + + +0.01 +smooth + +8.536521560192414 +47.35047637660453 +428.9410399763568 +-187.18947505237276 +72.98457325049932 +0 +120 +absolute + + + +0.01 +smooth + +8.53651987284664 +47.35047637056303 +428.9409345439467 +-187.29634842499883 +72.99942330060621 +0 +120 +absolute + + + +0.01 +smooth + +8.536518185198393 +47.350476364233785 +428.9408291619882 +-187.40286107254028 +73.01433385127498 +0 +120 +absolute + + + +0.01 +smooth + +8.536516497303992 +47.35047635761961 +428.9407238549556 +-187.5090100238508 +73.0293041575881 +0 +120 +absolute + + + +0.01 +smooth + +8.53651480921976 +47.350476350723355 +428.9406186473235 +-187.614792307784 +73.04433347462813 +0 +120 +absolute + + + +0.01 +smooth + +8.536513121002013 +47.350476343547875 +428.9405135635661 +-187.72020495319367 +73.05942105747755 +0 +120 +absolute + + + +0.01 +smooth + +8.536511432707076 +47.350476336096 +428.94040862815797 +-187.8252449889334 +73.07456616121891 +0 +120 +absolute + + + +0.01 +smooth + +8.536509744391267 +47.350476328370576 +428.94030386557347 +-187.92990944385693 +73.08976804093471 +0 +120 +absolute + + + +0.01 +smooth + +8.536508056110907 +47.350476320374455 +428.94019930028696 +-188.03419534681788 +73.10502595170747 +0 +120 +absolute + + + +0.01 +smooth + +8.536506367922316 +47.350476312110445 +428.94009495677295 +-188.13809972666996 +73.1203391486197 +0 +120 +absolute + + + +0.01 +smooth + +8.536504679881816 +47.35047630358143 +428.93999085950566 +-188.2416196122669 +73.13570688675397 +0 +120 +absolute + + + +0.01 +smooth + +8.536502992045724 +47.35047629479021 +428.9398870329596 +-188.3447520324623 +73.15112842119274 +0 +120 +absolute + + + +0.01 +smooth + +8.536501304470365 +47.350476285739674 +428.9397835016091 +-188.44749401610989 +73.16660300701854 +0 +120 +absolute + + + +0.01 +smooth + +8.536499617212055 +47.350476276432616 +428.9396802899287 +-188.54984259206338 +73.18212989931389 +0 +120 +absolute + + + +0.01 +smooth + +8.53649793032712 +47.35047626687191 +428.93957742239274 +-188.65179478917636 +73.19770835316133 +0 +120 +absolute + + + +0.01 +smooth + +8.536496243871873 +47.350476257060386 +428.9394749234756 +-188.75334763630258 +73.21333762364337 +0 +120 +absolute + + + +0.01 +smooth + +8.53649455790264 +47.350476247000884 +428.9393728176517 +-188.85449816229567 +73.2290169658425 +0 +120 +absolute + + + +0.01 +smooth + +8.53649287247574 +47.35047623669624 +428.9392711293954 +-188.95524339600937 +73.24474563484128 +0 +120 +absolute + + + +0.01 +smooth + +8.536491187647492 +47.35047622614932 +428.9391698831813 +-189.0555803662973 +73.2605228857222 +0 +120 +absolute + + + +0.01 +smooth + +8.536489503471127 +47.35047621534704 +428.93906910226417 +-189.15550639148725 +73.27634803072995 +0 +120 +absolute + + + +0.01 +smooth + +8.536487819219333 +47.35047620031175 +428.9389685014567 +-189.25509159888682 +73.29223481176962 +0 +120 +absolute + + + +0.01 +smooth + +8.536486134340471 +47.35047617812789 +428.93886786106526 +-189.35438913002776 +73.30819379950636 +0 +120 +absolute + + + +0.01 +smooth + +8.536484448889585 +47.35047614903164 +428.93876719952834 +-189.45339528350715 +73.32422437981579 +0 +120 +absolute + + + +0.01 +smooth + +8.536482762921716 +47.350476113259234 +428.938666535285 +-189.5521063579224 +73.34032593857361 +0 +120 +absolute + + + +0.01 +smooth + +8.536481076491919 +47.35047607104688 +428.9385658867741 +-189.6505186518707 +73.35649786165553 +0 +120 +absolute + + + +0.01 +smooth + +8.536479389655234 +47.35047602263078 +428.93846527243454 +-189.74862846394927 +73.37273953493718 +0 +120 +absolute + + + +0.01 +smooth + +8.536477702466708 +47.35047596824717 +428.93836471070495 +-189.8464320927553 +73.3890503442942 +0 +120 +absolute + + + +0.01 +smooth + +8.536476014981394 +47.35047590813228 +428.93826422002485 +-189.94392583688625 +73.40542967560236 +0 +120 +absolute + + + +0.01 +smooth + +8.536474327254336 +47.3504758425223 +428.9381638188325 +-190.04110599493924 +73.42187691473724 +0 +120 +absolute + + + +0.01 +smooth + +8.536472639340577 +47.35047577165347 +428.93806352556715 +-190.13796886551143 +73.43839144757459 +0 +120 +absolute + + + +0.01 +smooth + +8.53647095129517 +47.350475695762 +428.9379633586674 +-190.23451074720023 +73.45497265999003 +0 +120 +absolute + + + +0.01 +smooth + +8.536469263173156 +47.3504756150841 +428.93786333657243 +-190.33072793860288 +73.47161993785926 +0 +120 +absolute + + + +0.01 +smooth + +8.536467575029587 +47.35047552985599 +428.9377634777208 +-190.42661673831645 +73.48833266705795 +0 +120 +absolute + + + +0.01 +smooth + +8.536465886919508 +47.35047544031392 +428.93766380055195 +-190.5221734449385 +73.50511023346178 +0 +120 +absolute + + + +0.01 +smooth + +8.536464198897963 +47.350475346694054 +428.9375643235042 +-190.6173943570659 +73.52195202294638 +0 +120 +absolute + + + +0.01 +smooth + +8.536462511020005 +47.350475249232645 +428.93746506501657 +-190.71227577329617 +73.53885742138749 +0 +120 +absolute + + + +0.01 +smooth + +8.536460823340676 +47.35047514816591 +428.93736604352824 +-190.80681399222655 +73.55582581466076 +0 +120 +absolute + + + +0.01 +smooth + +8.536459135915024 +47.350475043730064 +428.9372672774779 +-190.9010053124542 +73.57285658864187 +0 +120 +absolute + + + +0.01 +smooth + +8.536457448798096 +47.35047493616131 +428.9371687853043 +-190.99484603257642 +73.58994912920647 +0 +120 +absolute + + + +0.01 +smooth + +8.536455762044938 +47.350474825695876 +428.9370705854465 +-191.08833245119044 +73.60710282223026 +0 +120 +absolute + + + +0.01 +smooth + +8.536454075710598 +47.350474712569984 +428.93697269634345 +-191.18146086689353 +73.62431705358888 +0 +120 +absolute + + + +0.01 +smooth + +8.536452389850124 +47.35047459701984 +428.93687513643374 +-191.27422757828288 +73.64159120915805 +0 +120 +absolute + + + +0.01 +smooth + +8.53645070451856 +47.35047447928169 +428.93677792415656 +-191.36662888395574 +73.6589246748134 +0 +120 +absolute + + + +0.01 +smooth + +8.536449019770956 +47.350474359591715 +428.9366810779507 +-191.45866108250948 +73.67631683643066 +0 +120 +absolute + + + +0.01 +smooth + +8.536447335662356 +47.35047423818615 +428.93658461625506 +-191.55032047254127 +73.69376707988545 +0 +120 +absolute + + + +0.01 +smooth + +8.536445652247806 +47.350474115301225 +428.9364885575085 +-191.6416033526484 +73.71127479105347 +0 +120 +absolute + + + +0.01 +smooth + +8.536443969582358 +47.350473991173125 +428.93639292014984 +-191.73250602142804 +73.72883935581038 +0 +120 +absolute + + + +0.01 +smooth + +8.536442287721055 +47.35047386603811 +428.9362977226182 +-191.82302477747749 +73.74646016003189 +0 +120 +absolute + + + +0.01 +smooth + +8.536440606718944 +47.35047374013236 +428.93620298335213 +-191.913155919394 +73.76413658959362 +0 +120 +absolute + + + +0.01 +smooth + +8.536438926631075 +47.35047361369212 +428.9361087207908 +-192.00289574577482 +73.78186803037127 +0 +120 +absolute + + + +0.01 +smooth + +8.53643724751249 +47.3504734869536 +428.93601495337316 +-192.09224055521724 +73.79965386824054 +0 +120 +absolute + + + +0.01 +smooth + +8.53643556941824 +47.350473360153 +428.93592169953774 +-192.18118664631845 +73.81749348907707 +0 +120 +absolute + + + +0.01 +smooth + +8.53643389240337 +47.35047323352656 +428.93582897772365 +-192.2697303176757 +73.83538627875654 +0 +120 +absolute + + + +0.01 +smooth + +8.536432216522925 +47.35047310731049 +428.93573680636985 +-192.35786786788628 +73.85333162315465 +0 +120 +absolute + + + +0.01 +smooth + +8.536430541831956 +47.350472981741 +428.93564520391504 +-192.44559559554745 +73.87132890814705 +0 +120 +absolute + + + +0.01 +smooth + +8.536428868385508 +47.35047285705433 +428.9355541887983 +-192.53290979925634 +73.8893775196094 +0 +120 +absolute + + + +0.01 +smooth + +8.536427196238627 +47.350472733486676 +428.9354637794584 +-192.61980677761042 +73.90747684341738 +0 +120 +absolute + + + +0.01 +smooth + +8.53642552525009 +47.35047261049794 +428.93537392600996 +-192.70630466236807 +73.92562955204058 +0 +120 +absolute + + + +0.01 +smooth + +8.536423854441207 +47.3504724841823 +428.93528428588866 +-192.7925144612295 +73.9438523378782 +0 +120 +absolute + + + +0.01 +smooth + +8.536422183716136 +47.35047235404813 +428.9351948221883 +-192.87844855887323 +73.96214710446397 +0 +120 +absolute + + + +0.01 +smooth + +8.53642051312927 +47.3504722201932 +428.93510555019833 +-192.9641026002381 +73.98051323908429 +0 +120 +absolute + + + +0.01 +smooth + +8.536418842735022 +47.350472082715214 +428.93501648520896 +-193.04947223026318 +73.99895012902567 +0 +120 +absolute + + + +0.01 +smooth + +8.536417172587788 +47.350471941711945 +428.93492764251 +-193.1345530938872 +74.01745716157453 +0 +120 +absolute + + + +0.01 +smooth + +8.536415502741972 +47.35047179728114 +428.9348390373915 +-193.21934083604933 +74.03603372401736 +0 +120 +absolute + + + +0.01 +smooth + +8.536413833251979 +47.35047164952052 +428.9347506851435 +-193.30383110168847 +74.05467920364062 +0 +120 +absolute + + + +0.01 +smooth + +8.536412164172209 +47.35047149852785 +428.93466260105583 +-193.38801953574347 +74.07339298773076 +0 +120 +absolute + + + +0.01 +smooth + +8.53641049555706 +47.350471344400866 +428.9345748004186 +-193.47190178315336 +74.09217446357421 +0 +120 +absolute + + + +0.01 +smooth + +8.536408827460944 +47.35047118723733 +428.9344872985218 +-193.5554734888572 +74.11102301845752 +0 +120 +absolute + + + +0.01 +smooth + +8.536407159938253 +47.35047102713496 +428.93440011065485 +-193.63873029779361 +74.12993803966701 +0 +120 +absolute + + + +0.01 +smooth + +8.536405493043397 +47.350470864191514 +428.93431325210827 +-193.72166785490182 +74.14891891448926 +0 +120 +absolute + + + +0.01 +smooth + +8.536403826830774 +47.35047069850472 +428.9342267381718 +-193.80428180512075 +74.16796503021065 +0 +120 +absolute + + + +0.01 +smooth + +8.536402161354786 +47.35047053017234 +428.93414058413543 +-193.88656779338925 +74.18707577411772 +0 +120 +absolute + + + +0.01 +smooth + +8.536400496669836 +47.350470359292096 +428.93405480528907 +-193.96852146464624 +74.20625053349684 +0 +120 +absolute + + + +0.01 +smooth + +8.536398832830331 +47.35047018596178 +428.9339694169229 +-194.05013846383085 +74.22548869563457 +0 +120 +absolute + + + +0.01 +smooth + +8.536397169890664 +47.350470010279075 +428.93388443432633 +-194.13141443588182 +74.24478964781726 +0 +120 +absolute + + + +0.01 +smooth + +8.536395507905246 +47.35046983234177 +428.9337998727899 +-194.21234502573822 +74.26415277733143 +0 +120 +absolute + + + +0.01 +smooth + +8.536393846928474 +47.35046965224758 +428.93371574760323 +-194.292925878339 +74.28357747146354 +0 +120 +absolute + + + +0.01 +smooth + +8.536392187014753 +47.35046947009427 +428.9336320740564 +-194.37315263862305 +74.30306311750005 +0 +120 +absolute + + + +0.01 +smooth + +8.536390528218483 +47.350469285979564 +428.93354886743936 +-194.45302095152937 +74.3226091027274 +0 +120 +absolute + + + +0.01 +smooth + +8.536388870594068 +47.350469100001234 +428.933466143042 +-194.53252646199684 +74.34221481443207 +0 +120 +absolute + + + +0.01 +smooth + +8.53638721419591 +47.35046891225699 +428.9333839161543 +-194.61166481496446 +74.3618796399005 +0 +120 +absolute + + + +0.01 +smooth + +8.536385559078413 +47.350468722844596 +428.9333022020662 +-194.69043165537113 +74.38160296641915 +0 +120 +absolute + + + +0.01 +smooth + +8.536383905295974 +47.3504685318618 +428.9332210160677 +-194.76882262815587 +74.4013841812745 +0 +120 +absolute + + + +0.01 +smooth + +8.536382252903 +47.35046833940633 +428.9331403734486 +-194.8468333782576 +74.42122267175299 +0 +120 +absolute + + + +0.01 +smooth + +8.53638060195389 +47.35046814557595 +428.93306028949917 +-194.92445955061524 +74.44111782514109 +0 +120 +absolute + + + +0.01 +smooth + +8.53637895250305 +47.35046795046839 +428.93298077950897 +-195.00169679016778 +74.46106902872525 +0 +120 +absolute + + + +0.01 +smooth + +8.53637730460488 +47.350467754181395 +428.93290185876833 +-195.0785407418541 +74.48107566979195 +0 +120 +absolute + + + +0.01 +smooth + +8.536375658313782 +47.3504675568127 +428.93282354256684 +-195.15498705061322 +74.50113713562762 +0 +120 +absolute + + + +0.01 +smooth + +8.536374013684158 +47.35046735846007 +428.93274584619473 +-195.23103136138403 +74.52125281351874 +0 +120 +absolute + + + +0.01 +smooth + +8.536372370770412 +47.35046715922124 +428.9326687849419 +-195.30666931910554 +74.54142209075175 +0 +120 +absolute + + + +0.01 +smooth + +8.536370729626945 +47.35046695919395 +428.9325923740982 +-195.3818965687166 +74.56164435461315 +0 +120 +absolute + + + +0.01 +smooth + +8.53636909030816 +47.350466758475946 +428.93251662895364 +-195.45670875515626 +74.58191899238933 +0 +120 +absolute + + + +0.01 +smooth + +8.536367452868458 +47.350466557164964 +428.9324415647982 +-195.53110152336345 +74.60224539136684 +0 +120 +absolute + + + +0.01 +smooth + +8.536365817362242 +47.350466355358776 +428.93236719692175 +-195.60507051827705 +74.62262293883205 +0 +120 +absolute + + + +0.01 +smooth + +8.536364183843915 +47.35046615315509 +428.93229354061435 +-195.67861138483607 +74.64305102207148 +0 +120 +absolute + + + +0.01 +smooth + +8.536362551667713 +47.35046594933913 +428.93222037062867 +-195.75180824990278 +74.66354074397248 +0 +120 +absolute + + + +0.01 +smooth + +8.536360920187754 +47.350465742673116 +428.9321474607989 +-195.82474487299592 +74.68410313655245 +0 +120 +absolute + + + +0.01 +smooth + +8.536359289458249 +47.35046553322031 +428.93207482503664 +-195.89741634803892 +74.70473748079284 +0 +120 +absolute + + + +0.01 +smooth + +8.536357659533412 +47.35046532104395 +428.93200247725383 +-195.96981776895518 +74.72544305767512 +0 +120 +absolute + + + +0.01 +smooth + +8.536356030467466 +47.350465106207345 +428.9319304313624 +-196.04194422966836 +74.74621914818076 +0 +120 +absolute + + + +0.01 +smooth + +8.536354402314622 +47.350464888773736 +428.9318587012744 +-196.11379082410184 +74.76706503329125 +0 +120 +absolute + + + +0.01 +smooth + +8.536352775129096 +47.35046466880639 +428.9317873009014 +-196.18535264617907 +74.78797999398799 +0 +120 +absolute + + + +0.01 +smooth + +8.536351148965105 +47.350464446368576 +428.93171624415544 +-196.25662478982358 +74.80896331125248 +0 +120 +absolute + + + +0.01 +smooth + +8.536349523876867 +47.35046422152353 +428.93164554494825 +-196.32760234895883 +74.8300142660662 +0 +120 +absolute + + + +0.01 +smooth + +8.53634789991859 +47.35046399433453 +428.93157521719155 +-196.39828041750826 +74.85113213941054 +0 +120 +absolute + + + +0.01 +smooth + +8.5363462771445 +47.35046376486486 +428.9315052747977 +-196.46865408939547 +74.87231621226708 +0 +120 +absolute + + + +0.01 +smooth + +8.536344655608803 +47.35046353317775 +428.93143573167805 +-196.53871845854377 +74.89356576561717 +0 +120 +absolute + + + +0.01 +smooth + +8.536343035365721 +47.35046329933649 +428.9313666017449 +-196.6084686188768 +74.91488008044234 +0 +120 +absolute + + + +0.01 +smooth + +8.536341416469469 +47.350463063404334 +428.93129789890986 +-196.67789966431798 +74.93625843772402 +0 +120 +absolute + + + +0.01 +smooth + +8.536339798974259 +47.35046282544454 +428.9312296370847 +-196.74700668879075 +74.95770011844371 +0 +120 +absolute + + + +0.01 +smooth + +8.536338182934312 +47.35046258552038 +428.9311618301815 +-196.8157847862186 +74.97920440358283 +0 +120 +absolute + + + +0.01 +smooth + +8.536336568403843 +47.35046234369511 +428.9310944921121 +-196.88422905052505 +75.00077057412288 +0 +120 +absolute + + + +0.01 +smooth + +8.53633495543706 +47.35046210003198 +428.9310276367881 +-196.9523345756335 +75.02239791104529 +0 +120 +absolute + + + +0.01 +smooth + +8.536333344088192 +47.35046185459431 +428.9309612781217 +-197.0200964554676 +75.04408569533157 +0 +120 +absolute + + + +0.01 +smooth + +8.536331734411442 +47.3504616074453 +428.93089543002463 +-197.08750978395062 +75.06583320796312 +0 +120 +absolute + + + +0.01 +smooth + +8.536330126461035 +47.35046135864823 +428.93083010640873 +-197.15456965500624 +75.08763972992148 +0 +120 +absolute + + + +0.01 +smooth + +8.536328520291184 +47.35046110826638 +428.93076532118596 +-197.22127116255774 +75.10950454218803 +0 +120 +absolute + + + +0.01 +smooth + +8.5363269159561 +47.350460856363 +428.930701088268 +-197.28760940052874 +75.13142692574431 +0 +120 +absolute + + + +0.01 +smooth + +8.536325313510005 +47.35046060300136 +428.93063742156687 +-197.35357946284267 +75.15340616157172 +0 +120 +absolute + + + +0.01 +smooth + +8.536323713007112 +47.35046034824472 +428.9305743349944 +-197.419176443423 +75.17544153065177 +0 +120 +absolute + + + +0.01 +smooth + +8.536322114501637 +47.35046009215634 +428.93051184246235 +-197.48439543619324 +75.1975323139659 +0 +120 +absolute + + + +0.01 +smooth + +8.536320518047795 +47.35045983479949 +428.9304499578828 +-197.54923153507684 +75.21967779249556 +0 +120 +absolute + + + +0.01 +smooth + +8.536318923699806 +47.35045957623743 +428.93038869516744 +-197.61367983399728 +75.24187724722225 +0 +120 +absolute + + + +0.01 +smooth + +8.53631733151188 +47.35045931653342 +428.93032806822816 +-197.6777354268781 +75.26412995912742 +0 +120 +absolute + + + +0.01 +smooth + +8.536315741538235 +47.35045905575073 +428.9302680909769 +-197.7413934076427 +75.28643520919249 +0 +120 +absolute + + + +0.01 +smooth + +8.536314153833088 +47.35045879395262 +428.9302087773254 +-197.80464887021463 +75.30879227839898 +0 +120 +absolute + + + +0.01 +smooth + +8.536312568450654 +47.35045853120235 +428.9301501411856 +-197.8674969085173 +75.33120044772835 +0 +120 +absolute + + + +0.01 +smooth + +8.536310985445148 +47.3504582675632 +428.93009219646945 +-197.92993261647425 +75.35365899816205 +0 +120 +absolute + + + +0.01 +smooth + +8.536309404870789 +47.3504580030984 +428.9300349570886 +-197.99195108800888 +75.37616721068152 +0 +120 +absolute + + + +0.01 +smooth + +8.536307826781785 +47.35045773787125 +428.9299784369551 +-198.05354741704474 +75.39872436626824 +0 +120 +absolute + + + +0.01 +smooth + +8.53630625123236 +47.35045747194499 +428.92992264998077 +-198.1147166975053 +75.4213297459037 +0 +120 +absolute + + + +0.01 +smooth + +8.536304678276725 +47.3504572053829 +428.92986761007734 +-198.17545402331402 +75.44398263056931 +0 +120 +absolute + + + +0.01 +smooth + +8.536303107811248 +47.350456938063466 +428.92981327409274 +-198.23577632871778 +75.46668512522446 +0 +120 +absolute + + + +0.01 +smooth + +8.536301538804555 +47.35045666877359 +428.9297592635576 +-198.29582874817527 +75.48945586450009 +0 +120 +absolute + + + +0.01 +smooth + +8.536299971104839 +47.35045639732042 +428.929705518065 +-198.3556344569528 +75.51229763609261 +0 +120 +absolute + + + +0.01 +smooth + +8.536298404766471 +47.3504561237517 +428.9296520517516 +-198.41518808204435 +75.53520953019253 +0 +120 +absolute + + + +0.01 +smooth + +8.536296839843827 +47.35045584811515 +428.929598878754 +-198.4744842504437 +75.55819063699039 +0 +120 +absolute + + + +0.01 +smooth + +8.53629527639128 +47.350455570458486 +428.92954601320855 +-198.53351758914465 +75.58124004667678 +0 +120 +absolute + + + +0.01 +smooth + +8.536293714463202 +47.35045529082948 +428.92949346925224 +-198.59228272514108 +75.60435684944223 +0 +120 +absolute + + + +0.01 +smooth + +8.53629215411396 +47.35045500927581 +428.9294412610211 +-198.65077428542668 +75.6275401354772 +0 +120 +absolute + + + +0.01 +smooth + +8.536290595397938 +47.35045472584527 +428.9293894026523 +-198.70898689699538 +75.6507889949724 +0 +120 +absolute + + + +0.01 +smooth + +8.536289038369501 +47.35045444058553 +428.9293379082819 +-198.766915186841 +75.67410251811825 +0 +120 +absolute + + + +0.01 +smooth + +8.536287483083024 +47.35045415354435 +428.9292867920467 +-198.82455378195738 +75.69747979510535 +0 +120 +absolute + + + +0.01 +smooth + +8.536285929592879 +47.35045386476946 +428.92923606808324 +-198.88189730933829 +75.72091991612426 +0 +120 +absolute + + + +0.01 +smooth + +8.536284377953445 +47.35045357430862 +428.9291857505282 +-198.9389403959777 +75.74442197136553 +0 +120 +absolute + + + +0.01 +smooth + +8.536282828219079 +47.3504532822095 +428.92913585351783 +-198.99567766886918 +75.76798505101964 +0 +120 +absolute + + + +0.01 +smooth + +8.536281280444173 +47.3504529885199 +428.9290863911891 +-199.0521037550068 +75.79160824527723 +0 +120 +absolute + + + +0.01 +smooth + +8.536279734683088 +47.35045269328749 +428.9290373776783 +-199.10821328138425 +75.81529064432877 +0 +120 +absolute + + + +0.01 +smooth + +8.536278190990203 +47.35045239656002 +428.92898882712205 +-199.16400087499542 +75.83903133836488 +0 +120 +absolute + + + +0.01 +smooth + +8.536276649419886 +47.35045209838525 +428.928940753657 +-199.21946116283414 +75.86282941757608 +0 +120 +absolute + + + +0.01 +smooth + +8.536275110026512 +47.35045179881089 +428.9288931714197 +-199.27458877189414 +75.88668397215291 +0 +120 +absolute + + + +0.01 +smooth + +8.536273572864454 +47.350451497884656 +428.9288460945467 +-199.32937832916943 +75.91059409228592 +0 +120 +absolute + + + +0.01 +smooth + +8.536272037988088 +47.35045119565432 +428.92879953717454 +-199.3838244616536 +75.93455886816567 +0 +120 +absolute + + + +0.01 +smooth + +8.53627050545178 +47.35045089216758 +428.92875351343986 +-199.4379217963407 +75.95857738998271 +0 +120 +absolute + + + +0.01 +smooth + +8.536268975309909 +47.35045058747219 +428.92870803747917 +-199.4916649602244 +75.98264874792756 +0 +120 +absolute + + + +0.01 +smooth + +8.536267447616845 +47.35045028161585 +428.9286631234291 +-199.54504858029864 +76.00677203219081 +0 +120 +absolute + + + +0.01 +smooth + +8.53626592242696 +47.350449974646324 +428.9286187854261 +-199.59806728355719 +76.03094633296298 +0 +120 +absolute + + + +0.01 +smooth + +8.53626439979463 +47.35044966661132 +428.92857503760683 +-199.6507156969938 +76.05517074043463 +0 +120 +absolute + + + +0.01 +smooth + +8.536262879774227 +47.35044935755858 +428.928531894108 +-199.70298844760248 +76.07944434479631 +0 +120 +absolute + + + +0.01 +smooth + +8.536261362420122 +47.35044904753583 +428.9284893690659 +-199.75488016237694 +76.10376623623857 +0 +120 +absolute + + + +0.01 +smooth + +8.53625984778669 +47.35044873659083 +428.9284474766172 +-199.80638546831096 +76.12813550495196 +0 +120 +absolute + + + +0.01 +smooth + +8.536258335928302 +47.35044842477127 +428.92840623089864 +-199.85749899239846 +76.15255124112701 +0 +120 +absolute + + + +0.01 +smooth + +8.536256826899333 +47.35044811212491 +428.92836564604653 +-199.90821536163327 +76.17701253495429 +0 +120 +absolute + + + +0.01 +smooth + +8.536255320754153 +47.35044779869946 +428.92832573619756 +-199.95852920300914 +76.20151847662436 +0 +120 +absolute + + + +0.01 +smooth + +8.536253817547138 +47.35044748454267 +428.92828651548837 +-200.00843514351993 +76.22606815632773 +0 +120 +absolute + + + +0.01 +smooth + +8.536252317332657 +47.350447169702264 +428.92824799805544 +-200.05792781015953 +76.25066066425498 +0 +120 +absolute + + + +0.01 +smooth + +8.536250820165087 +47.350446854225964 +428.9282101980354 +-200.10700182992167 +76.27529509059664 +0 +120 +absolute + + + +0.01 +smooth + +8.536249326098801 +47.350446538161535 +428.9281731295647 +-200.15565182980023 +76.29997052554327 +0 +120 +absolute + + + +0.01 +smooth + +8.536247835188169 +47.35044622155667 +428.9281368067801 +-200.20387243678903 +76.32468605928541 +0 +120 +absolute + + + +0.01 +smooth + +8.536246347487564 +47.35044590445912 +428.928101243818 +-200.2516582778819 +76.34944078201364 +0 +120 +absolute + + + +0.01 +smooth + +8.536244862387203 +47.35044558637703 +428.9280661837948 +-200.29910194856888 +76.37424678262632 +0 +120 +absolute + + + +0.01 +smooth + +8.536243379084434 +47.35044526665646 +428.92803129281464 +-200.34632425364532 +76.39911977458377 +0 +120 +absolute + + + +0.01 +smooth + +8.536241897630694 +47.350444945334125 +428.92799658652694 +-200.39331986835347 +76.42405866468795 +0 +120 +absolute + + + +0.01 +smooth + +8.536240418080812 +47.35044462244948 +428.927962081966 +-200.44008296776144 +76.4490622932357 +0 +120 +absolute + + + +0.01 +smooth + +8.536238940489614 +47.35044429804195 +428.9279277961659 +-200.48660772693745 +76.47412950052387 +0 +120 +absolute + + + +0.01 +smooth + +8.53623746491193 +47.35044397215099 +428.92789374616103 +-200.53288832094972 +76.49925912684937 +0 +120 +absolute + + + +0.01 +smooth + +8.536235991402586 +47.35044364481607 +428.9278599489859 +-200.57891892486637 +76.52445001250905 +0 +120 +absolute + + + +0.01 +smooth + +8.536234520016414 +47.35044331607662 +428.92782642167447 +-200.62469371375573 +76.54970099779977 +0 +120 +absolute + + + +0.01 +smooth + +8.53623305080823 +47.35044298597207 +428.9277931812609 +-200.6702068626858 +76.57501092301837 +0 +120 +absolute + + + +0.01 +smooth + +8.536231583832874 +47.35044265454193 +428.92776024477973 +-200.71545254672498 +76.6003786284618 +0 +120 +absolute + + + +0.01 +smooth + +8.536230119145166 +47.35044232182557 +428.9277276292651 +-200.76042494094122 +76.62580295442683 +0 +120 +absolute + + + +0.01 +smooth + +8.536228656799935 +47.35044198786248 +428.9276953517512 +-200.80511822040282 +76.65128274121037 +0 +120 +absolute + + + +0.01 +smooth + +8.53622719685201 +47.35044165269211 +428.92766342927246 +-200.84952656017802 +76.67681682910928 +0 +120 +absolute + + + +0.01 +smooth + +8.536225739356222 +47.35044131635391 +428.9276318788631 +-200.893644135335 +76.70240405842046 +0 +120 +absolute + + + +0.01 +smooth + +8.536224284367389 +47.35044097888729 +428.92760071755714 +-200.9374651209418 +76.72804326944072 +0 +120 +absolute + + + +0.01 +smooth + +8.536222831940346 +47.35044064033176 +428.92756996238927 +-200.98098369206684 +76.75373330246697 +0 +120 +absolute + + + +0.01 +smooth + +8.536221382129916 +47.3504403007267 +428.9275396303933 +-201.02419402377802 +76.77947299779606 +0 +120 +absolute + + + +0.01 +smooth + +8.53621993499093 +47.35043996011162 +428.9275097386039 +-201.0670902911438 +76.80526119572485 +0 +120 +absolute + + + +0.01 +smooth + +8.536218490578216 +47.35043961852595 +428.927480304055 +-201.10966666923227 +76.83109673655024 +0 +120 +absolute + + + +0.01 +smooth + +8.5362170489466 +47.35043927600911 +428.92745134378106 +-201.15191733311158 +76.85697846056904 +0 +120 +absolute + + + +0.01 +smooth + +8.536215610150908 +47.35043893260058 +428.9274228748162 +-201.19383645784995 +76.88290520807817 +0 +120 +absolute + + + +0.01 +smooth + +8.536214174245968 +47.35043858833979 +428.9273949141948 +-201.23541821851563 +76.90887581937449 +0 +120 +absolute + + + +0.01 +smooth + +8.53621274128661 +47.3504382432662 +428.92736747895106 +-201.27665679017667 +76.93488913475483 +0 +120 +absolute + + + +0.01 +smooth + +8.536211311327659 +47.35043789741925 +428.9273405861193 +-201.31754634790133 +76.96094399451607 +0 +120 +absolute + + + +0.01 +smooth + +8.536209884423943 +47.35043755083839 +428.9273142527338 +-201.3580810667578 +76.9870392389551 +0 +120 +absolute + + + +0.01 +smooth + +8.536208460630291 +47.350437203563075 +428.92728849582875 +-201.3982551218143 +77.01317370836878 +0 +120 +absolute + + + +0.01 +smooth + +8.536207040001528 +47.35043685563274 +428.9272633324383 +-201.43806268813893 +77.03934624305396 +0 +120 +absolute + + + +0.01 +smooth + +8.536205622592485 +47.35043650708684 +428.9272387795969 +-201.4774979408 +77.06555568330752 +0 +120 +absolute + + + +0.01 +smooth + +8.536204208457985 +47.350436157964836 +428.9272148543388 +-201.51655505486553 +77.09180086942632 +0 +120 +absolute + + + +0.01 +smooth + +8.536202797652859 +47.35043580830616 +428.9271915736982 +-201.55522820540386 +77.11808064170724 +0 +120 +absolute + + + +0.01 +smooth + +8.536201390231934 +47.35043545815026 +428.92716895470926 +-201.59351156748315 +77.14439384044712 +0 +120 +absolute + + + +0.01 +smooth + +8.536199986250036 +47.35043510753658 +428.9271470144065 +-201.63139931617155 +77.17073930594285 +0 +120 +absolute + + + +0.01 +smooth + +8.536198585761994 +47.3504347565046 +428.927125769824 +-201.66888562653725 +77.1971158784913 +0 +120 +absolute + + + +0.01 +smooth + +8.536197188822634 +47.35043440509373 +428.927105237996 +-201.70596467364845 +77.22352239838932 +0 +120 +absolute + + + +0.01 +smooth + +8.536195795486787 +47.350434053343434 +428.9270854359569 +-201.7426306325734 +77.24995770593378 +0 +120 +absolute + + + +0.01 +smooth + +8.536194405809274 +47.35043370129316 +428.92706638074077 +-201.77887767838013 +77.27642064142155 +0 +120 +absolute + + + +0.01 +smooth + +8.53619301984493 +47.35043334898235 +428.927048089382 +-201.81469998613696 +77.30291004514952 +0 +120 +absolute + + + +0.01 +smooth + +8.536191637518643 +47.35043299637162 +428.9270305039591 +-201.8501119786784 +77.32942754355827 +0 +120 +absolute + + + +0.01 +smooth + +8.53619025768358 +47.35043264276948 +428.9270129531845 +-201.88529493221702 +77.35599765600615 +0 +120 +absolute + + + +0.01 +smooth + +8.53618888010293 +47.35043228803372 +428.9269952998892 +-201.92028803056542 +77.38262522466754 +0 +120 +absolute + + + +0.01 +smooth + +8.536187504832263 +47.35043193219924 +428.9269775764766 +-201.95508486503627 +77.40930880585405 +0 +120 +absolute + + + +0.01 +smooth + +8.536186131927163 +47.35043157530093 +428.92695981535 +-201.9896790269425 +77.43604695587749 +0 +120 +absolute + + + +0.01 +smooth + +8.536184761443204 +47.350431217373675 +428.926942048913 +-202.02406410759696 +77.46283823104955 +0 +120 +absolute + + + +0.01 +smooth + +8.536183393435966 +47.35043085845243 +428.92692430956896 +-202.05823369831234 +77.48968118768192 +0 +120 +absolute + + + +0.01 +smooth + +8.536182027961024 +47.35043049857204 +428.92690662972126 +-202.09218139040152 +77.51657438208635 +0 +120 +absolute + + + +0.01 +smooth + +8.536180665073964 +47.350430137767454 +428.92688904177356 +-202.1259007751775 +77.54351637057458 +0 +120 +absolute + + + +0.01 +smooth + +8.536179304830359 +47.35042977607356 +428.9268715781294 +-202.15938544395303 +77.57050570945832 +0 +120 +absolute + + + +0.01 +smooth + +8.536177947285788 +47.35042941352526 +428.92685427119187 +-202.1926289880409 +77.59754095504928 +0 +120 +absolute + + + +0.01 +smooth + +8.53617659249583 +47.35042905015746 +428.9268371533647 +-202.225624998754 +77.62462066365919 +0 +120 +absolute + + + +0.01 +smooth + +8.536175240516062 +47.350428686005046 +428.9268202570512 +-202.25836706740506 +77.65174339159975 +0 +120 +absolute + + + +0.01 +smooth + +8.536173891402065 +47.350428321102946 +428.926803614655 +-202.2908487853071 +77.67890769518272 +0 +120 +absolute + + + +0.01 +smooth + +8.536172545209418 +47.350427955486076 +428.9267872585798 +-202.32306374377296 +77.70611213071982 +0 +120 +absolute + + + +0.01 +smooth + +8.536171201993689 +47.35042758918929 +428.92677122122825 +-202.35500553411524 +77.73335525452269 +0 +120 +absolute + + + +0.01 +smooth + +8.536169861810471 +47.350427222247546 +428.9267555350046 +-202.38666774764704 +77.76063562290318 +0 +120 +absolute + + + +0.01 +smooth + +8.536168524715334 +47.3504268546957 +428.9267402323119 +-202.41804397568106 +77.7879517921729 +0 +120 +absolute + + + +0.01 +smooth + +8.536167190763859 +47.3504264865687 +428.9267253455538 +-202.44912780953018 +77.81530231864366 +0 +120 +absolute + + + +0.01 +smooth + +8.536165860011623 +47.3504261179014 +428.9267109071336 +-202.4799128405072 +77.8426857586271 +0 +120 +absolute + + + +0.01 +smooth + +8.536164532514205 +47.35042574872875 +428.9266969494549 +-202.51039265992506 +77.87010066843501 +0 +120 +absolute + + + +0.01 +smooth + +8.536163208327185 +47.35042537908562 +428.9266835049211 +-202.5405608590965 +77.89754560437908 +0 +120 +absolute + + + +0.01 +smooth + +8.536161887506138 +47.35042500900694 +428.9266706059356 +-202.5704110293344 +77.92501912277102 +0 +120 +absolute + + + +0.01 +smooth + +8.536160570106645 +47.3504246385276 +428.92665828490203 +-202.5999367619516 +77.95251977992257 +0 +120 +absolute + + + +0.01 +smooth + +8.536159256184284 +47.3504242676825 +428.92664657422364 +-202.62913164826094 +77.98004613214545 +0 +120 +absolute + + + +0.01 +smooth + +8.536157945794631 +47.35042389650655 +428.92663550630414 +-202.65798927957525 +78.00759673575138 +0 +120 +absolute + + + +0.01 +smooth + +8.536156638993265 +47.35042352503466 +428.92662511354683 +-202.68650324720738 +78.03517014705206 +0 +120 +absolute + + + +0.01 +smooth + +8.536155335835767 +47.350423153301705 +428.92661542835515 +-202.71466714247018 +78.06276492235925 +0 +120 +absolute + + + +0.01 +smooth + +8.536154036377715 +47.35042278134263 +428.92660648313256 +-202.74247455667646 +78.09037961798464 +0 +120 +absolute + + + +0.01 +smooth + +8.536152740674684 +47.350422409192305 +428.9265983102826 +-202.76991908113908 +78.11801279023997 +0 +120 +absolute + + + +0.01 +smooth + +8.536151448782256 +47.350422036885654 +428.9265909422088 +-202.79699430717085 +78.14566299543696 +0 +120 +absolute + + + +0.01 +smooth + +8.536150160756009 +47.35042166445757 +428.92658441131437 +-202.8236938260847 +78.17332878988732 +0 +120 +absolute + + + +0.01 +smooth + +8.536148876651518 +47.350421291942965 +428.92657875000305 +-202.85001122919334 +78.20100872990278 +0 +120 +absolute + + + +0.01 +smooth + +8.536147596524366 +47.35042091937673 +428.9265739906781 +-202.8759401078097 +78.22870137179505 +0 +120 +absolute + + + +0.01 +smooth + +8.536146320430127 +47.35042054679377 +428.926570165743 +-202.90147405324666 +78.25640527187588 +0 +120 +absolute + + + +0.01 +smooth + +8.536145048424384 +47.350420174229015 +428.9265673076013 +-202.92660665681694 +78.28411898645697 +0 +120 +absolute + + + +0.01 +smooth + +8.536143780562709 +47.35041980171734 +428.9265654486564 +-202.95133150983344 +78.31184107185003 +0 +120 +absolute + + + +0.01 +smooth + +8.536142516900687 +47.350419429293645 +428.92656462131185 +-202.975642203609 +78.33957008436681 +0 +120 +absolute + + + +0.01 +smooth + +8.536141256838125 +47.35041905667153 +428.9265644547974 +-202.999642008508 +78.36731979357884 +0 +120 +absolute + + + +0.01 +smooth + +8.536139999356374 +47.3504186833579 +428.92656430187833 +-203.023503663675 +78.39511351903124 +0 +120 +absolute + + + +0.01 +smooth + +8.53613874449656 +47.3504183093778 +428.9265641531122 +-203.04722228854789 +78.42294988162887 +0 +120 +absolute + + + +0.01 +smooth + +8.536137492315325 +47.350417934763875 +428.9265640085034 +-203.07079040343754 +78.45082714132123 +0 +120 +absolute + + + +0.01 +smooth + +8.536136242869308 +47.35041755954874 +428.92656386805584 +-203.0942005286543 +78.47874355805783 +0 +120 +absolute + + + +0.01 +smooth + +8.536134996215157 +47.350417183765046 +428.92656373177437 +-203.1174451845092 +78.50669739178828 +0 +120 +absolute + + + +0.01 +smooth + +8.536133752409512 +47.350416807445434 +428.92656359966287 +-203.1405168913127 +78.53468690246207 +0 +120 +absolute + + + +0.01 +smooth + +8.536132511509019 +47.350416430622516 +428.9265634717257 +-203.16340816937546 +78.56271035002875 +0 +120 +absolute + + + +0.01 +smooth + +8.536131273570318 +47.35041605332894 +428.9265633479671 +-203.18611153900824 +78.59076599443782 +0 +120 +absolute + + + +0.01 +smooth + +8.536130038650056 +47.35041567559736 +428.9265632283915 +-203.2086195205218 +78.61885209563887 +0 +120 +absolute + + + +0.01 +smooth + +8.536128806804872 +47.350415297460394 +428.92656311300306 +-203.23092463422668 +78.6469669135814 +0 +120 +absolute + + + +0.01 +smooth + +8.536127578091413 +47.3504149189507 +428.9265630018062 +-203.25301940043371 +78.675108708215 +0 +120 +absolute + + + +0.01 +smooth + +8.536126352566319 +47.350414540100864 +428.9265628948049 +-203.2748963394534 +78.70327573948914 +0 +120 +absolute + + + +0.01 +smooth + +8.536125130286239 +47.3504141609436 +428.92656279200384 +-203.29654797159662 +78.73146626735343 +0 +120 +absolute + + + +0.01 +smooth + +8.536123911307808 +47.35041378151146 +428.9265626934068 +-203.3179668171738 +78.7596785517573 +0 +120 +absolute + + + +0.01 +smooth + +8.536122695687675 +47.35041340183714 +428.92656259901855 +-203.33914539649587 +78.7879108526504 +0 +120 +absolute + + + +0.01 +smooth + +8.536121483482482 +47.350413021953244 +428.92656250884306 +-203.36007622987336 +78.8161614299822 +0 +120 +absolute + + + +0.01 +smooth + +8.536120274748871 +47.350412641892426 +428.92656242288473 +-203.38075183761703 +78.84442854370226 +0 +120 +absolute + + + +0.01 +smooth + +8.536119069543489 +47.350412261687325 +428.9265623411478 +-203.40116474003753 +78.87271045376013 +0 +120 +absolute + + + +0.01 +smooth + +8.536117867922972 +47.35041188137056 +428.9265622636365 +-203.42130745744552 +78.9010054201053 +0 +120 +absolute + + + +0.01 +smooth + +8.53611666994397 +47.35041150097477 +428.92656219035524 +-203.44117251015172 +78.92931170268737 +0 +120 +absolute + + + +0.01 +smooth + +8.536115475663125 +47.35041112053262 +428.9265621213083 +-203.46075241846683 +78.95762756145584 +0 +120 +absolute + + + +0.01 +smooth + +8.53611428513708 +47.35041074007671 +428.92656205649973 +-203.48003970270145 +78.98595125636025 +0 +120 +absolute + + + +0.01 +smooth + +8.536113098422476 +47.350410359639696 +428.9265619959341 +-203.49902688316632 +79.01428104735014 +0 +120 +absolute + + + +0.01 +smooth + +8.536111915575958 +47.35040997925421 +428.9265619396154 +-203.51770648017214 +79.04261519437506 +0 +120 +absolute + + + +0.01 +smooth + +8.53611073665417 +47.35040959895288 +428.92656188754813 +-203.53607101402955 +79.0709519573845 +0 +120 +absolute + + + +0.01 +smooth + +8.53610956171375 +47.35040921876835 +428.9265618397365 +-203.55411300504923 +79.09928959632808 +0 +120 +absolute + + + +0.01 +smooth + +8.536108390811352 +47.35040883873326 +428.92656179618484 +-203.57182497354188 +79.12762637115526 +0 +120 +absolute + + + +0.01 +smooth + +8.536107224003608 +47.350408458880246 +428.9265617568973 +-203.58919943981815 +79.1559605418156 +0 +120 +absolute + + + +0.01 +smooth + +8.536106061347168 +47.35040807924193 +428.9265617218781 +-203.60622892418877 +79.18429036825866 +0 +120 +absolute + + + +0.01 +smooth + +8.536104902898673 +47.35040769985097 +428.9265616911318 +-203.6229059469644 +79.21261411043395 +0 +120 +absolute + + + +0.01 +smooth + +8.536103748714766 +47.35040732073998 +428.9265616646624 +-203.63922302845577 +79.24093002829103 +0 +120 +absolute + + + +0.01 +smooth + +8.536102598852091 +47.350406941941614 +428.92656164247444 +-203.65517268897344 +79.26923638177944 +0 +120 +absolute + + + +0.01 +smooth + +8.53610145336729 +47.350406563488505 +428.92656162457206 +-203.67074744882822 +79.29753143084868 +0 +120 +absolute + + + +0.01 +smooth + +8.536100312317009 +47.35040618541328 +428.9265616109595 +-203.68593982833067 +79.32581343544831 +0 +120 +absolute + + + +0.01 +smooth + +8.536099175757888 +47.35040580774858 +428.926561601641 +-203.70074234779156 +79.35408065552787 +0 +120 +absolute + + + +0.01 +smooth + +8.536098043746573 +47.35040543052705 +428.92656159662096 +-203.7151475275216 +79.3823313510369 +0 +120 +absolute + + + +0.01 +smooth + +8.536096916234676 +47.35040505373641 +428.926561642426 +-203.72916840003924 +79.41056640355251 +0 +120 +absolute + + + +0.01 +smooth + +8.536095791913882 +47.35040467682536 +428.9265623352388 +-203.7430632699766 +79.43881806715684 +0 +120 +absolute + + + +0.01 +smooth + +8.536094670422017 +47.350404299646264 +428.9265638342416 +-203.75690397403667 +79.46709481635402 +0 +120 +absolute + + + +0.01 +smooth + +8.536093551817132 +47.35040392223102 +428.926566110374 +-203.7706800814962 +79.49539461738145 +0 +120 +absolute + + + +0.01 +smooth + +8.536092436157276 +47.35040354461147 +428.92656913457586 +-203.7843811616318 +79.52371543647648 +0 +120 +absolute + + + +0.01 +smooth + +8.536091323500502 +47.350403166819596 +428.9265728777871 +-203.79799678372018 +79.55205523987654 +0 +120 +absolute + + + +0.01 +smooth + +8.536090213904853 +47.350402788887195 +428.9265773109471 +-203.81151651703772 +79.58041199381896 +0 +120 +absolute + + + +0.01 +smooth + +8.536089107428385 +47.350402410846236 +428.92658240499605 +-203.82492993086134 +79.60878366454119 +0 +120 +absolute + + + +0.01 +smooth + +8.536088004129143 +47.35040203272858 +428.9265881308732 +-203.83822659446753 +79.63716821828058 +0 +120 +absolute + + + +0.01 +smooth + +8.536086904065183 +47.35040165456613 +428.92659445951875 +-203.85139607713288 +79.66556362127452 +0 +120 +absolute + + + +0.01 +smooth + +8.536085807294546 +47.35040127639078 +428.92660136187226 +-203.86442794813414 +79.69396783976036 +0 +120 +absolute + + + +0.01 +smooth + +8.536084713875288 +47.35040089823442 +428.92660880887354 +-203.8773117767478 +79.72237883997553 +0 +120 +absolute + + + +0.01 +smooth + +8.536083623865451 +47.350400520128936 +428.9266167714623 +-203.8900371322506 +79.7507945881574 +0 +120 +absolute + + + +0.01 +smooth + +8.536082537323102 +47.35040014210627 +428.92662522057856 +-203.90259358391924 +79.77921305054339 +0 +120 +absolute + + + +0.01 +smooth + +8.536081454306267 +47.35039976419824 +428.92663412716166 +-203.91497070103011 +79.80763219337081 +0 +120 +absolute + + + +0.01 +smooth + +8.536080374873015 +47.35039938643681 +428.92664346215173 +-203.92715805286014 +79.83604998287711 +0 +120 +absolute + + + +0.01 +smooth + +8.536079299081381 +47.350399008853834 +428.92665319648813 +-203.9391452086857 +79.86446438529966 +0 +120 +absolute + + + +0.01 +smooth + +8.536078226989428 +47.35039863148124 +428.9266633011112 +-203.95092173778355 +79.89287336687579 +0 +120 +absolute + + + +0.01 +smooth + +8.536077158655196 +47.35039825435089 +428.92667374696026 +-203.9624772094303 +79.92127489384298 +0 +120 +absolute + + + +0.01 +smooth + +8.536076094136739 +47.350397877494686 +428.9266845049751 +-203.97380119290264 +79.94966693243853 +0 +120 +absolute + + + +0.01 +smooth + +8.536075033492104 +47.35039750094453 +428.9266955460957 +-203.98488325747712 +79.97804744889989 +0 +120 +absolute + + + +0.01 +smooth + +8.536073976779342 +47.35039712473232 +428.9267068412616 +-203.99571297243034 +80.0064144094644 +0 +120 +absolute + + + +0.01 +smooth + +8.536072924056505 +47.35039674888994 +428.92671836141267 +-204.00627990703902 +80.03476578036945 +0 +120 +absolute + + + +0.01 +smooth + +8.536071875381639 +47.350396373449286 +428.9267300774887 +-204.0165736305798 +80.06309952785246 +0 +120 +absolute + + + +0.01 +smooth + +8.536070830812793 +47.35039599844227 +428.92674196042935 +-204.02658371232926 +80.09141361815077 +0 +120 +absolute + + + +0.01 +smooth + +8.53606979040802 +47.350395623900766 +428.92675398117444 +-204.03629972156403 +80.11970601750178 +0 +120 +absolute + + + +0.01 +smooth + +8.536068754225369 +47.350395249856675 +428.9267661106637 +-204.04571122756073 +80.1479746921429 +0 +120 +absolute + + + +0.01 +smooth + +8.536067722322887 +47.35039487634188 +428.926778319837 +-204.05480779959606 +80.17621760831149 +0 +120 +absolute + + + +0.01 +smooth + +8.536066694758624 +47.3503945033883 +428.92679057963403 +-204.0635790069466 +80.20443273224492 +0 +120 +absolute + + + +0.01 +smooth + +8.536065671590634 +47.35039413102783 +428.9268028609945 +-204.07201441888898 +80.23261803018062 +0 +120 +absolute + + + +0.01 +smooth + +8.536064652876963 +47.35039375929233 +428.92681513485826 +-204.0801036046999 +80.26077146835593 +0 +120 +absolute + + + +0.01 +smooth + +8.536063638675659 +47.35039338821372 +428.926827372165 +-204.08783613365586 +80.28889101300825 +0 +120 +absolute + + + +0.01 +smooth + +8.536062629044775 +47.350393017823905 +428.9268395438545 +-204.09520157503357 +80.31697463037499 +0 +120 +absolute + + + +0.01 +smooth + +8.53606162404236 +47.35039264815475 +428.9268516208666 +-204.1021894981097 +80.3450202866935 +0 +120 +absolute + + + +0.01 +smooth + +8.53606062372646 +47.35039227923818 +428.92686357414095 +-204.10878947216082 +80.37302594820117 +0 +120 +absolute + + + +0.01 +smooth + +8.53605962815513 +47.35039191110606 +428.92687537461734 +-204.11499106646357 +80.40098958113542 +0 +120 +absolute + + + +0.01 +smooth + +8.536058637386418 +47.350391543790316 +428.92688699323554 +-204.1207838502946 +80.4289091517336 +0 +120 +absolute + + + +0.01 +smooth + +8.536057651478371 +47.35039117732282 +428.9268984009354 +-204.12615739293057 +80.45678262623308 +0 +120 +absolute + + + +0.01 +smooth + +8.5360566698311 +47.35039081147129 +428.92690974996276 +-204.13123668524332 +80.48462559376968 +0 +120 +absolute + + + +0.01 +smooth + +8.53605569114661 +47.35039044572299 +428.9269213956485 +-204.1362926211339 +80.51247221411 +0 +120 +absolute + + + +0.01 +smooth + +8.536054715443596 +47.3503900800936 +428.92693333948137 +-204.14132694508694 +80.54032127219295 +0 +120 +absolute + + + +0.01 +smooth + +8.536053742781885 +47.350389714615375 +428.9269455717474 +-204.14633296264586 +80.56817044962872 +0 +120 +absolute + + + +0.01 +smooth + +8.536052773221302 +47.35038934932057 +428.9269580827332 +-204.15130397935414 +80.59601742802762 +0 +120 +absolute + + + +0.01 +smooth + +8.53605180682168 +47.350388984241434 +428.9269708627245 +-204.15623330075525 +80.62385988899976 +0 +120 +absolute + + + +0.01 +smooth + +8.536050843642844 +47.35038861941018 +428.9269839020079 +-204.1611142323926 +80.65169551415546 +0 +120 +absolute + + + +0.01 +smooth + +8.53604988374462 +47.35038825485908 +428.92699719086914 +-204.16594007980956 +80.6795219851049 +0 +120 +absolute + + + +0.01 +smooth + +8.536048927186837 +47.35038789062035 +428.92701071959476 +-204.17070414854962 +80.70733698345826 +0 +120 +absolute + + + +0.01 +smooth + +8.536047974029318 +47.35038752672623 +428.92702447847046 +-204.17539974415612 +80.73513819082588 +0 +120 +absolute + + + +0.01 +smooth + +8.5360470243319 +47.35038716320899 +428.927038457783 +-204.18002017217273 +80.7629232888179 +0 +120 +absolute + + + +0.01 +smooth + +8.536046078154403 +47.35038680010085 +428.9270526478179 +-204.18455873814258 +80.79068995904453 +0 +120 +absolute + + + +0.01 +smooth + +8.536045135556654 +47.35038643743405 +428.9270670388619 +-204.18900874760928 +80.81843588311602 +0 +120 +absolute + + + +0.01 +smooth + +8.536044196598485 +47.35038607524083 +428.92708162120095 +-204.19336350611627 +80.84615874264263 +0 +120 +absolute + + + +0.01 +smooth + +8.536043261339719 +47.350385713553436 +428.9270963851211 +-204.1976163192069 +80.87385621923455 +0 +120 +absolute + + + +0.01 +smooth + +8.536042329840186 +47.35038535240412 +428.9271113209086 +-204.20176049242465 +80.90152599450198 +0 +120 +absolute + + + +0.01 +smooth + +8.536041402159718 +47.35038499182513 +428.9271264188499 +-204.20578933131304 +80.92916575005523 +0 +120 +absolute + + + +0.01 +smooth + +8.53604047835813 +47.35038463184865 +428.9271416692306 +-204.20969614141526 +80.95677316750441 +0 +120 +absolute + + + +0.01 +smooth + +8.536039558495261 +47.350384272507 +428.9271570623374 +-204.21347422827506 +80.98434592845982 +0 +120 +absolute + + + +0.01 +smooth + +8.536038642630935 +47.35038391383236 +428.92717258845613 +-204.2171168974356 +81.01188171453164 +0 +120 +absolute + + + +0.01 +smooth + +8.536037730824976 +47.350383555857 +428.92718823787317 +-204.22061745444043 +81.03937820733017 +0 +120 +absolute + + + +0.01 +smooth + +8.536036823137216 +47.35038319861316 +428.92720400087455 +-204.22396920483303 +81.06683308846554 +0 +120 +absolute + + + +0.01 +smooth + +8.53603591962748 +47.35038284213308 +428.92721986774654 +-204.22716545415673 +81.09424403954804 +0 +120 +absolute + + + +0.01 +smooth + +8.536035020355598 +47.35038248644901 +428.9272358287753 +-204.23019950795506 +81.12160874218787 +0 +120 +absolute + + + +0.01 +smooth + +8.536034125381395 +47.35038213159315 +428.9272518742469 +-204.2330646717714 +81.14892487799523 +0 +120 +absolute + + + +0.01 +smooth + +8.536033234764698 +47.350381777597796 +428.92726799444756 +-204.23575425114913 +81.17619012858039 +0 +120 +absolute + + + +0.01 +smooth + +8.536032348565335 +47.35038142449516 +428.9272841796635 +-204.23826155163178 +81.20340217555353 +0 +120 +absolute + + + +0.01 +smooth + +8.536031466843138 +47.35038107231749 +428.92730042018087 +-204.24057987876276 +81.23055870052491 +0 +120 +absolute + + + +0.01 +smooth + +8.536030589657926 +47.35038072109701 +428.9273167062858 +-204.24270253808544 +81.25765738510476 +0 +120 +absolute + + + +0.01 +smooth + +8.536029717069532 +47.35038037086599 +428.92733302826446 +-204.24462283514333 +81.28469591090328 +0 +120 +absolute + + + +0.01 +smooth + +8.536028849137784 +47.35038002165666 +428.92734937640313 +-204.24633407547987 +81.31167195953068 +0 +120 +absolute + + + +0.01 +smooth + +8.536027985922507 +47.35037967350126 +428.9273657409878 +-204.2478295646384 +81.33858321259721 +0 +120 +absolute + + + +0.01 +smooth + +8.536027127483528 +47.35037932643203 +428.9273821123048 +-204.24910260816247 +81.3654273517131 +0 +120 +absolute + + + +0.01 +smooth + +8.536026273880678 +47.3503789804812 +428.92739848064025 +-204.25014651159543 +81.39220205848855 +0 +120 +absolute + + + +0.01 +smooth + +8.536025425173781 +47.35037863568104 +428.92741483628015 +-204.2509545804807 +81.4189050145338 +0 +120 +absolute + + + +0.01 +smooth + +8.536024581422668 +47.35037829206378 +428.9274311695109 +-204.2515201203618 +81.44553390145909 +0 +120 +absolute + + + +0.01 +smooth + +8.53602374268716 +47.350377949661635 +428.9274474706187 +-204.2518364367821 +81.47208640087462 +0 +120 +absolute + + + +0.01 +smooth + +8.53602290894732 +47.350377608474986 +428.92746373720524 +-204.2518998067521 +81.49856250330357 +0 +120 +absolute + + + +0.01 +smooth + +8.536022078703052 +47.35037726791254 +428.927480103791 +-204.25176481179648 +81.52500498455827 +0 +120 +absolute + + + +0.01 +smooth + +8.536021251412905 +47.35037692776645 +428.92749661979286 +-204.25145794175543 +81.55142873578917 +0 +120 +absolute + + + +0.01 +smooth + +8.536020427138872 +47.35037658807013 +428.92751327967693 +-204.25098426944578 +81.57783116221997 +0 +120 +absolute + + + +0.01 +smooth + +8.536019605942958 +47.35037624885694 +428.92753007790833 +-204.25034886768404 +81.60420966907427 +0 +120 +absolute + + + +0.01 +smooth + +8.536018787887157 +47.35037591016032 +428.92754700895307 +-204.24955680928682 +81.63056166157577 +0 +120 +absolute + + + +0.01 +smooth + +8.536017973033468 +47.35037557201366 +428.9275640672767 +-204.24861316707097 +81.65688454494816 +0 +120 +absolute + + + +0.01 +smooth + +8.536017161443896 +47.3503752344504 +428.92758124734485 +-204.2475230138532 +81.68317572441511 +0 +120 +absolute + + + +0.01 +smooth + +8.536016353180436 +47.350374897503904 +428.92759854362333 +-204.24629142245004 +81.70943260520028 +0 +120 +absolute + + + +0.01 +smooth + +8.536015548305093 +47.350374561207616 +428.92761595057794 +-204.24492346567834 +81.73565259252739 +0 +120 +absolute + + + +0.01 +smooth + +8.536014746879854 +47.350374225594905 +428.9276334626738 +-204.24342421635455 +81.76183309162005 +0 +120 +absolute + + + +0.01 +smooth + +8.536013948966733 +47.35037389069922 +428.9276510743772 +-204.2417987472956 +81.78797150770201 +0 +120 +absolute + + + +0.01 +smooth + +8.536013154627714 +47.350373556553905 +428.92766878015334 +-204.24005213131795 +81.81406524599689 +0 +120 +absolute + + + +0.01 +smooth + +8.53601236392481 +47.350373223192435 +428.9276865744683 +-204.23818944123846 +81.84011171172838 +0 +120 +absolute + + + +0.01 +smooth + +8.536011576920014 +47.35037289064818 +428.92770445178746 +-204.23621574987368 +81.86610831012015 +0 +120 +absolute + + + +0.01 +smooth + +8.536010793675327 +47.35037255895456 +428.9277224065766 +-204.23413613004035 +81.89205244639588 +0 +120 +absolute + + + +0.01 +smooth + +8.536010014252748 +47.35037222814496 +428.9277404333014 +-204.23195565455512 +81.91794152577924 +0 +120 +absolute + + + +0.01 +smooth + +8.536009238714277 +47.35037189825282 +428.92775852642757 +-204.22967939623476 +81.94377295349395 +0 +120 +absolute + + + +0.01 +smooth + +8.536008467121906 +47.350371569311505 +428.9277766804205 +-204.22731242789578 +81.9695441347636 +0 +120 +absolute + + + +0.01 +smooth + +8.536007699537647 +47.35037124135445 +428.9277948897463 +-204.22485982235506 +81.99525247481195 +0 +120 +absolute + + + +0.01 +smooth + +8.53600693602349 +47.35037091441505 +428.92781314887026 +-204.2223266524291 +82.02089537886262 +0 +120 +absolute + + + +0.01 +smooth + +8.536006176641436 +47.35037058852673 +428.92783145225826 +-204.21971799093473 +82.0464702521393 +0 +120 +absolute + + + +0.01 +smooth + +8.536005421453487 +47.350370263722866 +428.927849794376 +-204.21703891068853 +82.0719744998657 +0 +120 +absolute + + + +0.01 +smooth + +8.53600467052164 +47.350369940036884 +428.92786816968896 +-204.2142944845072 +82.09740552726544 +0 +120 +absolute + + + +0.01 +smooth + +8.536003923907895 +47.35036961750219 +428.92788657266294 +-204.21148978520742 +82.12276073956221 +0 +120 +absolute + + + +0.01 +smooth + +8.536003181674252 +47.35036929615218 +428.9279049977637 +-204.2086298856059 +82.1480375419797 +0 +120 +absolute + + + +0.01 +smooth + +8.536002443882708 +47.35036897602027 +428.9279234394568 +-204.20571985851927 +82.1732333397416 +0 +120 +absolute + + + +0.01 +smooth + +8.536001710595263 +47.35036865713987 +428.92794189220774 +-204.20276477676424 +82.19834553807155 +0 +120 +absolute + + + +0.01 +smooth + +8.536000981873919 +47.35036833954437 +428.9279603504825 +-204.19976971315748 +82.22337154219323 +0 +120 +absolute + + + +0.01 +smooth + +8.536000257780673 +47.35036802326719 +428.9279788087466 +-204.19673974051574 +82.24830875733034 +0 +120 +absolute + + + +0.01 +smooth + +8.535999538377522 +47.35036770834172 +428.92799726146575 +-204.19367993165557 +82.27315458870653 +0 +120 +absolute + + + +0.01 +smooth + +8.535998823726473 +47.350367394801395 +428.92801570310553 +-204.19059535939374 +82.2979064415455 +0 +120 +absolute + + + +0.01 +smooth + +8.535998113889516 +47.35036708267959 +428.92803412813174 +-204.18749109654692 +82.3225617210709 +0 +120 +absolute + + + +0.01 +smooth + +8.535997408928655 +47.350366772009735 +428.92805253101005 +-204.18437221593175 +82.34711783250643 +0 +120 +absolute + + + +0.01 +smooth + +8.535996708905891 +47.350366462825214 +428.92807090620596 +-204.18124379036493 +82.37157218107572 +0 +120 +absolute + + + +0.01 +smooth + +8.535996013883219 +47.35036615515945 +428.9280892481853 +-204.17811089266317 +82.39592217200251 +0 +120 +absolute + + + +0.01 +smooth + +8.535995323922643 +47.35036584904586 +428.92810755141363 +-204.1749785956431 +82.42016521051045 +0 +120 +absolute + + + +0.01 +smooth + +8.535994639086157 +47.35036554451782 +428.92812581035685 +-204.17185197212143 +82.44429870182317 +0 +120 +absolute + + + +0.01 +smooth + +8.535993958776668 +47.35036524133566 +428.9281440511105 +-204.16867063744226 +82.4683408202809 +0 +120 +absolute + + + +0.01 +smooth + +8.535993281352518 +47.35036493882721 +428.9281623508395 +-204.16527170209093 +82.49234255920302 +0 +120 +absolute + + + +0.01 +smooth + +8.535992606791082 +47.35036463699158 +428.9281807099271 +-204.16165427018427 +82.51630379984174 +0 +120 +absolute + + + +0.01 +smooth + +8.535991935156922 +47.35036433586397 +428.9281991245946 +-204.1578261335986 +82.5402216738777 +0 +120 +absolute + + + +0.01 +smooth + +8.5359912665146 +47.35036403547962 +428.9282175910637 +-204.1537950842104 +82.56409331299167 +0 +120 +absolute + + + +0.01 +smooth + +8.53599060092867 +47.35036373587371 +428.9282361055554 +-204.14956891389582 +82.58791584886428 +0 +120 +absolute + + + +0.01 +smooth + +8.535989938463697 +47.35036343708147 +428.92825466429144 +-204.1451554145313 +82.61168641317624 +0 +120 +absolute + + + +0.01 +smooth + +8.535989279184236 +47.35036313913812 +428.9282732634932 +-204.14056237799318 +82.63540213760828 +0 +120 +absolute + + + +0.01 +smooth + +8.535988623154852 +47.35036284207887 +428.92829189938203 +-204.13579759615777 +82.6590601538411 +0 +120 +absolute + + + +0.01 +smooth + +8.535987970440104 +47.350362545938935 +428.92831056817937 +-204.13086886090147 +82.68265759355535 +0 +120 +absolute + + + +0.01 +smooth + +8.535987321104553 +47.35036225075356 +428.92832926610697 +-204.12578396410066 +82.70619158843179 +0 +120 +absolute + + + +0.01 +smooth + +8.535986675212751 +47.35036195655791 +428.92834798938566 +-204.12055069763142 +82.72965927015106 +0 +120 +absolute + + + +0.01 +smooth + +8.53598603282927 +47.35036166338725 +428.9283667342375 +-204.11517685337046 +82.75305777039394 +0 +120 +absolute + + + +0.01 +smooth + +8.535985394018656 +47.35036137127675 +428.9283854968833 +-204.1096702231938 +82.77638422084104 +0 +120 +absolute + + + +0.01 +smooth + +8.535984758845482 +47.35036108026167 +428.9284042735451 +-204.10403859897804 +82.7996357531731 +0 +120 +absolute + + + +0.01 +smooth + +8.535984127374304 +47.350360790377195 +428.92842306044395 +-204.09828977259937 +82.82280949907086 +0 +120 +absolute + + + +0.01 +smooth + +8.535983499669678 +47.35036050165855 +428.9284418538015 +-204.0924315359341 +82.84590259021493 +0 +120 +absolute + + + +0.01 +smooth + +8.535982875796165 +47.35036021414095 +428.9284606498388 +-204.08647168085866 +82.86891215828604 +0 +120 +absolute + + + +0.01 +smooth + +8.535982255818329 +47.35035992785963 +428.9284794447779 +-204.08041799924945 +82.89183533496498 +0 +120 +absolute + + + +0.01 +smooth + +8.535981639800726 +47.35035964284978 +428.9284982348396 +-204.0742782829826 +82.91466925193234 +0 +120 +absolute + + + +0.01 +smooth + +8.535981027807916 +47.350359359146616 +428.9285170162458 +-204.06806032393462 +82.93741104086884 +0 +120 +absolute + + + +0.01 +smooth + +8.535980419904462 +47.35035907678538 +428.9285357852176 +-204.06177191398183 +82.96005783345518 +0 +120 +absolute + + + +0.01 +smooth + +8.53597981615492 +47.35035879580125 +428.92855453797677 +-204.05542084500053 +82.9826067613721 +0 +120 +absolute + + + +0.01 +smooth + +8.535979216623854 +47.35035851622948 +428.92857327074444 +-204.0490149088671 +83.00505495630026 +0 +120 +absolute + + + +0.01 +smooth + +8.535978621375822 +47.35035823810526 +428.9285919797422 +-204.0425618974578 +83.02739954992037 +0 +120 +absolute + + + +0.01 +smooth + +8.535978030475382 +47.350357961463814 +428.9286106611913 +-204.0360696026491 +83.04963767391314 +0 +120 +absolute + + + +0.01 +smooth + +8.535977443987097 +47.350357686340374 +428.92862931131344 +-204.0295458163172 +83.07176645995925 +0 +120 +absolute + + + +0.01 +smooth + +8.535976861975524 +47.35035741277012 +428.9286479263299 +-204.02299833033857 +83.09378303973942 +0 +120 +absolute + + + +0.01 +smooth + +8.535976284505226 +47.350357140788304 +428.9286665024622 +-204.0164349365895 +83.11568454493431 +0 +120 +absolute + + + +0.01 +smooth + +8.535975711640763 +47.350356870430126 +428.9286850359316 +-204.00986342694625 +83.13746810722466 +0 +120 +absolute + + + +0.01 +smooth + +8.53597514344669 +47.350356601730795 +428.9287035229597 +-204.0032915932853 +83.15913085829115 +0 +120 +absolute + + + +0.01 +smooth + +8.535974579987574 +47.35035633472555 +428.92872195976787 +-203.9967272274829 +83.18066992981451 +0 +120 +absolute + + + +0.01 +smooth + +8.535974021327968 +47.350356069449575 +428.9287403425776 +-203.99017812141543 +83.20208245347538 +0 +120 +absolute + + + +0.01 +smooth + +8.535973467532436 +47.3503558059381 +428.9287586676102 +-203.98365206695922 +83.22336556095453 +0 +120 +absolute + + + +0.01 +smooth + +8.535972918665538 +47.35035554422635 +428.92877693108727 +-203.9771568559906 +83.2445163839326 +0 +120 +absolute + + + +0.01 +smooth + +8.535972374791832 +47.35035528434955 +428.9287951292301 +-203.97070028038593 +83.2655320540903 +0 +120 +absolute + + + +0.01 +smooth + +8.535971835975882 +47.35035502634287 +428.9288132582601 +-203.96429013202155 +83.28640970310836 +0 +120 +absolute + + + +0.01 +smooth + +8.535971302228653 +47.350354770218 +428.92883131610876 +-203.95793105138642 +83.30714831666533 +0 +120 +absolute + + + +0.01 +smooth + +8.535970771847074 +47.35035451523281 +428.92884935563205 +-203.95152591267225 +83.32780614186441 +0 +120 +absolute + + + +0.01 +smooth + +8.535970244040902 +47.35035426104742 +428.92886740117586 +-203.9450286540266 +83.34840972679285 +0 +120 +absolute + + + +0.01 +smooth + +8.535969718877569 +47.35035400769939 +428.9288854498185 +-203.9384432260588 +83.36895592601194 +0 +120 +absolute + + + +0.01 +smooth + +8.535969196424523 +47.35035375522624 +428.92890349863825 +-203.931773579378 +83.38944159408297 +0 +120 +absolute + + + +0.01 +smooth + +8.535968676749194 +47.350353503665524 +428.92892154471286 +-203.92502366459345 +83.40986358556724 +0 +120 +absolute + + + +0.01 +smooth + +8.535968159919024 +47.350353253054784 +428.92893958512065 +-203.91819743231449 +83.43021875502609 +0 +120 +absolute + + + +0.01 +smooth + +8.535967646001454 +47.35035300343152 +428.92895761693967 +-203.9112988331502 +83.4505039570208 +0 +120 +absolute + + + +0.01 +smooth + +8.535967135063917 +47.350352754833345 +428.92897563724836 +-203.90433181770993 +83.47071604611271 +0 +120 +absolute + + + +0.01 +smooth + +8.53596662717386 +47.35035250729775 +428.9289936431245 +-203.89730033660294 +83.49085187686306 +0 +120 +absolute + + + +0.01 +smooth + +8.535966122398714 +47.35035226086231 +428.9290116316463 +-203.8902083404383 +83.51090830383326 +0 +120 +absolute + + + +0.01 +smooth + +8.535965620805923 +47.35035201556454 +428.92902959989203 +-203.8830597798255 +83.5308821815845 +0 +120 +absolute + + + +0.01 +smooth + +8.535965122462924 +47.35035177144197 +428.9290475449396 +-203.8758586053736 +83.55077036467812 +0 +120 +absolute + + + +0.01 +smooth + +8.53596462743715 +47.35035152853214 +428.9290654638671 +-203.8686087676918 +83.57056970767545 +0 +120 +absolute + + + +0.01 +smooth + +8.535964135796048 +47.35035128687264 +428.9290833537532 +-203.86131421738955 +83.59027706513778 +0 +120 +absolute + + + +0.01 +smooth + +8.535963647607053 +47.350351046500954 +428.9291012116753 +-203.85397890507588 +83.60988929162639 +0 +120 +absolute + + + +0.01 +smooth + +8.535963162937605 +47.35035080745465 +428.929119034712 +-203.84660678136012 +83.62940324170263 +0 +120 +absolute + + + +0.01 +smooth + +8.535962681855139 +47.35035056977127 +428.9291368199413 +-203.83920179685148 +83.64881576992777 +0 +120 +absolute + + + +0.01 +smooth + +8.535962204427099 +47.35035033348835 +428.92915456444115 +-203.83176790215924 +83.66812373086313 +0 +120 +absolute + + + +0.01 +smooth + +8.535961730720919 +47.350350098643425 +428.92917226528994 +-203.82430904789265 +83.68732397906999 +0 +120 +absolute + + + +0.01 +smooth + +8.53596126080404 +47.350349865274055 +428.9291899195657 +-203.8168291846608 +83.70641336910968 +0 +120 +absolute + + + +0.01 +smooth + +8.5359607947439 +47.35034963341775 +428.92920752434657 +-203.8093322630731 +83.7253887555435 +0 +120 +absolute + + + +0.01 +smooth + +8.535960332607939 +47.35034940311208 +428.92922507671057 +-203.8018222337388 +83.74424699293276 +0 +120 +absolute + + + +0.01 +smooth + +8.535959874463593 +47.350349174394566 +428.929242573736 +-203.79430304726696 +83.76298493583874 +0 +120 +absolute + + + +0.01 +smooth + +8.535959420378301 +47.350348947302756 +428.9292600125009 +-203.78677865426693 +83.78159943882275 +0 +120 +absolute + + + +0.01 +smooth + +8.535958970419507 +47.3503487218742 +428.92927739008337 +-203.77925300534798 +83.80008735644613 +0 +120 +absolute + + + +0.01 +smooth + +8.535958524654642 +47.35034849814642 +428.9292947035616 +-203.77173005111928 +83.81844554327014 +0 +120 +absolute + + + +0.01 +smooth + +8.535958083151149 +47.35034827615696 +428.9293119500136 +-203.76421374219012 +83.83667085385609 +0 +120 +absolute + + + +0.01 +smooth + +8.535957645976467 +47.35034805594337 +428.9293291265177 +-203.75670802916972 +83.85476014276531 +0 +120 +absolute + + + +0.01 +smooth + +8.535957213198031 +47.3503478375432 +428.92934623015185 +-203.74921686266725 +83.87271026455907 +0 +120 +absolute + + + +0.01 +smooth + +8.535956784883284 +47.35034762099396 +428.9293632579943 +-203.74174419329205 +83.89051807379872 +0 +120 +absolute + + + +0.01 +smooth + +8.535956361099663 +47.35034740633321 +428.929380207123 +-203.73429397165336 +83.9081804250455 +0 +120 +absolute + + + +0.01 +smooth + +8.535955941914604 +47.35034719359851 +428.9293970746162 +-203.72687014836032 +83.92569417286079 +0 +120 +absolute + + + +0.01 +smooth + +8.53595552739555 +47.35034698282736 +428.9294138575521 +-203.71947667402225 +83.94305617180584 +0 +120 +absolute + + + +0.01 +smooth + +8.535955117609937 +47.35034677405733 +428.9294305530086 +-203.71211749924836 +83.96026327644195 +0 +120 +absolute + + + +0.01 +smooth + +8.535954712625205 +47.35034656732596 +428.92944715806414 +-203.70479657464793 +83.97731234133046 +0 +120 +absolute + + + +0.01 +smooth + +8.535954312508792 +47.35034636267076 +428.92946366979663 +-203.6975178508301 +83.99420022103264 +0 +120 +absolute + + + +0.01 +smooth + +8.535953917328136 +47.35034616012931 +428.92948008528424 +-203.6902852784042 +84.01092377010981 +0 +120 +absolute + + + +0.01 +smooth + +8.535953526501348 +47.350345959432495 +428.9294964187046 +-203.68308348919325 +84.02750459803069 +0 +120 +absolute + + + +0.01 +smooth + +8.535953137986933 +47.350345759622556 +428.92951272287024 +-203.67585319797013 +84.04401988202488 +0 +120 +absolute + + + +0.01 +smooth + +8.535952751692921 +47.350345560662994 +428.92952899947505 +-203.66859257211166 +84.06047238812577 +0 +120 +absolute + + + +0.01 +smooth + +8.535952367689733 +47.35034536259404 +428.92954524594467 +-203.66130459069993 +84.07685868840863 +0 +120 +absolute + + + +0.01 +smooth + +8.535951986047792 +47.35034516545593 +428.9295614597048 +-203.6539922328171 +84.09317535494867 +0 +120 +absolute + + + +0.01 +smooth + +8.535951606837518 +47.35034496928886 +428.92957763818106 +-203.64665847754517 +84.10941895982118 +0 +120 +absolute + + + +0.01 +smooth + +8.53595123012933 +47.350344774133106 +428.9295937787991 +-203.63930630396635 +84.1255860751014 +0 +120 +absolute + + + +0.01 +smooth + +8.53595085599365 +47.350344580028825 +428.92960987898425 +-203.63193869116265 +84.14167327286458 +0 +120 +absolute + + + +0.01 +smooth + +8.535950484500901 +47.35034438701631 +428.9296259361627 +-203.62455861821624 +84.15767712518603 +0 +120 +absolute + + + +0.01 +smooth + +8.535950115721501 +47.350344195135726 +428.9296419477594 +-203.61716906420912 +84.1735942041409 +0 +120 +absolute + + + +0.01 +smooth + +8.535949749725873 +47.35034400442735 +428.92965791120065 +-203.60977300822353 +84.18942108180457 +0 +120 +absolute + + + +0.01 +smooth + +8.535949386584434 +47.35034381493136 +428.92967382391146 +-203.60237342934144 +84.20515433025217 +0 +120 +absolute + + + +0.01 +smooth + +8.535949026367609 +47.350343626688 +428.92968968331775 +-203.594973306645 +84.22079052155908 +0 +120 +absolute + + + +0.01 +smooth + +8.535948669145814 +47.350343439737514 +428.9297054868451 +-203.5875756192163 +84.23632622780046 +0 +120 +absolute + + + +0.01 +smooth + +8.535948314989476 +47.35034325412011 +428.92972123191913 +-203.58018334613752 +84.25175802105166 +0 +120 +absolute + + + +0.01 +smooth + +8.535947963969006 +47.35034306987598 +428.9297369159653 +-203.57279946649055 +84.2670824733878 +0 +120 +absolute + + + +0.01 +smooth + +8.53594761615484 +47.350342887045414 +428.92975253640964 +-203.56542695935778 +84.28229615688431 +0 +120 +absolute + + + +0.01 +smooth + +8.535947271617383 +47.350342705668574 +428.92976809067727 +-203.55806880382102 +84.29739564361628 +0 +120 +absolute + + + +0.01 +smooth + +8.535946930427066 +47.35034252578575 +428.92978357619427 +-203.55072797896267 +84.3123775056591 +0 +120 +absolute + + + +0.01 +smooth + +8.535946592654305 +47.350342347437106 +428.92979899038585 +-203.54340746386453 +84.32723831508791 +0 +120 +absolute + + + +0.01 +smooth + +8.53594625836952 +47.3503421706629 +428.9298143306778 +-203.53611023760885 +84.34197464397805 +0 +120 +absolute + + + +0.01 +smooth + +8.535945927643136 +47.35034199550334 +428.92982959449586 +-203.52883927927772 +84.35658306440476 +0 +120 +absolute + + + +0.01 +smooth + +8.535945600545572 +47.350341821998654 +428.9298447792654 +-203.52159756795328 +84.37106014844328 +0 +120 +absolute + + + +0.01 +smooth + +8.535945277147247 +47.35034165018908 +428.92985988241236 +-203.51438808271752 +84.38540246816888 +0 +120 +absolute + + + +0.01 +smooth + +8.535944957518584 +47.35034148011483 +428.9298749013621 +-203.50721380265264 +84.39960659565679 +0 +120 +absolute + + + +0.01 +smooth + +8.535944641730001 +47.35034131181613 +428.9298898335402 +-203.50007770684067 +84.4136691029823 +0 +120 +absolute + + + +0.01 +smooth + +8.535944329851924 +47.3503411453332 +428.9299046763725 +-203.49298277436378 +84.42758656222065 +0 +120 +absolute + + + +0.01 +smooth + +8.53594402195477 +47.35034098070629 +428.9299194272844 +-203.48593198430396 +84.4413555454471 +0 +120 +absolute + + + +0.01 +smooth + +8.535943718108957 +47.35034081797559 +428.9299340837018 +-203.47892831574347 +84.45497262473691 +0 +120 +absolute + + + +0.01 +smooth + +8.53594341838491 +47.35034065718135 +428.92994864304995 +-203.47197474776425 +84.46843437216533 +0 +120 +absolute + + + +0.01 +smooth + +8.535943122853048 +47.35034049836378 +428.92996310275475 +-203.46507425944844 +84.48173735980762 +0 +120 +absolute + + + +0.01 +smooth + +8.535942831583794 +47.35034034156311 +428.92997746024173 +-203.45822982987823 +84.49487815973903 +0 +120 +absolute + + + +0.01 +smooth + +8.535942544647567 +47.350340186819565 +428.9299917129365 +-203.45144443813564 +84.50785334403481 +0 +120 +absolute + + + +0.01 +smooth + +8.535942262114787 +47.350340034173364 +428.93000585826474 +-203.44472106330278 +84.52065948477025 +0 +120 +absolute + + + +0.01 +smooth + +8.535941984055876 +47.350339883664745 +428.930019893652 +-203.43806268446173 +84.53329315402055 +0 +120 +absolute + + + +0.01 +smooth + +8.535941710541254 +47.35033973533392 +428.93003381652386 +-203.43147228069463 +84.54575092386104 +0 +120 +absolute + + + +0.01 +smooth + +8.535941441641341 +47.35033958922112 +428.930047624306 +-203.42495283108354 +84.55802936636691 +0 +120 +absolute + + + +0.01 +smooth + +8.535941177398394 +47.35033944535224 +428.9300613151581 +-203.4185066108762 +84.57012623749067 +0 +120 +absolute + + + +0.01 +smooth + +8.535940915932697 +47.35033930277572 +428.9300749373234 +-203.41208781247678 +84.58212003487655 +0 +120 +absolute + + + +0.01 +smooth + +8.535940656126744 +47.350339160928726 +428.930088519164 +-203.40566948938672 +84.59405711268599 +0 +120 +absolute + + + +0.01 +smooth + +8.535940398053441 +47.35033901985416 +428.9301020580147 +-203.39925440512494 +84.6059337723921 +0 +120 +absolute + + + +0.01 +smooth + +8.535940141785698 +47.350338879594936 +428.93011555121035 +-203.39284532321042 +84.61774631546822 +0 +120 +absolute + + + +0.01 +smooth + +8.53593988739643 +47.35033874019397 +428.9301289960859 +-203.38644500716217 +84.62949104338759 +0 +120 +absolute + + + +0.01 +smooth + +8.535939634958545 +47.3503386016942 +428.93014238997597 +-203.38005622049928 +84.64116425762347 +0 +120 +absolute + + + +0.01 +smooth + +8.535939384544955 +47.35033846413852 +428.9301557302157 +-203.37368172674073 +84.65276225964905 +0 +120 +absolute + + + +0.01 +smooth + +8.535939136228576 +47.35033832756985 +428.9301690141397 +-203.36732428940545 +84.66428135093764 +0 +120 +absolute + + + +0.01 +smooth + +8.535938890082313 +47.35033819203112 +428.9301822390829 +-203.36098667201247 +84.67571783296242 +0 +120 +absolute + + + +0.01 +smooth + +8.535938646179083 +47.35033805756525 +428.9301954023804 +-203.35467163808093 +84.68706800719676 +0 +120 +absolute + + + +0.01 +smooth + +8.535938404591793 +47.350337924215125 +428.9302085013664 +-203.3483819511296 +84.69832817511374 +0 +120 +absolute + + + +0.01 +smooth + +8.535938165393357 +47.35033779202371 +428.9302215333765 +-203.34212037467768 +84.70949463818675 +0 +120 +absolute + + + +0.01 +smooth + +8.535937928656683 +47.350337661033876 +428.9302344957449 +-203.33588967224404 +84.72056369788893 +0 +120 +absolute + + + +0.01 +smooth + +8.535937694454685 +47.35033753128858 +428.93024738580687 +-203.32969260734774 +84.7315316556936 +0 +120 +absolute + + + +0.01 +smooth + +8.535937462860277 +47.35033740283071 +428.93026020089695 +-203.3235319435078 +84.742394813074 +0 +120 +absolute + + + +0.01 +smooth + +8.535937233946365 +47.35033727570321 +428.9302729383503 +-203.31741044424328 +84.75314947150335 +0 +120 +absolute + + + +0.01 +smooth + +8.53593700778586 +47.350337149948956 +428.93028559550135 +-203.31133087307296 +84.76379193245488 +0 +120 +absolute + + + +0.01 +smooth + +8.53593678445168 +47.35033702561091 +428.93029816968544 +-203.30529599351615 +84.77431849740192 +0 +120 +absolute + + + +0.01 +smooth + +8.53593656401673 +47.350336902731954 +428.9303106582371 +-203.2993085690916 +84.78472546781761 +0 +120 +absolute + + + +0.01 +smooth + +8.535936346553925 +47.35033678135504 +428.93032305849107 +-203.29337136331844 +84.79500914517529 +0 +120 +absolute + + + +0.01 +smooth + +8.535936132136175 +47.35033666152305 +428.9303353677825 +-203.2874871397157 +84.80516583094813 +0 +120 +absolute + + + +0.01 +smooth + +8.53593592083639 +47.35033654327893 +428.93034758344606 +-203.28165866180225 +84.81519182660944 +0 +120 +absolute + + + +0.01 +smooth + +8.535935712727483 +47.35033642666558 +428.9303597028166 +-203.27588869309722 +84.82508343363241 +0 +120 +absolute + + + +0.01 +smooth + +8.535935507882364 +47.35033631172591 +428.9303717232289 +-203.27017999711956 +84.83483695349034 +0 +120 +absolute + + + +0.01 +smooth + +8.535935306373947 +47.350336198502866 +428.93038364201806 +-203.26453533738822 +84.84444868765647 +0 +120 +absolute + + + +0.01 +smooth + +8.535935108275142 +47.35033608703935 +428.9303954565186 +-203.25895747742237 +84.853914937604 +0 +120 +absolute + + + +0.01 +smooth + +8.53593491365886 +47.350335977378265 +428.9304071640656 +-203.25344918074086 +84.86323200480624 +0 +120 +absolute + + + +0.01 +smooth + +8.535934722598011 +47.35033586956256 +428.93041876199374 +-203.24801321086272 +84.87239619073638 +0 +120 +absolute + + + +0.01 +smooth + +8.53593453516551 +47.35033576363512 +428.93043024763796 +-203.242652331307 +84.8814037968677 +0 +120 +absolute + + + +0.01 +smooth + +8.535934351434264 +47.35033565963887 +428.930441618333 +-203.2373693055927 +84.89025112467344 +0 +120 +absolute + + + +0.01 +smooth + +8.535934171477187 +47.35033555761675 +428.9304528714139 +-203.23216689723878 +84.89893447562686 +0 +120 +absolute + + + +0.01 +smooth + +8.53593399536719 +47.350335457611656 +428.9304640042153 +-203.22704786976428 +84.90745015120119 +0 +120 +absolute + + + +0.01 +smooth + +8.535933823177183 +47.3503353596665 +428.93047501407216 +-203.22201498668818 +84.91579445286968 +0 +120 +absolute + + + +0.01 +smooth + +8.53593365498008 +47.35033526382422 +428.93048589831926 +-203.21707101152953 +84.92396368210558 +0 +120 +absolute + + + +0.01 +smooth + +8.53593349084879 +47.350335170127714 +428.93049665429146 +-203.21221870780724 +84.93195414038215 +0 +120 +absolute + + + +0.01 +smooth + +8.535933330856226 +47.350335078619906 +428.9305072793236 +-203.2074608390404 +84.93976212917259 +0 +120 +absolute + + + +0.01 +smooth + +8.5359331750753 +47.35033498934373 +428.93051777075055 +-203.202800168748 +84.94738394995022 +0 +120 +absolute + + + +0.01 +smooth + +8.535933022971081 +47.3503349020097 +428.9305281446039 +-203.1982227024854 +84.95484394133881 +0 +120 +absolute + + + +0.01 +smooth + +8.535932872117572 +47.350334815294914 +428.93053847478006 +-203.1936623261224 +84.9622536005906 +0 +120 +absolute + + + +0.01 +smooth + +8.535932722317476 +47.35033472909597 +428.930548766232 +-203.18911439215324 +84.96962153486766 +0 +120 +absolute + + + +0.01 +smooth + +8.53593257364365 +47.35033464345724 +428.9305590155847 +-203.18458170206898 +84.97694388612229 +0 +120 +absolute + + + +0.01 +smooth + +8.535932426168946 +47.35033455842308 +428.93056921946294 +-203.1800670573604 +84.98421679630682 +0 +120 +absolute + + + +0.01 +smooth + +8.535932279966218 +47.35033447403784 +428.93057937449123 +-203.1755732595183 +84.99143640737358 +0 +120 +absolute + + + +0.01 +smooth + +8.53593213510832 +47.35033439034588 +428.93058947729423 +-203.1711031100336 +84.9985988612749 +0 +120 +absolute + + + +0.01 +smooth + +8.535931991668106 +47.35033430739156 +428.93059952449676 +-203.16665941039707 +85.0057002999631 +0 +120 +absolute + + + +0.01 +smooth + +8.535931849718427 +47.35033422521926 +428.9306095127234 +-203.1622449620996 +85.01273686539051 +0 +120 +absolute + + + +0.01 +smooth + +8.535931709332138 +47.35033414387327 +428.93061943859874 +-203.15786256663193 +85.01970469950939 +0 +120 +absolute + + + +0.01 +smooth + +8.535931570582097 +47.350334063398044 +428.93062929874776 +-203.15351502548504 +85.02659994427218 +0 +120 +absolute + + + +0.01 +smooth + +8.535931433541153 +47.3503339838379 +428.9306390897951 +-203.14920514014975 +85.03341874163114 +0 +120 +absolute + + + +0.01 +smooth + +8.535931298282165 +47.35033390523717 +428.93064880836516 +-203.1449357121168 +85.04015723353858 +0 +120 +absolute + + + +0.01 +smooth + +8.53593116487798 +47.350333827640256 +428.9306584510829 +-203.14070954287712 +85.04681156194687 +0 +120 +absolute + + + +0.01 +smooth + +8.535931033401457 +47.3503337510915 +428.930668014573 +-203.13652943392157 +85.05337786880833 +0 +120 +absolute + + + +0.01 +smooth + +8.535930903925445 +47.35033367563524 +428.93067749545975 +-203.13239818674083 +85.0598522960752 +0 +120 +absolute + + + +0.01 +smooth + +8.535930776522807 +47.35033360131589 +428.93068689036863 +-203.12831860282606 +85.06623098569996 +0 +120 +absolute + + + +0.01 +smooth + +8.535930651266385 +47.35033352817775 +428.9306961959236 +-203.12429348366783 +85.07251007963482 +0 +120 +absolute + + + +0.01 +smooth + +8.53593052822904 +47.3503334562652 +428.9307054087496 +-203.120325630757 +85.07868571983211 +0 +120 +absolute + + + +0.01 +smooth + +8.535930407483626 +47.3503333856226 +428.93071452547133 +-203.11641784558455 +85.08475404824419 +0 +120 +absolute + + + +0.01 +smooth + +8.535930289102994 +47.35033331629434 +428.9307235427135 +-203.1125729296412 +85.09071120682341 +0 +120 +absolute + + + +0.01 +smooth + +8.53593017316 +47.35033324832472 +428.9307324571008 +-203.10879368441786 +85.09655333752205 +0 +120 +absolute + + + +0.01 +smooth + +8.535930059727496 +47.35033318175816 +428.9307412652579 +-203.10508291140533 +85.10227658229245 +0 +120 +absolute + + + +0.01 +smooth + +8.535929948878337 +47.35033311663898 +428.9307499638095 +-203.10144341209448 +85.10787708308692 +0 +120 +absolute + + + +0.01 +smooth + +8.535929840685379 +47.35033305301155 +428.93075854938024 +-203.0978779879762 +85.11335098185779 +0 +120 +absolute + + + +0.01 +smooth + +8.53592973522147 +47.35033299092022 +428.9307670185949 +-203.09438944054128 +85.1186944205574 +0 +120 +absolute + + + +0.01 +smooth + +8.53592963255947 +47.350332930409365 +428.9307753680781 +-203.0909805712805 +85.12390354113809 +0 +120 +absolute + + + +0.01 +smooth + +8.53592953277223 +47.35033287152334 +428.9307835944545 +-203.0876541816848 +85.12897448555215 +0 +120 +absolute + + + +0.01 +smooth + +8.535929435932601 +47.350332814306505 +428.93079169434884 +-203.08441307324497 +85.13390339575193 +0 +120 +absolute + + + +0.01 +smooth + +8.535929342113443 +47.350332758803205 +428.93079966438586 +-203.0812600474519 +85.13868641368973 +0 +120 +absolute + + + +0.01 +smooth + +8.535929251387604 +47.35033270505782 +428.9308075011902 +-203.0781979057964 +85.1433196813179 +0 +120 +absolute + + + +0.01 +smooth + +8.535929163827943 +47.35033265311469 +428.9308152013865 +-203.07522944976932 +85.14779934058876 +0 +120 +absolute + + + +0.01 +smooth + +8.535929079507309 +47.35033260301819 +428.93082276159953 +-203.07235748086154 +85.15212153345462 +0 +120 +absolute + + + +0.01 +smooth + +8.535928998498559 +47.35033255481268 +428.9308301784539 +-203.06958480056375 +85.15628240186783 +0 +120 +absolute + + + +0.01 +smooth + +8.535928920874545 +47.35033250854251 +428.9308374485743 +-203.066914210367 +85.1602780877807 +0 +120 +absolute + + + +0.01 +smooth + +8.535928846708124 +47.35033246425204 +428.9308445685855 +-203.064348511762 +85.16410473314555 +0 +120 +absolute + + + +0.01 +smooth + +8.535928776072144 +47.350332421985634 +428.93085153511214 +-203.06189050623965 +85.16775847991471 +0 +120 +absolute + + + +0.01 +smooth + +8.535928709032055 +47.350332381783325 +428.930858345138 +-203.05954275307354 +85.17123584139497 +0 +120 +absolute + + + +0.01 +smooth + +8.535928643782768 +47.35033234259411 +428.93086508564875 +-203.05724669928804 +85.17462703045939 +0 +120 +absolute + + + +0.01 +smooth + +8.535928578932158 +47.35033230360847 +428.9308718215471 +-203.05495734042887 +85.17800150755814 +0 +120 +absolute + + + +0.01 +smooth + +8.535928514538758 +47.350332264863304 +428.93087854702065 +-203.05267709033532 +85.18135603820028 +0 +120 +absolute + + + +0.01 +smooth + +8.535928450661117 +47.350332226395466 +428.93088525625717 +-203.05040836284672 +85.18468738789501 +0 +120 +absolute + + + +0.01 +smooth + +8.535928387357766 +47.35033218824184 +428.930891943444 +-203.04815357180235 +85.18799232215143 +0 +120 +absolute + + + +0.01 +smooth + +8.535928324687244 +47.35033215043932 +428.9308986027692 +-203.0459151310416 +85.19126760647868 +0 +120 +absolute + + + +0.01 +smooth + +8.535928262708088 +47.350332113024734 +428.9309052284198 +-203.04369545440355 +85.19451000638583 +0 +120 +absolute + + + +0.01 +smooth + +8.535928201478837 +47.35033207603501 +428.930911814584 +-203.0414969557278 +85.19771628738208 +0 +120 +absolute + + + +0.01 +smooth + +8.53592814105803 +47.350332039506995 +428.9309183554491 +-203.03932204885342 +85.2008832149765 +0 +120 +absolute + + + +0.01 +smooth + +8.5359280815042 +47.35033200347757 +428.9309248452028 +-203.03717314761982 +85.20400755467824 +0 +120 +absolute + + + +0.01 +smooth + +8.535928022875888 +47.35033196798361 +428.9309312780327 +-203.03505266586632 +85.20708607199644 +0 +120 +absolute + + + +0.01 +smooth + +8.535927965231636 +47.35033193306198 +428.9309376481264 +-203.0329630174322 +85.21011553244018 +0 +120 +absolute + + + +0.01 +smooth + +8.535927908629972 +47.350331898749566 +428.9309439496715 +-203.0309066161567 +85.2130927015186 +0 +120 +absolute + + + +0.01 +smooth + +8.535927853129447 +47.35033186508327 +428.93095017685596 +-203.02888587587927 +85.2160143447409 +0 +120 +absolute + + + +0.01 +smooth + +8.535927798788583 +47.35033183209991 +428.93095632386695 +-203.0269032104391 +85.21887722761606 +0 +120 +absolute + + + +0.01 +smooth + +8.535927745665935 +47.35033179983643 +428.93096238489244 +-203.02496103367554 +85.22167811565336 +0 +120 +absolute + + + +0.01 +smooth + +8.535927693820025 +47.35033176832963 +428.93096835411967 +-203.02306175942775 +85.2244137743618 +0 +120 +absolute + + + +0.01 +smooth + +8.535927643309401 +47.35033173761646 +428.9309742257367 +-203.02120780153533 +85.2270809692506 +0 +120 +absolute + + + +0.01 +smooth + +8.535927594192597 +47.350331707733744 +428.93097999393086 +-203.01940157383734 +85.22967646582883 +0 +120 +absolute + + + +0.01 +smooth + +8.535927546528152 +47.350331678718376 +428.93098565288983 +-203.01764549017315 +85.23219702960562 +0 +120 +absolute + + + +0.01 +smooth + +8.535927500374605 +47.35033165060724 +428.93099119680136 +-203.01594196438214 +85.2346394260901 +0 +120 +absolute + + + +0.01 +smooth + +8.53592745579049 +47.3503316234372 +428.9309966198529 +-203.01429341030348 +85.23700042079142 +0 +120 +absolute + + + +0.01 +smooth + +8.535927412834349 +47.35033159724512 +428.93100191623216 +-203.01270224177657 +85.23927677921868 +0 +120 +absolute + + + +0.01 +smooth + +8.535927371564716 +47.35033157206791 +428.93100708012673 +-203.0111708726407 +85.241465266881 +0 +120 +absolute + + + +0.01 +smooth + +8.535927332040131 +47.3503315479424 +428.9310121057244 +-203.00970171673512 +85.24356264928753 +0 +120 +absolute + + + +0.01 +smooth + +8.535927294319134 +47.35033152490551 +428.9310169872126 +-203.00829718789925 +85.24556569194738 +0 +120 +absolute + + + +0.01 +smooth + +8.535927258460257 +47.350331502994095 +428.9310217187789 +-203.00695969997224 +85.24747116036967 +0 +120 +absolute + + + +0.01 +smooth + +8.535927224522045 +47.350331482245025 +428.9310262946112 +-203.00569166679352 +85.24927582006353 +0 +120 +absolute + + + +0.01 +smooth + +8.53592719256303 +47.35033146269519 +428.93103070889686 +-203.00449550220236 +85.25097643653808 +0 +120 +absolute + + + +0.01 +smooth + +8.535927162641752 +47.35033144438145 +428.93103495582375 +-203.00337362003805 +85.25256977530248 +0 +120 +absolute + + + +0.01 +smooth + +8.535927134816749 +47.350331427340706 +428.93103902957915 +-203.00232843413988 +85.2540526018658 +0 +120 +absolute + + + +0.01 +smooth + +8.53592710914656 +47.350331411609794 +428.931042924351 +-203.0013623583472 +85.2554216817372 +0 +120 +absolute + + + +0.01 +smooth + +8.53592708568972 +47.35033139722563 +428.9310466343268 +-203.00047780649928 +85.25667378042581 +0 +120 +absolute + + + +0.01 +smooth + +8.535927064504769 +47.35033138422507 +428.9310501536942 +-202.99967719243546 +85.25780566344073 +0 +120 +absolute + + + +0.01 +smooth + +8.535927045650244 +47.35033137264499 +428.9310534766407 +-202.998962929995 +85.25881409629113 +0 +120 +absolute + + + +0.01 +smooth + +8.535927029184682 +47.35033136252226 +428.93105659735414 +-202.99833743301718 +85.25969584448606 +0 +120 +absolute + + + +0.01 +smooth + +8.535927015166621 +47.35033135389377 +428.9310595100221 +-202.9978031153414 +85.26044767353473 +0 +120 +absolute + + + +0.01 +smooth + +8.535927003317648 +47.350331346590345 +428.93106223966646 +-202.9973497663423 +85.26108427286091 +0 +120 +absolute + + + +0.01 +smooth + +8.535926991901897 +47.35033133955119 +428.9310649436145 +-202.99691249309853 +85.26169790012086 +0 +120 +absolute + + + +0.01 +smooth + +8.535926980670496 +47.35033133262429 +428.93106764157227 +-202.99648199995946 +85.2623017774794 +0 +120 +absolute + + + +0.01 +smooth + +8.53592696963067 +47.35033132581418 +428.9310703297104 +-202.99605857990088 +85.26289550706275 +0 +120 +absolute + + + +0.01 +smooth + +8.535926958789663 +47.35033131912538 +428.9310730041994 +-202.9956425258984 +85.2634786909972 +0 +120 +absolute + + + +0.01 +smooth + +8.5359269481547 +47.35033131256245 +428.9310756612098 +-202.9952341309278 +85.26405093140907 +0 +120 +absolute + + + +0.01 +smooth + +8.53592693773302 +47.35033130612992 +428.931078296912 +-202.99483368796467 +85.2646118304246 +0 +120 +absolute + + + +0.01 +smooth + +8.535926927531861 +47.35033129983236 +428.9310809074767 +-202.99444148998484 +85.26516099017013 +0 +120 +absolute + + + +0.01 +smooth + +8.53592691755846 +47.35033129367429 +428.9310834890744 +-202.99405782996388 +85.26569801277186 +0 +120 +absolute + + + +0.01 +smooth + +8.535926907820048 +47.35033128766024 +428.93108603787573 +-202.9936830008776 +85.26622250035616 +0 +120 +absolute + + + +0.01 +smooth + +8.53592689832386 +47.35033128179478 +428.93108855005096 +-202.99331729570156 +85.26673405504924 +0 +120 +absolute + + + +0.01 +smooth + +8.535926889077134 +47.35033127608244 +428.9310910217708 +-202.9929610074116 +85.26723227897742 +0 +120 +absolute + + + +0.01 +smooth + +8.535926880087098 +47.35033127052773 +428.93109344920555 +-202.99261442898325 +85.26771677426694 +0 +120 +absolute + + + +0.01 +smooth + +8.535926871361001 +47.350331265135274 +428.9310958285262 +-202.99227785339235 +85.26818714304419 +0 +120 +absolute + + + +0.01 +smooth + +8.535926862906065 +47.35033125990952 +428.9310981559029 +-202.99195157361444 +85.26864298743529 +0 +120 +absolute + + + +0.01 +smooth + +8.535926854729531 +47.35033125485506 +428.93110042750635 +-202.9916358826254 +85.26908390956665 +0 +120 +absolute + + + +0.01 +smooth + +8.535926846838635 +47.35033124997643 +428.93110263950695 +-202.99133107340077 +85.2695095115645 +0 +120 +absolute + + + +0.01 +smooth + +8.53592683924061 +47.350331245278156 +428.93110478807534 +-202.99103743891635 +85.26991939555512 +0 +120 +absolute + + + +0.01 +smooth + +8.535926831942689 +47.3503312407648 +428.931106869382 +-202.99075527214774 +85.2703131636648 +0 +120 +absolute + + + +0.01 +smooth + +8.535926824952114 +47.3503312364409 +428.93110887959756 +-202.99048486607072 +85.27069041801983 +0 +120 +absolute + + + +0.01 +smooth + +8.535926818276113 +47.35033123231101 +428.93111081489246 +-202.99022651366093 +85.27105076074649 +0 +120 +absolute + + + +0.01 +smooth + +8.535926811921927 +47.35033122837963 +428.9311126714372 +-202.98998050789405 +85.27139379397104 +0 +120 +absolute + + + +0.01 +smooth + +8.535926805896787 +47.35033122465134 +428.9311144454024 +-202.98974714174582 +85.27171911981979 +0 +120 +absolute + + + +0.01 +smooth + +8.535926800207932 +47.35033122113066 +428.9311161329585 +-202.98952670819193 +85.27202634041902 +0 +120 +absolute + + + +0.01 +smooth + +8.535926794862593 +47.35033121782215 +428.9311177302761 +-202.989319500208 +85.27231505789497 +0 +120 +absolute + + + +0.01 +smooth + +8.53592678986801 +47.350331214730346 +428.9311192335257 +-202.98912581076985 +85.27258487437396 +0 +120 +absolute + + + +0.01 +smooth + +8.535926785231412 +47.350331211859775 +428.93112063887787 +-202.98894593285308 +85.27283539198228 +0 +120 +absolute + + + +0.01 +smooth + +8.53592678096004 +47.350331209215 +428.93112194250307 +-202.98878015943336 +85.2730662128462 +0 +120 +absolute + + + +0.01 +smooth + +8.535926777061125 +47.35033120680055 +428.9311231405719 +-202.9886287834865 +85.27327693909199 +0 +120 +absolute + + + +0.01 +smooth + +8.535926773541906 +47.35033120462097 +428.9311242292548 +-202.98849209798806 +85.27346717284593 +0 +120 +absolute + + + +0.01 +smooth + +8.535926770409615 +47.3503312026808 +428.93112520472243 +-202.98837039591382 +85.27363651623432 +0 +120 +absolute + + + +0.01 +smooth + +8.535926767671489 +47.350331200984584 +428.93112606314526 +-202.98826397023947 +85.27378457138343 +0 +120 +absolute + + + +0.01 +smooth + +8.535926765334764 +47.35033119953687 +428.93112680069385 +-202.98817311394066 +85.27391094041955 +0 +120 +absolute + + + +0.01 +smooth + +8.535926763406671 +47.350331198342175 +428.93112741353866 +-202.98809811999314 +85.27401522546896 +0 +120 +absolute + + + +0.01 +smooth + +8.53592676189445 +47.350331197405076 +428.9311278978503 +-202.98803928137255 +85.27409702865793 +0 +120 +absolute + + + +0.01 +smooth + +8.535926760805335 +47.350331196730096 +428.93112824979926 +-202.98799689105456 +85.27415595211274 +0 +120 +absolute + + + +0.01 +smooth + +8.53592676014656 +47.35033119632178 +428.931128465556 +-202.98797124201494 +85.2741915979597 +0 +120 +absolute + + + +0.01 +smooth + +8.53592675992536 +47.35033119618466 +428.9311285412912 +-202.9879626272294 +85.27420356832506 +0 +120 +absolute + + + + + + diff --git a/parameter-learning_nd_disc/kmls/saffa2.kml b/parameter-learning_nd_disc/kmls/saffa2.kml new file mode 100755 index 0000000..260a576 --- /dev/null +++ b/parameter-learning_nd_disc/kmls/saffa2.kml @@ -0,0 +1,42866 @@ + + + + + +Tour + + +0.01 +smooth + +8.536348154452593 +47.34969652396877 +412.35755233845094 +14.0290626583571 +88.46603184312883 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815441963 +47.349696523954826 +412.3577706205704 +14.029068815292469 +88.46603286461404 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154321315 +47.349696523913266 +412.3581989228934 +14.029087186689697 +88.4660359124998 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154158503 +47.34969652384442 +412.3588330882318 +14.029117623435434 +88.46604096193114 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153932053 +47.34969652374864 +412.3596689593985 +14.029159976416361 +88.46604798805326 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153642814 +47.3496965236263 +412.3607023792049 +14.029214096519134 +88.46605696601121 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153291645 +47.34969652347772 +412.36192919046374 +14.029279834630419 +88.46606787095014 +0 +120 +absolute + + + +0.01 +smooth + +8.536348152879409 +47.34969652330329 +412.36334523598737 +14.029357041636894 +88.46608067801517 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815240695 +47.34969652310335 +412.36494635858764 +14.029445568425205 +88.4660953623514 +0 +120 +absolute + + + +0.01 +smooth + +8.536348151875133 +47.34969652287823 +412.36672840107684 +14.02954526588203 +88.46611189910394 +0 +120 +absolute + + + +0.01 +smooth + +8.536348151284814 +47.349696522628335 +412.3686872062677 +14.029655984894035 +88.46613026341792 +0 +120 +absolute + + + +0.01 +smooth + +8.536348150636842 +47.349696522353966 +412.37081861697186 +14.02977757634788 +88.46615043043845 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814993208 +47.34969652205551 +412.37311847600176 +14.029909891130236 +88.46617237531062 +0 +120 +absolute + + + +0.01 +smooth + +8.536348149171385 +47.34969652173331 +412.3755826261697 +14.030052780127766 +88.46619607317959 +0 +120 +absolute + + + +0.01 +smooth + +8.536348148355605 +47.34969652138773 +412.37820691028793 +14.030206094227132 +88.46622149919044 +0 +120 +absolute + + + +0.01 +smooth + +8.536348147485603 +47.34969652101909 +412.38098717116844 +14.030369684315005 +88.46624862848827 +0 +120 +absolute + + + +0.01 +smooth + +8.536348146562233 +47.3496965206278 +412.38391925162387 +14.030543401278056 +88.46627743621826 +0 +120 +absolute + + + +0.01 +smooth + +8.536348145586352 +47.349696520214174 +412.3869989944661 +14.030727096002938 +88.46630789752548 +0 +120 +absolute + + + +0.01 +smooth + +8.536348144558811 +47.349696519778554 +412.39022224250755 +14.030920619376321 +88.46633998755505 +0 +120 +absolute + + + +0.01 +smooth + +8.536348143480474 +47.34969651932133 +412.3935848385604 +14.031123822284874 +88.46637368145205 +0 +120 +absolute + + + +0.01 +smooth + +8.536348142352196 +47.34969651884284 +412.3970826254369 +14.031336555615262 +88.4664089543617 +0 +120 +absolute + + + +0.01 +smooth + +8.536348141174827 +47.34969651834342 +412.4007114459492 +14.031558670254146 +88.46644578142896 +0 +120 +absolute + + + +0.01 +smooth + +8.536348139949226 +47.34969651782345 +412.4044671429096 +14.031790017088197 +88.46648413779907 +0 +120 +absolute + + + +0.01 +smooth + +8.536348138676253 +47.349696517283284 +412.40834555913045 +14.032030447004077 +88.46652399861712 +0 +120 +absolute + + + +0.01 +smooth + +8.536348137356757 +47.34969651672325 +412.41234253742374 +14.03227981088845 +88.46656533902816 +0 +120 +absolute + + + +0.01 +smooth + +8.536348135991597 +47.34969651614371 +412.41645392060184 +14.032537959627987 +88.46660813417736 +0 +120 +absolute + + + +0.01 +smooth + +8.536348134581633 +47.34969651554505 +412.42067555147713 +14.032804744109354 +88.46665235920987 +0 +120 +absolute + + + +0.01 +smooth + +8.536348133127719 +47.349696514927594 +412.42500327286155 +14.033080015219213 +88.46669798927074 +0 +120 +absolute + + + +0.01 +smooth + +8.536348131630707 +47.34969651429169 +412.4294329275676 +14.033363623844233 +88.46674499950511 +0 +120 +absolute + + + +0.01 +smooth + +8.536348130091458 +47.3496965136377 +412.43396035840726 +14.033655420871073 +88.46679336505808 +0 +120 +absolute + + + +0.01 +smooth + +8.536348128510825 +47.34969651296599 +412.43858140819293 +14.033955257186403 +88.4668430610748 +0 +120 +absolute + + + +0.01 +smooth + +8.536348126889665 +47.3496965122769 +412.4432919197369 +14.034262983676891 +88.46689406270032 +0 +120 +absolute + + + +0.01 +smooth + +8.536348125228837 +47.34969651157079 +412.44808773585123 +14.034578451229196 +88.46694634507983 +0 +120 +absolute + + + +0.01 +smooth + +8.536348123529192 +47.34969651084802 +412.4529646993483 +14.034901510729991 +88.4669998833584 +0 +120 +absolute + + + +0.01 +smooth + +8.53634812179159 +47.34969651010893 +412.4579186530402 +14.03523201306594 +88.46705465268116 +0 +120 +absolute + + + +0.01 +smooth + +8.536348120016886 +47.349696509353876 +412.4629454397394 +14.035569809123702 +88.46711062819321 +0 +120 +absolute + + + +0.01 +smooth + +8.536348118205934 +47.34969650858321 +412.4680409022578 +14.03591474978995 +88.46716778503968 +0 +120 +absolute + + + +0.01 +smooth + +8.536348116359594 +47.34969650779729 +412.47320088340797 +14.036266685951349 +88.46722609836569 +0 +120 +absolute + + + +0.01 +smooth + +8.536348114478717 +47.349696506996466 +412.47842122600196 +14.03662546849456 +88.46728554331634 +0 +120 +absolute + + + +0.01 +smooth + +8.536348112564164 +47.349696506181104 +412.483697772852 +14.036990948306254 +88.46734609503673 +0 +120 +absolute + + + +0.01 +smooth + +8.536348110616789 +47.34969650535155 +412.48902636677036 +14.037362976273094 +88.46740772867201 +0 +120 +absolute + + + +0.01 +smooth + +8.536348108637448 +47.34969650450816 +412.4944028505694 +14.037741403281744 +88.46747041936729 +0 +120 +absolute + + + +0.01 +smooth + +8.536348106626997 +47.34969650365128 +412.499823067061 +14.038126080218873 +88.46753414226764 +0 +120 +absolute + + + +0.01 +smooth + +8.536348104586292 +47.34969650278126 +412.50528285905784 +14.038516857971143 +88.46759887251824 +0 +120 +absolute + + + +0.01 +smooth + +8.53634810251619 +47.34969650189848 +412.5107780693719 +14.038913587425224 +88.46766458526415 +0 +120 +absolute + + + +0.01 +smooth + +8.536348100417548 +47.349696501003265 +412.5163045408153 +14.03931611946778 +88.4677312556505 +0 +120 +absolute + + + +0.01 +smooth + +8.536348098291219 +47.34969650009599 +412.52185811620063 +14.039724304985473 +88.46779885882243 +0 +120 +absolute + + + +0.01 +smooth + +8.536348096138061 +47.349696499176986 +412.52743463833986 +14.040137994864972 +88.46786736992505 +0 +120 +absolute + + + +0.01 +smooth + +8.536348093958932 +47.34969649824662 +412.53302995004526 +14.040557039992944 +88.46793676410343 +0 +120 +absolute + + + +0.01 +smooth + +8.53634809175468 +47.34969649730525 +412.5386398941292 +14.040981291256049 +88.46800701650272 +0 +120 +absolute + + + +0.01 +smooth + +8.53634808952617 +47.349696496353225 +412.5442603134036 +14.041410599540962 +88.46807810226807 +0 +120 +absolute + + + +0.01 +smooth + +8.536348087274257 +47.349696495390894 +412.54988705068104 +14.04184481573434 +88.46814999654451 +0 +120 +absolute + + + +0.01 +smooth + +8.536348084836897 +47.34969649434859 +412.5556782526367 +14.04231616035766 +88.46822801666633 +0 +120 +absolute + + + +0.01 +smooth + +8.536348082056353 +47.34969649315839 +412.56179038918805 +14.04285614604857 +88.46831736185625 +0 +120 +absolute + + + +0.01 +smooth + +8.536348078939934 +47.349696491823245 +412.5682167880095 +14.043463561868025 +88.4684178300924 +0 +120 +absolute + + + +0.01 +smooth + +8.536348075494939 +47.34969649034609 +412.57495077677595 +14.044137196876942 +88.46852921935269 +0 +120 +absolute + + + +0.01 +smooth + +8.536348071728678 +47.349696488729876 +412.5819856831619 +14.04487584013626 +88.46865132761516 +0 +120 +absolute + + + +0.01 +smooth + +8.536348067648461 +47.34969648697755 +412.58931483484247 +14.045678280706928 +88.46878395285783 +0 +120 +absolute + + + +0.01 +smooth + +8.536348063261594 +47.3496964850921 +412.5969315594921 +14.046543307649873 +88.4689268930587 +0 +120 +absolute + + + +0.01 +smooth + +8.536348058575381 +47.34969648307646 +412.6048291847856 +14.047469710026045 +88.4690799461958 +0 +120 +absolute + + + +0.01 +smooth + +8.53634805359713 +47.34969648093354 +412.6130010383978 +14.04845627689636 +88.46924291024709 +0 +120 +absolute + + + +0.01 +smooth + +8.53634804833415 +47.349696478666324 +412.6214404480031 +14.049501797321765 +88.46941558319062 +0 +120 +absolute + + + +0.01 +smooth + +8.53634804279374 +47.34969647627777 +412.63014074127653 +14.0506050603632 +88.46959776300437 +0 +120 +absolute + + + +0.01 +smooth + +8.536348036983213 +47.34969647377082 +412.6390952458928 +14.051764855081602 +88.46978924766637 +0 +120 +absolute + + + +0.01 +smooth + +8.536348030909878 +47.34969647114843 +412.64829728952674 +14.052979970537908 +88.46998983515464 +0 +120 +absolute + + + +0.01 +smooth + +8.536348024581034 +47.349696468413526 +412.65774019985275 +14.054249195793046 +88.47019932344718 +0 +120 +absolute + + + +0.01 +smooth + +8.536348018003995 +47.34969646556909 +412.6674173045458 +14.05557131990796 +88.47041751052195 +0 +120 +absolute + + + +0.01 +smooth + +8.536348011186064 +47.34969646261806 +412.67732193128063 +14.056945131943591 +88.47064419435704 +0 +120 +absolute + + + +0.01 +smooth + +8.536348004134544 +47.349696459563376 +412.6874474077317 +14.058369420960867 +88.47087917293037 +0 +120 +absolute + + + +0.01 +smooth + +8.53634799685675 +47.34969645640801 +412.69778706157416 +14.059842976020729 +88.47112224422006 +0 +120 +absolute + + + +0.01 +smooth + +8.536347989359982 +47.34969645315489 +412.7083342204824 +14.061364586184116 +88.47137320620402 +0 +120 +absolute + + + +0.01 +smooth + +8.536347981651547 +47.349696449806984 +412.7190822121313 +14.062933040511957 +88.47163185686028 +0 +120 +absolute + + + +0.01 +smooth + +8.53634797373876 +47.349696446367254 +412.73002436419574 +14.064547128065204 +88.47189799416692 +0 +120 +absolute + + + +0.01 +smooth + +8.536347965628913 +47.3496964428386 +412.74115400435005 +14.066205637904776 +88.47217141610184 +0 +120 +absolute + + + +0.01 +smooth + +8.536347957329326 +47.34969643922404 +412.7524644602694 +14.067907359091626 +88.47245192064314 +0 +120 +absolute + + + +0.01 +smooth + +8.5363479488473 +47.34969643552647 +412.7639490596282 +14.069651080686679 +88.47273930576878 +0 +120 +absolute + + + +0.01 +smooth + +8.53634794019014 +47.34969643174885 +412.7756011301012 +14.071435591750875 +88.47303336945677 +0 +120 +absolute + + + +0.01 +smooth + +8.53634793136516 +47.34969642789417 +412.7874139993635 +14.073259681345155 +88.47333390968515 +0 +120 +absolute + + + +0.01 +smooth + +8.536347922379656 +47.34969642396535 +412.79938099508945 +14.075122138530451 +88.47364072443192 +0 +120 +absolute + + + +0.01 +smooth + +8.536347913240943 +47.34969641996533 +412.8114954449538 +14.077021752367704 +88.47395361167504 +0 +120 +absolute + + + +0.01 +smooth + +8.536347903956324 +47.34969641589708 +412.82375067663145 +14.078957311917849 +88.47427236939258 +0 +120 +absolute + + + +0.01 +smooth + +8.536347894533106 +47.349696411763546 +412.836140017797 +14.080927606241822 +88.47459679556252 +0 +120 +absolute + + + +0.01 +smooth + +8.536347884978596 +47.34969640756768 +412.8486567961253 +14.08293142440056 +88.4749266881629 +0 +120 +absolute + + + +0.01 +smooth + +8.536347875300102 +47.34969640331243 +412.86129433929096 +14.084967555454998 +88.47526184517167 +0 +120 +absolute + + + +0.01 +smooth + +8.536347865504927 +47.349696399000734 +412.8740459749689 +14.087034788466081 +88.47560206456687 +0 +120 +absolute + + + +0.01 +smooth + +8.536347855600383 +47.34969639463557 +412.88690503083353 +14.089131912494734 +88.47594714432653 +0 +120 +absolute + + + +0.01 +smooth + +8.53634784559377 +47.34969639021986 +412.8998648345599 +14.091257716601904 +88.47629688242864 +0 +120 +absolute + + + +0.01 +smooth + +8.536347835492402 +47.34969638575659 +412.9129187138226 +14.093410989848525 +88.47665107685123 +0 +120 +absolute + + + +0.01 +smooth + +8.53634782530358 +47.34969638124868 +412.9260599962963 +14.095590521295533 +88.47700952557224 +0 +120 +absolute + + + +0.01 +smooth + +8.53634781503461 +47.349696376699086 +412.9392820096559 +14.09779510000386 +88.47737202656975 +0 +120 +absolute + + + +0.01 +smooth + +8.536347804692806 +47.34969637211077 +412.95257808157595 +14.100023515034454 +88.47773837782177 +0 +120 +absolute + + + +0.01 +smooth + +8.536347794285469 +47.349696367486665 +412.9659415397314 +14.102274555448243 +88.47810837730626 +0 +120 +absolute + + + +0.01 +smooth + +8.536347783819902 +47.34969636282975 +412.97936571179673 +14.104547010306167 +88.47848182300126 +0 +120 +absolute + + + +0.01 +smooth + +8.536347773303422 +47.349696358142936 +412.9928439254469 +14.106839668669164 +88.47885851288478 +0 +120 +absolute + + + +0.01 +smooth + +8.536347762743326 +47.34969635342921 +413.00636950835633 +14.109151319598165 +88.4792382449348 +0 +120 +absolute + + + +0.01 +smooth + +8.536347752146927 +47.3496963486915 +413.0199357882001 +14.111480752154117 +88.47962081712939 +0 +120 +absolute + + + +0.01 +smooth + +8.536347741521528 +47.34969634393278 +413.03353609265275 +14.113826755397948 +88.48000602744649 +0 +120 +absolute + + + +0.01 +smooth + +8.536347730874436 +47.34969633915597 +413.04716374938903 +14.116188118390598 +88.48039367386414 +0 +120 +absolute + + + +0.01 +smooth + +8.536347720212959 +47.34969633436404 +413.06081208608384 +14.118563630193005 +88.48078355436036 +0 +120 +absolute + + + +0.01 +smooth + +8.536347709544403 +47.34969632955994 +413.07447443041167 +14.120952079866106 +88.48117546691316 +0 +120 +absolute + + + +0.01 +smooth + +8.536347698876074 +47.349696324746624 +413.08814411004727 +14.123352256470833 +88.4815692095005 +0 +120 +absolute + + + +0.01 +smooth + +8.536347688215281 +47.349696319927034 +413.10181445266556 +14.12576294906813 +88.48196458010047 +0 +120 +absolute + + + +0.01 +smooth + +8.536347677569328 +47.34969631510411 +413.11547878594115 +14.12818294671893 +88.48236137669099 +0 +120 +absolute + + + +0.01 +smooth + +8.536347666759903 +47.34969631019765 +413.12925041054405 +14.130655776193558 +88.48276665233347 +0 +120 +absolute + + + +0.01 +smooth + +8.536347655609694 +47.3496963051277 +413.14324453370523 +14.133224777194547 +88.48318743133994 +0 +120 +absolute + + + +0.01 +smooth + +8.536347644127506 +47.34969629989774 +413.1574573429416 +14.135888458181158 +88.48362346856464 +0 +120 +absolute + + + +0.01 +smooth + +8.536347632322144 +47.34969629451118 +413.17188502576903 +14.138645327612629 +88.48407451886169 +0 +120 +absolute + + + +0.01 +smooth + +8.536347620202415 +47.34969628897147 +413.1865237697041 +14.141493893948214 +88.48454033708524 +0 +120 +absolute + + + +0.01 +smooth + +8.536347607777124 +47.34969628328202 +413.2013697622633 +14.14443266564717 +88.4850206780895 +0 +120 +absolute + + + +0.01 +smooth + +8.536347595055076 +47.3496962774463 +413.2164191909631 +14.147460151168742 +88.4855152967286 +0 +120 +absolute + + + +0.01 +smooth + +8.536347582045082 +47.349696271467714 +413.23166824332003 +14.150574858972188 +88.48602394785675 +0 +120 +absolute + + + +0.01 +smooth + +8.536347568755938 +47.34969626534972 +413.2471131068502 +14.15377529751675 +88.48654638632803 +0 +120 +absolute + + + +0.01 +smooth + +8.536347555196453 +47.34969625909573 +413.2627499690701 +14.157059975261685 +88.48708236699669 +0 +120 +absolute + + + +0.01 +smooth + +8.536347541375441 +47.349696252709215 +413.2785750174965 +14.160427400666245 +88.48763164471686 +0 +120 +absolute + + + +0.01 +smooth + +8.536347527301697 +47.34969624619357 +413.2945844396454 +14.16387608218968 +88.48819397434268 +0 +120 +absolute + + + +0.01 +smooth + +8.536347512984028 +47.349696239552244 +413.31077442303337 +14.167404528291234 +88.48876911072833 +0 +120 +absolute + + + +0.01 +smooth + +8.536347498431246 +47.34969623278868 +413.32714115517695 +14.171011247430169 +88.48935680872798 +0 +120 +absolute + + + +0.01 +smooth + +8.536347483652152 +47.34969622590632 +413.34368082359236 +14.174694748065725 +88.48995682319583 +0 +120 +absolute + + + +0.01 +smooth + +8.536347468655554 +47.34969621890858 +413.3603896157963 +14.178453538657168 +88.49056890898598 +0 +120 +absolute + + + +0.01 +smooth + +8.536347453450253 +47.349696211798886 +413.37726371930484 +14.182286127663733 +88.49119282095262 +0 +120 +absolute + + + +0.01 +smooth + +8.53634743804506 +47.349696204580724 +413.39429932163466 +14.18619102354468 +88.49182831394992 +0 +120 +absolute + + + +0.01 +smooth + +8.53634742244878 +47.34969619725749 +413.41149261030205 +14.190166734759263 +88.49247514283206 +0 +120 +absolute + + + +0.01 +smooth + +8.536347406670213 +47.349696189832606 +413.4288397728236 +14.194211769766719 +88.49313306245318 +0 +120 +absolute + + + +0.01 +smooth + +8.536347390718175 +47.34969618230956 +413.4463369967157 +14.19832463702632 +88.49380182766747 +0 +120 +absolute + + + +0.01 +smooth + +8.53634737460146 +47.34969617469172 +413.46398046949446 +14.202503844997295 +88.49448119332902 +0 +120 +absolute + + + +0.01 +smooth + +8.536347358328882 +47.349696166982575 +413.48176637867675 +14.206747902138915 +88.4951709142921 +0 +120 +absolute + + + +0.01 +smooth + +8.536347341909245 +47.34969615918554 +413.49969091177877 +14.211055316910416 +88.4958707454108 +0 +120 +absolute + + + +0.01 +smooth + +8.53634732535135 +47.34969615130405 +413.51775025631684 +14.215424597771054 +88.49658044153931 +0 +120 +absolute + + + +0.01 +smooth + +8.53634730866401 +47.349696143341546 +413.5359405998077 +14.219854253180085 +88.4972997575318 +0 +120 +absolute + + + +0.01 +smooth + +8.536347291856025 +47.34969613530146 +413.5542581297675 +14.224342791596753 +88.49802844824242 +0 +120 +absolute + + + +0.01 +smooth + +8.536347274936203 +47.34969612718722 +413.57269903371275 +14.228888721480311 +88.49876626852536 +0 +120 +absolute + + + +0.01 +smooth + +8.536347257913349 +47.34969611900226 +413.59125949915983 +14.233490551290014 +88.49951297323474 +0 +120 +absolute + + + +0.01 +smooth + +8.53634724079627 +47.34969611075004 +413.60993571362525 +14.238146789485109 +88.50026831722477 +0 +120 +absolute + + + +0.01 +smooth + +8.536347223593769 +47.34969610243396 +413.6287238646254 +14.242855944524848 +88.50103205534957 +0 +120 +absolute + + + +0.01 +smooth + +8.536347206314653 +47.349696094057485 +413.6476201396766 +14.247616524868482 +88.50180394246334 +0 +120 +absolute + + + +0.01 +smooth + +8.53634718896773 +47.34969608562404 +413.66662072629543 +14.252427038975265 +88.50258373342024 +0 +120 +absolute + + + +0.01 +smooth + +8.5363471715618 +47.349696077137054 +413.6857218119983 +14.257285995304443 +88.5033711830744 +0 +120 +absolute + + + +0.01 +smooth + +8.536347154105677 +47.34969606859997 +413.7049195843015 +14.262191902315266 +88.50416604628003 +0 +120 +absolute + + + +0.01 +smooth + +8.536347136608159 +47.34969606001622 +413.72421023072155 +14.267143268466992 +88.50496807789128 +0 +120 +absolute + + + +0.01 +smooth + +8.536347119078055 +47.34969605138923 +413.7435899387749 +14.272138602218867 +88.5057770327623 +0 +120 +absolute + + + +0.01 +smooth + +8.53634710152417 +47.349696042722464 +413.7630548959778 +14.277176412030146 +88.50659266574728 +0 +120 +absolute + + + +0.01 +smooth + +8.53634708395531 +47.349696034019324 +413.782601289847 +14.282255206360077 +88.50741473170035 +0 +120 +absolute + + + +0.01 +smooth + +8.53634706638028 +47.349696025283265 +413.80222530789865 +14.28737349366791 +88.50824298547569 +0 +120 +absolute + + + +0.01 +smooth + +8.536347048807887 +47.34969601651772 +413.82192313764926 +14.292529782412899 +88.50907718192747 +0 +120 +absolute + + + +0.01 +smooth + +8.536347031246935 +47.34969600772611 +413.8416909666152 +14.297722581054295 +88.50991707590987 +0 +120 +absolute + + + +0.01 +smooth + +8.53634701370623 +47.3496959989119 +413.861524982313 +14.302950398051347 +88.51076242227701 +0 +120 +absolute + + + +0.01 +smooth + +8.53634699619458 +47.34969599007849 +413.88142137225896 +14.308211741863307 +88.51161297588308 +0 +120 +absolute + + + +0.01 +smooth + +8.536346978720788 +47.34969598122934 +413.90137632396966 +14.313505120949426 +88.51246849158224 +0 +120 +absolute + + + +0.01 +smooth + +8.53634696129366 +47.34969597236787 +413.92138602496146 +14.318829043768957 +88.51332872422869 +0 +120 +absolute + + + +0.01 +smooth + +8.536346943922004 +47.349695963497524 +413.94144666275065 +14.324182018781146 +88.51419342867653 +0 +120 +absolute + + + +0.01 +smooth + +8.536346926614621 +47.34969595462174 +413.96155442485383 +14.329562554445248 +88.51506235977998 +0 +120 +absolute + + + +0.01 +smooth + +8.536346909380322 +47.34969594574395 +413.9817054987873 +14.334969159220515 +88.51593527239316 +0 +120 +absolute + + + +0.01 +smooth + +8.53634689222791 +47.34969593686759 +414.0018960720676 +14.340400341566196 +88.51681192137026 +0 +120 +absolute + + + +0.01 +smooth + +8.536346875166188 +47.34969592799609 +414.02212233221104 +14.345854609941542 +88.51769206156544 +0 +120 +absolute + + + +0.01 +smooth + +8.536346858014713 +47.34969591906131 +414.04245214803984 +14.351374127880502 +88.51858236799296 +0 +120 +absolute + + + +0.01 +smooth + +8.536346840595842 +47.34969590999536 +414.06295408432726 +14.357001059401597 +88.51948951803956 +0 +120 +absolute + + + +0.01 +smooth + +8.536346822922598 +47.349695900802054 +414.08362537251674 +14.362733913690931 +88.52041327011807 +0 +120 +absolute + + + +0.01 +smooth + +8.536346805007996 +47.34969589148516 +414.10446324405115 +14.368571199934605 +88.5213533826413 +0 +120 +absolute + + + +0.01 +smooth + +8.536346786865057 +47.3496958820485 +414.12546493037354 +14.37451142731873 +88.52230961402215 +0 +120 +absolute + + + +0.01 +smooth + +8.536346768506801 +47.34969587249586 +414.14662766292736 +14.380553105029403 +88.52328172267343 +0 +120 +absolute + + + +0.01 +smooth + +8.536346749946244 +47.34969586283105 +414.16794867315554 +14.386694742252736 +88.524269467008 +0 +120 +absolute + + + +0.01 +smooth + +8.53634673119641 +47.34969585305788 +414.18942519250146 +14.392934848174836 +88.52527260543873 +0 +120 +absolute + + + +0.01 +smooth + +8.536346712270316 +47.34969584318012 +414.21105445240806 +14.399271931981795 +88.5262908963784 +0 +120 +absolute + + + +0.01 +smooth + +8.536346693180977 +47.34969583320159 +414.2328336843186 +14.405704502859729 +88.52732409823989 +0 +120 +absolute + + + +0.01 +smooth + +8.536346673941416 +47.349695823126076 +414.2547601196763 +14.412231069994748 +88.5283719694361 +0 +120 +absolute + + + +0.01 +smooth + +8.536346654564651 +47.3496958129574 +414.27683098992406 +14.418850142572937 +88.52943426837975 +0 +120 +absolute + + + +0.01 +smooth + +8.536346635063703 +47.34969580269934 +414.2990435265052 +14.425560229780416 +88.53051075348378 +0 +120 +absolute + + + +0.01 +smooth + +8.536346615451587 +47.349695792355696 +414.32139496086296 +14.432359840803286 +88.531601183161 +0 +120 +absolute + + + +0.01 +smooth + +8.536346595741326 +47.349695781930286 +414.3438825244404 +14.439247484827652 +88.5327053158243 +0 +120 +absolute + + + +0.01 +smooth + +8.53634657594594 +47.349695771426894 +414.36650344868065 +14.446221671039625 +88.53382290988647 +0 +120 +absolute + + + +0.01 +smooth + +8.536346556078438 +47.34969576084931 +414.3892549650268 +14.453280908625295 +88.53495372376035 +0 +120 +absolute + + + +0.01 +smooth + +8.536346536151855 +47.34969575020136 +414.41213430492223 +14.460423706770783 +88.53609751585886 +0 +120 +absolute + + + +0.01 +smooth + +8.536346516179199 +47.34969573948684 +414.43513869980984 +14.467648574662181 +88.53725404459476 +0 +120 +absolute + + + +0.01 +smooth + +8.536346496173492 +47.34969572870951 +414.458265381133 +14.4749540214856 +88.53842306838092 +0 +120 +absolute + + + +0.01 +smooth + +8.536346476147754 +47.34969571787323 +414.48151158033477 +14.48233855642715 +88.53960434563025 +0 +120 +absolute + + + +0.01 +smooth + +8.536346456115 +47.34969570698175 +414.5048745288582 +14.489800688672922 +88.54079763475546 +0 +120 +absolute + + + +0.01 +smooth + +8.536346436088255 +47.3496956960389 +414.52835145814663 +14.497338927409036 +88.54200269416953 +0 +120 +absolute + + + +0.01 +smooth + +8.536346416080535 +47.34969568504846 +414.5519395996431 +14.504951781821584 +88.54321928228524 +0 +120 +absolute + + + +0.01 +smooth + +8.536346396104857 +47.34969567401423 +414.5756361847907 +14.512637761096675 +88.54444715751542 +0 +120 +absolute + + + +0.01 +smooth + +8.536346376174246 +47.34969566294002 +414.5994384450328 +14.520395374420422 +88.54568607827295 +0 +120 +absolute + + + +0.01 +smooth + +8.536346356301715 +47.349695651829634 +414.6233436118124 +14.52822313097892 +88.54693580297068 +0 +120 +absolute + + + +0.01 +smooth + +8.536346336500287 +47.34969564068687 +414.6473489165726 +14.536119539958278 +88.54819609002143 +0 +120 +absolute + + + +0.01 +smooth + +8.536346316782979 +47.34969562951551 +414.67145159075665 +14.5440831105446 +88.54946669783804 +0 +120 +absolute + + + +0.01 +smooth + +8.53634629716281 +47.34969561831935 +414.6956488658078 +14.552112351923988 +88.55074738483337 +0 +120 +absolute + + + +0.01 +smooth + +8.5363462776528 +47.34969560710222 +414.71993797316895 +14.56020577328255 +88.55203790942028 +0 +120 +absolute + + + +0.01 +smooth + +8.536346258265969 +47.3496955958679 +414.74431614428346 +14.568361883806393 +88.55333803001156 +0 +120 +absolute + + + +0.01 +smooth + +8.536346239015334 +47.3496955846202 +414.7687806105944 +14.576579192681617 +88.5546475050201 +0 +120 +absolute + + + +0.01 +smooth + +8.536346219913915 +47.3496955733629 +414.79332860354486 +14.58485620909433 +88.55596609285877 +0 +120 +absolute + + + +0.01 +smooth + +8.53634620097473 +47.34969556209981 +414.8179573545782 +14.593191442230633 +88.55729355194035 +0 +120 +absolute + + + +0.01 +smooth + +8.536346182210803 +47.349695550834745 +414.8426640951374 +14.601583401276635 +88.55862964067772 +0 +120 +absolute + + + +0.01 +smooth + +8.536346163635145 +47.349695539571485 +414.8674460566656 +14.610030595418442 +88.55997411748373 +0 +120 +absolute + + + +0.01 +smooth + +8.53634614526078 +47.34969552831382 +414.89230047060613 +14.618531533842154 +88.56132674077122 +0 +120 +absolute + + + +0.01 +smooth + +8.536346127100726 +47.349695517065584 +414.91722456840193 +14.62708472573388 +88.56268726895301 +0 +120 +absolute + + + +0.01 +smooth + +8.536346109168006 +47.34969550583055 +414.94221558149627 +14.63568868027972 +88.56405546044198 +0 +120 +absolute + + + +0.01 +smooth + +8.536346091475632 +47.349695494612526 +414.9672707413323 +14.644341906665783 +88.56543107365096 +0 +120 +absolute + + + +0.01 +smooth + +8.536346074036627 +47.3496954834153 +414.9923872793532 +14.653042914078174 +88.56681386699279 +0 +120 +absolute + + + +0.01 +smooth + +8.53634605686401 +47.3496954722427 +415.01756242700196 +14.661790211702996 +88.56820359888033 +0 +120 +absolute + + + +0.01 +smooth + +8.5363460399708 +47.34969546109849 +415.0427934157219 +14.670582308726354 +88.56960002772641 +0 +120 +absolute + + + +0.01 +smooth + +8.536346023370015 +47.34969544998649 +415.0680774769562 +14.679417714334352 +88.57100291194386 +0 +120 +absolute + + + +0.01 +smooth + +8.536346007074677 +47.349695438910494 +415.09341184214793 +14.6882949377131 +88.57241200994557 +0 +120 +absolute + + + +0.01 +smooth + +8.5363459910978 +47.34969542787431 +415.1187937427402 +14.697212488048695 +88.57382708014433 +0 +120 +absolute + + + +0.01 +smooth + +8.536345975452408 +47.34969541688173 +415.1442204101763 +14.706168874527245 +88.57524788095304 +0 +120 +absolute + + + +0.01 +smooth + +8.536345960151516 +47.34969540593655 +415.16968907589916 +14.715162606334859 +88.57667417078451 +0 +120 +absolute + + + +0.01 +smooth + +8.536345945208147 +47.34969539504257 +415.1951969713522 +14.724192192657636 +88.5781057080516 +0 +120 +absolute + + + +0.01 +smooth + +8.536345930635319 +47.3496953842036 +415.2207413279784 +14.733256142681682 +88.57954225116714 +0 +120 +absolute + + + +0.01 +smooth + +8.536345916128068 +47.34969537334089 +415.24636976657763 +14.742392212397903 +88.58098964079521 +0 +120 +absolute + + + +0.01 +smooth + +8.536345901386808 +47.34969536237711 +415.2721302625026 +14.751638176844747 +88.5824537223159 +0 +120 +absolute + + + +0.01 +smooth + +8.536345886432592 +47.349695351318225 +415.29802057902566 +14.76099257377964 +88.58393426121611 +0 +120 +absolute + + + +0.01 +smooth + +8.536345871286487 +47.34969534017019 +415.3240384794191 +14.77045394096001 +88.58543102298275 +0 +120 +absolute + + + +0.01 +smooth + +8.536345855969556 +47.34969532893892 +415.35018172695504 +14.78002081614328 +88.58694377310265 +0 +120 +absolute + + + +0.01 +smooth + +8.536345840502857 +47.34969531763036 +415.37644808490586 +14.789691737086876 +88.58847227706266 +0 +120 +absolute + + + +0.01 +smooth + +8.536345824907457 +47.349695306250474 +415.4028353165439 +14.799465241548228 +88.5900163003497 +0 +120 +absolute + + + +0.01 +smooth + +8.53634580920442 +47.349695294805194 +415.4293411851414 +14.80933986728476 +88.59157560845068 +0 +120 +absolute + + + +0.01 +smooth + +8.536345793414807 +47.34969528330047 +415.45596345397064 +14.819314152053895 +88.59314996685244 +0 +120 +absolute + + + +0.01 +smooth + +8.536345777559685 +47.349695271742256 +415.4826998863041 +14.829386633613067 +88.5947391410419 +0 +120 +absolute + + + +0.01 +smooth + +8.536345761660108 +47.34969526013645 +415.50954824541367 +14.839555849719689 +88.59634289650587 +0 +120 +absolute + + + +0.01 +smooth + +8.536345745737147 +47.349695248489056 +415.53650629457206 +14.849820338131206 +88.59796099873132 +0 +120 +absolute + + + +0.01 +smooth + +8.53634572981186 +47.349695236805985 +415.5635717970513 +14.860178636605024 +88.59959321320503 +0 +120 +absolute + + + +0.01 +smooth + +8.536345713905312 +47.349695225093186 +415.59074251612384 +14.870629282898582 +88.60123930541398 +0 +120 +absolute + + + +0.01 +smooth + +8.536345698038566 +47.349695213356604 +415.6180162150619 +14.881170814769302 +88.60289904084497 +0 +120 +absolute + + + +0.01 +smooth + +8.536345682232682 +47.34969520160217 +415.6453906571377 +14.89180176997461 +88.60457218498492 +0 +120 +absolute + + + +0.01 +smooth + +8.53634566650873 +47.34969518983586 +415.67286360562383 +14.902520686271936 +88.60625850332075 +0 +120 +absolute + + + +0.01 +smooth + +8.536345650887762 +47.349695178063584 +415.700432823792 +14.913326101418695 +88.60795776133922 +0 +120 +absolute + + + +0.01 +smooth + +8.53634563539085 +47.349695166291326 +415.7280960749152 +14.924216553172332 +88.60966972452735 +0 +120 +absolute + + + +0.01 +smooth + +8.53634562003905 +47.34969515452497 +415.75585112226514 +14.935190579290252 +88.61139415837192 +0 +120 +absolute + + + +0.01 +smooth + +8.536345604853434 +47.34969514277052 +415.78369572911447 +14.946246717529894 +88.61313082835984 +0 +120 +absolute + + + +0.01 +smooth + +8.536345589855054 +47.34969513103388 +415.81162765873535 +14.957383505648682 +88.61487949997799 +0 +120 +absolute + + + +0.01 +smooth + +8.536345575064981 +47.34969511932103 +415.8396446744001 +14.96859948140404 +88.61663993871329 +0 +120 +absolute + + + +0.01 +smooth + +8.536345560504277 +47.349695107637885 +415.867744539381 +14.979893182553397 +88.61841191005257 +0 +120 +absolute + + + +0.01 +smooth + +8.536345546193996 +47.34969509599037 +415.8959250169502 +14.991263146854168 +88.62019517948269 +0 +120 +absolute + + + +0.01 +smooth + +8.536345532155211 +47.34969508438449 +415.9241838703803 +15.002707912063801 +88.62198951249061 +0 +120 +absolute + + + +0.01 +smooth + +8.536345518408982 +47.34969507282614 +415.9525188629434 +15.014226015939702 +88.62379467456316 +0 +120 +absolute + + + +0.01 +smooth + +8.53634550497637 +47.34969506132128 +415.98092775791184 +15.025815996239306 +88.62561043118723 +0 +120 +absolute + + + +0.01 +smooth + +8.53634549187844 +47.349695049875855 +416.00940831855786 +15.037476390720034 +88.62743654784967 +0 +120 +absolute + + + +0.01 +smooth + +8.536345479136253 +47.3496950384958 +416.0379583081538 +15.049205737139324 +88.62927279003742 +0 +120 +absolute + + + +0.01 +smooth + +8.536345466770873 +47.34969502718709 +416.06657548997185 +15.061002573254587 +88.6311189232373 +0 +120 +absolute + + + +0.01 +smooth + +8.536345454803364 +47.34969501595562 +416.09525762728447 +15.072865436823257 +88.63297471293622 +0 +120 +absolute + + + +0.01 +smooth + +8.536345443254785 +47.349695004807366 +416.1240024833638 +15.084792865602758 +88.63483992462108 +0 +120 +absolute + + + +0.01 +smooth + +8.536345432146202 +47.34969499374827 +416.1528078214823 +15.096783397350517 +88.63671432377872 +0 +120 +absolute + + + +0.01 +smooth + +8.536345421498677 +47.349694982784264 +416.1816714049122 +15.108835569823963 +88.63859767589604 +0 +120 +absolute + + + +0.01 +smooth + +8.536345411333274 +47.34969497192131 +416.2105909969256 +15.120947920780514 +88.64048974645992 +0 +120 +absolute + + + +0.01 +smooth + +8.536345401671053 +47.34969496116533 +416.23956436079493 +15.133118987977603 +88.64239030095725 +0 +120 +absolute + + + +0.01 +smooth + +8.536345392533079 +47.34969495052229 +416.26858925979263 +15.145347309172656 +88.64429910487488 +0 +120 +absolute + + + +0.01 +smooth + +8.536345383940414 +47.349694939998116 +416.2976634571909 +15.1576314221231 +88.64621592369971 +0 +120 +absolute + + + +0.01 +smooth + +8.53634537591412 +47.34969492959877 +416.32678471626184 +15.169969864586353 +88.64814052291862 +0 +120 +absolute + + + +0.01 +smooth + +8.536345368475263 +47.349694919330176 +416.3559508002779 +15.18236117431985 +88.65007266801851 +0 +120 +absolute + + + +0.01 +smooth + +8.536345361644901 +47.34969490919829 +416.3851594725115 +15.194803889081008 +88.65201212448622 +0 +120 +absolute + + + +0.01 +smooth + +8.536345355444103 +47.34969489920905 +416.4144084962347 +15.207296546627264 +88.65395865780866 +0 +120 +absolute + + + +0.01 +smooth + +8.536345349893928 +47.34969488936841 +416.4436956347199 +15.219837684716037 +88.65591203347267 +0 +120 +absolute + + + +0.01 +smooth + +8.536345345015437 +47.3496948796823 +416.4730186512395 +15.232425841104755 +88.65787201696519 +0 +120 +absolute + + + +0.01 +smooth + +8.536345340829698 +47.349694870156675 +416.5023753090655 +15.245059553550842 +88.65983837377306 +0 +120 +absolute + + + +0.01 +smooth + +8.53634533735777 +47.34969486079747 +416.53176337147045 +15.257737359811728 +88.66181086938317 +0 +120 +absolute + + + +0.01 +smooth + +8.536345334620716 +47.34969485161065 +416.5611806017265 +15.270457797644838 +88.66378926928242 +0 +120 +absolute + + + +0.01 +smooth + +8.536345332639598 +47.349694842602126 +416.5906247631061 +15.283219404807593 +88.66577333895765 +0 +120 +absolute + + + +0.01 +smooth + +8.536345331435484 +47.34969483377787 +416.62009361888147 +15.296020719057426 +88.66776284389576 +0 +120 +absolute + + + +0.01 +smooth + +8.536345331029432 +47.34969482514381 +416.6495849323246 +15.308860278151757 +88.66975754958361 +0 +120 +absolute + + + +0.01 +smooth + +8.536345331231749 +47.3496948165325 +416.6791351892552 +15.321771420315716 +88.67176252135194 +0 +120 +absolute + + + +0.01 +smooth + +8.536345331834905 +47.349694807780914 +416.70878108048987 +15.334787486279508 +88.67378282561852 +0 +120 +absolute + + + +0.01 +smooth + +8.536345332833175 +47.34969479890158 +416.73852067679735 +15.34790701755818 +88.67581822950086 +0 +120 +absolute + + + +0.01 +smooth + +8.536345334220862 +47.34969478990707 +416.7683520489466 +15.361128555666786 +88.67786850011656 +0 +120 +absolute + + + +0.01 +smooth + +8.536345335992245 +47.34969478080994 +416.7982732677065 +15.374450642120376 +88.67993340458327 +0 +120 +absolute + + + +0.01 +smooth + +8.53634533814162 +47.34969477162278 +416.8282824038462 +15.387871818434007 +88.68201271001845 +0 +120 +absolute + + + +0.01 +smooth + +8.536345340663269 +47.3496947623581 +416.85837752813404 +15.401390626122723 +88.68410618353973 +0 +120 +absolute + + + +0.01 +smooth + +8.536345343551485 +47.34969475302847 +416.88855671133916 +15.415005606701579 +88.68621359226466 +0 +120 +absolute + + + +0.01 +smooth + +8.536345346800562 +47.34969474364649 +416.91881802423063 +15.428715301685626 +88.6883347033108 +0 +120 +absolute + + + +0.01 +smooth + +8.536345350404781 +47.34969473422466 +416.9491595375769 +15.442518252589915 +88.69046928379574 +0 +120 +absolute + + + +0.01 +smooth + +8.536345354358431 +47.349694724775574 +416.9795793221472 +15.456413000929494 +88.692617100837 +0 +120 +absolute + + + +0.01 +smooth + +8.536345358655812 +47.349694715311784 +417.01007544871027 +15.470398088219422 +88.69477792155226 +0 +120 +absolute + + + +0.01 +smooth + +8.5363453632912 +47.349694705845835 +417.04064598803484 +15.48447205597474 +88.69695151305895 +0 +120 +absolute + + + +0.01 +smooth + +8.536345368258887 +47.3496946963903 +417.07128901089004 +15.498633445710508 +88.69913764247472 +0 +120 +absolute + + + +0.01 +smooth + +8.536345373553171 +47.34969468695775 +417.10200258804457 +15.512880798941776 +88.70133607691714 +0 +120 +absolute + + + +0.01 +smooth + +8.53634537916833 +47.3496946775607 +417.13278479026707 +15.527212657183586 +88.70354658350375 +0 +120 +absolute + + + +0.01 +smooth + +8.53634538509866 +47.349694668211754 +417.16363368832697 +15.541627561951001 +88.70576892935215 +0 +120 +absolute + + + +0.01 +smooth + +8.536345391338445 +47.34969465892346 +417.1945473529928 +15.55612405475907 +88.70800288157989 +0 +120 +absolute + + + +0.01 +smooth + +8.536345397881979 +47.34969464970833 +417.22552385503326 +15.570700677122836 +88.71024820730449 +0 +120 +absolute + + + +0.01 +smooth + +8.53634540472355 +47.34969464057901 +417.2565612652176 +15.585355970557364 +88.71250467364361 +0 +120 +absolute + + + +0.01 +smooth + +8.536345411857447 +47.34969463154799 +417.28765765431456 +15.600088476577698 +88.71477204771479 +0 +120 +absolute + + + +0.01 +smooth + +8.536345419277952 +47.34969462262783 +417.3188110930928 +15.614896736698878 +88.71705009663553 +0 +120 +absolute + + + +0.01 +smooth + +8.536345426979365 +47.34969461383113 +417.3500196523215 +15.629779292435973 +88.71933858752351 +0 +120 +absolute + + + +0.01 +smooth + +8.536345434955967 +47.34969460517043 +417.3812814027693 +15.64473468530403 +88.72163728749622 +0 +120 +absolute + + + +0.01 +smooth + +8.536345443202052 +47.34969459665826 +417.41259441520515 +15.659761456818092 +88.72394596367124 +0 +120 +absolute + + + +0.01 +smooth + +8.53634545171191 +47.34969458830723 +417.44395676039795 +15.674858148493223 +88.7262643831662 +0 +120 +absolute + + + +0.01 +smooth + +8.536345460479826 +47.34969458012986 +417.4753665091165 +15.690023301844459 +88.72859231309857 +0 +120 +absolute + + + +0.01 +smooth + +8.53634546950009 +47.349694572138716 +417.5068217321298 +15.705255458386866 +88.730929520586 +0 +120 +absolute + + + +0.01 +smooth + +8.536345478766991 +47.34969456434636 +417.5383205002065 +15.720553159635486 +88.73327577274603 +0 +120 +absolute + + + +0.01 +smooth + +8.536345488274819 +47.34969455676535 +417.5698608841157 +15.735914947105375 +88.73563083669622 +0 +120 +absolute + + + +0.01 +smooth + +8.536345498017862 +47.34969454940824 +417.6014409546261 +15.751339362311576 +88.73799447955415 +0 +120 +absolute + + + +0.01 +smooth + +8.536345507990411 +47.349694542287594 +417.63305878250674 +15.766824946769153 +88.74036646843736 +0 +120 +absolute + + + +0.01 +smooth + +8.536345518186755 +47.34969453541598 +417.66471243852624 +15.78237024199315 +88.74274657046347 +0 +120 +absolute + + + +0.01 +smooth + +8.536345528601181 +47.34969452880594 +417.69639999345367 +15.797973789498618 +88.74513455275 +0 +120 +absolute + + + +0.01 +smooth + +8.53634553922798 +47.349694522470045 +417.72811951805784 +15.813634130800608 +88.74753018241456 +0 +120 +absolute + + + +0.01 +smooth + +8.536345550061439 +47.34969451642085 +417.75986908310756 +15.829349807414172 +88.74993322657471 +0 +120 +absolute + + + +0.01 +smooth + +8.536345561095848 +47.3496945106709 +417.7916467593718 +15.845119360854365 +88.75234345234799 +0 +120 +absolute + + + +0.01 +smooth + +8.536345572325498 +47.34969450523276 +417.8234506176194 +15.860941332636234 +88.754760626852 +0 +120 +absolute + + + +0.01 +smooth + +8.536345583744676 +47.34969450011901 +417.8552787286192 +15.876814264274831 +88.75718451720431 +0 +120 +absolute + + + +0.01 +smooth + +8.53634559534767 +47.34969449534218 +417.8871291631401 +15.892736697285208 +88.75961489052246 +0 +120 +absolute + + + +0.01 +smooth + +8.536345607128773 +47.349694490914835 +417.91899999195095 +15.908707173182414 +88.76205151392404 +0 +120 +absolute + + + +0.01 +smooth + +8.53634561908227 +47.34969448684955 +417.9508892858207 +15.924724233481506 +88.7644941545266 +0 +120 +absolute + + + +0.01 +smooth + +8.536345631202451 +47.34969448315886 +417.982795115518 +15.940786419697526 +88.76694257944774 +0 +120 +absolute + + + +0.01 +smooth + +8.53634564348361 +47.34969447985535 +418.014715551812 +15.956892273345535 +88.76939655580502 +0 +120 +absolute + + + +0.01 +smooth + +8.536345655920027 +47.349694476951555 +418.04664866547125 +15.973040335940578 +88.77185585071598 +0 +120 +absolute + + + +0.01 +smooth + +8.536345668506 +47.34969447446004 +418.07859252726496 +15.98922914899771 +88.77432023129822 +0 +120 +absolute + + + +0.01 +smooth + +8.536345681235812 +47.349694472393374 +418.11054520796176 +16.00545725403198 +88.7767894646693 +0 +120 +absolute + + + +0.01 +smooth + +8.536345694103755 +47.34969447076409 +418.14250477833065 +16.02172319255844 +88.7792633179468 +0 +120 +absolute + + + +0.01 +smooth + +8.536345707104116 +47.34969446958479 +418.1744693091404 +16.03802550609214 +88.78174155824826 +0 +120 +absolute + + + +0.01 +smooth + +8.536345720231186 +47.34969446886798 +418.20643687115995 +16.054362736148132 +88.78422395269128 +0 +120 +absolute + + + +0.01 +smooth + +8.536345733479253 +47.34969446862626 +418.2384055351581 +16.070733424241467 +88.7867102683934 +0 +120 +absolute + + + +0.01 +smooth + +8.536345747613812 +47.34969446868508 +418.27040546443175 +16.087167424616233 +88.78920501870375 +0 +120 +absolute + + + +0.01 +smooth + +8.536345763383597 +47.3496944688607 +418.3024669473557 +16.103694557797102 +88.79171271085377 +0 +120 +absolute + + + +0.01 +smooth + +8.536345780757744 +47.34969446915172 +418.3345882423148 +16.120313314719976 +88.79423310278439 +0 +120 +absolute + + + +0.01 +smooth + +8.536345799705392 +47.349694469556866 +418.36676760769444 +16.137022186320774 +88.79676595243652 +0 +120 +absolute + + + +0.01 +smooth + +8.536345820195692 +47.34969447007478 +418.39900330188016 +16.15381966353541 +88.79931101775114 +0 +120 +absolute + + + +0.01 +smooth + +8.536345842197779 +47.34969447070418 +418.4312935832571 +16.1707042372998 +88.80186805666928 +0 +120 +absolute + + + +0.01 +smooth + +8.536345865680799 +47.34969447144368 +418.4636367102105 +16.187674398549856 +88.80443682713182 +0 +120 +absolute + + + +0.01 +smooth + +8.536345890613887 +47.34969447229197 +418.49603094112564 +16.204728638221493 +88.80701708707974 +0 +120 +absolute + + + +0.01 +smooth + +8.536345916966193 +47.34969447324775 +418.528474534388 +16.221865447250625 +88.80960859445405 +0 +120 +absolute + + + +0.01 +smooth + +8.536345944706854 +47.34969447430964 +418.56096574838244 +16.239083316573158 +88.81221110719561 +0 +120 +absolute + + + +0.01 +smooth + +8.53634597380501 +47.349694475476355 +418.5935028414947 +16.256380737125017 +88.81482438324541 +0 +120 +absolute + + + +0.01 +smooth + +8.536346004229808 +47.34969447674656 +418.62608407211 +16.27375619984211 +88.8174481805445 +0 +120 +absolute + + + +0.01 +smooth + +8.536346035950384 +47.3496944781189 +418.6587076986133 +16.291208195660353 +88.82008225703373 +0 +120 +absolute + + + +0.01 +smooth + +8.53634606893588 +47.349694479592074 +418.6913719793903 +16.308735215515657 +88.82272637065412 +0 +120 +absolute + + + +0.01 +smooth + +8.536346103155445 +47.34969448116475 +418.7240751728261 +16.32633575034394 +88.82538027934662 +0 +120 +absolute + + + +0.01 +smooth + +8.53634613857821 +47.34969448283557 +418.7568155373057 +16.34400829108111 +88.82804374105211 +0 +120 +absolute + + + +0.01 +smooth + +8.536346175173327 +47.34969448460325 +418.78959133121504 +16.36175132866309 +88.8307165137117 +0 +120 +absolute + + + +0.01 +smooth + +8.53634621290993 +47.349694486466426 +418.82240081293895 +16.379563354025787 +88.83339835526627 +0 +120 +absolute + + + +0.01 +smooth + +8.53634625175716 +47.349694488423765 +418.8552422408626 +16.39744285810511 +88.8360890236567 +0 +120 +absolute + + + +0.01 +smooth + +8.536346291684168 +47.349694490473986 +418.88811387337165 +16.415388331836986 +88.83878827682409 +0 +120 +absolute + + + +0.01 +smooth + +8.536346332660086 +47.34969449261571 +418.9210139688513 +16.433398266157322 +88.84149587270933 +0 +120 +absolute + + + +0.01 +smooth + +8.536346374654059 +47.349694494847625 +418.95394078568654 +16.45147115200203 +88.84421156925333 +0 +120 +absolute + + + +0.01 +smooth + +8.536346417635235 +47.34969449716843 +418.9868925822632 +16.46960548030703 +88.84693512439716 +0 +120 +absolute + + + +0.01 +smooth + +8.536346461572743 +47.34969449957674 +419.01986761696605 +16.487799742008225 +88.84966629608171 +0 +120 +absolute + + + +0.01 +smooth + +8.536346506435732 +47.34969450207127 +419.05286414818056 +16.506052428041535 +88.85240484224792 +0 +120 +absolute + + + +0.01 +smooth + +8.536346552193345 +47.349694504650685 +419.08588043429216 +16.524362029342882 +88.85515052083683 +0 +120 +absolute + + + +0.01 +smooth + +8.53634659881472 +47.34969450731365 +419.11891473368587 +16.54272703684817 +88.85790308978932 +0 +120 +absolute + + + +0.01 +smooth + +8.536346646269003 +47.349694510058825 +419.15196530474725 +16.56114594149331 +88.86066230704637 +0 +120 +absolute + + + +0.01 +smooth + +8.53634669452533 +47.349694512884895 +419.1850304058614 +16.579617234214233 +88.86342793054897 +0 +120 +absolute + + + +0.01 +smooth + +8.536346743552848 +47.34969451579054 +419.2181082954137 +16.598139405946828 +88.86619971823805 +0 +120 +absolute + + + +0.01 +smooth + +8.536346793320693 +47.349694518774406 +419.25119723178943 +16.61671094762703 +88.86897742805456 +0 +120 +absolute + + + +0.01 +smooth + +8.536346843798011 +47.34969452183519 +419.28429547337373 +16.635330350190742 +88.8717608179395 +0 +120 +absolute + + + +0.01 +smooth + +8.536346894953944 +47.34969452497155 +419.3174012785521 +16.653996104573885 +88.87454964583378 +0 +120 +absolute + + + +0.01 +smooth + +8.53634694675763 +47.34969452818215 +419.3505129057097 +16.67270670171236 +88.87734366967841 +0 +120 +absolute + + + +0.01 +smooth + +8.536346999178214 +47.34969453146567 +419.38362861323196 +16.691460632542096 +88.88014264741432 +0 +120 +absolute + + + +0.01 +smooth + +8.536347052184835 +47.349694534820784 +419.416746659504 +16.710256387999 +88.88294633698246 +0 +120 +absolute + + + +0.01 +smooth + +8.53634710574664 +47.34969453824616 +419.4498653029111 +16.729092459018986 +88.88575449632378 +0 +120 +absolute + + + +0.01 +smooth + +8.536347159832763 +47.34969454174047 +419.4829828018387 +16.747967336537965 +88.8885668833793 +0 +120 +absolute + + + +0.01 +smooth + +8.536347214412348 +47.3496945453024 +419.51609741467206 +16.766879511491858 +88.89138325608991 +0 +120 +absolute + + + +0.01 +smooth + +8.536347269454541 +47.349694548930586 +419.5492073997964 +16.78582747481657 +88.89420337239662 +0 +120 +absolute + + + +0.01 +smooth + +8.536347324928482 +47.34969455262372 +419.58231101559693 +16.804809717448023 +88.89702699024036 +0 +120 +absolute + + + +0.01 +smooth + +8.536347380803308 +47.349694556380484 +419.6154065204591 +16.82382473032213 +88.89985386756209 +0 +120 +absolute + + + +0.01 +smooth + +8.536347437048164 +47.34969456019953 +419.6484921727681 +16.8428710043748 +88.90268376230279 +0 +120 +absolute + + + +0.01 +smooth + +8.536347493632192 +47.34969456407954 +419.6815662309093 +16.86194703054195 +88.90551643240339 +0 +120 +absolute + + + +0.01 +smooth + +8.536347550524535 +47.34969456801919 +419.71462695326784 +16.88105129975949 +88.90835163580488 +0 +120 +absolute + + + +0.01 +smooth + +8.536347607694333 +47.349694572017135 +419.7476725982292 +16.900182302963344 +88.9111891304482 +0 +120 +absolute + + + +0.01 +smooth + +8.536347665110725 +47.349694576072054 +419.7807014241786 +16.919338531089412 +88.9140286742743 +0 +120 +absolute + + + +0.01 +smooth + +8.536347722742859 +47.34969458018263 +419.81371168950125 +16.938518475073618 +88.91687002522417 +0 +120 +absolute + + + +0.01 +smooth + +8.53634778055987 +47.34969458434751 +419.8467016525825 +16.95772062585187 +88.91971294123873 +0 +120 +absolute + + + +0.01 +smooth + +8.536347838530903 +47.349694588565384 +419.87966957180765 +16.976943474360088 +88.92255718025896 +0 +120 +absolute + + + +0.01 +smooth + +8.536347896625099 +47.34969459283492 +419.9126137055619 +16.996185511534183 +88.92540250022584 +0 +120 +absolute + + + +0.01 +smooth + +8.53634795564094 +47.3496945975347 +419.94556093015217 +17.015474861532102 +88.92825324083876 +0 +120 +absolute + + + +0.01 +smooth + +8.536348016381627 +47.34969460303354 +419.9785382020851 +17.034839554974642 +88.93111372376298 +0 +120 +absolute + + + +0.01 +smooth + +8.536348078823366 +47.349694609315485 +420.01154390004655 +17.05427794249198 +88.93398367988839 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814294238 +47.34969461636457 +420.04457640272204 +17.073788374714294 +88.93686284010475 +0 +120 +absolute + + + +0.01 +smooth + +8.536348208714875 +47.349694624164876 +420.07763408879737 +17.09336920227177 +88.93975093530189 +0 +120 +absolute + + + +0.01 +smooth + +8.536348276117065 +47.349694632700384 +420.110715336958 +17.11301877579458 +88.94264769636959 +0 +120 +absolute + + + +0.01 +smooth + +8.536348345125164 +47.34969464195516 +420.1438185258894 +17.1327354459129 +88.94555285419767 +0 +120 +absolute + + + +0.01 +smooth + +8.536348415715384 +47.34969465191325 +420.17694203427743 +17.152517563256918 +88.94846613967596 +0 +120 +absolute + + + +0.01 +smooth + +8.53634848786394 +47.3496946625587 +420.21008424080765 +17.17236347845681 +88.95138728369425 +0 +120 +absolute + + + +0.01 +smooth + +8.536348561547047 +47.34969467387553 +420.2432435241657 +17.192271542142752 +88.95431601714236 +0 +120 +absolute + + + +0.01 +smooth + +8.536348636740916 +47.3496946858478 +420.27641826303716 +17.212240104944925 +88.95725207091007 +0 +120 +absolute + + + +0.01 +smooth + +8.536348713421763 +47.349694698459565 +420.3096068361079 +17.232267517493515 +88.96019517588726 +0 +120 +absolute + + + +0.01 +smooth + +8.536348791565795 +47.34969471169482 +420.34280762206294 +17.252352130418682 +88.96314506296365 +0 +120 +absolute + + + +0.01 +smooth + +8.536348871149228 +47.349694725537645 +420.37601899958844 +17.272492294350627 +88.9661014630291 +0 +120 +absolute + + + +0.01 +smooth + +8.536348952148277 +47.34969473997206 +420.40923934736986 +17.29268635991952 +88.96906410697342 +0 +120 +absolute + + + +0.01 +smooth + +8.536349034539155 +47.34969475498212 +420.4424670440928 +17.312932677755537 +88.97203272568639 +0 +120 +absolute + + + +0.01 +smooth + +8.536349118298077 +47.349694770551864 +420.47570046844294 +17.333229598488863 +88.97500705005785 +0 +120 +absolute + + + +0.01 +smooth + +8.536349203401246 +47.349694786665296 +420.50893799910574 +17.353575472749664 +88.97798681097758 +0 +120 +absolute + + + +0.01 +smooth + +8.536349289824889 +47.349694803306534 +420.54217801476705 +17.37396865116814 +88.98097173933543 +0 +120 +absolute + + + +0.01 +smooth + +8.53634937754521 +47.34969482045954 +420.5754188941122 +17.39440748437445 +88.98396156602114 +0 +120 +absolute + + + +0.01 +smooth + +8.536349466538429 +47.349694838108405 +420.6086590158272 +17.41489032299879 +88.9869560219246 +0 +120 +absolute + + + +0.01 +smooth + +8.536349556780753 +47.34969485623716 +420.64189675859745 +17.435415517671323 +88.98995483793558 +0 +120 +absolute + + + +0.01 +smooth + +8.536349648248398 +47.34969487482982 +420.67513050110847 +17.455981419022244 +88.99295774494388 +0 +120 +absolute + + + +0.01 +smooth + +8.536349740917577 +47.349694893870456 +420.70835862204603 +17.47658637768172 +88.99596447383934 +0 +120 +absolute + + + +0.01 +smooth + +8.536349834764502 +47.3496949133431 +420.74157950009567 +17.497228744279933 +88.9989747555117 +0 +120 +absolute + + + +0.01 +smooth + +8.536349929765391 +47.349694933231795 +420.77479151394317 +17.517906869447067 +89.00198832085088 +0 +120 +absolute + + + +0.01 +smooth + +8.536350025896454 +47.349694953520576 +420.80799304227395 +17.538619103813296 +89.0050049007466 +0 +120 +absolute + + + +0.01 +smooth + +8.5363501231339 +47.34969497419349 +420.84118246377375 +17.5593637980088 +89.0080242260887 +0 +120 +absolute + + + +0.01 +smooth + +8.536350221453947 +47.34969499523457 +420.87435815712826 +17.58013930266376 +89.01104602776698 +0 +120 +absolute + + + +0.01 +smooth + +8.53635032083281 +47.34969501662786 +420.9075185010229 +17.600943968408348 +89.01407003667123 +0 +120 +absolute + + + +0.01 +smooth + +8.536350421246697 +47.34969503835741 +420.9406618741434 +17.621776145872758 +89.01709598369132 +0 +120 +absolute + + + +0.01 +smooth + +8.536350522671825 +47.34969506040724 +420.97378665517533 +17.642634185687154 +89.02012359971701 +0 +120 +absolute + + + +0.01 +smooth + +8.536350625084404 +47.349695082761414 +421.0068912228044 +17.66351643848172 +89.02315261563811 +0 +120 +absolute + + + +0.01 +smooth + +8.53635072846065 +47.34969510540397 +421.0399739557163 +17.684421254886637 +89.02618276234445 +0 +120 +absolute + + + +0.01 +smooth + +8.536350832776778 +47.349695128318935 +421.07303323259646 +17.705346985532085 +89.02921377072582 +0 +120 +absolute + + + +0.01 +smooth + +8.536350938008995 +47.34969515149035 +421.10606743213054 +17.72629198104824 +89.03224537167206 +0 +120 +absolute + + + +0.01 +smooth + +8.536351044133522 +47.34969517490227 +421.13907493300417 +17.74725459206528 +89.03527729607293 +0 +120 +absolute + + + +0.01 +smooth + +8.536351151126565 +47.349695198538726 +421.1720541139031 +17.76823316921339 +89.03830927481829 +0 +120 +absolute + + + +0.01 +smooth + +8.536351258964341 +47.34969522238376 +421.2050033535128 +17.78922606312274 +89.04134103879792 +0 +120 +absolute + + + +0.01 +smooth + +8.536351367623062 +47.34969524642142 +421.2379210305189 +17.81023162442352 +89.04437231890162 +0 +120 +absolute + + + +0.01 +smooth + +8.536351477078943 +47.34969527063574 +421.27080552360724 +17.8312482037459 +89.04740284601922 +0 +120 +absolute + + + +0.01 +smooth + +8.536351587308197 +47.34969529501076 +421.30365521146314 +17.85227415172006 +89.05043235104053 +0 +120 +absolute + + + +0.01 +smooth + +8.536351698287035 +47.34969531953053 +421.33646847277237 +17.873307818976187 +89.05346056485536 +0 +120 +absolute + + + +0.01 +smooth + +8.536351809991672 +47.34969534417908 +421.3692436862205 +17.89434755614445 +89.05648721835348 +0 +120 +absolute + + + +0.01 +smooth + +8.536351922398318 +47.34969536894045 +421.4019792304932 +17.91539171385504 +89.05951204242476 +0 +120 +absolute + + + +0.01 +smooth + +8.53635203548319 +47.34969539379869 +421.4346734842761 +17.93643864273812 +89.06253476795897 +0 +120 +absolute + + + +0.01 +smooth + +8.536352149222502 +47.349695418737845 +421.46732482625475 +17.95748669342388 +89.0655551258459 +0 +120 +absolute + + + +0.01 +smooth + +8.536352263592466 +47.34969544374194 +421.4999316351149 +17.9785342165425 +89.06857284697541 +0 +120 +absolute + + + +0.01 +smooth + +8.53635237856929 +47.349695468795026 +421.532492289542 +17.999579562724158 +89.07158766223728 +0 +120 +absolute + + + +0.01 +smooth + +8.536352494129197 +47.34969549388115 +421.56500516822183 +18.020621082599025 +89.07459930252132 +0 +120 +absolute + + + +0.01 +smooth + +8.536352610248391 +47.34969551898433 +421.5974686498399 +18.04165712679729 +89.07760749871736 +0 +120 +absolute + + + +0.01 +smooth + +8.536352727625339 +47.34969554448732 +421.6299083550275 +18.06271706917593 +89.08061704919832 +0 +120 +absolute + + + +0.01 +smooth + +8.536352846959382 +47.349695570776106 +421.66234996341746 +18.08383008956778 +89.08363271343971 +0 +120 +absolute + + + +0.01 +smooth + +8.536352968228087 +47.349695597839755 +421.6947919421984 +18.104994247566797 +89.08665416398509 +0 +120 +absolute + + + +0.01 +smooth + +8.536353091409 +47.349695625667216 +421.72723275855805 +18.126207602766943 +89.08968107337795 +0 +120 +absolute + + + +0.01 +smooth + +8.536353216479682 +47.349695654247526 +421.75967087968513 +18.14746821476217 +89.0927131141619 +0 +120 +absolute + + + +0.01 +smooth + +8.536353343417687 +47.34969568356969 +421.7921047727675 +18.16877414314644 +89.09574995888046 +0 +120 +absolute + + + +0.01 +smooth + +8.536353472200572 +47.34969571362272 +421.8245329049937 +18.19012344751371 +89.09879128007722 +0 +120 +absolute + + + +0.01 +smooth + +8.536353602805885 +47.3496957443956 +421.8569537435519 +18.21151418745793 +89.1018367502957 +0 +120 +absolute + + + +0.01 +smooth + +8.536353735211192 +47.34969577587737 +421.8893657556304 +18.232944422573066 +89.10488604207953 +0 +120 +absolute + + + +0.01 +smooth + +8.53635386939404 +47.34969580805703 +421.92176740841745 +18.25441221245308 +89.1079388279722 +0 +120 +absolute + + + +0.01 +smooth + +8.53635400533199 +47.34969584092357 +421.9541571691014 +18.27591561669193 +89.11099478051727 +0 +120 +absolute + + + +0.01 +smooth + +8.536354143002592 +47.34969587446601 +421.98653350487035 +18.297452694883557 +89.11405357225833 +0 +120 +absolute + + + +0.01 +smooth + +8.536354282383401 +47.34969590867335 +422.0188948829125 +18.319021506621926 +89.11711487573889 +0 +120 +absolute + + + +0.01 +smooth + +8.53635442345198 +47.3496959435346 +422.0512397704163 +18.340620111501003 +89.12017836350253 +0 +120 +absolute + + + +0.01 +smooth + +8.536354566185876 +47.34969597903877 +422.0835666345699 +18.362246569114745 +89.12324370809282 +0 +120 +absolute + + + +0.01 +smooth + +8.536354710562648 +47.34969601517487 +422.1158739425616 +18.3838989390571 +89.12631058205328 +0 +120 +absolute + + + +0.01 +smooth + +8.536354856559853 +47.34969605193192 +422.14816016157977 +18.405575280922037 +89.12937865792753 +0 +120 +absolute + + + +0.01 +smooth + +8.53635500415504 +47.349696089298874 +422.18042375881225 +18.427273654303498 +89.13244760825901 +0 +120 +absolute + + + +0.01 +smooth + +8.536355153325772 +47.349696127264814 +422.2126632014479 +18.448992118795463 +89.1355171055914 +0 +120 +absolute + + + +0.01 +smooth + +8.5363553040496 +47.34969616581869 +422.2448769566746 +18.47072873399187 +89.1385868224682 +0 +120 +absolute + + + +0.01 +smooth + +8.536355456304078 +47.34969620494954 +422.27706349168074 +18.492481559486688 +89.14165643143296 +0 +120 +absolute + + + +0.01 +smooth + +8.536355610066764 +47.34969624464636 +422.30922127365443 +18.514248654873867 +89.14472560502927 +0 +120 +absolute + + + +0.01 +smooth + +8.536355765315212 +47.34969628489815 +422.341348769784 +18.536028079747368 +89.14779401580063 +0 +120 +absolute + + + +0.01 +smooth + +8.536355922026981 +47.34969632569394 +422.373444447258 +18.55781789370116 +89.15086133629066 +0 +120 +absolute + + + +0.01 +smooth + +8.536356080179617 +47.34969636702271 +422.40550677326405 +18.579616156329173 +89.15392723904284 +0 +120 +absolute + + + +0.01 +smooth + +8.536356239750688 +47.349696408873484 +422.4375342149911 +18.601420927225394 +89.15699139660082 +0 +120 +absolute + + + +0.01 +smooth + +8.53635640071774 +47.34969645123528 +422.469525239627 +18.623230265983768 +89.1600534815081 +0 +120 +absolute + + + +0.01 +smooth + +8.536356563058328 +47.34969649409708 +422.50147831436004 +18.645042232198254 +89.16311316630821 +0 +120 +absolute + + + +0.01 +smooth + +8.536356726750014 +47.34969653744791 +422.53339190637865 +18.666854885462804 +89.16617012354476 +0 +120 +absolute + + + +0.01 +smooth + +8.536356891770346 +47.34969658127676 +422.56526448287093 +18.68866628537138 +89.16922402576128 +0 +120 +absolute + + + +0.01 +smooth + +8.536357058096884 +47.34969662557266 +422.59709451102515 +18.71047449151795 +89.17227454550132 +0 +120 +absolute + + + +0.01 +smooth + +8.536357225707183 +47.3496966703246 +422.62888045802964 +18.732277563496453 +89.17532135530847 +0 +120 +absolute + + + +0.01 +smooth + +8.536357394578797 +47.3496967155216 +422.6606207910727 +18.754073560900856 +89.17836412772624 +0 +120 +absolute + + + +0.01 +smooth + +8.53635756468928 +47.34969676115266 +422.6923139773425 +18.775860543325123 +89.18140253529822 +0 +120 +absolute + + + +0.01 +smooth + +8.53635773601619 +47.34969680720678 +422.7239584840273 +18.797636570363203 +89.18443625056793 +0 +120 +absolute + + + +0.01 +smooth + +8.536357908537083 +47.34969685367298 +422.7555527783154 +18.819399701609058 +89.18746494607898 +0 +120 +absolute + + + +0.01 +smooth + +8.53635808222951 +47.349696900540266 +422.78709532739515 +18.841147996656638 +89.19048829437489 +0 +120 +absolute + + + +0.01 +smooth + +8.53635825707103 +47.34969694779764 +422.81858459845455 +18.86287951509991 +89.19350596799922 +0 +120 +absolute + + + +0.01 +smooth + +8.536358433039194 +47.349696995434115 +422.85001905868205 +18.884592316532828 +89.1965176394955 +0 +120 +absolute + + + +0.01 +smooth + +8.536358610111563 +47.34969704343868 +422.88139717526593 +18.90628446054935 +89.19952298140734 +0 +120 +absolute + + + +0.01 +smooth + +8.536358788265687 +47.34969709180038 +422.9127174153943 +18.927954006743438 +89.20252166627824 +0 +120 +absolute + + + +0.01 +smooth + +8.536358967479128 +47.3496971405082 +422.9439782462556 +18.949599014709037 +89.20551336665181 +0 +120 +absolute + + + +0.01 +smooth + +8.536359147729433 +47.34969718955114 +422.975178135038 +18.97121754404012 +89.20849775507159 +0 +120 +absolute + + + +0.01 +smooth + +8.536359328994163 +47.34969723891821 +423.0063155489297 +18.992807654330637 +89.2114745040811 +0 +120 +absolute + + + +0.01 +smooth + +8.53635951125087 +47.34969728859842 +423.0373889551191 +19.014367405174546 +89.21444328622395 +0 +120 +absolute + + + +0.01 +smooth + +8.536359694477113 +47.34969733858079 +423.06839682079425 +19.035894856165804 +89.21740377404365 +0 +120 +absolute + + + +0.01 +smooth + +8.536359878650444 +47.34969738885432 +423.0993376131437 +19.05738806689837 +89.22035564008378 +0 +120 +absolute + + + +0.01 +smooth + +8.53636006374842 +47.349697439408004 +423.1302097993555 +19.078845096966205 +89.22329855688788 +0 +120 +absolute + + + +0.01 +smooth + +8.536360249748595 +47.34969749023087 +423.1610118466179 +19.10026400596326 +89.22623219699955 +0 +120 +absolute + + + +0.01 +smooth + +8.536360436628526 +47.34969754131191 +423.1917422221193 +19.121642853483504 +89.22915623296228 +0 +120 +absolute + + + +0.01 +smooth + +8.536360624365766 +47.34969759264014 +423.2223993930478 +19.14297969912088 +89.23207033731966 +0 +120 +absolute + + + +0.01 +smooth + +8.536360813618938 +47.34969764453484 +423.25300902244703 +19.16431049441592 +89.2349809450306 +0 +120 +absolute + + + +0.01 +smooth + +8.536361005046636 +47.34969769731607 +423.2835968283521 +19.18567080969896 +89.23789440966824 +0 +120 +absolute + + + +0.01 +smooth + +8.53636119862638 +47.34969775097396 +423.31416136043913 +19.207058132748674 +89.24081028169732 +0 +120 +absolute + + + +0.01 +smooth + +8.536361394335678 +47.34969780549862 +423.3447011683832 +19.228469951343737 +89.24372811158263 +0 +120 +absolute + + + +0.01 +smooth + +8.53636159215205 +47.3496978608802 +423.3752148018605 +19.24990375326282 +89.2466474497889 +0 +120 +absolute + + + +0.01 +smooth + +8.536361792053007 +47.34969791710883 +423.40570081054665 +19.2713570262846 +89.24956784678095 +0 +120 +absolute + + + +0.01 +smooth + +8.53636199401607 +47.349697974174646 +423.4361577441176 +19.29282725818775 +89.25248885302356 +0 +120 +absolute + + + +0.01 +smooth + +8.536362198018756 +47.34969803206778 +423.46658415224874 +19.314311936750947 +89.25541001898152 +0 +120 +absolute + + + +0.01 +smooth + +8.536362404038575 +47.34969809077836 +423.4969785846161 +19.335808549752862 +89.2583308951196 +0 +120 +absolute + + + +0.01 +smooth + +8.536362612053047 +47.34969815029656 +423.5273395908955 +19.35731458497218 +89.26125103190257 +0 +120 +absolute + + + +0.01 +smooth + +8.536362822039683 +47.349698210612445 +423.5576657207623 +19.37882753018756 +89.26416997979521 +0 +120 +absolute + + + +0.01 +smooth + +8.536363033976002 +47.349698271716186 +423.58795552389256 +19.40034487317768 +89.2670872892623 +0 +120 +absolute + + + +0.01 +smooth + +8.536363247839517 +47.34969833359792 +423.6182075499619 +19.421864101721216 +89.2700025107686 +0 +120 +absolute + + + +0.01 +smooth + +8.536363463607747 +47.34969839624776 +423.6484203486461 +19.44338270359685 +89.27291519477893 +0 +120 +absolute + + + +0.01 +smooth + +8.536363681258207 +47.34969845965587 +423.6785924696209 +19.46489816658325 +89.27582489175805 +0 +120 +absolute + + + +0.01 +smooth + +8.536363900768409 +47.34969852381235 +423.7087224625621 +19.486407978459084 +89.27873115217069 +0 +120 +absolute + + + +0.01 +smooth + +8.536364122115874 +47.349698588707376 +423.7388088771456 +19.507909627003045 +89.28163352648176 +0 +120 +absolute + + + +0.01 +smooth + +8.536364345278109 +47.34969865433103 +423.7688502630466 +19.529400599993778 +89.28453156515587 +0 +120 +absolute + + + +0.01 +smooth + +8.536364570232639 +47.34969872067348 +423.7988451699415 +19.550878385209987 +89.28742481865794 +0 +120 +absolute + + + +0.01 +smooth + +8.536364796956976 +47.34969878772485 +423.8287921475057 +19.572340470430333 +89.29031283745267 +0 +120 +absolute + + + +0.01 +smooth + +8.536365025428633 +47.34969885547527 +423.85868974541484 +19.59378434343349 +89.29319517200489 +0 +120 +absolute + + + +0.01 +smooth + +8.53636525562513 +47.349698923914886 +423.8885365133451 +19.615207491998138 +89.29607137277934 +0 +120 +absolute + + + +0.01 +smooth + +8.536365487523977 +47.3496989930338 +423.91833100097176 +19.636607403902936 +89.29894099024077 +0 +120 +absolute + + + +0.01 +smooth + +8.536365721102698 +47.3496990628222 +423.94807175797087 +19.657981566926587 +89.30180357485403 +0 +120 +absolute + + + +0.01 +smooth + +8.536365956338797 +47.34969913327015 +423.9777573340179 +19.67932746884773 +89.30465867708384 +0 +120 +absolute + + + +0.01 +smooth + +8.5363661932098 +47.349699204367845 +424.007386278789 +19.70064259744507 +89.30750584739503 +0 +120 +absolute + + + +0.01 +smooth + +8.536366431693217 +47.3496992761054 +424.03695714195953 +19.72192444049726 +89.31034463625235 +0 +120 +absolute + + + +0.01 +smooth + +8.536366671766569 +47.349699348472924 +424.06646847320553 +19.74317048578299 +89.31317459412061 +0 +120 +absolute + + + +0.01 +smooth + +8.536366913407363 +47.34969942146056 +424.0959188222025 +19.76437822108093 +89.3159952714645 +0 +120 +absolute + + + +0.01 +smooth + +8.536367156593121 +47.34969949505849 +424.12530673862636 +19.785545134169745 +89.31880621874893 +0 +120 +absolute + + + +0.01 +smooth + +8.536367401301357 +47.34969956925677 +424.15463077215276 +19.80666871282812 +89.32160698643857 +0 +120 +absolute + + + +0.01 +smooth + +8.536367647509586 +47.349699644045586 +424.1838894724575 +19.827746444834723 +89.32439712499823 +0 +120 +absolute + + + +0.01 +smooth + +8.536367895195324 +47.34969971941505 +424.2130813892163 +19.848775817968235 +89.32717618489272 +0 +120 +absolute + + + +0.01 +smooth + +8.536368144336087 +47.349699795355306 +424.242205072105 +19.869754320007328 +89.3299437165868 +0 +120 +absolute + + + +0.01 +smooth + +8.53636839490939 +47.34969987185649 +424.27125907079915 +19.890679438730672 +89.33269927054523 +0 +120 +absolute + + + +0.01 +smooth + +8.536368646892749 +47.34969994890872 +424.3002419349748 +19.911548661916946 +89.33544239723281 +0 +120 +absolute + + + +0.01 +smooth + +8.536368900263678 +47.349700026502134 +424.3291522143073 +19.932359477344818 +89.33817264711433 +0 +120 +absolute + + + +0.01 +smooth + +8.536369154999694 +47.34970010462688 +424.3579884584728 +19.953109372792973 +89.34088957065453 +0 +120 +absolute + + + +0.01 +smooth + +8.536369411078313 +47.34970018327307 +424.3867492171467 +19.97379583604008 +89.34359271831822 +0 +120 +absolute + + + +0.01 +smooth + +8.53636966847705 +47.34970026243086 +424.41543304000504 +19.994416354864807 +89.34628164057018 +0 +120 +absolute + + + +0.01 +smooth + +8.53636992717342 +47.349700342090365 +424.4440384767234 +20.014968417045843 +89.34895588787515 +0 +120 +absolute + + + +0.01 +smooth + +8.53637018714494 +47.349700422241725 +424.4725640769775 +20.035449510361843 +89.35161501069797 +0 +120 +absolute + + + +0.01 +smooth + +8.536370448369123 +47.34970050287508 +424.50100839044325 +20.0558571225915 +89.35425855950339 +0 +120 +absolute + + + +0.01 +smooth + +8.536370710823487 +47.34970058398055 +424.52936996679625 +20.076188741513484 +89.35688608475616 +0 +120 +absolute + + + +0.01 +smooth + +8.536370974485546 +47.349700665548276 +424.5576473557123 +20.09644185490646 +89.3594971369211 +0 +120 +absolute + + + +0.01 +smooth + +8.536371239332817 +47.34970074756839 +424.5858391068672 +20.116613950549112 +89.36209126646298 +0 +120 +absolute + + + +0.01 +smooth + +8.536371505342816 +47.349700830031026 +424.61394376993655 +20.136702516220105 +89.36466802384656 +0 +120 +absolute + + + +0.01 +smooth + +8.536371772493055 +47.34970091292632 +424.6419598945962 +20.156705039698128 +89.36722695953662 +0 +120 +absolute + + + +0.01 +smooth + +8.536372040761053 +47.34970099624441 +424.6698860305219 +20.176619008761836 +89.36976762399797 +0 +120 +absolute + + + +0.01 +smooth + +8.536372310124326 +47.34970107997541 +424.6977207273894 +20.196441911189922 +89.37228956769536 +0 +120 +absolute + + + +0.01 +smooth + +8.536372580560384 +47.34970116410947 +424.7254625348745 +20.21617123476105 +89.3747923410936 +0 +120 +absolute + + + +0.01 +smooth + +8.53637285269728 +47.349701248946005 +424.75313789034294 +20.23586045637007 +89.37728677338436 +0 +120 +absolute + + + +0.01 +smooth + +8.536373127162737 +47.34970133478458 +424.780773289591 +20.255562249887735 +89.37978349712039 +0 +120 +absolute + + + +0.01 +smooth + +8.536373403933808 +47.34970142161565 +424.8083673699403 +20.2752728985566 +89.38228176780801 +0 +120 +absolute + + + +0.01 +smooth + +8.53637368298755 +47.34970150942965 +424.8359187687124 +20.294988685619217 +89.38478084095351 +0 +120 +absolute + + + +0.01 +smooth + +8.53637396430101 +47.34970159821698 +424.8634261232288 +20.314705894318116 +89.38727997206318 +0 +120 +absolute + + + +0.01 +smooth + +8.536374247851235 +47.34970168796806 +424.890888070811 +20.334420807895853 +89.38977841664332 +0 +120 +absolute + + + +0.01 +smooth + +8.53637453361528 +47.349701778673335 +424.9183032487805 +20.354129709594975 +89.39227543020024 +0 +120 +absolute + + + +0.01 +smooth + +8.536374821570202 +47.34970187032325 +424.945670294459 +20.373828882658035 +89.3947702682403 +0 +120 +absolute + + + +0.01 +smooth + +8.536375111693038 +47.34970196290818 +424.9729878451677 +20.393514610327564 +89.39726218626969 +0 +120 +absolute + + + +0.01 +smooth + +8.536375403960852 +47.3497020564186 +425.0002545382286 +20.413183175846125 +89.39975043979479 +0 +120 +absolute + + + +0.01 +smooth + +8.536375698350689 +47.34970215084489 +425.02746901096276 +20.43283086245625 +89.40223428432188 +0 +120 +absolute + + + +0.01 +smooth + +8.536375994839604 +47.34970224617752 +425.05462990069213 +20.452453953400493 +89.40471297535728 +0 +120 +absolute + + + +0.01 +smooth + +8.536376293404642 +47.34970234240687 +425.08173584473786 +20.472048731921397 +89.40718576840726 +0 +120 +absolute + + + +0.01 +smooth + +8.53637659402286 +47.34970243952341 +425.1087854804216 +20.491611481261515 +89.40965191897814 +0 +120 +absolute + + + +0.01 +smooth + +8.536376896671309 +47.34970253751756 +425.1357774450651 +20.511138484663388 +89.41211068257623 +0 +120 +absolute + + + +0.01 +smooth + +8.536377201327033 +47.3497026363797 +425.16271037598966 +20.530626025369568 +89.41456131470785 +0 +120 +absolute + + + +0.01 +smooth + +8.536377507967092 +47.34970273610031 +425.18958291051695 +20.550070386622593 +89.41700307087926 +0 +120 +absolute + + + +0.01 +smooth + +8.536377816568532 +47.34970283666979 +425.2163936859682 +20.569467851665014 +89.41943520659677 +0 +120 +absolute + + + +0.01 +smooth + +8.536378127108408 +47.34970293807858 +425.24314133966544 +20.588814703739395 +89.42185697736674 +0 +120 +absolute + + + +0.01 +smooth + +8.536378439563764 +47.34970304031708 +425.26982450892973 +20.608107226088247 +89.42426763869538 +0 +120 +absolute + + + +0.01 +smooth + +8.536378753911656 +47.34970314337573 +425.2964418310827 +20.627341701954144 +89.42666644608904 +0 +120 +absolute + + + +0.01 +smooth + +8.536379070129136 +47.34970324724497 +425.3229919434462 +20.646514414579624 +89.42905265505406 +0 +120 +absolute + + + +0.01 +smooth + +8.536379388193257 +47.34970335191522 +425.3494734833416 +20.665621647207235 +89.4314255210967 +0 +120 +absolute + + + +0.01 +smooth + +8.536379708081062 +47.34970345737687 +425.3758850880901 +20.68465968307952 +89.43378429972323 +0 +120 +absolute + + + +0.01 +smooth + +8.536380029769608 +47.34970356362038 +425.4022253950136 +20.703624805439027 +89.43612824644 +0 +120 +absolute + + + +0.01 +smooth + +8.536380353235947 +47.34970367063619 +425.42849304143357 +20.72251329752831 +89.43845661675333 +0 +120 +absolute + + + +0.01 +smooth + +8.536380678457126 +47.34970377841468 +425.4546866646715 +20.741321442589907 +89.44076866616948 +0 +120 +absolute + + + +0.01 +smooth + +8.5363810054102 +47.349703886946315 +425.4808049020489 +20.760045523866363 +89.44306365019473 +0 +120 +absolute + + + +0.01 +smooth + +8.53638133407222 +47.349703996221514 +425.5068463908873 +20.778681824600234 +89.44534082433546 +0 +120 +absolute + + + +0.01 +smooth + +8.536381664420231 +47.34970410623069 +425.5328097685082 +20.79722662803406 +89.44759944409795 +0 +120 +absolute + + + +0.01 +smooth + +8.536381996431292 +47.34970421696428 +425.55869367223323 +20.815676217410388 +89.44983876498847 +0 +120 +absolute + + + +0.01 +smooth + +8.53638233008245 +47.349704328412685 +425.5844967393839 +20.834026875971766 +89.4520580425133 +0 +120 +absolute + + + +0.01 +smooth + +8.536382665350757 +47.34970444056637 +425.6102176072816 +20.852274886960743 +89.45425653217882 +0 +120 +absolute + + + +0.01 +smooth + +8.536383002213263 +47.34970455341574 +425.63585491324807 +20.870416533619863 +89.45643348949127 +0 +120 +absolute + + + +0.01 +smooth + +8.53638334064702 +47.34970466695121 +425.6614072946047 +20.88844809919167 +89.45858816995698 +0 +120 +absolute + + + +0.01 +smooth + +8.536383680629081 +47.349704781163226 +425.686873388673 +20.906365866918712 +89.46071982908225 +0 +120 +absolute + + + +0.01 +smooth + +8.536384022136493 +47.3497048960422 +425.71225183277465 +20.924166120043537 +89.46282772237339 +0 +120 +absolute + + + +0.01 +smooth + +8.536384365146311 +47.34970501157857 +425.737541264231 +20.94184514180869 +89.4649111053367 +0 +120 +absolute + + + +0.01 +smooth + +8.536384709635584 +47.349705127762746 +425.7627403203637 +20.959399215456727 +89.46696923347847 +0 +120 +absolute + + + +0.01 +smooth + +8.536385055581365 +47.34970524458517 +425.7878476384943 +20.97682462423018 +89.46900136230497 +0 +120 +absolute + + + +0.01 +smooth + +8.536385402960702 +47.349705362036254 +425.8128618559442 +20.994117651371607 +89.47100674732258 +0 +120 +absolute + + + +0.01 +smooth + +8.536385751750647 +47.34970548010644 +425.8377816100351 +21.011274580123548 +89.47298464403754 +0 +120 +absolute + + + +0.01 +smooth + +8.536386101928255 +47.34970559878613 +425.8626055380884 +21.028291693728548 +89.47493430795618 +0 +120 +absolute + + + +0.01 +smooth + +8.536386453470572 +47.34970571806576 +425.8873322774257 +21.045165275429163 +89.47685499458481 +0 +120 +absolute + + + +0.01 +smooth + +8.536386806354649 +47.34970583793578 +425.91196046536845 +21.06189160846793 +89.47874595942972 +0 +120 +absolute + + + +0.01 +smooth + +8.536387160557542 +47.34970595838658 +425.93648873923826 +21.0784669760874 +89.4806064579972 +0 +120 +absolute + + + +0.01 +smooth + +8.5363875160563 +47.349706079408605 +425.9609157363566 +21.094887661530123 +89.48243574579357 +0 +120 +absolute + + + +0.01 +smooth + +8.536387872827973 +47.34970620099227 +425.98524009404497 +21.111149948038634 +89.4842330783251 +0 +120 +absolute + + + +0.01 +smooth + +8.53638823084961 +47.34970632312802 +426.00946044962507 +21.127250118855496 +89.48599771109816 +0 +120 +absolute + + + +0.01 +smooth + +8.536388590098268 +47.349706445806255 +426.0335754404183 +21.143184457223242 +89.487728899619 +0 +120 +absolute + + + +0.01 +smooth + +8.536388950550993 +47.34970656901742 +426.0575837037462 +21.158949246384424 +89.48942589939394 +0 +120 +absolute + + + +0.01 +smooth + +8.536389312802553 +47.34970669304989 +426.08151282609424 +21.17464604599623 +89.49111611764309 +0 +120 +absolute + + + +0.01 +smooth + +8.536389677447438 +47.34970681819207 +426.10539045141155 +21.190374209361604 +89.49282608149451 +0 +120 +absolute + + + +0.01 +smooth + +8.536390044462282 +47.34970694443444 +426.12921530321483 +21.206126710191736 +89.49455372631633 +0 +120 +absolute + + + +0.01 +smooth + +8.536390413823717 +47.34970707176751 +426.152986105021 +21.221896522197834 +89.49629698747665 +0 +120 +absolute + + + +0.01 +smooth + +8.536390785508383 +47.34970720018173 +426.17670158034673 +21.23767661909108 +89.4980538003436 +0 +120 +absolute + + + +0.01 +smooth + +8.536391159492904 +47.34970732966761 +426.20036045270916 +21.253459974582658 +89.49982210028529 +0 +120 +absolute + + + +0.01 +smooth + +8.536391535753921 +47.34970746021562 +426.2239614456248 +21.26923956238376 +89.50159982266985 +0 +120 +absolute + + + +0.01 +smooth + +8.536391914268066 +47.349707591816234 +426.2475032826106 +21.28500835620559 +89.50338490286536 +0 +120 +absolute + + + +0.01 +smooth + +8.536392295011975 +47.34970772445994 +426.27098468718344 +21.30075932975934 +89.50517527624004 +0 +120 +absolute + + + +0.01 +smooth + +8.536392677962278 +47.34970785813724 +426.2944043828601 +21.316485456756194 +89.50696887816197 +0 +120 +absolute + + + +0.01 +smooth + +8.536393063095613 +47.3497079928386 +426.31776109315746 +21.332179710907344 +89.50876364399926 +0 +120 +absolute + + + +0.01 +smooth + +8.536393450388616 +47.34970812855452 +426.3410535415924 +21.347835065923995 +89.51055750912003 +0 +120 +absolute + + + +0.01 +smooth + +8.536393839817913 +47.34970826527544 +426.36428045168145 +21.363444495517317 +89.5123484088924 +0 +120 +absolute + + + +0.01 +smooth + +8.536394231360145 +47.34970840299189 +426.3874405469418 +21.379000973398515 +89.51413427868452 +0 +120 +absolute + + + +0.01 +smooth + +8.536394624991942 +47.34970854169432 +426.41053255089 +21.394497473278783 +89.51591305386448 +0 +120 +absolute + + + +0.01 +smooth + +8.53639502068994 +47.349708681373244 +426.43355518704305 +21.409926968869303 +89.5176826698004 +0 +120 +absolute + + + +0.01 +smooth + +8.536395418430777 +47.34970882201913 +426.45650717891795 +21.425282433881286 +89.5194410618605 +0 +120 +absolute + + + +0.01 +smooth + +8.536395818191075 +47.34970896362244 +426.47938725003104 +21.440556842025895 +89.52118616541274 +0 +120 +absolute + + + +0.01 +smooth + +8.536396219947482 +47.349709106173705 +426.50219412389964 +21.45574316701435 +89.52291591582542 +0 +120 +absolute + + + +0.01 +smooth + +8.536396623676623 +47.349709249663356 +426.5249265240402 +21.470834382557832 +89.52462824846651 +0 +120 +absolute + + + +0.01 +smooth + +8.536397029355136 +47.34970939408191 +426.5475831739699 +21.485823462367527 +89.52632109870422 +0 +120 +absolute + + + +0.01 +smooth + +8.536397436959653 +47.349709539419834 +426.5701627972052 +21.500703380154633 +89.52799240190663 +0 +120 +absolute + + + +0.01 +smooth + +8.536397846466812 +47.34970968566762 +426.59266411726327 +21.51546710963034 +89.52964009344188 +0 +120 +absolute + + + +0.01 +smooth + +8.536398257853241 +47.34970983281576 +426.6150858576608 +21.530107624505845 +89.53126210867813 +0 +120 +absolute + + + +0.01 +smooth + +8.536398671095574 +47.3497099808547 +426.6374267419144 +21.54461789849233 +89.53285638298344 +0 +120 +absolute + + + +0.01 +smooth + +8.536399086170455 +47.34971012977497 +426.6596854935413 +21.558990905301 +89.534420851726 +0 +120 +absolute + + + +0.01 +smooth + +8.536399503054508 +47.34971027956702 +426.68186083605815 +21.573219618643034 +89.53595345027385 +0 +120 +absolute + + + +0.01 +smooth + +8.53639992172437 +47.34971043022134 +426.7039514929817 +21.587297012229634 +89.53745211399519 +0 +120 +absolute + + + +0.01 +smooth + +8.536400342156673 +47.34971058172842 +426.7259561878289 +21.601216059771982 +89.5389147782581 +0 +120 +absolute + + + +0.01 +smooth + +8.536400764328057 +47.34971073407874 +426.7478736441165 +21.61496973498128 +89.54033937843073 +0 +120 +absolute + + + +0.01 +smooth + +8.536401188215152 +47.34971088726279 +426.7697025853614 +21.628551011568717 +89.54172384988117 +0 +120 +absolute + + + +0.01 +smooth + +8.53640161379459 +47.349711041271036 +426.79144173508035 +21.64195286324548 +89.54306612797757 +0 +120 +absolute + + + +0.01 +smooth + +8.536402041043008 +47.34971119609397 +426.8130898167902 +21.655168263722768 +89.54436414808805 +0 +120 +absolute + + + +0.01 +smooth + +8.53640246993704 +47.34971135172208 +426.83464555400786 +21.66819018671177 +89.54561584558071 +0 +120 +absolute + + + +0.01 +smooth + +8.536402900453318 +47.349711508145845 +426.85610767025014 +21.681011605923675 +89.5468191558237 +0 +120 +absolute + + + +0.01 +smooth + +8.53640333256848 +47.34971166535575 +426.8774748890337 +21.69362549506968 +89.54797201418513 +0 +120 +absolute + + + +0.01 +smooth + +8.536403766259154 +47.34971182334226 +426.8987459338756 +21.706024827860972 +89.54907235603314 +0 +120 +absolute + + + +0.01 +smooth + +8.53640420150198 +47.34971198209589 +426.91991952829255 +21.718202578008743 +89.55011811673583 +0 +120 +absolute + + + +0.01 +smooth + +8.536404638273588 +47.34971214160711 +426.94099439580145 +21.730151719224196 +89.55110723166135 +0 +120 +absolute + + + +0.01 +smooth + +8.536405076550615 +47.34971230186639 +426.961969259919 +21.741865225218504 +89.55203763617777 +0 +120 +absolute + + + +0.01 +smooth + +8.536405516309692 +47.34971246286422 +426.9828428441621 +21.753336069702875 +89.55290726565329 +0 +120 +absolute + + + +0.01 +smooth + +8.536405957527457 +47.34971262459109 +427.0036138720477 +21.764557226388494 +89.55371405545597 +0 +120 +absolute + + + +0.01 +smooth + +8.53640640018054 +47.349712787037475 +427.02428106709243 +21.775521668986556 +89.55445594095397 +0 +120 +absolute + + + +0.01 +smooth + +8.536406844245576 +47.34971295019386 +427.0448431528132 +21.786222371208247 +89.5551308575154 +0 +120 +absolute + + + +0.01 +smooth + +8.536407289699202 +47.349713114050736 +427.065298852727 +21.79665230676477 +89.55573674050837 +0 +120 +absolute + + + +0.01 +smooth + +8.536407736518049 +47.349713278598585 +427.08564689035035 +21.806804449367302 +89.55627152530104 +0 +120 +absolute + + + +0.01 +smooth + +8.53640818467875 +47.349713443827866 +427.10588598920026 +21.816671772727048 +89.5567331472615 +0 +120 +absolute + + + +0.01 +smooth + +8.53640863415794 +47.3497136097291 +427.1260148727937 +21.82624725055519 +89.55711954175786 +0 +120 +absolute + + + +0.01 +smooth + +8.536409084932258 +47.34971377629274 +427.14603226464715 +21.835523856562936 +89.55742864415828 +0 +120 +absolute + + + +0.01 +smooth + +8.53640953697833 +47.34971394350928 +427.1659368882777 +21.84449456446146 +89.55765838983088 +0 +120 +absolute + + + +0.01 +smooth + +8.536409990272796 +47.3497141113692 +427.1857274672021 +21.853152347961956 +89.55780671414375 +0 +120 +absolute + + + +0.01 +smooth + +8.536410445370997 +47.349714280150934 +427.20543298106696 +21.861679980091218 +89.55791272017568 +0 +120 +absolute + + + +0.01 +smooth + +8.536410902828221 +47.34971445013294 +427.22508245462427 +21.870258985552017 +89.55801688059759 +0 +120 +absolute + + + +0.01 +smooth + +8.536411362621026 +47.34971462130575 +427.24467467904907 +21.878880465569566 +89.55811918516605 +0 +120 +absolute + + + +0.01 +smooth + +8.536411824725954 +47.349714793659864 +427.2642084455161 +21.887535521369053 +89.55821962363737 +0 +120 +absolute + + + +0.01 +smooth + +8.536412289119564 +47.34971496718584 +427.28368254520063 +21.896215254175686 +89.55831818576807 +0 +120 +absolute + + + +0.01 +smooth + +8.536412755778398 +47.34971514187417 +427.30309576927755 +21.904910765214655 +89.55841486131456 +0 +120 +absolute + + + +0.01 +smooth + +8.536413224679015 +47.34971531771541 +427.3224469089216 +21.913613155711165 +89.55850964003338 +0 +120 +absolute + + + +0.01 +smooth + +8.536413695797961 +47.349715494700064 +427.3417347553082 +21.922313526890406 +89.55860251168089 +0 +120 +absolute + + + +0.01 +smooth + +8.536414169111795 +47.34971567281868 +427.3609580996121 +21.93100297997759 +89.55869346601358 +0 +120 +absolute + + + +0.01 +smooth + +8.536414644597059 +47.34971585206177 +427.3801157330082 +21.939672616197914 +89.55878249278793 +0 +120 +absolute + + + +0.01 +smooth + +8.536415122230313 +47.34971603241986 +427.3992064466717 +21.948313536776567 +89.55886958176036 +0 +120 +absolute + + + +0.01 +smooth + +8.536415601988102 +47.34971621388348 +427.4182290317775 +21.956916842938757 +89.5589547226873 +0 +120 +absolute + + + +0.01 +smooth + +8.536416083846976 +47.34971639644314 +427.4371822795005 +21.965473635909674 +89.55903790532523 +0 +120 +absolute + + + +0.01 +smooth + +8.53641656778349 +47.3497165800894 +427.45606498101574 +21.973975016914522 +89.55911911943065 +0 +120 +absolute + + + +0.01 +smooth + +8.536417053774194 +47.34971676481276 +427.47487592749826 +21.982412087178506 +89.5591983547599 +0 +120 +absolute + + + +0.01 +smooth + +8.536417541795641 +47.34971695060373 +427.49361391012286 +21.99077594792681 +89.5592756010695 +0 +120 +absolute + + + +0.01 +smooth + +8.536418031824383 +47.34971713745289 +427.5122777200649 +21.999057700384657 +89.55935084811594 +0 +120 +absolute + + + +0.01 +smooth + +8.536418523836963 +47.349717325350696 +427.5308661484987 +22.007248445777215 +89.55942408565559 +0 +120 +absolute + + + +0.01 +smooth + +8.536419017809942 +47.34971751428775 +427.5493779866001 +22.01533928532971 +89.55949530344495 +0 +120 +absolute + + + +0.01 +smooth + +8.536419513719867 +47.34971770425451 +427.56781202554345 +22.023321320267325 +89.55956449124047 +0 +120 +absolute + + + +0.01 +smooth + +8.536420011543287 +47.34971789524153 +427.58616705650394 +22.031185651815264 +89.55963163879859 +0 +120 +absolute + + + +0.01 +smooth + +8.536420511256756 +47.34971808723935 +427.60444187065656 +22.038923381198725 +89.55969673587575 +0 +120 +absolute + + + +0.01 +smooth + +8.536421012836826 +47.34971828023847 +427.62263525917615 +22.0465256096429 +89.5597597722284 +0 +120 +absolute + + + +0.01 +smooth + +8.53642151626005 +47.34971847422945 +427.6407460132381 +22.05398343837301 +89.55982073761308 +0 +120 +absolute + + + +0.01 +smooth + +8.53642202150297 +47.34971866920276 +427.6587729240168 +22.061287968614224 +89.5598796217861 +0 +120 +absolute + + + +0.01 +smooth + +8.536422528542147 +47.34971886514898 +427.67671478268767 +22.068430301591768 +89.55993641450404 +0 +120 +absolute + + + +0.01 +smooth + +8.536423037354128 +47.34971906205861 +427.69457038042566 +22.07540153853082 +89.55999110552327 +0 +120 +absolute + + + +0.01 +smooth + +8.536423547915467 +47.349719259922175 +427.7123385084056 +22.08219278065659 +89.56004368460027 +0 +120 +absolute + + + +0.01 +smooth + +8.53642406020271 +47.34971945873022 +427.7300179578026 +22.088795129194274 +89.5600941414915 +0 +120 +absolute + + + +0.01 +smooth + +8.536424574192411 +47.34971965847324 +427.7476075197915 +22.095199685369074 +89.56014246595339 +0 +120 +absolute + + + +0.01 +smooth + +8.536425089861126 +47.3497198591418 +427.7651059855474 +22.101397550406183 +89.56018864774241 +0 +120 +absolute + + + +0.01 +smooth + +8.536425607185397 +47.34972006072638 +427.7825121462452 +22.10737982553081 +89.56023267661499 +0 +120 +absolute + + + +0.01 +smooth + +8.53642612614178 +47.34972026321755 +427.79982479306 +22.11313761196814 +89.56027454232763 +0 +120 +absolute + + + +0.01 +smooth + +8.536426646706829 +47.3497204666058 +427.8170427171667 +22.118662010943382 +89.56031423463673 +0 +120 +absolute + + + +0.01 +smooth + +8.536427168857092 +47.34972067088168 +427.8341647097403 +22.12394412368173 +89.56035174329878 +0 +120 +absolute + + + +0.01 +smooth + +8.536427692569118 +47.349720876035704 +427.85118956195583 +22.128975051408386 +89.56038705807019 +0 +120 +absolute + + + +0.01 +smooth + +8.536428217819461 +47.34972108205841 +427.86811606498816 +22.133745895348547 +89.56042016870744 +0 +120 +absolute + + + +0.01 +smooth + +8.536428744584674 +47.3497212889403 +427.8849430100124 +22.13824775672741 +89.560451064967 +0 +120 +absolute + + + +0.01 +smooth + +8.536429272841303 +47.349721496671926 +427.9016691882035 +22.14247173677018 +89.56047973660526 +0 +120 +absolute + + + +0.01 +smooth + +8.536429802565905 +47.349721705243795 +427.9182933907364 +22.146408936702052 +89.56050617337874 +0 +120 +absolute + + + +0.01 +smooth + +8.536430333735028 +47.349721914646445 +427.93481440878605 +22.150050457748222 +89.56053036504387 +0 +120 +absolute + + + +0.01 +smooth + +8.536430866325222 +47.3497221248704 +427.95123103352756 +22.153387401133894 +89.56055230135709 +0 +120 +absolute + + + +0.01 +smooth + +8.536431400313042 +47.34972233590618 +427.9675420561358 +22.156410868084265 +89.56057197207485 +0 +120 +absolute + + + +0.01 +smooth + +8.536431935675036 +47.34972254774431 +427.9837462677859 +22.159111959824536 +89.56058936695365 +0 +120 +absolute + + + +0.01 +smooth + +8.536432472387755 +47.349722760375315 +427.9998424596526 +22.161481777579905 +89.56060447574986 +0 +120 +absolute + + + +0.01 +smooth + +8.536433010427753 +47.34972297378974 +428.0158294229111 +22.16351142257556 +89.56061728821999 +0 +120 +absolute + + + +0.01 +smooth + +8.53643354977158 +47.349723187978086 +428.0317059487363 +22.165191996036718 +89.56062779412045 +0 +120 +absolute + + + +0.01 +smooth + +8.536434090395787 +47.3497234029309 +428.04747082830323 +22.166514599188567 +89.56063598320776 +0 +120 +absolute + + + +0.01 +smooth + +8.536434632276924 +47.34972361863869 +428.06312285278676 +22.167470333256308 +89.56064184523831 +0 +120 +absolute + + + +0.01 +smooth + +8.536435175391542 +47.349723835091986 +428.0786608133621 +22.16805029946514 +89.56064536996858 +0 +120 +absolute + + + +0.01 +smooth + +8.536435719716197 +47.34972405228132 +428.09408350120395 +22.16824559904026 +89.56064654715502 +0 +120 +absolute + + + +0.01 +smooth + +8.536436265761635 +47.34972427047426 +428.1094216079053 +22.16813880346224 +89.56059592124312 +0 +120 +absolute + + + +0.01 +smooth + +8.536436814038801 +47.349724489938396 +428.1247058438027 +22.167820739683144 +89.56044556369174 +0 +120 +absolute + + + +0.01 +smooth + +8.536437364524556 +47.34972471066436 +428.13993502818704 +22.167294892135455 +89.56019775477755 +0 +120 +absolute + + + +0.01 +smooth + +8.53643791719575 +47.349724932642765 +428.15510798034927 +22.166564745251634 +89.55985477477711 +0 +120 +absolute + + + +0.01 +smooth + +8.536438472029232 +47.34972515586417 +428.1702235195799 +22.165633783464138 +89.55941890396699 +0 +120 +absolute + + + +0.01 +smooth + +8.53643902900186 +47.34972538031921 +428.18528046517014 +22.16450549120545 +89.55889242262377 +0 +120 +absolute + + + +0.01 +smooth + +8.536439588090479 +47.34972560599848 +428.2002776364106 +22.163183352908028 +89.55827761102404 +0 +120 +absolute + + + +0.01 +smooth + +8.53644014927195 +47.349725832892574 +428.2152138525921 +22.161670853004345 +89.55757674944442 +0 +120 +absolute + + + +0.01 +smooth + +8.536440712523117 +47.34972606099208 +428.23008793300545 +22.159971475926866 +89.55679211816145 +0 +120 +absolute + + + +0.01 +smooth + +8.53644127782084 +47.34972629028765 +428.2448986969415 +22.15808870610806 +89.5559259974518 +0 +120 +absolute + + + +0.01 +smooth + +8.536441845141965 +47.349726520769835 +428.2596449636912 +22.15602602798039 +89.55498066759195 +0 +120 +absolute + + + +0.01 +smooth + +8.53644241446335 +47.34972675242926 +428.27432555254535 +22.15378692597633 +89.55395840885853 +0 +120 +absolute + + + +0.01 +smooth + +8.536442985761843 +47.349726985256524 +428.2889392827945 +22.15137488452834 +89.55286150152816 +0 +120 +absolute + + + +0.01 +smooth + +8.536443559014296 +47.34972721924222 +428.30348497372967 +22.14879338806889 +89.55169222587736 +0 +120 +absolute + + + +0.01 +smooth + +8.53644413419757 +47.34972745437697 +428.3179614446419 +22.146045921030453 +89.5504528621828 +0 +120 +absolute + + + +0.01 +smooth + +8.536444711288505 +47.34972769065136 +428.3323675148217 +22.143135967845488 +89.549145690721 +0 +120 +absolute + + + +0.01 +smooth + +8.536445290263964 +47.34972792805598 +428.34670200356004 +22.140067012946474 +89.54777299176858 +0 +120 +absolute + + + +0.01 +smooth + +8.53644587110079 +47.34972816658146 +428.3609637301477 +22.136842540765862 +89.54633704560212 +0 +120 +absolute + + + +0.01 +smooth + +8.536446453775849 +47.34972840621841 +428.3751515138757 +22.13346603573614 +89.54484013249825 +0 +120 +absolute + + + +0.01 +smooth + +8.536447038265976 +47.34972864695739 +428.38926417403457 +22.129940982289753 +89.54328453273345 +0 +120 +absolute + + + +0.01 +smooth + +8.536447624548034 +47.34972888878901 +428.40330052991504 +22.126270864859187 +89.54167252658438 +0 +120 +absolute + + + +0.01 +smooth + +8.536448212598875 +47.34972913170391 +428.41725940080846 +22.1224591678769 +89.54000639432766 +0 +120 +absolute + + + +0.01 +smooth + +8.536448802395352 +47.34972937569266 +428.43113960600533 +22.11850937577537 +89.5382884162398 +0 +120 +absolute + + + +0.01 +smooth + +8.536449393914312 +47.34972962074586 +428.4449399647963 +22.11442497298704 +89.53652087259742 +0 +120 +absolute + + + +0.01 +smooth + +8.536449987132613 +47.34972986685413 +428.45865929647255 +22.110209443944406 +89.53470604367712 +0 +120 +absolute + + + +0.01 +smooth + +8.536450582027102 +47.34973011400806 +428.4722964203247 +22.10586627307992 +89.53284620975545 +0 +120 +absolute + + + +0.01 +smooth + +8.536451178574639 +47.34973036219826 +428.4858501556437 +22.101398944826048 +89.53094365110906 +0 +120 +absolute + + + +0.01 +smooth + +8.53645177675207 +47.34973061141532 +428.49931932172024 +22.096810943615267 +89.52900064801447 +0 +120 +absolute + + + +0.01 +smooth + +8.53645237653625 +47.349730861649846 +428.5127027378452 +22.092105753880038 +89.52701948074832 +0 +120 +absolute + + + +0.01 +smooth + +8.53645297790403 +47.349731112892435 +428.52599922330944 +22.08728686005283 +89.52500242958716 +0 +120 +absolute + + + +0.01 +smooth + +8.536453580832266 +47.349731365133714 +428.5392075974038 +22.08235774656611 +89.52295177480761 +0 +120 +absolute + + + +0.01 +smooth + +8.536454185297805 +47.34973161836426 +428.55232667941897 +22.077321897852347 +89.52086979668621 +0 +120 +absolute + + + +0.01 +smooth + +8.536454791277503 +47.34973187257468 +428.56535528864595 +22.072182798344006 +89.5187587754996 +0 +120 +absolute + + + +0.01 +smooth + +8.536455398748213 +47.34973212775558 +428.5782922443756 +22.066943932473556 +89.51662099152433 +0 +120 +absolute + + + +0.01 +smooth + +8.536456007686784 +47.34973238389756 +428.5911363658985 +22.061608784673467 +89.51445872503702 +0 +120 +absolute + + + +0.01 +smooth + +8.536456618070073 +47.34973264099122 +428.6038864725057 +22.056180839376204 +89.51227425631421 +0 +120 +absolute + + + +0.01 +smooth + +8.536457229874928 +47.34973289902717 +428.61654138348786 +22.050663581014234 +89.51006986563252 +0 +120 +absolute + + + +0.01 +smooth + +8.536457843078203 +47.349733157996 +428.629099918136 +22.04506049402002 +89.50784783326854 +0 +120 +absolute + + + +0.01 +smooth + +8.536458457656753 +47.34973341788832 +428.6415608957407 +22.039375062826036 +89.50561043949884 +0 +120 +absolute + + + +0.01 +smooth + +8.536459073587427 +47.34973367869472 +428.65392313559306 +22.033610771864744 +89.50335996460004 +0 +120 +absolute + + + +0.01 +smooth + +8.536459690847078 +47.34973394040583 +428.6661854569837 +22.027771105568625 +89.50109868884866 +0 +120 +absolute + + + +0.01 +smooth + +8.536460309412561 +47.34973420301222 +428.6783466792035 +22.021859548370127 +89.49882889252137 +0 +120 +absolute + + + +0.01 +smooth + +8.536460929260725 +47.34973446650449 +428.69040562154345 +22.015879584701732 +89.49655285589469 +0 +120 +absolute + + + +0.01 +smooth + +8.536461550368426 +47.34973473087328 +428.70236110329415 +22.009834698995903 +89.49427285924526 +0 +120 +absolute + + + +0.01 +smooth + +8.536462172712511 +47.34973499610916 +428.7142119437465 +22.003728375685107 +89.49199118284962 +0 +120 +absolute + + + +0.01 +smooth + +8.536462796269838 +47.34973526220274 +428.7259569621913 +21.99756409920181 +89.48971010698438 +0 +120 +absolute + + + +0.01 +smooth + +8.536463421017258 +47.34973552914463 +428.73759497791946 +21.99134535397848 +89.48743191192614 +0 +120 +absolute + + + +0.01 +smooth + +8.536464046931622 +47.34973579692542 +428.74912481022176 +21.985075624447585 +89.48515887795146 +0 +120 +absolute + + + +0.01 +smooth + +8.53646467398978 +47.34973606553572 +428.76054527838903 +21.978758395041595 +89.48289328533694 +0 +120 +absolute + + + +0.01 +smooth + +8.53646530216859 +47.349736334966124 +428.77185520171207 +21.972397150192975 +89.4806374143592 +0 +120 +absolute + + + +0.01 +smooth + +8.536465931444903 +47.34973660520724 +428.78305339948173 +21.96599537433419 +89.47839354529474 +0 +120 +absolute + + + +0.01 +smooth + +8.536466562283511 +47.34973687651521 +428.7941729559125 +21.95927148910117 +89.47611876491119 +0 +120 +absolute + + + +0.01 +smooth + +8.536467195149573 +47.34973714914622 +428.80524692715704 +21.951949462490973 +89.47376943729273 +0 +120 +absolute + + + +0.01 +smooth + +8.536467830020495 +47.34973742309096 +428.81627409041363 +21.944041098477815 +89.47134675869071 +0 +120 +absolute + + + +0.01 +smooth + +8.53646846687367 +47.34973769834006 +428.82725322288036 +21.935558201035857 +89.46885192535652 +0 +120 +absolute + + + +0.01 +smooth + +8.536469105686509 +47.34973797488419 +428.8381831017559 +21.926512574139316 +89.46628613354166 +0 +120 +absolute + + + +0.01 +smooth + +8.536469746436405 +47.349738252714005 +428.84906250423785 +21.916916021762383 +89.46365057949743 +0 +120 +absolute + + + +0.01 +smooth + +8.536470389100758 +47.34973853182018 +428.85989020752487 +21.906780347879234 +89.46094645947528 +0 +120 +absolute + + + +0.01 +smooth + +8.536471033656975 +47.34973881219336 +428.87066498881495 +21.896117356464085 +89.45817496972663 +0 +120 +absolute + + + +0.01 +smooth + +8.536471680082453 +47.349739093824205 +428.8813856253064 +21.88493885149111 +89.45533730650288 +0 +120 +absolute + + + +0.01 +smooth + +8.536472328354597 +47.349739376703404 +428.8920508941975 +21.873256636934514 +89.45243466605544 +0 +120 +absolute + + + +0.01 +smooth + +8.536472978450805 +47.34973966082161 +428.9026595726864 +21.861082516768484 +89.4494682446357 +0 +120 +absolute + + + +0.01 +smooth + +8.536473630348478 +47.34973994616948 +428.9132104379715 +21.848428294967224 +89.44643923849513 +0 +120 +absolute + + + +0.01 +smooth + +8.536474284025015 +47.34974023273766 +428.9237022672507 +21.835305775504906 +89.44334884388508 +0 +120 +absolute + + + +0.01 +smooth + +8.536474939457822 +47.34974052051683 +428.93413383772247 +21.82172676235574 +89.44019825705693 +0 +120 +absolute + + + +0.01 +smooth + +8.536475596624292 +47.349740809497646 +428.94450392658496 +21.807703059493917 +89.43698867426217 +0 +120 +absolute + + + +0.01 +smooth + +8.536476255501839 +47.34974109967077 +428.95481131103634 +21.793246470893628 +89.43372129175215 +0 +120 +absolute + + + +0.01 +smooth + +8.536476916067853 +47.349741391026875 +428.9650547682751 +21.77836880052906 +89.4303973057783 +0 +120 +absolute + + + +0.01 +smooth + +8.536477578299733 +47.34974168355658 +428.975233075499 +21.763081852374405 +89.427017912592 +0 +120 +absolute + + + +0.01 +smooth + +8.536478242174892 +47.3497419772506 +428.98534500990667 +21.74739743040388 +89.42358430844475 +0 +120 +absolute + + + +0.01 +smooth + +8.536478907670718 +47.34974227209956 +428.9953893486961 +21.731327338591647 +89.42009768958783 +0 +120 +absolute + + + +0.01 +smooth + +8.536479574764622 +47.349742568094165 +429.0053648690657 +21.714883380911914 +89.41655925227273 +0 +120 +absolute + + + +0.01 +smooth + +8.536480243433997 +47.34974286522503 +429.01527034821356 +21.698077361338875 +89.41297019275083 +0 +120 +absolute + + + +0.01 +smooth + +8.536480913656252 +47.349743163482835 +429.02510456333795 +21.68092108384672 +89.40933170727357 +0 +120 +absolute + + + +0.01 +smooth + +8.536481585408783 +47.34974346285824 +429.0348662916371 +21.66342635240964 +89.40564499209229 +0 +120 +absolute + + + +0.01 +smooth + +8.536482258668988 +47.349743763341905 +429.0445543103092 +21.64560497100183 +89.40191124345846 +0 +120 +absolute + + + +0.01 +smooth + +8.536482933414277 +47.3497440649245 +429.05416739655254 +21.62746874359749 +89.39813165762348 +0 +120 +absolute + + + +0.01 +smooth + +8.536483609622042 +47.34974436759668 +429.0637043275653 +21.609029474170804 +89.39430743083875 +0 +120 +absolute + + + +0.01 +smooth + +8.536484287269689 +47.3497446713491 +429.07316388054574 +21.59029896669596 +89.39043975935567 +0 +120 +absolute + + + +0.01 +smooth + +8.53648496633462 +47.349744976172445 +429.082544832692 +21.571289025147163 +89.38652983942566 +0 +120 +absolute + + + +0.01 +smooth + +8.53648564679423 +47.34974528205734 +429.09184596120235 +21.5520114534986 +89.38257886730011 +0 +120 +absolute + + + +0.01 +smooth + +8.536486328625925 +47.34974558899448 +429.10106604327507 +21.532478055724468 +89.37858803923045 +0 +120 +absolute + + + +0.01 +smooth + +8.536487011807104 +47.34974589697452 +429.1102038561082 +21.512700635798957 +89.37455855146807 +0 +120 +absolute + + + +0.01 +smooth + +8.53648769631517 +47.3497462059881 +429.1192581769003 +21.492690997696258 +89.3704916002644 +0 +120 +absolute + + + +0.01 +smooth + +8.53648838212752 +47.34974651602591 +429.1282277828492 +21.47246094539057 +89.36638838187082 +0 +120 +absolute + + + +0.01 +smooth + +8.53648906922156 +47.34974682707858 +429.1371114511535 +21.452022282856078 +89.36225009253879 +0 +120 +absolute + + + +0.01 +smooth + +8.536489757574685 +47.34974713913681 +429.1459079590111 +21.431386814066983 +89.35807792851965 +0 +120 +absolute + + + +0.01 +smooth + +8.536490447164303 +47.34974745219124 +429.15461608362045 +21.410566342997477 +89.35387308606485 +0 +120 +absolute + + + +0.01 +smooth + +8.53649113796781 +47.349747766232525 +429.1632346021796 +21.389572673621743 +89.34963676142578 +0 +120 +absolute + + + +0.01 +smooth + +8.536491829962607 +47.349748081251334 +429.171762291887 +21.368417609913983 +89.34537015085385 +0 +120 +absolute + + + +0.01 +smooth + +8.536492523126096 +47.34974839723834 +429.1801979299406 +21.34711295584839 +89.3410744506005 +0 +120 +absolute + + + +0.01 +smooth + +8.53649321743568 +47.34974871418419 +429.18854029353884 +21.325670515399157 +89.33675085691709 +0 +120 +absolute + + + +0.01 +smooth + +8.536493912868758 +47.34974903207955 +429.19678815987993 +21.304102092540475 +89.33240056605507 +0 +120 +absolute + + + +0.01 +smooth + +8.53649460940273 +47.34974935091507 +429.20494030616203 +21.282419491246536 +89.32802477426581 +0 +120 +absolute + + + +0.01 +smooth + +8.536495307014999 +47.34974967068143 +429.21299550958327 +21.260634515491535 +89.32362467780075 +0 +120 +absolute + + + +0.01 +smooth + +8.536496005682967 +47.3497499913693 +429.2209525473421 +21.238758969249666 +89.31920147291129 +0 +120 +absolute + + + +0.01 +smooth + +8.53649670538403 +47.349750312969306 +429.22881019663646 +21.216804656495118 +89.31475635584883 +0 +120 +absolute + + + +0.01 +smooth + +8.536497406095593 +47.34975063547214 +429.2365672346649 +21.194783381202086 +89.31029052286479 +0 +120 +absolute + + + +0.01 +smooth + +8.536498107795056 +47.349750958868455 +429.2442224386254 +21.17270694734477 +89.30580517021056 +0 +120 +absolute + + + +0.01 +smooth + +8.53649881045982 +47.349751283148905 +429.25177458571625 +21.150587158897345 +89.30130149413756 +0 +120 +absolute + + + +0.01 +smooth + +8.536499514067287 +47.34975160830417 +429.25922245313575 +21.128435819834028 +89.2967806908972 +0 +120 +absolute + + + +0.01 +smooth + +8.536500218594854 +47.349751934324885 +429.26656481808203 +21.10626473412899 +89.29224395674088 +0 +120 +absolute + + + +0.01 +smooth + +8.536500924464193 +47.349752261456246 +429.2738389757219 +21.083825802967933 +89.28766320352896 +0 +120 +absolute + + + +0.01 +smooth + +8.536501632097396 +47.34975258994343 +429.28108209357094 +21.060867971959425 +89.28301014843821 +0 +120 +absolute + + + +0.01 +smooth + +8.536502341472518 +47.34975291977703 +429.2882927573505 +21.037398611711986 +89.27828569569459 +0 +120 +absolute + + + +0.01 +smooth + +8.53650305256761 +47.34975325094777 +429.2954695527819 +21.013425092834133 +89.27349074952411 +0 +120 +absolute + + + +0.01 +smooth + +8.53650376536072 +47.34975358344622 +429.3026110655864 +20.98895478593439 +89.2686262141527 +0 +120 +absolute + + + +0.01 +smooth + +8.5365044798299 +47.349753917263065 +429.3097158814853 +20.96399506162127 +89.26369299380637 +0 +120 +absolute + + + +0.01 +smooth + +8.536505195953195 +47.34975425238894 +429.31678258619996 +20.9385532905033 +89.25869199271105 +0 +120 +absolute + + + +0.01 +smooth + +8.536505913708657 +47.34975458881447 +429.3238097654518 +20.91263684318899 +89.25362411509275 +0 +120 +absolute + + + +0.01 +smooth + +8.53650663307434 +47.34975492653033 +429.330796004962 +20.886253090286882 +89.24849026517744 +0 +120 +absolute + + + +0.01 +smooth + +8.536507354028293 +47.349755265527136 +429.33773989045187 +20.859409402405475 +89.2432913471911 +0 +120 +absolute + + + +0.01 +smooth + +8.536508076548566 +47.34975560579554 +429.34464000764285 +20.832113150153305 +89.2380282653597 +0 +120 +absolute + + + +0.01 +smooth + +8.53650880061321 +47.349755947326216 +429.35149494225635 +20.804371704138877 +89.23270192390923 +0 +120 +absolute + + + +0.01 +smooth + +8.536509526200273 +47.34975629010977 +429.35830328001344 +20.776192434970714 +89.22731322706564 +0 +120 +absolute + + + +0.01 +smooth + +8.536510253287805 +47.34975663413684 +429.36506360663554 +20.747582713257337 +89.22186307905491 +0 +120 +absolute + + + +0.01 +smooth + +8.536510981853857 +47.34975697939811 +429.371774507844 +20.71854990960728 +89.21635238410302 +0 +120 +absolute + + + +0.01 +smooth + +8.536511711876479 +47.34975732588418 +429.3784345693601 +20.689101394629034 +89.21078204643597 +0 +120 +absolute + + + +0.01 +smooth + +8.536512443333724 +47.34975767358572 +429.3850423769054 +20.65924453893116 +89.20515297027973 +0 +120 +absolute + + + +0.01 +smooth + +8.536513176203636 +47.34975802249336 +429.39159651620065 +20.628986713122128 +89.19946605986021 +0 +120 +absolute + + + +0.01 +smooth + +8.536513910464274 +47.349758372597776 +429.39809557296786 +20.598335287810503 +89.19372221940347 +0 +120 +absolute + + + +0.01 +smooth + +8.536514646093678 +47.34975872388956 +429.4045381329278 +20.567297633604774 +89.18792235313543 +0 +120 +absolute + + + +0.01 +smooth + +8.536515383069908 +47.3497590763594 +429.4109227818021 +20.535881121113476 +89.18206736528211 +0 +120 +absolute + + + +0.01 +smooth + +8.536516121371008 +47.3497594299979 +429.41724810531207 +20.50409312094513 +89.17615816006945 +0 +120 +absolute + + + +0.01 +smooth + +8.53651686097503 +47.34975978479575 +429.42351268917884 +20.47194100370825 +89.17019564172345 +0 +120 +absolute + + + +0.01 +smooth + +8.536517601860025 +47.34976014074357 +429.429715119124 +20.439432140011355 +89.16418071447009 +0 +120 +absolute + + + +0.01 +smooth + +8.53651834400404 +47.349760497831966 +429.4358539808685 +20.406573900462966 +89.15811428253528 +0 +120 +absolute + + + +0.01 +smooth + +8.53651908738513 +47.34976085605166 +429.4419278601342 +20.373373655671614 +89.15199725014509 +0 +120 +absolute + + + +0.01 +smooth + +8.536519831981341 +47.349761215393244 +429.44793534264187 +20.339838776245802 +89.14583052152545 +0 +120 +absolute + + + +0.01 +smooth + +8.536520577770725 +47.34976157584737 +429.45387501411324 +20.30597663279406 +89.13961500090232 +0 +120 +absolute + + + +0.01 +smooth + +8.536521324731334 +47.34976193740468 +429.45974546026923 +20.271794595924906 +89.13335159250173 +0 +120 +absolute + + + +0.01 +smooth + +8.536522072841214 +47.34976230005582 +429.4655452668316 +20.237300036246864 +89.12704120054957 +0 +120 +absolute + + + +0.01 +smooth + +8.53652282207842 +47.349762663791445 +429.47127301952145 +20.202500324368444 +89.12068472927189 +0 +120 +absolute + + + +0.01 +smooth + +8.536523572420997 +47.34976302860218 +429.4769273040601 +20.167402830898176 +89.11428308289463 +0 +120 +absolute + + + +0.01 +smooth + +8.536524323846999 +47.34976339447869 +429.4825067061689 +20.132014926444572 +89.10783716564379 +0 +120 +absolute + + + +0.01 +smooth + +8.536525076334474 +47.3497637614116 +429.48800981156916 +20.096343981616158 +89.10134788174533 +0 +120 +absolute + + + +0.01 +smooth + +8.536525829861477 +47.34976412939156 +429.4934352059822 +20.06039736702145 +89.0948161354252 +0 +120 +absolute + + + +0.01 +smooth + +8.536526584406051 +47.349764498409215 +429.49878147512936 +20.024182453268978 +89.08824283090944 +0 +120 +absolute + + + +0.01 +smooth + +8.53652733994625 +47.349764868455196 +429.50404720473193 +19.987706610967244 +89.08162887242398 +0 +120 +absolute + + + +0.01 +smooth + +8.536528096460126 +47.34976523952017 +429.50923098051123 +19.95097721072478 +89.0749751641948 +0 +120 +absolute + + + +0.01 +smooth + +8.536528853925727 +47.34976561159476 +429.5143313881887 +19.9140016231501 +89.06828261044787 +0 +120 +absolute + + + +0.01 +smooth + +8.536529612321102 +47.34976598466963 +429.51934701348557 +19.87678721885173 +89.06155211540917 +0 +120 +absolute + + + +0.01 +smooth + +8.536530371624302 +47.3497663587354 +429.5242764421231 +19.839341368438195 +89.05478458330472 +0 +120 +absolute + + + +0.01 +smooth + +8.53653113181338 +47.349766733782744 +429.52911825982267 +19.801671442518003 +89.04798091836042 +0 +120 +absolute + + + +0.01 +smooth + +8.536531892866384 +47.349767109802265 +429.5338710523055 +19.76378481169968 +89.0411420248023 +0 +120 +absolute + + + +0.01 +smooth + +8.536532654761363 +47.34976748678464 +429.53853340529326 +19.72568884659174 +89.03426880685633 +0 +120 +absolute + + + +0.01 +smooth + +8.536533417476367 +47.349767864720505 +429.5431039045069 +19.687390917802713 +89.02736216874847 +0 +120 +absolute + + + +0.01 +smooth + +8.536534180989449 +47.34976824360051 +429.5475811356679 +19.64889839594111 +89.02042301470468 +0 +120 +absolute + + + +0.01 +smooth + +8.536534945278659 +47.34976862341527 +429.5519636844974 +19.61021865161545 +89.01345224895095 +0 +120 +absolute + + + +0.01 +smooth + +8.536535710322044 +47.349769004155455 +429.556250136717 +19.571359055434264 +89.0064507757133 +0 +120 +absolute + + + +0.01 +smooth + +8.536536476097657 +47.3497693858117 +429.5604390780479 +19.532326978006065 +88.99941949921764 +0 +120 +absolute + + + +0.01 +smooth + +8.536537242583547 +47.34976976837465 +429.5645290942114 +19.493129789939378 +88.99235932369 +0 +120 +absolute + + + +0.01 +smooth + +8.536538009757766 +47.34977015183495 +429.5685187709289 +19.453774861842714 +88.9852711533563 +0 +120 +absolute + + + +0.01 +smooth + +8.536538778004642 +47.34977053642794 +429.572456338332 +19.414079458412026 +88.97813216153834 +0 +120 +absolute + + + +0.01 +smooth + +8.53653954770894 +47.349770922388906 +429.57638953740286 +19.373859918656485 +88.97091944513983 +0 +120 +absolute + + + +0.01 +smooth + +8.536540318849363 +47.34977130970832 +429.58031622013857 +19.33312222465448 +88.9636337937597 +0 +120 +absolute + + + +0.01 +smooth + +8.536541091404613 +47.34977169837674 +429.5842342385361 +19.29187235848438 +88.95627599699687 +0 +120 +absolute + + + +0.01 +smooth + +8.536541865353394 +47.34977208838466 +429.5881414445924 +19.250116302224537 +88.94884684445033 +0 +120 +absolute + + + +0.01 +smooth + +8.536542640674407 +47.34977247972259 +429.59203569030433 +19.207860037953353 +88.94134712571895 +0 +120 +absolute + + + +0.01 +smooth + +8.53654341734635 +47.34977287238108 +429.59591482766893 +19.16510954774919 +88.93377763040166 +0 +120 +absolute + + + +0.01 +smooth + +8.53654419534793 +47.34977326635061 +429.59977670868307 +19.121870813690414 +88.92613914809742 +0 +120 +absolute + + + +0.01 +smooth + +8.536544974657847 +47.349773661621725 +429.6036191853439 +19.078149817855405 +88.91843246840516 +0 +120 +absolute + + + +0.01 +smooth + +8.536545755254805 +47.34977405818491 +429.60744010964834 +19.033952542322538 +88.91065838092378 +0 +120 +absolute + + + +0.01 +smooth + +8.536546537117506 +47.34977445603071 +429.61123733359335 +18.989284969170182 +88.90281767525222 +0 +120 +absolute + + + +0.01 +smooth + +8.536547320224653 +47.349774855149654 +429.6150087091759 +18.94415308047671 +88.89491114098946 +0 +120 +absolute + + + +0.01 +smooth + +8.53654810455494 +47.3497752555322 +429.6187520883928 +18.898562858320492 +88.88693956773434 +0 +120 +absolute + + + +0.01 +smooth + +8.536548890087081 +47.34977565716891 +429.6224653232413 +18.852520284779903 +88.87890374508586 +0 +120 +absolute + + + +0.01 +smooth + +8.536549676799769 +47.34977606005031 +429.62614626571815 +18.806031341933323 +88.87080446264292 +0 +120 +absolute + + + +0.01 +smooth + +8.536550464671715 +47.34977646416687 +429.6297927678203 +18.759102011859113 +88.86264251000445 +0 +120 +absolute + + + +0.01 +smooth + +8.536551253681615 +47.349776869509164 +429.63340268154514 +18.711738276635668 +88.85441867676944 +0 +120 +absolute + + + +0.01 +smooth + +8.536552043808166 +47.34977727606765 +429.63697385888895 +18.663946118341325 +88.84613375253672 +0 +120 +absolute + + + +0.01 +smooth + +8.536552835030085 +47.349777683832905 +429.6405041518494 +18.6157315190545 +88.8377885269053 +0 +120 +absolute + + + +0.01 +smooth + +8.53655362732606 +47.349778092795376 +429.64399141242285 +18.567100460853524 +88.82938378947404 +0 +120 +absolute + + + +0.01 +smooth + +8.536554420674802 +47.34977850294565 +429.64743349260675 +18.51805892581679 +88.82092032984194 +0 +120 +absolute + + + +0.01 +smooth + +8.53655521505501 +47.3497789142742 +429.65082824439787 +18.468612896022677 +88.81239893760791 +0 +120 +absolute + + + +0.01 +smooth + +8.536556010445382 +47.34977932677153 +429.6541735197931 +18.418768353549545 +88.80382040237083 +0 +120 +absolute + + + +0.01 +smooth + +8.536556806824631 +47.349779740428225 +429.6574671707896 +18.36853128047578 +88.79518551372973 +0 +120 +absolute + + + +0.01 +smooth + +8.536557604171445 +47.34978015523472 +429.660707049384 +18.317907658879744 +88.7864950612834 +0 +120 +absolute + + + +0.01 +smooth + +8.53655840246454 +47.34978057118159 +429.66389100757374 +18.266903470839818 +88.77774983463094 +0 +120 +absolute + + + +0.01 +smooth + +8.536559201682609 +47.34978098825931 +429.6670168973555 +18.21552469843437 +88.76895062337114 +0 +120 +absolute + + + +0.01 +smooth + +8.536560001804359 +47.34978140645843 +429.6700825707263 +18.16377732374177 +88.760098217103 +0 +120 +absolute + + + +0.01 +smooth + +8.536560802808488 +47.349781825769455 +429.67308587968313 +18.1116673288404 +88.75119340542545 +0 +120 +absolute + + + +0.01 +smooth + +8.5365616046737 +47.349782246182905 +429.6760246762229 +18.059200695808617 +88.74223697793735 +0 +120 +absolute + + + +0.01 +smooth + +8.5365624073787 +47.349782667689276 +429.67889681234266 +18.00638340672481 +88.73322972423773 +0 +120 +absolute + + + +0.01 +smooth + +8.536563210902186 +47.349783090279104 +429.6817001400393 +17.953221443667353 +88.72417243392545 +0 +120 +absolute + + + +0.01 +smooth + +8.536564015222861 +47.3497835139429 +429.68443251130986 +17.89972078871461 +88.71506589659948 +0 +120 +absolute + + + +0.01 +smooth + +8.53656482031943 +47.34978393867119 +429.68709177815134 +17.845887423944955 +88.70591090185874 +0 +120 +absolute + + + +0.01 +smooth + +8.536565626170592 +47.34978436445447 +429.6896757925606 +17.791727331436768 +88.69670823930213 +0 +120 +absolute + + + +0.01 +smooth + +8.536566432755052 +47.34978479128328 +429.6921824065347 +17.737246493268408 +88.68745869852862 +0 +120 +absolute + + + +0.01 +smooth + +8.536567240051507 +47.34978521914812 +429.69460947207057 +17.682450891518265 +88.67816306913711 +0 +120 +absolute + + + +0.01 +smooth + +8.536568048038665 +47.3497856480395 +429.69695484116517 +17.627346508264687 +88.66882214072658 +0 +120 +absolute + + + +0.01 +smooth + +8.536568856695226 +47.34978607794797 +429.6992163658155 +17.57193932558608 +88.65943670289589 +0 +120 +absolute + + + +0.01 +smooth + +8.536569665999892 +47.349786508864014 +429.7013918980185 +17.516235325560793 +88.65000754524402 +0 +120 +absolute + + + +0.01 +smooth + +8.536570475931367 +47.34978694077816 +429.70347928977117 +17.46024049026721 +88.64053545736988 +0 +120 +absolute + + + +0.01 +smooth + +8.536571286468348 +47.349787373680925 +429.7054763930705 +17.403960801783704 +88.63102122887241 +0 +120 +absolute + + + +0.01 +smooth + +8.536572097589541 +47.349787807562834 +429.7073810599134 +17.347402242188636 +88.62146564935054 +0 +120 +absolute + + + +0.01 +smooth + +8.53657290927365 +47.34978824241438 +429.70919114229685 +17.29057079356039 +88.6118695084032 +0 +120 +absolute + + + +0.01 +smooth + +8.536573721499373 +47.34978867822609 +429.71090449221794 +17.23347243797734 +88.60223359562931 +0 +120 +absolute + + + +0.01 +smooth + +8.536574534245416 +47.349789114988496 +429.7125189616734 +17.176113157517847 +88.59255870062782 +0 +120 +absolute + + + +0.01 +smooth + +8.536575347490476 +47.3497895526921 +429.71403240266045 +17.118498934260295 +88.58284561299763 +0 +120 +absolute + + + +0.01 +smooth + +8.536576161213262 +47.34978999132743 +429.71544266717586 +17.060635750283055 +88.5730951223377 +0 +120 +absolute + + + +0.01 +smooth + +8.53657697539247 +47.34979043088498 +429.7167476072168 +17.002529587664505 +88.56330801824694 +0 +120 +absolute + + + +0.01 +smooth + +8.536577790006806 +47.34979087135529 +429.71794507478006 +16.944186428483007 +88.5534850903243 +0 +120 +absolute + + + +0.01 +smooth + +8.53657860503497 +47.34979131272886 +429.7190329218627 +16.88561225481694 +88.54362712816868 +0 +120 +absolute + + + +0.01 +smooth + +8.536579420831535 +47.3497917552325 +429.7200614736066 +16.826651487263952 +88.53371411562115 +0 +120 +absolute + + + +0.01 +smooth + +8.536580237751464 +47.349792199092875 +429.72108215064225 +16.76714815369599 +88.52372600444853 +0 +120 +absolute + + + +0.01 +smooth + +8.536581055774043 +47.34979264430025 +429.7220944481991 +16.707107647102916 +88.51366353613841 +0 +120 +absolute + + + +0.01 +smooth + +8.536581874878562 +47.34979309084495 +429.7230978615065 +16.646535360474584 +88.50352745217845 +0 +120 +absolute + + + +0.01 +smooth + +8.536582695044313 +47.34979353871721 +429.72409188579417 +16.585436686800843 +88.49331849405623 +0 +120 +absolute + + + +0.01 +smooth + +8.536583516250579 +47.349793987907326 +429.72507601629155 +16.523817019071537 +88.48303740325939 +0 +120 +absolute + + + +0.01 +smooth + +8.53658433847665 +47.34979443840561 +429.72604974822815 +16.46168175027653 +88.47268492127554 +0 +120 +absolute + + + +0.01 +smooth + +8.536585161701815 +47.34979489020233 +429.7270125768335 +16.399036273405656 +88.46226178959232 +0 +120 +absolute + + + +0.01 +smooth + +8.536585985905367 +47.34979534328778 +429.72796399733716 +16.33588598144878 +88.4517687496973 +0 +120 +absolute + + + +0.01 +smooth + +8.53658681106659 +47.34979579765223 +429.7289035049687 +16.272236267395748 +88.44120654307815 +0 +120 +absolute + + + +0.01 +smooth + +8.536587637164772 +47.34979625328598 +429.72983059495743 +16.208092524236406 +88.43057591122246 +0 +120 +absolute + + + +0.01 +smooth + +8.536588464179207 +47.34979671017932 +429.73074476253316 +16.1434601449606 +88.41987759561786 +0 +120 +absolute + + + +0.01 +smooth + +8.536589292089177 +47.349797168322524 +429.7316455029251 +16.0783445225582 +88.40911233775196 +0 +120 +absolute + + + +0.01 +smooth + +8.536590120873974 +47.34979762770589 +429.732532311363 +16.012751050019048 +88.39828087911238 +0 +120 +absolute + + + +0.01 +smooth + +8.536590950512887 +47.34979808831967 +429.7334046830763 +15.946685120332988 +88.38738396118676 +0 +120 +absolute + + + +0.01 +smooth + +8.536591780985201 +47.34979855015419 +429.73426211329445 +15.880152126489877 +88.37642232546267 +0 +120 +absolute + + + +0.01 +smooth + +8.536592612270214 +47.34979901319973 +429.7351040972472 +15.813157461479571 +88.36539671342778 +0 +120 +absolute + + + +0.01 +smooth + +8.536593444347199 +47.349799477446545 +429.7359301301637 +15.745706518291906 +88.35430786656966 +0 +120 +absolute + + + +0.01 +smooth + +8.536594277195462 +47.34979994288497 +429.73673970727384 +15.67780468991675 +88.34315652637596 +0 +120 +absolute + + + +0.01 +smooth + +8.536595110794279 +47.34980040950524 +429.7375323238069 +15.609457369343929 +88.33194343433429 +0 +120 +absolute + + + +0.01 +smooth + +8.536595945122942 +47.34980087729767 +429.73830747499255 +15.540669949563322 +88.32066933193227 +0 +120 +absolute + + + +0.01 +smooth + +8.536596780160744 +47.34980134625254 +429.73906465606024 +15.471447823564771 +88.30933496065752 +0 +120 +absolute + + + +0.01 +smooth + +8.536597615886965 +47.34980181636013 +429.73980336223923 +15.401796384338116 +88.29794106199763 +0 +120 +absolute + + + +0.01 +smooth + +8.536598452280906 +47.349802287610736 +429.7405230887597 +15.331721024873225 +88.28648837744029 +0 +120 +absolute + + + +0.01 +smooth + +8.536599289321844 +47.34980275999462 +429.74122333085046 +15.261227138159931 +88.27497764847301 +0 +120 +absolute + + + +0.01 +smooth + +8.536600126989072 +47.34980323350211 +429.7419035837415 +15.1903201171881 +88.26340961658353 +0 +120 +absolute + + + +0.01 +smooth + +8.536600965261881 +47.34980370812345 +429.74256334266204 +15.119005354947571 +88.25178502325936 +0 +120 +absolute + + + +0.01 +smooth + +8.536601804119556 +47.34980418384896 +429.7432021028418 +15.047288244428188 +88.2401046099882 +0 +120 +absolute + + + +0.01 +smooth + +8.536602643541386 +47.349804660668894 +429.7438193595103 +14.97517417861983 +88.2283691182576 +0 +120 +absolute + + + +0.01 +smooth + +8.536603483506664 +47.349805138573565 +429.74441460789694 +14.902668550512328 +88.21657928955524 +0 +120 +absolute + + + +0.01 +smooth + +8.536604323994672 +47.34980561755324 +429.7449873432313 +14.829776753095537 +88.2047358653687 +0 +120 +absolute + + + +0.01 +smooth + +8.536605164984703 +47.349806097598204 +429.7455370607429 +14.756504179359307 +88.19283958718562 +0 +120 +absolute + + + +0.01 +smooth + +8.536606006456045 +47.34980657869876 +429.7460632556613 +14.68285622229349 +88.18089119649359 +0 +120 +absolute + + + +0.01 +smooth + +8.536606848387986 +47.34980706084518 +429.7465654232159 +14.608838274887933 +88.16889143478025 +0 +120 +absolute + + + +0.01 +smooth + +8.536607690759816 +47.34980754402775 +429.7470430586363 +14.534455730132493 +88.1568410435332 +0 +120 +absolute + + + +0.01 +smooth + +8.53660853355082 +47.34980802823676 +429.74749565715206 +14.459713981017014 +88.14474076424008 +0 +120 +absolute + + + +0.01 +smooth + +8.53660937674029 +47.34980851346249 +429.7479227139925 +14.38461842053134 +88.13259133838852 +0 +120 +absolute + + + +0.01 +smooth + +8.536610220307516 +47.34980899969524 +429.74832372438743 +14.309174441665341 +88.12039350746609 +0 +120 +absolute + + + +0.01 +smooth + +8.536611064231783 +47.34980948692528 +429.74869818356626 +14.233387437408862 +88.10814801296044 +0 +120 +absolute + + + +0.01 +smooth + +8.536611908492379 +47.349809975142904 +429.7490455867584 +14.157262800751752 +88.0958555963592 +0 +120 +absolute + + + +0.01 +smooth + +8.536612753068596 +47.34981046433839 +429.7493654291935 +14.080805924683856 +88.08351699914995 +0 +120 +absolute + + + +0.01 +smooth + +8.536613597939722 +47.349810954502026 +429.74965720610106 +14.004022202195033 +88.07113296282034 +0 +120 +absolute + + + +0.01 +smooth + +8.536614443085044 +47.34981144562411 +429.7499204127105 +13.92691702627513 +88.05870422885798 +0 +120 +absolute + + + +0.01 +smooth + +8.536615288483851 +47.34981193769491 +429.7501545442515 +13.849495789913995 +88.04623153875048 +0 +120 +absolute + + + +0.01 +smooth + +8.536616134115434 +47.34981243070472 +429.75035909595334 +13.77176388610147 +88.03371563398547 +0 +120 +absolute + + + +0.01 +smooth + +8.536616979959078 +47.349812924643835 +429.75053356304585 +13.693726707827432 +88.02115725605057 +0 +120 +absolute + + + +0.01 +smooth + +8.536617825994075 +47.34981341950254 +429.7506774407582 +13.615389648081715 +88.00855714643336 +0 +120 +absolute + + + +0.01 +smooth + +8.53661867219971 +47.349813915271085 +429.75079022432027 +13.536758099854172 +87.99591604662152 +0 +120 +absolute + + + +0.01 +smooth + +8.536619518555277 +47.3498144119398 +429.7508714089613 +13.457837456134657 +87.9832346981026 +0 +120 +absolute + + + +0.01 +smooth + +8.536620365040058 +47.349814909498946 +429.75092048991104 +13.378633109913014 +87.9705138423643 +0 +120 +absolute + + + +0.01 +smooth + +8.536621211633346 +47.34981540793882 +429.7509369623988 +13.2991504541791 +87.95775422089417 +0 +120 +absolute + + + +0.01 +smooth + +8.536622058668796 +47.34981590747871 +429.7509027029994 +13.21924974623097 +87.94493768220036 +0 +120 +absolute + + + +0.01 +smooth + +8.536622906480366 +47.349816408337716 +429.7508010006425 +13.13879107604801 +87.93204606496792 +0 +120 +absolute + + + +0.01 +smooth + +8.536623755047788 +47.349816910505815 +429.7506334690903 +13.057779585642093 +87.91908009594975 +0 +120 +absolute + + + +0.01 +smooth + +8.536624604350797 +47.349817413973 +429.75040172210475 +12.976220417025067 +87.9060405018988 +0 +120 +absolute + + + +0.01 +smooth + +8.536625454369123 +47.349817918729265 +429.75010737344815 +12.894118712208783 +87.89292800956798 +0 +120 +absolute + + + +0.01 +smooth + +8.536626305082505 +47.349818424764585 +429.7497520368826 +12.811479613205103 +87.87974334571025 +0 +120 +absolute + + + +0.01 +smooth + +8.536627156470674 +47.349818932068956 +429.74933732617023 +12.728308262025875 +87.86648723707854 +0 +120 +absolute + + + +0.01 +smooth + +8.536628008513363 +47.34981944063237 +429.748864855073 +12.644609800682955 +87.85316041042576 +0 +120 +absolute + + + +0.01 +smooth + +8.536628861190309 +47.34981995044481 +429.7483362373532 +12.560389371188199 +87.8397635925049 +0 +120 +absolute + + + +0.01 +smooth + +8.536629714481247 +47.34982046149625 +429.7477530867729 +12.475652115553466 +87.82629751006881 +0 +120 +absolute + + + +0.01 +smooth + +8.536630568365906 +47.3498209737767 +429.7471170170943 +12.39040317579059 +87.81276288987048 +0 +120 +absolute + + + +0.01 +smooth + +8.536631422824021 +47.34982148727613 +429.7464296420793 +12.304647693911463 +87.79916045866285 +0 +120 +absolute + + + +0.01 +smooth + +8.536632277835333 +47.34982200198454 +429.7456925754902 +12.218390811927915 +87.78549094319885 +0 +120 +absolute + + + +0.01 +smooth + +8.536633133379565 +47.3498225178919 +429.744907431089 +12.131637671851804 +87.77175507023138 +0 +120 +absolute + + + +0.01 +smooth + +8.536633989436458 +47.349823034988226 +429.744075822638 +12.044393415694993 +87.75795356651338 +0 +120 +absolute + + + +0.01 +smooth + +8.536634845985743 +47.34982355326346 +429.7431993638991 +11.956663185469324 +87.7440871587978 +0 +120 +absolute + + + +0.01 +smooth + +8.53663570300716 +47.34982407270766 +429.7422796686347 +11.868452123186671 +87.7301565738376 +0 +120 +absolute + + + +0.01 +smooth + +8.536636560480433 +47.34982459331073 +429.74131835060655 +11.779765370858868 +87.71616253838566 +0 +120 +absolute + + + +0.01 +smooth + +8.536637418385306 +47.34982511506272 +429.74031702357706 +11.690608070497765 +87.70210577919497 +0 +120 +absolute + + + +0.01 +smooth + +8.536638276701504 +47.3498256379536 +429.7392773013082 +11.600985364115246 +87.68798702301841 +0 +120 +absolute + + + +0.01 +smooth + +8.536639135408768 +47.34982616197334 +429.7382007975623 +11.510902393723153 +87.67380699660893 +0 +120 +absolute + + + +0.01 +smooth + +8.53663999448683 +47.34982668711196 +429.7370891261013 +11.420364301333342 +87.6595664267195 +0 +120 +absolute + + + +0.01 +smooth + +8.536640853915417 +47.3498272133594 +429.735943900687 +11.329376228957656 +87.64526604010297 +0 +120 +absolute + + + +0.01 +smooth + +8.536641713674276 +47.3498277407057 +429.7347667350823 +11.237943318607968 +87.63090656351238 +0 +120 +absolute + + + +0.01 +smooth + +8.536642573743128 +47.3498282691408 +429.73355924304866 +11.146070712296119 +87.6164887237006 +0 +120 +absolute + + + +0.01 +smooth + +8.536643434101718 +47.34982879865473 +429.73232303834845 +11.053763552033972 +87.60201324742059 +0 +120 +absolute + + + +0.01 +smooth + +8.536644294729772 +47.349829329237444 +429.7310597347438 +10.96102697983336 +87.58748086142525 +0 +120 +absolute + + + +0.01 +smooth + +8.536645155607026 +47.34982986087897 +429.7297709459968 +10.867866137706175 +87.57289229246754 +0 +120 +absolute + + + +0.01 +smooth + +8.536646016713217 +47.34983039356924 +429.72845828586946 +10.774286167664252 +87.55824826730039 +0 +120 +absolute + + + +0.01 +smooth + +8.536646878028074 +47.349830927298285 +429.72712336812407 +10.68029221171945 +87.54354951267672 +0 +120 +absolute + + + +0.01 +smooth + +8.536647739531336 +47.34983146205607 +429.72576780652264 +10.58588941188362 +87.5287967553495 +0 +120 +absolute + + + +0.01 +smooth + +8.536648601202735 +47.3498319978326 +429.72439321482733 +10.491082910168622 +87.51399072207163 +0 +120 +absolute + + + +0.01 +smooth + +8.536649463022002 +47.34983253461786 +429.7230012068003 +10.395877848586306 +87.49913213959603 +0 +120 +absolute + + + +0.01 +smooth + +8.536650324968875 +47.34983307240181 +429.7215933962036 +10.300279369148528 +87.48422173467569 +0 +120 +absolute + + + +0.01 +smooth + +8.536651187023086 +47.34983361117447 +429.72017139679946 +10.204292613867144 +87.4692602340635 +0 +120 +absolute + + + +0.01 +smooth + +8.536652049164369 +47.3498341509258 +429.7187368223498 +10.107922724753992 +87.4542483645124 +0 +120 +absolute + + + +0.01 +smooth + +8.536652911372459 +47.349834691645825 +429.7172912866169 +10.011174843820962 +87.43918685277531 +0 +120 +absolute + + + +0.01 +smooth + +8.53665377362709 +47.3498352333245 +429.7158364033628 +9.914054113079889 +87.4240764256052 +0 +120 +absolute + + + +0.01 +smooth + +8.536654635907993 +47.349835775951824 +429.7143737863497 +9.81656567454263 +87.408917809755 +0 +120 +absolute + + + +0.01 +smooth + +8.536655498194907 +47.34983631951778 +429.7129050493396 +9.718714670221042 +87.3937117319776 +0 +120 +absolute + + + +0.01 +smooth + +8.53665636046756 +47.34983686401236 +429.71143180609477 +9.620506242126975 +87.37845891902597 +0 +120 +absolute + + + +0.01 +smooth + +8.536657222705692 +47.34983740942555 +429.7099556703772 +9.521945532272287 +87.36316009765306 +0 +120 +absolute + + + +0.01 +smooth + +8.536658084889034 +47.34983795574733 +429.7084782559491 +9.423037682668834 +87.34781599461176 +0 +120 +absolute + + + +0.01 +smooth + +8.536658946997319 +47.34983850296771 +429.70700117657253 +9.323787835328451 +87.33242733665503 +0 +120 +absolute + + + +0.01 +smooth + +8.536659809010281 +47.34983905107666 +429.7055260460096 +9.22420113226303 +87.31699485053582 +0 +120 +absolute + + + +0.01 +smooth + +8.536660670907656 +47.34983960006416 +429.7040544780225 +9.124282715484405 +87.30151926300701 +0 +120 +absolute + + + +0.01 +smooth + +8.536661532669179 +47.34984014992021 +429.70258808637334 +9.024037727004435 +87.28600130082158 +0 +120 +absolute + + + +0.01 +smooth + +8.536662394274579 +47.34984070063479 +429.70112848482415 +8.923471308834975 +87.27044169073245 +0 +120 +absolute + + + +0.01 +smooth + +8.536663255703592 +47.3498412521979 +429.6996772871371 +8.822588602987876 +87.25484115949256 +0 +120 +absolute + + + +0.01 +smooth + +8.536664116935956 +47.34984180459952 +429.69823610707425 +8.721394751474998 +87.23920043385483 +0 +120 +absolute + + + +0.01 +smooth + +8.536664977951398 +47.34984235782964 +429.6968065583979 +8.61989489630819 +87.2235202405722 +0 +120 +absolute + + + +0.01 +smooth + +8.536665839072953 +47.34984291210057 +429.6953597622981 +8.517960462335468 +87.20778383187279 +0 +120 +absolute + + + +0.01 +smooth + +8.536666700623767 +47.349843467624446 +429.6938664975796 +8.415462821157908 +87.1919744628077 +0 +120 +absolute + + + +0.01 +smooth + +8.536667562583773 +47.34984402439092 +429.69232786442643 +8.312407034916879 +87.17609286436445 +0 +120 +absolute + + + +0.01 +smooth + +8.536668424932886 +47.34984458238969 +429.6907449630226 +8.208798165753759 +87.16013976753041 +0 +120 +absolute + + + +0.01 +smooth + +8.536669287651026 +47.34984514161042 +429.6891188935521 +8.104641275809938 +87.14411590329308 +0 +120 +absolute + + + +0.01 +smooth + +8.536670150718125 +47.34984570204281 +429.6874507561991 +7.999941427226799 +87.12802200263994 +0 +120 +absolute + + + +0.01 +smooth + +8.536671014114102 +47.349846263676504 +429.68574165114757 +7.894703682145721 +87.1118587965584 +0 +120 +absolute + + + +0.01 +smooth + +8.536671877818874 +47.3498468265012 +429.6839926785814 +7.788933102708092 +87.09562701603593 +0 +120 +absolute + + + +0.01 +smooth + +8.53667274181237 +47.34984739050657 +429.6822049386847 +7.6826347510552955 +87.07932739205998 +0 +120 +absolute + + + +0.01 +smooth + +8.53667360607451 +47.349847955682286 +429.6803795316417 +7.575813689328693 +87.06296065561804 +0 +120 +absolute + + + +0.01 +smooth + +8.536674470585217 +47.34984852201805 +429.67851755763604 +7.468474979669708 +87.0465275376975 +0 +120 +absolute + + + +0.01 +smooth + +8.536675335324412 +47.349849089503515 +429.676620116852 +7.360623684219707 +87.03002876928585 +0 +120 +absolute + + + +0.01 +smooth + +8.536676200272025 +47.34984965812835 +429.67468830947354 +7.252264865120069 +87.01346508137055 +0 +120 +absolute + + + +0.01 +smooth + +8.536677065407966 +47.34985022788224 +429.67272323568466 +7.143403584512182 +86.99683720493907 +0 +120 +absolute + + + +0.01 +smooth + +8.536677930712168 +47.34985079875488 +429.67072599566944 +7.034044904537428 +86.98014587097883 +0 +120 +absolute + + + +0.01 +smooth + +8.536678796164548 +47.34985137073593 +429.6686976896117 +6.92419388733719 +86.96339181047729 +0 +120 +absolute + + + +0.01 +smooth + +8.536679661745037 +47.349851943815075 +429.66663941769593 +6.813855595052854 +86.94657575442194 +0 +120 +absolute + + + +0.01 +smooth + +8.536680527433544 +47.34985251798197 +429.6645522801056 +6.703035089825778 +86.92969843380017 +0 +120 +absolute + + + +0.01 +smooth + +8.536681393210001 +47.34985309322633 +429.66243737702507 +6.591737433797392 +86.9127605795995 +0 +120 +absolute + + + +0.01 +smooth + +8.53668225905433 +47.349853669537794 +429.6602958086383 +6.479967689109056 +86.89576292280736 +0 +120 +absolute + + + +0.01 +smooth + +8.536683124946453 +47.34985424690607 +429.6581286751292 +6.367730917902155 +86.87870619441118 +0 +120 +absolute + + + +0.01 +smooth + +8.53668399086629 +47.34985482532082 +429.6559370766821 +6.255032182318075 +86.86159112539848 +0 +120 +absolute + + + +0.01 +smooth + +8.536684856793764 +47.34985540477171 +429.65372211348057 +6.141876544498191 +86.84441844675662 +0 +120 +absolute + + + +0.01 +smooth + +8.536685722708803 +47.34985598524846 +429.651484885709 +6.028269066583898 +86.82718888947315 +0 +120 +absolute + + + +0.01 +smooth + +8.536686588591321 +47.349856566740684 +429.64922649355117 +5.91421481071657 +86.80990318453544 +0 +120 +absolute + + + +0.01 +smooth + +8.536687454421248 +47.34985714923811 +429.6469480371913 +5.799718839037578 +86.79256206293103 +0 +120 +absolute + + + +0.01 +smooth + +8.536688320178504 +47.34985773273039 +429.6446506168134 +5.684786213688339 +86.7751662556473 +0 +120 +absolute + + + +0.01 +smooth + +8.53668918584301 +47.34985831720722 +429.64233533260136 +5.569421996810223 +86.75771649367178 +0 +120 +absolute + + + +0.01 +smooth + +8.536690051394691 +47.349858902658255 +429.64000328473924 +5.45363125054461 +86.74021350799184 +0 +120 +absolute + + + +0.01 +smooth + +8.53669091681347 +47.349859489073175 +429.63765557341117 +5.337419037032884 +86.72265802959498 +0 +120 +absolute + + + +0.01 +smooth + +8.536691782079265 +47.34986007644168 +429.635293298801 +5.220790418416429 +86.70505078946869 +0 +120 +absolute + + + +0.01 +smooth + +8.536692647172003 +47.34986066475342 +429.6329175610929 +5.103750456836629 +86.68739251860033 +0 +120 +absolute + + + +0.01 +smooth + +8.536693512071608 +47.34986125399809 +429.63052946047077 +4.986304214434866 +86.66968394797746 +0 +120 +absolute + + + +0.01 +smooth + +8.536694376757996 +47.34986184416536 +429.62813009711874 +4.868456753352525 +86.65192580858746 +0 +120 +absolute + + + +0.01 +smooth + +8.536695241211095 +47.3498624352449 +429.6257205712209 +4.750213135730967 +86.6341188314178 +0 +120 +absolute + + + +0.01 +smooth + +8.536696105410828 +47.349863027226405 +429.62330198296104 +4.6315784237116215 +86.61626374745596 +0 +120 +absolute + + + +0.01 +smooth + +8.536696969337115 +47.34986362009954 +429.6208754325234 +4.512557679435847 +86.59836128768937 +0 +120 +absolute + + + +0.01 +smooth + +8.53669783296988 +47.34986421385398 +429.61844202009183 +4.39315596504503 +86.58041218310552 +0 +120 +absolute + + + +0.01 +smooth + +8.536698696289044 +47.349864808479396 +429.6160028458505 +4.273378342680552 +86.56241716469181 +0 +120 +absolute + + + +0.01 +smooth + +8.536699559274531 +47.34986540396549 +429.61355900998336 +4.153229874483797 +86.54437696343575 +0 +120 +absolute + + + +0.01 +smooth + +8.536700421906264 +47.349866000301915 +429.61111161267445 +4.03271562259615 +86.52629231032475 +0 +120 +absolute + + + +0.01 +smooth + +8.536701284164165 +47.34986659747836 +429.6086617541078 +3.911840649158993 +86.5081639363463 +0 +120 +absolute + + + +0.01 +smooth + +8.536702146028155 +47.3498671954845 +429.60621053446744 +3.790610016313689 +86.48999257248781 +0 +120 +absolute + + + +0.01 +smooth + +8.536703007478158 +47.34986779431001 +429.6037590539373 +3.6690287862016646 +86.4717789497368 +0 +120 +absolute + + + +0.01 +smooth + +8.536703868494099 +47.34986839394457 +429.60130841270154 +3.547102020964281 +86.45352379908067 +0 +120 +absolute + + + +0.01 +smooth + +8.536704729055897 +47.34986899437784 +429.5988597109441 +3.4248347827429235 +86.4352278515069 +0 +120 +absolute + + + +0.01 +smooth + +8.536705589143477 +47.34986959559953 +429.59641404884906 +3.3022321336789746 +86.41689183800293 +0 +120 +absolute + + + +0.01 +smooth + +8.536706448736759 +47.349870197599294 +429.5939725266004 +3.1792991359138174 +86.39851648955621 +0 +120 +absolute + + + +0.01 +smooth + +8.536707307815668 +47.349870800366816 +429.59153624438216 +3.056040851588837 +86.38010253715424 +0 +120 +absolute + + + +0.01 +smooth + +8.536708166360127 +47.34987140389176 +429.5891063023783 +2.932462342845416 +86.36165071178442 +0 +120 +absolute + + + +0.01 +smooth + +8.536709024350053 +47.349872008163835 +429.586683800773 +2.8085686718249163 +86.34316174443424 +0 +120 +absolute + + + +0.01 +smooth + +8.53670988211023 +47.34987261338837 +429.5842542287536 +2.684240254482452 +86.32462001879564 +0 +120 +absolute + + + +0.01 +smooth + +8.536710739965274 +47.34987321977062 +429.58180271725774 +2.559357510939514 +86.30600992841198 +0 +120 +absolute + + + +0.01 +smooth + +8.536711597894874 +47.349873827299966 +429.57932982909324 +2.4339255095871515 +86.28733221904773 +0 +120 +absolute + + + +0.01 +smooth + +8.536712455878721 +47.349874435965816 +429.5768361270683 +2.3079493188164157 +86.26858763646736 +0 +120 +absolute + + + +0.01 +smooth + +8.536713313896502 +47.34987504575763 +429.5743221739915 +2.1814340070183564 +86.24977692643546 +0 +120 +absolute + + + +0.01 +smooth + +8.536714171927912 +47.34987565666478 +429.57178853267084 +2.054384642584022 +86.23090083471642 +0 +120 +absolute + + + +0.01 +smooth + +8.536715029952635 +47.34987626867668 +429.5692357659145 +1.9268062939044628 +86.21196010707479 +0 +120 +absolute + + + +0.01 +smooth + +8.536715887950365 +47.34987688178278 +429.566664436531 +1.7987040293707293 +86.19295548927508 +0 +120 +absolute + + + +0.01 +smooth + +8.536716745900788 +47.34987749597246 +429.56407510732816 +1.670082917373847 +86.17388772708172 +0 +120 +absolute + + + +0.01 +smooth + +8.536717603783599 +47.34987811123516 +429.5614683411146 +1.5409480263049127 +86.15475756625928 +0 +120 +absolute + + + +0.01 +smooth + +8.53671846157848 +47.34987872756027 +429.55884470069844 +1.4113044245549529 +86.13556575257225 +0 +120 +absolute + + + +0.01 +smooth + +8.536719319265128 +47.34987934493724 +429.55620474888786 +1.2811571805150168 +86.11631303178507 +0 +120 +absolute + + + +0.01 +smooth + +8.536720176823225 +47.34987996335544 +429.55354904849094 +1.1505113625761543 +86.09700014966225 +0 +120 +absolute + + + +0.01 +smooth + +8.536721034232468 +47.349880582804325 +429.5508781623162 +1.0193720391294157 +86.07762785196833 +0 +120 +absolute + + + +0.01 +smooth + +8.536721891472538 +47.34988120327327 +429.54819265317167 +0.8877442785658498 +86.05819688446776 +0 +120 +absolute + + + +0.01 +smooth + +8.536722748523138 +47.34988182475174 +429.54549308386584 +0.7556331492765076 +86.03870799292508 +0 +120 +absolute + + + +0.01 +smooth + +8.536723605363946 +47.3498824472291 +429.5427800172066 +0.6230437196524141 +86.01916192310475 +0 +120 +absolute + + + +0.01 +smooth + +8.536724461974657 +47.3498830706948 +429.54005401600256 +0.48998105808466685 +85.99955942077129 +0 +120 +absolute + + + +0.01 +smooth + +8.536725318334959 +47.34988369513825 +429.5373156430616 +0.35645023296429224 +85.97990123168917 +0 +120 +absolute + + + +0.01 +smooth + +8.536726174424542 +47.34988432054886 +429.53456546119224 +0.22245631268233948 +85.96018810162292 +0 +120 +absolute + + + +0.01 +smooth + +8.536727030223094 +47.34988494691601 +429.5318040332025 +0.08800436562985775 +85.94042077633699 +0 +120 +absolute + + + +0.01 +smooth + +8.536727885710306 +47.34988557422918 +429.52903192190064 +-0.04690053980210174 +85.92060000159593 +0 +120 +absolute + + + +0.01 +smooth + +8.536728740865868 +47.34988620247773 +429.5262496900949 +-0.18225333522249043 +85.90072652316418 +0 +120 +absolute + + + +0.01 +smooth + +8.53672959566947 +47.349886831651105 +429.5234579005937 +-0.3180489522402579 +85.88080108680629 +0 +120 +absolute + + + +0.01 +smooth + +8.536730450100801 +47.34988746173871 +429.5206571162051 +-0.4542823224643789 +85.86082443828671 +0 +120 +absolute + + + +0.01 +smooth + +8.536731304139552 +47.34988809272998 +429.51784789973755 +-0.5909483775037553 +85.84079732336998 +0 +120 +absolute + + + +0.01 +smooth + +8.53673215776541 +47.34988872461429 +429.515030813999 +-0.7280420489673611 +85.82072048782055 +0 +120 +absolute + + + +0.01 +smooth + +8.536733010958066 +47.34988935738107 +429.5122064217977 +-0.8655582684641472 +85.80059467740296 +0 +120 +absolute + + + +0.01 +smooth + +8.536733863697211 +47.34988999101976 +429.50937528594204 +-1.003491967603064 +85.78042063788169 +0 +120 +absolute + + + +0.01 +smooth + +8.536734715962531 +47.34989062551975 +429.5065379692402 +-1.1418380779930608 +85.76019911502122 +0 +120 +absolute + + + +0.01 +smooth + +8.536735567733718 +47.34989126087045 +429.5036950345004 +-1.2805915312430887 +85.73993085458605 +0 +120 +absolute + + + +0.01 +smooth + +8.536736418990463 +47.34989189706129 +429.50084704453093 +-1.419747258962098 +85.7196166023407 +0 +120 +absolute + + + +0.01 +smooth + +8.536737269712454 +47.34989253408168 +429.49799456214 +-1.5593001927590378 +85.69925710404964 +0 +120 +absolute + + + +0.01 +smooth + +8.536738119879379 +47.34989317192105 +429.49513815013574 +-1.6992452642428846 +85.67885310547737 +0 +120 +absolute + + + +0.01 +smooth + +8.536738969470932 +47.34989381056879 +429.4922783713265 +-1.839577405022538 +85.6584053523884 +0 +120 +absolute + + + +0.01 +smooth + +8.536739818466799 +47.34989445001431 +429.4894157885206 +-1.9802915467069742 +85.63791459054721 +0 +120 +absolute + + + +0.01 +smooth + +8.536740666846672 +47.34989509024706 +429.48655096452603 +-2.1213826209051425 +85.61738156571832 +0 +120 +absolute + + + +0.01 +smooth + +8.536741514590238 +47.349895731256424 +429.48368446215125 +-2.262845559225993 +85.5968070236662 +0 +120 +absolute + + + +0.01 +smooth + +8.536742361677188 +47.34989637303183 +429.48081684420436 +-2.4046752932784763 +85.57619171015536 +0 +120 +absolute + + + +0.01 +smooth + +8.536743208087211 +47.34989701556269 +429.47794867349364 +-2.5468667546715436 +85.55553637095028 +0 +120 +absolute + + + +0.01 +smooth + +8.5367440538 +47.34989765883843 +429.4750805128273 +-2.6894148750141436 +85.53484175181549 +0 +120 +absolute + + + +0.01 +smooth + +8.53674489879524 +47.34989830284843 +429.47221292501365 +-2.8323145859152525 +85.51410859851543 +0 +120 +absolute + + + +0.01 +smooth + +8.536745743052622 +47.34989894758215 +429.4693464728607 +-2.9755608189837703 +85.49333765681467 +0 +120 +absolute + + + +0.01 +smooth + +8.536746586551837 +47.34989959302897 +429.46648171917707 +-3.1191485058286714 +85.47252967247763 +0 +120 +absolute + + + +0.01 +smooth + +8.536747429272573 +47.349900239178325 +429.4636192267707 +-3.263072578058908 +85.45168539126888 +0 +120 +absolute + + + +0.01 +smooth + +8.536748271194524 +47.34990088601962 +429.46075955844987 +-3.407327967283429 +85.43080555895285 +0 +120 +absolute + + + +0.01 +smooth + +8.536749112297374 +47.34990153354227 +429.45790327702287 +-3.551909605111184 +85.40989092129409 +0 +120 +absolute + + + +0.01 +smooth + +8.536749952560815 +47.3499021817357 +429.45505094529784 +-3.6968124231511257 +85.38894222405708 +0 +120 +absolute + + + +0.01 +smooth + +8.536750791964536 +47.349902830589315 +429.45220312608325 +-3.8420313530122017 +85.36796021300626 +0 +120 +absolute + + + +0.01 +smooth + +8.536751630488228 +47.349903480092536 +429.4493603821871 +-3.9875613263033896 +85.3469456339062 +0 +120 +absolute + + + +0.01 +smooth + +8.536752468111578 +47.34990413023477 +429.4465232764177 +-4.133397274633587 +85.32589923252138 +0 +120 +absolute + + + +0.01 +smooth + +8.53675330517641 +47.349904781214086 +429.4436843316595 +-4.279650858564353 +85.30480632431808 +0 +120 +absolute + + + +0.01 +smooth + +8.536754142023971 +47.349905433228436 +429.4408359398862 +-4.426433714312401 +85.2836522375451 +0 +120 +absolute + + + +0.01 +smooth + +8.536754978633102 +47.34990608626711 +429.43797846753995 +-4.573740736969453 +85.26243773714074 +0 +120 +absolute + + + +0.01 +smooth + +8.536755814982637 +47.349906740319305 +429.4351122810627 +-4.721566821627232 +85.24116358804325 +0 +120 +absolute + + + +0.01 +smooth + +8.536756651051412 +47.34990739537433 +429.4322377468966 +-4.869906863377463 +85.21983055519087 +0 +120 +absolute + + + +0.01 +smooth + +8.536757486818262 +47.34990805142139 +429.4293552314835 +-5.018755757311866 +85.19843940352185 +0 +120 +absolute + + + +0.01 +smooth + +8.536758322262028 +47.34990870844976 +429.4264651012659 +-5.168108398522168 +85.1769908979745 +0 +120 +absolute + + + +0.01 +smooth + +8.536759157361539 +47.349909366448685 +429.4235677226853 +-5.317959682100113 +85.15548580348701 +0 +120 +absolute + + + +0.01 +smooth + +8.536759992095634 +47.349910025407425 +429.42066346218405 +-5.468304503137375 +85.13392488499768 +0 +120 +absolute + + + +0.01 +smooth + +8.536760826443151 +47.34991068531522 +429.41775268620427 +-5.619137756725701 +85.11230890744476 +0 +120 +absolute + + + +0.01 +smooth + +8.536761660382925 +47.34991134616134 +429.414835761188 +-5.770454337956817 +85.09063863576652 +0 +120 +absolute + + + +0.01 +smooth + +8.536762493893795 +47.349912007935046 +429.4119130535773 +-5.922249141922444 +85.06891483490122 +0 +120 +absolute + + + +0.01 +smooth + +8.53676332695459 +47.34991267062553 +429.4089849298138 +-6.0745170637143024 +85.04713826978708 +0 +120 +absolute + + + +0.01 +smooth + +8.536764159544157 +47.34991333422213 +429.40605175634033 +-6.227252998424122 +85.02530970536243 +0 +120 +absolute + + + +0.01 +smooth + +8.53676499164132 +47.34991399871403 +429.4031138995982 +-6.380451841143617 +85.00342990656542 +0 +120 +absolute + + + +0.01 +smooth + +8.536765823224922 +47.34991466409052 +429.40017172603007 +-6.534108486964544 +84.98149963833441 +0 +120 +absolute + + + +0.01 +smooth + +8.536766654273801 +47.34991533034085 +429.3972256020778 +-6.688217830978571 +84.95951966560767 +0 +120 +absolute + + + +0.01 +smooth + +8.536767484766784 +47.34991599745423 +429.3942758941831 +-6.842774768277442 +84.93749075332333 +0 +120 +absolute + + + +0.01 +smooth + +8.536768314682723 +47.34991666541999 +429.39132296878864 +-6.99777419395289 +84.91541366641981 +0 +120 +absolute + + + +0.01 +smooth + +8.536769144000436 +47.34991733422731 +429.38836719233575 +-7.153211003096628 +84.89328916983521 +0 +120 +absolute + + + +0.01 +smooth + +8.536769972698774 +47.34991800386549 +429.38540893126736 +-7.3090800908003875 +84.87111802850796 +0 +120 +absolute + + + +0.01 +smooth + +8.536770800756562 +47.34991867432374 +429.3824485520247 +-7.465376352155882 +84.84890100737616 +0 +120 +absolute + + + +0.01 +smooth + +8.536771628152646 +47.34991934559137 +429.3794864210505 +-7.622094682254845 +84.8266388713782 +0 +120 +absolute + + + +0.01 +smooth + +8.536772454865858 +47.349920017657574 +429.37652290478627 +-7.779229976189019 +84.80433238545223 +0 +120 +absolute + + + +0.01 +smooth + +8.536773280875027 +47.349920690511624 +429.37355836967436 +-7.936777129050074 +84.78198231453653 +0 +120 +absolute + + + +0.01 +smooth + +8.536774106159 +47.349921364142794 +429.3705931821568 +-8.094731035929764 +84.75958942356945 +0 +120 +absolute + + + +0.01 +smooth + +8.536774930696609 +47.34992203854031 +429.36762770867574 +-8.253086591919805 +84.73715447748914 +0 +120 +absolute + + + +0.01 +smooth + +8.536775754466689 +47.34992271369345 +429.36466231567294 +-8.411838692111928 +84.71467824123391 +0 +120 +absolute + + + +0.01 +smooth + +8.536776577448078 +47.34992338959144 +429.36169736959073 +-8.57098223159785 +84.69216147974203 +0 +120 +absolute + + + +0.01 +smooth + +8.536777399619611 +47.34992406622354 +429.35873323687116 +-8.730512105469295 +84.66960495795173 +0 +120 +absolute + + + +0.01 +smooth + +8.536778220960125 +47.34992474357902 +429.35577028395613 +-8.890423208817989 +84.64700944080128 +0 +120 +absolute + + + +0.01 +smooth + +8.536779041448456 +47.34992542164711 +429.35280887728777 +-9.050710436735649 +84.62437569322893 +0 +120 +absolute + + + +0.01 +smooth + +8.53677986106344 +47.34992610041708 +429.34984938330825 +-9.211368684314033 +84.60170448017297 +0 +120 +absolute + + + +0.01 +smooth + +8.536780679783915 +47.34992677987817 +429.34689216845936 +-9.372392846644804 +84.57899656657162 +0 +120 +absolute + + + +0.01 +smooth + +8.536781497588713 +47.34992746001963 +429.3439375991835 +-9.533777818819711 +84.55625271736315 +0 +120 +absolute + + + +0.01 +smooth + +8.536782314456673 +47.34992814083073 +429.34098604192246 +-9.695518495930479 +84.53347369748585 +0 +120 +absolute + + + +0.01 +smooth + +8.53678313036663 +47.3499288223007 +429.3380378631184 +-9.857609773068834 +84.51066027187792 +0 +120 +absolute + + + +0.01 +smooth + +8.536783945297422 +47.34992950441881 +429.3350934292134 +-10.020046545326496 +84.48781320547766 +0 +120 +absolute + + + +0.01 +smooth + +8.536784759227881 +47.34993018717431 +429.33215310664946 +-10.182823707795187 +84.46493326322334 +0 +120 +absolute + + + +0.01 +smooth + +8.53678557213685 +47.34993087055644 +429.3292172618687 +-10.34593615556663 +84.44202121005318 +0 +120 +absolute + + + +0.01 +smooth + +8.536786384003161 +47.34993155455447 +429.32628626131316 +-10.50937878373258 +84.41907781090546 +0 +120 +absolute + + + +0.01 +smooth + +8.536787194805651 +47.34993223915764 +429.32336047142485 +-10.673146487384699 +84.39610383071846 +0 +120 +absolute + + + +0.01 +smooth + +8.536788004523153 +47.349932924355215 +429.32044025864593 +-10.83723416161474 +84.3731000344304 +0 +120 +absolute + + + +0.01 +smooth + +8.536788813134509 +47.349933610136446 +429.31752598941836 +-11.001636701514427 +84.35006718697957 +0 +120 +absolute + + + +0.01 +smooth + +8.536789620618551 +47.34993429649055 +429.31461803018425 +-11.16634900217548 +84.3270060533042 +0 +120 +absolute + + + +0.01 +smooth + +8.536790426954115 +47.34993498340684 +429.3117167473856 +-11.331365958689624 +84.30391739834256 +0 +120 +absolute + + + +0.01 +smooth + +8.53679123212004 +47.349935670874515 +429.3088225074646 +-11.496682466148581 +84.28080198703293 +0 +120 +absolute + + + +0.01 +smooth + +8.53679203609516 +47.349936358882864 +429.3059356768631 +-11.662293419644076 +84.25766058431356 +0 +120 +absolute + + + +0.01 +smooth + +8.536792838858313 +47.349937047421115 +429.3030566220234 +-11.828193714267858 +84.23449395512266 +0 +120 +absolute + + + +0.01 +smooth + +8.536793640388332 +47.34993773647853 +429.3001857093874 +-11.994378245111594 +84.21130286439856 +0 +120 +absolute + + + +0.01 +smooth + +8.536794440664057 +47.34993842604437 +429.2973233053972 +-12.160841907267036 +84.18808807707948 +0 +120 +absolute + + + +0.01 +smooth + +8.536795240063588 +47.349939116308924 +429.294464275688 +-12.327689000436921 +84.16483565671949 +0 +120 +absolute + + + +0.01 +smooth + +8.536796038963892 +47.34993980746248 +429.29160342282785 +-12.4950238066306 +84.1415316795285 +0 +120 +absolute + + + +0.01 +smooth + +8.536796837342097 +47.34994049949425 +429.2887410186579 +-12.662841194399723 +84.11817692942864 +0 +120 +absolute + + + +0.01 +smooth + +8.536797635175336 +47.349941192393466 +429.28587733501956 +-12.831136032295928 +84.09477219034197 +0 +120 +absolute + + + +0.01 +smooth + +8.536798432440738 +47.34994188614931 +429.2830126437539 +-12.99990318887086 +84.07131824619064 +0 +120 +absolute + + + +0.01 +smooth + +8.536799229115433 +47.349942580751005 +429.2801472167021 +-13.169137532676165 +84.04781588089672 +0 +120 +absolute + + + +0.01 +smooth + +8.536800025176548 +47.34994327618778 +429.2772813257057 +-13.338833932263526 +84.02426587838232 +0 +120 +absolute + + + +0.01 +smooth + +8.536800820601215 +47.34994397244883 +429.2744152426055 +-13.50898725618451 +84.00066902256953 +0 +120 +absolute + + + +0.01 +smooth + +8.536801615366564 +47.34994466952337 +429.271549239243 +-13.679592372990802 +83.97702609738043 +0 +120 +absolute + + + +0.01 +smooth + +8.536802409449725 +47.349945367400615 +429.26868358745946 +-13.850644151234047 +83.95333788673717 +0 +120 +absolute + + + +0.01 +smooth + +8.536803202827826 +47.34994606606979 +429.2658185590958 +-14.022137459465887 +83.92960517456181 +0 +120 +absolute + + + +0.01 +smooth + +8.536803995478003 +47.34994676552011 +429.26295442599377 +-14.194067166237964 +83.9058287447765 +0 +120 +absolute + + + +0.01 +smooth + +8.536804787377372 +47.34994746574075 +429.26009145999404 +-14.366428140101917 +83.88200938130325 +0 +120 +absolute + + + +0.01 +smooth + +8.536805578503083 +47.34994816672098 +429.25722993293834 +-14.539215249609413 +83.8581478680643 +0 +120 +absolute + + + +0.01 +smooth + +8.536806368832247 +47.34994886844996 +429.2543701166675 +-14.7124233633121 +83.83424498898157 +0 +120 +absolute + + + +0.01 +smooth + +8.536807158342002 +47.34994957091693 +429.25151228302286 +-14.88604734976157 +83.81030152797726 +0 +120 +absolute + + + +0.01 +smooth + +8.536807947009484 +47.349950274111116 +429.2486567038459 +-15.060082077509515 +83.7863182689735 +0 +120 +absolute + + + +0.01 +smooth + +8.536808734811808 +47.34995097802169 +429.2458036509774 +-15.234522415107552 +83.7622959958923 +0 +120 +absolute + + + +0.01 +smooth + +8.53680952172612 +47.349951682637936 +429.2429533962591 +-15.409363231107347 +83.73823549265586 +0 +120 +absolute + + + +0.01 +smooth + +8.536810307729535 +47.349952387948974 +429.24010621153167 +-15.584599394060525 +83.71413754318617 +0 +120 +absolute + + + +0.01 +smooth + +8.536811092799196 +47.349953093944094 +429.23726236863695 +-15.76022577251875 +83.69000293140546 +0 +120 +absolute + + + +0.01 +smooth + +8.536811876912223 +47.34995380061247 +429.23442213941564 +-15.936237235033648 +83.6658324412357 +0 +120 +absolute + + + +0.01 +smooth + +8.53681266004575 +47.34995450794333 +429.2315857957092 +-16.11262865015691 +83.64162685659905 +0 +120 +absolute + + + +0.01 +smooth + +8.53681344217691 +47.34995521592589 +429.22875360935905 +-16.289394886440117 +83.61738696141765 +0 +120 +absolute + + + +0.01 +smooth + +8.536814223282827 +47.349955924549334 +429.225925852206 +-16.466530812434925 +83.5931135396135 +0 +120 +absolute + + + +0.01 +smooth + +8.536815003340635 +47.34995663380292 +429.22310279609155 +-16.644031296693004 +83.5688073751088 +0 +120 +absolute + + + +0.01 +smooth + +8.53681578232746 +47.34995734367585 +429.2202847128569 +-16.82189120776598 +83.54446925182559 +0 +120 +absolute + + + +0.01 +smooth + +8.536816560220437 +47.3499580541573 +429.21747187434323 +-17.000105414205507 +83.52009995368599 +0 +120 +absolute + + + +0.01 +smooth + +8.536817336996691 +47.349958765236515 +429.21466455239187 +-17.178668784563225 +83.49570026461208 +0 +120 +absolute + + + +0.01 +smooth + +8.536818112633354 +47.349959476902704 +429.21186301884387 +-17.35757618739078 +83.47127096852599 +0 +120 +absolute + + + +0.01 +smooth + +8.536818887107554 +47.34996018914508 +429.2090675455406 +-17.536822491239818 +83.4468128493498 +0 +120 +absolute + + + +0.01 +smooth + +8.536819660396425 +47.349960901952855 +429.20627840432337 +-17.71640256466201 +83.4223266910056 +0 +120 +absolute + + + +0.01 +smooth + +8.536820432477095 +47.34996161531525 +429.20349586703315 +-17.896311276208937 +83.39781327741552 +0 +120 +absolute + + + +0.01 +smooth + +8.536821203326692 +47.34996232922147 +429.20072020551135 +-18.076543494432283 +83.37327339250163 +0 +120 +absolute + + + +0.01 +smooth + +8.536821972922347 +47.34996304366072 +429.1979516915992 +-18.257094087883686 +83.34870782018605 +0 +120 +absolute + + + +0.01 +smooth + +8.53682274124119 +47.34996375862222 +429.19519059713787 +-18.437957925114787 +83.32411734439087 +0 +120 +absolute + + + +0.01 +smooth + +8.536823508260351 +47.34996447409521 +429.19243719396866 +-18.61912987467724 +83.29950274903818 +0 +120 +absolute + + + +0.01 +smooth + +8.53682427395696 +47.34996519006886 +429.18969175393266 +-18.80060480512268 +83.2748648180501 +0 +120 +absolute + + + +0.01 +smooth + +8.536825038308145 +47.349965906532404 +429.1869545488712 +-18.98237758500276 +83.25020433534871 +0 +120 +absolute + + + +0.01 +smooth + +8.536825801291041 +47.349966623475055 +429.1842258506256 +-19.164443082869145 +83.22552208485612 +0 +120 +absolute + + + +0.01 +smooth + +8.53682656288277 +47.349967340886025 +429.18150593103695 +-19.34679616727343 +83.20081885049444 +0 +120 +absolute + + + +0.01 +smooth + +8.536827323060468 +47.34996805875451 +429.1787950619465 +-19.529431706767276 +83.17609541618575 +0 +120 +absolute + + + +0.01 +smooth + +8.536828081801264 +47.34996877706976 +429.1760935151956 +-19.712344569902335 +83.15135256585215 +0 +120 +absolute + + + +0.01 +smooth + +8.536828839082286 +47.34996949582097 +429.17340156262526 +-19.895529625230253 +83.12659108341576 +0 +120 +absolute + + + +0.01 +smooth + +8.536829594880665 +47.34997021499735 +429.1707194760769 +-20.07898174130267 +83.10181175279865 +0 +120 +absolute + + + +0.01 +smooth + +8.536830349173531 +47.34997093458811 +429.1680475273916 +-20.262695786671237 +83.07701535792296 +0 +120 +absolute + + + +0.01 +smooth + +8.536831101938011 +47.34997165458247 +429.1653859884107 +-20.446666629887588 +83.05220268271074 +0 +120 +absolute + + + +0.01 +smooth + +8.536831853151241 +47.34997237496964 +429.16273513097536 +-20.63088913950341 +83.02737451108413 +0 +120 +absolute + + + +0.01 +smooth + +8.536832602790344 +47.34997309573883 +429.16009522692696 +-20.815358184070277 +83.00253162696521 +0 +120 +absolute + + + +0.01 +smooth + +8.536833350832456 +47.34997381687927 +429.1574665481066 +-21.00006863213986 +82.97767481427609 +0 +120 +absolute + + + +0.01 +smooth + +8.536834097254703 +47.34997453838015 +429.1548493663555 +-21.185015352263818 +82.95280485693885 +0 +120 +absolute + + + +0.01 +smooth + +8.536834842496306 +47.3499752604239 +429.1522393066358 +-21.370295657505075 +82.92790836765055 +0 +120 +absolute + + + +0.01 +smooth + +8.536835586994583 +47.34997598319297 +429.1496319609341 +-21.55600686894722 +82.9029719695531 +0 +120 +absolute + + + +0.01 +smooth + +8.536836330723816 +47.34997670667665 +429.14702755162836 +-21.742143867172828 +82.87799646223604 +0 +120 +absolute + + + +0.01 +smooth + +8.536837073658274 +47.349977430864215 +429.14442630109676 +-21.92870153276449 +82.8529826452888 +0 +120 +absolute + + + +0.01 +smooth + +8.536837815772243 +47.34997815574497 +429.14182843171716 +-22.11567474630481 +82.82793131830095 +0 +120 +absolute + + + +0.01 +smooth + +8.536838557039998 +47.34997888130821 +429.1392341658676 +-22.3030583883764 +82.80284328086194 +0 +120 +absolute + + + +0.01 +smooth + +8.536839297435813 +47.349979607543176 +429.136643725926 +-22.490847339561792 +82.77771933256126 +0 +120 +absolute + + + +0.01 +smooth + +8.53684003693397 +47.34998033443919 +429.13405733427044 +-22.6790364804436 +82.75256027298842 +0 +120 +absolute + + + +0.01 +smooth + +8.536840775508741 +47.34998106198554 +429.13147521327886 +-22.86762069160443 +82.72736690173288 +0 +120 +absolute + + + +0.01 +smooth + +8.536841513134409 +47.3499817901715 +429.12889758532936 +-23.05659485362686 +82.70214001838416 +0 +120 +absolute + + + +0.01 +smooth + +8.536842249785247 +47.34998251898635 +429.12632467279974 +-23.245953847093485 +82.67688042253174 +0 +120 +absolute + + + +0.01 +smooth + +8.536842985435536 +47.349983248419406 +429.1237566980684 +-23.435692552586904 +82.65158891376515 +0 +120 +absolute + + + +0.01 +smooth + +8.536843720059547 +47.34998397845992 +429.12119388351294 +-23.625805850689687 +82.6262662916738 +0 +120 +absolute + + + +0.01 +smooth + +8.536844453631566 +47.349984709097185 +429.11863645151146 +-23.81628862198448 +82.60091335584728 +0 +120 +absolute + + + +0.01 +smooth + +8.536845186125866 +47.34998544032051 +429.11608462444224 +-24.007135747053802 +82.575530905875 +0 +120 +absolute + + + +0.01 +smooth + +8.536845917516724 +47.34998617211915 +429.1135386246828 +-24.198342106480272 +82.55011974134648 +0 +120 +absolute + + + +0.01 +smooth + +8.536846647778422 +47.34998690448244 +429.1109986746116 +-24.38990258084649 +82.52468066185126 +0 +120 +absolute + + + +0.01 +smooth + +8.536847376885227 +47.3499876373996 +429.1084649966062 +-24.581812050735024 +82.49921446697876 +0 +120 +absolute + + + +0.01 +smooth + +8.536848104811428 +47.349988370859975 +429.1059378130451 +-24.7740653967285 +82.47372195631854 +0 +120 +absolute + + + +0.01 +smooth + +8.536848831531293 +47.3499891048528 +429.1034173463057 +-24.96665749940947 +82.44820392946 +0 +120 +absolute + + + +0.01 +smooth + +8.536849557019108 +47.349989839367424 +429.1009038187667 +-25.159583239360565 +82.42266118599275 +0 +120 +absolute + + + +0.01 +smooth + +8.536850281249144 +47.34999057439308 +429.09839745280556 +-25.352837497164384 +82.39709452550619 +0 +120 +absolute + + + +0.01 +smooth + +8.53685100419568 +47.34999130991906 +429.09589847080036 +-25.546415153403444 +82.37150474758982 +0 +120 +absolute + + + +0.01 +smooth + +8.536851725832996 +47.349992045934684 +429.0934070951294 +-25.7403110886604 +82.34589265183321 +0 +120 +absolute + + + +0.01 +smooth + +8.536852446135365 +47.3499927824292 +429.0909235481702 +-25.93452018351781 +82.32025903782574 +0 +120 +absolute + + + +0.01 +smooth + +8.536853165077067 +47.34999351939192 +429.08844805230143 +-26.12903731855829 +82.29460470515701 +0 +120 +absolute + + + +0.01 +smooth + +8.53685388263238 +47.34999425681212 +429.0859808299004 +-26.323857374364415 +82.26893045341646 +0 +120 +absolute + + + +0.01 +smooth + +8.536854598775582 +47.349994994679086 +429.08352210334556 +-26.518975231518784 +82.24323708219356 +0 +120 +absolute + + + +0.01 +smooth + +8.536855313480945 +47.349995732982116 +429.08107209501475 +-26.71438577060399 +82.21752539107784 +0 +120 +absolute + + + +0.01 +smooth + +8.536856026722754 +47.349996471710476 +429.07863102728595 +-26.91008387220265 +82.19179617965878 +0 +120 +absolute + + + +0.01 +smooth + +8.53685673847528 +47.349997210853466 +429.0761991225371 +-27.106064416897286 +82.16605024752587 +0 +120 +absolute + + + +0.01 +smooth + +8.536857448712805 +47.34999795040037 +429.0737766031464 +-27.30232228527053 +82.14028839426861 +0 +120 +absolute + + + +0.01 +smooth + +8.536858157409602 +47.34999869034048 +429.0713636914918 +-27.49885235790498 +82.11451141947649 +0 +120 +absolute + + + +0.01 +smooth + +8.536858864539955 +47.34999943066306 +429.0689606099512 +-27.69564951538321 +82.08872012273899 +0 +120 +absolute + + + +0.01 +smooth + +8.536859570078132 +47.35000017135742 +429.06656758090276 +-27.89270863828782 +82.06291530364561 +0 +120 +absolute + + + +0.01 +smooth + +8.536860273998418 +47.35000091241285 +429.06418482672416 +-28.090024607201396 +82.03709776178584 +0 +120 +absolute + + + +0.01 +smooth + +8.536860976275088 +47.35000165381862 +429.0618125697938 +-28.287592302706535 +82.01126829674921 +0 +120 +absolute + + + +0.01 +smooth + +8.53686167688242 +47.35000239556402 +429.0594510324894 +-28.48540660538582 +81.98542770812514 +0 +120 +absolute + + + +0.01 +smooth + +8.536862375794689 +47.35000313763834 +429.0571004371891 +-28.683462395821884 +81.95957679550318 +0 +120 +absolute + + + +0.01 +smooth + +8.536863072986176 +47.350003880030854 +429.05476100627084 +-28.881754554597254 +81.9337163584728 +0 +120 +absolute + + + +0.01 +smooth + +8.536863768431157 +47.35000462273087 +429.0524329621126 +-29.080277962294545 +81.90784719662352 +0 +120 +absolute + + + +0.01 +smooth + +8.536864462103907 +47.35000536572766 +429.0501165270924 +-29.279027499496344 +81.88197010954477 +0 +120 +absolute + + + +0.01 +smooth + +8.536865153978706 +47.35000610901052 +429.0478119235885 +-29.477998046785256 +81.8560858968261 +0 +120 +absolute + + + +0.01 +smooth + +8.53686584402983 +47.350006852568725 +429.04551937397844 +-29.677184484743865 +81.83019535805698 +0 +120 +absolute + + + +0.01 +smooth + +8.536866532231558 +47.35000759639156 +429.04323910064033 +-29.876581693954762 +81.8042992928269 +0 +120 +absolute + + + +0.01 +smooth + +8.536867218558166 +47.35000834046832 +429.04097132595257 +-30.076184555000534 +81.77839850072536 +0 +120 +absolute + + + +0.01 +smooth + +8.536867902983932 +47.3500090847883 +429.03871627229273 +-30.27598794846381 +81.75249378134185 +0 +120 +absolute + + + +0.01 +smooth + +8.536868585483134 +47.35000982934077 +429.036474162039 +-30.475986754927117 +81.72658593426587 +0 +120 +absolute + + + +0.01 +smooth + +8.536869266030049 +47.35001057411502 +429.03424521756926 +-30.676175854973074 +81.7006757590869 +0 +120 +absolute + + + +0.01 +smooth + +8.536869944598953 +47.35001131910034 +429.0320296612617 +-30.87655012918427 +81.67476405539445 +0 +120 +absolute + + + +0.01 +smooth + +8.536870621164125 +47.35001206428601 +429.0298277154941 +-31.077104458143303 +81.64885162277798 +0 +120 +absolute + + + +0.01 +smooth + +8.536871296259621 +47.35001280984706 +429.0276350660458 +-31.27792951404468 +81.6229253950059 +0 +120 +absolute + + + +0.01 +smooth + +8.536871970416527 +47.3500135559586 +429.02544738305716 +-31.479116015678724 +81.59697231288146 +0 +120 +absolute + + + +0.01 +smooth + +8.536872643604672 +47.35001430261009 +429.0232648654482 +-31.680658913521746 +81.57099318654663 +0 +120 +absolute + + + +0.01 +smooth + +8.536873315793889 +47.35001504979094 +429.021087712139 +-31.882553158050097 +81.54498882614327 +0 +120 +absolute + + + +0.01 +smooth + +8.536873986954005 +47.35001579749059 +429.01891612204935 +-32.08479369974001 +81.51896004181329 +0 +120 +absolute + + + +0.01 +smooth + +8.536874657054847 +47.35001654569849 +429.0167502940994 +-32.28737548906784 +81.49290764369857 +0 +120 +absolute + + + +0.01 +smooth + +8.536875326066243 +47.35001729440406 +429.014590427209 +-32.4902934765099 +81.46683244194104 +0 +120 +absolute + + + +0.01 +smooth + +8.536875993958022 +47.35001804359675 +429.0124367202983 +-32.69354261254249 +81.44073524668256 +0 +120 +absolute + + + +0.01 +smooth + +8.536876660700017 +47.35001879326599 +429.01028937228705 +-32.89711784764192 +81.41461686806508 +0 +120 +absolute + + + +0.01 +smooth + +8.536877326262053 +47.35001954340122 +429.0081485820954 +-33.10101413228452 +81.38847811623047 +0 +120 +absolute + + + +0.01 +smooth + +8.53687799061396 +47.350020293991875 +429.00601454864324 +-33.30522641694659 +81.36231980132065 +0 +120 +absolute + + + +0.01 +smooth + +8.536878653725562 +47.35002104502739 +429.00388747085077 +-33.509749652104446 +81.33614273347752 +0 +120 +absolute + + + +0.01 +smooth + +8.536879315566694 +47.35002179649719 +429.0017675476376 +-33.71457878823441 +81.3099477228429 +0 +120 +absolute + + + +0.01 +smooth + +8.536879976107183 +47.35002254839073 +428.9996549779239 +-33.919708775812765 +81.28373557955881 +0 +120 +absolute + + + +0.01 +smooth + +8.536880635316855 +47.35002330069744 +428.99754996062967 +-34.12513456531583 +81.25750711376709 +0 +120 +absolute + + + +0.01 +smooth + +8.536881293165543 +47.35002405340674 +428.99545269467484 +-34.330851107219914 +81.23126313560962 +0 +120 +absolute + + + +0.01 +smooth + +8.536881949623075 +47.35002480650811 +428.99336337897967 +-34.53685335200136 +81.20500445522839 +0 +120 +absolute + + + +0.01 +smooth + +8.53688260465927 +47.35002555999093 +428.9912822124635 +-34.743136250136416 +81.17873188276516 +0 +120 +absolute + + + +0.01 +smooth + +8.536883258243972 +47.35002631384471 +428.9892093940471 +-34.949694752101465 +81.15244622836195 +0 +120 +absolute + + + +0.01 +smooth + +8.536883910346997 +47.35002706805878 +428.9871451226497 +-35.15652380837277 +81.12614830216059 +0 +120 +absolute + + + +0.01 +smooth + +8.536884560938184 +47.35002782262268 +428.9850895971919 +-35.3636183694267 +81.09983891430304 +0 +120 +absolute + + + +0.01 +smooth + +8.536885209987354 +47.35002857752579 +428.98304301659334 +-35.5709733857395 +81.07351887493114 +0 +120 +absolute + + + +0.01 +smooth + +8.536885857464338 +47.35002933275754 +428.9810055797739 +-35.778583807787484 +81.0471889941868 +0 +120 +absolute + + + +0.01 +smooth + +8.536886503338966 +47.35003008830741 +428.97897748565407 +-35.98644458604701 +81.020850082212 +0 +120 +absolute + + + +0.01 +smooth + +8.536887147581062 +47.35003084416479 +428.9769589331532 +-36.194550670994346 +80.99450294914851 +0 +120 +absolute + + + +0.01 +smooth + +8.536887790160463 +47.350031600319156 +428.9749501211917 +-36.402897013105836 +80.96814840513832 +0 +120 +absolute + + + +0.01 +smooth + +8.536888431046991 +47.350032356759925 +428.9729512486893 +-36.61147856285777 +80.94178726032331 +0 +120 +absolute + + + +0.01 +smooth + +8.536889070210478 +47.350033113476535 +428.9709625145662 +-36.820290270726474 +80.91542032484539 +0 +120 +absolute + + + +0.01 +smooth + +8.536889707620752 +47.35003387045842 +428.96898411774225 +-37.02932708718828 +80.8890484088464 +0 +120 +absolute + + + +0.01 +smooth + +8.53689034324764 +47.35003462769502 +428.96701625713746 +-37.238583962719446 +80.86267232246831 +0 +120 +absolute + + + +0.01 +smooth + +8.53689097706097 +47.35003538517577 +428.9650591316718 +-37.4480558477963 +80.836292875853 +0 +120 +absolute + + + +0.01 +smooth + +8.536891609030572 +47.3500361428901 +428.9631129402652 +-37.65773769289517 +80.80991087914238 +0 +120 +absolute + + + +0.01 +smooth + +8.53689223912628 +47.35003690082746 +428.9611778818379 +-37.86762444849236 +80.78352714247832 +0 +120 +absolute + + + +0.01 +smooth + +8.536892867317913 +47.35003765897727 +428.9592541553095 +-38.07771106506418 +80.75714247600274 +0 +120 +absolute + + + +0.01 +smooth + +8.536893493575308 +47.35003841732899 +428.95734195960017 +-38.28799249308694 +80.73075768985754 +0 +120 +absolute + + + +0.01 +smooth + +8.53689411786829 +47.35003917587203 +428.95544149362985 +-38.49846368303696 +80.7043735941846 +0 +120 +absolute + + + +0.01 +smooth + +8.536894740166684 +47.35003993459583 +428.9535529563185 +-38.70911958539053 +80.67799099912585 +0 +120 +absolute + + + +0.01 +smooth + +8.536895360440326 +47.350040693489845 +428.9516765465863 +-38.919955150624034 +80.65161071482318 +0 +120 +absolute + + + +0.01 +smooth + +8.53689597865904 +47.35004145254349 +428.94981246335306 +-39.13096532921368 +80.62523355141846 +0 +120 +absolute + + + +0.01 +smooth + +8.536896594792655 +47.35004221174623 +428.9479609055387 +-39.34214507163583 +80.59886031905364 +0 +120 +absolute + + + +0.01 +smooth + +8.536897208811002 +47.35004297108746 +428.9461220720633 +-39.55348932836678 +80.57249182787058 +0 +120 +absolute + + + +0.01 +smooth + +8.536897820683906 +47.35004373055666 +428.94429616184675 +-39.76499304988286 +80.54612888801122 +0 +120 +absolute + + + +0.01 +smooth + +8.5368984303812 +47.35004449014323 +428.9424833738092 +-39.976651186660376 +80.51977230961742 +0 +120 +absolute + + + +0.01 +smooth + +8.53689903787271 +47.35004524983663 +428.94068390687056 +-40.18845868917564 +80.4934229028311 +0 +120 +absolute + + + +0.01 +smooth + +8.536899643128265 +47.3500460096263 +428.9388979599506 +-40.40041050790495 +80.46708147779415 +0 +120 +absolute + + + +0.01 +smooth + +8.536900246117694 +47.350046769501645 +428.9371257319697 +-40.61250159332467 +80.44074884464848 +0 +120 +absolute + + + +0.01 +smooth + +8.536900846810827 +47.35004752945213 +428.93536742184745 +-40.82472689591104 +80.41442581353598 +0 +120 +absolute + + + +0.01 +smooth + +8.536901445177488 +47.35004828946717 +428.933623228504 +-41.03708136614039 +80.38811319459856 +0 +120 +absolute + + + +0.01 +smooth + +8.536902041187513 +47.350049049536224 +428.93189335085947 +-41.249559954489044 +80.3618117979781 +0 +120 +absolute + + + +0.01 +smooth + +8.536902634810724 +47.350049809648716 +428.93017798783364 +-41.46215761143332 +80.33552243381656 +0 +120 +absolute + + + +0.01 +smooth + +8.536903226016953 +47.35005056979408 +428.9284773383465 +-41.67486928744951 +80.30924591225576 +0 +120 +absolute + + + +0.01 +smooth + +8.536903815485097 +47.35005133014125 +428.92678675653576 +-41.887779385245196 +80.28296923020388 +0 +120 +absolute + + + +0.01 +smooth + +8.536904403889448 +47.35005209085926 +428.9251015946941 +-42.10097240040281 +80.2566793878336 +0 +120 +absolute + + + +0.01 +smooth + +8.536904991192921 +47.35005285193773 +428.9234220489743 +-42.31444342271103 +80.23037720018378 +0 +120 +absolute + + + +0.01 +smooth + +8.536905577358423 +47.35005361336627 +428.9217483155289 +-42.528187541958346 +80.20406348229322 +0 +120 +absolute + + + +0.01 +smooth + +8.536906162348878 +47.3500543751345 +428.9200805905102 +-42.742199847933456 +80.17773904920071 +0 +120 +absolute + + + +0.01 +smooth + +8.536906746127192 +47.35005513723201 +428.91841907007125 +-42.956475430424966 +80.15140471594508 +0 +120 +absolute + + + +0.01 +smooth + +8.536907328656286 +47.35005589964845 +428.9167639503646 +-43.171009379221495 +80.1250612975651 +0 +120 +absolute + + + +0.01 +smooth + +8.536907909899071 +47.35005666237341 +428.9151154275426 +-43.385796784111655 +80.09870960909961 +0 +120 +absolute + + + +0.01 +smooth + +8.536908489818465 +47.350057425396514 +428.913473697758 +-43.600832734884065 +80.07235046558742 +0 +120 +absolute + + + +0.01 +smooth + +8.536909068377378 +47.350058188707365 +428.91183895716364 +-43.81611232132733 +80.04598468206734 +0 +120 +absolute + + + +0.01 +smooth + +8.53690964553873 +47.3500589522956 +428.91021140191174 +-44.0316306332301 +80.01961307357816 +0 +120 +absolute + + + +0.01 +smooth + +8.536910221265432 +47.35005971615082 +428.9085912281552 +-44.247382760381 +79.9932364551587 +0 +120 +absolute + + + +0.01 +smooth + +8.536910795520397 +47.35006048026263 +428.90697863204656 +-44.463363792568586 +79.96685564184774 +0 +120 +absolute + + + +0.01 +smooth + +8.53691136826654 +47.350061244620655 +428.90537380973836 +-44.679568819581505 +79.94047144868415 +0 +120 +absolute + + + +0.01 +smooth + +8.536911939466778 +47.350062009214504 +428.90377695738334 +-44.89599293120837 +79.91408469070667 +0 +120 +absolute + + + +0.01 +smooth + +8.536912509084022 +47.35006277403377 +428.9021882711339 +-45.11263121723781 +79.88769618295414 +0 +120 +absolute + + + +0.01 +smooth + +8.536913077081195 +47.35006353906814 +428.9006079471431 +-45.329478767458454 +79.86130674046541 +0 +120 +absolute + + + +0.01 +smooth + +8.536913643421197 +47.35006430430713 +428.89903618156296 +-45.54653067165887 +79.8349171782792 +0 +120 +absolute + + + +0.01 +smooth + +8.536914208066959 +47.35006506974044 +428.8974731705466 +-45.76378201962774 +79.8085283114344 +0 +120 +absolute + + + +0.01 +smooth + +8.53691477098138 +47.35006583535761 +428.8959191102462 +-45.98122790115365 +79.78214095496975 +0 +120 +absolute + + + +0.01 +smooth + +8.536915332127382 +47.350066601148306 +428.89437419681474 +-46.1988634060252 +79.7557559239241 +0 +120 +absolute + + + +0.01 +smooth + +8.536915891467885 +47.350067367102135 +428.89283862640474 +-46.41668362403103 +79.7293740333363 +0 +120 +absolute + + + +0.01 +smooth + +8.53691644896579 +47.35006813320867 +428.8913125951686 +-46.63468364495973 +79.70299609824505 +0 +120 +absolute + + + +0.01 +smooth + +8.536917004584026 +47.35006889945758 +428.8897962992594 +-46.85285855859996 +79.67662293368926 +0 +120 +absolute + + + +0.01 +smooth + +8.536917558285495 +47.35006966583845 +428.8882899348292 +-47.071203454740285 +79.65025535470765 +0 +120 +absolute + + + +0.01 +smooth + +8.53691811003312 +47.35007043234091 +428.886793698031 +-47.28971342316937 +79.62389417633912 +0 +120 +absolute + + + +0.01 +smooth + +8.536918659789812 +47.350071198954545 +428.8853077850173 +-47.5083835536758 +79.5975402136224 +0 +120 +absolute + + + +0.01 +smooth + +8.536919207518487 +47.350071965669 +428.8838323919406 +-47.72720893604826 +79.57119428159633 +0 +120 +absolute + + + +0.01 +smooth + +8.536919753182058 +47.35007273247386 +428.8823677149536 +-47.94618466007527 +79.54485719529974 +0 +120 +absolute + + + +0.01 +smooth + +8.53692029674344 +47.35007349935877 +428.88091395020905 +-48.165305815545466 +79.51852976977142 +0 +120 +absolute + + + +0.01 +smooth + +8.536920838165548 +47.35007426631333 +428.8794712938594 +-48.38456749224752 +79.49221282005016 +0 +120 +absolute + + + +0.01 +smooth + +8.536921377411296 +47.35007503332715 +428.87803994205734 +-48.60396477997 +79.4659071611748 +0 +120 +absolute + + + +0.01 +smooth + +8.5369219144436 +47.350075800389845 +428.87662009095544 +-48.823492768501545 +79.43961360818412 +0 +120 +absolute + + + +0.01 +smooth + +8.53692244922537 +47.35007656749103 +428.87521193670636 +-49.043146547630755 +79.41333297611695 +0 +120 +absolute + + + +0.01 +smooth + +8.536922981719524 +47.35007733462032 +428.87381567546265 +-49.26292120714628 +79.38706608001209 +0 +120 +absolute + + + +0.01 +smooth + +8.536923511888977 +47.35007810176733 +428.8724315033769 +-49.482811836836696 +79.36081373490833 +0 +120 +absolute + + + +0.01 +smooth + +8.536924039696643 +47.35007886892168 +428.87105961660194 +-49.702813526490694 +79.33457675584452 +0 +120 +absolute + + + +0.01 +smooth + +8.536924565105435 +47.35007963607297 +428.8697002112901 +-49.9229213658968 +79.30835595785945 +0 +120 +absolute + + + +0.01 +smooth + +8.53692508807827 +47.350080403210825 +428.8683534835942 +-50.14313044484366 +79.2821521559919 +0 +120 +absolute + + + +0.01 +smooth + +8.53692560857806 +47.35008117032485 +428.86701962966674 +-50.363435853119896 +79.25596616528071 +0 +120 +absolute + + + +0.01 +smooth + +8.53692612656772 +47.35008193740467 +428.86569884566035 +-50.58383268051415 +79.22979880076468 +0 +120 +absolute + + + +0.01 +smooth + +8.536926642010165 +47.35008270443989 +428.86439132772773 +-50.804316016814994 +79.20365087748263 +0 +120 +absolute + + + +0.01 +smooth + +8.53692715486831 +47.350083471420135 +428.8630972720214 +-51.024880951811085 +79.17752321047335 +0 +120 +absolute + + + +0.01 +smooth + +8.53692766510507 +47.350084238335 +428.86181687469394 +-51.24552257529102 +79.15141661477567 +0 +120 +absolute + + + +0.01 +smooth + +8.536928172683355 +47.350085005174115 +428.86055033189814 +-51.46623597704345 +79.12533190542837 +0 +120 +absolute + + + +0.01 +smooth + +8.536928677566086 +47.350085771927084 +428.8592978397865 +-51.687016246856935 +79.09926989747026 +0 +120 +absolute + + + +0.01 +smooth + +8.536929179716175 +47.35008653858354 +428.85805959451164 +-51.907858474520125 +79.07323140594016 +0 +120 +absolute + + + +0.01 +smooth + +8.536929679096534 +47.35008730513307 +428.85683579222615 +-52.12875774982162 +79.0472172458769 +0 +120 +absolute + + + +0.01 +smooth + +8.536930175670081 +47.3500880715653 +428.8556266290826 +-52.34970916255005 +79.02122823231927 +0 +120 +absolute + + + +0.01 +smooth + +8.536930669399728 +47.350088837869855 +428.8544323012338 +-52.57070780249403 +78.99526518030608 +0 +120 +absolute + + + +0.01 +smooth + +8.53693116024839 +47.350089604036334 +428.8532530048322 +-52.79174875944218 +78.96932890487611 +0 +120 +absolute + + + +0.01 +smooth + +8.536931649124837 +47.350090370229694 +428.85208336796296 +-53.0129105524624 +78.94340618434892 +0 +120 +absolute + + + +0.01 +smooth + +8.536932136930215 +47.35009113661497 +428.8509180351263 +-53.23427184287991 +78.9174837970714 +0 +120 +absolute + + + +0.01 +smooth + +8.536932623616014 +47.35009190318195 +428.8497572270978 +-53.455827933869074 +78.89156255812352 +0 +120 +absolute + + + +0.01 +smooth + +8.536933109133727 +47.350092669920365 +428.848601164653 +-53.67757412860444 +78.86564328258518 +0 +120 +absolute + + + +0.01 +smooth + +8.53693359343484 +47.350093436819996 +428.84745006856707 +-53.899505730260486 +78.83972678553627 +0 +120 +absolute + + + +0.01 +smooth + +8.53693407647084 +47.35009420387062 +428.84630415961567 +-54.12161804201169 +78.81381388205673 +0 +120 +absolute + + + +0.01 +smooth + +8.536934558193218 +47.35009497106199 +428.84516365857417 +-54.34390636703253 +78.78790538722647 +0 +120 +absolute + + + +0.01 +smooth + +8.53693503855346 +47.35009573838388 +428.844028786218 +-54.56636600849748 +78.76200211612539 +0 +120 +absolute + + + +0.01 +smooth + +8.53693551750306 +47.35009650582604 +428.8428997633227 +-54.78899226958105 +78.73610488383345 +0 +120 +absolute + + + +0.01 +smooth + +8.536935994993502 +47.35009727337824 +428.8417768106637 +-55.011780453457696 +78.71021450543056 +0 +120 +absolute + + + +0.01 +smooth + +8.53693647097628 +47.35009804103025 +428.8406601490164 +-55.23472586330197 +78.6843317959966 +0 +120 +absolute + + + +0.01 +smooth + +8.536936945402875 +47.35009880877182 +428.8395499991562 +-55.45782380228824 +78.65845757061153 +0 +120 +absolute + + + +0.01 +smooth + +8.536937418224781 +47.35009957659274 +428.8384465818586 +-55.68106957359103 +78.6325926443552 +0 +120 +absolute + + + +0.01 +smooth + +8.536937889393485 +47.35010034448274 +428.8373501178991 +-55.90445848038483 +78.60673783230763 +0 +120 +absolute + + + +0.01 +smooth + +8.536938358860477 +47.350101112431624 +428.8362608280531 +-56.12798582584414 +78.58089394954867 +0 +120 +absolute + + + +0.01 +smooth + +8.536938826577245 +47.35010188042912 +428.835178933096 +-56.35164691314341 +78.55506181115821 +0 +120 +absolute + + + +0.01 +smooth + +8.536939292495282 +47.35010264846503 +428.8341046538035 +-56.57543704545717 +78.52924223221629 +0 +120 +absolute + + + +0.01 +smooth + +8.536939756566065 +47.35010341652907 +428.8330382109505 +-56.79935152595983 +78.50343602780264 +0 +120 +absolute + + + +0.01 +smooth + +8.536940218741098 +47.350104184611055 +428.83197982531317 +-57.023385657825976 +78.47764401299735 +0 +120 +absolute + + + +0.01 +smooth + +8.536940678971858 +47.350104952700725 +428.83092971766644 +-57.24753474422998 +78.45186700288028 +0 +120 +absolute + + + +0.01 +smooth + +8.53694113720984 +47.35010572078784 +428.82988810878584 +-57.47179408834636 +78.4261058125313 +0 +120 +absolute + + + +0.01 +smooth + +8.53694159340653 +47.350106488862174 +428.8288552194472 +-57.696158993349634 +78.40036125703041 +0 +120 +absolute + + + +0.01 +smooth + +8.536942047513415 +47.350107256913475 +428.8278312704252 +-57.920624762414214 +78.37463415145741 +0 +120 +absolute + + + +0.01 +smooth + +8.536942499481992 +47.35010802493156 +428.82681648249604 +-58.14518669871466 +78.34892531089238 +0 +120 +absolute + + + +0.01 +smooth + +8.536942949263738 +47.35010879290611 +428.82581107643466 +-58.369840105425396 +78.32323555041506 +0 +120 +absolute + + + +0.01 +smooth + +8.536943396810152 +47.35010956082696 +428.8248152730169 +-58.594580285720944 +78.29756568510552 +0 +120 +absolute + + + +0.01 +smooth + +8.536943842072716 +47.35011032868385 +428.823829293018 +-58.819402542775805 +78.2719165300436 +0 +120 +absolute + + + +0.01 +smooth + +8.536944285002924 +47.350111096466534 +428.82285335721355 +-59.04430217976437 +78.24628890030921 +0 +120 +absolute + + + +0.01 +smooth + +8.53694472555226 +47.35011186416479 +428.8218876863787 +-59.269274499861176 +78.2206836109823 +0 +120 +absolute + + + +0.01 +smooth + +8.536945163672218 +47.350112631768376 +428.8209325012891 +-59.494314806240716 +78.19510147714279 +0 +120 +absolute + + + +0.01 +smooth + +8.536945599314281 +47.35011339926706 +428.81998802272034 +-59.71941840207745 +78.16954331387058 +0 +120 +absolute + + + +0.01 +smooth + +8.536946032429942 +47.35011416665061 +428.81905447144754 +-59.94458059054587 +78.14400993624557 +0 +120 +absolute + + + +0.01 +smooth + +8.536946462970686 +47.35011493390878 +428.8181320682465 +-60.16979667482046 +78.11850215934771 +0 +120 +absolute + + + +0.01 +smooth + +8.536946890888007 +47.350115701031356 +428.81722103389234 +-60.395061958075694 +78.0930207982569 +0 +120 +absolute + + + +0.01 +smooth + +8.536947316133388 +47.35011646800808 +428.8163215891607 +-60.62037174348606 +78.06756666805308 +0 +120 +absolute + + + +0.01 +smooth + +8.536947738658323 +47.35011723482873 +428.8154339548271 +-60.845721334226084 +78.04214058381612 +0 +120 +absolute + + + +0.01 +smooth + +8.536948158414296 +47.350118001483054 +428.81455835166673 +-61.07110603347016 +78.016743360626 +0 +120 +absolute + + + +0.01 +smooth + +8.536948575352799 +47.35011876796082 +428.81369500045525 +-61.2965211443928 +77.9913758135626 +0 +120 +absolute + + + +0.01 +smooth + +8.53694898942532 +47.35011953425182 +428.81284412196806 +-61.521961970168505 +77.96603875770583 +0 +120 +absolute + + + +0.01 +smooth + +8.536949400583346 +47.35012030034579 +428.81200593698054 +-61.74742381397175 +77.94073300813562 +0 +120 +absolute + + + +0.01 +smooth + +8.53694980877837 +47.350121066232504 +428.81118066626834 +-61.97290197897701 +77.91545937993192 +0 +120 +absolute + + + +0.01 +smooth + +8.536950213961877 +47.35012183190173 +428.81036853060664 +-62.19839176835879 +77.89021868817458 +0 +120 +absolute + + + +0.01 +smooth + +8.536950616085358 +47.35012259734323 +428.80956975077106 +-62.42388848529154 +77.86501174794357 +0 +120 +absolute + + + +0.01 +smooth + +8.536951015100298 +47.35012336254677 +428.808784547537 +-62.649387432949794 +77.83983937431879 +0 +120 +absolute + + + +0.01 +smooth + +8.536951410958192 +47.3501241275021 +428.80801314167985 +-62.87488391450796 +77.81470238238015 +0 +120 +absolute + + + +0.01 +smooth + +8.536951803610524 +47.350124892199005 +428.8072557539752 +-63.10037323314056 +77.78960158720758 +0 +120 +absolute + + + +0.01 +smooth + +8.536952193008782 +47.35012565662724 +428.80651260519835 +-63.325850692022065 +77.764537803881 +0 +120 +absolute + + + +0.01 +smooth + +8.536952579104458 +47.35012642077657 +428.80578391612494 +-63.551311594326975 +77.73951184748033 +0 +120 +absolute + + + +0.01 +smooth + +8.536952961849039 +47.35012718463676 +428.80506990753014 +-63.77675124322975 +77.71452453308545 +0 +120 +absolute + + + +0.01 +smooth + +8.536953341194014 +47.350127948197574 +428.8043708001897 +-64.00216494190488 +77.68957667577632 +0 +120 +absolute + + + +0.01 +smooth + +8.536953717090874 +47.35012871144878 +428.8036868148788 +-64.22754799352685 +77.66466909063286 +0 +120 +absolute + + + +0.01 +smooth + +8.536954090856108 +47.35012947455417 +428.8030108693351 +-64.45297337593647 +77.63978804055782 +0 +120 +absolute + + + +0.01 +smooth + +8.536954463791522 +47.35013023767761 +428.8023359490885 +-64.67851425879304 +77.61491978654959 +0 +120 +absolute + + + +0.01 +smooth + +8.536954835826567 +47.35013100080893 +428.801662376603 +-64.90416623299897 +77.59006514083153 +0 +120 +absolute + + + +0.01 +smooth + +8.536955206890683 +47.35013176393798 +428.80099047434254 +-65.12992488945667 +77.56522491562694 +0 +120 +absolute + + + +0.01 +smooth + +8.536955576913337 +47.3501325270546 +428.80032056477154 +-65.35578581906853 +77.54039992315919 +0 +120 +absolute + + + +0.01 +smooth + +8.536955945823971 +47.35013329014865 +428.79965297035375 +-65.58174461273695 +77.51559097565159 +0 +120 +absolute + + + +0.01 +smooth + +8.536956313552034 +47.35013405320995 +428.7989880135531 +-65.8077968613643 +77.49079888532744 +0 +120 +absolute + + + +0.01 +smooth + +8.536956680026984 +47.350134816228376 +428.79832601683415 +-66.03393815585301 +77.46602446441013 +0 +120 +absolute + + + +0.01 +smooth + +8.53695704517827 +47.350135579193775 +428.7976673026606 +-66.26016408710545 +77.44126852512298 +0 +120 +absolute + + + +0.01 +smooth + +8.536957408935338 +47.35013634209595 +428.7970121934965 +-66.48647024602403 +77.4165318796893 +0 +120 +absolute + + + +0.01 +smooth + +8.536957771227641 +47.35013710492479 +428.79636101180614 +-66.7128522235111 +77.39181534033244 +0 +120 +absolute + + + +0.01 +smooth + +8.536958131984633 +47.350137867670114 +428.79571408005336 +-66.93930561046908 +77.36711971927573 +0 +120 +absolute + + + +0.01 +smooth + +8.536958491135762 +47.350138630321766 +428.79507172070214 +-67.16582599780035 +77.34244582874248 +0 +120 +absolute + + + +0.01 +smooth + +8.53695884861048 +47.350139392869615 +428.7944342562168 +-67.39240897640732 +77.31779448095607 +0 +120 +absolute + + + +0.01 +smooth + +8.536959204338237 +47.35014015530347 +428.7938020090612 +-67.61905013719237 +77.29316648813978 +0 +120 +absolute + + + +0.01 +smooth + +8.536959558248487 +47.350140917613224 +428.7931753016996 +-67.84574507105792 +77.26856266251698 +0 +120 +absolute + + + +0.01 +smooth + +8.536959910270678 +47.35014167978869 +428.79255445659595 +-68.07248936890633 +77.24398381631102 +0 +120 +absolute + + + +0.01 +smooth + +8.536960260334261 +47.35014244181972 +428.7919397962142 +-68.29927862164004 +77.21943076174514 +0 +120 +absolute + + + +0.01 +smooth + +8.536960608368686 +47.350143203696156 +428.79133164301857 +-68.52610842016138 +77.19490431104279 +0 +120 +absolute + + + +0.01 +smooth + +8.53696095430341 +47.35014396540786 +428.790730319473 +-68.75297435537279 +77.17040527642726 +0 +120 +absolute + + + +0.01 +smooth + +8.536961298067874 +47.35014472694464 +428.7901361480416 +-68.9798720181766 +77.14593447012182 +0 +120 +absolute + + + +0.01 +smooth + +8.536961639591539 +47.35014548829638 +428.78954945118846 +-69.20679699947526 +77.12149270434988 +0 +120 +absolute + + + +0.01 +smooth + +8.536961978803845 +47.35014624945289 +428.78897055137753 +-69.43374489017114 +77.09708079133473 +0 +120 +absolute + + + +0.01 +smooth + +8.536962315634256 +47.350147010404065 +428.78839977107316 +-69.66071128116667 +77.07269954329976 +0 +120 +absolute + + + +0.01 +smooth + +8.536962650012214 +47.3501477711397 +428.787837432739 +-69.8876917633642 +77.04834977246824 +0 +120 +absolute + + + +0.01 +smooth + +8.536962981867172 +47.35014853164967 +428.78728385883943 +-70.11468192766617 +77.02403229106353 +0 +120 +absolute + + + +0.01 +smooth + +8.536963311128577 +47.350149291923806 +428.78673937183834 +-70.34167736497491 +76.99974791130894 +0 +120 +absolute + + + +0.01 +smooth + +8.536963637725888 +47.350150051951964 +428.7862042941999 +-70.56867366619284 +76.97549744542783 +0 +120 +absolute + + + +0.01 +smooth + +8.53696396158855 +47.35015081172398 +428.78567894838795 +-70.79566642222235 +76.95128170564355 +0 +120 +absolute + + + +0.01 +smooth + +8.536964282646018 +47.35015157122971 +428.7851636568668 +-71.02265122396585 +76.92710150417939 +0 +120 +absolute + + + +0.01 +smooth + +8.536964600827739 +47.35015233045898 +428.7846587421004 +-71.24962366232572 +76.9029576532587 +0 +120 +absolute + + + +0.01 +smooth + +8.536964916063164 +47.35015308940165 +428.7841645265529 +-71.47657932820434 +76.87885096510482 +0 +120 +absolute + + + +0.01 +smooth + +8.536965228281748 +47.35015384804757 +428.78368133268816 +-71.70351381250411 +76.85478225194105 +0 +120 +absolute + + + +0.01 +smooth + +8.53696553741294 +47.350154606386575 +428.7832094829704 +-71.93042270612744 +76.83075232599076 +0 +120 +absolute + + + +0.01 +smooth + +8.536965843386186 +47.3501553644085 +428.78274929986367 +-72.15730159997676 +76.80676199947726 +0 +120 +absolute + + + +0.01 +smooth + +8.536966146130947 +47.350156122103215 +428.78230110583195 +-72.38414608495437 +76.78281208462391 +0 +120 +absolute + + + +0.01 +smooth + +8.536966445576665 +47.350156879460556 +428.7818652233393 +-72.61095175196269 +76.75890339365402 +0 +120 +absolute + + + +0.01 +smooth + +8.536966741652794 +47.35015763647036 +428.78144197484994 +-72.83771419190415 +76.73503673879094 +0 +120 +absolute + + + +0.01 +smooth + +8.536967034288784 +47.35015839312247 +428.7810316828277 +-73.06442899568113 +76.71121293225796 +0 +120 +absolute + + + +0.01 +smooth + +8.536967323414089 +47.35015914940675 +428.78063466973686 +-73.29109175419599 +76.68743278627846 +0 +120 +absolute + + + +0.01 +smooth + +8.536967608958157 +47.350159905313035 +428.7802512580413 +-73.51769805835116 +76.66369711307578 +0 +120 +absolute + + + +0.01 +smooth + +8.536967890850441 +47.350160660831165 +428.7798817702051 +-73.74424349904902 +76.64000672487319 +0 +120 +absolute + + + +0.01 +smooth + +8.53696816902039 +47.35016141595099 +428.7795265286925 +-73.970723667192 +76.6163624338941 +0 +120 +absolute + + + +0.01 +smooth + +8.536968443397457 +47.35016217066236 +428.7791858559673 +-74.19713415368244 +76.59276505236177 +0 +120 +absolute + + + +0.01 +smooth + +8.53696871391109 +47.3501629249551 +428.77886007449376 +-74.42347054942272 +76.56921539249959 +0 +120 +absolute + + + +0.01 +smooth + +8.536968980490743 +47.35016367881909 +428.7785495067358 +-74.64972844531526 +76.54571426653087 +0 +120 +absolute + + + +0.01 +smooth + +8.536969243065863 +47.350164432244135 +428.7782544751575 +-74.87590343226248 +76.52226248667893 +0 +120 +absolute + + + +0.01 +smooth + +8.536969501565906 +47.35016518522012 +428.7779753022231 +-75.10199110116673 +76.49886086516713 +0 +120 +absolute + + + +0.01 +smooth + +8.536969755920317 +47.35016593773686 +428.77771231039645 +-75.32798704293042 +76.47551021421877 +0 +120 +absolute + + + +0.01 +smooth + +8.536970006058553 +47.350166689784224 +428.77746582214166 +-75.55388684845595 +76.45221134605721 +0 +120 +absolute + + + +0.01 +smooth + +8.536970251910063 +47.35016744135203 +428.77723615992284 +-75.77968610864573 +76.42896507290577 +0 +120 +absolute + + + +0.01 +smooth + +8.536970495755359 +47.35016819260622 +428.7770154469285 +-76.00545248216432 +76.4057568346318 +0 +120 +absolute + + + +0.01 +smooth + +8.536970739833077 +47.35016894371268 +428.7767956835213 +-76.23125386670627 +76.3825720695223 +0 +120 +absolute + + + +0.01 +smooth + +8.536970984009864 +47.350169694661275 +428.77657700792685 +-76.45708621171876 +76.35941158742997 +0 +120 +absolute + + + +0.01 +smooth + +8.536971228152355 +47.350170445441826 +428.7763595583707 +-76.68294546664902 +76.33627619820761 +0 +120 +absolute + + + +0.01 +smooth + +8.536971472127195 +47.350171196044144 +428.7761434730783 +-76.90882758094425 +76.31316671170795 +0 +120 +absolute + + + +0.01 +smooth + +8.536971715801021 +47.3501719464581 +428.77592889027517 +-77.13472850405165 +76.29008393778372 +0 +120 +absolute + + + +0.01 +smooth + +8.536971959040478 +47.35017269667351 +428.77571594818687 +-77.36064418541845 +76.26702868628776 +0 +120 +absolute + + + +0.01 +smooth + +8.5369722017122 +47.350173446680174 +428.77550478503855 +-77.58657057449179 +76.2440017670727 +0 +120 +absolute + + + +0.01 +smooth + +8.536972443682835 +47.350174196468 +428.77529553905623 +-77.812503620719 +76.22100398999137 +0 +120 +absolute + + + +0.01 +smooth + +8.536972684819018 +47.35017494602673 +428.7750883484651 +-78.03843927354716 +76.19803616489651 +0 +120 +absolute + + + +0.01 +smooth + +8.53697292498739 +47.350175695346266 +428.77488335149076 +-78.26437348242352 +76.17509910164088 +0 +120 +absolute + + + +0.01 +smooth + +8.536973164054595 +47.35017644441643 +428.7746806863587 +-78.49030219679533 +76.1521936100772 +0 +120 +absolute + + + +0.01 +smooth + +8.536973401887272 +47.35017719322701 +428.7744804912942 +-78.71622136610969 +76.12932050005823 +0 +120 +absolute + + + +0.01 +smooth + +8.536973638352064 +47.35017794176791 +428.77428290452315 +-78.94212693981395 +76.10648058143678 +0 +120 +absolute + + + +0.01 +smooth + +8.5369738733156 +47.35017869002888 +428.77408806427064 +-79.16801486735517 +76.08367466406553 +0 +120 +absolute + + + +0.01 +smooth + +8.53697410664454 +47.350179437999834 +428.77389610876276 +-79.39388109818069 +76.06090355779727 +0 +120 +absolute + + + +0.01 +smooth + +8.536974338205507 +47.35018018567055 +428.7737071762243 +-79.61972158173768 +76.03816807248472 +0 +120 +absolute + + + +0.01 +smooth + +8.536974567865148 +47.35018093303088 +428.77352140488114 +-79.84553226747326 +76.01546901798066 +0 +120 +absolute + + + +0.01 +smooth + +8.53697479549011 +47.350181680070676 +428.77333893295895 +-80.07130910483474 +75.99280720413789 +0 +120 +absolute + + + +0.01 +smooth + +8.536975020947018 +47.35018242677972 +428.7731598986827 +-80.29704804326924 +75.97018344080905 +0 +120 +absolute + + + +0.01 +smooth + +8.536975244102532 +47.350183173147904 +428.77298444027855 +-80.52274503222405 +75.947598537847 +0 +120 +absolute + + + +0.01 +smooth + +8.536975464823275 +47.350183919165005 +428.7728126959714 +-80.7483960211463 +75.9250533051044 +0 +120 +absolute + + + +0.01 +smooth + +8.536975682975902 +47.350184664820915 +428.7726448039873 +-80.9739969594833 +75.9025485524341 +0 +120 +absolute + + + +0.01 +smooth + +8.536975898427041 +47.35018541010542 +428.77248090255125 +-81.19954379668214 +75.88008508968876 +0 +120 +absolute + + + +0.01 +smooth + +8.53697611104334 +47.35018615500835 +428.77232112988884 +-81.42503248219012 +75.85766372672117 +0 +120 +absolute + + + +0.01 +smooth + +8.536976320691442 +47.350186899519585 +428.772165624226 +-81.65045896545439 +75.83528527338412 +0 +120 +absolute + + + +0.01 +smooth + +8.53697652723798 +47.350187643628914 +428.7720145237878 +-81.87581919592216 +75.8129505395303 +0 +120 +absolute + + + +0.01 +smooth + +8.536976730549599 +47.3501883873262 +428.7718679667999 +-82.10110912304064 +75.79066033501252 +0 +120 +absolute + + + +0.01 +smooth + +8.536976930492937 +47.35018913060125 +428.77172609148766 +-82.32632469625706 +75.76841546968349 +0 +120 +absolute + + + +0.01 +smooth + +8.536977126934639 +47.3501898734439 +428.77158903607676 +-82.55146186501861 +75.74621675339597 +0 +120 +absolute + + + +0.01 +smooth + +8.536977319741343 +47.35019061584401 +428.77145693879254 +-82.77651657877252 +75.72406499600274 +0 +120 +absolute + + + +0.01 +smooth + +8.536977508779687 +47.35019135779138 +428.77132993786074 +-83.00148478696593 +75.70196100735652 +0 +120 +absolute + + + +0.01 +smooth + +8.536977693916317 +47.35019209927586 +428.77120817150666 +-83.22636243904611 +75.67990559731007 +0 +120 +absolute + + + +0.01 +smooth + +8.536977875017868 +47.350192840287285 +428.7710917779558 +-83.4511454844603 +75.65789957571613 +0 +120 +absolute + + + +0.01 +smooth + +8.536978051950985 +47.35019358081548 +428.7709808954338 +-83.67582987265561 +75.63594375242751 +0 +120 +absolute + + + +0.01 +smooth + +8.536978224582304 +47.35019432085028 +428.770875662166 +-83.90041155307931 +75.6140389372969 +0 +120 +absolute + + + +0.01 +smooth + +8.53697839277847 +47.350195060381516 +428.77077621637807 +-84.12488647517856 +75.59218594017706 +0 +120 +absolute + + + +0.01 +smooth + +8.536978556406122 +47.35019579939903 +428.7706826962953 +-84.34925058840061 +75.57038557092079 +0 +120 +absolute + + + +0.01 +smooth + +8.536978715331902 +47.35019653789264 +428.7705952401434 +-84.57349984219265 +75.54863863938081 +0 +120 +absolute + + + +0.01 +smooth + +8.536978869422446 +47.35019727585219 +428.77051398614776 +-84.7976301860019 +75.52694595540984 +0 +120 +absolute + + + +0.01 +smooth + +8.5369790185444 +47.35019801326751 +428.77043907253386 +-85.02163756927554 +75.50530832886069 +0 +120 +absolute + + + +0.01 +smooth + +8.5369791625644 +47.35019875012844 +428.7703706375272 +-85.24551794146083 +75.48372656958608 +0 +120 +absolute + + + +0.01 +smooth + +8.536979301349088 +47.3501994864248 +428.77030881935343 +-85.4692672520049 +75.46220148743878 +0 +120 +absolute + + + +0.01 +smooth + +8.536979434765108 +47.35020022214643 +428.7702537562378 +-85.692881450355 +75.44073389227151 +0 +120 +absolute + + + +0.01 +smooth + +8.536979562679099 +47.35020095728316 +428.7702055864061 +-85.91635648595835 +75.41932459393706 +0 +120 +absolute + + + +0.01 +smooth + +8.536979684957696 +47.35020169182482 +428.7701644480836 +-86.1396883082621 +75.39797440228817 +0 +120 +absolute + + + +0.01 +smooth + +8.536979801467547 +47.35020242576125 +428.7701304794959 +-86.36287286671353 +75.3766841271776 +0 +120 +absolute + + + +0.01 +smooth + +8.536979912075289 +47.35020315908229 +428.7701038188685 +-86.5859061107598 +75.3554545784581 +0 +120 +absolute + + + +0.01 +smooth + +8.536980016647563 +47.35020389177775 +428.77008460442687 +-86.80878398984812 +75.33428656598238 +0 +120 +absolute + + + +0.01 +smooth + +8.536980115051012 +47.35020462383749 +428.7700729743965 +-87.03150245342574 +75.31318089960324 +0 +120 +absolute + + + +0.01 +smooth + +8.53698020715227 +47.35020535525132 +428.77006906700296 +-87.25405745093981 +75.29213838917343 +0 +120 +absolute + + + +0.01 +smooth + +8.53698029594736 +47.35020608619073 +428.7700737451303 +-87.47651137366628 +75.27114332000572 +0 +120 +absolute + + + +0.01 +smooth + +8.536980384480879 +47.35020681682712 +428.7700876412236 +-87.69892689356362 +75.25017997988701 +0 +120 +absolute + + + +0.01 +smooth + +8.536980472692356 +47.350207547150205 +428.7701105478496 +-87.92130038110285 +75.22924918238127 +0 +120 +absolute + + + +0.01 +smooth + +8.53698056052131 +47.35020827714973 +428.7701422575752 +-88.14362820675498 +75.20835174105241 +0 +120 +absolute + + + +0.01 +smooth + +8.536980647907265 +47.3502090068154 +428.7701825629672 +-88.36590674099097 +75.18748846946445 +0 +120 +absolute + + + +0.01 +smooth + +8.536980734789747 +47.35020973613693 +428.7702312565923 +-88.58813235428183 +75.16666018118134 +0 +120 +absolute + + + +0.01 +smooth + +8.536980821108282 +47.35021046510407 +428.7702881310174 +-88.8103014170986 +75.145867689767 +0 +120 +absolute + + + +0.01 +smooth + +8.53698090680238 +47.350211193706485 +428.7703529788092 +-89.03241029991223 +75.12511180878539 +0 +120 +absolute + + + +0.01 +smooth + +8.536980991811575 +47.35021192193397 +428.7704255925347 +-89.25445537319374 +75.1043933518005 +0 +120 +absolute + + + +0.01 +smooth + +8.53698107607539 +47.35021264977619 +428.7705057647605 +-89.47643300741412 +75.08371313237626 +0 +120 +absolute + + + +0.01 +smooth + +8.536981159533344 +47.35021337722289 +428.7705932880537 +-89.69833957304438 +75.06307196407661 +0 +120 +absolute + + + +0.01 +smooth + +8.536981242124964 +47.35021410426381 +428.7706879549809 +-89.92017144055554 +75.04247066046558 +0 +120 +absolute + + + +0.01 +smooth + +8.53698132378977 +47.350214830888625 +428.77078955810873 +-90.14192498041851 +75.02191003510703 +0 +120 +absolute + + + +0.01 +smooth + +8.536981404467289 +47.35021555708711 +428.7708978900044 +-90.36359656310442 +75.001390901565 +0 +120 +absolute + + + +0.01 +smooth + +8.536981484097037 +47.350216282848926 +428.7710127432343 +-90.58518255908415 +74.98091407340337 +0 +120 +absolute + + + +0.01 +smooth + +8.536981562618545 +47.35021700816385 +428.77113391036556 +-90.80667933882883 +74.96048036418613 +0 +120 +absolute + + + +0.01 +smooth + +8.536981639971337 +47.350217733021594 +428.77126118396507 +-91.02808327280935 +74.9400905874773 +0 +120 +absolute + + + +0.01 +smooth + +8.536981716094926 +47.35021845741184 +428.77139435659916 +-91.24939073149672 +74.91974555684071 +0 +120 +absolute + + + +0.01 +smooth + +8.536981790928847 +47.350219181324384 +428.7715332208353 +-91.470598085362 +74.89944608584044 +0 +120 +absolute + + + +0.01 +smooth + +8.536981864412613 +47.35021990474884 +428.7716775692395 +-91.69170170487611 +74.87919298804033 +0 +120 +absolute + + + +0.01 +smooth + +8.536981936485757 +47.35022062767505 +428.7718271943794 +-91.91269796051014 +74.85898707700447 +0 +120 +absolute + + + +0.01 +smooth + +8.536982007087792 +47.35022135009264 +428.7719818888211 +-92.133583222735 +74.83882916629666 +0 +120 +absolute + + + +0.01 +smooth + +8.536982076158251 +47.3502220719914 +428.7721414451319 +-92.3543538620218 +74.81872006948102 +0 +120 +absolute + + + +0.01 +smooth + +8.536982143636653 +47.350222793361006 +428.7723056558784 +-92.57500624884145 +74.79866060012138 +0 +120 +absolute + + + +0.01 +smooth + +8.536982209462515 +47.350223514191185 +428.77247431362736 +-92.79553675366492 +74.77865157178172 +0 +120 +absolute + + + +0.01 +smooth + +8.536982273575372 +47.35022423447168 +428.77264721094576 +-93.01594174696332 +74.75869379802604 +0 +120 +absolute + + + +0.01 +smooth + +8.53698233591474 +47.350224954192214 +428.7728241404003 +-93.23621759920758 +74.73878809241828 +0 +120 +absolute + + + +0.01 +smooth + +8.536982396420141 +47.35022567334248 +428.77300489455774 +-93.45636068086867 +74.71893526852239 +0 +120 +absolute + + + +0.01 +smooth + +8.536982455031104 +47.350226391912216 +428.773189265985 +-93.67636736241768 +74.69913613990232 +0 +120 +absolute + + + +0.01 +smooth + +8.536982511687146 +47.350227109891165 +428.7733770472489 +-93.89623401432556 +74.67939152012205 +0 +120 +absolute + + + +0.01 +smooth + +8.536982566327795 +47.350227827269016 +428.7735680309161 +-94.11595700706327 +74.65970222274551 +0 +120 +absolute + + + +0.01 +smooth + +8.536982618892573 +47.3502285440355 +428.77376200955365 +-94.33553271110189 +74.64006906133666 +0 +120 +absolute + + + +0.01 +smooth + +8.536982669321002 +47.35022926018035 +428.7739587757281 +-94.55495749691238 +74.62049284945945 +0 +120 +absolute + + + +0.01 +smooth + +8.536982717552606 +47.35022997569328 +428.77415812200627 +-94.77422773496575 +74.60097440067788 +0 +120 +absolute + + + +0.01 +smooth + +8.536982763526906 +47.35023069056401 +428.77435984095524 +-94.99333979573296 +74.58151452855586 +0 +120 +absolute + + + +0.01 +smooth + +8.536982807183428 +47.350231404782264 +428.77456372514155 +-95.21229004968505 +74.56211404665737 +0 +120 +absolute + + + +0.01 +smooth + +8.536982848461696 +47.350232118337765 +428.7747695671322 +-95.431074867293 +74.54277376854635 +0 +120 +absolute + + + +0.01 +smooth + +8.53698288730123 +47.350232831220225 +428.7749771594938 +-95.64969061902784 +74.52349450778676 +0 +120 +absolute + + + +0.01 +smooth + +8.536982923641554 +47.35023354341939 +428.77518629479334 +-95.86813367536053 +74.50427707794256 +0 +120 +absolute + + + +0.01 +smooth + +8.536982957422193 +47.350234254924956 +428.7753967655975 +-96.0864004067621 +74.48512229257773 +0 +120 +absolute + + + +0.01 +smooth + +8.53698298858267 +47.35023496572666 +428.77560836447316 +-96.30448718370357 +74.46603096525618 +0 +120 +absolute + + + +0.01 +smooth + +8.536983017062507 +47.35023567581422 +428.77582088398714 +-96.52239037665589 +74.4470039095419 +0 +120 +absolute + + + +0.01 +smooth + +8.536983042801227 +47.35023638517736 +428.7760341167062 +-96.74010635609004 +74.42804193899883 +0 +120 +absolute + + + +0.01 +smooth + +8.536983065738355 +47.35023709380579 +428.7762478551972 +-96.95763149247708 +74.40914586719093 +0 +120 +absolute + + + +0.01 +smooth + +8.53698308581341 +47.35023780168925 +428.77646189202693 +-97.17496215628799 +74.39031650768217 +0 +120 +absolute + + + +0.01 +smooth + +8.53698310296592 +47.350238508817455 +428.776676019762 +-97.39209471799376 +74.37155467403649 +0 +120 +absolute + + + +0.01 +smooth + +8.536983117135408 +47.35023921518011 +428.77689003096964 +-97.6090255480654 +74.35286117981784 +0 +120 +absolute + + + +0.01 +smooth + +8.536983128261395 +47.35023992076697 +428.7771037182163 +-97.82575101697392 +74.33423683859019 +0 +120 +absolute + + + +0.01 +smooth + +8.536983136283403 +47.35024062556772 +428.77731687406896 +-98.04226749519033 +74.31568246391753 +0 +120 +absolute + + + +0.01 +smooth + +8.536983141140958 +47.35024132957211 +428.7775292910944 +-98.25857135318557 +74.29719886936374 +0 +120 +absolute + + + +0.01 +smooth + +8.536983142773583 +47.35024203276985 +428.77774076185943 +-98.47465896143068 +74.27878686849283 +0 +120 +absolute + + + +0.01 +smooth + +8.536983140199315 +47.350242735341446 +428.7779562129981 +-98.69058733086129 +74.26042919086865 +0 +120 +absolute + + + +0.01 +smooth + +8.536983132547874 +47.35024343746728 +428.77818057024245 +-98.90641378515048 +74.24210857867813 +0 +120 +absolute + + + +0.01 +smooth + +8.536983119926292 +47.35024413913682 +428.7784136248053 +-99.1221351638753 +74.22382586441971 +0 +120 +absolute + + + +0.01 +smooth + +8.536983102441603 +47.350244840339634 +428.7786551678999 +-99.33774830661281 +74.20558188059196 +0 +120 +absolute + + + +0.01 +smooth + +8.536983080200852 +47.35024554106519 +428.77890499073914 +-99.55325005294016 +74.18737745969332 +0 +120 +absolute + + + +0.01 +smooth + +8.536983053311065 +47.350246241303026 +428.7791628845363 +-99.76863724243435 +74.16921343422234 +0 +120 +absolute + + + +0.01 +smooth + +8.536983021879283 +47.35024694104265 +428.7794286405044 +-99.98390671467256 +74.15109063667751 +0 +120 +absolute + + + +0.01 +smooth + +8.536982986012541 +47.350247640273544 +428.7797020498565 +-100.19905530923172 +74.1330098995573 +0 +120 +absolute + + + +0.01 +smooth + +8.536982945817877 +47.35024833898524 +428.7799829038057 +-100.41407986568902 +74.11497205536023 +0 +120 +absolute + + + +0.01 +smooth + +8.536982901402325 +47.35024903716725 +428.780270993565 +-100.62897722362149 +74.0969779365848 +0 +120 +absolute + + + +0.01 +smooth + +8.536982852872919 +47.35024973480909 +428.78056611034765 +-100.84374422260623 +74.07902837572952 +0 +120 +absolute + + + +0.01 +smooth + +8.536982800336702 +47.35025043190028 +428.78086804536684 +-101.05837770222034 +74.0611242052929 +0 +120 +absolute + + + +0.01 +smooth + +8.536982743900698 +47.350251128430266 +428.78117658983524 +-101.27287450204079 +74.04326625777338 +0 +120 +absolute + + + +0.01 +smooth + +8.536982683671958 +47.35025182438866 +428.78149153496634 +-101.48723146164485 +74.02545536566956 +0 +120 +absolute + + + +0.01 +smooth + +8.536982619757506 +47.35025251976487 +428.78181267197294 +-101.70144542060946 +74.00769236147983 +0 +120 +absolute + + + +0.01 +smooth + +8.536982552264382 +47.35025321454848 +428.7821397920683 +-101.91551321851168 +73.98997807770277 +0 +120 +absolute + + + +0.01 +smooth + +8.536982481299624 +47.350253908728995 +428.7824726864655 +-102.12943169492867 +73.97231334683687 +0 +120 +absolute + + + +0.01 +smooth + +8.536982406970262 +47.35025460229587 +428.7828111463775 +-102.34319768943743 +73.95469900138058 +0 +120 +absolute + + + +0.01 +smooth + +8.536982329383344 +47.35025529523869 +428.78315496301764 +-102.55680804161514 +73.93713587383247 +0 +120 +absolute + + + +0.01 +smooth + +8.536982248645892 +47.350255987546895 +428.78350392759853 +-102.77025959103877 +73.91962479669098 +0 +120 +absolute + + + +0.01 +smooth + +8.536982164864952 +47.35025667921006 +428.7838578313339 +-102.98354917728551 +73.90216660245468 +0 +120 +absolute + + + +0.01 +smooth + +8.536982078147552 +47.35025737021763 +428.78421646543626 +-103.1966736399323 +73.884762123622 +0 +120 +absolute + + + +0.01 +smooth + +8.536981988600736 +47.350258060559185 +428.78457962111895 +-103.40962981855638 +73.86741219269146 +0 +120 +absolute + + + +0.01 +smooth + +8.536981896331538 +47.35025875022421 +428.7849470895953 +-103.62241455273474 +73.85011764216162 +0 +120 +absolute + + + +0.01 +smooth + +8.536981801446988 +47.350259439202176 +428.7853186620778 +-103.8350246820444 +73.83287930453089 +0 +120 +absolute + + + +0.01 +smooth + +8.53698170405413 +47.350260127482656 +428.78569412978015 +-104.04745704606256 +73.81569801229783 +0 +120 +absolute + + + +0.01 +smooth + +8.536981604259996 +47.350260815055115 +428.786073283915 +-104.2597084843662 +73.79857459796092 +0 +120 +absolute + + + +0.01 +smooth + +8.53698150217162 +47.35026150190909 +428.78645591569574 +-104.47177583653246 +73.78150989401865 +0 +120 +absolute + + + +0.01 +smooth + +8.53698139789604 +47.350262188034066 +428.78684181633525 +-104.68365594213839 +73.76450473296956 +0 +120 +absolute + + + +0.01 +smooth + +8.536981291540295 +47.35026287341958 +428.78723077704666 +-104.89534564076108 +73.7475599473121 +0 +120 +absolute + + + +0.01 +smooth + +8.536981183211418 +47.35026355805513 +428.78762258904305 +-105.10684177197766 +73.73067636954481 +0 +120 +absolute + + + +0.01 +smooth + +8.536981073016445 +47.35026424193023 +428.7880170435376 +-105.31814117536508 +73.71385483216616 +0 +120 +absolute + + + +0.01 +smooth + +8.536980961062413 +47.35026492503439 +428.7884139317433 +-105.52924069050053 +73.69709616767469 +0 +120 +absolute + + + +0.01 +smooth + +8.536980847456356 +47.35026560735712 +428.7888130448732 +-105.74013715696101 +73.68040120856887 +0 +120 +absolute + + + +0.01 +smooth + +8.536980732305313 +47.350266288887944 +428.78921417414057 +-105.95082741432367 +73.6637707873472 +0 +120 +absolute + + + +0.01 +smooth + +8.536980615716317 +47.35026696961634 +428.7896171107584 +-106.16130830216555 +73.6472057365082 +0 +120 +absolute + + + +0.01 +smooth + +8.536980497796407 +47.35026764953186 +428.7900216459397 +-106.37157666006374 +73.63070688855035 +0 +120 +absolute + + + +0.01 +smooth + +8.536980378652618 +47.35026832862398 +428.7904275708976 +-106.58162932759532 +73.61427507597219 +0 +120 +absolute + + + +0.01 +smooth + +8.536980258391985 +47.350269006882236 +428.7908346768452 +-106.79146314433734 +73.59791113127216 +0 +120 +absolute + + + +0.01 +smooth + +8.536980137121544 +47.35026968429612 +428.79124275499566 +-107.00107494986696 +73.58161588694878 +0 +120 +absolute + + + +0.01 +smooth + +8.53698001494833 +47.35027036085515 +428.7916515965619 +-107.21046158376117 +73.5653901755006 +0 +120 +absolute + + + +0.01 +smooth + +8.536979891979383 +47.35027103654884 +428.7920609927571 +-107.41961988559707 +73.54923482942607 +0 +120 +absolute + + + +0.01 +smooth + +8.536979768321736 +47.3502717113667 +428.79247073479445 +-107.62854669495172 +73.5331506812237 +0 +120 +absolute + + + +0.01 +smooth + +8.536979644082425 +47.35027238529824 +428.79288061388695 +-107.83723885140226 +73.51713856339198 +0 +120 +absolute + + + +0.01 +smooth + +8.536979519368487 +47.35027305833297 +428.79329042124755 +-108.04569319452574 +73.50119930842946 +0 +120 +absolute + + + +0.01 +smooth + +8.536979394286957 +47.350273730460394 +428.7936999480895 +-108.25390656389924 +73.48533374883458 +0 +120 +absolute + + + +0.01 +smooth + +8.536979268944872 +47.350274401670035 +428.7941089856258 +-108.4618757990998 +73.46954271710588 +0 +120 +absolute + + + +0.01 +smooth + +8.536979143449269 +47.350275071951394 +428.79451732506965 +-108.66959773970459 +73.45382704574183 +0 +120 +absolute + + + +0.01 +smooth + +8.536979017907182 +47.350275741294 +428.7949247576341 +-108.87706922529057 +73.43818756724096 +0 +120 +absolute + + + +0.01 +smooth + +8.536978892425646 +47.35027640968733 +428.7953310745321 +-109.08428709543489 +73.42262511410176 +0 +120 +absolute + + + +0.01 +smooth + +8.5369787671117 +47.35027707712093 +428.79573606697693 +-109.29124818971462 +73.40714051882274 +0 +120 +absolute + + + +0.01 +smooth + +8.536978638847748 +47.350277743787935 +428.7961425490028 +-109.49800392582655 +73.39171438111413 +0 +120 +absolute + + + +0.01 +smooth + +8.53697850452365 +47.35027840988129 +428.79655340427763 +-109.7046060525002 +73.37632733362547 +0 +120 +absolute + + + +0.01 +smooth + +8.536978364257628 +47.35027907539017 +428.79696852846445 +-109.91105190586187 +73.36098025826418 +0 +120 +absolute + + + +0.01 +smooth + +8.536978218167901 +47.35027974030377 +428.7973878172264 +-110.11733882203772 +73.3456740369377 +0 +120 +absolute + + + +0.01 +smooth + +8.536978066372695 +47.350280404611276 +428.7978111662269 +-110.32346413715409 +73.33040955155344 +0 +120 +absolute + + + +0.01 +smooth + +8.53697790899023 +47.35028106830187 +428.79823847112885 +-110.52942518733705 +73.31518768401887 +0 +120 +absolute + + + +0.01 +smooth + +8.53697774613872 +47.350281731364724 +428.7986696275954 +-110.7352193087129 +73.30000931624133 +0 +120 +absolute + + + +0.01 +smooth + +8.536977577936392 +47.35028239378904 +428.7991045312898 +-110.94084383740785 +73.28487533012832 +0 +120 +absolute + + + +0.01 +smooth + +8.536977404501469 +47.35028305556399 +428.79954307787517 +-111.14629610954822 +73.26978660758725 +0 +120 +absolute + + + +0.01 +smooth + +8.53697722595217 +47.35028371667876 +428.79998516301487 +-111.35157346126013 +73.25474403052554 +0 +120 +absolute + + + +0.01 +smooth + +8.536977042406711 +47.35028437712255 +428.8004306823717 +-111.55667322866987 +73.23974848085061 +0 +120 +absolute + + + +0.01 +smooth + +8.536976853983322 +47.35028503688454 +428.8008795316091 +-111.76159274790365 +73.22480084046992 +0 +120 +absolute + + + +0.01 +smooth + +8.536976660800212 +47.35028569595387 +428.8013316063899 +-111.96632935508767 +73.20990199129083 +0 +120 +absolute + + + +0.01 +smooth + +8.536976462975614 +47.3502863543198 +428.8017868023779 +-112.17088038634823 +73.19505281522085 +0 +120 +absolute + + + +0.01 +smooth + +8.536976260627746 +47.35028701197146 +428.80224501523554 +-112.3752431778115 +73.18025419416732 +0 +120 +absolute + + + +0.01 +smooth + +8.536976053874826 +47.35028766889805 +428.80270614062624 +-112.5794150656037 +73.16550701003773 +0 +120 +absolute + + + +0.01 +smooth + +8.536975842835078 +47.35028832508876 +428.8031700742135 +-112.78339338585113 +73.15081214473953 +0 +120 +absolute + + + +0.01 +smooth + +8.536975627626717 +47.35028898053275 +428.8036367116598 +-112.98717547467989 +73.13617048018003 +0 +120 +absolute + + + +0.01 +smooth + +8.536975408367974 +47.35028963521926 +428.8041059486291 +-113.19075866821638 +73.12158289826678 +0 +120 +absolute + + + +0.01 +smooth + +8.53697518517706 +47.35029028913741 +428.80457768078384 +-113.39414030258672 +73.10705028090713 +0 +120 +absolute + + + +0.01 +smooth + +8.536974958172204 +47.35029094227643 +428.8050518037877 +-113.59731771391712 +73.09257351000856 +0 +120 +absolute + + + +0.01 +smooth + +8.536974727471621 +47.350291594625475 +428.80552821330343 +-113.80028823833389 +73.07815346747844 +0 +120 +absolute + + + +0.01 +smooth + +8.536974493193535 +47.35029224617374 +428.8060068049945 +-114.00304921196317 +73.06379103522426 +0 +120 +absolute + + + +0.01 +smooth + +8.536974255456165 +47.35029289691042 +428.8064874745239 +-114.20559797093128 +73.04948709515337 +0 +120 +absolute + + + +0.01 +smooth + +8.536974014377734 +47.350293546824666 +428.8069701175548 +-114.40793185136431 +73.03524252917325 +0 +120 +absolute + + + +0.01 +smooth + +8.536973770076465 +47.350294195905704 +428.8074546297504 +-114.61004818938869 +73.02105821919132 +0 +120 +absolute + + + +0.01 +smooth + +8.536973522670577 +47.3502948441427 +428.8079409067739 +-114.81194432113054 +73.006935047115 +0 +120 +absolute + + + +0.01 +smooth + +8.536973272278289 +47.35029549152485 +428.8084288442884 +-115.01361758271604 +72.99287389485173 +0 +120 +absolute + + + +0.01 +smooth + +8.536973019017825 +47.3502961380413 +428.80891833795715 +-115.21506531027151 +72.97887564430891 +0 +120 +absolute + + + +0.01 +smooth + +8.536972763007402 +47.35029678368129 +428.80940928344313 +-115.41628483992307 +72.96494117739398 +0 +120 +absolute + + + +0.01 +smooth + +8.536972504365247 +47.350297428433976 +428.80990157640963 +-115.61727350779707 +72.95107137601438 +0 +120 +absolute + + + +0.01 +smooth + +8.536972243209577 +47.350298072288524 +428.8103951125198 +-115.81802865001963 +72.93726712207751 +0 +120 +absolute + + + +0.01 +smooth + +8.536971979658613 +47.35029871523415 +428.81088978743674 +-116.01854760271712 +72.92352929749083 +0 +120 +absolute + + + +0.01 +smooth + +8.536971713830578 +47.35029935726003 +428.8113854968237 +-116.2188277020156 +72.90985878416174 +0 +120 +absolute + + + +0.01 +smooth + +8.536971445843692 +47.35029999835533 +428.81188213634374 +-116.41886628404146 +72.89625646399766 +0 +120 +absolute + + + +0.01 +smooth + +8.536971175816175 +47.35030063850925 +428.81237960166004 +-116.61866068492083 +72.88272321890602 +0 +120 +absolute + + + +0.01 +smooth + +8.53697090386625 +47.350301277711 +428.8128777884359 +-116.81820824077991 +72.8692599307943 +0 +120 +absolute + + + +0.01 +smooth + +8.536970630112135 +47.350301915949714 +428.81337659233435 +-117.01750628774502 +72.85586748156985 +0 +120 +absolute + + + +0.01 +smooth + +8.536970354672054 +47.3503025532146 +428.8138759090185 +-117.2165521619423 +72.84254675314014 +0 +120 +absolute + + + +0.01 +smooth + +8.536970077664227 +47.35030318949485 +428.8143756341516 +-117.4153431994981 +72.82929862741258 +0 +120 +absolute + + + +0.01 +smooth + +8.536969799206876 +47.350303824779644 +428.8148756633967 +-117.61387673653849 +72.8161239862946 +0 +120 +absolute + + + +0.01 +smooth + +8.536969519418221 +47.35030445905815 +428.81537589241714 +-117.81215010918987 +72.80302371169363 +0 +120 +absolute + + + +0.01 +smooth + +8.536969238416484 +47.35030509231959 +428.81587621687595 +-118.01016065357835 +72.7899986855171 +0 +120 +absolute + + + +0.01 +smooth + +8.536968956319884 +47.3503057245531 +428.8163765324363 +-118.20790570583016 +72.77704978967243 +0 +120 +absolute + + + +0.01 +smooth + +8.536968673246644 +47.350306355747904 +428.8168767347615 +-118.40538260207163 +72.76417790606703 +0 +120 +absolute + + + +0.01 +smooth + +8.536968389314982 +47.35030698589316 +428.81737671951436 +-118.60258867842879 +72.75138391660836 +0 +120 +absolute + + + +0.01 +smooth + +8.536968104643123 +47.35030761497808 +428.8178763823584 +-118.79952127102811 +72.73866870320384 +0 +120 +absolute + + + +0.01 +smooth + +8.536967819349288 +47.35030824299182 +428.81837561895657 +-118.99617771599566 +72.72603314776087 +0 +120 +absolute + + + +0.01 +smooth + +8.536967533551692 +47.35030886992358 +428.8188743249721 +-119.19255534945776 +72.71347813218692 +0 +120 +absolute + + + +0.01 +smooth + +8.536967247368564 +47.35030949576254 +428.81937239606816 +-119.38865150754049 +72.70100453838936 +0 +120 +absolute + + + +0.01 +smooth + +8.53696696091812 +47.35031012049789 +428.8198697279079 +-119.5844635263703 +72.68861324827566 +0 +120 +absolute + + + +0.01 +smooth + +8.536966672034476 +47.35031074433963 +428.82036773192686 +-119.78003702892886 +72.67628175680575 +0 +120 +absolute + + + +0.01 +smooth + +8.536966378519809 +47.3503113674975 +428.8208678441236 +-119.97541797024374 +72.66398763113249 +0 +120 +absolute + + + +0.01 +smooth + +8.536966080444436 +47.35031198996018 +428.82136999700515 +-120.17060418450968 +72.65173186145253 +0 +120 +absolute + + + +0.01 +smooth + +8.53696577787867 +47.35031261171633 +428.82187412307894 +-120.36559350592138 +72.63951543796256 +0 +120 +absolute + + + +0.01 +smooth + +8.536965470892827 +47.35031323275467 +428.82238015485217 +-120.56038376867373 +72.62733935085927 +0 +120 +absolute + + + +0.01 +smooth + +8.53696515955722 +47.35031385306389 +428.82288802483225 +-120.75497280696132 +72.6152045903394 +0 +120 +absolute + + + +0.01 +smooth + +8.536964843942165 +47.35031447263267 +428.8233976655263 +-120.94935845497898 +72.60311214659957 +0 +120 +absolute + + + +0.01 +smooth + +8.53696452411798 +47.350315091449744 +428.82390900944205 +-121.14353854692149 +72.59106300983659 +0 +120 +absolute + + + +0.01 +smooth + +8.536964200154973 +47.350315709503754 +428.8244219890861 +-121.33751091698356 +72.57905817024701 +0 +120 +absolute + + + +0.01 +smooth + +8.536963872123463 +47.35031632678341 +428.82493653696633 +-121.53127339935997 +72.5670986180276 +0 +120 +absolute + + + +0.01 +smooth + +8.536963540093767 +47.350316943277406 +428.8254525855898 +-121.72482382824538 +72.55518534337506 +0 +120 +absolute + + + +0.01 +smooth + +8.5369632041362 +47.350317558974446 +428.8259700674638 +-121.91816003783468 +72.54331933648609 +0 +120 +absolute + + + +0.01 +smooth + +8.536962864321069 +47.35031817386319 +428.8264889150954 +-122.11127986232242 +72.53150158755732 +0 +120 +absolute + + + +0.01 +smooth + +8.536962520718697 +47.35031878793238 +428.8270090609925 +-122.30418113590365 +72.51973308678552 +0 +120 +absolute + + + +0.01 +smooth + +8.536962173399395 +47.350319401170665 +428.82753043766195 +-122.49686169277277 +72.50801482436732 +0 +120 +absolute + + + +0.01 +smooth + +8.536961822433481 +47.35032001356676 +428.82805297761104 +-122.68931936712485 +72.49634779049946 +0 +120 +absolute + + + +0.01 +smooth + +8.536961467891269 +47.35032062510934 +428.8285766133471 +-122.88155199315445 +72.48473297537859 +0 +120 +absolute + + + +0.01 +smooth + +8.536961109843075 +47.350321235787135 +428.82910127737756 +-123.07355740505636 +72.47317136920148 +0 +120 +absolute + + + +0.01 +smooth + +8.536960748359208 +47.350321845588795 +428.8296269022095 +-123.26533343702533 +72.46166396216472 +0 +120 +absolute + + + +0.01 +smooth + +8.536960383509989 +47.35032245450303 +428.8301534203504 +-123.45687792325609 +72.45021174446508 +0 +120 +absolute + + + +0.01 +smooth + +8.536960015365729 +47.350323062518534 +428.83068076430754 +-123.6481886979435 +72.43881570629922 +0 +120 +absolute + + + +0.01 +smooth + +8.536959643996745 +47.35032366962399 +428.83120886658804 +-123.83926359528213 +72.42747683786386 +0 +120 +absolute + + + +0.01 +smooth + +8.536959269473353 +47.350324275808106 +428.8317376596993 +-124.0301004494669 +72.41619612935565 +0 +120 +absolute + + + +0.01 +smooth + +8.536958891865869 +47.35032488105959 +428.8322670761488 +-124.22069709469247 +72.40497457097135 +0 +120 +absolute + + + +0.01 +smooth + +8.536958511244602 +47.35032548536708 +428.83279704844335 +-124.41105136515363 +72.39381315290757 +0 +120 +absolute + + + +0.01 +smooth + +8.53695812767987 +47.350326088719314 +428.83332750909074 +-124.60116109504513 +72.38271286536106 +0 +120 +absolute + + + +0.01 +smooth + +8.536957741241991 +47.35032669110496 +428.83385839059804 +-124.79102411856164 +72.37167469852851 +0 +120 +absolute + + + +0.01 +smooth + +8.536957352001277 +47.35032729251274 +428.83438962547257 +-124.98063826989801 +72.36069964260658 +0 +120 +absolute + + + +0.01 +smooth + +8.536956960028043 +47.35032789293132 +428.8349211462216 +-125.17000138324892 +72.349788687792 +0 +120 +absolute + + + +0.01 +smooth + +8.536956565392602 +47.3503284923494 +428.83545288535237 +-125.35911129280922 +72.33894282428143 +0 +120 +absolute + + + +0.01 +smooth + +8.536956168165272 +47.35032909075568 +428.83598477537225 +-125.5479658327735 +72.32816304227161 +0 +120 +absolute + + + +0.01 +smooth + +8.53695576841637 +47.35032968813883 +428.83651674878865 +-125.73656283733669 +72.31745033195918 +0 +120 +absolute + + + +0.01 +smooth + +8.536955366216205 +47.350330284487576 +428.8370487381087 +-125.92490014069338 +72.30680568354089 +0 +120 +absolute + + + +0.01 +smooth + +8.536954961635095 +47.35033087979058 +428.8375806758396 +-126.11297557703847 +72.29623008721337 +0 +120 +absolute + + + +0.01 +smooth + +8.536954554743353 +47.35033147403656 +428.8381124944888 +-126.30078698056663 +72.28572453317335 +0 +120 +absolute + + + +0.01 +smooth + +8.536954145611299 +47.3503320672142 +428.8386441265636 +-126.48833218547256 +72.27529001161753 +0 +120 +absolute + + + +0.01 +smooth + +8.536953734309243 +47.35033265931217 +428.83917550457124 +-126.6756090259511 +72.26492751274259 +0 +120 +absolute + + + +0.01 +smooth + +8.536953320907502 +47.35033325031921 +428.83970656101917 +-126.86261533619694 +72.25463802674523 +0 +120 +absolute + + + +0.01 +smooth + +8.53695290547639 +47.35033384022397 +428.84023722841437 +-127.04934895040492 +72.24442254382214 +0 +120 +absolute + + + +0.01 +smooth + +8.536952488086222 +47.35033442901515 +428.84076743926437 +-127.23580770276962 +72.23428205417001 +0 +120 +absolute + + + +0.01 +smooth + +8.536952068807311 +47.350335016681456 +428.84129712607637 +-127.421989427486 +72.22421754798552 +0 +120 +absolute + + + +0.01 +smooth + +8.536951647709978 +47.350335603211576 +428.8418262213577 +-127.60789195874871 +72.2142300154654 +0 +120 +absolute + + + +0.01 +smooth + +8.53695122486453 +47.350336188594206 +428.8423546576156 +-127.79351313075242 +72.20432044680632 +0 +120 +absolute + + + +0.01 +smooth + +8.536950800341291 +47.350336772818025 +428.8428823673574 +-127.97885077769203 +72.19448983220497 +0 +120 +absolute + + + +0.01 +smooth + +8.536950374210567 +47.350337355871744 +428.8434092830904 +-128.16390273376214 +72.18473916185805 +0 +120 +absolute + + + +0.01 +smooth + +8.536949946542679 +47.350337937744044 +428.84393533732185 +-128.34866683315767 +72.17506942596225 +0 +120 +absolute + + + +0.01 +smooth + +8.536949517407937 +47.35033851842362 +428.84446046255914 +-128.5331409100732 +72.16548161471425 +0 +120 +absolute + + + +0.01 +smooth + +8.53694908687666 +47.35033909789916 +428.8449845913095 +-128.71732279870363 +72.15597671831078 +0 +120 +absolute + + + +0.01 +smooth + +8.536948655019161 +47.350339676159365 +428.84550765608014 +-128.90121033324357 +72.14655572694852 +0 +120 +absolute + + + +0.01 +smooth + +8.536948221905755 +47.35034025319292 +428.8460295893785 +-129.08480134788792 +72.13721963082415 +0 +120 +absolute + + + +0.01 +smooth + +8.53694778760676 +47.35034082898853 +428.84655032371177 +-129.26809367683134 +72.12796942013435 +0 +120 +absolute + + + +0.01 +smooth + +8.536947350724274 +47.350341403778565 +428.84707079002936 +-129.4511270885723 +72.11877751885673 +0 +120 +absolute + + + +0.01 +smooth + +8.536946909847876 +47.35034197779494 +428.8475919312503 +-129.63394166570433 +72.10961650643846 +0 +120 +absolute + + + +0.01 +smooth + +8.536946465029086 +47.35034255102559 +428.84811369783637 +-129.81653571356455 +72.10048760628065 +0 +120 +absolute + + + +0.01 +smooth + +8.536946016319433 +47.350343123458465 +428.84863604024946 +-129.99890753749006 +72.09139204178445 +0 +120 +absolute + + + +0.01 +smooth + +8.536945563770443 +47.35034369508153 +428.8491589089514 +-130.18105544281804 +72.08233103635092 +0 +120 +absolute + + + +0.01 +smooth + +8.53694510743364 +47.350344265882704 +428.849682254404 +-130.36297773488562 +72.07330581338124 +0 +120 +absolute + + + +0.01 +smooth + +8.536944647360542 +47.35034483584997 +428.850206027069 +-130.5446727190299 +72.06431759627644 +0 +120 +absolute + + + +0.01 +smooth + +8.536944183602683 +47.35034540497129 +428.85073017740865 +-130.72613870058822 +72.05536760843776 +0 +120 +absolute + + + +0.01 +smooth + +8.536943716211583 +47.35034597323458 +428.85125465588425 +-130.9073739848975 +72.0464570732662 +0 +120 +absolute + + + +0.01 +smooth + +8.536943245238767 +47.3503465406278 +428.8517794129578 +-131.0883768772949 +72.03758721416294 +0 +120 +absolute + + + +0.01 +smooth + +8.536942770735763 +47.35034710713893 +428.85230439909145 +-131.26914568311776 +72.02875925452909 +0 +120 +absolute + + + +0.01 +smooth + +8.53694229275409 +47.35034767275587 +428.85282956474657 +-131.44967870770296 +72.01997441776575 +0 +120 +absolute + + + +0.01 +smooth + +8.536941811345278 +47.35034823746662 +428.8533548603853 +-131.6299742563879 +72.01123392727403 +0 +120 +absolute + + + +0.01 +smooth + +8.536941326560848 +47.350348801259116 +428.8538802364695 +-131.81003063450947 +72.00253900645508 +0 +120 +absolute + + + +0.01 +smooth + +8.536940838452331 +47.350349364121314 +428.8544056434608 +-131.9898461474051 +71.99389087871002 +0 +120 +absolute + + + +0.01 +smooth + +8.53694034707124 +47.350349926041126 +428.8549310318209 +-132.1694191004117 +71.98529076743989 +0 +120 +absolute + + + +0.01 +smooth + +8.536939852469116 +47.35035048700655 +428.8554563520122 +-132.34874779886647 +71.9767398960459 +0 +120 +absolute + + + +0.01 +smooth + +8.53693935469747 +47.350351047005525 +428.8559815544961 +-132.52783054810664 +71.96823948792913 +0 +120 +absolute + + + +0.01 +smooth + +8.53693885380783 +47.35035160602599 +428.85650658973447 +-132.7066656534692 +71.95979076649066 +0 +120 +absolute + + + +0.01 +smooth + +8.536938349851724 +47.350352164055906 +428.8570314081892 +-132.88525142029147 +71.95139495513166 +0 +120 +absolute + + + +0.01 +smooth + +8.536937842880677 +47.35035272108322 +428.8575559603221 +-133.06358615391045 +71.94305327725323 +0 +120 +absolute + + + +0.01 +smooth + +8.536937332946211 +47.350353277095884 +428.85808019659515 +-133.2416681596634 +71.9347669562565 +0 +120 +absolute + + + +0.01 +smooth + +8.536936820099852 +47.35035383208185 +428.85860406747 +-133.41949574288734 +71.92653721554254 +0 +120 +absolute + + + +0.01 +smooth + +8.536936304393123 +47.350354386029075 +428.8591275234086 +-133.59706720891955 +71.9183652785125 +0 +120 +absolute + + + +0.01 +smooth + +8.53693578587755 +47.3503549389255 +428.8596505148726 +-133.7743808630971 +71.9102523685675 +0 +120 +absolute + + + +0.01 +smooth + +8.536935264604658 +47.35035549075908 +428.8601729923241 +-133.95143501075708 +71.90219970910864 +0 +120 +absolute + + + +0.01 +smooth + +8.536934740625973 +47.35035604151778 +428.8606949062248 +-134.12822795723676 +71.89420852353707 +0 +120 +absolute + + + +0.01 +smooth + +8.53693421399302 +47.350356591189524 +428.86121620703653 +-134.30475800787315 +71.88628003525386 +0 +120 +absolute + + + +0.01 +smooth + +8.536933684757319 +47.35035713976228 +428.86173684522106 +-134.48102346800354 +71.87841546766016 +0 +120 +absolute + + + +0.01 +smooth + +8.536933152970398 +47.350357687224 +428.8622567712405 +-134.65702264296493 +71.87061604415707 +0 +120 +absolute + + + +0.01 +smooth + +8.536932618683785 +47.35035823356263 +428.86277593555633 +-134.83275383809456 +71.86288298814571 +0 +120 +absolute + + + +0.01 +smooth + +8.536932081949 +47.35035877876612 +428.8632942886305 +-135.00821535872956 +71.85521752302722 +0 +120 +absolute + + + +0.01 +smooth + +8.53693154281757 +47.35035932282243 +428.863811780925 +-135.18340551020702 +71.84762087220267 +0 +120 +absolute + + + +0.01 +smooth + +8.536931001341019 +47.3503598657195 +428.8643283629015 +-135.35832259786417 +71.84009425907323 +0 +120 +absolute + + + +0.01 +smooth + +8.53693045757087 +47.35036040744529 +428.86484398502193 +-135.53296492703802 +71.83263890703998 +0 +120 +absolute + + + +0.01 +smooth + +8.536929911558651 +47.35036094798775 +428.865358597748 +-135.70733080306587 +71.82525603950403 +0 +120 +absolute + + + +0.01 +smooth + +8.536929363355888 +47.35036148733482 +428.8658721515417 +-135.88141853128477 +71.81794687986651 +0 +120 +absolute + + + +0.01 +smooth + +8.5369288130141 +47.35036202547448 +428.8663845968647 +-136.05522641703192 +71.81071265152855 +0 +120 +absolute + + + +0.01 +smooth + +8.536928260584816 +47.350362562394636 +428.86689588417903 +-136.22875276564434 +71.80355457789126 +0 +120 +absolute + + + +0.01 +smooth + +8.53692770611956 +47.35036309808328 +428.86740596394634 +-136.40199588245937 +71.79647388235574 +0 +120 +absolute + + + +0.01 +smooth + +8.536927149669856 +47.35036363252834 +428.8679147866286 +-136.57495407281405 +71.78947178832311 +0 +120 +absolute + + + +0.01 +smooth + +8.536926591287228 +47.35036416571778 +428.8684223026876 +-136.74762564204548 +71.78254951919452 +0 +120 +absolute + + + +0.01 +smooth + +8.536926031023203 +47.35036469763955 +428.86892846258513 +-136.92000889549087 +71.77570829837106 +0 +120 +absolute + + + +0.01 +smooth + +8.536925468929306 +47.35036522828159 +428.869433216783 +-137.09210213848732 +71.76894934925383 +0 +120 +absolute + + + +0.01 +smooth + +8.536924905057061 +47.35036575763186 +428.8699365157432 +-137.26390367637202 +71.76227389524396 +0 +120 +absolute + + + +0.01 +smooth + +8.536924339457991 +47.350366285678305 +428.8704383099275 +-137.43541181448202 +71.7556831597426 +0 +120 +absolute + + + +0.01 +smooth + +8.536923772183624 +47.35036681240889 +428.8709385497976 +-137.60662485815462 +71.74917836615082 +0 +120 +absolute + + + +0.01 +smooth + +8.536923203285479 +47.35036733781155 +428.87143718581547 +-137.77754111272685 +71.74276073786974 +0 +120 +absolute + + + +0.01 +smooth + +8.536922632815086 +47.35036786187425 +428.8719341684429 +-137.94815888353588 +71.7364314983005 +0 +120 +absolute + + + +0.01 +smooth + +8.53692206082397 +47.35036838458493 +428.87242944814176 +-138.1184764759189 +71.73019187084422 +0 +120 +absolute + + + +0.01 +smooth + +8.536921487363655 +47.35036890593154 +428.87292297537385 +-138.28849219521294 +71.724043078902 +0 +120 +absolute + + + +0.01 +smooth + +8.536920911401658 +47.350369426176265 +428.87341550414055 +-138.45824015359716 +71.71794736359868 +0 +120 +absolute + + + +0.01 +smooth + +8.536920331898678 +47.35036994558054 +428.87390779500265 +-138.62775474098396 +71.71186735692406 +0 +120 +absolute + + + +0.01 +smooth + +8.536919748896004 +47.35037046413125 +428.8743998082605 +-138.7970346793108 +71.7058048685766 +0 +120 +absolute + + + +0.01 +smooth + +8.536919162434918 +47.350370981815225 +428.8748915042145 +-138.9660786905149 +71.69976170825484 +0 +120 +absolute + + + +0.01 +smooth + +8.536918572556704 +47.35037149861933 +428.875382843165 +-139.13488549653374 +71.69373968565725 +0 +120 +absolute + + + +0.01 +smooth + +8.536917979302654 +47.3503720145304 +428.8758737854127 +-139.30345381930456 +71.68774061048235 +0 +120 +absolute + + + +0.01 +smooth + +8.536917382714053 +47.35037252953534 +428.87636429125797 +-139.47178238076472 +71.68176629242865 +0 +120 +absolute + + + +0.01 +smooth + +8.536916782832188 +47.350373043620976 +428.8768543210015 +-139.6398699028517 +71.67581854119464 +0 +120 +absolute + + + +0.01 +smooth + +8.536916179698343 +47.35037355677416 +428.8773438349435 +-139.8077151075026 +71.66989916647881 +0 +120 +absolute + + + +0.01 +smooth + +8.536915573353804 +47.35037406898176 +428.8778327933844 +-139.975316716655 +71.66400997797969 +0 +120 +absolute + + + +0.01 +smooth + +8.53691496383986 +47.350374580230614 +428.8783211566249 +-140.14267345224607 +71.65815278539576 +0 +120 +absolute + + + +0.01 +smooth + +8.5369143511978 +47.350375090507626 +428.8788088849654 +-140.3097840362134 +71.65232939842554 +0 +120 +absolute + + + +0.01 +smooth + +8.536913735468898 +47.35037559979959 +428.8792959387061 +-140.476647190494 +71.64654162676747 +0 +120 +absolute + + + +0.01 +smooth + +8.536913116694457 +47.350376108093414 +428.879782278148 +-140.6432616370255 +71.64079128012017 +0 +120 +absolute + + + +0.01 +smooth + +8.536912494915756 +47.35037661537593 +428.8802678635911 +-140.80962609774517 +71.63508016818204 +0 +120 +absolute + + + +0.01 +smooth + +8.536911870174078 +47.35037712163399 +428.88075265533615 +-140.97573929459023 +71.62941010065163 +0 +120 +absolute + + + +0.01 +smooth + +8.536911242510712 +47.35037762685446 +428.8812366136834 +-141.1415999494982 +71.62378288722738 +0 +120 +absolute + + + +0.01 +smooth + +8.536910611966949 +47.35037813102423 +428.88171969893375 +-141.30720678440636 +71.61820033760792 +0 +120 +absolute + + + +0.01 +smooth + +8.536909978584069 +47.35037863413008 +428.88220187138694 +-141.47255852125204 +71.61266426149162 +0 +120 +absolute + + + +0.01 +smooth + +8.536909342403362 +47.350379136158935 +428.88268309134423 +-141.6376538819726 +71.60717646857704 +0 +120 +absolute + + + +0.01 +smooth + +8.53690870346611 +47.35037963709763 +428.8831633191055 +-141.80249158850538 +71.60173876856268 +0 +120 +absolute + + + +0.01 +smooth + +8.536908061813607 +47.350380136933005 +428.8836425149716 +-141.96707036278775 +71.59635297114704 +0 +120 +absolute + + + +0.01 +smooth + +8.536907417487132 +47.35038063565194 +428.8841206392428 +-142.131388926757 +71.5910208860286 +0 +120 +absolute + + + +0.01 +smooth + +8.536906770527978 +47.350381133241285 +428.88459765221967 +-142.29544600235062 +71.58574432290591 +0 +120 +absolute + + + +0.01 +smooth + +8.536906120977426 +47.350381629687895 +428.8850735142026 +-142.45924031150577 +71.58052509147743 +0 +120 +absolute + + + +0.01 +smooth + +8.536905468876764 +47.35038212497861 +428.8855481854921 +-142.62277057615992 +71.57536500144167 +0 +120 +absolute + + + +0.01 +smooth + +8.536904814267281 +47.35038261910032 +428.8860216263887 +-142.78603551825034 +71.57026586249714 +0 +120 +absolute + + + +0.01 +smooth + +8.536904157190259 +47.350383112039864 +428.88649379719277 +-142.94903385971446 +71.56522948434234 +0 +120 +absolute + + + +0.01 +smooth + +8.536903497686986 +47.3503836037841 +428.88696465820493 +-143.11176432248956 +71.56025767667577 +0 +120 +absolute + + + +0.01 +smooth + +8.536902835798752 +47.350384094319885 +428.8874341697255 +-143.27422562851308 +71.55535224919593 +0 +120 +absolute + + + +0.01 +smooth + +8.536902171566839 +47.35038458363407 +428.88790229205495 +-143.43641649972227 +71.55051501160133 +0 +120 +absolute + + + +0.01 +smooth + +8.536901505032535 +47.350385071713525 +428.88836898549386 +-143.59833565805445 +71.54574777359045 +0 +120 +absolute + + + +0.01 +smooth + +8.536900836237127 +47.35038555854509 +428.8888342103426 +-143.7599818254471 +71.54105234486182 +0 +120 +absolute + + + +0.01 +smooth + +8.5369001652219 +47.35038604411564 +428.88929792690175 +-143.9213537238374 +71.53643053511394 +0 +120 +absolute + + + +0.01 +smooth + +8.536899492028141 +47.35038652841203 +428.88976009547173 +-144.0824500751629 +71.53188415404527 +0 +120 +absolute + + + +0.01 +smooth + +8.536898816697137 +47.3503870114211 +428.890220676353 +-144.24326960136077 +71.52741501135438 +0 +120 +absolute + + + +0.01 +smooth + +8.536898139270175 +47.350387493129716 +428.890679629846 +-144.40381102436845 +71.5230249167397 +0 +120 +absolute + + + +0.01 +smooth + +8.53689745978854 +47.35038797352473 +428.8911369162513 +-144.56407306612323 +71.51871567989978 +0 +120 +absolute + + + +0.01 +smooth + +8.536896778293519 +47.350388452593016 +428.8915924958692 +-144.72405444856253 +71.51448911053312 +0 +120 +absolute + + + +0.01 +smooth + +8.536896094826398 +47.35038893032141 +428.89204632900044 +-144.8837538936237 +71.5103470183382 +0 +120 +absolute + + + +0.01 +smooth + +8.536895409428464 +47.350389406696785 +428.89249837594525 +-145.04317012324395 +71.50629121301353 +0 +120 +absolute + + + +0.01 +smooth + +8.536894722141003 +47.350389881705986 +428.8929485970042 +-145.20230185936077 +71.50232350425762 +0 +120 +absolute + + + +0.01 +smooth + +8.536894033005304 +47.350390355335875 +428.89339695247776 +-145.36114782391138 +71.49844570176897 +0 +120 +absolute + + + +0.01 +smooth + +8.536893342062648 +47.35039082757331 +428.89384340266633 +-145.51970673883332 +71.49465961524606 +0 +120 +absolute + + + +0.01 +smooth + +8.536892649354325 +47.350391298405135 +428.89428790787053 +-145.67797732606374 +71.49096705438743 +0 +120 +absolute + + + +0.01 +smooth + +8.536891954921622 +47.35039176781824 +428.89473042839074 +-145.83595830754012 +71.48736982889156 +0 +120 +absolute + + + +0.01 +smooth + +8.536891258805824 +47.35039223579944 +428.8951709245274 +-145.99364840519974 +71.48386974845694 +0 +120 +absolute + + + +0.01 +smooth + +8.536890561048217 +47.350392702335625 +428.8956093565811 +-146.15104634097997 +71.4804686227821 +0 +120 +absolute + + + +0.01 +smooth + +8.53688986169009 +47.35039316741363 +428.8960456848522 +-146.30815083681816 +71.47716826156551 +0 +120 +absolute + + + +0.01 +smooth + +8.536889160772725 +47.35039363102032 +428.89647986964115 +-146.46496061465163 +71.47397047450569 +0 +120 +absolute + + + +0.01 +smooth + +8.536888458337414 +47.350394093142555 +428.89691187124856 +-146.62147439641777 +71.47087707130116 +0 +120 +absolute + + + +0.01 +smooth + +8.536887753573495 +47.35039455408234 +428.89734239981465 +-146.77772117466702 +71.46782730876471 +0 +120 +absolute + + + +0.01 +smooth + +8.53688704566596 +47.350395014140645 +428.897772169072 +-146.93373016734435 +71.46476130158126 +0 +120 +absolute + + + +0.01 +smooth + +8.53688633464958 +47.35039547330274 +428.8982011447094 +-147.0895004344782 +71.46168214625744 +0 +120 +absolute + + + +0.01 +smooth + +8.53688562055912 +47.350395931553926 +428.8986292924156 +-147.24503103609743 +71.4585929392999 +0 +120 +absolute + + + +0.01 +smooth + +8.536884903429351 +47.35039638887949 +428.89905657787904 +-147.40032103223064 +71.45549677721525 +0 +120 +absolute + + + +0.01 +smooth + +8.536884183295035 +47.35039684526473 +428.89948296678887 +-147.55536948290646 +71.45239675651014 +0 +120 +absolute + + + +0.01 +smooth + +8.536883460190937 +47.35039730069492 +428.8999084248335 +-147.71017544815368 +71.44929597369124 +0 +120 +absolute + + + +0.01 +smooth + +8.536882734151833 +47.35039775515537 +428.9003329177019 +-147.86473798800088 +71.4461975252651 +0 +120 +absolute + + + +0.01 +smooth + +8.536882005212481 +47.35039820863134 +428.9007564110828 +-148.01905616247686 +71.44310450773844 +0 +120 +absolute + + + +0.01 +smooth + +8.536881273407653 +47.35039866110813 +428.9011788706646 +-148.17312903161013 +71.44002001761783 +0 +120 +absolute + + + +0.01 +smooth + +8.536880538772118 +47.35039911257107 +428.9016002621367 +-148.32695565542957 +71.43694715140998 +0 +120 +absolute + + + +0.01 +smooth + +8.536879801340637 +47.35039956300537 +428.90202055118715 +-148.48053509396365 +71.43388900562144 +0 +120 +absolute + + + +0.01 +smooth + +8.536879061147978 +47.350400012396385 +428.902439703505 +-148.63386640724124 +71.43084867675893 +0 +120 +absolute + + + +0.01 +smooth + +8.536878318228917 +47.3504004607294 +428.90285768477924 +-148.78694865529096 +71.42782926132904 +0 +120 +absolute + + + +0.01 +smooth + +8.536877572618206 +47.35040090798965 +428.9032744606981 +-148.9397808981414 +71.4248338558384 +0 +120 +absolute + + + +0.01 +smooth + +8.536876824350621 +47.35040135416246 +428.9036899969505 +-149.09236219582132 +71.42186555679362 +0 +120 +absolute + + + +0.01 +smooth + +8.53687607346093 +47.35040179923315 +428.90410425922556 +-149.2446916083594 +71.41892746070144 +0 +120 +absolute + + + +0.01 +smooth + +8.5368753199839 +47.35040224318696 +428.9045172132116 +-149.39676819578438 +71.4160226640684 +0 +120 +absolute + + + +0.01 +smooth + +8.53687456395429 +47.35040268600918 +428.9049288245973 +-149.5485910181247 +71.41315426340114 +0 +120 +absolute + + + +0.01 +smooth + +8.536873805406875 +47.35040312768515 +428.90533905907165 +-149.70015913540936 +71.41032535520633 +0 +120 +absolute + + + +0.01 +smooth + +8.53687304437642 +47.3504035682001 +428.9057478823233 +-149.8514716076668 +71.4075390359906 +0 +120 +absolute + + + +0.01 +smooth + +8.536872280897692 +47.350404007539346 +428.9061552600411 +-150.00252749492583 +71.4047984022606 +0 +120 +absolute + + + +0.01 +smooth + +8.536871515005458 +47.350404445688184 +428.90656115791353 +-150.15332585721512 +71.40210655052292 +0 +120 +absolute + + + +0.01 +smooth + +8.536870746734484 +47.35040488263189 +428.90696554162946 +-150.30386575456328 +71.39946657728423 +0 +120 +absolute + + + +0.01 +smooth + +8.53686997611954 +47.35040531835576 +428.9073683768778 +-150.45414624699902 +71.39688157905114 +0 +120 +absolute + + + +0.01 +smooth + +8.53686920319539 +47.35040575284508 +428.90776962934706 +-150.60416639455102 +71.39435465233032 +0 +120 +absolute + + + +0.01 +smooth + +8.5368684279968 +47.35040618608513 +428.908169264726 +-150.753925257248 +71.39188889362839 +0 +120 +absolute + + + +0.01 +smooth + +8.536867650558541 +47.35040661806122 +428.90856724870355 +-150.90342189511853 +71.38948739945198 +0 +120 +absolute + + + +0.01 +smooth + +8.536866870915379 +47.35040704875862 +428.9089635469682 +-151.05265536819147 +71.38715326630772 +0 +120 +absolute + + + +0.01 +smooth + +8.536866089102077 +47.35040747816264 +428.90935812520894 +-151.20162473649538 +71.38488959070226 +0 +120 +absolute + + + +0.01 +smooth + +8.536865305153405 +47.35040790625854 +428.90975094911437 +-151.3503290600589 +71.38269946914224 +0 +120 +absolute + + + +0.01 +smooth + +8.53686451910413 +47.35040833303162 +428.9101419843731 +-151.49876739891084 +71.38058599813426 +0 +120 +absolute + + + +0.01 +smooth + +8.536863730989019 +47.35040875846718 +428.9105311966741 +-151.64693881307974 +71.37855227418501 +0 +120 +absolute + + + +0.01 +smooth + +8.53686294084284 +47.35040918255051 +428.91091855170606 +-151.7948423625944 +71.37660139380108 +0 +120 +absolute + + + +0.01 +smooth + +8.536862148700358 +47.35040960526689 +428.9113040151576 +-151.9424771074834 +71.37473645348912 +0 +120 +absolute + + + +0.01 +smooth + +8.53686135459634 +47.35041002660161 +428.91168755271764 +-152.0898421077755 +71.37296054975579 +0 +120 +absolute + + + +0.01 +smooth + +8.536860558565555 +47.350410446539954 +428.91206913007477 +-152.23693642349932 +71.37127677910769 +0 +120 +absolute + + + +0.01 +smooth + +8.53685976064277 +47.350410865067225 +428.9124487129177 +-152.3837591146836 +71.36968823805147 +0 +120 +absolute + + + +0.01 +smooth + +8.536858960862748 +47.3504112821687 +428.9128262669353 +-152.530309241357 +71.36819802309377 +0 +120 +absolute + + + +0.01 +smooth + +8.53685815926026 +47.35041169782967 +428.9132017578163 +-152.67658586354815 +71.36680923074121 +0 +120 +absolute + + + +0.01 +smooth + +8.536857355870072 +47.350412112035436 +428.91357515124935 +-152.82258804128577 +71.36552495750044 +0 +120 +absolute + + + +0.01 +smooth + +8.536856550726952 +47.350412524771265 +428.9139464129232 +-152.96831483459854 +71.36434829987809 +0 +120 +absolute + + + +0.01 +smooth + +8.536855743865663 +47.350412936022465 +428.91431550852667 +-153.11376530351515 +71.3632823543808 +0 +120 +absolute + + + +0.01 +smooth + +8.536854935320978 +47.350413345774314 +428.91468240374843 +-153.25893850806426 +71.3623302175152 +0 +120 +absolute + + + +0.01 +smooth + +8.53685412512766 +47.35041375401211 +428.91504706427736 +-153.4038335082746 +71.36149498578793 +0 +120 +absolute + + + +0.01 +smooth + +8.536853313320474 +47.35041416072114 +428.915409455802 +-153.54844936417473 +71.36077975570564 +0 +120 +absolute + + + +0.01 +smooth + +8.536852499934193 +47.35041456588669 +428.91576954401114 +-153.69278513579343 +71.36018762377492 +0 +120 +absolute + + + +0.01 +smooth + +8.53685168500358 +47.35041496949404 +428.9161272945935 +-153.83683988315943 +71.35972168650247 +0 +120 +absolute + + + +0.01 +smooth + +8.536850868563404 +47.3504153715285 +428.91648267323797 +-153.98061266630125 +71.35938504039486 +0 +120 +absolute + + + +0.01 +smooth + +8.536850050648429 +47.35041577197535 +428.9168356456332 +-154.12410254524772 +71.35918078195877 +0 +120 +absolute + + + +0.01 +smooth + +8.536849231293425 +47.35041617081986 +428.9171861774679 +-154.2673085800274 +71.35911200770082 +0 +120 +absolute + + + +0.01 +smooth + +8.536848409838173 +47.350416568417785 +428.9175350034399 +-154.41025554965717 +71.35912069647448 +0 +120 +absolute + + + +0.01 +smooth + +8.536847585619451 +47.35041696512338 +428.91788285976435 +-154.55296839422311 +71.35914663185596 +0 +120 +absolute + + + +0.01 +smooth + +8.536846758667526 +47.35041736091973 +428.91822971440575 +-154.6954464153577 +71.35918961743587 +0 +120 +absolute + + + +0.01 +smooth + +8.536845929012653 +47.35041775578988 +428.91857553532805 +-154.83768891469325 +71.35924945680479 +0 +120 +absolute + + + +0.01 +smooth + +8.5368450966851 +47.35041814971688 +428.9189202904958 +-154.97969519386223 +71.3593259535534 +0 +120 +absolute + + + +0.01 +smooth + +8.536844261715125 +47.35041854268383 +428.9192639478735 +-155.12146455449727 +71.35941891127227 +0 +120 +absolute + + + +0.01 +smooth + +8.536843424132991 +47.35041893467382 +428.91960647542544 +-155.26299629823063 +71.35952813355208 +0 +120 +absolute + + + +0.01 +smooth + +8.536842583968964 +47.3504193256699 +428.9199478411161 +-155.404289726695 +71.35965342398345 +0 +120 +absolute + + + +0.01 +smooth + +8.5368417412533 +47.35041971565511 +428.9202880129095 +-155.5453441415226 +71.359794586157 +0 +120 +absolute + + + +0.01 +smooth + +8.536840896016262 +47.35042010461255 +428.9206269587704 +-155.68615884434598 +71.35995142366332 +0 +120 +absolute + + + +0.01 +smooth + +8.536840048288118 +47.350420492525295 +428.920964646663 +-155.8267331367976 +71.36012374009307 +0 +120 +absolute + + + +0.01 +smooth + +8.536839198099123 +47.35042087937641 +428.92130104455174 +-155.96706632050996 +71.36031133903694 +0 +120 +absolute + + + +0.01 +smooth + +8.536838345479545 +47.35042126514894 +428.9216361204008 +-156.1071576971155 +71.36051402408543 +0 +120 +absolute + + + +0.01 +smooth + +8.53683749045964 +47.35042164982597 +428.92196984217475 +-156.24700656824655 +71.36073159882923 +0 +120 +absolute + + + +0.01 +smooth + +8.536836633069672 +47.350422033390586 +428.9223021778379 +-156.38661223553578 +71.360963866859 +0 +120 +absolute + + + +0.01 +smooth + +8.536835773339908 +47.35042241582584 +428.9226330953546 +-156.52597400061543 +71.36121063176533 +0 +120 +absolute + + + +0.01 +smooth + +8.536834911300602 +47.3504227971148 +428.9229625626893 +-156.66509116511813 +71.36147169713882 +0 +120 +absolute + + + +0.01 +smooth + +8.536834046982024 +47.35042317724057 +428.9232905478065 +-156.80396303067627 +71.3617468665702 +0 +120 +absolute + + + +0.01 +smooth + +8.53683318041443 +47.35042355618618 +428.92361701867014 +-156.9425888989223 +71.36203594364996 +0 +120 +absolute + + + +0.01 +smooth + +8.536832311628086 +47.35042393393471 +428.92394194324487 +-157.0809680714887 +71.36233873196882 +0 +120 +absolute + + + +0.01 +smooth + +8.536831440653252 +47.350424310469236 +428.9242652894951 +-157.21909985000792 +71.36265503511736 +0 +120 +absolute + + + +0.01 +smooth + +8.536830567520193 +47.35042468577282 +428.92458702538516 +-157.35698353611247 +71.36298465668625 +0 +120 +absolute + + + +0.01 +smooth + +8.536829692259161 +47.350425059828524 +428.92490711887916 +-157.4946184314346 +71.36332740026606 +0 +120 +absolute + + + +0.01 +smooth + +8.536828814900433 +47.35042543261946 +428.925225537942 +-157.63200383760704 +71.36368306944748 +0 +120 +absolute + + + +0.01 +smooth + +8.53682793547426 +47.35042580412865 +428.92554225053766 +-157.76913905626208 +71.3640514678211 +0 +120 +absolute + + + +0.01 +smooth + +8.53682705401091 +47.35042617433917 +428.92585722463053 +-157.9060233890322 +71.36443239897754 +0 +120 +absolute + + + +0.01 +smooth + +8.536826170540643 +47.35042654323412 +428.9261704281851 +-158.0426561375499 +71.36482566650747 +0 +120 +absolute + + + +0.01 +smooth + +8.536825285093718 +47.35042691079655 +428.9264818291658 +-158.17903660344768 +71.36523107400149 +0 +120 +absolute + + + +0.01 +smooth + +8.536824397700402 +47.350427277009516 +428.92679139553684 +-158.3151640883579 +71.3656484250502 +0 +120 +absolute + + + +0.01 +smooth + +8.536823508390954 +47.350427641856115 +428.9270990952626 +-158.45103789391302 +71.36607752324426 +0 +120 +absolute + + + +0.01 +smooth + +8.536822617195638 +47.350428005319415 +428.92740489630756 +-158.58665732174558 +71.3665181721743 +0 +120 +absolute + + + +0.01 +smooth + +8.536821724144716 +47.350428367382456 +428.927708766636 +-158.72202167348792 +71.36697017543091 +0 +120 +absolute + + + +0.01 +smooth + +8.536820829268446 +47.350428728028334 +428.9280106742123 +-158.85713025077263 +71.36743333660476 +0 +120 +absolute + + + +0.01 +smooth + +8.536819932597094 +47.350429087240116 +428.9283105870009 +-158.99198235523204 +71.36790745928649 +0 +120 +absolute + + + +0.01 +smooth + +8.536819034160922 +47.350429445000856 +428.9286084729661 +-159.1265772884987 +71.36839234706665 +0 +120 +absolute + + + +0.01 +smooth + +8.536818133990193 +47.35042980129364 +428.92890430007236 +-159.26091435220505 +71.36888780353594 +0 +120 +absolute + + + +0.01 +smooth + +8.536817232115165 +47.35043015610154 +428.92919803628394 +-159.39499284798356 +71.36939363228495 +0 +120 +absolute + + + +0.01 +smooth + +8.536816328566104 +47.350430509407616 +428.9294896495653 +-159.52881207746665 +71.36990963690432 +0 +120 +absolute + + + +0.01 +smooth + +8.53681542337327 +47.35043086119494 +428.9297791078808 +-159.66237134228675 +71.37043562098468 +0 +120 +absolute + + + +0.01 +smooth + +8.536814516566924 +47.35043121144658 +428.93006637919467 +-159.7956699440764 +71.37097138811666 +0 +120 +absolute + + + +0.01 +smooth + +8.536813608177331 +47.35043156014561 +428.93035143147154 +-159.92870718446795 +71.37151674189087 +0 +120 +absolute + + + +0.01 +smooth + +8.536812698234751 +47.350431907275095 +428.9306342326755 +-160.06148236509398 +71.37207148589795 +0 +120 +absolute + + + +0.01 +smooth + +8.53681178676945 +47.35043225281811 +428.93091475077114 +-160.1939947875869 +71.37263542372851 +0 +120 +absolute + + + +0.01 +smooth + +8.536810873811683 +47.35043259675773 +428.93119295372276 +-160.32624375357912 +71.3732083589732 +0 +120 +absolute + + + +0.01 +smooth + +8.536809959391718 +47.35043293907701 +428.9314688094947 +-160.45822856470315 +71.37379009522263 +0 +120 +absolute + + + +0.01 +smooth + +8.536809043539813 +47.350433279759024 +428.9317422860513 +-160.58994852259144 +71.37438043606745 +0 +120 +absolute + + + +0.01 +smooth + +8.536808126286234 +47.35043361878685 +428.932013351357 +-160.72140292887647 +71.37497918509825 +0 +120 +absolute + + + +0.01 +smooth + +8.536807207661239 +47.350433956143554 +428.93228197337623 +-160.8525910851906 +71.3755861459057 +0 +120 +absolute + + + +0.01 +smooth + +8.536806287695093 +47.350434291812206 +428.9325481200732 +-160.9835122931664 +71.37620112208039 +0 +120 +absolute + + + +0.01 +smooth + +8.536805366418058 +47.35043462577587 +428.93281175941246 +-161.1141658544362 +71.37682391721296 +0 +120 +absolute + + + +0.01 +smooth + +8.536804443860394 +47.35043495801762 +428.9330728593582 +-161.24455107063267 +71.37745433489405 +0 +120 +absolute + + + +0.01 +smooth + +8.536803519469498 +47.35043528896768 +428.93333222786225 +-161.3746897524114 +71.37815339232151 +0 +120 +absolute + + + +0.01 +smooth + +8.536802592690607 +47.35043561905408 +428.9335906723198 +-161.50460380056737 +71.37898025333128 +0 +120 +absolute + + + +0.01 +smooth + +8.53680166355076 +47.350435948256695 +428.93384815986127 +-161.63429265194134 +71.37993194147109 +0 +120 +absolute + + + +0.01 +smooth + +8.536800732076985 +47.35043627655535 +428.93410465761696 +-161.7637557433743 +71.38100548028875 +0 +120 +absolute + + + +0.01 +smooth + +8.536799798296316 +47.35043660392989 +428.93436013271696 +-161.89299251170718 +71.38219789333196 +0 +120 +absolute + + + +0.01 +smooth + +8.536798862235788 +47.35043693036017 +428.93461455229163 +-162.02200239378078 +71.38350620414853 +0 +120 +absolute + + + +0.01 +smooth + +8.536797923922432 +47.35043725582602 +428.9348678834711 +-162.15078482643617 +71.38492743628615 +0 +120 +absolute + + + +0.01 +smooth + +8.536796983383278 +47.3504375803073 +428.9351200933858 +-162.27933924651413 +71.38645861329262 +0 +120 +absolute + + + +0.01 +smooth + +8.536796040645362 +47.35043790378384 +428.9353711491656 +-162.4076650908556 +71.38809675871568 +0 +120 +absolute + + + +0.01 +smooth + +8.536795095735712 +47.350438226235475 +428.9356210179409 +-162.53576179630153 +71.38983889610307 +0 +120 +absolute + + + +0.01 +smooth + +8.536794148681372 +47.35043854764209 +428.93586966684217 +-162.66362879969293 +71.39168204900264 +0 +120 +absolute + + + +0.01 +smooth + +8.536793199509365 +47.35043886798348 +428.93611706299936 +-162.79126553787054 +71.393623240962 +0 +120 +absolute + + + +0.01 +smooth + +8.53679224824672 +47.350439187239516 +428.9363631735427 +-162.91867144767522 +71.39565949552897 +0 +120 +absolute + + + +0.01 +smooth + +8.536791294920484 +47.35043950539004 +428.9366079656028 +-163.04584596594816 +71.39778783625135 +0 +120 +absolute + + + +0.01 +smooth + +8.536790339557678 +47.350439822414884 +428.93685140630936 +-163.17278852953 +71.40000528667686 +0 +120 +absolute + + + +0.01 +smooth + +8.536789382185335 +47.35044013829389 +428.93709346279286 +-163.29949857526174 +71.40230887035321 +0 +120 +absolute + + + +0.01 +smooth + +8.536788422830496 +47.35044045300693 +428.9373341021836 +-163.42597553998436 +71.40469561082823 +0 +120 +absolute + + + +0.01 +smooth + +8.536787461520188 +47.35044076653382 +428.9375732916119 +-163.5522188605388 +71.40716253164963 +0 +120 +absolute + + + +0.01 +smooth + +8.53678649828144 +47.3504410788544 +428.9378109982075 +-163.67822797376573 +71.40970665636516 +0 +120 +absolute + + + +0.01 +smooth + +8.536785533141293 +47.350441389948536 +428.93804718910127 +-163.80400231650634 +71.4123250085226 +0 +120 +absolute + + + +0.01 +smooth + +8.536784566126775 +47.35044169979608 +428.9382818314232 +-163.92954132560143 +71.4150146116697 +0 +120 +absolute + + + +0.01 +smooth + +8.536783597264918 +47.35044200837683 +428.9385148923033 +-164.05484443789183 +71.4177724893542 +0 +120 +absolute + + + +0.01 +smooth + +8.536782626582756 +47.35044231567066 +428.938746338872 +-164.1799110902186 +71.42059566512387 +0 +120 +absolute + + + +0.01 +smooth + +8.536781654107324 +47.35044262165742 +428.9389761382596 +-164.30474071942257 +71.42348116252647 +0 +120 +absolute + + + +0.01 +smooth + +8.536780679865652 +47.350442926316944 +428.9392042575962 +-164.42933276234464 +71.42642600510973 +0 +120 +absolute + + + +0.01 +smooth + +8.536779703884774 +47.350443229629064 +428.93943066401204 +-164.55368665582577 +71.42942721642144 +0 +120 +absolute + + + +0.01 +smooth + +8.536778726191722 +47.35044353157365 +428.9396553246374 +-164.67780183670683 +71.43248182000931 +0 +120 +absolute + + + +0.01 +smooth + +8.536777746813527 +47.35044383213054 +428.9398782066026 +-164.80167774182877 +71.43558683942115 +0 +120 +absolute + + + +0.01 +smooth + +8.536776765777224 +47.35044413127955 +428.94009927703775 +-164.92531380803246 +71.43873929820467 +0 +120 +absolute + + + +0.01 +smooth + +8.536775783109848 +47.350444429000554 +428.940318503073 +-165.0487094721589 +71.44193621990763 +0 +120 +absolute + + + +0.01 +smooth + +8.536774798838426 +47.35044472527338 +428.9405358518389 +-165.17186417104884 +71.44517462807782 +0 +120 +absolute + + + +0.01 +smooth + +8.536773812989994 +47.350445020077885 +428.94075129046536 +-165.29477734154335 +71.44845154626296 +0 +120 +absolute + + + +0.01 +smooth + +8.536772825591585 +47.350445313393884 +428.94096478608276 +-165.41744842048325 +71.45176399801082 +0 +120 +absolute + + + +0.01 +smooth + +8.53677183667023 +47.350445605201266 +428.9411763058213 +-165.53987684470948 +71.45510900686914 +0 +120 +absolute + + + +0.01 +smooth + +8.536770846252965 +47.35044589547984 +428.94138581681125 +-165.66206205106297 +71.45848359638569 +0 +120 +absolute + + + +0.01 +smooth + +8.536769854366819 +47.350446184209446 +428.94159328618275 +-165.78400347638464 +71.46188479010823 +0 +120 +absolute + + + +0.01 +smooth + +8.536768861038826 +47.35044647136996 +428.9417986810662 +-165.90570055751536 +71.4653096115845 +0 +120 +absolute + + + +0.01 +smooth + +8.536767866296021 +47.35044675694121 +428.9420019685917 +-166.02715273129604 +71.46875508436226 +0 +120 +absolute + + + +0.01 +smooth + +8.536766870165433 +47.35044704090302 +428.9422031158895 +-166.14835943456762 +71.47221823198927 +0 +120 +absolute + + + +0.01 +smooth + +8.536765872674096 +47.35044732323527 +428.9424020900899 +-166.26932010417102 +71.47569607801327 +0 +120 +absolute + + + +0.01 +smooth + +8.536764873849044 +47.35044760391777 +428.94259885832304 +-166.3900341769471 +71.47918564598204 +0 +120 +absolute + + + +0.01 +smooth + +8.536763873717309 +47.350447882930396 +428.9427933877192 +-166.51050108973683 +71.48268395944334 +0 +120 +absolute + + + +0.01 +smooth + +8.536762872305925 +47.35044816025295 +428.9429856454087 +-166.6307202793811 +71.48618804194487 +0 +120 +absolute + + + +0.01 +smooth + +8.53676186964192 +47.35044843586532 +428.94317559852163 +-166.7506911827208 +71.48969491703444 +0 +120 +absolute + + + +0.01 +smooth + +8.536760865752333 +47.35044870974731 +428.9433632141882 +-166.8704132365969 +71.4932016082598 +0 +120 +absolute + + + +0.01 +smooth + +8.536759860664192 +47.3504489818788 +428.9435484595389 +-166.9898858778503 +71.49670513916867 +0 +120 +absolute + + + +0.01 +smooth + +8.536758854404532 +47.35044925223961 +428.9437313017036 +-167.10910854332184 +71.50020253330882 +0 +120 +absolute + + + +0.01 +smooth + +8.536757847000384 +47.3504495208096 +428.94391170781284 +-167.22808066985246 +71.50369081422804 +0 +120 +absolute + + + +0.01 +smooth + +8.536756838478784 +47.35044978756859 +428.9440896449968 +-167.3468016942831 +71.50716700547405 +0 +120 +absolute + + + +0.01 +smooth + +8.536755828866763 +47.350450052496456 +428.9442650803855 +-167.4652710534547 +71.5106281305946 +0 +120 +absolute + + + +0.01 +smooth + +8.536754818191351 +47.350450315573006 +428.9444379811094 +-167.58348818420808 +71.51407121313746 +0 +120 +absolute + + + +0.01 +smooth + +8.536753805978561 +47.35045057733847 +428.94460929963196 +-167.70147341758206 +71.51754122672381 +0 +120 +absolute + + + +0.01 +smooth + +8.536752791752832 +47.350450838329664 +428.94477998432797 +-167.8192471037326 +71.52108428449537 +0 +120 +absolute + + + +0.01 +smooth + +8.53675177553885 +47.35045109852131 +428.94494999619354 +-167.9368087081763 +71.52469911928063 +0 +120 +absolute + + + +0.01 +smooth + +8.536750757361297 +47.35045135788816 +428.9451192962252 +-168.0541576964299 +71.52838446390814 +0 +120 +absolute + + + +0.01 +smooth + +8.536749737244861 +47.35045161640497 +428.94528784541956 +-168.1712935340101 +71.5321390512064 +0 +120 +absolute + + + +0.01 +smooth + +8.536748715214227 +47.35045187404647 +428.945455604773 +-168.28821568643357 +71.53596161400395 +0 +120 +absolute + + + +0.01 +smooth + +8.536747691294078 +47.35045213078745 +428.945622535282 +-168.40492361921702 +71.53985088512928 +0 +120 +absolute + + + +0.01 +smooth + +8.536746665509101 +47.35045238660263 +428.94578859794314 +-168.52141679787727 +71.54380559741101 +0 +120 +absolute + + + +0.01 +smooth + +8.536745637883978 +47.350452641466745 +428.94595375375263 +-168.63769468793075 +71.54782448367754 +0 +120 +absolute + + + +0.01 +smooth + +8.536744608443392 +47.35045289535454 +428.94611796370714 +-168.75375675489437 +71.55190627675745 +0 +120 +absolute + + + +0.01 +smooth + +8.53674357721203 +47.35045314824078 +428.94628118880314 +-168.86960246428478 +71.55604970947925 +0 +120 +absolute + + + +0.01 +smooth + +8.53674254421458 +47.35045340010023 +428.946443390037 +-168.9852312816186 +71.56025351467149 +0 +120 +absolute + + + +0.01 +smooth + +8.53674150947572 +47.35045365090759 +428.94660452840526 +-169.10064267241265 +71.56451642516267 +0 +120 +absolute + + + +0.01 +smooth + +8.536740473020137 +47.350453900637625 +428.9467645649043 +-169.21583610218346 +71.56883717378129 +0 +120 +absolute + + + +0.01 +smooth + +8.53673943487252 +47.3504541492651 +428.9469234605307 +-169.33081103644787 +71.57321449335589 +0 +120 +absolute + + + +0.01 +smooth + +8.536738395057546 +47.35045439676475 +428.9470811762809 +-169.44556694072247 +71.57764711671503 +0 +120 +absolute + + + +0.01 +smooth + +8.536737353599905 +47.35045464311131 +428.94723767315116 +-169.56010328052406 +71.58213377668719 +0 +120 +absolute + + + +0.01 +smooth + +8.536736310524283 +47.35045488827957 +428.9473929121385 +-169.67441952136934 +71.58667320610093 +0 +120 +absolute + + + +0.01 +smooth + +8.53673526585536 +47.35045513224422 +428.9475468542387 +-169.78851512877486 +71.59126413778468 +0 +120 +absolute + + + +0.01 +smooth + +8.536734219617822 +47.35045537498005 +428.9476994604487 +-169.90238956825746 +71.59590530456708 +0 +120 +absolute + + + +0.01 +smooth + +8.536733171836357 +47.35045561646177 +428.9478506917648 +-170.01604230533374 +71.60059543927659 +0 +120 +absolute + + + +0.01 +smooth + +8.536732122535645 +47.35045585666417 +428.94800050918354 +-170.12947280552046 +71.60533327474177 +0 +120 +absolute + + + +0.01 +smooth + +8.53673107174037 +47.350456095561945 +428.94814887370126 +-170.2426805343342 +71.61011754379108 +0 +120 +absolute + + + +0.01 +smooth + +8.536730019475224 +47.3504563331299 +428.9482957463145 +-170.3556649572919 +71.61494697925309 +0 +120 +absolute + + + +0.01 +smooth + +8.536728965764883 +47.35045656934274 +428.94844108801976 +-170.46842553991002 +71.61982031395632 +0 +120 +absolute + + + +0.01 +smooth + +8.536727910634038 +47.350456804175224 +428.9485848598135 +-170.58096174770535 +71.62473628072928 +0 +120 +absolute + + + +0.01 +smooth + +8.536726854107371 +47.350457037602105 +428.94872702269214 +-170.69327304619458 +71.6296936124005 +0 +120 +absolute + + + +0.01 +smooth + +8.536725796209566 +47.35045726959814 +428.94886753765223 +-170.80535890089436 +71.6346910417985 +0 +120 +absolute + + + +0.01 +smooth + +8.536724736965308 +47.35045750013804 +428.94900636569014 +-170.91721877732147 +71.6397273017518 +0 +120 +absolute + + + +0.01 +smooth + +8.536723676399284 +47.350457729196584 +428.9491434678025 +-171.02885214099254 +71.64480112508892 +0 +120 +absolute + + + +0.01 +smooth + +8.536722614536174 +47.3504579567485 +428.9492788049856 +-171.1402584574243 +71.6499112446384 +0 +120 +absolute + + + +0.01 +smooth + +8.536721551400666 +47.35045818276856 +428.9494123382359 +-171.25143719213338 +71.65505639322873 +0 +120 +absolute + + + +0.01 +smooth + +8.536720487017446 +47.35045840723149 +428.9495440285501 +-171.36238781063656 +71.66023530368848 +0 +120 +absolute + + + +0.01 +smooth + +8.536719421411194 +47.35045863011204 +428.9496738369244 +-171.4731097784505 +71.66544670884613 +0 +120 +absolute + + + +0.01 +smooth + +8.536718354606599 +47.350458851384964 +428.9498017243554 +-171.58360256109188 +71.67068934153022 +0 +120 +absolute + + + +0.01 +smooth + +8.536717286628342 +47.350459071024986 +428.94992765183946 +-171.69386562407743 +71.67596193456927 +0 +120 +absolute + + + +0.01 +smooth + +8.53671621750111 +47.35045928900689 +428.95005158037327 +-171.8038984329238 +71.6812632207918 +0 +120 +absolute + + + +0.01 +smooth + +8.536715147249588 +47.3504595053054 +428.95017347095313 +-171.91370045314773 +71.68659193302635 +0 +120 +absolute + + + +0.01 +smooth + +8.536714075898459 +47.350459719895255 +428.9502932845755 +-172.02327115026588 +71.6919468041014 +0 +120 +absolute + + + +0.01 +smooth + +8.53671300347241 +47.350459932751235 +428.9504109822369 +-172.13260998979496 +71.69732656684553 +0 +120 +absolute + + + +0.01 +smooth + +8.536711929996123 +47.35046014384807 +428.9505265249338 +-172.24171643725165 +71.70272995408722 +0 +120 +absolute + + + +0.01 +smooth + +8.536710855494283 +47.35046035316048 +428.9506398736627 +-172.3505899581527 +71.708155698655 +0 +120 +absolute + + + +0.01 +smooth + +8.536709779991575 +47.35046056066325 +428.95075098942 +-172.45923001801475 +71.71360253337741 +0 +120 +absolute + + + +0.01 +smooth + +8.536708703512685 +47.35046076633111 +428.9508598332022 +-172.5676360823545 +71.71906919108295 +0 +120 +absolute + + + +0.01 +smooth + +8.536707626082297 +47.35046097013881 +428.95096636600573 +-172.6758076166887 +71.72455440460016 +0 +120 +absolute + + + +0.01 +smooth + +8.536706547725094 +47.350461172061095 +428.95107054882715 +-172.78374408653394 +71.73005690675754 +0 +120 +absolute + + + +0.01 +smooth + +8.536705468465762 +47.35046137207272 +428.9511723426628 +-172.89144495740703 +71.73557543038365 +0 +120 +absolute + + + +0.01 +smooth + +8.536704388328985 +47.350461570148425 +428.9512717085093 +-172.99890969482456 +71.74110870830698 +0 +120 +absolute + + + +0.01 +smooth + +8.536703307339451 +47.35046176626295 +428.95136860736295 +-173.10613776430336 +71.74665547335609 +0 +120 +absolute + + + +0.01 +smooth + +8.53670222552184 +47.350461960391065 +428.9514630002204 +-173.21312863135995 +71.75221445835945 +0 +120 +absolute + + + +0.01 +smooth + +8.536701142900837 +47.35046215250749 +428.951554848078 +-173.3198817615112 +71.7577843961456 +0 +120 +absolute + + + +0.01 +smooth + +8.53670005905989 +47.35046234333756 +428.9516454982467 +-173.4264175843148 +71.76338770741897 +0 +120 +absolute + + + +0.01 +smooth + +8.53669897358131 +47.350462533600236 +428.95173628010525 +-173.53275648470114 +71.76904714073736 +0 +120 +absolute + + + +0.01 +smooth + +8.536697886488069 +47.35046272326062 +428.95182712775147 +-173.63889786124602 +71.77476192070928 +0 +120 +absolute + + + +0.01 +smooth + +8.536696797803144 +47.350462912283916 +428.95191797528344 +-173.744841112525 +71.78053127194339 +0 +120 +absolute + + + +0.01 +smooth + +8.536695707549514 +47.35046310063523 +428.95200875679916 +-173.85058563711382 +71.78635441904817 +0 +120 +absolute + + + +0.01 +smooth + +8.536694615750154 +47.35046328827976 +428.9520994063964 +-173.9561308335881 +71.79223058663223 +0 +120 +absolute + + + +0.01 +smooth + +8.536693522428038 +47.3504634751826 +428.95218985817314 +-174.0614761005236 +71.79815899930415 +0 +120 +absolute + + + +0.01 +smooth + +8.536692427606148 +47.350463661308964 +428.95228004622754 +-174.16662083649587 +71.80413888167247 +0 +120 +absolute + + + +0.01 +smooth + +8.536691331307454 +47.35046384662396 +428.95236990465725 +-174.2715644400807 +71.8101694583458 +0 +120 +absolute + + + +0.01 +smooth + +8.536690233554937 +47.35046403109278 +428.9524593675605 +-174.3763063098537 +71.81624995393265 +0 +120 +absolute + + + +0.01 +smooth + +8.536689134371573 +47.35046421468054 +428.9525483690351 +-174.48084584439056 +71.82237959304167 +0 +120 +absolute + + + +0.01 +smooth + +8.536688033780335 +47.3504643973524 +428.95263684317905 +-174.58518244226693 +71.82855760028137 +0 +120 +absolute + + + +0.01 +smooth + +8.536686931804201 +47.35046457907352 +428.95272472409016 +-174.68931550205846 +71.8347832002603 +0 +120 +absolute + + + +0.01 +smooth + +8.536685828466153 +47.35046475980907 +428.95281194586676 +-174.793244422341 +71.8410556175871 +0 +120 +absolute + + + +0.01 +smooth + +8.536684723789161 +47.35046493952417 +428.9528984426065 +-174.89696860169 +71.84737407687031 +0 +120 +absolute + + + +0.01 +smooth + +8.536683617796198 +47.350465118183976 +428.95298414840727 +-175.00048743868115 +71.85373780271846 +0 +120 +absolute + + + +0.01 +smooth + +8.536682510510254 +47.35046529575368 +428.9530689973673 +-175.10380033189028 +71.86014601974017 +0 +120 +absolute + + + +0.01 +smooth + +8.536681401954294 +47.350465472198394 +428.95315292358447 +-175.206906679893 +71.86659795254401 +0 +120 +absolute + + + +0.01 +smooth + +8.536680292151296 +47.35046564748326 +428.9532358611565 +-175.30980588126485 +71.87309282573851 +0 +120 +absolute + + + +0.01 +smooth + +8.53667918112424 +47.350465821573486 +428.95331774418156 +-175.4124973345817 +71.87962986393228 +0 +120 +absolute + + + +0.01 +smooth + +8.536678068896098 +47.35046599443419 +428.9533985067576 +-175.51498043841914 +71.88620829173388 +0 +120 +absolute + + + +0.01 +smooth + +8.53667695548985 +47.35046616603051 +428.9534780829825 +-175.61725459135278 +71.89282733375185 +0 +120 +absolute + + + +0.01 +smooth + +8.536675840928472 +47.35046633632762 +428.95355640695425 +-175.7193191919584 +71.8994862145948 +0 +120 +absolute + + + +0.01 +smooth + +8.536674725234938 +47.35046650529066 +428.95363341277084 +-175.82117363881156 +71.90618415887126 +0 +120 +absolute + + + +0.01 +smooth + +8.53667360843223 +47.350466672884814 +428.95370903453016 +-175.9228173304881 +71.91292039118983 +0 +120 +absolute + + + +0.01 +smooth + +8.536672490543317 +47.35046683907519 +428.95378320633023 +-176.02424966556347 +71.9196941361591 +0 +120 +absolute + + + +0.01 +smooth + +8.536671371591181 +47.350467003826964 +428.95385586226894 +-176.1254700426135 +71.92650461838755 +0 +120 +absolute + + + +0.01 +smooth + +8.536670251598796 +47.35046716710529 +428.95392693644425 +-176.2264778602139 +71.93335106248387 +0 +120 +absolute + + + +0.01 +smooth + +8.53666913058914 +47.35046732887531 +428.9539963629542 +-176.32727251694013 +71.94023269305654 +0 +120 +absolute + + + +0.01 +smooth + +8.536668008585186 +47.35046748910218 +428.95406407589667 +-176.42785341136812 +71.94714873471416 +0 +120 +absolute + + + +0.01 +smooth + +8.536666885609915 +47.35046764775106 +428.9541300093696 +-176.52821994207335 +71.9540984120653 +0 +120 +absolute + + + +0.01 +smooth + +8.536665761686299 +47.3504678047871 +428.9541940974709 +-176.62837150763158 +71.96108094971854 +0 +120 +absolute + + + +0.01 +smooth + +8.536664636837319 +47.35046796017545 +428.9542562742988 +-176.72830750661848 +71.96809557228244 +0 +120 +absolute + + + +0.01 +smooth + +8.536663511085948 +47.350468113881256 +428.9543164739509 +-176.8280273376097 +71.97514150436555 +0 +120 +absolute + + + +0.01 +smooth + +8.536662384455164 +47.35046826586968 +428.9543746305254 +-176.92753039918097 +71.98221797057647 +0 +120 +absolute + + + +0.01 +smooth + +8.536661256967943 +47.350468416105876 +428.95443067812016 +-177.0268160899078 +71.98932419552375 +0 +120 +absolute + + + +0.01 +smooth + +8.536660128647261 +47.35046856455499 +428.9544845508331 +-177.1258838083661 +71.99645940381598 +0 +120 +absolute + + + +0.01 +smooth + +8.536658999516096 +47.350468711182174 +428.95453618276224 +-177.22473295313137 +72.00362282006171 +0 +120 +absolute + + + +0.01 +smooth + +8.536657869597422 +47.350468855952585 +428.95458550800555 +-177.32336292277932 +72.01081366886952 +0 +120 +absolute + + + +0.01 +smooth + +8.536656738914218 +47.35046899883137 +428.95463246066095 +-177.42177311588563 +72.01803117484798 +0 +120 +absolute + + + +0.01 +smooth + +8.536655607489461 +47.35046913978369 +428.9546769748263 +-177.51996293102604 +72.02527456260565 +0 +120 +absolute + + + +0.01 +smooth + +8.536654475346122 +47.350469278774696 +428.95471898459977 +-177.6179317667761 +72.03254305675111 +0 +120 +absolute + + + +0.01 +smooth + +8.536653342507183 +47.350469415769524 +428.95475842407916 +-177.7156790217116 +72.03983588189293 +0 +120 +absolute + + + +0.01 +smooth + +8.53665220899562 +47.35046955073335 +428.95479522736235 +-177.81320409440815 +72.04715226263966 +0 +120 +absolute + + + +0.01 +smooth + +8.536651074834404 +47.35046968363132 +428.9548293285476 +-177.91050638344137 +72.05449142359988 +0 +120 +absolute + + + +0.01 +smooth + +8.53664994004652 +47.350469814428564 +428.95486066173254 +-178.00758528738706 +72.06185258938218 +0 +120 +absolute + + + +0.01 +smooth + +8.536648804654938 +47.35046994309027 +428.9548891610153 +-178.10444020482083 +72.06923498459511 +0 +120 +absolute + + + +0.01 +smooth + +8.536647668682635 +47.350470069581576 +428.9549147604938 +-178.20107053431832 +72.07663783384726 +0 +120 +absolute + + + +0.01 +smooth + +8.53664653215259 +47.35047019386762 +428.9549373942659 +-178.29747567445523 +72.08406036174716 +0 +120 +absolute + + + +0.01 +smooth + +8.53664539508778 +47.350470315913576 +428.9549569964298 +-178.39365502380724 +72.09150179290343 +0 +120 +absolute + + + +0.01 +smooth + +8.536644257511172 +47.35047043568457 +428.9549735010831 +-178.48960798095 +72.0989613519246 +0 +120 +absolute + + + +0.01 +smooth + +8.53664311904732 +47.35047055432695 +428.95498834294426 +-178.5853565547266 +72.10645342805111 +0 +120 +absolute + + + +0.01 +smooth + +8.536641979319937 +47.35047067296908 +428.95500299778695 +-178.68092265984205 +72.11399257364462 +0 +120 +absolute + + + +0.01 +smooth + +8.536640838350777 +47.35047079154921 +428.95501746129264 +-178.7763055536651 +72.1215782579953 +0 +120 +absolute + + + +0.01 +smooth + +8.53663969616159 +47.35047091000563 +428.9550317291427 +-178.87150449356443 +72.12920995039339 +0 +120 +absolute + + + +0.01 +smooth + +8.536638552774125 +47.35047102827663 +428.95504579701884 +-178.96651873690888 +72.13688712012916 +0 +120 +absolute + + + +0.01 +smooth + +8.536637408210144 +47.35047114630044 +428.95505966060244 +-179.06134754106714 +72.14460923649285 +0 +120 +absolute + + + +0.01 +smooth + +8.536636262491387 +47.35047126401537 +428.9550733155749 +-179.1559901634079 +72.1523757687747 +0 +120 +absolute + + + +0.01 +smooth + +8.536635115639617 +47.350471381359654 +428.95508675761795 +-179.25044586130005 +72.160186186265 +0 +120 +absolute + + + +0.01 +smooth + +8.536633967676577 +47.35047149827158 +428.9550999824127 +-179.34471389211214 +72.16803995825389 +0 +120 +absolute + + + +0.01 +smooth + +8.536632818624025 +47.35047161468941 +428.955112985641 +-179.43879351321297 +72.1759365540317 +0 +120 +absolute + + + +0.01 +smooth + +8.536631668503704 +47.350471730551426 +428.9551257629841 +-179.53268398197127 +72.18387544288862 +0 +120 +absolute + + + +0.01 +smooth + +8.536630517337377 +47.3504718457959 +428.9551383101236 +-179.6263845557559 +72.19185609411497 +0 +120 +absolute + + + +0.01 +smooth + +8.53662936514679 +47.3504719603611 +428.95515062274075 +-179.7198944919354 +72.1998779770009 +0 +120 +absolute + + + +0.01 +smooth + +8.536628211953694 +47.35047207418525 +428.9551626965172 +-179.81321304787858 +72.20794056083668 +0 +120 +absolute + + + +0.01 +smooth + +8.536627057779842 +47.35047218720669 +428.9551745271346 +-179.90633948095424 +72.2160433149126 +0 +120 +absolute + + + +0.01 +smooth + +8.536625902646987 +47.35047229936366 +428.95518611027416 +-179.99927304853105 +72.22418570851886 +0 +120 +absolute + + + +0.01 +smooth + +8.53662474657688 +47.35047241059441 +428.9551974416175 +-180.09201300797778 +72.23236721094571 +0 +120 +absolute + + + +0.01 +smooth + +8.536623589591274 +47.35047252083726 +428.95520851684614 +-180.1845586166632 +72.24058729148341 +0 +120 +absolute + + + +0.01 +smooth + +8.53662243171192 +47.35047263003044 +428.95521933164144 +-180.276909131956 +72.2488454194222 +0 +120 +absolute + + + +0.01 +smooth + +8.53662127296057 +47.35047273811223 +428.9552298816849 +-180.3690638112249 +72.2571410640523 +0 +120 +absolute + + + +0.01 +smooth + +8.536620113358975 +47.350472845020896 +428.9552401626581 +-180.46102191183857 +72.26547369466398 +0 +120 +absolute + + + +0.01 +smooth + +8.536618952928889 +47.35047295069472 +428.95525017024255 +-180.55278269116593 +72.27384278054747 +0 +120 +absolute + + + +0.01 +smooth + +8.536617791692057 +47.35047305507195 +428.9552599001193 +-180.6443454065755 +72.28224779099298 +0 +120 +absolute + + + +0.01 +smooth + +8.536616629670242 +47.350473158090885 +428.95526934797044 +-180.73570931543628 +72.29068819529084 +0 +120 +absolute + + + +0.01 +smooth + +8.536615466885188 +47.35047325968978 +428.9552785094772 +-180.8268736751168 +72.29916346273123 +0 +120 +absolute + + + +0.01 +smooth + +8.536614303358647 +47.350473359806905 +428.955287380321 +-180.9178377429858 +72.30767306260438 +0 +120 +absolute + + + +0.01 +smooth + +8.536613139112374 +47.350473458380534 +428.9552959561833 +-181.00860077641215 +72.31621646420058 +0 +120 +absolute + + + +0.01 +smooth + +8.53661197416812 +47.35047355534893 +428.9553042327458 +-181.0991620327644 +72.32479313681003 +0 +120 +absolute + + + +0.01 +smooth + +8.536610808547636 +47.35047365065037 +428.95531220568967 +-181.18952076941153 +72.33340254972302 +0 +120 +absolute + + + +0.01 +smooth + +8.536609642272674 +47.35047374422312 +428.95531987069666 +-181.27967624372204 +72.34204417222975 +0 +120 +absolute + + + +0.01 +smooth + +8.536608475364986 +47.350473836005456 +428.9553272234481 +-181.36962771306483 +72.35071747362048 +0 +120 +absolute + + + +0.01 +smooth + +8.536607307846324 +47.350473925935646 +428.95533425962543 +-181.45937443480852 +72.35942192318548 +0 +120 +absolute + + + +0.01 +smooth + +8.536606139738442 +47.350474013951946 +428.9553409749103 +-181.54891566632196 +72.36815699021494 +0 +120 +absolute + + + +0.01 +smooth + +8.536604971063088 +47.35047409999264 +428.9553473649841 +-181.6382506649738 +72.37692214399915 +0 +120 +absolute + + + +0.01 +smooth + +8.536603801842015 +47.350474183996006 +428.9553534255284 +-181.72737868813277 +72.38571685382834 +0 +120 +absolute + + + +0.01 +smooth + +8.536602632096976 +47.3504742659003 +428.9553591522245 +-181.81629899316766 +72.39454058899273 +0 +120 +absolute + + + +0.01 +smooth + +8.536601461849722 +47.3504743456438 +428.955364540754 +-181.9050108374472 +72.40339281878259 +0 +120 +absolute + + + +0.01 +smooth + +8.536600291122006 +47.35047442316477 +428.9553695867984 +-181.9935134783401 +72.41227301248816 +0 +120 +absolute + + + +0.01 +smooth + +8.536599119935579 +47.35047449840148 +428.95537428603916 +-182.0818061732151 +72.42118063939967 +0 +120 +absolute + + + +0.01 +smooth + +8.536597948312192 +47.35047457129221 +428.9553786341577 +-182.16988817944093 +72.43011516880738 +0 +120 +absolute + + + +0.01 +smooth + +8.536596776273598 +47.350474641775214 +428.95538262683556 +-182.25775875438637 +72.4390760700015 +0 +120 +absolute + + + +0.01 +smooth + +8.53659560384155 +47.35047470978878 +428.95538625975416 +-182.34541715542014 +72.44806281227233 +0 +120 +absolute + + + +0.01 +smooth + +8.536594431037795 +47.35047477527117 +428.9553895285951 +-182.43286263991092 +72.45707486491007 +0 +120 +absolute + + + +0.01 +smooth + +8.53659325788409 +47.350474838160636 +428.9553924290398 +-182.5200944652275 +72.46611169720498 +0 +120 +absolute + + + +0.01 +smooth + +8.536592084402187 +47.350474898395476 +428.95539495676974 +-182.60711188873864 +72.47517277844729 +0 +120 +absolute + + + +0.01 +smooth + +8.536590910613835 +47.35047495591396 +428.95539710746635 +-182.69391416781298 +72.48425757792725 +0 +120 +absolute + + + +0.01 +smooth + +8.536589736540787 +47.350475010654336 +428.95539887681116 +-182.78050055981936 +72.49336556493512 +0 +120 +absolute + + + +0.01 +smooth + +8.536588562204793 +47.350475062554885 +428.95540026048565 +-182.8668703221265 +72.50249620876112 +0 +120 +absolute + + + +0.01 +smooth + +8.536587387627607 +47.35047511155388 +428.9554012541713 +-182.95302271210304 +72.5116489786955 +0 +120 +absolute + + + +0.01 +smooth + +8.536586212830981 +47.35047515758959 +428.95540185354974 +-183.03895698711787 +72.5208233440285 +0 +120 +absolute + + + +0.01 +smooth + +8.536585037836666 +47.350475200600286 +428.9554020543021 +-183.12467240453958 +72.53001877405038 +0 +120 +absolute + + + +0.01 +smooth + +8.536583862297128 +47.35047524201475 +428.95540088458137 +-183.21019376827917 +72.53924546475118 +0 +120 +absolute + + + +0.01 +smooth + +8.536582685864277 +47.35047528328471 +428.9553974137719 +-183.2955457572995 +72.54851370723416 +0 +120 +absolute + + + +0.01 +smooth + +8.536581508559 +47.35047532438291 +428.9553916994035 +-183.38072744154755 +72.5578231134594 +0 +120 +absolute + + + +0.01 +smooth + +8.536580330402195 +47.350475365282016 +428.9553837990054 +-183.46573789096976 +72.56717329538684 +0 +120 +absolute + + + +0.01 +smooth + +8.536579151414765 +47.35047540595474 +428.955373770107 +-183.5505761755132 +72.57656386497658 +0 +120 +absolute + + + +0.01 +smooth + +8.536577971617604 +47.350475446373764 +428.9553616702377 +-183.63524136512447 +72.58599443418856 +0 +120 +absolute + + + +0.01 +smooth + +8.53657679103161 +47.35047548651182 +428.9553475569271 +-183.71973252975044 +72.59546461498286 +0 +120 +absolute + + + +0.01 +smooth + +8.536575609677685 +47.35047552634162 +428.95533148770477 +-183.804048739338 +72.60497401931953 +0 +120 +absolute + + + +0.01 +smooth + +8.536574427576724 +47.35047556583582 +428.9553135200998 +-183.88818906383364 +72.61452225915856 +0 +120 +absolute + + + +0.01 +smooth + +8.536573244749622 +47.35047560496716 +428.95529371164184 +-183.97215257318436 +72.62410894645997 +0 +120 +absolute + + + +0.01 +smooth + +8.536572061217278 +47.35047564370832 +428.9552721198603 +-184.05593833733678 +72.63373369318379 +0 +120 +absolute + + + +0.01 +smooth + +8.536570877000592 +47.35047568203203 +428.9552488022847 +-184.13954542623787 +72.64339611129006 +0 +120 +absolute + + + +0.01 +smooth + +8.536569692120459 +47.350475719910946 +428.9552238164442 +-184.22297290983414 +72.65309581273878 +0 +120 +absolute + + + +0.01 +smooth + +8.53656850659778 +47.350475757317824 +428.95519721986864 +-184.30621985807275 +72.66283240949001 +0 +120 +absolute + + + +0.01 +smooth + +8.53656732045345 +47.350475794225325 +428.9551690700873 +-184.38928534090013 +72.67260551350375 +0 +120 +absolute + + + +0.01 +smooth + +8.536566133708368 +47.35047583060617 +428.9551394246296 +-184.4721684282632 +72.68241473674004 +0 +120 +absolute + + + +0.01 +smooth + +8.536564946383427 +47.35047586643306 +428.9551083410248 +-184.55486819010875 +72.69225969115887 +0 +120 +absolute + + + +0.01 +smooth + +8.536563758499533 +47.35047590167871 +428.9550758768029 +-184.63738369638355 +72.70213998872032 +0 +120 +absolute + + + +0.01 +smooth + +8.536562570077578 +47.35047593631579 +428.9550420894926 +-184.7197140170343 +72.71205524138438 +0 +120 +absolute + + + +0.01 +smooth + +8.536561381138462 +47.35047597031702 +428.9550070366239 +-184.80185822200787 +72.72200506111106 +0 +120 +absolute + + + +0.01 +smooth + +8.536560191703082 +47.35047600365511 +428.95497077572605 +-184.883815381251 +72.73198905986042 +0 +120 +absolute + + + +0.01 +smooth + +8.536559001792334 +47.350476036302744 +428.95493336432855 +-184.96558456471044 +72.74200684959249 +0 +120 +absolute + + + +0.01 +smooth + +8.536557811427116 +47.350476068232624 +428.9548948599607 +-185.04716484233302 +72.75205804226724 +0 +120 +absolute + + + +0.01 +smooth + +8.536556620628332 +47.350476099417484 +428.9548553201522 +-185.12855528406553 +72.76214224984477 +0 +120 +absolute + + + +0.01 +smooth + +8.536555429416872 +47.35047612983 +428.9548148024323 +-185.20975495985465 +72.77225908428508 +0 +120 +absolute + + + +0.01 +smooth + +8.536554237813636 +47.35047615944288 +428.9547733643304 +-185.29076293964727 +72.78240815754815 +0 +120 +absolute + + + +0.01 +smooth + +8.536553045839522 +47.35047618822882 +428.954731063376 +-185.3715782933901 +72.79258908159404 +0 +120 +absolute + + + +0.01 +smooth + +8.53655185351543 +47.35047621616053 +428.9546879570987 +-185.4522000910299 +72.8028014683828 +0 +120 +absolute + + + +0.01 +smooth + +8.536550660862254 +47.35047624321071 +428.9546441030278 +-185.5326274025135 +72.8130449298744 +0 +120 +absolute + + + +0.01 +smooth + +8.536549467900892 +47.35047626935206 +428.9545995586928 +-185.6128592977877 +72.8233190780289 +0 +120 +absolute + + + +0.01 +smooth + +8.536548274652246 +47.35047629455727 +428.95455438162304 +-185.69289484679922 +72.83362352480633 +0 +120 +absolute + + + +0.01 +smooth + +8.536547081137208 +47.35047631879907 +428.9545086293481 +-185.77273311949486 +72.8439578821667 +0 +120 +absolute + + + +0.01 +smooth + +8.536545887376679 +47.35047634205014 +428.9544623593973 +-185.85237318582136 +72.85432176207004 +0 +120 +absolute + + + +0.01 +smooth + +8.536544693391557 +47.35047636428319 +428.9544156293002 +-185.93181411572556 +72.86471477647638 +0 +120 +absolute + + + +0.01 +smooth + +8.536543499202736 +47.35047638547093 +428.9543684965862 +-186.0110549791542 +72.87513653734572 +0 +120 +absolute + + + +0.01 +smooth + +8.536542304831121 +47.35047640558605 +428.95432101878464 +-186.09009484605406 +72.88558665663811 +0 +120 +absolute + + + +0.01 +smooth + +8.536541110297602 +47.350476424601254 +428.95427325342513 +-186.16893278637193 +72.89606474631358 +0 +120 +absolute + + + +0.01 +smooth + +8.53653991562308 +47.350476442489246 +428.954225258037 +-186.24756787005455 +72.90657041833217 +0 +120 +absolute + + + +0.01 +smooth + +8.536538720828455 +47.35047645922273 +428.9541770901498 +-186.3259991670488 +72.91710328465385 +0 +120 +absolute + + + +0.01 +smooth + +8.53653752593462 +47.35047647477441 +428.9541288072928 +-186.4042257473013 +72.92766295723868 +0 +120 +absolute + + + +0.01 +smooth + +8.536536330962477 +47.35047648911698 +428.9540804669957 +-186.48224668075898 +72.93824904804669 +0 +120 +absolute + + + +0.01 +smooth + +8.536535135932919 +47.350476502223145 +428.9540321267877 +-186.5600610373685 +72.94886116903788 +0 +120 +absolute + + + +0.01 +smooth + +8.536533940866848 +47.35047651406562 +428.95398384419843 +-186.6376678870767 +72.95949893217232 +0 +120 +absolute + + + +0.01 +smooth + +8.53653274578516 +47.35047652461709 +428.95393567675717 +-186.71506629983037 +72.97016194940998 +0 +120 +absolute + + + +0.01 +smooth + +8.536531550708752 +47.35047653385026 +428.9538876819935 +-186.79225534557622 +72.98084983271093 +0 +120 +absolute + + + +0.01 +smooth + +8.536530355658524 +47.35047654173784 +428.95383991743677 +-186.86923409426112 +72.99156219403517 +0 +120 +absolute + + + +0.01 +smooth + +8.536529160655371 +47.35047654825253 +428.95379244061644 +-186.94600161583173 +73.00229864534273 +0 +120 +absolute + + + +0.01 +smooth + +8.536527965720193 +47.35047655336702 +428.953745309062 +-187.02255698023498 +73.01305879859363 +0 +120 +absolute + + + +0.01 +smooth + +8.536526770873888 +47.35047655705403 +428.9536985803029 +-187.09889925741751 +73.02384226574793 +0 +120 +absolute + + + +0.01 +smooth + +8.536525576137349 +47.35047655928626 +428.95365231186855 +-187.17502751732616 +73.03464865876562 +0 +120 +absolute + + + +0.01 +smooth + +8.536524381531478 +47.3504765600364 +428.9536065612884 +-187.25094082990768 +73.04547758960672 +0 +120 +absolute + + + +0.01 +smooth + +8.536523186725752 +47.35047655893499 +428.9535604975496 +-187.32666764616286 +73.0563368305967 +0 +120 +absolute + + + +0.01 +smooth + +8.536521991389266 +47.35047655566193 +428.9535132692229 +-187.4022362808502 +73.06723420880103 +0 +120 +absolute + + + +0.01 +smooth + +8.536520795542353 +47.350476550263906 +428.9534649032132 +-187.47764559955294 +73.07816941828983 +0 +120 +absolute + + + +0.01 +smooth + +8.536519599205342 +47.350476542787646 +428.95341542642535 +-187.5528944678543 +73.08914215313317 +0 +120 +absolute + + + +0.01 +smooth + +8.536518402398558 +47.350476533279874 +428.95336486576406 +-187.6279817513376 +73.10015210740117 +0 +120 +absolute + + + +0.01 +smooth + +8.536517205142337 +47.3504765217873 +428.9533132481344 +-187.7029063155861 +73.1111989751639 +0 +120 +absolute + + + +0.01 +smooth + +8.536516007457005 +47.35047650835662 +428.953260600441 +-187.77766702618302 +73.12228245049148 +0 +120 +absolute + + + +0.01 +smooth + +8.536514809362894 +47.350476493034606 +428.9532069495889 +-187.85226274871175 +73.13340222745401 +0 +120 +absolute + + + +0.01 +smooth + +8.53651361088033 +47.350476475867914 +428.9531523224828 +-187.92669234875544 +73.14455800012153 +0 +120 +absolute + + + +0.01 +smooth + +8.536512412029644 +47.35047645690327 +428.9530967460274 +-188.0009546918973 +73.1557494625642 +0 +120 +absolute + + + +0.01 +smooth + +8.53651121283117 +47.35047643618744 +428.9530402471281 +-188.07504864372086 +73.16697630885216 +0 +120 +absolute + + + +0.01 +smooth + +8.536510013305232 +47.35047641376708 +428.95298285268916 +-188.1489730698091 +73.17823823305535 +0 +120 +absolute + + + +0.01 +smooth + +8.536508813472166 +47.35047638968892 +428.95292458961563 +-188.22272683574548 +73.18953492924399 +0 +120 +absolute + + + +0.01 +smooth + +8.536507613352295 +47.350476363999704 +428.95286548481243 +-188.29630880711318 +73.20086609148815 +0 +120 +absolute + + + +0.01 +smooth + +8.536506412965956 +47.350476336746134 +428.9528055651846 +-188.3697178494956 +73.21223141385796 +0 +120 +absolute + + + +0.01 +smooth + +8.536505212333468 +47.350476307974915 +428.9527448576363 +-188.4429528284757 +73.22363059042343 +0 +120 +absolute + + + +0.01 +smooth + +8.536504011475174 +47.35047627773278 +428.9526833890732 +-188.5160126096371 +73.23506331525473 +0 +120 +absolute + + + +0.01 +smooth + +8.536502810411394 +47.35047624606643 +428.9526211863997 +-188.58889605856294 +73.24652928242193 +0 +120 +absolute + + + +0.01 +smooth + +8.536501609162457 +47.350476213022574 +428.95255827652045 +-188.6616020408363 +73.25802818599513 +0 +120 +absolute + + + +0.01 +smooth + +8.536500407748699 +47.35047617864795 +428.9524946863408 +-188.73412942204075 +73.26955972004441 +0 +120 +absolute + + + +0.01 +smooth + +8.536499206190445 +47.35047614298927 +428.9524304427654 +-188.80647706775935 +73.28112357863988 +0 +120 +absolute + + + +0.01 +smooth + +8.536498004508028 +47.35047610609323 +428.95236557269885 +-188.8786438435755 +73.29271945585162 +0 +120 +absolute + + + +0.01 +smooth + +8.536496802721775 +47.350476068006586 +428.95230010304624 +-188.9506286150724 +73.30434704574978 +0 +120 +absolute + + + +0.01 +smooth + +8.53649560085202 +47.350476028776 +428.9522340607124 +-189.02243024783326 +73.3160060424044 +0 +120 +absolute + + + +0.01 +smooth + +8.536494398919087 +47.35047598844823 +428.95216747260224 +-189.09404760744147 +73.3276961398856 +0 +120 +absolute + + + +0.01 +smooth + +8.53649319694331 +47.35047594706998 +428.95210036562037 +-189.1654795594802 +73.33941703226346 +0 +120 +absolute + + + +0.01 +smooth + +8.536491994945015 +47.35047590468796 +428.9520327666719 +-189.23672496953282 +73.3511684136081 +0 +120 +absolute + + + +0.01 +smooth + +8.536490792944537 +47.3504758613489 +428.9519647026615 +-189.3077827031825 +73.36294997798959 +0 +120 +absolute + + + +0.01 +smooth + +8.5364895909622 +47.35047581709951 +428.95189620049405 +-189.37865162601258 +73.37476141947805 +0 +120 +absolute + + + +0.01 +smooth + +8.536488389018336 +47.35047577198649 +428.9518272870745 +-189.44933060360626 +73.38660243214358 +0 +120 +absolute + + + +0.01 +smooth + +8.536487187133275 +47.350475726056565 +428.95175798930757 +-189.51981850154687 +73.39847271005624 +0 +120 +absolute + + + +0.01 +smooth + +8.536485985327346 +47.35047567935647 +428.9516883340981 +-189.5901141854177 +73.41037194728615 +0 +120 +absolute + + + +0.01 +smooth + +8.536484783620882 +47.350475631932895 +428.951618348351 +-189.6602165208019 +73.42229983790342 +0 +120 +absolute + + + +0.01 +smooth + +8.536483582034208 +47.350475583832576 +428.9515480589712 +-189.73012437328282 +73.43425607597814 +0 +120 +absolute + + + +0.01 +smooth + +8.536482380587655 +47.35047553510222 +428.95147749286343 +-189.7998366084437 +73.44624035558039 +0 +120 +absolute + + + +0.01 +smooth + +8.536481179301555 +47.350475485788536 +428.9514066769325 +-189.86935209186788 +73.45825237078026 +0 +120 +absolute + + + +0.01 +smooth + +8.536479978196235 +47.35047543593825 +428.95133563808326 +-189.93866968913858 +73.47029181564787 +0 +120 +absolute + + + +0.01 +smooth + +8.536478777292025 +47.35047538559809 +428.95126440322076 +-190.00778826583905 +73.4823583842533 +0 +120 +absolute + + + +0.01 +smooth + +8.536477576609258 +47.350475334814746 +428.95119299924954 +-190.07670668755256 +73.49445177066666 +0 +120 +absolute + + + +0.01 +smooth + +8.53647637616826 +47.350475283634935 +428.95112145307473 +-190.1454238198624 +73.50657166895805 +0 +120 +absolute + + + +0.01 +smooth + +8.536475175989361 +47.3504752321054 +428.951049791601 +-190.21393852835183 +73.51871777319755 +0 +120 +absolute + + + +0.01 +smooth + +8.536473976092893 +47.35047518027284 +428.95097804173326 +-190.28224967860416 +73.53088977745526 +0 +120 +absolute + + + +0.01 +smooth + +8.536472776499183 +47.35047512818396 +428.9509062303763 +-190.35035613620255 +73.54308737580128 +0 +120 +absolute + + + +0.01 +smooth + +8.536471577228562 +47.3504750758855 +428.95083438443504 +-190.4182567667304 +73.5553102623057 +0 +120 +absolute + + + +0.01 +smooth + +8.53647037830136 +47.35047502342416 +428.95076253081436 +-190.48595043577083 +73.56755813103862 +0 +120 +absolute + + + +0.01 +smooth + +8.536469179737907 +47.35047497084666 +428.9506906964189 +-190.55343600890725 +73.57983067607016 +0 +120 +absolute + + + +0.01 +smooth + +8.53646798155853 +47.350474918199716 +428.95061890815373 +-190.6207123517229 +73.59212759147037 +0 +120 +absolute + + + +0.01 +smooth + +8.536466783783563 +47.35047486553004 +428.9505471929235 +-190.687778329801 +73.60444857130938 +0 +120 +absolute + + + +0.01 +smooth + +8.536465586433334 +47.350474812884364 +428.95047557763337 +-190.75463280872478 +73.61679330965728 +0 +120 +absolute + + + +0.01 +smooth + +8.53646438952817 +47.35047476030938 +428.9504040891879 +-190.8212746540776 +73.62916150058416 +0 +120 +absolute + + + +0.01 +smooth + +8.536463193088403 +47.35047470785182 +428.9503327544919 +-190.88770273144272 +73.64155283816011 +0 +120 +absolute + + + +0.01 +smooth + +8.536461996791179 +47.3504746542396 +428.95026120961705 +-190.9539496157592 +73.65397373592306 +0 +120 +absolute + + + +0.01 +smooth + +8.536460800313408 +47.3504745982026 +428.9501890825767 +-191.0200477511658 +73.66643063210907 +0 +120 +absolute + + + +0.01 +smooth + +8.536459603675086 +47.35047453979057 +428.95011638818863 +-191.08599580704518 +73.67892325783548 +0 +120 +absolute + + + +0.01 +smooth + +8.5364584068962 +47.35047447905314 +428.95004314127016 +-191.15179245277992 +73.69145134421957 +0 +120 +absolute + + + +0.01 +smooth + +8.536457209996735 +47.350474416040015 +428.94996935663926 +-191.21743635775272 +73.70401462237868 +0 +120 +absolute + + + +0.01 +smooth + +8.536456012996686 +47.350474350800894 +428.94989504911354 +-191.28292619134615 +73.71661282343011 +0 +120 +absolute + + + +0.01 +smooth + +8.536454815916043 +47.35047428338548 +428.9498202335106 +-191.34826062294295 +73.72924567849118 +0 +120 +absolute + + + +0.01 +smooth + +8.536453618774798 +47.350474213843476 +428.9497449246485 +-191.4134383219258 +73.74191291867926 +0 +120 +absolute + + + +0.01 +smooth + +8.536452421592934 +47.35047414222455 +428.9496691373443 +-191.47845795767722 +73.7546142751116 +0 +120 +absolute + + + +0.01 +smooth + +8.536451224390442 +47.350474068578386 +428.9495928864162 +-191.54331819957994 +73.76734947890556 +0 +120 +absolute + + + +0.01 +smooth + +8.53645002718731 +47.3504739929547 +428.94951618668165 +-191.60801771701662 +73.78011826117843 +0 +120 +absolute + + + +0.01 +smooth + +8.536448830003534 +47.35047391540318 +428.9494390529584 +-191.6725551793699 +73.79292035304756 +0 +120 +absolute + + + +0.01 +smooth + +8.5364476328591 +47.3504738359735 +428.9493615000638 +-191.7369292560223 +73.80575548563021 +0 +120 +absolute + + + +0.01 +smooth + +8.536446435773996 +47.35047375471538 +428.94928354281615 +-191.80113861635675 +73.81862339004378 +0 +120 +absolute + + + +0.01 +smooth + +8.536445238768215 +47.35047367167849 +428.94920519603266 +-191.8651819297557 +73.83152379740552 +0 +120 +absolute + + + +0.01 +smooth + +8.53644404186174 +47.35047358691255 +428.9491264745312 +-191.92905786560175 +73.8444564388328 +0 +120 +absolute + + + +0.01 +smooth + +8.536442845074566 +47.35047350046722 +428.9490473931293 +-191.9927650932776 +73.85742104544286 +0 +120 +absolute + + + +0.01 +smooth + +8.536441648426687 +47.35047341239223 +428.94896796664494 +-192.05630228216606 +73.87041734835313 +0 +120 +absolute + + + +0.01 +smooth + +8.536440451938079 +47.350473322737216 +428.9488882098954 +-192.11966810164958 +73.88344507868082 +0 +120 +absolute + + + +0.01 +smooth + +8.536439255628746 +47.35047323155192 +428.9488081376986 +-192.18286122111087 +73.89650396754331 +0 +120 +absolute + + + +0.01 +smooth + +8.536438059518668 +47.35047313888602 +428.9487277648723 +-192.24588030993257 +73.9095937460579 +0 +120 +absolute + + + +0.01 +smooth + +8.53643686362784 +47.35047304478922 +428.94864710623403 +-192.30872403749737 +73.92271414534194 +0 +120 +absolute + + + +0.01 +smooth + +8.536435667976246 +47.35047294931117 +428.9485661766012 +-192.37139107318782 +73.93586489651267 +0 +120 +absolute + + + +0.01 +smooth + +8.536434472583881 +47.35047285250162 +428.9484849907921 +-192.43388008638675 +73.9490457306875 +0 +120 +absolute + + + +0.01 +smooth + +8.536433277470733 +47.35047275441022 +428.948403563624 +-192.4961897464766 +73.96225637898367 +0 +120 +absolute + + + +0.01 +smooth + +8.536432082656788 +47.350472655086676 +428.9483219099147 +-192.55831872284014 +73.97549657251855 +0 +120 +absolute + + + +0.01 +smooth + +8.536430888162041 +47.35047255458069 +428.94824004448185 +-192.62026568486004 +73.98876604240944 +0 +120 +absolute + + + +0.01 +smooth + +8.53642969400648 +47.35047245294194 +428.94815798214313 +-192.68202930191887 +74.00206451977365 +0 +120 +absolute + + + +0.01 +smooth + +8.536428500210093 +47.35047235022013 +428.9480757377161 +-192.7436082433993 +74.01539173572851 +0 +120 +absolute + + + +0.01 +smooth + +8.536427306792868 +47.350472246464946 +428.9479933260187 +-192.80500117868402 +74.02874742139134 +0 +120 +absolute + + + +0.01 +smooth + +8.536426113774798 +47.35047214172608 +428.9479107618685 +-192.86620677715567 +74.04213130787944 +0 +120 +absolute + + + +0.01 +smooth + +8.536424921175872 +47.350472036053226 +428.9478280600831 +-192.9272237081968 +74.05554312631016 +0 +120 +absolute + + + +0.01 +smooth + +8.536423729016079 +47.35047192949608 +428.94774523548017 +-192.98805064119023 +74.06898260780079 +0 +120 +absolute + + + +0.01 +smooth + +8.536422537315406 +47.35047182210433 +428.9476623028775 +-193.0486862455184 +74.08244948346865 +0 +120 +absolute + + + +0.01 +smooth + +8.536421346093846 +47.350471713927675 +428.94757927709276 +-193.10912919056418 +74.09594348443107 +0 +120 +absolute + + + +0.01 +smooth + +8.536420155371388 +47.35047160501579 +428.9474961729435 +-193.16937814571003 +74.10946434180536 +0 +120 +absolute + + + +0.01 +smooth + +8.53641896516802 +47.35047149541839 +428.9474130052476 +-193.22943178033876 +74.12301178670884 +0 +120 +absolute + + + +0.01 +smooth + +8.536417775503734 +47.35047138518515 +428.94732978882246 +-193.2892887638329 +74.13658555025883 +0 +120 +absolute + + + +0.01 +smooth + +8.536416586398518 +47.35047127436577 +428.94724653848607 +-193.34894776557513 +74.15018536357266 +0 +120 +absolute + + + +0.01 +smooth + +8.53641539787236 +47.350471163009956 +428.947163269056 +-193.4084074549481 +74.1638109577676 +0 +120 +absolute + + + +0.01 +smooth + +8.536414209945253 +47.350471051167375 +428.9470799953498 +-193.46766650133452 +74.17746206396103 +0 +120 +absolute + + + +0.01 +smooth + +8.536413022637182 +47.35047093888774 +428.94699673218526 +-193.52672357411694 +74.19113841327024 +0 +120 +absolute + + + +0.01 +smooth + +8.536411835968142 +47.35047082622073 +428.94691349438006 +-193.58557734267805 +74.20483973681252 +0 +120 +absolute + + + +0.01 +smooth + +8.53641064995812 +47.350470713216026 +428.94683029675184 +-193.6442264764005 +74.21856576570525 +0 +120 +absolute + + + +0.01 +smooth + +8.536409464627104 +47.35047059992337 +428.94674715411827 +-193.702669644667 +74.2323162310657 +0 +120 +absolute + + + +0.01 +smooth + +8.536408279995085 +47.350470486392396 +428.9466640812972 +-193.76090551686008 +74.24609086401121 +0 +120 +absolute + + + +0.01 +smooth + +8.536407096082053 +47.350470372672824 +428.94658109310603 +-193.81893276236246 +74.25988939565907 +0 +120 +absolute + + + +0.01 +smooth + +8.536405912907997 +47.35047025881436 +428.9464982043627 +-193.87675005055678 +74.27371155712663 +0 +120 +absolute + + + +0.01 +smooth + +8.536404730492904 +47.35047014486666 +428.9464154298846 +-193.93435605082567 +74.28755707953121 +0 +120 +absolute + + + +0.01 +smooth + +8.53640354885677 +47.35047003087945 +428.94633278448975 +-193.99174943255179 +74.3014256939901 +0 +120 +absolute + + + +0.01 +smooth + +8.53640236801958 +47.35046991690241 +428.9462502829956 +-194.04892886511783 +74.31531713162063 +0 +120 +absolute + + + +0.01 +smooth + +8.536401187657926 +47.35046980210828 +428.94616772545277 +-194.10593121421047 +74.3292371932619 +0 +120 +absolute + + + +0.01 +smooth + +8.536400007448293 +47.35046968565534 +428.9460849087129 +-194.1627932313289 +74.3431916797495 +0 +120 +absolute + + + +0.01 +smooth + +8.536398827410524 +47.35046956757166 +428.9460018427959 +-194.21951341457418 +74.35718032219543 +0 +120 +absolute + + + +0.01 +smooth + +8.536397647564446 +47.35046944788531 +428.94591853772107 +-194.27609026204743 +74.37120285171176 +0 +120 +absolute + + + +0.01 +smooth + +8.5363964679299 +47.350469326624314 +428.94583500350814 +-194.33252227185 +74.38525899941051 +0 +120 +absolute + + + +0.01 +smooth + +8.536395288526723 +47.35046920381674 +428.9457512501767 +-194.38880794208282 +74.39934849640373 +0 +120 +absolute + + + +0.01 +smooth + +8.536394109374747 +47.35046907949064 +428.94566728774635 +-194.44494577084717 +74.41347107380346 +0 +120 +absolute + + + +0.01 +smooth + +8.53639293049381 +47.350468953674074 +428.9455831262366 +-194.50093425624416 +74.42762646272173 +0 +120 +absolute + + + +0.01 +smooth + +8.536391751903745 +47.35046882639507 +428.94549877566715 +-194.556771896375 +74.44181439427057 +0 +120 +absolute + + + +0.01 +smooth + +8.536390573624388 +47.35046869768171 +428.94541424605745 +-194.61245718934077 +74.456034599562 +0 +120 +absolute + + + +0.01 +smooth + +8.536389395675581 +47.35046856756205 +428.9453295474275 +-194.66798863324274 +74.47028680970816 +0 +120 +absolute + + + +0.01 +smooth + +8.536388218077152 +47.350468436064105 +428.9452446897963 +-194.72336472618193 +74.48457075582095 +0 +120 +absolute + + + +0.01 +smooth + +8.53638704084894 +47.35046830321597 +428.945159683184 +-194.77858396625962 +74.4988861690125 +0 +120 +absolute + + + +0.01 +smooth + +8.536385864010786 +47.35046816904569 +428.9450745376099 +-194.83364485157693 +74.51323278039482 +0 +120 +absolute + + + +0.01 +smooth + +8.536384687582517 +47.35046803358131 +428.9449892630937 +-194.88854588023494 +74.52761032107995 +0 +120 +absolute + + + +0.01 +smooth + +8.536383511583965 +47.35046789685085 +428.9449038696547 +-194.9432855503348 +74.54201852217989 +0 +120 +absolute + + + +0.01 +smooth + +8.53638233603498 +47.35046775888244 +428.944818367313 +-194.9978623599778 +74.55645711480673 +0 +120 +absolute + + + +0.01 +smooth + +8.53638116095539 +47.35046761970407 +428.944732766088 +-195.052274807265 +74.57092583007253 +0 +120 +absolute + + + +0.01 +smooth + +8.53637998636503 +47.350467479343806 +428.9446470759991 +-195.10652139029762 +74.58542439908923 +0 +120 +absolute + + + +0.01 +smooth + +8.536378812283738 +47.35046733782972 +428.9445613070661 +-195.1606006071767 +74.59995255296896 +0 +120 +absolute + + + +0.01 +smooth + +8.536377638731349 +47.35046719518987 +428.9444754693086 +-195.2145109560035 +74.61451002282372 +0 +120 +absolute + + + +0.01 +smooth + +8.536376465727697 +47.35046705145227 +428.9443895727461 +-195.2682509348791 +74.62909653976553 +0 +120 +absolute + + + +0.01 +smooth + +8.53637529329262 +47.35046690664501 +428.94430362739826 +-195.32181904190475 +74.64371183490647 +0 +120 +absolute + + + +0.01 +smooth + +8.536374121445952 +47.35046676079612 +428.94421764328456 +-195.3752137751815 +74.65835563935855 +0 +120 +absolute + + + +0.01 +smooth + +8.53637295020753 +47.350466613933676 +428.94413163042486 +-195.4284336328106 +74.67302768423382 +0 +120 +absolute + + + +0.01 +smooth + +8.536371779597191 +47.35046646608571 +428.94404559883844 +-195.48147711289312 +74.68772770064432 +0 +120 +absolute + + + +0.01 +smooth + +8.536370609634766 +47.35046631728029 +428.9439595585452 +-195.5343427135303 +74.70245541970208 +0 +120 +absolute + + + +0.01 +smooth + +8.536369440340096 +47.35046616754547 +428.9438735195645 +-195.58702893282324 +74.71721057251912 +0 +120 +absolute + + + +0.01 +smooth + +8.536368271733012 +47.35046601690928 +428.9437874919161 +-195.63953426887312 +74.73199289020751 +0 +120 +absolute + + + +0.01 +smooth + +8.536367103833355 +47.35046586539981 +428.94370148561944 +-195.6918572197811 +74.74680210387929 +0 +120 +absolute + + + +0.01 +smooth + +8.536365936660957 +47.35046571304508 +428.9436155106943 +-195.7439962836483 +74.76163794464647 +0 +120 +absolute + + + +0.01 +smooth + +8.536364770235654 +47.35046555987317 +428.9435295771601 +-195.79594995857587 +74.77650014362109 +0 +120 +absolute + + + +0.01 +smooth + +8.536363604577284 +47.35046540591212 +428.94344369503665 +-195.847716742665 +74.79138843191521 +0 +120 +absolute + + + +0.01 +smooth + +8.536362439705679 +47.35046525118997 +428.94335787434335 +-195.89929513401688 +74.80630254064087 +0 +120 +absolute + + + +0.01 +smooth + +8.536361275640678 +47.3504650957348 +428.94327212509984 +-195.9506836307326 +74.82124220091006 +0 +120 +absolute + + + +0.01 +smooth + +8.536360112402114 +47.35046493957465 +428.94318645732574 +-196.00188073091334 +74.83620714383488 +0 +120 +absolute + + + +0.01 +smooth + +8.536358950009827 +47.350464782737575 +428.94310088104066 +-196.05288493266028 +74.85119710052733 +0 +120 +absolute + + + +0.01 +smooth + +8.536357788483649 +47.350464625251625 +428.94301540626424 +-196.1036947340745 +74.86621180209946 +0 +120 +absolute + + + +0.01 +smooth + +8.536356627843416 +47.35046446714486 +428.94293004301596 +-196.15430863325727 +74.88125097966332 +0 +120 +absolute + + + +0.01 +smooth + +8.536355468108965 +47.350464308445325 +428.9428448013156 +-196.20472512830963 +74.89631436433092 +0 +120 +absolute + + + +0.01 +smooth + +8.536354309300132 +47.35046414918108 +428.9427596911826 +-196.25494271733282 +74.91140168721432 +0 +120 +absolute + + + +0.01 +smooth + +8.53635315143675 +47.35046398938019 +428.9426747226365 +-196.30495989842794 +74.92651267942554 +0 +120 +absolute + + + +0.01 +smooth + +8.53635199453866 +47.35046382907067 +428.9425899056972 +-196.35477516969618 +74.94164707207662 +0 +120 +absolute + + + +0.01 +smooth + +8.53635083862569 +47.35046366828061 +428.94250525038393 +-196.40438702923868 +74.95680459627962 +0 +120 +absolute + + + +0.01 +smooth + +8.536349683717683 +47.35046350703806 +428.9424207667166 +-196.4537939751566 +74.97198498314657 +0 +120 +absolute + + + +0.01 +smooth + +8.536348529834472 +47.35046334537104 +428.9423364647146 +-196.50299450555113 +74.9871879637895 +0 +120 +absolute + + + +0.01 +smooth + +8.536347376995892 +47.35046318330765 +428.94225235439757 +-196.55198711852333 +75.00241326932043 +0 +120 +absolute + + + +0.01 +smooth + +8.536346225221779 +47.35046302087592 +428.9421684457851 +-196.60077031217446 +75.01766063085142 +0 +120 +absolute + + + +0.01 +smooth + +8.536345074531969 +47.3504628581039 +428.94208474889695 +-196.64934258460562 +75.03292977949452 +0 +120 +absolute + + + +0.01 +smooth + +8.536343924946298 +47.35046269501966 +428.94200127375257 +-196.697702433918 +75.04822044636175 +0 +120 +absolute + + + +0.01 +smooth + +8.5363427764846 +47.350462531651225 +428.9419180303715 +-196.7458483582127 +75.06353236256514 +0 +120 +absolute + + + +0.01 +smooth + +8.53634162881553 +47.35046236750903 +428.9418348769529 +-196.79382148906612 +75.0788712738346 +0 +120 +absolute + + + +0.01 +smooth + +8.536340481607738 +47.35046220209808 +428.94175167009473 +-196.8416628643598 +75.09424290542121 +0 +120 +absolute + + + +0.01 +smooth + +8.536339334881065 +47.35046203543826 +428.9416684174153 +-196.8893708416526 +75.1096469577189 +0 +120 +absolute + + + +0.01 +smooth + +8.536338188655348 +47.35046186754948 +428.94158512653223 +-196.93694377850338 +75.1250831311215 +0 +120 +absolute + + + +0.01 +smooth + +8.536337042950427 +47.35046169845164 +428.94150180506387 +-196.98438003247088 +75.14055112602284 +0 +120 +absolute + + + +0.01 +smooth + +8.53633589778614 +47.35046152816464 +428.94141846062814 +-197.03167796111404 +75.1560506428169 +0 +120 +absolute + + + +0.01 +smooth + +8.536334753182324 +47.350461356708365 +428.94133510084316 +-197.07883592199178 +75.17158138189744 +0 +120 +absolute + + + +0.01 +smooth + +8.53633360915882 +47.35046118410277 +428.941251733327 +-197.1258522726629 +75.18714304365842 +0 +120 +absolute + + + +0.01 +smooth + +8.536332465735468 +47.35046101036772 +428.9411683656976 +-197.1727253706863 +75.20273532849366 +0 +120 +absolute + + + +0.01 +smooth + +8.5363313229321 +47.35046083552311 +428.941085005573 +-197.2194535736207 +75.21835793679706 +0 +120 +absolute + + + +0.01 +smooth + +8.536330180768562 +47.35046065958886 +428.9410016605713 +-197.26603523902503 +75.23401056896246 +0 +120 +absolute + + + +0.01 +smooth + +8.536329039264688 +47.35046048258488 +428.94091833831055 +-197.31246872445826 +75.24969292538378 +0 +120 +absolute + + + +0.01 +smooth + +8.536327898440318 +47.350460304531055 +428.94083504640867 +-197.35875238747911 +75.26540470645485 +0 +120 +absolute + + + +0.01 +smooth + +8.536326758315287 +47.35046012544728 +428.9407517924838 +-197.4048845856464 +75.28114561256955 +0 +120 +absolute + + + +0.01 +smooth + +8.53632561890944 +47.35045994535348 +428.9406685841541 +-197.45086367651916 +75.29691534412176 +0 +120 +absolute + + + +0.01 +smooth + +8.536324480242614 +47.35045976426955 +428.9405854290374 +-197.49668801765617 +75.31271360150535 +0 +120 +absolute + + + +0.01 +smooth + +8.536323342334645 +47.35045958221539 +428.94050233475184 +-197.54235596661624 +75.3285400851142 +0 +120 +absolute + + + +0.01 +smooth + +8.536322205205375 +47.35045939921093 +428.9404193089157 +-197.58786588095822 +75.3443944953422 +0 +120 +absolute + + + +0.01 +smooth + +8.536321068874638 +47.350459215276025 +428.9403363591465 +-197.63321611824102 +75.36027653258316 +0 +120 +absolute + + + +0.01 +smooth + +8.536319933362275 +47.35045903043061 +428.9402534930627 +-197.67840503602346 +75.37618589723101 +0 +120 +absolute + + + +0.01 +smooth + +8.536318798688127 +47.35045884469457 +428.9401707182822 +-197.72343099186446 +75.39212228967959 +0 +120 +absolute + + + +0.01 +smooth + +8.536317664872028 +47.35045865808783 +428.94008804242316 +-197.76829234332286 +75.40808541032281 +0 +120 +absolute + + + +0.01 +smooth + +8.536316531933817 +47.35045847063026 +428.9400054731034 +-197.81298744795734 +75.42407495955447 +0 +120 +absolute + + + +0.01 +smooth + +8.53631539989334 +47.350458282341805 +428.9399230179412 +-197.85751466332707 +75.44009063776853 +0 +120 +absolute + + + +0.01 +smooth + +8.536314268770427 +47.35045809324233 +428.93984068455444 +-197.90187234699067 +75.45613214535882 +0 +120 +absolute + + + +0.01 +smooth + +8.536313138584918 +47.35045790335175 +428.9397584805613 +-197.94605885650705 +75.4721991827192 +0 +120 +absolute + + + +0.01 +smooth + +8.536312009356656 +47.35045771268999 +428.93967641357966 +-197.99007254943513 +75.48829145024357 +0 +120 +absolute + + + +0.01 +smooth + +8.536310881105475 +47.350457521276915 +428.93959449122764 +-198.03391178333368 +75.50440864832576 +0 +120 +absolute + + + +0.01 +smooth + +8.536309753851217 +47.350457329132446 +428.9395127211233 +-198.07757491576166 +75.5205504773597 +0 +120 +absolute + + + +0.01 +smooth + +8.536308627613717 +47.350457136276496 +428.9394311108847 +-198.12106030427782 +75.53671663773923 +0 +120 +absolute + + + +0.01 +smooth + +8.536307502412816 +47.35045694272896 +428.9393496681299 +-198.16436630644105 +75.55290682985822 +0 +120 +absolute + + + +0.01 +smooth + +8.536306378268355 +47.35045674850973 +428.93926840047686 +-198.20749127981023 +75.56912075411053 +0 +120 +absolute + + + +0.01 +smooth + +8.536305255200165 +47.35045655363872 +428.9391873155437 +-198.25043358194424 +75.58535811089007 +0 +120 +absolute + + + +0.01 +smooth + +8.536304133228093 +47.35045635813583 +428.9391064209484 +-198.2931915704019 +75.60161860059068 +0 +120 +absolute + + + +0.01 +smooth + +8.536303012371972 +47.35045616202097 +428.93902572430903 +-198.33576360274202 +75.61790192360624 +0 +120 +absolute + + + +0.01 +smooth + +8.536301892651645 +47.350455965314026 +428.93894523324366 +-198.37814803652353 +75.63420778033064 +0 +120 +absolute + + + +0.01 +smooth + +8.536300774086946 +47.35045576803492 +428.93886495537026 +-198.42034322930525 +75.65053587115773 +0 +120 +absolute + + + +0.01 +smooth + +8.536299656697716 +47.350455570203536 +428.93878489830706 +-198.4623475386461 +75.66688589648139 +0 +120 +absolute + + + +0.01 +smooth + +8.536298540503793 +47.350455371839786 +428.93870506967187 +-198.5041593221048 +75.6832575566955 +0 +120 +absolute + + + +0.01 +smooth + +8.536297425525017 +47.35045517296357 +428.93862547708284 +-198.5457769372404 +75.6996505521939 +0 +120 +absolute + + + +0.01 +smooth + +8.536296311781225 +47.35045497359481 +428.938546128158 +-198.58719874161153 +75.71606458337052 +0 +120 +absolute + + + +0.01 +smooth + +8.536295199292255 +47.35045477375338 +428.9384670305155 +-198.62842309277727 +75.73249935061918 +0 +120 +absolute + + + +0.01 +smooth + +8.536294088077948 +47.350454573459196 +428.9383881917732 +-198.66944834829633 +75.74895455433378 +0 +120 +absolute + + + +0.01 +smooth + +8.53629297815814 +47.35045437273216 +428.9383096195493 +-198.71027286572757 +75.76542989490817 +0 +120 +absolute + + + +0.01 +smooth + +8.536291869552674 +47.350454171592176 +428.93823132146167 +-198.75089500262996 +75.78192507273624 +0 +120 +absolute + + + +0.01 +smooth + +8.536290762281382 +47.35045397005914 +428.9381533051285 +-198.7913131165622 +75.79843978821188 +0 +120 +absolute + + + +0.01 +smooth + +8.536289656364108 +47.35045376815297 +428.9380755781678 +-198.83152556508333 +75.81497374172892 +0 +120 +absolute + + + +0.01 +smooth + +8.536288551820688 +47.35045356589355 +428.93799814819766 +-198.87153070575204 +75.83152663368124 +0 +120 +absolute + + + +0.01 +smooth + +8.536287448670961 +47.350453363300794 +428.937921022836 +-198.91132689612726 +75.84809816446274 +0 +120 +absolute + + + +0.01 +smooth + +8.536286346934766 +47.35045316039461 +428.9378442097009 +-198.95091249376785 +75.86468803446728 +0 +120 +absolute + + + +0.01 +smooth + +8.536285246631941 +47.35045295719488 +428.9377677164106 +-198.99028585623265 +75.88129594408872 +0 +120 +absolute + + + +0.01 +smooth + +8.536284147416474 +47.35045275336208 +428.9376914201774 +-199.02949231111953 +75.89792800665415 +0 +120 +absolute + + + +0.01 +smooth + +8.536283048942446 +47.35045254855386 +428.9376151973611 +-199.0685771091561 +75.91459029874972 +0 +120 +absolute + + + +0.01 +smooth + +8.536281951229828 +47.350452342786035 +428.93753905430003 +-199.10753849259584 +75.93128246565793 +0 +120 +absolute + + + +0.01 +smooth + +8.536280854298598 +47.35045213607437 +428.9374629973327 +-199.14637470369206 +75.94800415266137 +0 +120 +absolute + + + +0.01 +smooth + +8.53627975816873 +47.35045192843463 +428.9373870327976 +-199.18508398469825 +75.96475500504246 +0 +120 +absolute + + + +0.01 +smooth + +8.536278662860198 +47.35045171988263 +428.937311167033 +-199.22366457786777 +75.98153466808382 +0 +120 +absolute + + + +0.01 +smooth + +8.536277568392975 +47.3504515104341 +428.93723540637745 +-199.2621147254541 +75.9983427870679 +0 +120 +absolute + + + +0.01 +smooth + +8.53627647478704 +47.350451300104865 +428.9371597571697 +-199.30043266971057 +76.01517900727727 +0 +120 +absolute + + + +0.01 +smooth + +8.536275382062366 +47.35045108891067 +428.93708422574775 +-199.33861665289066 +76.03204297399441 +0 +120 +absolute + + + +0.01 +smooth + +8.536274290238925 +47.35045087686729 +428.93700881845007 +-199.37666491724775 +76.04893433250183 +0 +120 +absolute + + + +0.01 +smooth + +8.536273199336701 +47.350450663990564 +428.9369335416157 +-199.41457570503542 +76.06585272808212 +0 +120 +absolute + + + +0.01 +smooth + +8.536272109375657 +47.35045045029619 +428.9368584015825 +-199.45234725850685 +76.08279780601775 +0 +120 +absolute + + + +0.01 +smooth + +8.536271020375771 +47.350450235799975 +428.936783404689 +-199.4899778199155 +76.0997692115912 +0 +120 +absolute + + + +0.01 +smooth + +8.536269932357028 +47.35045002051774 +428.93670855727413 +-199.52746563151507 +76.1167665900851 +0 +120 +absolute + + + +0.01 +smooth + +8.536268845339391 +47.3504498044652 +428.93663386567573 +-199.56480893555857 +76.13378958678187 +0 +120 +absolute + + + +0.01 +smooth + +8.536267759342834 +47.350449587658154 +428.93655933623245 +-199.60200597429963 +76.15083784696407 +0 +120 +absolute + + + +0.01 +smooth + +8.536266674387345 +47.35044937011241 +428.936484975283 +-199.63905498999168 +76.1679110159142 +0 +120 +absolute + + + +0.01 +smooth + +8.536265590492887 +47.350449151843726 +428.9364107891657 +-199.67595422488813 +76.18500873891485 +0 +120 +absolute + + + +0.01 +smooth + +8.536264507679435 +47.35044893286785 +428.93633678421867 +-199.71270192124229 +76.20213066124843 +0 +120 +absolute + + + +0.01 +smooth + +8.53626342596697 +47.350448713200606 +428.9362629667809 +-199.7492963213077 +76.21927642819756 +0 +120 +absolute + + + +0.01 +smooth + +8.536262345375466 +47.35044849285777 +428.93618934319056 +-199.78573566733775 +76.23644568504471 +0 +120 +absolute + + + +0.01 +smooth + +8.53626126592489 +47.350448271855086 +428.936115919786 +-199.82201820158576 +76.25363807707238 +0 +120 +absolute + + + +0.01 +smooth + +8.536260187635229 +47.35044805020835 +428.93604270290587 +-199.8581421663053 +76.27085324956315 +0 +120 +absolute + + + +0.01 +smooth + +8.536259110526448 +47.350447827933344 +428.93596969888864 +-199.8941058037497 +76.2880908477995 +0 +120 +absolute + + + +0.01 +smooth + +8.536258034618523 +47.35044760504585 +428.9358969140726 +-199.92990735617238 +76.30535051706396 +0 +120 +absolute + + + +0.01 +smooth + +8.536256959931436 +47.35044738156165 +428.93582435479647 +-199.9655450658268 +76.32263190263903 +0 +120 +absolute + + + +0.01 +smooth + +8.536255886485154 +47.350447157496504 +428.9357520273984 +-200.0010171749663 +76.33993464980728 +0 +120 +absolute + + + +0.01 +smooth + +8.536254814299655 +47.35044693286619 +428.93567993821705 +-200.0363219258444 +76.35725840385118 +0 +120 +absolute + + + +0.01 +smooth + +8.536253743394914 +47.350446707686515 +428.9356080935908 +-200.0714575607144 +76.37460281005328 +0 +120 +absolute + + + +0.01 +smooth + +8.536252673790907 +47.35044648197322 +428.93553649985813 +-200.10642232182985 +76.39196751369607 +0 +120 +absolute + + + +0.01 +smooth + +8.536251605507603 +47.35044625574212 +428.9354651633575 +-200.14121445144406 +76.4093521600621 +0 +120 +absolute + + + +0.01 +smooth + +8.536250538564985 +47.35044602900897 +428.9353940904273 +-200.17583219181046 +76.42675639443388 +0 +120 +absolute + + + +0.01 +smooth + +8.536249472983023 +47.350445801789554 +428.935323287406 +-200.21027378518255 +76.44417986209395 +0 +120 +absolute + + + +0.01 +smooth + +8.536248408781692 +47.350445574099645 +428.9352527606322 +-200.24453747381364 +76.46162220832478 +0 +120 +absolute + + + +0.01 +smooth + +8.536247345980968 +47.35044534595503 +428.9351825164441 +-200.27862149995724 +76.47908307840893 +0 +120 +absolute + + + +0.01 +smooth + +8.536246284600825 +47.350445117371486 +428.9351125611805 +-200.31252410586666 +76.49656211762894 +0 +120 +absolute + + + +0.01 +smooth + +8.536245224661238 +47.350444888364784 +428.93504290117954 +-200.34624353379544 +76.51405897126726 +0 +120 +absolute + + + +0.01 +smooth + +8.536244166182183 +47.350444658950714 +428.93497354277974 +-200.37977802599693 +76.53157328460647 +0 +120 +absolute + + + +0.01 +smooth + +8.536243109183633 +47.35044442914506 +428.9349044923197 +-200.41312582472455 +76.54910470292907 +0 +120 +absolute + + + +0.01 +smooth + +8.536242053685564 +47.350444198963565 +428.9348357561378 +-200.44628517223174 +76.56665287151759 +0 +120 +absolute + + + +0.01 +smooth + +8.53624099970795 +47.35044396842205 +428.93476734057236 +-200.47925431077186 +76.58421743565452 +0 +120 +absolute + + + +0.01 +smooth + +8.536239947270769 +47.35044373753627 +428.93469925196206 +-200.51203148259842 +76.60179804062243 +0 +120 +absolute + + + +0.01 +smooth + +8.53623889639399 +47.350443506321994 +428.9346314966452 +-200.54461492996475 +76.6193943317038 +0 +120 +absolute + + + +0.01 +smooth + +8.536237847097592 +47.35044327479503 +428.9345640809603 +-200.57700289512434 +76.63700595418115 +0 +120 +absolute + + + +0.01 +smooth + +8.53623679940155 +47.35044304297114 +428.9344970112458 +-200.6091936203306 +76.65463255333702 +0 +120 +absolute + + + +0.01 +smooth + +8.536235753325837 +47.3504428108661 +428.93443029384014 +-200.64118534783682 +76.67227377445394 +0 +120 +absolute + + + +0.01 +smooth + +8.536234708890428 +47.350442578495695 +428.93436393508176 +-200.67297631989658 +76.68992926281439 +0 +120 +absolute + + + +0.01 +smooth + +8.536233666115299 +47.3504423458757 +428.9342979413093 +-200.70456477876323 +76.70759866370092 +0 +120 +absolute + + + +0.01 +smooth + +8.536232625020425 +47.3504421130219 +428.93423231886095 +-200.73594896669022 +76.72528162239605 +0 +120 +absolute + + + +0.01 +smooth + +8.536231585625778 +47.350441879950054 +428.9341670740753 +-200.76712712593093 +76.74297778418229 +0 +120 +absolute + + + +0.01 +smooth + +8.536230547951336 +47.35044164667596 +428.93410221329077 +-200.79809749873874 +76.76068679434216 +0 +120 +absolute + + + +0.01 +smooth + +8.536229511630266 +47.35044141294124 +428.93403761438185 +-200.82890967060789 +76.77841545755653 +0 +120 +absolute + + + +0.01 +smooth + +8.536228476295909 +47.35044117848599 +428.93397315482036 +-200.85961315513813 +76.79617052990942 +0 +120 +absolute + + + +0.01 +smooth + +8.536227441968485 +47.350440943323676 +428.9339088403393 +-200.89020608674133 +76.81395158378794 +0 +120 +absolute + + + +0.01 +smooth + +8.536226408668222 +47.35044070746776 +428.9338446766726 +-200.92068659982948 +76.83175819157933 +0 +120 +absolute + + + +0.01 +smooth + +8.536225376415349 +47.35044047093178 +428.93378066955404 +-200.95105282881445 +76.84958992567081 +0 +120 +absolute + + + +0.01 +smooth + +8.536224345230092 +47.350440233729145 +428.933716824717 +-200.98130290810818 +76.86744635844954 +0 +120 +absolute + + + +0.01 +smooth + +8.536223315132677 +47.35043999587339 +428.9336531478952 +-201.0114349721226 +76.88532706230271 +0 +120 +absolute + + + +0.01 +smooth + +8.53622228614333 +47.35043975737797 +428.9335896448225 +-201.04144715526968 +76.90323160961758 +0 +120 +absolute + + + +0.01 +smooth + +8.536221258282277 +47.35043951825636 +428.93352632123214 +-201.0713375919612 +76.92115957278126 +0 +120 +absolute + + + +0.01 +smooth + +8.536220231569743 +47.35043927852204 +428.9334631828579 +-201.10110441660925 +76.93911052418099 +0 +120 +absolute + + + +0.01 +smooth + +8.536219206025956 +47.35043903818849 +428.9334002354336 +-201.13074576362553 +76.95708403620398 +0 +120 +absolute + + + +0.01 +smooth + +8.536218181671146 +47.350438797269206 +428.93333748469286 +-201.1602597674222 +76.9750796812374 +0 +120 +absolute + + + +0.01 +smooth + +8.53621715852553 +47.35043855577763 +428.93327493636895 +-201.18964456241093 +76.99309703166844 +0 +120 +absolute + + + +0.01 +smooth + +8.53621613660934 +47.35043831372726 +428.93321259619574 +-201.21889828300377 +77.01113565988429 +0 +120 +absolute + + + +0.01 +smooth + +8.536215115942804 +47.35043807113158 +428.93315046990693 +-201.2480190636127 +77.02919513827217 +0 +120 +absolute + + + +0.01 +smooth + +8.536214096546148 +47.35043782800406 +428.93308856323614 +-201.27700503864955 +77.04727503921929 +0 +120 +absolute + + + +0.01 +smooth + +8.536213078439593 +47.35043758435819 +428.9330268819169 +-201.30585434252623 +77.06537493511279 +0 +120 +absolute + + + +0.01 +smooth + +8.536212061643374 +47.35043734020744 +428.932965431683 +-201.33456510965476 +77.08349439833992 +0 +120 +absolute + + + +0.01 +smooth + +8.536211046177709 +47.35043709556529 +428.9329042182679 +-201.36313547444695 +77.10163300128784 +0 +120 +absolute + + + +0.01 +smooth + +8.53621003206283 +47.35043685044521 +428.93284324740534 +-201.39156357131472 +77.11979031634377 +0 +120 +absolute + + + +0.01 +smooth + +8.53620901931896 +47.3504366048607 +428.9327825248289 +-201.41984753467003 +77.13796591589487 +0 +120 +absolute + + + +0.01 +smooth + +8.536208007966328 +47.35043635882522 +428.9327220562723 +-201.44798549892485 +77.15615937232837 +0 +120 +absolute + + + +0.01 +smooth + +8.536206998025154 +47.350436112352234 +428.93266184746903 +-201.47597559849092 +77.17437025803143 +0 +120 +absolute + + + +0.01 +smooth + +8.536205989515675 +47.35043586545526 +428.9326019041529 +-201.50381596778038 +77.19259814539132 +0 +120 +absolute + + + +0.01 +smooth + +8.53620498245811 +47.35043561814775 +428.93254223205753 +-201.53150474120497 +77.21084260679513 +0 +120 +absolute + + + +0.01 +smooth + +8.536203976872686 +47.35043537044319 +428.9324828369162 +-201.55904005317672 +77.22910321463014 +0 +120 +absolute + + + +0.01 +smooth + +8.536202972779632 +47.350435122355066 +428.9324237244631 +-201.58642003810752 +77.24737954128351 +0 +120 +absolute + + + +0.01 +smooth + +8.536201970199171 +47.35043487389684 +428.9323649004316 +-201.61364283040922 +77.26567115914243 +0 +120 +absolute + + + +0.01 +smooth + +8.536200969151531 +47.350434625082 +428.9323063705551 +-201.6407065644938 +77.28397764059412 +0 +120 +absolute + + + +0.01 +smooth + +8.53619996965694 +47.35043437592401 +428.93224814056765 +-201.6676093747732 +77.30229855802574 +0 +120 +absolute + + + +0.01 +smooth + +8.53619897173562 +47.35043412643638 +428.9321902162027 +-201.6943493956593 +77.32063348382452 +0 +120 +absolute + + + +0.01 +smooth + +8.536197975407804 +47.350433876632565 +428.9321326031938 +-201.72092476156405 +77.33898199037763 +0 +120 +absolute + + + +0.01 +smooth + +8.53619698069371 +47.35043362652605 +428.93207530727466 +-201.74733360689928 +77.35734365007228 +0 +120 +absolute + + + +0.01 +smooth + +8.536195987613572 +47.350433376130304 +428.932018334179 +-201.77357406607706 +77.37571803529568 +0 +120 +absolute + + + +0.01 +smooth + +8.53619499618761 +47.35043312545882 +428.93196168964033 +-201.79964427350916 +77.39410471843496 +0 +120 +absolute + + + +0.01 +smooth + +8.536194006436057 +47.35043287452507 +428.93190537939233 +-201.82554236360755 +77.4125032718774 +0 +120 +absolute + + + +0.01 +smooth + +8.536193018379134 +47.35043262334253 +428.93184940916865 +-201.85126647078417 +77.43091326801014 +0 +120 +absolute + + + +0.01 +smooth + +8.536192032037068 +47.35043237192468 +428.9317937847029 +-201.87681472945093 +77.44933427922041 +0 +120 +absolute + + + +0.01 +smooth + +8.536191047430089 +47.350432120285014 +428.9317385117288 +-201.90218527401976 +77.46776587789537 +0 +120 +absolute + + + +0.01 +smooth + +8.536190064578419 +47.350431868436985 +428.9316835959798 +-201.92737623890253 +77.48620763642225 +0 +120 +absolute + + + +0.01 +smooth + +8.536189083502284 +47.35043161639409 +428.9316290431897 +-201.95238575851118 +77.50465912718822 +0 +120 +absolute + + + +0.01 +smooth + +8.536188104221916 +47.35043136416979 +428.93157485909205 +-201.97721196725766 +77.52311992258049 +0 +120 +absolute + + + +0.01 +smooth + +8.536187126757538 +47.35043111177758 +428.93152104942055 +-202.00185299955385 +77.54158959498623 +0 +120 +absolute + + + +0.01 +smooth + +8.536186151129375 +47.350430859230926 +428.93146761990874 +-202.02630698981167 +77.56006771679266 +0 +120 +absolute + + + +0.01 +smooth + +8.536185177357654 +47.35043060654333 +428.9314145762904 +-202.0505720724431 +77.57855386038699 +0 +120 +absolute + + + +0.01 +smooth + +8.5361842054626 +47.35043035372824 +428.93136192429904 +-202.07464638185994 +77.5970475981564 +0 +120 +absolute + + + +0.01 +smooth + +8.536183235464444 +47.35043010079915 +428.9313096696684 +-202.0985280524742 +77.61554850248804 +0 +120 +absolute + + + +0.01 +smooth + +8.53618226738341 +47.35042984776955 +428.93125781813194 +-202.1222152186978 +77.63405614576916 +0 +120 +absolute + + + +0.01 +smooth + +8.536181301239722 +47.35042959465288 +428.93120637542347 +-202.14570601494256 +77.65257010038695 +0 +120 +absolute + + + +0.01 +smooth + +8.536180337053608 +47.35042934146266 +428.93115534727656 +-202.16899857562055 +77.6710899387286 +0 +120 +absolute + + + +0.01 +smooth + +8.536179374845297 +47.35042908821235 +428.9311047394248 +-202.19209103514356 +77.6896152331813 +0 +120 +absolute + + + +0.01 +smooth + +8.53617841422145 +47.3504288346888 +428.93105441956567 +-202.21503771609224 +77.70815374068223 +0 +120 +absolute + + + +0.01 +smooth + +8.536177454788985 +47.35042858067804 +428.93100425536244 +-202.2378928500107 +77.72671316219352 +0 +120 +absolute + + + +0.01 +smooth + +8.536176496568478 +47.35042832619227 +428.93095425249743 +-202.26065443475647 +77.74529298613972 +0 +120 +absolute + + + +0.01 +smooth + +8.53617553958051 +47.35042807124367 +428.9309044166528 +-202.2833204681866 +77.76389270094532 +0 +120 +absolute + + + +0.01 +smooth + +8.53617458384567 +47.350427815844455 +428.93085475351086 +-202.30588894815858 +77.78251179503492 +0 +120 +absolute + + + +0.01 +smooth + +8.536173629384539 +47.350427560006835 +428.93080526875417 +-202.32835787252966 +77.80114975683303 +0 +120 +absolute + + + +0.01 +smooth + +8.5361726762177 +47.350427303743004 +428.9307559680644 +-202.35072523915713 +77.81980607476419 +0 +120 +absolute + + + +0.01 +smooth + +8.536171724365738 +47.35042704706521 +428.9307068571248 +-202.37298904589844 +77.83848023725302 +0 +120 +absolute + + + +0.01 +smooth + +8.536170773849236 +47.3504267899856 +428.9306579416168 +-202.39514729061077 +77.857171732724 +0 +120 +absolute + + + +0.01 +smooth + +8.536169824688777 +47.350426532516394 +428.93060922722304 +-202.4171979711515 +77.87588004960166 +0 +120 +absolute + + + +0.01 +smooth + +8.536168876904943 +47.350426274669815 +428.9305607196258 +-202.4391390853779 +77.89460467631056 +0 +120 +absolute + + + +0.01 +smooth + +8.53616793051832 +47.35042601645806 +428.93051242450747 +-202.46096863114735 +77.91334510127533 +0 +120 +absolute + + + +0.01 +smooth + +8.536166985549487 +47.3504257578933 +428.93046434755007 +-202.4826846063171 +77.93210081292034 +0 +120 +absolute + + + +0.01 +smooth + +8.536166042019033 +47.35042549898779 +428.9304164944364 +-202.50428500874455 +77.95087129967031 +0 +120 +absolute + + + +0.01 +smooth + +8.53616509994754 +47.350425239753704 +428.93036887084816 +-202.52576783628697 +77.96965604994969 +0 +120 +absolute + + + +0.01 +smooth + +8.53616415935559 +47.35042498020327 +428.930321482468 +-202.54713108680167 +77.98845455218306 +0 +120 +absolute + + + +0.01 +smooth + +8.536163220263767 +47.35042472034865 +428.93027433497804 +-202.56837275814593 +78.00726629479492 +0 +120 +absolute + + + +0.01 +smooth + +8.536162282692656 +47.35042446020211 +428.9302274340609 +-202.58949084817723 +78.02609076620989 +0 +120 +absolute + + + +0.01 +smooth + +8.536161346662833 +47.3504241997758 +428.9301807853985 +-202.61048335475263 +78.04492745485246 +0 +120 +absolute + + + +0.01 +smooth + +8.536160412194892 +47.35042393908195 +428.9301343946732 +-202.63134827572966 +78.06377584914719 +0 +120 +absolute + + + +0.01 +smooth + +8.536159479309411 +47.35042367813275 +428.9300882675675 +-202.6520836089656 +78.0826354375186 +0 +120 +absolute + + + +0.01 +smooth + +8.536158548026973 +47.350423416940416 +428.9300424097636 +-202.6726873523177 +78.10150570839129 +0 +120 +absolute + + + +0.01 +smooth + +8.53615761836816 +47.35042315551714 +428.9299968269437 +-202.69315750364328 +78.12038615018976 +0 +120 +absolute + + + +0.01 +smooth + +8.536156690353565 +47.35042289387516 +428.9299515247903 +-202.71349206079975 +78.13927625133859 +0 +120 +absolute + + + +0.01 +smooth + +8.536155764003757 +47.350422632026635 +428.92990650898537 +-202.73368902164435 +78.15817550026229 +0 +120 +absolute + + + +0.01 +smooth + +8.536154839339329 +47.35042236998379 +428.9298617852115 +-202.75374638403437 +78.17708338538542 +0 +120 +absolute + + + +0.01 +smooth + +8.536153916380862 +47.35042210775883 +428.92981735915083 +-202.7736621458272 +78.19599939513252 +0 +120 +absolute + + + +0.01 +smooth + +8.536152995148939 +47.350421845363975 +428.92977323648574 +-202.79343430488012 +78.21492301792814 +0 +120 +absolute + + + +0.01 +smooth + +8.536152075664145 +47.35042158281139 +428.9297294228985 +-202.81306085905044 +78.23385374219684 +0 +120 +absolute + + + +0.01 +smooth + +8.53615115794706 +47.35042132011332 +428.92968592407135 +-202.83253980619554 +78.25279105636315 +0 +120 +absolute + + + +0.01 +smooth + +8.536150242018273 +47.350421057281935 +428.9296427456867 +-202.85186914417267 +78.27173444885162 +0 +120 +absolute + + + +0.01 +smooth + +8.536149327898361 +47.350420794329466 +428.9295998934268 +-202.8710468708392 +78.29068340808678 +0 +120 +absolute + + + +0.01 +smooth + +8.536148415607913 +47.350420531268114 +428.92955737297393 +-202.8900709840524 +78.30963742249321 +0 +120 +absolute + + + +0.01 +smooth + +8.53614750516751 +47.35042026811006 +428.9295151900103 +-202.90893948166956 +78.32859598049542 +0 +120 +absolute + + + +0.01 +smooth + +8.536146596597732 +47.35042000486754 +428.92947335021836 +-202.92765036154805 +78.34755857051796 +0 +120 +absolute + + + +0.01 +smooth + +8.53614568991917 +47.35041974155273 +428.9294318592803 +-202.94620162154519 +78.3665246809854 +0 +120 +absolute + + + +0.01 +smooth + +8.536144785152398 +47.35041947817784 +428.92939072287845 +-202.96459125951827 +78.38549380032225 +0 +120 +absolute + + + +0.01 +smooth + +8.53614388231801 +47.35041921475511 +428.9293499466952 +-202.98281727332468 +78.40446541695309 +0 +120 +absolute + + + +0.01 +smooth + +8.536142981436582 +47.35041895129669 +428.9293095364127 +-203.00087766082163 +78.42343901930244 +0 +120 +absolute + + + +0.01 +smooth + +8.536142082528698 +47.350418687814816 +428.9292694977133 +-203.01877041986648 +78.44241409579486 +0 +120 +absolute + + + +0.01 +smooth + +8.536141185614945 +47.35041842432169 +428.9292298362792 +-203.03649354831663 +78.4613901348549 +0 +120 +absolute + + + +0.01 +smooth + +8.536140290715903 +47.35041816082951 +428.92919055779294 +-203.05404504402927 +78.48036662490708 +0 +120 +absolute + + + +0.01 +smooth + +8.536139397852157 +47.35041789735048 +428.92915166793654 +-203.07142290486172 +78.49934305437597 +0 +120 +absolute + + + +0.01 +smooth + +8.536138507044289 +47.350417633896825 +428.9291131723925 +-203.08862512867142 +78.51831891168611 +0 +120 +absolute + + + +0.01 +smooth + +8.536137618312885 +47.35041737048072 +428.9290750768431 +-203.10564971331556 +78.53729368526203 +0 +120 +absolute + + + +0.01 +smooth + +8.536136731678527 +47.350417107114374 +428.92903738697044 +-203.12249465665155 +78.5562668635283 +0 +120 +absolute + + + +0.01 +smooth + +8.536135847161797 +47.35041684381001 +428.929000108457 +-203.13915795653668 +78.57523793490942 +0 +120 +absolute + + + +0.01 +smooth + +8.53613496478328 +47.35041658057982 +428.928963246985 +-203.15563761082825 +78.59420638783001 +0 +120 +absolute + + + +0.01 +smooth + +8.536134084563558 +47.350416317435986 +428.92892680823684 +-203.17193161738354 +78.61317171071454 +0 +120 +absolute + + + +0.01 +smooth + +8.53613320652322 +47.35041605439076 +428.9288907978947 +-203.18803797405997 +78.6321333919876 +0 +120 +absolute + + + +0.01 +smooth + +8.536132330682841 +47.350415791456314 +428.9288552216409 +-203.20395467871475 +78.65109092007373 +0 +120 +absolute + + + +0.01 +smooth + +8.536131456617273 +47.35041552844184 +428.9288199260556 +-203.2197423731124 +78.67005324434645 +0 +120 +absolute + + + +0.01 +smooth + +8.536130583901674 +47.3504152651561 +428.92878475817406 +-203.2354615345195 +78.68902925481476 +0 +120 +absolute + + + +0.01 +smooth + +8.536129712557084 +47.35041500161068 +428.92874972436164 +-203.25110991404642 +78.70801835085652 +0 +120 +absolute + + + +0.01 +smooth + +8.536128842604551 +47.35041473781718 +428.9287148309833 +-203.26668526280363 +78.72701993184953 +0 +120 +absolute + + + +0.01 +smooth + +8.536127974065117 +47.35041447378716 +428.9286800844044 +-203.2821853319016 +78.74603339717162 +0 +120 +absolute + + + +0.01 +smooth + +8.536127106959821 +47.350414209532225 +428.9286454909901 +-203.29760787245073 +78.76505814620059 +0 +120 +absolute + + + +0.01 +smooth + +8.536126241309717 +47.350413945063956 +428.92861105710546 +-203.3129506355615 +78.78409357831428 +0 +120 +absolute + + + +0.01 +smooth + +8.536125377135841 +47.35041368039394 +428.9285767891158 +-203.32821137234438 +78.80313909289049 +0 +120 +absolute + + + +0.01 +smooth + +8.536124514459242 +47.350413415533765 +428.9285426933862 +-203.3433878339098 +78.82219408930708 +0 +120 +absolute + + + +0.01 +smooth + +8.536123653300962 +47.350413150494994 +428.9285087762818 +-203.3584777713681 +78.8412579669418 +0 +120 +absolute + + + +0.01 +smooth + +8.536122793682049 +47.35041288528927 +428.92847504416807 +-203.37347893582995 +78.86033012517252 +0 +120 +absolute + + + +0.01 +smooth + +8.53612193562354 +47.35041261992811 +428.9284415034099 +-203.38838907840557 +78.87940996337703 +0 +120 +absolute + + + +0.01 +smooth + +8.536121079146483 +47.35041235442314 +428.92840816037244 +-203.40320595020555 +78.89849688093318 +0 +120 +absolute + + + +0.01 +smooth + +8.536120224271924 +47.350412088785944 +428.9283750214211 +-203.41792730234033 +78.9175902772188 +0 +120 +absolute + + + +0.01 +smooth + +8.536119371020908 +47.35041182302811 +428.9283420929211 +-203.43255088592034 +78.93668955161169 +0 +120 +absolute + + + +0.01 +smooth + +8.536118519414469 +47.350411557161195 +428.9283093812373 +-203.44707445205594 +78.95579410348961 +0 +120 +absolute + + + +0.01 +smooth + +8.536117669473667 +47.35041129119681 +428.9282768927352 +-203.46149575185765 +78.97490333223047 +0 +120 +absolute + + + +0.01 +smooth + +8.536116821219533 +47.35041102514655 +428.92824463377985 +-203.47581253643597 +78.99401663721203 +0 +120 +absolute + + + +0.01 +smooth + +8.536115974673118 +47.35041075902197 +428.9282126107363 +-203.49002255690124 +79.01313341781214 +0 +120 +absolute + + + +0.01 +smooth + +8.536115129855464 +47.35041049283467 +428.9281808299699 +-203.50412356436397 +79.0322530734086 +0 +120 +absolute + + + +0.01 +smooth + +8.536114286787614 +47.35041022659625 +428.92814929784583 +-203.51811330993453 +79.05137500337925 +0 +120 +absolute + + + +0.01 +smooth + +8.536113445490615 +47.350409960318274 +428.92811802072924 +-203.5319895447235 +79.07049860710187 +0 +120 +absolute + + + +0.01 +smooth + +8.536112605985508 +47.35040969401234 +428.9280870049854 +-203.54575001984122 +79.08962328395434 +0 +120 +absolute + + + +0.01 +smooth + +8.53611176829334 +47.350409427690046 +428.9280562569793 +-203.55939248639817 +79.10874843331443 +0 +120 +absolute + + + +0.01 +smooth + +8.536110932435152 +47.35040916136295 +428.92802578307624 +-203.57291469550483 +79.12787345455996 +0 +120 +absolute + + + +0.01 +smooth + +8.536110098431992 +47.350408895042655 +428.92799558964134 +-203.58631439827158 +79.14699774706877 +0 +120 +absolute + + + +0.01 +smooth + +8.536109266304901 +47.350408628740745 +428.9279656830399 +-203.59958934580888 +79.16612071021868 +0 +120 +absolute + + + +0.01 +smooth + +8.536108436074926 +47.3504083624688 +428.927936069637 +-203.61273728922725 +79.18524174338751 +0 +120 +absolute + + + +0.01 +smooth + +8.536107607763109 +47.35040809623842 +428.9279067557979 +-203.62575597963706 +79.20436024595304 +0 +120 +absolute + + + +0.01 +smooth + +8.536106781390494 +47.35040783006117 +428.92787774788775 +-203.6386431681488 +79.22347561729312 +0 +120 +absolute + + + +0.01 +smooth + +8.536105956978126 +47.35040756394866 +428.92784905227165 +-203.65139660587286 +79.24258725678558 +0 +120 +absolute + + + +0.01 +smooth + +8.53610513454705 +47.350407297912454 +428.92782067531493 +-203.66401404391976 +79.26169456380823 +0 +120 +absolute + + + +0.01 +smooth + +8.536104314118306 +47.35040703196415 +428.92779262338263 +-203.67649323339992 +79.28079693773888 +0 +120 +absolute + + + +0.01 +smooth + +8.536103495712943 +47.35040676611533 +428.92776490284007 +-203.68883192542373 +79.29989377795536 +0 +120 +absolute + + + +0.01 +smooth + +8.536102679352005 +47.35040650037758 +428.92773752005235 +-203.7010278711017 +79.31898448383548 +0 +120 +absolute + + + +0.01 +smooth + +8.536101865056533 +47.35040623476249 +428.92771048138457 +-203.71307882154426 +79.33806845475705 +0 +120 +absolute + + + +0.01 +smooth + +8.536101052847572 +47.35040596928164 +428.92768379320216 +-203.72498252786187 +79.35714509009792 +0 +120 +absolute + + + +0.01 +smooth + +8.53610024274617 +47.350405703946606 +428.92765746187 +-203.73673674116495 +79.37621378923589 +0 +120 +absolute + + + +0.01 +smooth + +8.536099434773366 +47.350405438769 +428.92763149375355 +-203.748339212564 +79.39527395154876 +0 +120 +absolute + + + +0.01 +smooth + +8.536098628950203 +47.35040517376039 +428.92760589521777 +-203.75978769316936 +79.41432497641438 +0 +120 +absolute + + + +0.01 +smooth + +8.536097825297734 +47.350404908932376 +428.927580672628 +-203.7710799340916 +79.43336626321056 +0 +120 +absolute + + + +0.01 +smooth + +8.536097023836994 +47.35040464429652 +428.9275558323493 +-203.78221368644108 +79.4523972113151 +0 +120 +absolute + + + +0.01 +smooth + +8.53609622458903 +47.35040437986443 +428.9275313807469 +-203.7931867013283 +79.47141722010585 +0 +120 +absolute + + + +0.01 +smooth + +8.536095427574889 +47.35040411564768 +428.92750732418614 +-203.80399672986363 +79.4904256889606 +0 +120 +absolute + + + +0.01 +smooth + +8.536094632815612 +47.35040385165786 +428.927483669032 +-203.81464152315763 +79.5094220172572 +0 +120 +absolute + + + +0.01 +smooth + +8.536093840332244 +47.350403587906555 +428.9274604216496 +-203.82511883232064 +79.52840560437345 +0 +120 +absolute + + + +0.01 +smooth + +8.53609305014583 +47.35040332440535 +428.9274375884043 +-203.83542640846318 +79.54737584968717 +0 +120 +absolute + + + +0.01 +smooth + +8.536092262277412 +47.350403061165835 +428.92741517566134 +-203.84556200269566 +79.56633215257615 +0 +120 +absolute + + + +0.01 +smooth + +8.536091476748037 +47.35040279819959 +428.9273931897857 +-203.85552336612858 +79.58527391241826 +0 +120 +absolute + + + +0.01 +smooth + +8.536090693578748 +47.3504025355182 +428.9273716371425 +-203.8653082498723 +79.6042005285913 +0 +120 +absolute + + + +0.01 +smooth + +8.536089912790587 +47.35040227313326 +428.92735052409733 +-203.87491440503732 +79.6231114004731 +0 +120 +absolute + + + +0.01 +smooth + +8.536089133921534 +47.35040201085959 +428.9273296503815 +-203.88441398561207 +79.64201693591448 +0 +120 +absolute + + + +0.01 +smooth + +8.53608835650995 +47.35040174851194 +428.92730881749566 +-203.89387872671006 +79.66092748292951 +0 +120 +absolute + + + +0.01 +smooth + +8.536087580577446 +47.35040148610173 +428.92728803445783 +-203.90330575112924 +79.67984235114099 +0 +120 +absolute + + + +0.01 +smooth + +8.536086806145626 +47.350401223640354 +428.92726731028563 +-203.91269218166735 +79.69876085017154 +0 +120 +absolute + + + +0.01 +smooth + +8.536086033236108 +47.350400961139236 +428.92724665399743 +-203.92203514112242 +79.71768228964393 +0 +120 +absolute + + + +0.01 +smooth + +8.536085261870504 +47.3504006986098 +428.92722607461116 +-203.93133175229235 +79.73660597918082 +0 +120 +absolute + + + +0.01 +smooth + +8.536084492070422 +47.35040043606349 +428.9272055811449 +-203.94057913797513 +79.755531228405 +0 +120 +absolute + + + +0.01 +smooth + +8.536083723857477 +47.35040017351171 +428.92718518261665 +-203.9497744209686 +79.7744573469392 +0 +120 +absolute + + + +0.01 +smooth + +8.536082957253278 +47.35039991096585 +428.92716488804433 +-203.9589147240706 +79.79338364440605 +0 +120 +absolute + + + +0.01 +smooth + +8.536082192279434 +47.350399648437374 +428.927144706446 +-203.96799717007906 +79.81230943042831 +0 +120 +absolute + + + +0.01 +smooth + +8.536081428957564 +47.35039938593767 +428.92712464683973 +-203.97701888179202 +79.83123401462869 +0 +120 +absolute + + + +0.01 +smooth + +8.536080667309273 +47.35039912347819 +428.92710471824347 +-203.98597698200734 +79.85015670662995 +0 +120 +absolute + + + +0.01 +smooth + +8.536079907356172 +47.3503988610703 +428.9270849296752 +-203.99486859352282 +79.86907681605469 +0 +120 +absolute + + + +0.01 +smooth + +8.536079149119878 +47.35039859872549 +428.9270652901531 +-204.00369083913654 +79.8879936525258 +0 +120 +absolute + + + +0.01 +smooth + +8.536078392621999 +47.35039833645513 +428.92704580869514 +-204.0124408416463 +79.90690652566585 +0 +120 +absolute + + + +0.01 +smooth + +8.536077637884144 +47.35039807427064 +428.92702649431925 +-204.02111572385004 +79.9258147450976 +0 +120 +absolute + + + +0.01 +smooth + +8.536076884927928 +47.35039781218345 +428.9270073560434 +-204.02971260854565 +79.94471762044377 +0 +120 +absolute + + + +0.01 +smooth + +8.536076133774966 +47.35039755020502 +428.9269884028859 +-204.03822861853118 +79.96361446132713 +0 +120 +absolute + + + +0.01 +smooth + +8.53607538444686 +47.3503972883467 +428.9269696438645 +-204.04666087660434 +79.98250457737029 +0 +120 +absolute + + + +0.01 +smooth + +8.536074636965227 +47.35039702661994 +428.9269510879973 +-204.05500650556314 +80.00138727819603 +0 +120 +absolute + + + +0.01 +smooth + +8.536073891351679 +47.350396765036166 +428.92693274430223 +-204.0632626282055 +80.02026187342706 +0 +120 +absolute + + + +0.01 +smooth + +8.536073147627825 +47.3503965036068 +428.92691462179744 +-204.07142636732934 +80.03912767268609 +0 +120 +absolute + + + +0.01 +smooth + +8.536072405815277 +47.35039624234324 +428.9268967295008 +-204.07949484573248 +80.05798398559585 +0 +120 +absolute + + + +0.01 +smooth + +8.536071665935651 +47.35039598125694 +428.9268790764305 +-204.08746518621297 +80.07683012177907 +0 +120 +absolute + + + +0.01 +smooth + +8.536070928010552 +47.35039572035929 +428.92686167160457 +-204.09533451156867 +80.0956653908584 +0 +120 +absolute + + + +0.01 +smooth + +8.536070192061594 +47.35039545966172 +428.92684452404086 +-204.10309994459743 +80.11448910245664 +0 +120 +absolute + + + +0.01 +smooth + +8.53606945811039 +47.35039519917564 +428.9268276427575 +-204.11075860809729 +80.13330056619645 +0 +120 +absolute + + + +0.01 +smooth + +8.536068726178549 +47.35039493891249 +428.9268110367724 +-204.11830762486596 +80.15209909170055 +0 +120 +absolute + + + +0.01 +smooth + +8.536067996287683 +47.35039467888367 +428.92679471510365 +-204.12574411770154 +80.17088398859167 +0 +120 +absolute + + + +0.01 +smooth + +8.536067268459403 +47.35039441910061 +428.9267786867694 +-204.13306520940188 +80.18965456649252 +0 +120 +absolute + + + +0.01 +smooth + +8.536066542715325 +47.35039415957473 +428.92676296078747 +-204.14026802276493 +80.20841013502584 +0 +120 +absolute + + + +0.01 +smooth + +8.536065819077052 +47.35039390031744 +428.926747546176 +-204.1473496805885 +80.2271500038143 +0 +120 +absolute + + + +0.01 +smooth + +8.536065097566205 +47.35039364134018 +428.92673245195283 +-204.15430730567059 +80.24587348248066 +0 +120 +absolute + + + +0.01 +smooth + +8.536064378204387 +47.35039338265435 +428.92671768713615 +-204.16113802080912 +80.26457988064762 +0 +120 +absolute + + + +0.01 +smooth + +8.536063661013214 +47.35039312427138 +428.92670326074403 +-204.16783894880194 +80.28326850793789 +0 +120 +absolute + + + +0.01 +smooth + +8.536062946014297 +47.35039286620268 +428.92668918179436 +-204.17440721244697 +80.30193867397419 +0 +120 +absolute + + + +0.01 +smooth + +8.536062233229247 +47.35039260845967 +428.9266754593051 +-204.18083993454218 +80.32058968837926 +0 +120 +absolute + + + +0.01 +smooth + +8.536061522679674 +47.350392351053785 +428.9266621022944 +-204.18713423788543 +80.33922086077577 +0 +120 +absolute + + + +0.01 +smooth + +8.536060814387193 +47.35039209399643 +428.92664911978034 +-204.1932872452747 +80.35783150078646 +0 +120 +absolute + + + +0.01 +smooth + +8.536060108373412 +47.350391837299036 +428.9266365207807 +-204.1992960795078 +80.37642091803406 +0 +120 +absolute + + + +0.01 +smooth + +8.536059404659945 +47.35039158097301 +428.9266243143137 +-204.2051578633827 +80.39498842214127 +0 +120 +absolute + + + +0.01 +smooth + +8.536058703268402 +47.350391325029776 +428.9266125093972 +-204.2108697196973 +80.41353332273081 +0 +120 +absolute + + + +0.01 +smooth + +8.536058004220394 +47.350391069480764 +428.9266011150495 +-204.21642877124955 +80.43205492942539 +0 +120 +absolute + + + +0.01 +smooth + +8.536057307537533 +47.35039081433737 +428.9265901402882 +-204.22183214083734 +80.45055255184772 +0 +120 +absolute + + + +0.01 +smooth + +8.536056613241431 +47.35039055961104 +428.92657959413174 +-204.22707695125857 +80.46902549962054 +0 +120 +absolute + + + +0.01 +smooth + +8.536055921353698 +47.35039030531319 +428.92656948559784 +-204.2321603253111 +80.48747308236656 +0 +120 +absolute + + + +0.01 +smooth + +8.536055231895947 +47.35039005145521 +428.9265598237047 +-204.23707938579298 +80.50589460970848 +0 +120 +absolute + + + +0.01 +smooth + +8.536054544889788 +47.35038979804856 +428.9265506174702 +-204.241831255502 +80.52428939126904 +0 +120 +absolute + + + +0.01 +smooth + +8.536053860356835 +47.35038954510463 +428.92654187591245 +-204.24641305723614 +80.54265673667092 +0 +120 +absolute + + + +0.01 +smooth + +8.5360531783187 +47.350389292634866 +428.92653360804945 +-204.25082191379323 +80.56099595553688 +0 +120 +absolute + + + +0.01 +smooth + +8.536052498796987 +47.350389040650654 +428.9265258228991 +-204.2550549479713 +80.57930635748961 +0 +120 +absolute + + + +0.01 +smooth + +8.536051821287964 +47.35038878895919 +428.9265182894855 +-204.25920479922078 +80.59760014446115 +0 +120 +absolute + + + +0.01 +smooth + +8.536051145288354 +47.350388537367735 +428.9265107743466 +-204.26336357127857 +80.61588945946242 +0 +120 +absolute + + + +0.01 +smooth + +8.536050470820436 +47.350388285887895 +428.9265032827715 +-204.26752758337233 +80.6341735237345 +0 +120 +absolute + + + +0.01 +smooth + +8.53604979790651 +47.35038803453121 +428.92649582004924 +-204.27169315472955 +80.65245155851845 +0 +120 +absolute + + + +0.01 +smooth + +8.536049126568866 +47.3503877833093 +428.92648839146915 +-204.2758566045778 +80.67072278505543 +0 +120 +absolute + + + +0.01 +smooth + +8.536048456829791 +47.35038753223374 +428.9264810023203 +-204.28001425214472 +80.68898642458647 +0 +120 +absolute + + + +0.01 +smooth + +8.53604778871158 +47.3503872813161 +428.9264736578918 +-204.28416241665786 +80.70724169835266 +0 +120 +absolute + + + +0.01 +smooth + +8.536047122236527 +47.350387030567994 +428.92646636347274 +-204.28829741734484 +80.72548782759507 +0 +120 +absolute + + + +0.01 +smooth + +8.536046457426917 +47.350386780000974 +428.92645912435233 +-204.29241557343306 +80.7437240335548 +0 +120 +absolute + + + +0.01 +smooth + +8.536045794305045 +47.350386529626626 +428.9264519458196 +-204.29651320415022 +80.76194953747292 +0 +120 +absolute + + + +0.01 +smooth + +8.536045132893207 +47.35038627945657 +428.9264448331641 +-204.30058662872403 +80.78016356059054 +0 +120 +absolute + + + +0.01 +smooth + +8.536044473213687 +47.350386029502324 +428.92643779167435 +-204.3046321663818 +80.79836532414869 +0 +120 +absolute + + + +0.01 +smooth + +8.53604381528878 +47.350385779775536 +428.9264308266399 +-204.30864613635123 +80.81655404938851 +0 +120 +absolute + + + +0.01 +smooth + +8.53604315914078 +47.35038553028777 +428.92642394335 +-204.31262485785996 +80.83472895755109 +0 +120 +absolute + + + +0.01 +smooth + +8.536042504791972 +47.350385281050585 +428.92641714709333 +-204.31656465013546 +80.85288926987747 +0 +120 +absolute + + + +0.01 +smooth + +8.53604185226465 +47.35038503207557 +428.9264104431592 +-204.32046183240524 +80.87103420760869 +0 +120 +absolute + + + +0.01 +smooth + +8.53604120158111 +47.35038478337436 +428.92640383683715 +-204.32431272389707 +80.88916299198594 +0 +120 +absolute + + + +0.01 +smooth + +8.536040552763643 +47.35038453495848 +428.9263973334158 +-204.32811364383846 +80.90727484425027 +0 +120 +absolute + + + +0.01 +smooth + +8.536039905834532 +47.35038428683951 +428.92639093818445 +-204.33186091145689 +80.9253689856427 +0 +120 +absolute + + + +0.01 +smooth + +8.536039260816075 +47.35038403902907 +428.9263846564324 +-204.33555084597995 +80.94344463740438 +0 +120 +absolute + + + +0.01 +smooth + +8.536038617730563 +47.350383791538725 +428.92637849344857 +-204.3391797666353 +80.96150102077638 +0 +120 +absolute + + + +0.01 +smooth + +8.536037976600285 +47.350383544380065 +428.92637245452227 +-204.3427439926505 +80.97953735699977 +0 +120 +absolute + + + +0.01 +smooth + +8.536037337447537 +47.350383297564676 +428.92636654494254 +-204.34623984325302 +80.99755286731562 +0 +120 +absolute + + + +0.01 +smooth + +8.536036700294607 +47.35038305110413 +428.9263607699985 +-204.34966363767055 +81.01554677296505 +0 +120 +absolute + + + +0.01 +smooth + +8.536036065163788 +47.35038280501002 +428.92635513497936 +-204.35301169513062 +81.03351829518913 +0 +120 +absolute + + + +0.01 +smooth + +8.536035432077371 +47.35038255929391 +428.92634964517424 +-204.35628033486077 +81.05146665522892 +0 +120 +absolute + + + +0.01 +smooth + +8.536034801057648 +47.35038231396742 +428.9263443058723 +-204.35946587608862 +81.06939107432552 +0 +120 +absolute + + + +0.01 +smooth + +8.536034172126907 +47.3503820690421 +428.92633912236266 +-204.36256463804176 +81.08729077372001 +0 +120 +absolute + + + +0.01 +smooth + +8.536033545307445 +47.35038182452954 +428.9263340999344 +-204.3655729399477 +81.10516497465348 +0 +120 +absolute + + + +0.01 +smooth + +8.536032920621551 +47.35038158044134 +428.9263292438767 +-204.36848710103408 +81.12301289836702 +0 +120 +absolute + + + +0.01 +smooth + +8.536032298091515 +47.35038133678907 +428.92632455947887 +-204.3713034405284 +81.14083376610168 +0 +120 +absolute + + + +0.01 +smooth + +8.53603167773963 +47.35038109358432 +428.9263200520298 +-204.37401827765825 +81.15862679909858 +0 +120 +absolute + + + +0.01 +smooth + +8.536031059588186 +47.35038085083866 +428.92631572681864 +-204.37662793165129 +81.17639121859878 +0 +120 +absolute + + + +0.01 +smooth + +8.536030443659477 +47.35038060856368 +428.92631158913474 +-204.37912872173501 +81.19412624584338 +0 +120 +absolute + + + +0.01 +smooth + +8.536029829975792 +47.35038036677097 +428.926307644267 +-204.38151696713703 +81.21183110207345 +0 +120 +absolute + + + +0.01 +smooth + +8.536029218559428 +47.35038012547212 +428.9263038975048 +-204.38378898708487 +81.22950500853007 +0 +120 +absolute + + + +0.01 +smooth + +8.536028609432666 +47.350379884678695 +428.9263003541371 +-204.38594110080612 +81.24714718645433 +0 +120 +absolute + + + +0.01 +smooth + +8.536028002617808 +47.35037964440228 +428.92629701945305 +-204.38796962752838 +81.2647568570873 +0 +120 +absolute + + + +0.01 +smooth + +8.53602739813714 +47.350379404654475 +428.92629389874185 +-204.3898708864792 +81.2823332416701 +0 +120 +absolute + + + +0.01 +smooth + +8.536026796012955 +47.35037916544684 +428.92629099729265 +-204.39164119688618 +81.2998755614438 +0 +120 +absolute + + + +0.01 +smooth + +8.536026196267542 +47.35037892679098 +428.9262883203946 +-204.39327687797692 +81.31738303764944 +0 +120 +absolute + + + +0.01 +smooth + +8.536025598923198 +47.35037868869847 +428.9262858733367 +-204.39477424897885 +81.33485489152815 +0 +120 +absolute + + + +0.01 +smooth + +8.536025004002209 +47.35037845118089 +428.9262836614082 +-204.39612962911974 +81.35229034432098 +0 +120 +absolute + + + +0.01 +smooth + +8.536024411526867 +47.35037821424983 +428.92628168989825 +-204.397339337627 +81.36968861726905 +0 +120 +absolute + + + +0.01 +smooth + +8.536023821519468 +47.35037797791686 +428.926279964096 +-204.39839969372832 +81.3870489316134 +0 +120 +absolute + + + +0.01 +smooth + +8.5360232340023 +47.35037774219358 +428.9262784892906 +-204.3993070166512 +81.40437050859515 +0 +120 +absolute + + + +0.01 +smooth + +8.536022648997653 +47.35037750709156 +428.9262772707711 +-204.40005762562322 +81.42165256945538 +0 +120 +absolute + + + +0.01 +smooth + +8.53602206652782 +47.3503772726224 +428.9262763138267 +-204.40064783987202 +81.43889433543518 +0 +120 +absolute + + + +0.01 +smooth + +8.536021486615097 +47.35037703879767 +428.9262756237465 +-204.4010739786251 +81.45609502777558 +0 +120 +absolute + + + +0.01 +smooth + +8.536020909281769 +47.35037680562895 +428.92627520581965 +-204.40133236111004 +81.4732538677177 +0 +120 +absolute + + + +0.01 +smooth + +8.536020334550129 +47.35037657312783 +428.9262750653354 +-204.40141930655446 +81.49037007650263 +0 +120 +absolute + + + +0.01 +smooth + +8.53601976187003 +47.350376341082395 +428.92627518074283 +-204.40140599890202 +81.50745808465906 +0 +120 +absolute + + + +0.01 +smooth + +8.536019190691857 +47.350376109281015 +428.9262755237014 +-204.40136633096446 +81.52453226474441 +0 +120 +absolute + + + +0.01 +smooth + +8.536018621038702 +47.35037587773571 +428.92627608931474 +-204.4013006852715 +81.54159175104276 +0 +120 +absolute + + + +0.01 +smooth + +8.536018052933649 +47.35037564645843 +428.92627687268657 +-204.40120944435256 +81.55863567783815 +0 +120 +absolute + + + +0.01 +smooth + +8.536017486399793 +47.350375415461215 +428.9262778689209 +-204.4010929907374 +81.5756631794147 +0 +120 +absolute + + + +0.01 +smooth + +8.536016921460222 +47.35037518475606 +428.9262790731215 +-204.40095170695562 +81.59267339005649 +0 +120 +absolute + + + +0.01 +smooth + +8.536016358138028 +47.35037495435496 +428.92628048039234 +-204.40078597553685 +81.6096654440476 +0 +120 +absolute + + + +0.01 +smooth + +8.5360157964563 +47.35037472426993 +428.92628208583716 +-204.4005961790107 +81.62663847567215 +0 +120 +absolute + + + +0.01 +smooth + +8.53601523643813 +47.35037449451294 +428.9262838845597 +-204.40038269990677 +81.64359161921418 +0 +120 +absolute + + + +0.01 +smooth + +8.536014678106602 +47.35037426509602 +428.9262858716639 +-204.40014592075468 +81.66052400895776 +0 +120 +absolute + + + +0.01 +smooth + +8.536014121484813 +47.35037403603116 +428.9262880422537 +-204.39988622408407 +81.67743477918704 +0 +120 +absolute + + + +0.01 +smooth + +8.536013566595848 +47.35037380733037 +428.92629039143276 +-204.39960399242463 +81.69432306418608 +0 +120 +absolute + + + +0.01 +smooth + +8.536013013462801 +47.350373579005634 +428.92629291430484 +-204.3992996083058 +81.71118799823896 +0 +120 +absolute + + + +0.01 +smooth + +8.536012462108761 +47.35037335106896 +428.926295605974 +-204.39897345425737 +81.72802871562972 +0 +120 +absolute + + + +0.01 +smooth + +8.536011912556814 +47.35037312353236 +428.9262984615441 +-204.39862591280885 +81.74484435064252 +0 +120 +absolute + + + +0.01 +smooth + +8.536011364830058 +47.35037289640781 +428.9263014761188 +-204.39825736649 +81.7616340375614 +0 +120 +absolute + + + +0.01 +smooth + +8.536010818951574 +47.350372669707326 +428.92630464480186 +-204.3978681978302 +81.77839691067045 +0 +120 +absolute + + + +0.01 +smooth + +8.536010274944461 +47.35037244344294 +428.92630796269754 +-204.3974587893594 +81.7951321042538 +0 +120 +absolute + + + +0.01 +smooth + +8.536009732831802 +47.35037221762661 +428.9263114249092 +-204.39702952360693 +81.81183875259546 +0 +120 +absolute + + + +0.01 +smooth + +8.536009192636692 +47.35037199227034 +428.9263150265409 +-204.39658078310256 +81.82851598997956 +0 +120 +absolute + + + +0.01 +smooth + +8.536008654382217 +47.35037176738614 +428.9263187626965 +-204.39611295037585 +81.84516295069018 +0 +120 +absolute + + + +0.01 +smooth + +8.536008118091472 +47.350371542986046 +428.92632262847985 +-204.3956264079565 +81.86177876901144 +0 +120 +absolute + + + +0.01 +smooth + +8.536007583787537 +47.35037131908198 +428.9263266189945 +-204.39512153837399 +81.87836257922733 +0 +120 +absolute + + + +0.01 +smooth + +8.536007051493515 +47.350371095686015 +428.92633072934484 +-204.3945987241581 +81.89491351562204 +0 +120 +absolute + + + +0.01 +smooth + +8.536006521232489 +47.35037087281012 +428.9263349546342 +-204.39405834783835 +81.91143071247959 +0 +120 +absolute + + + +0.01 +smooth + +8.536005993027551 +47.350370650466296 +428.9263392899666 +-204.39350079194438 +81.92791330408409 +0 +120 +absolute + + + +0.01 +smooth + +8.53600546690179 +47.350370428666565 +428.926343730446 +-204.3929264390058 +81.94436042471963 +0 +120 +absolute + + + +0.01 +smooth + +8.536004942878295 +47.35037020742289 +428.926348271176 +-204.39233567155227 +81.96077120867028 +0 +120 +absolute + + + +0.01 +smooth + +8.536004420980158 +47.35036998674731 +428.9263529072606 +-204.3917288721134 +81.97714479022011 +0 +120 +absolute + + + +0.01 +smooth + +8.536003901230469 +47.3503697666518 +428.9263576338036 +-204.3911064232188 +81.99348030365324 +0 +120 +absolute + + + +0.01 +smooth + +8.536003383652318 +47.35036954714838 +428.9263624459088 +-204.39046870739807 +82.00977688325375 +0 +120 +absolute + + + +0.01 +smooth + +8.536002868268794 +47.350369328249045 +428.92636733868005 +-204.3898161071809 +82.02603366330571 +0 +120 +absolute + + + +0.01 +smooth + +8.536002355102987 +47.35036910996578 +428.92637230722124 +-204.38914900509678 +82.04224977809321 +0 +120 +absolute + + + +0.01 +smooth + +8.53600184417799 +47.35036889231061 +428.9263773466362 +-204.38846778367554 +82.05842436190034 +0 +120 +absolute + + + +0.01 +smooth + +8.53600133551689 +47.35036867529553 +428.9263824520287 +-204.38777282544658 +82.07455654901116 +0 +120 +absolute + + + +0.01 +smooth + +8.536000829142777 +47.35036845893252 +428.92638761850253 +-204.38706451293962 +82.0906454737098 +0 +120 +absolute + + + +0.01 +smooth + +8.536000325078744 +47.3503682432336 +428.9263928411617 +-204.38634322868427 +82.10669027028032 +0 +120 +absolute + + + +0.01 +smooth + +8.535999823347877 +47.35036802821078 +428.92639811511003 +-204.3856093552102 +82.12269007300682 +0 +120 +absolute + + + +0.01 +smooth + +8.535999323973268 +47.35036781387605 +428.9264034354511 +-204.38486327504697 +82.13864401617334 +0 +120 +absolute + + + +0.01 +smooth + +8.535998826978009 +47.3503676002414 +428.9264087972891 +-204.38410537072417 +82.15455123406403 +0 +120 +absolute + + + +0.01 +smooth + +8.535998332385187 +47.35036738731885 +428.92641419572766 +-204.38333602477155 +82.17041086096295 +0 +120 +absolute + + + +0.01 +smooth + +8.535997840217895 +47.35036717512038 +428.9264196258706 +-204.38255561971863 +82.18622203115416 +0 +120 +absolute + + + +0.01 +smooth + +8.535997350499223 +47.35036696365802 +428.9264250828219 +-204.38176453809504 +82.20198387892175 +0 +120 +absolute + + + +0.01 +smooth + +8.535996863252256 +47.35036675294375 +428.92643056168527 +-204.38096316243036 +82.21769553854983 +0 +120 +absolute + + + +0.01 +smooth + +8.535996378500087 +47.35036654298956 +428.9264360575646 +-204.38015187525434 +82.23335614432249 +0 +120 +absolute + + + +0.01 +smooth + +8.53599589626581 +47.350366333807486 +428.9264415655637 +-204.3793310590965 +82.24896483052379 +0 +120 +absolute + + + +0.01 +smooth + +8.535995416572511 +47.350366125409494 +428.9264470807864 +-204.37850109648645 +82.26452073143781 +0 +120 +absolute + + + +0.01 +smooth + +8.53599493944328 +47.35036591780761 +428.9264525983366 +-204.37766236995387 +82.28002298134867 +0 +120 +absolute + + + +0.01 +smooth + +8.535994464901208 +47.35036571101382 +428.92645811331806 +-204.37681526202834 +82.29547071454046 +0 +120 +absolute + + + +0.01 +smooth + +8.535993992969383 +47.35036550504013 +428.9264636208347 +-204.37596015523954 +82.31086306529718 +0 +120 +absolute + + + +0.01 +smooth + +8.535993523670902 +47.35036529989855 +428.9264691159903 +-204.375097432117 +82.32619916790301 +0 +120 +absolute + + + +0.01 +smooth + +8.535993056404681 +47.350365095347854 +428.9264747442748 +-204.37416839213017 +82.34149622056799 +0 +120 +absolute + + + +0.01 +smooth + +8.535992590570256 +47.35036489114723 +428.92648064999 +-204.37311621976556 +82.35677136365732 +0 +120 +absolute + + + +0.01 +smooth + +8.535992126191632 +47.35036468730933 +428.9264868264573 +-204.37194412507841 +82.37202364468776 +0 +120 +absolute + + + +0.01 +smooth + +8.535991663292817 +47.35036448384674 +428.9264932669982 +-204.37065531812402 +82.38725211117611 +0 +120 +absolute + + + +0.01 +smooth + +8.535991201897813 +47.35036428077213 +428.9264999649342 +-204.36925300895763 +82.4024558106391 +0 +120 +absolute + + + +0.01 +smooth + +8.535990742030629 +47.35036407809808 +428.92650691358676 +-204.36774040763459 +82.41763379059353 +0 +120 +absolute + + + +0.01 +smooth + +8.535990283715265 +47.35036387583724 +428.9265141062773 +-204.36612072421013 +82.43278509855611 +0 +120 +absolute + + + +0.01 +smooth + +8.535989826975733 +47.35036367400222 +428.9265215363274 +-204.36439716873954 +82.44790878204368 +0 +120 +absolute + + + +0.01 +smooth + +8.535989371836033 +47.35036347260563 +428.9265291970584 +-204.36257295127805 +82.46300388857298 +0 +120 +absolute + + + +0.01 +smooth + +8.53598891832017 +47.35036327166012 +428.92653708179176 +-204.36065128188093 +82.47806946566077 +0 +120 +absolute + + + +0.01 +smooth + +8.535988466452158 +47.35036307117832 +428.9265451838494 +-204.35863537060368 +82.49310456082388 +0 +120 +absolute + + + +0.01 +smooth + +8.53598801625599 +47.35036287117282 +428.9265534965521 +-204.3565284275013 +82.50810822157896 +0 +120 +absolute + + + +0.01 +smooth + +8.535987567755678 +47.350362671656264 +428.9265620132218 +-204.35433366262913 +82.52307949544287 +0 +120 +absolute + + + +0.01 +smooth + +8.53598712097523 +47.35036247264128 +428.92657072718 +-204.35205428604266 +82.53801742993238 +0 +120 +absolute + + + +0.01 +smooth + +8.53598667593865 +47.35036227414048 +428.926579631748 +-204.34969350779687 +82.5529210725642 +0 +120 +absolute + + + +0.01 +smooth + +8.535986232669936 +47.35036207616646 +428.9265887202471 +-204.34725453794715 +82.56778947085513 +0 +120 +absolute + + + +0.01 +smooth + +8.535985791193106 +47.3503618787319 +428.92659798599914 +-204.34474058654888 +82.58262167232196 +0 +120 +absolute + + + +0.01 +smooth + +8.535985351532155 +47.35036168184941 +428.9266074223255 +-204.34215486365727 +82.59741672448146 +0 +120 +absolute + + + +0.01 +smooth + +8.53598491371109 +47.350361485531565 +428.92661702254753 +-204.3395005793275 +82.61217367485034 +0 +120 +absolute + + + +0.01 +smooth + +8.535984477753919 +47.350361289791046 +428.92662677998675 +-204.33678094361497 +82.62689157094543 +0 +120 +absolute + + + +0.01 +smooth + +8.53598404368465 +47.35036109464045 +428.9266366879649 +-204.33399916657496 +82.64156946028348 +0 +120 +absolute + + + +0.01 +smooth + +8.53598361152728 +47.35036090009239 +428.92664673980295 +-204.33115845826262 +82.65620639038123 +0 +120 +absolute + + + +0.01 +smooth + +8.535983181305824 +47.35036070615951 +428.92665692882275 +-204.3282620287334 +82.67080140875548 +0 +120 +absolute + + + +0.01 +smooth + +8.53598275304428 +47.35036051285442 +428.92666724834567 +-204.3253130880425 +82.685353562923 +0 +120 +absolute + + + +0.01 +smooth + +8.535982326766659 +47.35036032018975 +428.92667769169327 +-204.32231484624515 +82.69986190040055 +0 +120 +absolute + + + +0.01 +smooth + +8.53598190249696 +47.350360128178146 +428.92668825218686 +-204.31927051339667 +82.71432546870491 +0 +120 +absolute + + + +0.01 +smooth + +8.535981480259196 +47.350359936832184 +428.92669892314814 +-204.3161832995524 +82.72874331535283 +0 +120 +absolute + + + +0.01 +smooth + +8.535981060077365 +47.35035974616451 +428.92670969789833 +-204.3130564147675 +82.74311448786109 +0 +120 +absolute + + + +0.01 +smooth + +8.53598064197548 +47.350359556187755 +428.926720569759 +-204.3098930690973 +82.75743803374644 +0 +120 +absolute + + + +0.01 +smooth + +8.535980225977537 +47.350359366914525 +428.92673153205175 +-204.3066964725971 +82.77171300052568 +0 +120 +absolute + + + +0.01 +smooth + +8.53597981210755 +47.350359178357465 +428.92674257809796 +-204.3034698353222 +82.78593843571556 +0 +120 +absolute + + + +0.01 +smooth + +8.535979400389522 +47.35035899052917 +428.92675370121907 +-204.3002163673278 +82.80011338683288 +0 +120 +absolute + + + +0.01 +smooth + +8.535978990847454 +47.35035880344229 +428.9267648947366 +-204.29693927866924 +82.81423690139435 +0 +120 +absolute + + + +0.01 +smooth + +8.535978583505356 +47.350358617109435 +428.92677615197204 +-204.29364177940178 +82.82830802691677 +0 +120 +absolute + + + +0.01 +smooth + +8.535978178387232 +47.350358431543235 +428.9267874662468 +-204.29032707958066 +82.84232581091692 +0 +120 +absolute + + + +0.01 +smooth + +8.53597777551709 +47.35035824675631 +428.9267988308825 +-204.28699838926127 +82.85628930091156 +0 +120 +absolute + + + +0.01 +smooth + +8.535977374918929 +47.35035806276127 +428.9268102392005 +-204.28365891849873 +82.87019754441744 +0 +120 +absolute + + + +0.01 +smooth + +8.53597697661676 +47.350357879570765 +428.9268216845222 +-204.28031187734845 +82.88404958895137 +0 +120 +absolute + + + +0.01 +smooth + +8.535976580634589 +47.350357697197396 +428.9268331601693 +-204.27696047586565 +82.89784448203008 +0 +120 +absolute + + + +0.01 +smooth + +8.535976186996416 +47.3503575156538 +428.9268446594631 +-204.2736079241056 +82.91158127117035 +0 +120 +absolute + + + +0.01 +smooth + +8.535975795726252 +47.35035733495259 +428.9268561757251 +-204.27025743212363 +82.92525900388895 +0 +120 +absolute + + + +0.01 +smooth + +8.535975406848099 +47.350357155106394 +428.9268677022768 +-204.26691220997495 +82.93887672770266 +0 +120 +absolute + + + +0.01 +smooth + +8.535975020385962 +47.350356976127834 +428.9268792324398 +-204.26357546771484 +82.95243349012823 +0 +120 +absolute + + + +0.01 +smooth + +8.535974636363848 +47.35035679802954 +428.92689075953535 +-204.26025041539867 +82.96592833868243 +0 +120 +absolute + + + +0.01 +smooth + +8.535974254805764 +47.350356620824115 +428.9269022768851 +-204.25694026308167 +82.97936032088207 +0 +120 +absolute + + + +0.01 +smooth + +8.53597387573571 +47.350356444524216 +428.92691377781046 +-204.25364822081906 +82.99272848424384 +0 +120 +absolute + + + +0.01 +smooth + +8.535973499177697 +47.350356269142424 +428.92692525563274 +-204.25037749866615 +83.00603187628458 +0 +120 +absolute + + + +0.01 +smooth + +8.535973125155728 +47.3503560946914 +428.9269367036738 +-204.24713130667826 +83.01926954452105 +0 +120 +absolute + + + +0.01 +smooth + +8.535972753693809 +47.35035592118375 +428.9269481152548 +-204.24391285491063 +83.03244053646996 +0 +120 +absolute + + + +0.01 +smooth + +8.535972384815945 +47.350355748632104 +428.9269594836973 +-204.24072535341858 +83.04554389964815 +0 +120 +absolute + + + +0.01 +smooth + +8.535972018546142 +47.350355577049065 +428.92697080232284 +-204.23757201225732 +83.05857868157236 +0 +120 +absolute + + + +0.01 +smooth + +8.535971654228241 +47.350355406154804 +428.92698216034347 +-204.23441384784948 +83.07156547133737 +0 +120 +absolute + + + +0.01 +smooth + +8.535971291206774 +47.35035523567001 +428.9269936491751 +-204.23121061913363 +83.08452479931474 +0 +120 +absolute + + + +0.01 +smooth + +8.535970929506744 +47.35035506560805 +428.9270052654437 +-204.2279636499388 +83.09745562493646 +0 +120 +absolute + + + +0.01 +smooth + +8.535970569153173 +47.350354895982385 +428.9270170057759 +-204.22467426409403 +83.11035690763453 +0 +120 +absolute + + + +0.01 +smooth + +8.535970210171074 +47.350354726806394 +428.92702886679825 +-204.22134378542853 +83.12322760684086 +0 +120 +absolute + + + +0.01 +smooth + +8.535969852585463 +47.3503545580935 +428.9270408451371 +-204.2179735377712 +83.13606668198747 +0 +120 +absolute + + + +0.01 +smooth + +8.535969496421357 +47.35035438985712 +428.927052937419 +-204.2145648449513 +83.1488730925063 +0 +120 +absolute + + + +0.01 +smooth + +8.535969141703774 +47.350354222110674 +428.9270651402705 +-204.2111190307979 +83.16164579782941 +0 +120 +absolute + + + +0.01 +smooth + +8.535968788457724 +47.350354054867545 +428.9270774503177 +-204.20763741914007 +83.17438375738864 +0 +120 +absolute + + + +0.01 +smooth + +8.535968436708224 +47.350353888141164 +428.9270898641872 +-204.20412133380677 +83.18708593061605 +0 +120 +absolute + + + +0.01 +smooth + +8.535968086480292 +47.35035372194495 +428.92710237850565 +-204.20057209862722 +83.19975127694359 +0 +120 +absolute + + + +0.01 +smooth + +8.535967737798945 +47.350353556292305 +428.92711498989934 +-204.19699103743056 +83.21237875580326 +0 +120 +absolute + + + +0.01 +smooth + +8.535967390689192 +47.350353391196634 +428.9271276949948 +-204.19337947404568 +83.22496732662698 +0 +120 +absolute + + + +0.01 +smooth + +8.535967045176054 +47.35035322667136 +428.92714049041825 +-204.1897387323018 +83.23751594884675 +0 +120 +absolute + + + +0.01 +smooth + +8.535966701284545 +47.3503530627299 +428.92715337279634 +-204.18607013602804 +83.25002358189454 +0 +120 +absolute + + + +0.01 +smooth + +8.53596635903968 +47.35035289938565 +428.9271663387556 +-204.18237500905337 +83.26248918520233 +0 +120 +absolute + + + +0.01 +smooth + +8.535966018466477 +47.35035273665202 +428.9271793849223 +-204.17865467520696 +83.27491171820208 +0 +120 +absolute + + + +0.01 +smooth + +8.535965679589951 +47.350352574542455 +428.92719250792317 +-204.17491045831795 +83.2872901403258 +0 +120 +absolute + + + +0.01 +smooth + +8.535965342435116 +47.350352413070325 +428.9272057043842 +-204.1711436822153 +83.29962341100541 +0 +120 +absolute + + + +0.01 +smooth + +8.535965007026986 +47.350352252249074 +428.9272189709323 +-204.1673556707281 +83.3119104896729 +0 +120 +absolute + + + +0.01 +smooth + +8.535964673390579 +47.35035209209209 +428.92723230419375 +-204.16354774768556 +83.32415033576025 +0 +120 +absolute + + + +0.01 +smooth + +8.535964341550914 +47.35035193261281 +428.92724570079497 +-204.1597212369167 +83.33634190869944 +0 +120 +absolute + + + +0.01 +smooth + +8.535964011532997 +47.35035177382461 +428.92725915736224 +-204.15587746225054 +83.34848416792242 +0 +120 +absolute + + + +0.01 +smooth + +8.535963683361855 +47.350351615740955 +428.9272726705224 +-204.15201774751634 +83.36057607286119 +0 +120 +absolute + + + +0.01 +smooth + +8.535963357062498 +47.3503514583752 +428.92728623690175 +-204.14814341654304 +83.3726165829477 +0 +120 +absolute + + + +0.01 +smooth + +8.53596303265994 +47.3503513017408 +428.92729985312667 +-204.14425579315977 +83.38460465761393 +0 +120 +absolute + + + +0.01 +smooth + +8.5359627101792 +47.35035114585114 +428.9273135158236 +-204.14035620119557 +83.39653925629187 +0 +120 +absolute + + + +0.01 +smooth + +8.535962389645292 +47.350350990719654 +428.927327221619 +-204.1364459644796 +83.40841933841347 +0 +120 +absolute + + + +0.01 +smooth + +8.535962071083231 +47.35035083635974 +428.92734096713946 +-204.13252640684095 +83.4202438634107 +0 +120 +absolute + + + +0.01 +smooth + +8.535961754518032 +47.35035068278481 +428.92735474901133 +-204.12859885210864 +83.43201179071555 +0 +120 +absolute + + + +0.01 +smooth + +8.535961439974717 +47.35035053000828 +428.927368563861 +-204.1246646241118 +83.44372207976 +0 +120 +absolute + + + +0.01 +smooth + +8.535961127478291 +47.35035037804356 +428.92738240831505 +-204.12072504667952 +83.45537368997597 +0 +120 +absolute + + + +0.01 +smooth + +8.535960817053777 +47.35035022690406 +428.9273962789998 +-204.11678144364083 +83.46696558079549 +0 +120 +absolute + + + +0.01 +smooth + +8.53596050872619 +47.35035007660319 +428.9274101725419 +-204.11283513882495 +83.47849671165051 +0 +120 +absolute + + + +0.01 +smooth + +8.535960202520544 +47.35034992715437 +428.9274240855676 +-204.10888745606084 +83.48996604197302 +0 +120 +absolute + + + +0.01 +smooth + +8.535959898461853 +47.350349778571015 +428.9274380147035 +-204.10493971917765 +83.50137253119496 +0 +120 +absolute + + + +0.01 +smooth + +8.535959596575138 +47.35034963086653 +428.9274519565759 +-204.1009932520044 +83.51271513874832 +0 +120 +absolute + + + +0.01 +smooth + +8.535959296885409 +47.350349484054334 +428.92746590781144 +-204.09704937837023 +83.52399282406509 +0 +120 +absolute + + + +0.01 +smooth + +8.535958999417684 +47.35034933814782 +428.9274798650364 +-204.09310942210428 +83.5352045465772 +0 +120 +absolute + + + +0.01 +smooth + +8.535958704196979 +47.350349193160426 +428.9274938248774 +-204.08917470703554 +83.54634926571669 +0 +120 +absolute + + + +0.01 +smooth + +8.53595841124831 +47.350349049105546 +428.9275077839607 +-204.08524655699313 +83.55742594091545 +0 +120 +absolute + + + +0.01 +smooth + +8.535958120596689 +47.35034890599658 +428.927521738913 +-204.08132629580615 +83.5684335316055 +0 +120 +absolute + + + +0.01 +smooth + +8.535957832267137 +47.35034876384698 +428.92753568636044 +-204.0774152473037 +83.57937099721883 +0 +120 +absolute + + + +0.01 +smooth + +8.535957546284665 +47.350348622670126 +428.9275496229298 +-204.07351473531483 +83.59023729718737 +0 +120 +absolute + + + +0.01 +smooth + +8.535957262674291 +47.35034848247945 +428.92756354524727 +-204.06962608366865 +83.60103139094312 +0 +120 +absolute + + + +0.01 +smooth + +8.535956981461032 +47.350348343288346 +428.92757744993946 +-204.06575061619424 +83.61175223791805 +0 +120 +absolute + + + +0.01 +smooth + +8.5359567026699 +47.35034820511023 +428.92759133363273 +-204.0618896567207 +83.62239879754412 +0 +120 +absolute + + + +0.01 +smooth + +8.535956426325912 +47.350348067958514 +428.92760519295365 +-204.0580445290771 +83.63297002925331 +0 +120 +absolute + + + +0.01 +smooth + +8.535956152454085 +47.35034793184662 +428.9276190245285 +-204.0542165570925 +83.6434648924776 +0 +120 +absolute + + + +0.01 +smooth + +8.535955881079433 +47.35034779678796 +428.92763282498385 +-204.05040706459604 +83.65388234664893 +0 +120 +absolute + + + +0.01 +smooth + +8.535955612226973 +47.350347662795926 +428.9276465909462 +-204.04661737541682 +83.66422135119933 +0 +120 +absolute + + + +0.01 +smooth + +8.535955345182296 +47.35034752954375 +428.9276603693114 +-204.0428295981507 +83.67450654090948 +0 +120 +absolute + + + +0.01 +smooth + +8.5359550792317 +47.35034739670523 +428.927674207603 +-204.0390255771605 +83.68476249093553 +0 +120 +absolute + + + +0.01 +smooth + +8.535954814401228 +47.35034726429473 +428.9276881033881 +-204.03520623992551 +83.69498807127255 +0 +120 +absolute + + + +0.01 +smooth + +8.535954550716932 +47.35034713232652 +428.92770205423375 +-204.03137251392485 +83.70518215191558 +0 +120 +absolute + + + +0.01 +smooth + +8.535954288204863 +47.35034700081492 +428.92771605770724 +-204.02752532663777 +83.71534360285973 +0 +120 +absolute + + + +0.01 +smooth + +8.535954026891071 +47.350346869774256 +428.92773011137575 +-204.0236656055437 +83.72547129410003 +0 +120 +absolute + + + +0.01 +smooth + +8.535953766801608 +47.350346739218864 +428.92774421280666 +-204.01979427812174 +83.7355640956316 +0 +120 +absolute + + + +0.01 +smooth + +8.535953507962532 +47.35034660916306 +428.9277583595671 +-204.01591227185125 +83.74562087744951 +0 +120 +absolute + + + +0.01 +smooth + +8.535953250399878 +47.35034647962113 +428.9277725492244 +-204.01202051421143 +83.75564050954877 +0 +120 +absolute + + + +0.01 +smooth + +8.53595299413971 +47.35034635060742 +428.9277867793454 +-204.00811993268152 +83.76562186192452 +0 +120 +absolute + + + +0.01 +smooth + +8.535952739208076 +47.35034622213624 +428.92780104749767 +-204.00421145474078 +83.77556380457176 +0 +120 +absolute + + + +0.01 +smooth + +8.535952485631025 +47.35034609422192 +428.92781535124846 +-204.00029600786854 +83.78546520748566 +0 +120 +absolute + + + +0.01 +smooth + +8.535952233434607 +47.35034596687874 +428.9278296881646 +-203.99637451954393 +83.79532494066117 +0 +120 +absolute + + + +0.01 +smooth + +8.53595198264488 +47.35034584012108 +428.92784405581364 +-203.99244791724632 +83.80514187409347 +0 +120 +absolute + + + +0.01 +smooth + +8.535951733287886 +47.35034571396319 +428.92785845176286 +-203.9885171284549 +83.81491487777754 +0 +120 +absolute + + + +0.01 +smooth + +8.535951485389681 +47.35034558841944 +428.92787287357913 +-203.984583080649 +83.82464282170854 +0 +120 +absolute + + + +0.01 +smooth + +8.535951238976315 +47.350345463504134 +428.92788731883 +-203.98064670130776 +83.83432457588145 +0 +120 +absolute + + + +0.01 +smooth + +8.535950994073842 +47.35034533923158 +428.9279017850825 +-203.9767089179106 +83.84395901029143 +0 +120 +absolute + + + +0.01 +smooth + +8.535950750708304 +47.35034521561609 +428.9279162699038 +-203.9727706579365 +83.85354499493346 +0 +120 +absolute + + + +0.01 +smooth + +8.535950508905763 +47.350345092672 +428.92793077086117 +-203.96883284886505 +83.86308139980267 +0 +120 +absolute + + + +0.01 +smooth + +8.535950268692265 +47.35034497041363 +428.92794528552196 +-203.96489641817527 +83.87256709489414 +0 +120 +absolute + + + +0.01 +smooth + +8.535950030093856 +47.35034484885527 +428.9279598114534 +-203.96096229334654 +83.88200095020288 +0 +120 +absolute + + + +0.01 +smooth + +8.535949793136593 +47.35034472801127 +428.92797434622236 +-203.95703140185802 +83.89138183572402 +0 +120 +absolute + + + +0.01 +smooth + +8.53594955784653 +47.35034460789595 +428.92798888739657 +-203.9531046711891 +83.90070862145265 +0 +120 +absolute + + + +0.01 +smooth + +8.535949324249708 +47.35034448852359 +428.92800343254265 +-203.94918302881888 +83.90998017738374 +0 +120 +absolute + + + +0.01 +smooth + +8.535949092372187 +47.350344369908534 +428.92801797922823 +-203.9452674022267 +83.91919537351245 +0 +120 +absolute + + + +0.01 +smooth + +8.535948862240014 +47.350344252065106 +428.9280325250204 +-203.94135871889182 +83.92835307983384 +0 +120 +absolute + + + +0.01 +smooth + +8.53594863387924 +47.35034413500761 +428.9280470674865 +-203.93745790629345 +83.93745216634295 +0 +120 +absolute + + + +0.01 +smooth + +8.535948407315917 +47.35034401875036 +428.9280616041936 +-203.9335658919109 +83.94649150303485 +0 +120 +absolute + + + +0.01 +smooth + +8.535948182576096 +47.3503439033077 +428.928076132709 +-203.9296836032234 +83.95546995990463 +0 +120 +absolute + + + +0.01 +smooth + +8.535947959685826 +47.35034378869392 +428.92809065059976 +-203.9258119677102 +83.96438640694737 +0 +120 +absolute + + + +0.01 +smooth + +8.535947738671162 +47.35034367492336 +428.9281051554333 +-203.92195191285057 +83.97323971415813 +0 +120 +absolute + + + +0.01 +smooth + +8.53594751955815 +47.35034356201032 +428.9281196447767 +-203.91810436612377 +83.98202875153196 +0 +120 +absolute + + + +0.01 +smooth + +8.535947302372843 +47.35034344996914 +428.92813411619727 +-203.914270255009 +83.99075238906394 +0 +120 +absolute + + + +0.01 +smooth + +8.535947087141293 +47.3503433388141 +428.9281485672621 +-203.91045050698563 +83.99940949674917 +0 +120 +absolute + + + +0.01 +smooth + +8.535946873889552 +47.35034322855956 +428.92816299553846 +-203.9066460495328 +84.00799894458271 +0 +120 +absolute + + + +0.01 +smooth + +8.535946662643667 +47.350343119219815 +428.9281773985937 +-203.90285781012983 +84.01651960255961 +0 +120 +absolute + + + +0.01 +smooth + +8.535946453429693 +47.35034301080918 +428.9281917739948 +-203.89908671625597 +84.02497034067494 +0 +120 +absolute + + + +0.01 +smooth + +8.535946246273678 +47.35034290334198 +428.92820611930915 +-203.89533369539046 +84.03335002892379 +0 +120 +absolute + + + +0.01 +smooth + +8.535946041201676 +47.35034279683254 +428.9282204321039 +-203.89159967501251 +84.04165753730123 +0 +120 +absolute + + + +0.01 +smooth + +8.535945838239732 +47.350342691295175 +428.9282347099463 +-203.88788558260148 +84.04989173580232 +0 +120 +absolute + + + +0.01 +smooth + +8.535945637413905 +47.3503425867442 +428.9282489504035 +-203.88419234563656 +84.05805149442213 +0 +120 +absolute + + + +0.01 +smooth + +8.53594543875024 +47.35034248319393 +428.92826315104287 +-203.88052089159703 +84.06613568315575 +0 +120 +absolute + + + +0.01 +smooth + +8.53594524227479 +47.350342380658674 +428.92827730943134 +-203.8768721479621 +84.07414317199822 +0 +120 +absolute + + + +0.01 +smooth + +8.535945048013607 +47.350342279152784 +428.9282914231364 +-203.87324704221112 +84.08207283094464 +0 +120 +absolute + + + +0.01 +smooth + +8.53594485599274 +47.35034217869054 +428.9283054897252 +-203.86964650182327 +84.08992352999005 +0 +120 +absolute + + + +0.01 +smooth + +8.535944666238242 +47.35034207928627 +428.92831950676475 +-203.8660714542778 +84.09769413912956 +0 +120 +absolute + + + +0.01 +smooth + +8.53594447877616 +47.35034198095431 +428.92833347182255 +-203.86252282705402 +84.10538352835822 +0 +120 +absolute + + + +0.01 +smooth + +8.535944293632552 +47.35034188370897 +428.92834738246574 +-203.85900154763112 +84.11299056767108 +0 +120 +absolute + + + +0.01 +smooth + +8.535944110833464 +47.35034178756456 +428.92836123626137 +-203.8555085434884 +84.12051412706326 +0 +120 +absolute + + + +0.01 +smooth + +8.535943930404946 +47.350341692535395 +428.92837503077686 +-203.8520447421051 +84.12795307652979 +0 +120 +absolute + + + +0.01 +smooth + +8.535943751574038 +47.35034159824149 +428.9283888040602 +-203.8485948339852 +84.13533666294336 +0 +120 +absolute + + + +0.01 +smooth + +8.535943573568343 +47.350341504303444 +428.9284025942867 +-203.8451434465712 +84.14269407672687 +0 +120 +absolute + + + +0.01 +smooth + +8.53594339641477 +47.35034141073647 +428.92841639921454 +-203.84169141275035 +84.15002410320085 +0 +120 +absolute + + + +0.01 +smooth + +8.535943220140219 +47.350341317555795 +428.92843021660144 +-203.8382395654099 +84.15732552768581 +0 +120 +absolute + + + +0.01 +smooth + +8.535943044771598 +47.35034122477664 +428.92844404420583 +-203.83478873743707 +84.16459713550222 +0 +120 +absolute + + + +0.01 +smooth + +8.535942870335806 +47.350341132414236 +428.92845787978547 +-203.83133976171902 +84.17183771197065 +0 +120 +absolute + + + +0.01 +smooth + +8.535942696859747 +47.35034104048377 +428.92847172109845 +-203.82789347114294 +84.17904604241154 +0 +120 +absolute + + + +0.01 +smooth + +8.535942524370336 +47.35034094900053 +428.9284855659032 +-203.8244506985962 +84.18622091214547 +0 +120 +absolute + + + +0.01 +smooth + +8.53594235289447 +47.350340857979674 +428.9284994119572 +-203.82101227696583 +84.19336110649286 +0 +120 +absolute + + + +0.01 +smooth + +8.53594218245905 +47.350340767436435 +428.9285132570188 +-203.81757903913908 +84.20046541077424 +0 +120 +absolute + + + +0.01 +smooth + +8.53594201309099 +47.35034067738608 +428.9285270988461 +-203.81415181800335 +84.20753261031018 +0 +120 +absolute + + + +0.01 +smooth + +8.535941844817184 +47.35034058784375 +428.92854093519696 +-203.81073144644557 +84.21456149042109 +0 +120 +absolute + + + +0.01 +smooth + +8.535941677664542 +47.35034049882475 +428.92855476382954 +-203.80731875735316 +84.22155083642751 +0 +120 +absolute + + + +0.01 +smooth + +8.535941511659969 +47.35034041034425 +428.92856858250195 +-203.80391458361328 +84.22849943364996 +0 +120 +absolute + + + +0.01 +smooth + +8.53594134683037 +47.350340322417516 +428.92858238897225 +-203.8005197581132 +84.23540606740897 +0 +120 +absolute + + + +0.01 +smooth + +8.535941183202642 +47.35034023505971 +428.9285961809983 +-203.79713511374 +84.24226952302499 +0 +120 +absolute + + + +0.01 +smooth + +8.5359410208037 +47.35034014828609 +428.9286099563383 +-203.793761483381 +84.24908858581854 +0 +120 +absolute + + + +0.01 +smooth + +8.53594085966044 +47.350340062111876 +428.92862371275027 +-203.7903996999234 +84.25586204111013 +0 +120 +absolute + + + +0.01 +smooth + +8.535940699799772 +47.35033997655227 +428.9286374479922 +-203.78705059625437 +84.26258867422027 +0 +120 +absolute + + + +0.01 +smooth + +8.535940541248596 +47.35033989162252 +428.9286511598222 +-203.78371500526114 +84.26926727046944 +0 +120 +absolute + + + +0.01 +smooth + +8.53594038403382 +47.350339807337825 +428.92866484599824 +-203.78039375983101 +84.27589661517817 +0 +120 +absolute + + + +0.01 +smooth + +8.535940228182346 +47.35033972371343 +428.92867850427854 +-203.7770876928511 +84.28247549366698 +0 +120 +absolute + + + +0.01 +smooth + +8.535940073721079 +47.35033964076453 +428.928692132421 +-203.77379763720865 +84.28900269125634 +0 +120 +absolute + + + +0.01 +smooth + +8.535939920676924 +47.35033955850636 +428.92870572818373 +-203.77052442579088 +84.29547699326677 +0 +120 +absolute + + + +0.01 +smooth + +8.535939769076787 +47.35033947695417 +428.92871928932476 +-203.767268891485 +84.30189718501879 +0 +120 +absolute + + + +0.01 +smooth + +8.535939618947568 +47.350339396123125 +428.9287328136021 +-203.76403186717823 +84.30826205183287 +0 +120 +absolute + + + +0.01 +smooth + +8.535939470316174 +47.35033931602849 +428.92874629877394 +-203.7608141857578 +84.31457037902953 +0 +120 +absolute + + + +0.01 +smooth + +8.53593932320951 +47.350339236685464 +428.92875974259823 +-203.7576166801109 +84.32082095192929 +0 +120 +absolute + + + +0.01 +smooth + +8.53593917765448 +47.35033915810927 +428.928773142833 +-203.75444018312479 +84.32701255585265 +0 +120 +absolute + + + +0.01 +smooth + +8.535939033677987 +47.350339080315145 +428.9287864972363 +-203.7512855276866 +84.33314397612008 +0 +120 +absolute + + + +0.01 +smooth + +8.53593889130694 +47.3503390033183 +428.92879980356616 +-203.74815354668362 +84.33921399805214 +0 +120 +absolute + + + +0.01 +smooth + +8.535938750568235 +47.350338927133954 +428.92881305958076 +-203.74504507300307 +84.34522140696927 +0 +120 +absolute + + + +0.01 +smooth + +8.535938611488785 +47.35033885177733 +428.92882626303793 +-203.74196093953213 +84.35116498819204 +0 +120 +absolute + + + +0.01 +smooth + +8.535938474095488 +47.350338777263644 +428.92883941169595 +-203.738901979158 +84.35704352704093 +0 +120 +absolute + + + +0.01 +smooth + +8.535938338415255 +47.350338703608145 +428.92885250331267 +-203.7358690247679 +84.36285580883643 +0 +120 +absolute + + + +0.01 +smooth + +8.535938204474984 +47.35033863082602 +428.9288655356464 +-203.7328629092491 +84.36860061889905 +0 +120 +absolute + + + +0.01 +smooth + +8.535938072301581 +47.350338558932506 +428.9288785064549 +-203.72988446548874 +84.37427674254931 +0 +120 +absolute + + + +0.01 +smooth + +8.535937941921954 +47.350338487942835 +428.92889141349644 +-203.72693452637412 +84.3798829651077 +0 +120 +absolute + + + +0.01 +smooth + +8.535937813363002 +47.35033841787221 +428.9289042545289 +-203.72401392479242 +84.38541807189472 +0 +120 +absolute + + + +0.01 +smooth + +8.535937686651636 +47.35033834873585 +428.9289170273105 +-203.7211234936308 +84.3908808482309 +0 +120 +absolute + + + +0.01 +smooth + +8.535937561814753 +47.350338280548996 +428.9289297295991 +-203.71826406577654 +84.39627007943673 +0 +120 +absolute + + + +0.01 +smooth + +8.535937438879262 +47.350338213326864 +428.9289423591528 +-203.7154364741168 +84.40158455083272 +0 +120 +absolute + + + +0.01 +smooth + +8.535937317872067 +47.35033814708466 +428.9289549137298 +-203.71264155153892 +84.40682304773932 +0 +120 +absolute + + + +0.01 +smooth + +8.535937198820072 +47.350338081837634 +428.92896739108795 +-203.70988013092997 +84.41198435547714 +0 +120 +absolute + + + +0.01 +smooth + +8.53593708175018 +47.350338017600976 +428.92897978898543 +-203.70715304517725 +84.41706725936662 +0 +120 +absolute + + + +0.01 +smooth + +8.535936966689299 +47.350337954389914 +428.9289921051803 +-203.70446112716786 +84.42207054472826 +0 +120 +absolute + + + +0.01 +smooth + +8.535936853664328 +47.350337892219684 +428.92900433743057 +-203.7018052097892 +84.42699299688257 +0 +120 +absolute + + + +0.01 +smooth + +8.535936742702177 +47.350337831105506 +428.9290164834942 +-203.69918612592835 +84.43183340115009 +0 +120 +absolute + + + +0.01 +smooth + +8.535936633829747 +47.3503377710626 +428.92902854112936 +-203.6966047084726 +84.43659054285125 +0 +120 +absolute + + + +0.01 +smooth + +8.535936527073943 +47.350337712106175 +428.9290405080941 +-203.6940617903091 +84.44126320730663 +0 +120 +absolute + + + +0.01 +smooth + +8.53593642246167 +47.35033765425147 +428.9290523821463 +-203.69155820432508 +84.44585017983671 +0 +120 +absolute + + + +0.01 +smooth + +8.535936319171096 +47.35033759706529 +428.9290642080102 +-203.68907607704224 +84.45038541755589 +0 +120 +absolute + + + +0.01 +smooth + +8.535936216380339 +47.35033754011477 +428.9290760301518 +-203.68659753664056 +84.45490284615192 +0 +120 +absolute + + + +0.01 +smooth + +8.535936114116229 +47.35033748341563 +428.9290878459429 +-203.68412341849466 +84.45940120380536 +0 +120 +absolute + + + +0.01 +smooth + +8.535936012405587 +47.35033742698348 +428.9290996527543 +-203.68165455797913 +84.46387922869663 +0 +120 +absolute + + + +0.01 +smooth + +8.53593591127525 +47.350337370834026 +428.9291114479576 +-203.6791917904684 +84.46833565900627 +0 +120 +absolute + + + +0.01 +smooth + +8.535935810752038 +47.35033731498297 +428.92912322892425 +-203.67673595133726 +84.47276923291481 +0 +120 +absolute + + + +0.01 +smooth + +8.53593571086278 +47.350337259445965 +428.92913499302546 +-203.67428787596012 +84.47717868860273 +0 +120 +absolute + + + +0.01 +smooth + +8.535935611634311 +47.35033720423872 +428.9291467376328 +-203.67184839971176 +84.48156276425058 +0 +120 +absolute + + + +0.01 +smooth + +8.535935513093452 +47.350337149376884 +428.9291584601174 +-203.66941835796658 +84.48592019803883 +0 +120 +absolute + + + +0.01 +smooth + +8.535935415267032 +47.35033709487614 +428.9291701578506 +-203.6669985860992 +84.49024972814797 +0 +120 +absolute + + + +0.01 +smooth + +8.53593531818188 +47.35033704075217 +428.92918182820404 +-203.6645899194843 +84.49455009275854 +0 +120 +absolute + + + +0.01 +smooth + +8.535935221864822 +47.3503369870207 +428.92919346854893 +-203.66219319349648 +84.49882003005104 +0 +120 +absolute + + + +0.01 +smooth + +8.535935126342686 +47.350336933697314 +428.92920507625644 +-203.65980924351013 +84.50305827820598 +0 +120 +absolute + + + +0.01 +smooth + +8.535935031642303 +47.350336880797784 +428.92921664869823 +-203.65743890490006 +84.50726357540385 +0 +120 +absolute + + + +0.01 +smooth + +8.535934937790497 +47.35033682833774 +428.9292281832456 +-203.65508301304072 +84.51143465982517 +0 +120 +absolute + + + +0.01 +smooth + +8.535934844814099 +47.350336776332874 +428.9292396772698 +-203.65274240330683 +84.51557026965047 +0 +120 +absolute + + + +0.01 +smooth + +8.535934752739934 +47.35033672479886 +428.929251128142 +-203.65041791107274 +84.51966914306018 +0 +120 +absolute + + + +0.01 +smooth + +8.535934661594835 +47.3503366737514 +428.9292625332342 +-203.64811037171333 +84.52373001823493 +0 +120 +absolute + + + +0.01 +smooth + +8.535934571405623 +47.35033662320613 +428.92927388991717 +-203.64582062060296 +84.52775163335512 +0 +120 +absolute + + + +0.01 +smooth + +8.535934482199128 +47.350336573178765 +428.9292851955624 +-203.6435494931163 +84.53173272660128 +0 +120 +absolute + + + +0.01 +smooth + +8.53593439400218 +47.35033652368498 +428.9292964475414 +-203.64129782462794 +84.53567203615395 +0 +120 +absolute + + + +0.01 +smooth + +8.535934306841604 +47.350336474740445 +428.92930764322546 +-203.63906645051253 +84.53956830019361 +0 +120 +absolute + + + +0.01 +smooth + +8.53593422074423 +47.35033642636084 +428.9293187799858 +-203.63685620614447 +84.54342025690076 +0 +120 +absolute + + + +0.01 +smooth + +8.53593413573689 +47.35033637856186 +428.92932985519406 +-203.63466792689857 +84.54722664445598 +0 +120 +absolute + + + +0.01 +smooth + +8.535934051846402 +47.35033633135916 +428.9293408662214 +-203.63250244814927 +84.55098620103965 +0 +120 +absolute + + + +0.01 +smooth + +8.535933969099599 +47.350336284768446 +428.92935181043924 +-203.63036060527116 +84.55469766483239 +0 +120 +absolute + + + +0.01 +smooth + +8.53593388752331 +47.350336238805376 +428.9293626852189 +-203.62824323363887 +84.55835977401466 +0 +120 +absolute + + + +0.01 +smooth + +8.535933807144362 +47.35033619348563 +428.9293734879318 +-203.62615116862702 +84.56197126676696 +0 +120 +absolute + + + +0.01 +smooth + +8.535933727989581 +47.350336148824894 +428.9293842159492 +-203.6240852456101 +84.56553088126981 +0 +120 +absolute + + + +0.01 +smooth + +8.535933650085799 +47.35033610483887 +428.9293948666426 +-203.6220462999628 +84.5690373557037 +0 +120 +absolute + + + +0.01 +smooth + +8.535933573459838 +47.3503360615432 +428.9294054373833 +-203.62003516705963 +84.57248942824917 +0 +120 +absolute + + + +0.01 +smooth + +8.535933498138531 +47.350336018953584 +428.9294159255426 +-203.6180526822752 +84.5758858370867 +0 +120 +absolute + + + +0.01 +smooth + +8.535933424148702 +47.350335977085685 +428.929426328492 +-203.61609968098412 +84.5792253203968 +0 +120 +absolute + + + +0.01 +smooth + +8.535933351517183 +47.350335935955215 +428.92943664360274 +-203.61417699856096 +84.58250661636 +0 +120 +absolute + + + +0.01 +smooth + +8.535933280270799 +47.350335895577814 +428.92944686824615 +-203.61228547038033 +84.58572846315678 +0 +120 +absolute + + + +0.01 +smooth + +8.535933210436376 +47.350335855969185 +428.92945699979373 +-203.61042593181674 +84.58888959896765 +0 +120 +absolute + + + +0.01 +smooth + +8.535933142040747 +47.35033581714501 +428.92946703561677 +-203.60859921824482 +84.59198876197314 +0 +120 +absolute + + + +0.01 +smooth + +8.535933075110735 +47.350335779120954 +428.9294769730866 +-203.6068061650392 +84.59502469035372 +0 +120 +absolute + + + +0.01 +smooth + +8.53593300967317 +47.3503357419127 +428.92948680957466 +-203.60504760757442 +84.59799612228994 +0 +120 +absolute + + + +0.01 +smooth + +8.535932945754881 +47.35033570553594 +428.92949654245217 +-203.60332438122504 +84.60090179596229 +0 +120 +absolute + + + +0.01 +smooth + +8.535932883382692 +47.350335670006345 +428.9295061690907 +-203.60163732136573 +84.60374044955125 +0 +120 +absolute + + + +0.01 +smooth + +8.535932822583437 +47.35033563533959 +428.92951568686146 +-203.599987263371 +84.60651082123736 +0 +120 +absolute + + + +0.01 +smooth + +8.535932763383938 +47.350335601551365 +428.9295250931358 +-203.5983750426155 +84.60921164920111 +0 +120 +absolute + + + +0.01 +smooth + +8.535932705811025 +47.35033556865733 +428.92953438528514 +-203.59680149447368 +84.61184167162301 +0 +120 +absolute + + + +0.01 +smooth + +8.535932649891526 +47.3503355366732 +428.9295435606808 +-203.59526745432032 +84.61439962668358 +0 +120 +absolute + + + +0.01 +smooth + +8.53593259565227 +47.350335505614616 +428.92955261669425 +-203.5937737575299 +84.61688425256332 +0 +120 +absolute + + + +0.01 +smooth + +8.535932543120081 +47.350335475497275 +428.9295615506967 +-203.592321239477 +84.61929428744273 +0 +120 +absolute + + + +0.01 +smooth + +8.535932492321791 +47.35033544633686 +428.9295703600596 +-203.59091073553626 +84.62162846950233 +0 +120 +absolute + + + +0.01 +smooth + +8.535932443284226 +47.350335418149044 +428.9295790421543 +-203.5895430810822 +84.6238855369226 +0 +120 +absolute + + + +0.01 +smooth + +8.535932396034212 +47.35033539094952 +428.92958759435214 +-203.58821911148948 +84.62606422788409 +0 +120 +absolute + + + +0.01 +smooth + +8.535932350598582 +47.35033536475393 +428.9295960140245 +-203.5869396621326 +84.62816328056725 +0 +120 +absolute + + + +0.01 +smooth + +8.535932306167469 +47.3503353391082 +428.9296043731665 +-203.58568363981 +84.63021884994492 +0 +120 +absolute + + + +0.01 +smooth + +8.535932261927469 +47.35033531355637 +428.9296127426659 +-203.58442987372993 +84.63226722997922 +0 +120 +absolute + + + +0.01 +smooth + +8.53593221790011 +47.350335288111474 +428.92962111823306 +-203.5831790828818 +84.6343073673348 +0 +120 +absolute + + + +0.01 +smooth + +8.53593217410691 +47.35033526278647 +428.9296294955784 +-203.581931986255 +84.63633820867628 +0 +120 +absolute + + + +0.01 +smooth + +8.535932130569396 +47.350335237594386 +428.92963787041236 +-203.58068930283918 +84.63835870066822 +0 +120 +absolute + + + +0.01 +smooth + +8.535932087309085 +47.35033521254819 +428.92964623844523 +-203.5794517516236 +84.64036778997523 +0 +120 +absolute + + + +0.01 +smooth + +8.535932044347499 +47.35033518766087 +428.9296545953874 +-203.57822005159778 +84.64236442326197 +0 +120 +absolute + + + +0.01 +smooth + +8.535932001706163 +47.35033516294546 +428.9296629369495 +-203.57699492175118 +84.644347547193 +0 +120 +absolute + + + +0.01 +smooth + +8.535931959406598 +47.350335138414906 +428.9296712588416 +-203.5757770810732 +84.64631610843294 +0 +120 +absolute + + + +0.01 +smooth + +8.535931917470323 +47.35033511408223 +428.9296795567744 +-203.5745672485533 +84.64826905364637 +0 +120 +absolute + + + +0.01 +smooth + +8.53593187591887 +47.35033508996044 +428.92968782645835 +-203.57336614318106 +84.650205329498 +0 +120 +absolute + + + +0.01 +smooth + +8.53593183477375 +47.35033506606248 +428.9296960636034 +-203.57217448394567 +84.65212388265228 +0 +120 +absolute + + + +0.01 +smooth + +8.535931794056491 +47.350335042401376 +428.9297042639203 +-203.5709929898368 +84.65402365977394 +0 +120 +absolute + + + +0.01 +smooth + +8.535931753788615 +47.35033501899014 +428.9297124231194 +-203.56982237984383 +84.65590360752755 +0 +120 +absolute + + + +0.01 +smooth + +8.535931713991644 +47.35033499584175 +428.92972053691125 +-203.5686633729563 +84.65776267257775 +0 +120 +absolute + + + +0.01 +smooth + +8.535931674687097 +47.35033497296916 +428.9297286010058 +-203.5675166881634 +84.65959980158904 +0 +120 +absolute + + + +0.01 +smooth + +8.5359316358965 +47.350334950385424 +428.92973661111387 +-203.56638304445482 +84.66141394122614 +0 +120 +absolute + + + +0.01 +smooth + +8.535931597641373 +47.35033492810351 +428.92974456294576 +-203.56526316082 +84.66320403815362 +0 +120 +absolute + + + +0.01 +smooth + +8.535931559943238 +47.35033490613641 +428.92975245221163 +-203.5641577562482 +84.66496903903608 +0 +120 +absolute + + + +0.01 +smooth + +8.535931522823617 +47.350334884497116 +428.92976027462214 +-203.56306754972903 +84.66670789053813 +0 +120 +absolute + + + +0.01 +smooth + +8.535931486304033 +47.35033486319863 +428.92976802588765 +-203.56199326025188 +84.66841953932439 +0 +120 +absolute + + + +0.01 +smooth + +8.53593145040601 +47.350334842253936 +428.9297757017185 +-203.56093560680623 +84.67010293205945 +0 +120 +absolute + + + +0.01 +smooth + +8.535931415151067 +47.35033482167605 +428.9297832978251 +-203.55989530838156 +84.67175701540795 +0 +120 +absolute + + + +0.01 +smooth + +8.535931380560728 +47.35033480147794 +428.92979080991785 +-203.5588730839672 +84.67338073603443 +0 +120 +absolute + + + +0.01 +smooth + +8.535931346656513 +47.35033478167261 +428.9297982337072 +-203.55786965255268 +84.67497304060358 +0 +120 +absolute + + + +0.01 +smooth + +8.535931313459947 +47.35033476227306 +428.9298055649035 +-203.55688573312744 +84.67653287577994 +0 +120 +absolute + + + +0.01 +smooth + +8.535931280992552 +47.35033474329227 +428.9298127992172 +-203.55592204468095 +84.67805918822813 +0 +120 +absolute + + + +0.01 +smooth + +8.535931249275848 +47.35033472474324 +428.9298199323585 +-203.55497930620263 +84.67955092461281 +0 +120 +absolute + + + +0.01 +smooth + +8.535931218331356 +47.350334706638975 +428.92982696003804 +-203.55405823668195 +84.68100703159855 +0 +120 +absolute + + + +0.01 +smooth + +8.535931188180601 +47.35033468899245 +428.92983387796613 +-203.55315955510832 +84.68242645584994 +0 +120 +absolute + + + +0.01 +smooth + +8.535931158845106 +47.35033467181668 +428.9298406818532 +-203.55228398047123 +84.68380814403162 +0 +120 +absolute + + + +0.01 +smooth + +8.535931130346391 +47.35033465512464 +428.9298473674096 +-203.5514322317601 +84.68515104280817 +0 +120 +absolute + + + +0.01 +smooth + +8.535931102705979 +47.350334638929326 +428.92985393034576 +-203.55060502796437 +84.68645409884421 +0 +120 +absolute + + + +0.01 +smooth + +8.53593107594539 +47.35033462324375 +428.929860366372 +-203.54980308807353 +84.68771625880434 +0 +120 +absolute + + + +0.01 +smooth + +8.53593105008615 +47.350334608080885 +428.92986667119885 +-203.54902713107703 +84.6889364693532 +0 +120 +absolute + + + +0.01 +smooth + +8.535931025149779 +47.35033459345374 +428.92987284053663 +-203.5482778759643 +84.69011367715535 +0 +120 +absolute + + + +0.01 +smooth + +8.535931001157797 +47.350334579375286 +428.9298788700958 +-203.5475560417247 +84.69124682887542 +0 +120 +absolute + + + +0.01 +smooth + +8.53593097813173 +47.350334565858546 +428.9298847555866 +-203.54686234734783 +84.69233487117802 +0 +120 +absolute + + + +0.01 +smooth + +8.5359309560931 +47.3503345529165 +428.92989049271966 +-203.54619751182304 +84.69337675072777 +0 +120 +absolute + + + +0.01 +smooth + +8.535930935063426 +47.35033454056214 +428.9298960772052 +-203.54556225413987 +84.69437141418925 +0 +120 +absolute + + + +0.01 +smooth + +8.535930915064231 +47.35033452880846 +428.9299015047536 +-203.54495729328767 +84.69531780822707 +0 +120 +absolute + + + +0.01 +smooth + +8.535930896117039 +47.35033451766846 +428.9299067710755 +-203.5443833482559 +84.69621487950586 +0 +120 +absolute + + + +0.01 +smooth + +8.53593087824337 +47.350334507155125 +428.929911871881 +-203.54384113803408 +84.69706157469021 +0 +120 +absolute + + + +0.01 +smooth + +8.535930861464749 +47.350334497281466 +428.9299168028807 +-203.5433313816116 +84.69785684044473 +0 +120 +absolute + + + +0.01 +smooth + +8.535930845802696 +47.35033448806045 +428.92992155978493 +-203.5428547979779 +84.69859962343402 +0 +120 +absolute + + + +0.01 +smooth + +8.535930831278733 +47.350334479505094 +428.92992613830404 +-203.54241210612247 +84.69928887032272 +0 +120 +absolute + + + +0.01 +smooth + +8.535930817914384 +47.35033447162838 +428.9299305341486 +-203.54200402503474 +84.6999235277754 +0 +120 +absolute + + + +0.01 +smooth + +8.535930805731168 +47.35033446444331 +428.92993474302875 +-203.54163127370418 +84.70050254245669 +0 +120 +absolute + + + +0.01 +smooth + +8.53593079475061 +47.350334457962866 +428.9299387606551 +-203.5412945711202 +84.70102486103117 +0 +120 +absolute + + + +0.01 +smooth + +8.535930784994232 +47.35033445220006 +428.92994258273797 +-203.54099463627222 +84.70148943016348 +0 +120 +absolute + + + +0.01 +smooth + +8.535930776483553 +47.35033444716786 +428.9299462049877 +-203.5407321881498 +84.70189519651821 +0 +120 +absolute + + + +0.01 +smooth + +8.535930768646685 +47.35033444253086 +428.92994972434343 +-203.54049001305893 +84.70226915551581 +0 +120 +absolute + + + +0.01 +smooth + +8.535930760899156 +47.35033443794608 +428.9299532389184 +-203.54025047609363 +84.70263891836036 +0 +120 +absolute + + + +0.01 +smooth + +8.535930753243635 +47.35033443341511 +428.9299567461844 +-203.54001366442546 +84.703004355392 +0 +120 +absolute + + + +0.01 +smooth + +8.53593074568277 +47.3503344289395 +428.92996024361275 +-203.5397796652257 +84.7033653369508 +0 +120 +absolute + + + +0.01 +smooth + +8.53593073821923 +47.3503344245209 +428.92996372867526 +-203.53954856566577 +84.70372173337682 +0 +120 +absolute + + + +0.01 +smooth + +8.535930730855673 +47.3503344201609 +428.9299671988434 +-203.53932045291705 +84.70407341501021 +0 +120 +absolute + + + +0.01 +smooth + +8.53593072359476 +47.350334415861106 +428.929970651589 +-203.5390954141512 +84.70442025219106 +0 +120 +absolute + + + +0.01 +smooth + +8.535930716439154 +47.350334411623116 +428.9299740843838 +-203.5388735365395 +84.70476211525946 +0 +120 +absolute + + + +0.01 +smooth + +8.535930709391508 +47.35033440744852 +428.92997749469896 +-203.53865490725332 +84.7050988745555 +0 +120 +absolute + + + +0.01 +smooth + +8.535930702454491 +47.35033440333893 +428.92998088000644 +-203.53843961346408 +84.70543040041927 +0 +120 +absolute + + + +0.01 +smooth + +8.535930695630757 +47.35033439929596 +428.9299842377778 +-203.5382277423432 +84.70575656319087 +0 +120 +absolute + + + +0.01 +smooth + +8.535930688922972 +47.35033439532119 +428.9299875654847 +-203.53801938106224 +84.70607723321041 +0 +120 +absolute + + + +0.01 +smooth + +8.53593068233379 +47.350334391416204 +428.9299908605986 +-203.53781461679242 +84.70639228081797 +0 +120 +absolute + + + +0.01 +smooth + +8.535930675865878 +47.35033438758267 +428.9299941205914 +-203.53761353670538 +84.70670157635367 +0 +120 +absolute + + + +0.01 +smooth + +8.535930669521893 +47.35033438382212 +428.9299973429345 +-203.53741622797236 +84.70700499015759 +0 +120 +absolute + + + +0.01 +smooth + +8.535930663304496 +47.350334380136175 +428.9300005250997 +-203.5372227777648 +84.70730239256982 +0 +120 +absolute + + + +0.01 +smooth + +8.535930657216344 +47.35033437652645 +428.93000366455834 +-203.53703327325422 +84.70759365393043 +0 +120 +absolute + + + +0.01 +smooth + +8.535930651260106 +47.350334372994546 +428.9300067587825 +-203.536847801612 +84.70787864457961 +0 +120 +absolute + + + +0.01 +smooth + +8.535930645438434 +47.35033436954204 +428.93000980524334 +-203.5366664500095 +84.70815723485735 +0 +120 +absolute + + + +0.01 +smooth + +8.535930639753994 +47.350334366170564 +428.9300128014128 +-203.53648930561823 +84.70842929510384 +0 +120 +absolute + + + +0.01 +smooth + +8.535930634209441 +47.35033436288168 +428.9300157447623 +-203.53631645560952 +84.7086946956591 +0 +120 +absolute + + + +0.01 +smooth + +8.535930628807442 +47.350334359677056 +428.9300186327637 +-203.5361479871549 +84.70895330686326 +0 +120 +absolute + + + +0.01 +smooth + +8.53593062355065 +47.35033435655821 +428.9300214628882 +-203.53598398742565 +84.7092049990564 +0 +120 +absolute + + + +0.01 +smooth + +8.535930618441732 +47.350334353526804 +428.9300242326081 +-203.53582454359335 +84.70944964257866 +0 +120 +absolute + + + +0.01 +smooth + +8.535930613483346 +47.35033435058442 +428.9300269393944 +-203.53566974282927 +84.70968710777008 +0 +120 +absolute + + + +0.01 +smooth + +8.535930608678154 +47.350334347732655 +428.930029580719 +-203.53551967230496 +84.7099172649708 +0 +120 +absolute + + + +0.01 +smooth + +8.535930604028811 +47.3503343449731 +428.9300321540535 +-203.53537441919175 +84.71013998452088 +0 +120 +absolute + + + +0.01 +smooth + +8.535930599537984 +47.350334342307384 +428.9300346568696 +-203.5352340706611 +84.71035513676043 +0 +120 +absolute + + + +0.01 +smooth + +8.53593059520833 +47.350334339737095 +428.9300370866388 +-203.53509871388445 +84.71056259202959 +0 +120 +absolute + + + +0.01 +smooth + +8.535930591042508 +47.350334337263824 +428.93003944083273 +-203.53496843603318 +84.71076222066839 +0 +120 +absolute + + + +0.01 +smooth + +8.535930587043184 +47.35033433488918 +428.9300417169231 +-203.5348433242787 +84.71095389301695 +0 +120 +absolute + + + +0.01 +smooth + +8.535930583213013 +47.35033433261477 +428.93004391238145 +-203.5347234657925 +84.71113747941538 +0 +120 +absolute + + + +0.01 +smooth + +8.535930579554659 +47.35033433044219 +428.9300460246794 +-203.5346089477459 +84.71131285020377 +0 +120 +absolute + + + +0.01 +smooth + +8.53593057607078 +47.35033432837304 +428.93004805128874 +-203.53449985731044 +84.7114798757222 +0 +120 +absolute + + + +0.01 +smooth + +8.535930572764038 +47.35033432640893 +428.9300499896809 +-203.53439628165745 +84.7116384263108 +0 +120 +absolute + + + +0.01 +smooth + +8.535930569637094 +47.35033432455144 +428.93005183732765 +-203.53429830795835 +84.71178837230964 +0 +120 +absolute + + + +0.01 +smooth + +8.535930566692604 +47.35033432280218 +428.9300535917006 +-203.53420602338463 +84.71192958405882 +0 +120 +absolute + + + +0.01 +smooth + +8.535930563933235 +47.35033432116277 +428.9300552502712 +-203.53411951510768 +84.71206193189843 +0 +120 +absolute + + + +0.01 +smooth + +8.535930561361642 +47.35033431963479 +428.9300568105113 +-203.5340388702989 +84.7121852861686 +0 +120 +absolute + + + +0.01 +smooth + +8.535930558980489 +47.35033431821984 +428.93005826989236 +-203.53396417612973 +84.7122995172094 +0 +120 +absolute + + + +0.01 +smooth + +8.535930556792433 +47.35033431691953 +428.9300596258861 +-203.53389551977156 +84.71240449536091 +0 +120 +absolute + + + +0.01 +smooth + +8.53593055480014 +47.350334315735466 +428.93006087596416 +-203.53383298839583 +84.71250009096326 +0 +120 +absolute + + + +0.01 +smooth + +8.535930553006265 +47.350334314669254 +428.93006201759806 +-203.53377666917402 +84.71258617435652 +0 +120 +absolute + + + +0.01 +smooth + +8.53593055141347 +47.35033431372247 +428.9300630482596 +-203.53372664927744 +84.71266261588082 +0 +120 +absolute + + + +0.01 +smooth + +8.535930550024418 +47.35033431289673 +428.93006396542023 +-203.5336830158776 +84.71272928587624 +0 +120 +absolute + + + +0.01 +smooth + +8.535930548841765 +47.35033431219364 +428.93006476655165 +-203.5336458561459 +84.71278605468284 +0 +120 +absolute + + + +0.01 +smooth + +8.535930547868174 +47.35033431161478 +428.9300654491255 +-203.53361525725376 +84.71283279264077 +0 +120 +absolute + + + +0.01 +smooth + +8.535930547106307 +47.35033431116178 +428.9300660106134 +-203.5335913063725 +84.71286937009009 +0 +120 +absolute + + + +0.01 +smooth + +8.535930546558822 +47.350334310836224 +428.93006644848697 +-203.5335740906737 +84.71289565737092 +0 +120 +absolute + + + +0.01 +smooth + +8.535930546228379 +47.35033431063971 +428.9300667602177 +-203.53356369732873 +84.71291152482335 +0 +120 +absolute + + + +0.01 +smooth + +8.53593054611764 +47.35033431057386 +428.93006694327755 +-203.533560213509 +84.71291684278746 +0 +120 +absolute + + + + + + diff --git a/parameter-learning_nd_disc/kmls/saffa3.kml b/parameter-learning_nd_disc/kmls/saffa3.kml new file mode 100755 index 0000000..733e45e --- /dev/null +++ b/parameter-learning_nd_disc/kmls/saffa3.kml @@ -0,0 +1,58154 @@ + + + + + +Tour + + +0.01 +smooth + +8.536348154452593 +47.34969652396877 +412.35755233845094 +14.0290626583571 +88.46603184312883 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154447591 +47.34969652396343 +412.3576835028597 +14.029066779312414 +88.46603246410731 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154432682 +47.34969652394751 +412.35792412579656 +14.029079092690733 +88.46603431955683 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154407975 +47.349696523921075 +412.35827261814757 +14.029099524260616 +88.46603739824837 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154373593 +47.3496965238843 +412.35872739079906 +14.029127999790639 +88.4660416889531 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154329664 +47.34969652383721 +412.3592868546367 +14.029164445049345 +88.46604718044196 +0 +120 +absolute + + + +0.01 +smooth + +8.5363481542763 +47.349696523779954 +412.35994942054697 +14.02920878580531 +88.46605386148607 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815421363 +47.349696523712595 +412.36071349941597 +14.02926094782709 +88.46606172085649 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154141773 +47.349696523635295 +412.36157750212965 +14.029320856883258 +88.46607074732427 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154060848 +47.34969652354811 +412.36253983957414 +14.029388438742364 +88.46608092966042 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153970977 +47.34969652345118 +412.3635989226355 +14.029463619172978 +88.46609225663605 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153872282 +47.34969652334457 +412.36475316220003 +14.02954632394366 +88.46610471702218 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153764886 +47.3496965232284 +412.36600096915373 +14.029636478822976 +88.4661182995899 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153648902 +47.34969652310278 +412.36734075438267 +14.029734009579483 +88.46613299311022 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153524465 +47.34969652296782 +412.3687709287731 +14.029838841981752 +88.46614878635425 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153391689 +47.34969652282361 +412.3702899032111 +14.029950901798344 +88.46616566809305 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153250692 +47.349696522670264 +412.37189608858256 +14.030070114797814 +88.46618362709762 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153101597 +47.349696522507884 +412.3735878957739 +14.030196406748733 +88.46620265213902 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815294453 +47.34969652233656 +412.3753637356711 +14.030329703419664 +88.4662227319884 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815277961 +47.349696522156414 +412.3772220191602 +14.03046993057916 +88.46624385541668 +0 +120 +absolute + + + +0.01 +smooth + +8.536348152606953 +47.34969652196753 +412.3791611571273 +14.03061701399579 +88.46626601119502 +0 +120 +absolute + + + +0.01 +smooth + +8.536348152426685 +47.34969652177002 +412.3811795604586 +14.030770879438121 +88.4662891880944 +0 +120 +absolute + + + +0.01 +smooth + +8.536348152238926 +47.34969652156401 +412.38327564004015 +14.030931452674707 +88.46631337488593 +0 +120 +absolute + + + +0.01 +smooth + +8.536348152043798 +47.34969652134956 +412.3854478067582 +14.03109865947412 +88.46633856034065 +0 +120 +absolute + + + +0.01 +smooth + +8.536348151841421 +47.349696521126816 +412.3876944714987 +14.031272425604918 +88.46636473322961 +0 +120 +absolute + + + +0.01 +smooth + +8.536348151631918 +47.349696520895854 +412.39001404514784 +14.031452676835663 +88.46639188232386 +0 +120 +absolute + + + +0.01 +smooth + +8.536348151415412 +47.34969652065679 +412.39240493859177 +14.03163933893492 +88.46641999639449 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815119202 +47.34969652040972 +412.3948655627164 +14.031832337671247 +88.46644906421253 +0 +120 +absolute + + + +0.01 +smooth + +8.536348150961867 +47.34969652015477 +412.3973943284082 +14.032031598813214 +88.46647907454906 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815072507 +47.34969651989202 +412.399989646553 +14.032237048129387 +88.46651001617512 +0 +120 +absolute + + + +0.01 +smooth + +8.536348150481752 +47.349696519621574 +412.40264992803685 +14.032448611388313 +88.46654187786172 +0 +120 +absolute + + + +0.01 +smooth + +8.536348150232035 +47.34969651934355 +412.40537358374604 +14.032666214358565 +88.46657464837999 +0 +120 +absolute + + + +0.01 +smooth + +8.536348149976039 +47.34969651905804 +412.4081590245666 +14.032889782808704 +88.46660831650092 +0 +120 +absolute + + + +0.01 +smooth + +8.536348149713888 +47.34969651876515 +412.4110046613848 +14.033119242507297 +88.46664287099561 +0 +120 +absolute + + + +0.01 +smooth + +8.5363481494457 +47.34969651846498 +412.41390890508654 +14.0333545192229 +88.46667830063514 +0 +120 +absolute + + + +0.01 +smooth + +8.536348149171596 +47.34969651815766 +412.416870166558 +14.03359553872408 +88.4667145941905 +0 +120 +absolute + + + +0.01 +smooth + +8.536348148891701 +47.34969651784325 +412.4198868566853 +14.033842226779399 +88.46675174043278 +0 +120 +absolute + + + +0.01 +smooth + +8.536348148606134 +47.34969651752188 +412.42295738635454 +14.034094509157418 +88.46678972813304 +0 +120 +absolute + + + +0.01 +smooth + +8.536348148315017 +47.349696517193664 +412.42608016645187 +14.034352311626701 +88.46682854606235 +0 +120 +absolute + + + +0.01 +smooth + +8.536348148018469 +47.349696516858685 +412.42925360786336 +14.034615559955814 +88.46686818299172 +0 +120 +absolute + + + +0.01 +smooth + +8.536348147716613 +47.34969651651706 +412.43247612147513 +14.034884179913314 +88.46690862769223 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814740957 +47.349696516168876 +412.43574611817326 +14.03515809726777 +88.46694986893495 +0 +120 +absolute + + + +0.01 +smooth + +8.536348147097462 +47.34969651581425 +412.43906200884396 +14.035437237787738 +88.46699189549093 +0 +120 +absolute + + + +0.01 +smooth + +8.536348146780409 +47.34969651545328 +412.4424222043732 +14.035721527241787 +88.46703469613122 +0 +120 +absolute + + + +0.01 +smooth + +8.536348146458531 +47.34969651508608 +412.44582511564727 +14.036010891398472 +88.46707825962687 +0 +120 +absolute + + + +0.01 +smooth + +8.536348146131953 +47.34969651471274 +412.4492691535521 +14.036305256026365 +88.46712257474894 +0 +120 +absolute + + + +0.01 +smooth + +8.536348145800792 +47.349696514333374 +412.45275272897385 +14.036604546894022 +88.46716763026849 +0 +120 +absolute + + + +0.01 +smooth + +8.536348145465173 +47.34969651394809 +412.4562742527987 +14.036908689770009 +88.46721341495657 +0 +120 +absolute + + + +0.01 +smooth + +8.536348145125215 +47.34969651355697 +412.45983213591273 +14.03721761042289 +88.46725991758424 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814478104 +47.34969651316014 +412.4634247892021 +14.037531234621222 +88.46730712692256 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814443277 +47.34969651275769 +412.46705062355284 +14.037849488133574 +88.46735503174258 +0 +120 +absolute + + + +0.01 +smooth + +8.536348144080524 +47.34969651234974 +412.470708049851 +14.038172296728506 +88.46740362081539 +0 +120 +absolute + + + +0.01 +smooth + +8.536348143724425 +47.349696511936365 +412.47439547898284 +14.038499586174582 +88.46745288291197 +0 +120 +absolute + + + +0.01 +smooth + +8.536348143364595 +47.34969651151769 +412.4781113218344 +14.038831282240363 +88.46750280680345 +0 +120 +absolute + + + +0.01 +smooth + +8.536348143001153 +47.349696511093825 +412.4818539892917 +14.039167310694411 +88.46755338126083 +0 +120 +absolute + + + +0.01 +smooth + +8.536348142634221 +47.34969651066486 +412.48562189224106 +14.039507597305292 +88.4676045950552 +0 +120 +absolute + + + +0.01 +smooth + +8.536348142263918 +47.3496965102309 +412.4894134415684 +14.039852067841569 +88.46765643695764 +0 +120 +absolute + + + +0.01 +smooth + +8.536348141890372 +47.349696509792054 +412.49322704815995 +14.0402006480718 +88.46770889573914 +0 +120 +absolute + + + +0.01 +smooth + +8.536348141513699 +47.34969650934842 +412.49706112290175 +14.040553263764552 +88.4677619601708 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814113402 +47.34969650890012 +412.5009140766799 +14.040909840688384 +88.46781561902367 +0 +120 +absolute + + + +0.01 +smooth + +8.536348140751459 +47.349696508447224 +412.5047843203806 +14.041270304611864 +88.4678698610688 +0 +120 +absolute + + + +0.01 +smooth + +8.536348140366133 +47.349696507989854 +412.50867026488993 +14.041634581303553 +88.46792467507724 +0 +120 +absolute + + + +0.01 +smooth + +8.536348139978168 +47.34969650752812 +412.51257032109396 +14.042002596532011 +88.46798004982008 +0 +120 +absolute + + + +0.01 +smooth + +8.536348139587684 +47.34969650706213 +412.51648289987884 +14.0423742760658 +88.46803597406833 +0 +120 +absolute + + + +0.01 +smooth + +8.5363481391948 +47.34969650659197 +412.52040641213057 +14.04274954567349 +88.46809243659307 +0 +120 +absolute + + + +0.01 +smooth + +8.536348138799637 +47.349696506117745 +412.52433926873545 +14.043128331123636 +88.46814942616535 +0 +120 +absolute + + + +0.01 +smooth + +8.53634813840232 +47.349696505639564 +412.5282798805795 +14.043510558184808 +88.46820693155624 +0 +120 +absolute + + + +0.01 +smooth + +8.536348138002968 +47.34969650515754 +412.53222665854884 +14.04389615262556 +88.46826494153676 +0 +120 +absolute + + + +0.01 +smooth + +8.536348137601701 +47.34969650467176 +412.5361780135294 +14.044285040214461 +88.46832344487802 +0 +120 +absolute + + + +0.01 +smooth + +8.53634813719864 +47.349696504182354 +412.5401323564076 +14.044677146720073 +88.46838243035103 +0 +120 +absolute + + + +0.01 +smooth + +8.536348136773052 +47.349696503672625 +412.54414198647356 +14.045086123332243 +88.46844394653994 +0 +120 +absolute + + + +0.01 +smooth + +8.536348136283092 +47.34969650310852 +412.5483159436274 +14.045539918359776 +88.4685121872317 +0 +120 +absolute + + + +0.01 +smooth + +8.536348135729563 +47.349696502489905 +412.5526550579287 +14.046038789051616 +88.46858719019599 +0 +120 +absolute + + + +0.01 +smooth + +8.536348135114588 +47.349696501817704 +412.55715678504345 +14.046582131285296 +88.4686688639291 +0 +120 +absolute + + + +0.01 +smooth + +8.536348134440274 +47.3496965010928 +412.56181858063735 +14.047169340938328 +88.46875711692712 +0 +120 +absolute + + + +0.01 +smooth + +8.536348133708744 +47.34969650031614 +412.56663790037624 +14.047799813888231 +88.46885185768632 +0 +120 +absolute + + + +0.01 +smooth + +8.536348132922107 +47.34969649948858 +412.5716121999261 +14.048472946012513 +88.46895299470283 +0 +120 +absolute + + + +0.01 +smooth + +8.536348132082486 +47.349696498611095 +412.57673893495286 +14.049188133188704 +88.46906043647292 +0 +120 +absolute + + + +0.01 +smooth + +8.536348131191994 +47.34969649768456 +412.5820155611225 +14.04994477129432 +88.46917409149275 +0 +120 +absolute + + + +0.01 +smooth + +8.536348130252751 +47.34969649670991 +412.5874395341006 +14.05074225620688 +88.4692938682585 +0 +120 +absolute + + + +0.01 +smooth + +8.536348129266868 +47.34969649568802 +412.59300830955334 +14.051579983803894 +88.4694196752664 +0 +120 +absolute + + + +0.01 +smooth + +8.53634812823646 +47.349696494619835 +412.59871934314634 +14.052457349962884 +88.46955142101257 +0 +120 +absolute + + + +0.01 +smooth + +8.536348127163647 +47.34969649350625 +412.6045700905458 +14.053373750561374 +88.46968901399333 +0 +120 +absolute + + + +0.01 +smooth + +8.536348126050548 +47.34969649234817 +412.61055800741735 +14.054328581476872 +88.46983236270479 +0 +120 +absolute + + + +0.01 +smooth + +8.536348124899272 +47.34969649114653 +412.61668054942703 +14.055321238586906 +88.4699813756432 +0 +120 +absolute + + + +0.01 +smooth + +8.536348123711937 +47.34969648990223 +412.62293517224055 +14.056351117768985 +88.47013596130466 +0 +120 +absolute + + + +0.01 +smooth + +8.536348122490663 +47.349696488616175 +412.62931933152413 +14.057417614900634 +88.47029602818547 +0 +120 +absolute + + + +0.01 +smooth + +8.536348121237566 +47.349696487289286 +412.63583048294333 +14.058520125859367 +88.4704614847818 +0 +120 +absolute + + + +0.01 +smooth + +8.536348119954752 +47.34969648592245 +412.642466082164 +14.059658046522696 +88.47063223958978 +0 +120 +absolute + + + +0.01 +smooth + +8.536348118644353 +47.34969648451662 +412.64922358485234 +14.060830772768155 +88.47080820110567 +0 +120 +absolute + + + +0.01 +smooth + +8.53634811730847 +47.34969648307268 +412.65610044667403 +14.062037700473246 +88.47098927782571 +0 +120 +absolute + + + +0.01 +smooth + +8.536348115949231 +47.349696481591536 +412.6630941232951 +14.063278225515495 +88.47117537824599 +0 +120 +absolute + + + +0.01 +smooth + +8.536348114568744 +47.34969648007411 +412.67020207038115 +14.06455174377242 +88.47136641086276 +0 +120 +absolute + + + +0.01 +smooth + +8.536348113169133 +47.34969647852133 +412.6774217435984 +14.065857651121537 +88.47156228417224 +0 +120 +absolute + + + +0.01 +smooth + +8.536348111752508 +47.34969647693409 +412.6847505986127 +14.067195343440368 +88.47176290667059 +0 +120 +absolute + + + +0.01 +smooth + +8.536348110320986 +47.34969647531329 +412.69218609108964 +14.068564216606422 +88.47196818685403 +0 +120 +absolute + + + +0.01 +smooth + +8.536348108876682 +47.34969647365986 +412.69972567669544 +14.069963666497225 +88.47217803321871 +0 +120 +absolute + + + +0.01 +smooth + +8.536348107421716 +47.3496964719747 +412.70736681109577 +14.071393088990291 +88.47239235426089 +0 +120 +absolute + + + +0.01 +smooth + +8.536348105958202 +47.34969647025875 +412.71510694995663 +14.072851879963144 +88.4726110584767 +0 +120 +absolute + + + +0.01 +smooth + +8.536348104488253 +47.34969646851285 +412.7229435489437 +14.07433943529329 +88.47283405436238 +0 +120 +absolute + + + +0.01 +smooth + +8.53634810301399 +47.349696466737996 +412.73087406372326 +14.075855150858258 +88.47306125041412 +0 +120 +absolute + + + +0.01 +smooth + +8.536348101537529 +47.34969646493507 +412.738895949961 +14.077398422535564 +88.47329255512815 +0 +120 +absolute + + + +0.01 +smooth + +8.536348100060987 +47.34969646310496 +412.74700666332274 +14.078968646202723 +88.47352787700063 +0 +120 +absolute + + + +0.01 +smooth + +8.536348098586473 +47.3496964612486 +412.7552036594743 +14.080565217737252 +88.4737671245277 +0 +120 +absolute + + + +0.01 +smooth + +8.53634809711611 +47.34969645936688 +412.76348439408184 +14.082187533016672 +88.47401020620565 +0 +120 +absolute + + + +0.01 +smooth + +8.536348095652011 +47.349696457460745 +412.77184632281103 +14.083834987918502 +88.47425703053064 +0 +120 +absolute + + + +0.01 +smooth + +8.536348094196292 +47.34969645553108 +412.7802869013278 +14.085506978320254 +88.47450750599884 +0 +120 +absolute + + + +0.01 +smooth + +8.536348092751073 +47.349696453578815 +412.7888035852981 +14.087202900099452 +88.47476154110652 +0 +120 +absolute + + + +0.01 +smooth + +8.536348091318466 +47.34969645160484 +412.79739383038776 +14.088922149133612 +88.47501904434978 +0 +120 +absolute + + + +0.01 +smooth + +8.536348089900587 +47.34969644961008 +412.8060550922627 +14.090664121300254 +88.4752799242249 +0 +120 +absolute + + + +0.01 +smooth + +8.536348088499555 +47.34969644759544 +412.8147848265888 +14.09242821247689 +88.47554408922802 +0 +120 +absolute + + + +0.01 +smooth + +8.536348087117485 +47.34969644556184 +412.8235804890318 +14.094213818541045 +88.47581144785535 +0 +120 +absolute + + + +0.01 +smooth + +8.536348085756494 +47.34969644351019 +412.8324395352579 +14.096020335370232 +88.4760819086031 +0 +120 +absolute + + + +0.01 +smooth + +8.536348084418695 +47.34969644144139 +412.8413594209328 +14.097847158841972 +88.47635537996749 +0 +120 +absolute + + + +0.01 +smooth + +8.536348083106207 +47.349696439356364 +412.85033760172234 +14.099693684833781 +88.47663177044464 +0 +120 +absolute + + + +0.01 +smooth + +8.536348081821142 +47.349696437256014 +412.8593715332925 +14.101559309223177 +88.47691098853082 +0 +120 +absolute + + + +0.01 +smooth + +8.536348080565622 +47.34969643514127 +412.8684586713091 +14.10344342788768 +88.47719294272218 +0 +120 +absolute + + + +0.01 +smooth + +8.536348079341762 +47.34969643301302 +412.8775964714381 +14.105345436704805 +88.47747754151496 +0 +120 +absolute + + + +0.01 +smooth + +8.536348078151674 +47.349696430872186 +412.8867823893453 +14.107264731552073 +88.47776469340532 +0 +120 +absolute + + + +0.01 +smooth + +8.536348076997477 +47.34969642871968 +412.89601388069667 +14.109200708306998 +88.47805430688946 +0 +120 +absolute + + + +0.01 +smooth + +8.536348075881289 +47.34969642655641 +412.9052884011581 +14.111152762847103 +88.47834629046358 +0 +120 +absolute + + + +0.01 +smooth + +8.536348074805222 +47.349696424383296 +412.9146034063954 +14.113120291049903 +88.47864055262389 +0 +120 +absolute + + + +0.01 +smooth + +8.536348073771395 +47.349696422201234 +412.9239563520746 +14.115102688792916 +88.47893700186658 +0 +120 +absolute + + + +0.01 +smooth + +8.536348072781923 +47.34969642001115 +412.93334469386133 +14.11709935195366 +88.47923554668783 +0 +120 +absolute + + + +0.01 +smooth + +8.536348071838923 +47.349696417813945 +412.94276588742173 +14.119109676409654 +88.47953609558385 +0 +120 +absolute + + + +0.01 +smooth + +8.53634807094451 +47.349696415610545 +412.9522173884216 +14.121133058038415 +88.47983855705087 +0 +120 +absolute + + + +0.01 +smooth + +8.536348070100798 +47.349696413401844 +412.9616966525268 +14.123168892717459 +88.480142839585 +0 +120 +absolute + + + +0.01 +smooth + +8.536348069309907 +47.34969641118876 +412.9712011354033 +14.12521657632431 +88.48044885168252 +0 +120 +absolute + + + +0.01 +smooth + +8.536348068573954 +47.349696408972214 +412.9807282927169 +14.12727550473648 +88.48075650183958 +0 +120 +absolute + + + +0.01 +smooth + +8.536348067895052 +47.3496964067531 +412.99027558013347 +14.129345073831491 +88.48106569855238 +0 +120 +absolute + + + +0.01 +smooth + +8.536348067275318 +47.34969640453234 +412.999840453319 +14.131424679486855 +88.48137635031716 +0 +120 +absolute + + + +0.01 +smooth + +8.536348066716869 +47.349696402310855 +413.00942036793924 +14.133513717580097 +88.48168836563008 +0 +120 +absolute + + + +0.01 +smooth + +8.53634806622182 +47.349696400089535 +413.0190127796603 +14.13561158398873 +88.48200165298731 +0 +120 +absolute + + + +0.01 +smooth + +8.536348065792286 +47.349696397869295 +413.0286151441478 +14.137717674590277 +88.48231612088509 +0 +120 +absolute + + + +0.01 +smooth + +8.536348065430385 +47.349696395651065 +413.03822491706785 +14.139831385262251 +88.48263167781961 +0 +120 +absolute + + + +0.01 +smooth + +8.536348065138235 +47.34969639343574 +413.0478395540861 +14.141952111882171 +88.48294823228704 +0 +120 +absolute + + + +0.01 +smooth + +8.536348064917949 +47.34969639122424 +413.05745651086875 +14.144079250327557 +88.48326569278359 +0 +120 +absolute + + + +0.01 +smooth + +8.536348064771643 +47.34969638901747 +413.06707324308144 +14.146212196475926 +88.48358396780547 +0 +120 +absolute + + + +0.01 +smooth + +8.536348064701434 +47.34969638681635 +413.0766872063901 +14.148350346204793 +88.48390296584887 +0 +120 +absolute + + + +0.01 +smooth + +8.536348064699586 +47.34969638461079 +413.0863181926835 +14.150503346682006 +88.48422411231189 +0 +120 +absolute + + + +0.01 +smooth + +8.536348064726754 +47.34969638235668 +413.0960559503979 +14.152712688319308 +88.48455354478438 +0 +120 +absolute + + + +0.01 +smooth + +8.53634806477846 +47.34969638005041 +413.1059089256458 +14.154982209837863 +88.48489182983867 +0 +120 +absolute + + + +0.01 +smooth + +8.53634806485456 +47.34969637769317 +413.11587566645875 +14.157311190726105 +88.4852388594273 +0 +120 +absolute + + + +0.01 +smooth + +8.536348064954907 +47.34969637528627 +413.1259547208692 +14.159698910472468 +88.4855945255028 +0 +120 +absolute + + + +0.01 +smooth + +8.536348065079347 +47.34969637283089 +413.136144636909 +14.162144648565377 +88.48595872001775 +0 +120 +absolute + + + +0.01 +smooth + +8.536348065227733 +47.349696370328346 +413.1464439626105 +14.164647684493268 +88.48633133492473 +0 +120 +absolute + + + +0.01 +smooth + +8.53634806539992 +47.349696367779856 +413.1568512460054 +14.167207297744575 +88.48671226217624 +0 +120 +absolute + + + +0.01 +smooth + +8.536348065595746 +47.34969636518665 +413.1673650351257 +14.169822767807714 +88.4871013937248 +0 +120 +absolute + + + +0.01 +smooth + +8.536348065815073 +47.34969636255002 +413.17798387800366 +14.17249337417113 +88.48749862152302 +0 +120 +absolute + + + +0.01 +smooth + +8.536348066057748 +47.349696359871174 +413.18870632267135 +14.175218396323253 +88.48790383752343 +0 +120 +absolute + + + +0.01 +smooth + +8.536348066323617 +47.34969635715137 +413.1995309171606 +14.177997113752498 +88.48831693367855 +0 +120 +absolute + + + +0.01 +smooth + +8.536348066612542 +47.349696354391874 +413.21045620950355 +14.180828805947314 +88.48873780194099 +0 +120 +absolute + + + +0.01 +smooth + +8.536348066924358 +47.34969635159391 +413.22148074773213 +14.183712752396119 +88.48916633426319 +0 +120 +absolute + + + +0.01 +smooth + +8.536348067258928 +47.349696348758734 +413.2326030798786 +14.186648232587352 +88.48960242259778 +0 +120 +absolute + + + +0.01 +smooth + +8.536348067616098 +47.34969634588762 +413.24382175397494 +14.18963452600944 +88.49004595889735 +0 +120 +absolute + + + +0.01 +smooth + +8.536348067995718 +47.349696342981765 +413.25513531805296 +14.192670912150813 +88.49049683511431 +0 +120 +absolute + + + +0.01 +smooth + +8.536348068397638 +47.34969634004248 +413.2665423201449 +14.195756670499904 +88.49095494320134 +0 +120 +absolute + + + +0.01 +smooth + +8.536348068821713 +47.34969633707096 +413.2780413082827 +14.198891080545145 +88.49142017511093 +0 +120 +absolute + + + +0.01 +smooth + +8.536348069267788 +47.34969633406848 +413.28963083049854 +14.202073421774958 +88.49189242279562 +0 +120 +absolute + + + +0.01 +smooth + +8.536348069735713 +47.349696331036256 +413.3013094348242 +14.20530297367778 +88.49237157820795 +0 +120 +absolute + + + +0.01 +smooth + +8.536348070225346 +47.349696327975586 +413.31307566929195 +14.208579015742046 +88.49285753330052 +0 +120 +absolute + + + +0.01 +smooth + +8.536348070736528 +47.34969632488768 +413.3249280819337 +14.211900827456173 +88.49335018002583 +0 +120 +absolute + + + +0.01 +smooth + +8.536348071269114 +47.3496963217738 +413.33686522078153 +14.215267688308604 +88.49384941033642 +0 +120 +absolute + + + +0.01 +smooth + +8.536348071822957 +47.34969631863519 +413.34888563386744 +14.218678877787765 +88.49435511618489 +0 +120 +absolute + + + +0.01 +smooth + +8.536348072397907 +47.34969631547312 +413.36098786922366 +14.222133675382091 +88.49486718952379 +0 +120 +absolute + + + +0.01 +smooth + +8.536348072993809 +47.34969631228879 +413.37317047488193 +14.225631360580005 +88.4953855223056 +0 +120 +absolute + + + +0.01 +smooth + +8.53634807361052 +47.34969630908351 +413.3854319988745 +14.229171212869947 +88.49591000648292 +0 +120 +absolute + + + +0.01 +smooth + +8.536348074247886 +47.34969630585847 +413.39777098923327 +14.232752511740339 +88.49644053400826 +0 +120 +absolute + + + +0.01 +smooth + +8.536348074905762 +47.349696302614966 +413.41018599399047 +14.236374536679612 +88.49697699683423 +0 +120 +absolute + + + +0.01 +smooth + +8.536348075583991 +47.3496962993542 +413.42267556117775 +14.240036567176201 +88.4975192869133 +0 +120 +absolute + + + +0.01 +smooth + +8.536348076282433 +47.34969629607747 +413.43523823882765 +14.243737882718538 +88.49806729619809 +0 +120 +absolute + + + +0.01 +smooth + +8.53634807700093 +47.349696292785985 +413.4478725749718 +14.247477762795048 +88.49862091664109 +0 +120 +absolute + + + +0.01 +smooth + +8.536348077739335 +47.349696289480995 +413.46057711764234 +14.251255486894161 +88.49918004019486 +0 +120 +absolute + + + +0.01 +smooth + +8.536348078497504 +47.34969628616377 +413.47335041487145 +14.255070334504314 +88.49974455881197 +0 +120 +absolute + + + +0.01 +smooth + +8.53634807927528 +47.349696282835545 +413.48619101469103 +14.258921585113933 +88.50031436444499 +0 +120 +absolute + + + +0.01 +smooth + +8.536348080072518 +47.34969627949758 +413.4990974651332 +14.26280851821145 +88.50088934904639 +0 +120 +absolute + + + +0.01 +smooth + +8.536348080889068 +47.349696276151114 +413.51206831422996 +14.266730413285298 +88.50146940456878 +0 +120 +absolute + + + +0.01 +smooth + +8.536348081724778 +47.34969627279738 +413.5251021100132 +14.270686549823903 +88.5020544229647 +0 +120 +absolute + + + +0.01 +smooth + +8.5363480825795 +47.34969626943766 +413.5381974005153 +14.274676207315697 +88.50264429618667 +0 +120 +absolute + + + +0.01 +smooth + +8.536348083453088 +47.34969626607318 +413.5513527337679 +14.278698665249113 +88.50323891618729 +0 +120 +absolute + + + +0.01 +smooth + +8.536348084345388 +47.34969626270518 +413.5645666578033 +14.282753203112579 +88.50383817491905 +0 +120 +absolute + + + +0.01 +smooth + +8.53634808525625 +47.34969625933493 +413.5778377206534 +14.286839100394527 +88.50444196433452 +0 +120 +absolute + + + +0.01 +smooth + +8.536348086185528 +47.34969625596366 +413.59116447035035 +14.290955636583387 +88.50505017638626 +0 +120 +absolute + + + +0.01 +smooth + +8.53634808713307 +47.34969625259263 +413.60454545492615 +14.29510209116759 +88.50566270302681 +0 +120 +absolute + + + +0.01 +smooth + +8.536348088098727 +47.349696249223086 +413.6179792224127 +14.299277743635567 +88.5062794362087 +0 +120 +absolute + + + +0.01 +smooth + +8.53634808908235 +47.34969624585627 +413.63146432084227 +14.303481873475743 +88.5069002678845 +0 +120 +absolute + + + +0.01 +smooth + +8.53634809008379 +47.34969624249345 +413.64499929824683 +14.307713760176561 +88.50752509000675 +0 +120 +absolute + + + +0.01 +smooth + +8.536348091102896 +47.34969623913584 +413.65858270265824 +14.31197268322644 +88.50815379452801 +0 +120 +absolute + + + +0.01 +smooth + +8.53634809213952 +47.34969623578472 +413.67221308210867 +14.316257922113815 +88.50878627340082 +0 +120 +absolute + + + +0.01 +smooth + +8.536348093193512 +47.34969623244132 +413.68588898463014 +14.320568756327116 +88.50942241857771 +0 +120 +absolute + + + +0.01 +smooth + +8.53634809426472 +47.3496962291069 +413.6996089582547 +14.324904465354773 +88.51006212201125 +0 +120 +absolute + + + +0.01 +smooth + +8.536348095352999 +47.34969622578269 +413.71337155101435 +14.329264328685221 +88.51070527565398 +0 +120 +absolute + + + +0.01 +smooth + +8.536348096458198 +47.34969622246996 +413.7271753109412 +14.333647625806883 +88.51135177145845 +0 +120 +absolute + + + +0.01 +smooth + +8.536348097580166 +47.34969621916994 +413.74101878606723 +14.338053636208198 +88.5120015013772 +0 +120 +absolute + + + +0.01 +smooth + +8.536348098718754 +47.34969621588389 +413.7549005244245 +14.34248163937759 +88.5126543573628 +0 +120 +absolute + + + +0.01 +smooth + +8.536348099873813 +47.349696212613054 +413.768819074045 +14.34693091480349 +88.51331023136777 +0 +120 +absolute + + + +0.01 +smooth + +8.536348101045192 +47.34969620935867 +413.78277298296075 +14.351400741974334 +88.51396901534466 +0 +120 +absolute + + + +0.01 +smooth + +8.536348102232747 +47.34969620612202 +413.7967607992039 +14.355890400378547 +88.51463060124604 +0 +120 +absolute + + + +0.01 +smooth + +8.53634810343632 +47.34969620290431 +413.81078107080634 +14.36039916950456 +88.51529488102445 +0 +120 +absolute + + + +0.01 +smooth + +8.536348104655767 +47.34969619970681 +413.82483234580025 +14.36492632884081 +88.51596174663241 +0 +120 +absolute + + + +0.01 +smooth + +8.536348105890939 +47.34969619653077 +413.8389131722176 +14.369471157875722 +88.51663109002251 +0 +120 +absolute + + + +0.01 +smooth + +8.536348107141684 +47.349696193377426 +413.8530220980904 +14.374032936097723 +88.51730280314727 +0 +120 +absolute + + + +0.01 +smooth + +8.536348108407852 +47.34969619024804 +413.8671576714506 +14.378610942995252 +88.51797677795926 +0 +120 +absolute + + + +0.01 +smooth + +8.536348109689298 +47.34969618714385 +413.88131844033046 +14.383204458056735 +88.518652906411 +0 +120 +absolute + + + +0.01 +smooth + +8.536348110985866 +47.349696184066104 +413.89550295276183 +14.387812760770604 +88.51933108045507 +0 +120 +absolute + + + +0.01 +smooth + +8.536348112297413 +47.34969618101607 +413.9097097567769 +14.392435130625287 +88.52001119204398 +0 +120 +absolute + + + +0.01 +smooth + +8.536348113623784 +47.34969617799496 +413.92393740040757 +14.397070847109218 +88.52069313313031 +0 +120 +absolute + + + +0.01 +smooth + +8.536348114964833 +47.349696175004055 +413.93818443168595 +14.401719189710825 +88.52137679566658 +0 +120 +absolute + + + +0.01 +smooth + +8.536348116342333 +47.349696172035955 +413.95245533829547 +14.406383664882503 +88.52206268572486 +0 +120 +absolute + + + +0.01 +smooth + +8.536348117957802 +47.34969616901277 +413.96680374057684 +14.41110265866002 +88.522756377181 +0 +120 +absolute + + + +0.01 +smooth + +8.536348119857069 +47.34969616591841 +413.98124192639176 +14.415884981719616 +88.52345914754856 +0 +120 +absolute + + + +0.01 +smooth + +8.536348122036424 +47.349696162756274 +413.99576884336153 +14.42072993537832 +88.52417089281433 +0 +120 +absolute + + + +0.01 +smooth + +8.536348124492166 +47.349696159529806 +414.0103834391078 +14.425636820953175 +88.52489150896515 +0 +120 +absolute + + + +0.01 +smooth + +8.536348127220583 +47.349696156242445 +414.0250846612515 +14.43060493976122 +88.52562089198776 +0 +120 +absolute + + + +0.01 +smooth + +8.536348130217958 +47.34969615289759 +414.0398714574143 +14.435633593119482 +88.5263589378689 +0 +120 +absolute + + + +0.01 +smooth + +8.53634813348059 +47.34969614949872 +414.0547427752175 +14.440722082345001 +88.52710554259544 +0 +120 +absolute + + + +0.01 +smooth + +8.536348137004769 +47.34969614604924 +414.06969756228244 +14.445869708754824 +88.52786060215412 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814078678 +47.34969614255257 +414.08473476623027 +14.451075773665972 +88.52862401253168 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814482292 +47.34969613901216 +414.09985333468273 +14.456339578395491 +88.52939566971499 +0 +120 +absolute + + + +0.01 +smooth + +8.53634814910948 +47.34969613543145 +414.11505221526096 +14.461660424260419 +88.53017546969078 +0 +120 +absolute + + + +0.01 +smooth + +8.536348153642743 +47.34969613181384 +414.13033035558624 +14.467037612577782 +88.5309633084458 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815841901 +47.34969612816278 +414.14568670328015 +14.47247044466463 +88.53175908196692 +0 +120 +absolute + + + +0.01 +smooth + +8.536348163434564 +47.34969612448171 +414.1611202059638 +14.477958221837993 +88.53256268624087 +0 +120 +absolute + + + +0.01 +smooth + +8.536348168685697 +47.349696120774034 +414.1766298112587 +14.4835002454149 +88.53337401725437 +0 +120 +absolute + + + +0.01 +smooth + +8.536348174168703 +47.34969611704322 +414.19221446678625 +14.4890958167124 +88.53419297099431 +0 +120 +absolute + + + +0.01 +smooth + +8.536348179879873 +47.34969611329268 +414.2078731201677 +14.494744237047529 +88.53501944344747 +0 +120 +absolute + + + +0.01 +smooth + +8.536348185815488 +47.3496961095258 +414.22360471902425 +14.500444807737308 +88.53585333060052 +0 +120 +absolute + + + +0.01 +smooth + +8.53634819197185 +47.34969610574611 +414.2394082109776 +14.506196830098794 +88.53669452844038 +0 +120 +absolute + + + +0.01 +smooth + +8.536348198345248 +47.34969610195698 +414.2552825436491 +14.511999605449015 +88.53754293295374 +0 +120 +absolute + + + +0.01 +smooth + +8.536348204931965 +47.349696098161814 +414.2712266646597 +14.517852435104997 +88.53839844012738 +0 +120 +absolute + + + +0.01 +smooth + +8.536348211728303 +47.34969609436411 +414.28723952163125 +14.523754620383796 +88.53926094594816 +0 +120 +absolute + + + +0.01 +smooth + +8.536348218730545 +47.349696090567264 +414.30332006218464 +14.529705462602442 +88.5401303464028 +0 +120 +absolute + + + +0.01 +smooth + +8.536348225934981 +47.349696086774685 +414.3194672339415 +14.53570426307796 +88.54100653747808 +0 +120 +absolute + + + +0.01 +smooth + +8.536348233337906 +47.349696082989844 +414.33567998452327 +14.541750323127399 +88.54188941516081 +0 +120 +absolute + + + +0.01 +smooth + +8.53634824093561 +47.34969607921616 +414.35195726155115 +14.547842944067794 +88.54277887543778 +0 +120 +absolute + + + +0.01 +smooth + +8.53634824872438 +47.349696075457054 +414.36829801264645 +14.553981427216172 +88.54367481429571 +0 +120 +absolute + + + +0.01 +smooth + +8.53634825670051 +47.34969607171596 +414.38470118543063 +14.560165073889584 +88.54457712772145 +0 +120 +absolute + + + +0.01 +smooth + +8.53634826486029 +47.349696067996334 +414.40116572752504 +14.566393185405058 +88.54548571170177 +0 +120 +absolute + + + +0.01 +smooth + +8.536348273200009 +47.34969606430156 +414.41769058655086 +14.572665063079626 +88.5464004622234 +0 +120 +absolute + + + +0.01 +smooth + +8.536348281715963 +47.34969606063512 +414.43427471012984 +14.57898000823034 +88.5473212752732 +0 +120 +absolute + + + +0.01 +smooth + +8.536348290404439 +47.349696057000415 +414.4509170458831 +14.585337322174224 +88.54824804683791 +0 +120 +absolute + + + +0.01 +smooth + +8.536348299261723 +47.34969605340087 +414.4676165414317 +14.591736306228313 +88.54918067290428 +0 +120 +absolute + + + +0.01 +smooth + +8.536348308284115 +47.349696049839935 +414.4843721443976 +14.598176261709654 +88.55011904945918 +0 +120 +absolute + + + +0.01 +smooth + +8.536348317467898 +47.34969604632104 +414.50118280240173 +14.604656489935275 +88.55106307248931 +0 +120 +absolute + + + +0.01 +smooth + +8.536348326809367 +47.34969604284761 +414.5180474630656 +14.61117629222222 +88.55201263798152 +0 +120 +absolute + + + +0.01 +smooth + +8.536348336304814 +47.34969603942308 +414.53496507401053 +14.617734969887515 +88.55296764192252 +0 +120 +absolute + + + +0.01 +smooth + +8.536348345950524 +47.34969603605088 +414.5519345828578 +14.624331824248209 +88.55392798029912 +0 +120 +absolute + + + +0.01 +smooth + +8.536348355742792 +47.349696032734435 +414.5689549372289 +14.630966156621326 +88.55489354909813 +0 +120 +absolute + + + +0.01 +smooth + +8.536348365677908 +47.34969602947718 +414.5860250847452 +14.63763726832391 +88.55586424430632 +0 +120 +absolute + + + +0.01 +smooth + +8.536348375752162 +47.34969602628255 +414.60314397302784 +14.644344460672997 +88.55683996191046 +0 +120 +absolute + + + +0.01 +smooth + +8.536348385961846 +47.34969602315397 +414.62031054969844 +14.651087034985625 +88.55782059789733 +0 +120 +absolute + + + +0.01 +smooth + +8.536348396303248 +47.34969602009488 +414.63752376237824 +14.657864292578827 +88.55880604825373 +0 +120 +absolute + + + +0.01 +smooth + +8.53634840677266 +47.349696017108705 +414.65478255868857 +14.664675534769641 +88.55979620896642 +0 +120 +absolute + + + +0.01 +smooth + +8.536348417366375 +47.34969601419887 +414.6720858862508 +14.671520062875103 +88.5607909760222 +0 +120 +absolute + + + +0.01 +smooth + +8.536348428080682 +47.34969601136882 +414.6894326926863 +14.67839717821225 +88.56179024540786 +0 +120 +absolute + + + +0.01 +smooth + +8.536348438911869 +47.34969600862198 +414.7068219256164 +14.68530618209812 +88.56279391311016 +0 +120 +absolute + + + +0.01 +smooth + +8.53634844985623 +47.349696005961775 +414.72425253266255 +14.69224637584975 +88.5638018751159 +0 +120 +absolute + + + +0.01 +smooth + +8.536348460910055 +47.34969600339165 +414.74172346144604 +14.699217060784171 +88.56481402741184 +0 +120 +absolute + + + +0.01 +smooth + +8.536348472069635 +47.34969600091502 +414.7592336595882 +14.706217538218429 +88.56583026598477 +0 +120 +absolute + + + +0.01 +smooth + +8.53634848333126 +47.34969599853533 +414.7767820747104 +14.713247109469547 +88.5668504868215 +0 +120 +absolute + + + +0.01 +smooth + +8.536348494691222 +47.349695996256 +414.79436765443404 +14.720305075854576 +88.56787458590878 +0 +120 +absolute + + + +0.01 +smooth + +8.53634850614581 +47.34969599408047 +414.8119893463805 +14.727390738690543 +88.5689024592334 +0 +120 +absolute + + + +0.01 +smooth + +8.536348517691314 +47.34969599201217 +414.829646098171 +14.73450339929449 +88.56993400278215 +0 +120 +absolute + + + +0.01 +smooth + +8.536348529324028 +47.34969599005453 +414.847336857427 +14.741642358983448 +88.5709691125418 +0 +120 +absolute + + + +0.01 +smooth + +8.53634854104024 +47.34969598821098 +414.86506057176985 +14.74880691907446 +88.57200768449914 +0 +120 +absolute + + + +0.01 +smooth + +8.536348552836241 +47.349695986484946 +414.88281618882087 +14.75599638088456 +88.57304961464098 +0 +120 +absolute + + + +0.01 +smooth + +8.536348564708323 +47.34969598487987 +414.9006026562015 +14.763210045730782 +88.57409479895404 +0 +120 +absolute + + + +0.01 +smooth + +8.536348576652776 +47.34969598339918 +414.918418921533 +14.770447214930162 +88.57514313342514 +0 +120 +absolute + + + +0.01 +smooth + +8.53634858866589 +47.3496959820463 +414.93626393243676 +14.777707189799743 +88.57619451404108 +0 +120 +absolute + + + +0.01 +smooth + +8.536348600743956 +47.34969598082466 +414.95413663653414 +14.784989271656556 +88.57724883678861 +0 +120 +absolute + + + +0.01 +smooth + +8.536348612883264 +47.34969597973772 +414.9720359814465 +14.792292761817642 +88.57830599765451 +0 +120 +absolute + + + +0.01 +smooth + +8.536348625080109 +47.34969597878887 +414.98996091479523 +14.79961696160003 +88.5793658926256 +0 +120 +absolute + + + +0.01 +smooth + +8.536348637330775 +47.34969597798157 +415.0079103842016 +14.806961172320767 +88.58042841768864 +0 +120 +absolute + + + +0.01 +smooth + +8.536348649631558 +47.34969597731924 +415.025883337287 +14.814324695296879 +88.58149346883042 +0 +120 +absolute + + + +0.01 +smooth + +8.536348661978744 +47.34969597680531 +415.0438787216729 +14.821706831845411 +88.58256094203767 +0 +120 +absolute + + + +0.01 +smooth + +8.536348674368629 +47.349695976443215 +415.0618954849805 +14.829106883283394 +88.58363073329724 +0 +120 +absolute + + + +0.01 +smooth + +8.536348686797503 +47.349695976236376 +415.07993257483116 +14.836524150927868 +88.5847027385959 +0 +120 +absolute + + + +0.01 +smooth + +8.536348699269803 +47.34969597618514 +415.09798998277086 +14.843958840691005 +88.58577698322982 +0 +120 +absolute + + + +0.01 +smooth + +8.536348712050746 +47.3496959761899 +415.11610115506 +14.851440112246832 +88.58685763141088 +0 +120 +absolute + + + +0.01 +smooth + +8.53634872526654 +47.34969597620142 +415.1342819249869 +14.85898176543822 +88.58794665184857 +0 +120 +absolute + + + +0.01 +smooth + +8.53634873891287 +47.34969597621968 +415.1525314448847 +14.866583129571326 +88.58904394475188 +0 +120 +absolute + + + +0.01 +smooth + +8.536348752985429 +47.3496959762447 +415.17084886708574 +14.874243533952312 +88.59014941032963 +0 +120 +absolute + + + +0.01 +smooth + +8.5363487674799 +47.34969597627643 +415.18923334392287 +14.881962307887328 +88.59126294879064 +0 +120 +absolute + + + +0.01 +smooth + +8.53634878239197 +47.349695976314855 +415.20768402772836 +14.889738780682526 +88.59238446034378 +0 +120 +absolute + + + +0.01 +smooth + +8.53634879771733 +47.349695976359975 +415.22620007083526 +14.897572281644075 +88.59351384519796 +0 +120 +absolute + + + +0.01 +smooth + +8.53634881345167 +47.34969597641177 +415.244780625576 +14.905462140078116 +88.59465100356202 +0 +120 +absolute + + + +0.01 +smooth + +8.536348829590674 +47.3496959764702 +415.2634248442833 +14.913407685290808 +88.59579583564478 +0 +120 +absolute + + + +0.01 +smooth + +8.536348846130032 +47.34969597653527 +415.2821318792897 +14.921408246588314 +88.59694824165514 +0 +120 +absolute + + + +0.01 +smooth + +8.53634886306543 +47.34969597660698 +415.300900882928 +14.929463153276789 +88.59810812180199 +0 +120 +absolute + + + +0.01 +smooth + +8.536348880392554 +47.349695976685254 +415.31973100753055 +14.93757173466238 +88.5992753762941 +0 +120 +absolute + + + +0.01 +smooth + +8.536348898107102 +47.34969597677014 +415.3386214054305 +14.945733320051252 +88.60044990534044 +0 +120 +absolute + + + +0.01 +smooth + +8.536348916204753 +47.34969597686159 +415.35757122896 +14.953947238749555 +88.6016316091498 +0 +120 +absolute + + + +0.01 +smooth + +8.536348934681195 +47.34969597695959 +415.3765796304519 +14.962212820063442 +88.60282038793103 +0 +120 +absolute + + + +0.01 +smooth + +8.53634895353212 +47.34969597706412 +415.3956457622389 +14.97052939329908 +88.60401614189304 +0 +120 +absolute + + + +0.01 +smooth + +8.536348972753213 +47.34969597717518 +415.41476877665366 +14.978896287762621 +88.60521877124468 +0 +120 +absolute + + + +0.01 +smooth + +8.536348992340162 +47.34969597729273 +415.4339478260286 +14.987312832760207 +88.60642817619478 +0 +120 +absolute + + + +0.01 +smooth + +8.536349012288657 +47.34969597741677 +415.45318206269644 +14.995778357598013 +88.60764425695221 +0 +120 +absolute + + + +0.01 +smooth + +8.536349032594389 +47.34969597754728 +415.4724706389901 +15.004292191582184 +88.6088669137259 +0 +120 +absolute + + + +0.01 +smooth + +8.536349053253039 +47.34969597768423 +415.49181270724176 +15.01285366401888 +88.61009604672464 +0 +120 +absolute + + + +0.01 +smooth + +8.536349074260299 +47.349695977827615 +415.5112074197844 +15.021462104214251 +88.61133155615727 +0 +120 +absolute + + + +0.01 +smooth + +8.536349095611856 +47.34969597797743 +415.53065392895076 +15.030116841474465 +88.61257334223274 +0 +120 +absolute + + + +0.01 +smooth + +8.536349117303397 +47.349695978133624 +415.5501513870731 +15.03881720510566 +88.61382130515982 +0 +120 +absolute + + + +0.01 +smooth + +8.536349139330612 +47.34969597829622 +415.5696989464842 +15.047562524414007 +88.6150753451474 +0 +120 +absolute + + + +0.01 +smooth + +8.53634916168919 +47.349695978465185 +415.589295759517 +15.056352128705655 +88.6163353624044 +0 +120 +absolute + + + +0.01 +smooth + +8.536349184374815 +47.34969597864048 +415.60894097850365 +15.065185347286759 +88.61760125713958 +0 +120 +absolute + + + +0.01 +smooth + +8.536349207383175 +47.349695978822105 +415.62863375577706 +15.074061509463474 +88.61887292956185 +0 +120 +absolute + + + +0.01 +smooth + +8.536349230709966 +47.349695979010086 +415.6483732436701 +15.082979944541968 +88.62015027988012 +0 +120 +absolute + + + +0.01 +smooth + +8.536349254350863 +47.34969597920432 +415.66815859451503 +15.091939981828377 +88.62143320830317 +0 +120 +absolute + + + +0.01 +smooth + +8.536349278301564 +47.34969597940485 +415.6879889606445 +15.10094095062887 +88.62272161503988 +0 +120 +absolute + + + +0.01 +smooth + +8.536349302557758 +47.34969597961166 +415.70786349439163 +15.109982180249606 +88.62401540029919 +0 +120 +absolute + + + +0.01 +smooth + +8.536349327115124 +47.3496959798247 +415.72778134808846 +15.119062999996725 +88.62531446428984 +0 +120 +absolute + + + +0.01 +smooth + +8.536349351969355 +47.34969598004399 +415.7477416740679 +15.128182739176397 +88.62661870722077 +0 +120 +absolute + + + +0.01 +smooth + +8.53634937711614 +47.34969598026948 +415.76774362466267 +15.137340727094772 +88.62792802930082 +0 +120 +absolute + + + +0.01 +smooth + +8.536349402551167 +47.34969598050118 +415.78778635220533 +15.14653629305801 +88.62924233073886 +0 +120 +absolute + + + +0.01 +smooth + +8.536349428270121 +47.34969598073905 +415.80786900902854 +15.155768766372258 +88.63056151174372 +0 +120 +absolute + + + +0.01 +smooth + +8.536349454268695 +47.34969598098309 +415.8279907474648 +15.165037476343679 +88.63188547252429 +0 +120 +absolute + + + +0.01 +smooth + +8.53634948054257 +47.349695981233275 +415.848150719847 +15.174341752278428 +88.63321411328943 +0 +120 +absolute + + + +0.01 +smooth + +8.53634950708744 +47.3496959814896 +415.86834807850767 +15.183680923482662 +88.634547334248 +0 +120 +absolute + + + +0.01 +smooth + +8.536349533898992 +47.349695981752035 +415.88858197577946 +15.19305431926253 +88.63588503560887 +0 +120 +absolute + + + +0.01 +smooth + +8.536349560972912 +47.34969598202056 +415.908851563995 +15.202461268924196 +88.63722711758086 +0 +120 +absolute + + + +0.01 +smooth + +8.536349588304887 +47.34969598229517 +415.9291559954869 +15.211901101773808 +88.63857348037287 +0 +120 +absolute + + + +0.01 +smooth + +8.53634961589061 +47.34969598257584 +415.94949442258775 +15.221373147117529 +88.63992402419375 +0 +120 +absolute + + + +0.01 +smooth + +8.536349643725764 +47.349695982862556 +415.96986599763034 +15.23087673426151 +88.64127864925236 +0 +120 +absolute + + + +0.01 +smooth + +8.536349671806038 +47.34969598315531 +415.99026987294735 +15.24041119251191 +88.64263725575755 +0 +120 +absolute + + + +0.01 +smooth + +8.536349700127122 +47.34969598345407 +416.0107052008712 +15.24997585117488 +88.64399974391822 +0 +120 +absolute + + + +0.01 +smooth + +8.536349728684701 +47.34969598375882 +416.0311711337348 +15.259570039556582 +88.64536601394317 +0 +120 +absolute + + + +0.01 +smooth + +8.536349757474467 +47.34969598406957 +416.05166682387056 +15.26919308696317 +88.64673596604132 +0 +120 +absolute + + + +0.01 +smooth + +8.536349786492107 +47.349695984386265 +416.0721914236112 +15.278844322700795 +88.6481095004215 +0 +120 +absolute + + + +0.01 +smooth + +8.536349815733304 +47.34969598470891 +416.0927440852894 +15.28852307607562 +88.64948651729257 +0 +120 +absolute + + + +0.01 +smooth + +8.536349845193751 +47.349695985037485 +416.1133239612378 +15.29822867639379 +88.65086691686341 +0 +120 +absolute + + + +0.01 +smooth + +8.536349874869135 +47.34969598537197 +416.13393020378896 +15.307960452961472 +88.65225059934286 +0 +120 +absolute + + + +0.01 +smooth + +8.536349904755145 +47.34969598571236 +416.1545619652756 +15.317717735084818 +88.65363746493978 +0 +120 +absolute + + + +0.01 +smooth + +8.536349934847465 +47.34969598605862 +416.17521839803044 +15.327499852069984 +88.65502741386305 +0 +120 +absolute + + + +0.01 +smooth + +8.536349965141788 +47.34969598641073 +416.1958986543859 +15.337306133223123 +88.65642034632154 +0 +120 +absolute + + + +0.01 +smooth + +8.536349995633799 +47.3496959867687 +416.2166018866749 +15.347135907850394 +88.65781616252409 +0 +120 +absolute + + + +0.01 +smooth + +8.536350026319184 +47.34969598713249 +416.23732724722987 +15.356988505257952 +88.65921476267955 +0 +120 +absolute + + + +0.01 +smooth + +8.536350057193637 +47.3496959875021 +416.2580738883835 +15.366863254751951 +88.66061604699681 +0 +120 +absolute + + + +0.01 +smooth + +8.536350088252842 +47.34969598787751 +416.2788409624685 +15.376759485638548 +88.66201991568471 +0 +120 +absolute + + + +0.01 +smooth + +8.536350119492488 +47.349695988258674 +416.2996276218174 +15.386676527223898 +88.6634262689521 +0 +120 +absolute + + + +0.01 +smooth + +8.53635015090826 +47.349695988645614 +416.32043301876297 +15.396613708814158 +88.66483500700787 +0 +120 +absolute + + + +0.01 +smooth + +8.536350182495852 +47.349695989038295 +416.3412563056379 +15.406570359715484 +88.66624603006088 +0 +120 +absolute + + + +0.01 +smooth + +8.536350214250945 +47.349695989436704 +416.3620966347745 +15.41654580923403 +88.66765923831997 +0 +120 +absolute + + + +0.01 +smooth + +8.536350246169233 +47.34969598984082 +416.38295315850576 +15.426539386675955 +88.66907453199403 +0 +120 +absolute + + + +0.01 +smooth + +8.5363502782464 +47.34969599025063 +416.40382502916424 +15.43655042134741 +88.67049181129187 +0 +120 +absolute + + + +0.01 +smooth + +8.536350310478136 +47.34969599066612 +416.42471139908247 +15.446578242554557 +88.67191097642242 +0 +120 +absolute + + + +0.01 +smooth + +8.536350342860132 +47.34969599108727 +416.44561142059325 +15.456622179603546 +88.67333192759449 +0 +120 +absolute + + + +0.01 +smooth + +8.536350375388066 +47.34969599151406 +416.4665242460291 +15.466681561800534 +88.67475456501695 +0 +120 +absolute + + + +0.01 +smooth + +8.536350408291952 +47.349695992089856 +416.48746905020005 +15.476775084009553 +88.67618154537821 +0 +120 +absolute + + + +0.01 +smooth + +8.5363504418013 +47.34969599295511 +416.5084650878926 +15.486921445459695 +88.67761552528032 +0 +120 +absolute + + + +0.01 +smooth + +8.53635047591105 +47.349695994105424 +416.5295116314041 +15.49711998200468 +88.67905640480261 +0 +120 +absolute + + + +0.01 +smooth + +8.536350510616133 +47.34969599553637 +416.55060795303154 +15.50737002949824 +88.68050408402442 +0 +120 +absolute + + + +0.01 +smooth + +8.536350545911507 +47.349695997243586 +416.57175332507256 +15.517670923794103 +88.68195846302513 +0 +120 +absolute + + + +0.01 +smooth + +8.536350581792101 +47.34969599922264 +416.59294701982424 +15.528022000746002 +88.68341944188403 +0 +120 +absolute + + + +0.01 +smooth + +8.536350618252863 +47.349696001469184 +416.6141883095841 +15.538422596207667 +88.6848869206805 +0 +120 +absolute + + + +0.01 +smooth + +8.53635065528873 +47.34969600397877 +416.6354764666493 +15.548872046032827 +88.68636079949388 +0 +120 +absolute + + + +0.01 +smooth + +8.536350692894647 +47.34969600674701 +416.6568107633169 +15.559369686075204 +88.68784097840347 +0 +120 +absolute + + + +0.01 +smooth + +8.536350731065554 +47.349696009769524 +416.6781904718847 +15.569914852188539 +88.68932735748868 +0 +120 +absolute + + + +0.01 +smooth + +8.536350769796387 +47.34969601304187 +416.6996148646495 +15.580506880226551 +88.69081983682878 +0 +120 +absolute + + + +0.01 +smooth + +8.536350809082098 +47.3496960165597 +416.72108321390897 +15.591145106042983 +88.69231831650318 +0 +120 +absolute + + + +0.01 +smooth + +8.536350848917618 +47.349696020318596 +416.7425947919602 +15.601828865491553 +88.69382269659118 +0 +120 +absolute + + + +0.01 +smooth + +8.536350889297891 +47.34969602431413 +416.7641488711004 +15.612557494425989 +88.6953328771721 +0 +120 +absolute + + + +0.01 +smooth + +8.536350930217864 +47.34969602854195 +416.78574472362715 +15.623330328700032 +88.69684875832539 +0 +120 +absolute + + + +0.01 +smooth + +8.536350971672471 +47.34969603299762 +416.80738162183746 +15.634146704167401 +88.69837024013026 +0 +120 +absolute + + + +0.01 +smooth + +8.536351013656661 +47.34969603767677 +416.82905883802886 +15.645005956681832 +88.69989722266614 +0 +120 +absolute + + + +0.01 +smooth + +8.536351056165365 +47.34969604257497 +416.85077564449847 +15.655907422097048 +88.70142960601231 +0 +120 +absolute + + + +0.01 +smooth + +8.536351099193533 +47.34969604768786 +416.87253131354373 +15.66685043626679 +88.70296729024817 +0 +120 +absolute + + + +0.01 +smooth + +8.536351142736105 +47.349696053011 +416.89432511746196 +15.677834335044782 +88.70451017545304 +0 +120 +absolute + + + +0.01 +smooth + +8.536351186788016 +47.349696058540005 +416.91615632855013 +15.688858454284741 +88.70605816170622 +0 +120 +absolute + + + +0.01 +smooth + +8.536351231344216 +47.34969606427049 +416.9380242191058 +15.699922129840418 +88.70761114908716 +0 +120 +absolute + + + +0.01 +smooth + +8.536351276399643 +47.34969607019806 +416.9599280614264 +15.711024697565529 +88.70916903767511 +0 +120 +absolute + + + +0.01 +smooth + +8.536351321949233 +47.34969607631827 +416.98186712780887 +15.722165493313803 +88.7107317275494 +0 +120 +absolute + + + +0.01 +smooth + +8.536351367987931 +47.34969608262677 +417.00384069055065 +15.733343852938974 +88.71229911878943 +0 +120 +absolute + + + +0.01 +smooth + +8.536351414510685 +47.34969608911914 +417.0258480219493 +15.744559112294777 +88.71387111147455 +0 +120 +absolute + + + +0.01 +smooth + +8.53635146151243 +47.349696095790996 +417.0478883943017 +15.755810607234933 +88.71544760568408 +0 +120 +absolute + + + +0.01 +smooth + +8.536351508988103 +47.34969610263791 +417.06996107990534 +15.767097673613172 +88.71702850149731 +0 +120 +absolute + + + +0.01 +smooth + +8.536351556932653 +47.3496961096555 +417.0920653510576 +15.778419647283224 +88.71861369899364 +0 +120 +absolute + + + +0.01 +smooth + +8.536351605341018 +47.34969611683938 +417.1142004800556 +15.789775864098825 +88.72020309825244 +0 +120 +absolute + + + +0.01 +smooth + +8.536351654208138 +47.34969612418513 +417.1363657391967 +15.801165659913694 +88.72179659935296 +0 +120 +absolute + + + +0.01 +smooth + +8.536351703528956 +47.34969613168834 +417.15856040077813 +15.812588370581567 +88.72339410237461 +0 +120 +absolute + + + +0.01 +smooth + +8.536351753298414 +47.349696139344665 +417.18078373709744 +15.824043331956178 +88.72499550739674 +0 +120 +absolute + + + +0.01 +smooth + +8.536351803511453 +47.34969614714964 +417.20303502045175 +15.835529879891249 +88.72660071449867 +0 +120 +absolute + + + +0.01 +smooth + +8.536351854163012 +47.34969615509891 +417.2253135231382 +15.847047350240508 +88.72820962375974 +0 +120 +absolute + + + +0.01 +smooth + +8.536351905248036 +47.349696163188064 +417.2476185174543 +15.858595078857693 +88.72982213525927 +0 +120 +absolute + + + +0.01 +smooth + +8.536351956761465 +47.3496961714127 +417.26994927569734 +15.87017240159653 +88.73143814907665 +0 +120 +absolute + + + +0.01 +smooth + +8.536352008698238 +47.34969617976841 +417.2923050701645 +15.881778654310747 +88.7330575652912 +0 +120 +absolute + + + +0.01 +smooth + +8.536352061053298 +47.34969618825081 +417.3146851731531 +15.893413172854071 +88.73468028398227 +0 +120 +absolute + + + +0.01 +smooth + +8.536352113821584 +47.349696196855504 +417.3370888569606 +15.905075293080237 +88.73630620522918 +0 +120 +absolute + + + +0.01 +smooth + +8.536352166998043 +47.34969620557807 +417.35951539388395 +15.916764350842973 +88.73793522911132 +0 +120 +absolute + + + +0.01 +smooth + +8.536352220577612 +47.34969621441414 +417.38196405622085 +15.928479681996006 +88.73956725570795 +0 +120 +absolute + + + +0.01 +smooth + +8.536352274555233 +47.34969622335928 +417.4044341162683 +15.940220622393069 +88.7412021850985 +0 +120 +absolute + + + +0.01 +smooth + +8.536352328925846 +47.34969623240912 +417.4269248463237 +15.95198650788789 +88.74283991736225 +0 +120 +absolute + + + +0.01 +smooth + +8.536352383684397 +47.34969624155925 +417.44943551868437 +15.963776674334198 +88.74448035257858 +0 +120 +absolute + + + +0.01 +smooth + +8.536352438825821 +47.34969625080525 +417.4719654056475 +15.97559045758572 +88.74612339082681 +0 +120 +absolute + + + +0.01 +smooth + +8.536352494345063 +47.349696260142764 +417.4945137795105 +15.987427193496195 +88.7477689321863 +0 +120 +absolute + + + +0.01 +smooth + +8.536352550237064 +47.34969626956737 +417.5170799125707 +15.999286217919346 +88.74941687673639 +0 +120 +absolute + + + +0.01 +smooth + +8.536352606496763 +47.349696279074664 +417.5396630771253 +16.0111668667089 +88.7510671245564 +0 +120 +absolute + + + +0.01 +smooth + +8.536352663119107 +47.34969628866025 +417.5622625454715 +16.02306847571859 +88.7527195757257 +0 +120 +absolute + + + +0.01 +smooth + +8.536352720099032 +47.34969629831973 +417.58487758990674 +16.034990380802142 +88.75437413032363 +0 +120 +absolute + + + +0.01 +smooth + +8.536352777431478 +47.349696308048706 +417.60750748272835 +16.046931917813296 +88.75603068842952 +0 +120 +absolute + + + +0.01 +smooth + +8.536352835111392 +47.34969631784277 +417.63015149623345 +16.05889242260577 +88.7576891501227 +0 +120 +absolute + + + +0.01 +smooth + +8.53635289313371 +47.34969632769755 +417.6528089027196 +16.070871231033294 +88.75934941548255 +0 +120 +absolute + + + +0.01 +smooth + +8.53635295149338 +47.34969633760861 +417.67547897448384 +16.082867678949604 +88.76101138458836 +0 +120 +absolute + + + +0.01 +smooth + +8.536353010185334 +47.34969634757158 +417.6981609838236 +16.094881102208426 +88.76267495751952 +0 +120 +absolute + + + +0.01 +smooth + +8.53635306920452 +47.349696357582054 +417.7208542030361 +16.106910836663495 +88.76434003435536 +0 +120 +absolute + + + +0.01 +smooth + +8.53635312854588 +47.349696367635616 +417.7435579044187 +16.118956218168535 +88.76600651517522 +0 +120 +absolute + + + +0.01 +smooth + +8.536353188204348 +47.349696377727895 +417.76627136026866 +16.131016582577274 +88.76767430005845 +0 +120 +absolute + + + +0.01 +smooth + +8.536353248174875 +47.349696387854465 +417.78899384288326 +16.143091265743443 +88.76934328908435 +0 +120 +absolute + + + +0.01 +smooth + +8.536353308452394 +47.349696398010934 +417.8117246245598 +16.15517960352078 +88.77101338233231 +0 +120 +absolute + + + +0.01 +smooth + +8.53635336903185 +47.34969640819292 +417.83446297759565 +16.167280931763 +88.77268447988166 +0 +120 +absolute + + + +0.01 +smooth + +8.536353429908187 +47.34969641839601 +417.85720817428796 +16.179394586323838 +88.77435648181174 +0 +120 +absolute + + + +0.01 +smooth + +8.536353491076342 +47.34969642861579 +417.8799594869342 +16.19151990305703 +88.77602928820187 +0 +120 +absolute + + + +0.01 +smooth + +8.536353552531256 +47.3496964388479 +417.9027161878316 +16.203656217816302 +88.77770279913146 +0 +120 +absolute + + + +0.01 +smooth + +8.536353614267874 +47.3496964490879 +417.92547754927733 +16.21580286645538 +88.77937691467977 +0 +120 +absolute + + + +0.01 +smooth + +8.536353676281134 +47.34969645933142 +417.9482428435688 +16.227959184828 +88.7810515349262 +0 +120 +absolute + + + +0.01 +smooth + +8.536353738565978 +47.34969646957405 +417.97101134300334 +16.240124508787883 +88.78272655995006 +0 +120 +absolute + + + +0.01 +smooth + +8.536353801117349 +47.34969647981137 +417.99378231987816 +16.252298174188763 +88.7844018898307 +0 +120 +absolute + + + +0.01 +smooth + +8.536353864096043 +47.34969649014175 +418.01656558999287 +16.2644906570752 +88.78607904997557 +0 +120 +absolute + + + +0.01 +smooth + +8.536353927838684 +47.3496965007733 +418.0393822121517 +16.276724251943374 +88.78776128834286 +0 +120 +absolute + + + +0.01 +smooth + +8.536353992349877 +47.34969651170918 +418.0622321921822 +16.288998957795794 +88.78944859857404 +0 +120 +absolute + + + +0.01 +smooth + +8.53635405762385 +47.34969652294624 +418.08511487744374 +16.30131407715082 +88.79114087267389 +0 +120 +absolute + + + +0.01 +smooth + +8.536354123654828 +47.349696534481225 +418.1080296152957 +16.313668912526794 +88.79283800264697 +0 +120 +absolute + + + +0.01 +smooth + +8.536354190437041 +47.34969654631094 +418.1309757530971 +16.326062766442057 +88.79453988049804 +0 +120 +absolute + + + +0.01 +smooth + +8.536354257964714 +47.34969655843216 +418.15395263820716 +16.338494941414954 +88.79624639823176 +0 +120 +absolute + + + +0.01 +smooth + +8.536354326232079 +47.34969657084165 +418.17695961798506 +16.35096473996383 +88.79795744785277 +0 +120 +absolute + + + +0.01 +smooth + +8.536354395233364 +47.34969658353624 +418.1999960397903 +16.363471464607038 +88.7996729213658 +0 +120 +absolute + + + +0.01 +smooth + +8.536354464962793 +47.34969659651269 +418.2230612509819 +16.37601441786292 +88.80139271077549 +0 +120 +absolute + + + +0.01 +smooth + +8.536354535414597 +47.34969660976782 +418.246154598919 +16.388592902249822 +88.80311670808655 +0 +120 +absolute + + + +0.01 +smooth + +8.536354606583007 +47.349696623298364 +418.26927543096116 +16.40120622028609 +88.80484480530362 +0 +120 +absolute + + + +0.01 +smooth + +8.536354678462246 +47.34969663710115 +418.2924230944674 +16.413853674490078 +88.80657689443143 +0 +120 +absolute + + + +0.01 +smooth + +8.53635475104654 +47.349696651172934 +418.3155969367969 +16.426534567380113 +88.80831286747458 +0 +120 +absolute + + + +0.01 +smooth + +8.536354824330125 +47.349696665510535 +418.33879630530896 +16.43924820147456 +88.81005261643782 +0 +120 +absolute + + + +0.01 +smooth + +8.536354898307225 +47.3496966801107 +418.362020547363 +16.451993879291763 +88.8117960333258 +0 +120 +absolute + + + +0.01 +smooth + +8.53635497297207 +47.34969669497026 +418.385269010318 +16.464770903350058 +88.8135430101432 +0 +120 +absolute + + + +0.01 +smooth + +8.536355048318887 +47.349696710085986 +418.4085410415333 +16.477578576167794 +88.81529343889471 +0 +120 +absolute + + + +0.01 +smooth + +8.536355124341895 +47.349696725454635 +418.4318359883678 +16.490416200263322 +88.81704721158499 +0 +120 +absolute + + + +0.01 +smooth + +8.53635520103534 +47.34969674107303 +418.45515319818134 +16.503283078154983 +88.81880422021871 +0 +120 +absolute + + + +0.01 +smooth + +8.536355278393437 +47.34969675693795 +418.4784920183328 +16.516178512361126 +88.82056435680057 +0 +120 +absolute + + + +0.01 +smooth + +8.536355356410416 +47.34969677304615 +418.50185179618126 +16.529101805400092 +88.82232751333522 +0 +120 +absolute + + + +0.01 +smooth + +8.53635543508051 +47.34969678939447 +418.52523187908645 +16.542052259790243 +88.82409358182738 +0 +120 +absolute + + + +0.01 +smooth + +8.536355514397943 +47.349696805979654 +418.5486316144071 +16.555029178049907 +88.82586245428168 +0 +120 +absolute + + + +0.01 +smooth + +8.536355594356941 +47.349696822798506 +418.5720503495025 +16.568031862697435 +88.82763402270281 +0 +120 +absolute + + + +0.01 +smooth + +8.536355674951741 +47.34969683984782 +418.59548743173235 +16.581059616251178 +88.82940817909552 +0 +120 +absolute + + + +0.01 +smooth + +8.536355756176558 +47.34969685712435 +418.6189422084553 +16.594111741229472 +88.83118481546435 +0 +120 +absolute + + + +0.01 +smooth + +8.536355838025631 +47.34969687462493 +418.642414027031 +16.607187540150683 +88.83296382381411 +0 +120 +absolute + + + +0.01 +smooth + +8.536355920493186 +47.349696892346316 +418.66590223481853 +16.620286315533136 +88.83474509614942 +0 +120 +absolute + + + +0.01 +smooth + +8.536356003573443 +47.34969691028528 +418.6894061791769 +16.63340736989518 +88.83652852447491 +0 +120 +absolute + + + +0.01 +smooth + +8.536356087260641 +47.34969692843865 +418.71292520746573 +16.646550005755174 +88.83831400079535 +0 +120 +absolute + + + +0.01 +smooth + +8.536356171549004 +47.34969694680318 +418.73645866704396 +16.659713525631453 +88.84010141711536 +0 +120 +absolute + + + +0.01 +smooth + +8.536356256432756 +47.349696965375664 +418.76000590527093 +16.672897232042367 +88.84189066543962 +0 +120 +absolute + + + +0.01 +smooth + +8.536356341906135 +47.34969698415292 +418.78356626950614 +16.686100427506265 +88.84368163777285 +0 +120 +absolute + + + +0.01 +smooth + +8.536356427963357 +47.34969700313167 +418.80713910710824 +16.69932241454148 +88.84547422611968 +0 +120 +absolute + + + +0.01 +smooth + +8.536356514598658 +47.34969702230875 +418.8307237654369 +16.712562495666376 +88.84726832248481 +0 +120 +absolute + + + +0.01 +smooth + +8.536356601806263 +47.34969704168094 +418.8543195918512 +16.72581997339929 +88.84906381887289 +0 +120 +absolute + + + +0.01 +smooth + +8.536356689580401 +47.34969706124502 +418.87792593371046 +16.739094150258566 +88.85086060728864 +0 +120 +absolute + + + +0.01 +smooth + +8.5363567779153 +47.34969708099776 +418.90154213837377 +16.752384328762552 +88.85265857973674 +0 +120 +absolute + + + +0.01 +smooth + +8.536356866805189 +47.349697100935984 +418.9251675532005 +16.765689811429592 +88.85445762822181 +0 +120 +absolute + + + +0.01 +smooth + +8.536356956244294 +47.34969712105644 +418.9488015255499 +16.779009900778043 +88.8562576447486 +0 +120 +absolute + + + +0.01 +smooth + +8.536357046226845 +47.34969714135593 +418.972443402781 +16.792343899326234 +88.85805852132171 +0 +120 +absolute + + + +0.01 +smooth + +8.53635713674707 +47.34969716183126 +418.9960925322532 +16.805691109592527 +88.85986014994589 +0 +120 +absolute + + + +0.01 +smooth + +8.536357227799195 +47.34969718247919 +419.0197482613257 +16.819050834095258 +88.86166242262578 +0 +120 +absolute + + + +0.01 +smooth + +8.53635731937745 +47.349697203296515 +419.04340993735775 +16.832422375352774 +88.86346523136606 +0 +120 +absolute + + + +0.01 +smooth + +8.536357411476063 +47.34969722428003 +419.0670769077086 +16.845805035883426 +88.86526846817142 +0 +120 +absolute + + + +0.01 +smooth + +8.536357504089262 +47.3496972454265 +419.0907485197373 +16.85919811820556 +88.86707202504653 +0 +120 +absolute + + + +0.01 +smooth + +8.536357597211273 +47.34969726673273 +419.11442412080333 +16.872600924837514 +88.86887579399607 +0 +120 +absolute + + + +0.01 +smooth + +8.53635769083633 +47.3496972881955 +419.13810305826576 +16.88601275829764 +88.87067966702472 +0 +120 +absolute + + + +0.01 +smooth + +8.536357784958653 +47.3496973098116 +419.16178467948384 +16.899432921104285 +88.87248353613714 +0 +120 +absolute + + + +0.01 +smooth + +8.536357879572474 +47.349697331577815 +419.18546833181694 +16.912860715775793 +88.87428729333803 +0 +120 +absolute + + + +0.01 +smooth + +8.536357974672024 +47.34969735349093 +419.2091533626242 +16.92629544483051 +88.87609083063205 +0 +120 +absolute + + + +0.01 +smooth + +8.536358070251525 +47.349697375547734 +419.2328391192648 +16.939736410786782 +88.87789404002389 +0 +120 +absolute + + + +0.01 +smooth + +8.53635816630521 +47.349697397745004 +419.2565249490979 +16.95318291616296 +88.87969681351822 +0 +120 +absolute + + + +0.01 +smooth + +8.536358262827303 +47.34969742007955 +419.28021019948295 +16.96663426347738 +88.88149904311973 +0 +120 +absolute + + + +0.01 +smooth + +8.536358359812038 +47.349697442548134 +419.3038942177791 +16.9800897552484 +88.8833006208331 +0 +120 +absolute + + + +0.01 +smooth + +8.536358457253638 +47.34969746514756 +419.3275763513455 +16.993548693994356 +88.88510143866299 +0 +120 +absolute + + + +0.01 +smooth + +8.536358555146332 +47.34969748787459 +419.35125594754146 +17.007010382233595 +88.88690138861409 +0 +120 +absolute + + + +0.01 +smooth + +8.53635865348435 +47.34969751072603 +419.3749323537262 +17.020474122484472 +88.88870036269105 +0 +120 +absolute + + + +0.01 +smooth + +8.536358752261917 +47.349697533698674 +419.3986049172589 +17.033939217265328 +88.89049825289858 +0 +120 +absolute + + + +0.01 +smooth + +8.536358851473263 +47.34969755678929 +419.4222729854989 +17.047404969094504 +88.89229495124137 +0 +120 +absolute + + + +0.01 +smooth + +8.536358951112618 +47.349697579994675 +419.4459359058053 +17.060870680490346 +88.89409034972405 +0 +120 +absolute + + + +0.01 +smooth + +8.536359051174205 +47.349697603311604 +419.4695930255375 +17.074335653971215 +88.89588434035133 +0 +120 +absolute + + + +0.01 +smooth + +8.536359151652258 +47.34969762673688 +419.49324369205453 +17.08779919205544 +88.8976768151279 +0 +120 +absolute + + + +0.01 +smooth + +8.536359252541 +47.34969765026728 +419.5168872527158 +17.101260597261373 +88.8994676660584 +0 +120 +absolute + + + +0.01 +smooth + +8.536359353834662 +47.3496976738996 +419.5405230548804 +17.11471917210736 +88.90125678514752 +0 +120 +absolute + + + +0.01 +smooth + +8.53635945552747 +47.349697697630596 +419.5641504459076 +17.128174219111752 +88.90304406439996 +0 +120 +absolute + + + +0.01 +smooth + +8.536359557613656 +47.3496977214571 +419.58776877315677 +17.141625040792892 +88.90482939582039 +0 +120 +absolute + + + +0.01 +smooth + +8.536359660087445 +47.34969774537587 +419.61137738398696 +17.15507093966912 +88.90661267141346 +0 +120 +absolute + + + +0.01 +smooth + +8.536359763042304 +47.34969776943539 +419.63498085022957 +17.168517528302463 +88.90839477310753 +0 +120 +absolute + + + +0.01 +smooth + +8.536359866880177 +47.349697793845095 +419.6586000189339 +17.18199000731539 +88.91017965299855 +0 +120 +absolute + + + +0.01 +smooth + +8.536359971638758 +47.349697818624854 +419.68223660804813 +17.19549038517081 +88.9119676211691 +0 +120 +absolute + + + +0.01 +smooth + +8.53636007731162 +47.34969784377159 +419.7058900148642 +17.209017863168615 +88.91375854713606 +0 +120 +absolute + + + +0.01 +smooth + +8.536360183892336 +47.34969786928218 +419.72955963667437 +17.222571642608692 +88.91555230041624 +0 +120 +absolute + + + +0.01 +smooth + +8.536360291374478 +47.34969789515354 +419.75324487077023 +17.236150924790913 +88.91734875052649 +0 +120 +absolute + + + +0.01 +smooth + +8.536360399751622 +47.3496979213826 +419.7769451144443 +17.24975491101519 +88.91914776698367 +0 +120 +absolute + + + +0.01 +smooth + +8.536360509017333 +47.34969794796621 +419.80065976498804 +17.2633828025814 +88.92094921930456 +0 +120 +absolute + + + +0.01 +smooth + +8.536360619165192 +47.34969797490135 +419.82438821969413 +17.27703380078944 +88.92275297700607 +0 +120 +absolute + + + +0.01 +smooth + +8.536360730188768 +47.34969800218488 +419.84812987585417 +17.290707106939188 +88.92455890960505 +0 +120 +absolute + + + +0.01 +smooth + +8.536360842081637 +47.349698029813716 +419.8718841307604 +17.30440192233054 +88.92636688661834 +0 +120 +absolute + + + +0.01 +smooth + +8.536360954837365 +47.349698057784764 +419.89565038170485 +17.31811744826339 +88.92817677756275 +0 +120 +absolute + + + +0.01 +smooth + +8.536361068449532 +47.349698086094925 +419.91942802597936 +17.331852886037613 +88.92998845195514 +0 +120 +absolute + + + +0.01 +smooth + +8.536361182911705 +47.34969811474112 +419.9432164608761 +17.345607436953113 +88.93180177931235 +0 +120 +absolute + + + +0.01 +smooth + +8.536361298217457 +47.34969814372024 +419.96701508368716 +17.35938030230977 +88.9336166291512 +0 +120 +absolute + + + +0.01 +smooth + +8.536361414360368 +47.349698173029196 +419.9908232917045 +17.373170683407476 +88.93543287098858 +0 +120 +absolute + + + +0.01 +smooth + +8.536361531334007 +47.34969820266492 +420.0146404822203 +17.38697778154612 +88.93725037434137 +0 +120 +absolute + + + +0.01 +smooth + +8.536361649131939 +47.34969823262427 +420.03846605252625 +17.400800798025582 +88.9390690087263 +0 +120 +absolute + + + +0.01 +smooth + +8.536361767747746 +47.34969826290418 +420.06229939991465 +17.414638934145767 +88.9408886436603 +0 +120 +absolute + + + +0.01 +smooth + +8.536361887174998 +47.349698293501554 +420.0861399216775 +17.428491391206556 +88.94270914866016 +0 +120 +absolute + + + +0.01 +smooth + +8.536362007407265 +47.349698324413296 +420.1099870151068 +17.442357370507835 +88.94453039324279 +0 +120 +absolute + + + +0.01 +smooth + +8.536362128438121 +47.349698355636306 +420.13384007749454 +17.456236073349498 +88.94635224692496 +0 +120 +absolute + + + +0.01 +smooth + +8.536362250261146 +47.34969838716752 +420.157698506133 +17.470126701031436 +88.94817457922359 +0 +120 +absolute + + + +0.01 +smooth + +8.536362372869904 +47.34969841900382 +420.18156169831394 +17.484028454853537 +88.94999725965548 +0 +120 +absolute + + + +0.01 +smooth + +8.536362496257969 +47.349698451142096 +420.2054290513295 +17.49794053611568 +88.95182015773744 +0 +120 +absolute + + + +0.01 +smooth + +8.536362620418917 +47.34969848357928 +420.2292999624716 +17.511862146117767 +88.95364314298637 +0 +120 +absolute + + + +0.01 +smooth + +8.536362745346315 +47.349698516312266 +420.25317382903245 +17.525792486159677 +88.9554660849191 +0 +120 +absolute + + + +0.01 +smooth + +8.536362871033742 +47.349698549337965 +420.277050048304 +17.539730757541307 +88.95728885305245 +0 +120 +absolute + + + +0.01 +smooth + +8.536362997474766 +47.34969858265329 +420.3009280175782 +17.553676161562535 +88.95911131690329 +0 +120 +absolute + + + +0.01 +smooth + +8.536363124662964 +47.34969861625514 +420.32480713414725 +17.567627899523266 +88.96093334598848 +0 +120 +absolute + + + +0.01 +smooth + +8.536363252591908 +47.34969865014044 +420.34868679530325 +17.581585172723383 +88.96275480982483 +0 +120 +absolute + + + +0.01 +smooth + +8.536363381255166 +47.34969868430604 +420.3725663983378 +17.595547182462767 +88.96457557792917 +0 +120 +absolute + + + +0.01 +smooth + +8.536363510646316 +47.34969871874891 +420.39644534054355 +17.609513130041314 +88.9663955198184 +0 +120 +absolute + + + +0.01 +smooth + +8.536363640758928 +47.34969875346594 +420.42032301921205 +17.623482216758916 +88.96821450500936 +0 +120 +absolute + + + +0.01 +smooth + +8.536363771586576 +47.349698788454 +420.44419883163545 +17.63745364391545 +88.97003240301882 +0 +120 +absolute + + + +0.01 +smooth + +8.536363903122831 +47.349698823710035 +420.46807217510593 +17.651426612810816 +88.97184908336368 +0 +120 +absolute + + + +0.01 +smooth + +8.536364035361267 +47.34969885923093 +420.49194244691535 +17.6654003247449 +88.97366441556079 +0 +120 +absolute + + + +0.01 +smooth + +8.536364168295458 +47.34969889501362 +420.51580904435593 +17.679373981017594 +88.97547826912695 +0 +120 +absolute + + + +0.01 +smooth + +8.536364301918974 +47.34969893105498 +420.5396713647195 +17.69334678292878 +88.97729051357906 +0 +120 +absolute + + + +0.01 +smooth + +8.536364436225389 +47.349698967351934 +420.5635288052982 +17.707317931778356 +88.97910101843392 +0 +120 +absolute + + + +0.01 +smooth + +8.536364571208276 +47.34969900390138 +420.58738076338403 +17.721286628866203 +88.98090965320841 +0 +120 +absolute + + + +0.01 +smooth + +8.536364706861207 +47.34969904070022 +420.6112266362692 +17.735252075492212 +88.98271628741935 +0 +120 +absolute + + + +0.01 +smooth + +8.536364843177756 +47.34969907774538 +420.63506582124546 +17.749213472956278 +88.98452079058359 +0 +120 +absolute + + + +0.01 +smooth + +8.536364980151495 +47.34969911503375 +420.658897715605 +17.763170022558278 +88.98632303221795 +0 +120 +absolute + + + +0.01 +smooth + +8.536365117775995 +47.34969915256224 +420.6827217166399 +17.777120925598116 +88.98812288183935 +0 +120 +absolute + + + +0.01 +smooth + +8.536365256044832 +47.34969919032775 +420.70653722164207 +17.791065383375667 +88.98992020896452 +0 +120 +absolute + + + +0.01 +smooth + +8.536365394951577 +47.3496992283272 +420.7303436279036 +17.80500259719083 +88.9917148831104 +0 +120 +absolute + + + +0.01 +smooth + +8.536365534489802 +47.34969926655748 +420.75414033271653 +17.818931768343486 +88.9935067737938 +0 +120 +absolute + + + +0.01 +smooth + +8.53636567465308 +47.349699305015506 +420.77792673337296 +17.83285209813353 +88.99529575053154 +0 +120 +absolute + + + +0.01 +smooth + +8.536365815434984 +47.34969934369819 +420.80170222716475 +17.84676278786085 +88.9970816828405 +0 +120 +absolute + + + +0.01 +smooth + +8.536365956829087 +47.34969938260243 +420.825466211384 +17.860663038825336 +88.99886444023751 +0 +120 +absolute + + + +0.01 +smooth + +8.536366098828962 +47.349699421725134 +420.84921808332297 +17.874552052326873 +89.00064389223942 +0 +120 +absolute + + + +0.01 +smooth + +8.53636624142818 +47.3496994610632 +420.8729572402734 +17.888429029665353 +89.00241990836307 +0 +120 +absolute + + + +0.01 +smooth + +8.536366384620317 +47.34969950061355 +420.89668307952746 +17.902293172140666 +89.00419235812528 +0 +120 +absolute + + + +0.01 +smooth + +8.536366528398943 +47.34969954037308 +420.92039499837716 +17.916143681052702 +89.00596111104295 +0 +120 +absolute + + + +0.01 +smooth + +8.536366672757632 +47.3496995803387 +420.94409239411453 +17.929979757701343 +89.00772603663285 +0 +120 +absolute + + + +0.01 +smooth + +8.536366817689956 +47.349699620507316 +420.9677746640316 +17.943800603386478 +89.0094870044119 +0 +120 +absolute + + + +0.01 +smooth + +8.536366963189487 +47.349699660875835 +420.9914412054204 +17.957605419408008 +89.0112438838969 +0 +120 +absolute + + + +0.01 +smooth + +8.536367109249797 +47.34969970144116 +421.015091415573 +17.971393407065815 +89.01299654460468 +0 +120 +absolute + + + +0.01 +smooth + +8.536367255864462 +47.349699742200194 +421.03872469178145 +17.985163767659788 +89.01474485605212 +0 +120 +absolute + + + +0.01 +smooth + +8.536367403027054 +47.34969978314986 +421.06234043133765 +17.99891570248981 +89.01648868775605 +0 +120 +absolute + + + +0.01 +smooth + +8.536367550731145 +47.349699824287036 +421.08593803153383 +18.012648412855782 +89.01822790923332 +0 +120 +absolute + + + +0.01 +smooth + +8.536367698970306 +47.34969986560867 +421.10951688966185 +18.02636110005758 +89.01996239000076 +0 +120 +absolute + + + +0.01 +smooth + +8.53636784773811 +47.349699907111614 +421.13307640301394 +18.040052965395105 +89.02169199957524 +0 +120 +absolute + + + +0.01 +smooth + +8.536367997028133 +47.34969994879283 +421.15661596888185 +18.053723210168243 +89.02341660747356 +0 +120 +absolute + + + +0.01 +smooth + +8.536368146833944 +47.34969999064918 +421.18013498455787 +18.067371035676874 +89.0251360832126 +0 +120 +absolute + + + +0.01 +smooth + +8.536368297149117 +47.34970003267759 +421.20363284733395 +18.0809956432209 +89.02685029630922 +0 +120 +absolute + + + +0.01 +smooth + +8.536368447967225 +47.34970007487496 +421.2271089545021 +18.094596234100198 +89.0285591162802 +0 +120 +absolute + + + +0.01 +smooth + +8.536368599281843 +47.349700117238214 +421.2505627033544 +18.108172009614666 +89.03026241264243 +0 +120 +absolute + + + +0.01 +smooth + +8.53636875113199 +47.34970015978706 +421.2739956659139 +18.121725564599153 +89.03196065723371 +0 +120 +absolute + + + +0.01 +smooth + +8.536368903931445 +47.34970020272965 +421.29742736821174 +18.135287415295203 +89.03365927341473 +0 +120 +absolute + + + +0.01 +smooth + +8.536369057775484 +47.34970024611417 +421.3208621365821 +18.148864181901313 +89.03535943520777 +0 +120 +absolute + + + +0.01 +smooth + +8.536369212657094 +47.34970028993748 +421.3442994065066 +18.162454835339673 +89.03706095817584 +0 +120 +absolute + + + +0.01 +smooth + +8.536369368569254 +47.349700334196385 +421.3677386134659 +18.17605834653245 +89.03876365788186 +0 +120 +absolute + + + +0.01 +smooth + +8.536369525504954 +47.349700378887746 +421.3911791929412 +18.189673686401843 +89.04046734988884 +0 +120 +absolute + + + +0.01 +smooth + +8.536369683457169 +47.34970042400838 +421.4146205804132 +18.203299825870015 +89.0421718497597 +0 +120 +absolute + + + +0.01 +smooth + +8.536369842418882 +47.34970046955511 +421.43806221136316 +18.216935735859142 +89.04387697305737 +0 +120 +absolute + + + +0.01 +smooth + +8.536370002383078 +47.34970051552481 +421.46150352127205 +18.23058038729143 +89.04558253534485 +0 +120 +absolute + + + +0.01 +smooth + +8.536370163342742 +47.34970056191428 +421.48494394562096 +18.244232751089026 +89.04728835218509 +0 +120 +absolute + + + +0.01 +smooth + +8.53637032529085 +47.34970060872036 +421.5083829198905 +18.25789179817413 +89.048994239141 +0 +120 +absolute + + + +0.01 +smooth + +8.536370488220388 +47.34970065593989 +421.5318198795621 +18.271556499468904 +89.0507000117756 +0 +120 +absolute + + + +0.01 +smooth + +8.536370652124345 +47.34970070356971 +421.55525426011656 +18.28522582589555 +89.05240548565183 +0 +120 +absolute + + + +0.01 +smooth + +8.536370816995696 +47.34970075160664 +421.57868549703494 +18.298898748376235 +89.05411047633265 +0 +120 +absolute + + + +0.01 +smooth + +8.536370982827425 +47.349700800047515 +421.6021130257981 +18.312574237833132 +89.05581479938095 +0 +120 +absolute + + + +0.01 +smooth + +8.536371149612515 +47.34970084888918 +421.6255362818873 +18.32625126518844 +89.05751827035981 +0 +120 +absolute + + + +0.01 +smooth + +8.536371317343951 +47.34970089812846 +421.6489547007834 +18.339928801364323 +89.05922070483211 +0 +120 +absolute + + + +0.01 +smooth + +8.536371486014714 +47.34970094776218 +421.67236771796723 +18.353605817282958 +89.06092191836076 +0 +120 +absolute + + + +0.01 +smooth + +8.536371655617785 +47.3497009977872 +421.69577476892005 +18.367281283866536 +89.0626217265088 +0 +120 +absolute + + + +0.01 +smooth + +8.536371826146151 +47.34970104820035 +421.7191752891229 +18.38095417203724 +89.06431994483921 +0 +120 +absolute + + + +0.01 +smooth + +8.536371997592791 +47.349701098998445 +421.7425687140566 +18.394623452717227 +89.06601638891482 +0 +120 +absolute + + + +0.01 +smooth + +8.536372169950688 +47.34970115017831 +421.76595447920204 +18.40828809682869 +89.0677108742987 +0 +120 +absolute + + + +0.01 +smooth + +8.536372343212827 +47.34970120173683 +421.7893320200406 +18.42194707529382 +89.06940321655377 +0 +120 +absolute + + + +0.01 +smooth + +8.536372517372191 +47.349701253670794 +421.81270077205295 +18.43559935903478 +89.071093231243 +0 +120 +absolute + + + +0.01 +smooth + +8.536372692421756 +47.34970130597702 +421.8360601707201 +18.44924391897375 +89.07278073392928 +0 +120 +absolute + + + +0.01 +smooth + +8.536372868354512 +47.34970135865239 +421.85940965152326 +18.46287972603292 +89.07446554017564 +0 +120 +absolute + + + +0.01 +smooth + +8.536373045163444 +47.349701411693744 +421.8827486499435 +18.476505751134468 +89.07614746554505 +0 +120 +absolute + + + +0.01 +smooth + +8.536373222841524 +47.349701465097844 +421.90607660146145 +18.49012096520056 +89.07782632560041 +0 +120 +absolute + + + +0.01 +smooth + +8.536373401381741 +47.34970151886159 +421.92939294155826 +18.503724339153386 +89.07950193590467 +0 +120 +absolute + + + +0.01 +smooth + +8.536373580777083 +47.34970157298181 +421.9526971057151 +18.517314843915134 +89.08117411202085 +0 +120 +absolute + + + +0.01 +smooth + +8.53637376102052 +47.3497016274553 +421.9759885294129 +18.53089145040797 +89.08284266951188 +0 +120 +absolute + + + +0.01 +smooth + +8.536373942105048 +47.34970168227893 +421.9992666481325 +18.544453129554075 +89.08450742394068 +0 +120 +absolute + + + +0.01 +smooth + +8.536374124023641 +47.34970173744952 +422.022530897355 +18.55799885227563 +89.08616819087025 +0 +120 +absolute + + + +0.01 +smooth + +8.536374306769286 +47.34970179296391 +422.0457807125615 +18.57152758949482 +89.08782478586355 +0 +120 +absolute + + + +0.01 +smooth + +8.536374490334962 +47.349701848818924 +422.0690155292329 +18.58503831213382 +89.0894770244835 +0 +120 +absolute + + + +0.01 +smooth + +8.536374674713654 +47.34970190501141 +422.09223478285014 +18.598529991114805 +89.09112472229306 +0 +120 +absolute + + + +0.01 +smooth + +8.536374859898345 +47.34970196153818 +422.11543790889436 +18.61200159735996 +89.09276769485523 +0 +120 +absolute + + + +0.01 +smooth + +8.536375045882018 +47.34970201839609 +422.1386243428465 +18.625452101791467 +89.09440575773291 +0 +120 +absolute + + + +0.01 +smooth + +8.536375232657655 +47.34970207558196 +422.16179352018753 +18.6388804753315 +89.09603872648911 +0 +120 +absolute + + + +0.01 +smooth + +8.536375420218238 +47.34970213309264 +422.18494487639856 +18.652285688902243 +89.09766641668676 +0 +120 +absolute + + + +0.01 +smooth + +8.536375608556751 +47.349702190924944 +422.20807784696035 +18.66566671342587 +89.09928864388881 +0 +120 +absolute + + + +0.01 +smooth + +8.536375797666174 +47.349702249075726 +422.23119186735426 +18.679022519824567 +89.10090522365823 +0 +120 +absolute + + + +0.01 +smooth + +8.536375987539493 +47.349702307541804 +422.25428637306095 +18.69235207902051 +89.10251597155798 +0 +120 +absolute + + + +0.01 +smooth + +8.53637617816969 +47.34970236632002 +422.2773607995616 +18.705654361935878 +89.104120703151 +0 +120 +absolute + + + +0.01 +smooth + +8.536376369549746 +47.3497024254072 +422.30041458233717 +18.71892833949285 +89.10571923400026 +0 +120 +absolute + + + +0.01 +smooth + +8.536376561672647 +47.34970248480019 +422.3234471568687 +18.732172982613605 +89.10731137966872 +0 +120 +absolute + + + +0.01 +smooth + +8.536376754531371 +47.34970254449582 +422.3464579586371 +18.74538726222033 +89.1088969557193 +0 +120 +absolute + + + +0.01 +smooth + +8.536376948118905 +47.34970260449092 +422.3694464231234 +18.758570149235197 +89.11047577771501 +0 +120 +absolute + + + +0.01 +smooth + +8.536377142428229 +47.34970266478233 +422.39241198580874 +18.77172061458039 +89.11204766121878 +0 +120 +absolute + + + +0.01 +smooth + +8.536377337452327 +47.34970272536687 +422.41535408217385 +18.784837629178078 +89.11361242179358 +0 +120 +absolute + + + +0.01 +smooth + +8.536377533184183 +47.34970278624138 +422.4382721477001 +18.797920163950455 +89.11516987500232 +0 +120 +absolute + + + +0.01 +smooth + +8.536377729616776 +47.34970284740271 +422.4611656178681 +18.810967189819692 +89.11671983640802 +0 +120 +absolute + + + +0.01 +smooth + +8.536377926743093 +47.349702908847675 +422.4840339281591 +18.823977677707965 +89.11826212157362 +0 +120 +absolute + + + +0.01 +smooth + +8.536378124556112 +47.34970297057312 +422.50687651405406 +18.83695059853747 +89.11979654606205 +0 +120 +absolute + + + +0.01 +smooth + +8.536378323048819 +47.34970303257587 +422.5296928110339 +18.84988492323037 +89.12132292543627 +0 +120 +absolute + + + +0.01 +smooth + +8.536378522214196 +47.349703094852764 +422.5524822545798 +18.86277962270885 +89.12284107525927 +0 +120 +absolute + + + +0.01 +smooth + +8.536378722045226 +47.34970315740064 +422.57524428017246 +18.875633667895087 +89.12435081109399 +0 +120 +absolute + + + +0.01 +smooth + +8.536378922534892 +47.34970322021633 +422.5979783232931 +18.888446029711268 +89.12585194850337 +0 +120 +absolute + + + +0.01 +smooth + +8.536379123676177 +47.34970328329666 +422.62068381942265 +18.901215679079566 +89.12734430305038 +0 +120 +absolute + + + +0.01 +smooth + +8.53637932546206 +47.34970334663848 +422.6433602040422 +18.913941586922164 +89.12882769029798 +0 +120 +absolute + + + +0.01 +smooth + +8.536379527885527 +47.3497034102386 +422.6660069126327 +18.926622724161234 +89.13030192580912 +0 +120 +absolute + + + +0.01 +smooth + +8.536379730939561 +47.34970347409387 +422.68862338067515 +18.939258061718967 +89.13176682514674 +0 +120 +absolute + + + +0.01 +smooth + +8.536379934617145 +47.349703538201126 +422.71120904365046 +18.95184657051753 +89.13322220387383 +0 +120 +absolute + + + +0.01 +smooth + +8.536380138911259 +47.34970360255719 +422.7337633370397 +18.964387221479114 +89.13466787755334 +0 +120 +absolute + + + +0.01 +smooth + +8.536380343814887 +47.34970366715892 +422.756285696324 +18.976878985525893 +89.13610366174822 +0 +120 +absolute + + + +0.01 +smooth + +8.536380549321015 +47.34970373200313 +422.7787755569842 +18.98932083358005 +89.13752937202143 +0 +120 +absolute + + + +0.01 +smooth + +8.53638075542262 +47.349703797086654 +422.80123235450134 +19.001711736563756 +89.13894482393593 +0 +120 +absolute + + + +0.01 +smooth + +8.536380962112688 +47.34970386240633 +422.8236555243564 +19.014050665399203 +89.14034983305464 +0 +120 +absolute + + + +0.01 +smooth + +8.536381169384203 +47.349703927958984 +422.84604450203045 +19.02633659100856 +89.14174421494057 +0 +120 +absolute + + + +0.01 +smooth + +8.53638137724154 +47.349703993747205 +422.86839925585303 +19.038569776014445 +89.14312806056068 +0 +120 +absolute + + + +0.01 +smooth + +8.536381586053745 +47.349704059957425 +422.8907368139468 +19.05079168757448 +89.14451023650963 +0 +120 +absolute + + + +0.01 +smooth + +8.536381795995743 +47.349704126678304 +422.9130651695026 +19.06302148037903 +89.14589482597094 +0 +120 +absolute + + + +0.01 +smooth + +8.536382007059997 +47.34970419390653 +422.93538379396733 +19.075257584187373 +89.14728148908507 +0 +120 +absolute + + + +0.01 +smooth + +8.536382219238996 +47.34970426163885 +422.9576921587885 +19.08749842875879 +89.14866988599269 +0 +120 +absolute + + + +0.01 +smooth + +8.536382432525222 +47.34970432987197 +422.97998973541297 +19.099742443852545 +89.15005967683426 +0 +120 +absolute + + + +0.01 +smooth + +8.536382646911148 +47.3497043986026 +423.00227599528796 +19.111988059227944 +89.15145052175042 +0 +120 +absolute + + + +0.01 +smooth + +8.536382862389255 +47.34970446782745 +423.0245504098603 +19.124233704644254 +89.15284208088165 +0 +120 +absolute + + + +0.01 +smooth + +8.536383078952017 +47.34970453754321 +423.04681245057714 +19.13647780986074 +89.15423401436851 +0 +120 +absolute + + + +0.01 +smooth + +8.53638329659192 +47.34970460774665 +423.069061588886 +19.148718804636705 +89.15562598235162 +0 +120 +absolute + + + +0.01 +smooth + +8.53638351530144 +47.349704678434456 +423.0912972962336 +19.16095511873142 +89.15701764497148 +0 +120 +absolute + + + +0.01 +smooth + +8.53638373507305 +47.34970474960332 +423.1135190440671 +19.173185181904152 +89.15840866236863 +0 +120 +absolute + + + +0.01 +smooth + +8.536383955899241 +47.34970482125001 +423.13572630383374 +19.18540742391421 +89.15979869468373 +0 +120 +absolute + + + +0.01 +smooth + +8.536384177772481 +47.34970489337116 +423.1579185469804 +19.19762027452084 +89.16118740205718 +0 +120 +absolute + + + +0.01 +smooth + +8.536384400685254 +47.349704965963554 +423.18009524495454 +19.209822163483345 +89.16257444462964 +0 +120 +absolute + + + +0.01 +smooth + +8.536384624630033 +47.34970503902389 +423.2022558692029 +19.22201152056099 +89.16395948254164 +0 +120 +absolute + + + +0.01 +smooth + +8.536384849599303 +47.34970511254883 +423.22439989117254 +19.234186775513063 +89.16534217593372 +0 +120 +absolute + + + +0.01 +smooth + +8.53638507558554 +47.349705186535175 +423.2465267823109 +19.246346358098847 +89.16672218494648 +0 +120 +absolute + + + +0.01 +smooth + +8.536385302581227 +47.349705260979576 +423.2686360140649 +19.25848869807761 +89.16809916972042 +0 +120 +absolute + + + +0.01 +smooth + +8.536385530578835 +47.34970533587877 +423.2907270578816 +19.27061222520863 +89.16947279039611 +0 +120 +absolute + + + +0.01 +smooth + +8.53638575957085 +47.34970541122948 +423.3127993852083 +19.28271536925121 +89.17084270711416 +0 +120 +absolute + + + +0.01 +smooth + +8.536385989549744 +47.34970548702839 +423.3348524674918 +19.294796559964606 +89.17220858001507 +0 +120 +absolute + + + +0.01 +smooth + +8.536386220508001 +47.34970556327223 +423.3568857761796 +19.306854227108104 +89.17357006923936 +0 +120 +absolute + + + +0.01 +smooth + +8.5363864524381 +47.349705639957726 +423.37889878271835 +19.318886800440993 +89.17492683492767 +0 +120 +absolute + + + +0.01 +smooth + +8.536386685332516 +47.34970571708155 +423.4008909585554 +19.330892709722534 +89.17627853722048 +0 +120 +absolute + + + +0.01 +smooth + +8.53638691918373 +47.34970579464047 +423.42286177513785 +19.342870384712022 +89.1776248362584 +0 +120 +absolute + + + +0.01 +smooth + +8.536387153984219 +47.34970587263117 +423.44481070391276 +19.35481825516873 +89.17896539218196 +0 +120 +absolute + + + +0.01 +smooth + +8.536387389726462 +47.34970595105035 +423.4667372163272 +19.366734750851933 +89.18029986513172 +0 +120 +absolute + + + +0.01 +smooth + +8.536387626402945 +47.34970602989478 +423.48864078382843 +19.378618301520927 +89.18162791524824 +0 +120 +absolute + + + +0.01 +smooth + +8.536387864006134 +47.34970610916111 +423.51052087786337 +19.390467336934975 +89.18294920267206 +0 +120 +absolute + + + +0.01 +smooth + +8.536388102528516 +47.34970618884607 +423.5323769698791 +19.402280286853358 +89.18426338754374 +0 +120 +absolute + + + +0.01 +smooth + +8.53638834196257 +47.34970626894642 +423.55420853132296 +19.41405558103537 +89.18557013000388 +0 +120 +absolute + + + +0.01 +smooth + +8.53638858230077 +47.3497063494588 +423.5760150336418 +19.42579164924027 +89.18686909019293 +0 +120 +absolute + + + +0.01 +smooth + +8.536388823535601 +47.34970643038 +423.597795948283 +19.437486921227357 +89.18815992825157 +0 +120 +absolute + + + +0.01 +smooth + +8.536389065659536 +47.34970651170667 +423.6195507466934 +19.449139826755896 +89.18944230432025 +0 +120 +absolute + + + +0.01 +smooth + +8.536389308665054 +47.34970659343554 +423.64127890032006 +19.460748795585175 +89.19071587853956 +0 +120 +absolute + + + +0.01 +smooth + +8.53638955254464 +47.349706675563354 +423.66297988061024 +19.47231225747447 +89.19198031105009 +0 +120 +absolute + + + +0.01 +smooth + +8.536389797290765 +47.349706758086796 +423.68465315901113 +19.483828642183056 +89.19323526199236 +0 +120 +absolute + + + +0.01 +smooth + +8.536390042895913 +47.34970684100258 +423.7062982069697 +19.495296379470222 +89.19448039150694 +0 +120 +absolute + + + +0.01 +smooth + +8.53639028935256 +47.34970692430745 +423.72791449593296 +19.506713899095242 +89.19571535973438 +0 +120 +absolute + + + +0.01 +smooth + +8.536390536653187 +47.34970700799808 +423.7495014973482 +19.518079630817397 +89.19693982681522 +0 +120 +absolute + + + +0.01 +smooth + +8.536390784790271 +47.34970709207121 +423.77105868266244 +19.529392004395966 +89.19815345289004 +0 +120 +absolute + + + +0.01 +smooth + +8.536391033756288 +47.34970717652354 +423.7925855233227 +19.54064944959023 +89.1993558980994 +0 +120 +absolute + + + +0.01 +smooth + +8.536391283543724 +47.349707261351796 +423.8140814907763 +19.551850396159466 +89.20054682258382 +0 +120 +absolute + + + +0.01 +smooth + +8.536391534145054 +47.34970734655268 +423.83554605647015 +19.562993273862958 +89.20172588648386 +0 +120 +absolute + + + +0.01 +smooth + +8.536391785552755 +47.349707432122905 +423.8569786918514 +19.57407651245998 +89.20289274994012 +0 +120 +absolute + + + +0.01 +smooth + +8.536392037759306 +47.349707518059205 +423.8783788683671 +19.58509854170981 +89.20404707309311 +0 +120 +absolute + + + +0.01 +smooth + +8.536392290757188 +47.34970760435827 +423.89974605746454 +19.596057791371734 +89.2051885160834 +0 +120 +absolute + + + +0.01 +smooth + +8.536392544538877 +47.34970769101683 +423.9210797305906 +19.60695269120503 +89.20631673905154 +0 +120 +absolute + + + +0.01 +smooth + +8.536392799096856 +47.349707778031586 +423.9423793591925 +19.617781670968974 +89.2074314021381 +0 +120 +absolute + + + +0.01 +smooth + +8.5363930544236 +47.34970786539927 +423.96364441471735 +19.628543160422854 +89.2085321654836 +0 +120 +absolute + + + +0.01 +smooth + +8.536393310511592 +47.34970795311658 +423.9848743686122 +19.639235589325942 +89.20961868922862 +0 +120 +absolute + + + +0.01 +smooth + +8.536393567353302 +47.34970804118022 +424.0060686923242 +19.649857387437514 +89.21069063351375 +0 +120 +absolute + + + +0.01 +smooth + +8.536393824941218 +47.34970812958692 +424.0272268573004 +19.660406984516857 +89.21174765847948 +0 +120 +absolute + + + +0.01 +smooth + +8.536394083267815 +47.349708218333404 +424.0483483349879 +19.67088281032325 +89.21278942426639 +0 +120 +absolute + + + +0.01 +smooth + +8.53639434232557 +47.349708307416364 +424.06943259683385 +19.681283294615966 +89.21381559101505 +0 +120 +absolute + + + +0.01 +smooth + +8.536394602106965 +47.349708396832526 +424.09047911428536 +19.69160686715429 +89.21482581886602 +0 +120 +absolute + + + +0.01 +smooth + +8.536394862604478 +47.349708486578606 +424.1114873587894 +19.701851957697507 +89.21581976795981 +0 +120 +absolute + + + +0.01 +smooth + +8.536395123810584 +47.349708576651295 +424.1324568017933 +19.712016996004888 +89.21679709843703 +0 +120 +absolute + + + +0.01 +smooth + +8.536395385717768 +47.34970866704734 +424.15338691474403 +19.72210041183571 +89.21775747043819 +0 +120 +absolute + + + +0.01 +smooth + +8.536395648318504 +47.34970875776343 +424.1742771690886 +19.732100634949262 +89.21870054410385 +0 +120 +absolute + + + +0.01 +smooth + +8.536395911605274 +47.3497088487963 +424.1951270362743 +19.742016095104812 +89.2196259795746 +0 +120 +absolute + + + +0.01 +smooth + +8.536396175570554 +47.34970894014264 +424.2159359877481 +19.751845222061654 +89.22053343699099 +0 +120 +absolute + + + +0.01 +smooth + +8.536396440206824 +47.34970903179918 +424.23670349495717 +19.76158644557906 +89.22142257649354 +0 +120 +absolute + + + +0.01 +smooth + +8.536396705506561 +47.349709123762636 +424.2574290293486 +19.771238195416302 +89.22229305822282 +0 +120 +absolute + + + +0.01 +smooth + +8.536396971462247 +47.34970921602971 +424.27811206236936 +19.780798901332677 +89.22314454231939 +0 +120 +absolute + + + +0.01 +smooth + +8.536397238066359 +47.34970930859711 +424.29875206546683 +19.790266993087446 +89.2239766889238 +0 +120 +absolute + + + +0.01 +smooth + +8.536397505311378 +47.349709401461574 +424.3193485100879 +19.7996409004399 +89.22478915817663 +0 +120 +absolute + + + +0.01 +smooth + +8.536397773189776 +47.3497094946198 +424.3399008676797 +19.808919053149314 +89.2255816102184 +0 +120 +absolute + + + +0.01 +smooth + +8.536398041694039 +47.34970958806851 +424.3604086096894 +19.818099880974973 +89.22635370518968 +0 +120 +absolute + + + +0.01 +smooth + +8.536398311095676 +47.34970968194803 +424.38088463290717 +19.827248763143555 +89.2271175475472 +0 +120 +absolute + + + +0.01 +smooth + +8.536398581665956 +47.34970977639862 +424.4013418585759 +19.836429868430198 +89.22788517479667 +0 +120 +absolute + + + +0.01 +smooth + +8.536398853396989 +47.349709871416906 +424.4217797948226 +19.845639810916865 +89.22865614665211 +0 +120 +absolute + + + +0.01 +smooth + +8.536399126280882 +47.34970996699948 +424.4421979497735 +19.85487520468551 +89.22943002282764 +0 +120 +absolute + + + +0.01 +smooth + +8.536399400309756 +47.349710063142965 +424.4625958315555 +19.864132663818104 +89.23020636303727 +0 +120 +absolute + + + +0.01 +smooth + +8.536399675475709 +47.34971015984394 +424.48297294829473 +19.873408802396597 +89.23098472699505 +0 +120 +absolute + + + +0.01 +smooth + +8.536399951770868 +47.34971025709902 +424.50332880811834 +19.88270023450296 +89.23176467441499 +0 +120 +absolute + + + +0.01 +smooth + +8.53640022918733 +47.3497103549048 +424.5236629191525 +19.892003574219153 +89.2325457650112 +0 +120 +absolute + + + +0.01 +smooth + +8.536400507717218 +47.3497104532579 +424.5439747895238 +19.90131543562713 +89.23332755849768 +0 +120 +absolute + + + +0.01 +smooth + +8.536400787352632 +47.34971055215492 +424.5642639273591 +19.91063243280886 +89.23410961458852 +0 +120 +absolute + + + +0.01 +smooth + +8.536401068085686 +47.349710651592446 +424.5845298407847 +19.91995117984629 +89.2348914929977 +0 +120 +absolute + + + +0.01 +smooth + +8.5364013499085 +47.34971075156713 +424.60477203792743 +19.9292682908214 +89.23567275343937 +0 +120 +absolute + + + +0.01 +smooth + +8.536401632813178 +47.34971085207553 +424.6249900269137 +19.938580379816145 +89.23645295562753 +0 +120 +absolute + + + +0.01 +smooth + +8.536401916791824 +47.34971095311425 +424.64518331586993 +19.94788406091247 +89.23723165927616 +0 +120 +absolute + + + +0.01 +smooth + +8.53640220183656 +47.34971105467993 +424.66535141292303 +19.957175948192358 +89.23800842409938 +0 +120 +absolute + + + +0.01 +smooth + +8.536402487939496 +47.349711156769146 +424.68549382619955 +19.966452655737754 +89.23878280981124 +0 +120 +absolute + + + +0.01 +smooth + +8.536402775092741 +47.34971125937853 +424.7056100638258 +19.97571079763063 +89.2395543761258 +0 +120 +absolute + + + +0.01 +smooth + +8.536403063288402 +47.34971136250464 +424.7256996339286 +19.98494698795294 +89.24032268275705 +0 +120 +absolute + + + +0.01 +smooth + +8.5364033525186 +47.349711466144136 +424.7457620446346 +19.99415784078665 +89.2410872894191 +0 +120 +absolute + + + +0.01 +smooth + +8.536403642775438 +47.3497115702936 +424.76579680407025 +20.003339970213723 +89.24184775582593 +0 +120 +absolute + + + +0.01 +smooth + +8.536403934051027 +47.349711674949596 +424.78580342036184 +20.012489990316098 +89.24260364169162 +0 +120 +absolute + + + +0.01 +smooth + +8.536404226337483 +47.3497117801088 +424.8057814016364 +20.021604515175763 +89.24335450673024 +0 +120 +absolute + + + +0.01 +smooth + +8.536404519626917 +47.34971188576778 +424.8257302560206 +20.03068015887467 +89.24409991065586 +0 +120 +absolute + + + +0.01 +smooth + +8.536404813911432 +47.34971199192312 +424.8456494916406 +20.039713535494776 +89.24483941318245 +0 +120 +absolute + + + +0.01 +smooth + +8.536405109183148 +47.349712098571445 +424.8655386166231 +20.04870125911804 +89.2455725740241 +0 +120 +absolute + + + +0.01 +smooth + +8.536405405434174 +47.349712205709395 +424.88539713909483 +20.057639943826437 +89.24629895289486 +0 +120 +absolute + + + +0.01 +smooth + +8.53640570265662 +47.34971231333353 +424.9052245671823 +20.06652620370192 +89.24701810950879 +0 +120 +absolute + + + +0.01 +smooth + +8.536406000842595 +47.34971242144044 +424.92502040901184 +20.07535665282643 +89.24772960357987 +0 +120 +absolute + + + +0.01 +smooth + +8.536406299984213 +47.349712530026764 +424.9447841727105 +20.084127905281964 +89.24843299482224 +0 +120 +absolute + + + +0.01 +smooth + +8.53640660007359 +47.34971263908912 +424.96451536640484 +20.092836575150464 +89.24912784294993 +0 +120 +absolute + + + +0.01 +smooth + +8.536406901102826 +47.34971274862407 +424.9842134982209 +20.10147927651388 +89.24981370767692 +0 +120 +absolute + + + +0.01 +smooth + +8.53640720306404 +47.34971285862823 +425.0038780762856 +20.110052623454187 +89.25049014871729 +0 +120 +absolute + + + +0.01 +smooth + +8.536407505949342 +47.34971296909825 +425.02350860872565 +20.118553230053354 +89.25115672578517 +0 +120 +absolute + + + +0.01 +smooth + +8.536407809750841 +47.34971308003067 +425.04310460366753 +20.12697771039333 +89.25181299859449 +0 +120 +absolute + + + +0.01 +smooth + +8.536408114460649 +47.349713191422126 +425.06266556923765 +20.135322678556072 +89.25245852685936 +0 +120 +absolute + + + +0.01 +smooth + +8.536408420070877 +47.349713303269226 +425.0821910135628 +20.14358474862355 +89.25309287029381 +0 +120 +absolute + + + +0.01 +smooth + +8.53640872657364 +47.34971341556857 +425.10168044476944 +20.15176053467772 +89.2537155886119 +0 +120 +absolute + + + +0.01 +smooth + +8.536409033961043 +47.349713528316755 +425.12113337098435 +20.159846650800542 +89.25432624152768 +0 +120 +absolute + + + +0.01 +smooth + +8.536409342225198 +47.34971364151038 +425.14054930033393 +20.16783971107398 +89.25492438875516 +0 +120 +absolute + + + +0.01 +smooth + +8.536409651358221 +47.34971375514608 +425.15992774094474 +20.175736329579998 +89.25550959000844 +0 +120 +absolute + + + +0.01 +smooth + +8.53640996135222 +47.34971386922043 +425.1792682009435 +20.183533120400554 +89.25608140500152 +0 +120 +absolute + + + +0.01 +smooth + +8.536410272199307 +47.34971398373005 +425.19857018845664 +20.1912266976176 +89.25663939344851 +0 +120 +absolute + + + +0.01 +smooth + +8.536410583891591 +47.34971409867153 +425.2178332116109 +20.19881367531311 +89.2571831150634 +0 +120 +absolute + + + +0.01 +smooth + +8.536410896421184 +47.34971421404149 +425.23705677853275 +20.206290667569043 +89.25771212956026 +0 +120 +absolute + + + +0.01 +smooth + +8.536411209780198 +47.34971432983653 +425.2562403973488 +20.213654288467353 +89.25822599665314 +0 +120 +absolute + + + +0.01 +smooth + +8.536411523960744 +47.349714446053255 +425.2753835761856 +20.220901152090008 +89.25872427605609 +0 +120 +absolute + + + +0.01 +smooth + +8.536411838954933 +47.34971456268826 +425.2944858231698 +20.228027872518965 +89.25920652748314 +0 +120 +absolute + + + +0.01 +smooth + +8.536412154754878 +47.34971467973816 +425.313546646428 +20.235031063836182 +89.25967231064836 +0 +120 +absolute + + + +0.01 +smooth + +8.536412471352687 +47.34971479719957 +425.3325655540866 +20.241907340123625 +89.26012118526577 +0 +120 +absolute + + + +0.01 +smooth + +8.53641278874047 +47.34971491506906 +425.3515420542725 +20.248653315463255 +89.26055271104946 +0 +120 +absolute + + + +0.01 +smooth + +8.536413106910343 +47.34971503334327 +425.37047565511193 +20.255265603937026 +89.26096644771344 +0 +120 +absolute + + + +0.01 +smooth + +8.536413425854414 +47.34971515201879 +425.38936586473176 +20.261740819626908 +89.26136195497179 +0 +120 +absolute + + + +0.01 +smooth + +8.536413745564793 +47.34971527109222 +425.4082121912584 +20.268075576614862 +89.26173879253852 +0 +120 +absolute + + + +0.01 +smooth + +8.536414066033597 +47.34971539056016 +425.42701414281845 +20.27426648898284 +89.26209652012771 +0 +120 +absolute + + + +0.01 +smooth + +8.536414387252933 +47.349715510419244 +425.44577122753856 +20.28031017081281 +89.26243469745341 +0 +120 +absolute + + + +0.01 +smooth + +8.536414709214908 +47.34971563066605 +425.46448295354526 +20.28620323618673 +89.26275288422963 +0 +120 +absolute + + + +0.01 +smooth + +8.536415031911638 +47.34971575129719 +425.4831488289651 +20.291942299186562 +89.26305064017046 +0 +120 +absolute + + + +0.01 +smooth + +8.536415355335237 +47.349715872309275 +425.50176836192486 +20.297523973894265 +89.26332752498992 +0 +120 +absolute + + + +0.01 +smooth + +8.536415679477809 +47.34971599369889 +425.5203410605509 +20.302944874391805 +89.26358309840208 +0 +120 +absolute + + + +0.01 +smooth + +8.53641600433147 +47.349716115462655 +425.53886643296977 +20.308201614761135 +89.26381692012097 +0 +120 +absolute + + + +0.01 +smooth + +8.536416329888329 +47.34971623759717 +425.5573439873083 +20.313290809084222 +89.26402854986063 +0 +120 +absolute + + + +0.01 +smooth + +8.536416656140497 +47.34971636009905 +425.5757732316929 +20.31820907144303 +89.26421754733514 +0 +120 +absolute + + + +0.01 +smooth + +8.53641698308009 +47.34971648296488 +425.5941536742501 +20.322953015919513 +89.26438347225852 +0 +120 +absolute + + + +0.01 +smooth + +8.536417310699212 +47.349716606191286 +425.6124848231067 +20.32751925659563 +89.26452588434485 +0 +120 +absolute + + + +0.01 +smooth + +8.53641763898998 +47.349716729774855 +425.63076618638905 +20.331904407553353 +89.26464434330812 +0 +120 +absolute + + + +0.01 +smooth + +8.536417967944498 +47.34971685371221 +425.6489972722238 +20.33610508287463 +89.26473840886244 +0 +120 +absolute + + + +0.01 +smooth + +8.536418297554887 +47.34971697799993 +425.66717758873756 +20.340117896641427 +89.26480764072184 +0 +120 +absolute + + + +0.01 +smooth + +8.536418627813251 +47.34971710263464 +425.68530664405694 +20.34393946293571 +89.26485159860034 +0 +120 +absolute + + + +0.01 +smooth + +8.536418958711701 +47.34971722761294 +425.7033839463086 +20.347566395839433 +89.26486984221202 +0 +120 +absolute + + + +0.01 +smooth + +8.536419290413246 +47.349717353022164 +425.72141779921907 +20.351057206933515 +89.26486600709913 +0 +120 +absolute + + + +0.01 +smooth + +8.536419623262375 +47.34971747904608 +425.73942587023225 +20.35453730636834 +89.26484838428688 +0 +120 +absolute + + + +0.01 +smooth + +8.536419957261705 +47.34971760568686 +425.75740825103037 +20.35800926001766 +89.2648173859121 +0 +120 +absolute + + + +0.01 +smooth + +8.536420292403168 +47.349717732941066 +425.7753644837981 +20.36147177914274 +89.26477317338383 +0 +120 +absolute + + + +0.01 +smooth + +8.536420628678702 +47.34971786080522 +425.79329411072024 +20.36492357500485 +89.26471590811104 +0 +120 +absolute + + + +0.01 +smooth + +8.536420966080243 +47.34971798927589 +425.81119667398116 +20.36836335886524 +89.26464575150278 +0 +120 +absolute + + + +0.01 +smooth + +8.536421304599717 +47.34971811834957 +425.82907171576556 +20.37178984198518 +89.26456286496797 +0 +120 +absolute + + + +0.01 +smooth + +8.53642164422907 +47.34971824802284 +425.84691877825827 +20.375201735625943 +89.26446740991567 +0 +120 +absolute + + + +0.01 +smooth + +8.536421984960228 +47.349718378292216 +425.8647374036436 +20.378597751048783 +89.26435954775476 +0 +120 +absolute + + + +0.01 +smooth + +8.536422326785132 +47.349718509154265 +425.8825271341063 +20.38197659951498 +89.26423943989437 +0 +120 +absolute + + + +0.01 +smooth + +8.536422669695716 +47.349718640605495 +425.9002875118309 +20.385336992285776 +89.26410724774341 +0 +120 +absolute + + + +0.01 +smooth + +8.536423013683912 +47.349718772642476 +425.9180180790022 +20.38867764062246 +89.26396313271087 +0 +120 +absolute + + + +0.01 +smooth + +8.536423358741658 +47.34971890526171 +425.93571837780473 +20.391997255786286 +89.26380725620574 +0 +120 +absolute + + + +0.01 +smooth + +8.536423704860884 +47.34971903845977 +425.9533879504229 +20.395294549038507 +89.26363977963703 +0 +120 +absolute + + + +0.01 +smooth + +8.536424052033531 +47.34971917223318 +425.9710263390417 +20.398568231640404 +89.26346086441376 +0 +120 +absolute + + + +0.01 +smooth + +8.53642440025153 +47.3497193065785 +425.98863308584544 +20.401817014853236 +89.26327067194485 +0 +120 +absolute + + + +0.01 +smooth + +8.536424749506814 +47.349719441492226 +426.0062077330187 +20.40503960993826 +89.26306936363933 +0 +120 +absolute + + + +0.01 +smooth + +8.536425099791323 +47.34971957697093 +426.0237498227463 +20.408234728156756 +89.26285710090617 +0 +120 +absolute + + + +0.01 +smooth + +8.536425451096989 +47.34971971301116 +426.0412588972129 +20.411401080769984 +89.2626340451544 +0 +120 +absolute + + + +0.01 +smooth + +8.536425803415748 +47.34971984960943 +426.0587344986029 +20.414537379039196 +89.26240035779298 +0 +120 +absolute + + + +0.01 +smooth + +8.536426156739532 +47.34971998676229 +426.0761761691012 +20.417642334225665 +89.26215620023092 +0 +120 +absolute + + + +0.01 +smooth + +8.536426511060277 +47.34972012446629 +426.09358345089197 +20.42071465759066 +89.2619017338772 +0 +120 +absolute + + + +0.01 +smooth + +8.536426866369922 +47.34972026271796 +426.11095588616024 +20.42375306039544 +89.2616371201408 +0 +120 +absolute + + + +0.01 +smooth + +8.536427222660398 +47.349720401513835 +426.1282930170904 +20.426756253901278 +89.26136252043074 +0 +120 +absolute + + + +0.01 +smooth + +8.536427579923634 +47.34972054085044 +426.14559438586707 +20.429722949369417 +89.26107809615593 +0 +120 +absolute + + + +0.01 +smooth + +8.53642793815158 +47.34972068072436 +426.16285953467514 +20.432651858061153 +89.26078400872547 +0 +120 +absolute + + + +0.01 +smooth + +8.536428297336156 +47.349720821132095 +426.1800880056988 +20.435541691237727 +89.2604804195483 +0 +120 +absolute + + + +0.01 +smooth + +8.536428657469306 +47.34972096207021 +426.197279341123 +20.438391160160414 +89.26016749003341 +0 +120 +absolute + + + +0.01 +smooth + +8.536429018542961 +47.349721103535224 +426.2144330831321 +20.441198976090472 +89.25984538158977 +0 +120 +absolute + + + +0.01 +smooth + +8.536429380549057 +47.349721245523696 +426.2315487739111 +20.443963850289173 +89.25951425562643 +0 +120 +absolute + + + +0.01 +smooth + +8.536429743479527 +47.34972138803214 +426.24862595564406 +20.446684494017774 +89.25917427355232 +0 +120 +absolute + + + +0.01 +smooth + +8.536430107326305 +47.3497215310571 +426.26566417051583 +20.44935961853754 +89.25882559677645 +0 +120 +absolute + + + +0.01 +smooth + +8.536430472081335 +47.34972167459516 +426.2826629607115 +20.45198793510975 +89.25846838670783 +0 +120 +absolute + + + +0.01 +smooth + +8.536430837736537 +47.34972181864279 +426.299621868415 +20.45456815499564 +89.25810280475542 +0 +120 +absolute + + + +0.01 +smooth + +8.536431204283856 +47.349721963196586 +426.31654043581125 +20.457098989456505 +89.25772901232823 +0 +120 +absolute + + + +0.01 +smooth + +8.536431571715227 +47.34972210825307 +426.3334182050848 +20.459579149753594 +89.25734717083526 +0 +120 +absolute + + + +0.01 +smooth + +8.53643194002258 +47.349722253808764 +426.3502547184204 +20.462007347148173 +89.25695744168549 +0 +120 +absolute + + + +0.01 +smooth + +8.536432309197853 +47.349722399860234 +426.36704951800243 +20.464382292901508 +89.25655998628788 +0 +120 +absolute + + + +0.01 +smooth + +8.536432679232979 +47.349722546403996 +426.3838021460157 +20.466702698274865 +89.25615496605145 +0 +120 +absolute + + + +0.01 +smooth + +8.536433050119893 +47.34972269343661 +426.4005121446448 +20.468967274529504 +89.2557425423852 +0 +120 +absolute + + + +0.01 +smooth + +8.536433421850532 +47.3497228409546 +426.4171790560742 +20.4711747329267 +89.25532287669813 +0 +120 +absolute + + + +0.01 +smooth + +8.536433794416828 +47.34972298895452 +426.43380242248867 +20.473323784727704 +89.2548961303992 +0 +120 +absolute + + + +0.01 +smooth + +8.53643416781072 +47.34972313743289 +426.45038178607274 +20.475413141193787 +89.2544624648974 +0 +120 +absolute + + + +0.01 +smooth + +8.53643454202414 +47.349723286386265 +426.4669166890111 +20.477441513586214 +89.25402204160173 +0 +120 +absolute + + + +0.01 +smooth + +8.536434917049021 +47.349723435811185 +426.4834066734883 +20.479407613166252 +89.25357502192118 +0 +120 +absolute + + + +0.01 +smooth + +8.5364352928773 +47.34972358570418 +426.49985128168896 +20.481310151195157 +89.25312156726476 +0 +120 +absolute + + + +0.01 +smooth + +8.53643566950091 +47.34972373606179 +426.51625005579774 +20.483147838934205 +89.25266183904142 +0 +120 +absolute + + + +0.01 +smooth + +8.536436046911792 +47.349723886880575 +426.53260253799925 +20.48491938764465 +89.2521959986602 +0 +120 +absolute + + + +0.01 +smooth + +8.536436425101872 +47.34972403815705 +426.548908270478 +20.486623508587765 +89.25172420753003 +0 +120 +absolute + + + +0.01 +smooth + +8.53643680406309 +47.349724189887766 +426.5651667954187 +20.488258913024808 +89.25124662705997 +0 +120 +absolute + + + +0.01 +smooth + +8.536437183787381 +47.34972434206925 +426.581377655006 +20.48982431221705 +89.25076341865895 +0 +120 +absolute + + + +0.01 +smooth + +8.536437564266679 +47.349724494698066 +426.59754039142433 +20.491318417425752 +89.25027474373599 +0 +120 +absolute + + + +0.01 +smooth + +8.536437945492917 +47.349724647770735 +426.6136545468586 +20.492739939912177 +89.24978076370009 +0 +120 +absolute + + + +0.01 +smooth + +8.536438327458033 +47.3497248012838 +426.6297196634931 +20.494087590937593 +89.24928163996023 +0 +120 +absolute + + + +0.01 +smooth + +8.536438710153957 +47.349724955233796 +426.64573528351275 +20.49536008176326 +89.24877753392536 +0 +120 +absolute + + + +0.01 +smooth + +8.536439093572632 +47.349725109617275 +426.66170094910194 +20.49655612365045 +89.24826860700455 +0 +120 +absolute + + + +0.01 +smooth + +8.536439477705985 +47.349725264430774 +426.6776162024454 +20.497674427860417 +89.24775502060673 +0 +120 +absolute + + + +0.01 +smooth + +8.536439862545954 +47.34972541967082 +426.6934805857277 +20.49871370565444 +89.24723693614091 +0 +120 +absolute + + + +0.01 +smooth + +8.536440248084473 +47.34972557533396 +426.7092936411334 +20.49967266829377 +89.2467145150161 +0 +120 +absolute + + + +0.01 +smooth + +8.536440634313479 +47.34972573141674 +426.72505491084723 +20.50055002703968 +89.24618791864123 +0 +120 +absolute + + + +0.01 +smooth + +8.536441021224904 +47.349725887915696 +426.74076393705377 +20.501344493153425 +89.24565730842536 +0 +120 +absolute + + + +0.01 +smooth + +8.536441408810685 +47.34972604482734 +426.7564202619376 +20.502054777896284 +89.24512284577744 +0 +120 +absolute + + + +0.01 +smooth + +8.536441797062755 +47.34972620214826 +426.77202342768334 +20.50267959252951 +89.24458469210649 +0 +120 +absolute + + + +0.01 +smooth + +8.53644218597305 +47.349726359874964 +426.78757297647553 +20.503217648314376 +89.24404300882145 +0 +120 +absolute + + + +0.01 +smooth + +8.536442575533504 +47.34972651800402 +426.803068450499 +20.503667656512135 +89.24349795733136 +0 +120 +absolute + + + +0.01 +smooth + +8.536442965736054 +47.34972667653193 +426.81850939193816 +20.50402832838406 +89.24294969904521 +0 +120 +absolute + + + +0.01 +smooth + +8.536443356572631 +47.34972683545525 +426.83389534297777 +20.50429837519142 +89.24239839537194 +0 +120 +absolute + + + +0.01 +smooth + +8.536443748035174 +47.34972699477053 +426.84922584580227 +20.50447650819547 +89.24184420772059 +0 +120 +absolute + + + +0.01 +smooth + +8.536444140115615 +47.3497271544743 +426.8645004425964 +20.504561438657483 +89.24128729750014 +0 +120 +absolute + + + +0.01 +smooth + +8.536444532896022 +47.34972731461283 +426.8797237994585 +20.50452983423345 +89.24072102858844 +0 +120 +absolute + + + +0.01 +smooth + +8.536444926738879 +47.349727475387134 +426.8949165348424 +20.504291721294734 +89.24011779493455 +0 +120 +absolute + + + +0.01 +smooth + +8.536445321676178 +47.34972763681582 +426.9100804939834 +20.50384043687916 +89.23947514276146 +0 +120 +absolute + + + +0.01 +smooth + +8.536445717699856 +47.34972779889541 +426.9252152455275 +20.503179236358772 +89.2387936505387 +0 +120 +absolute + + + +0.01 +smooth + +8.536446114801853 +47.34972796162243 +426.9403203581212 +20.50231137510557 +89.23807389673586 +0 +120 +absolute + + + +0.01 +smooth + +8.536446512974102 +47.34972812499339 +426.9553954004103 +20.501240108491604 +89.2373164598225 +0 +120 +absolute + + + +0.01 +smooth + +8.536446912208545 +47.3497282890048 +426.9704399410407 +20.49996869188887 +89.23652191826811 +0 +120 +absolute + + + +0.01 +smooth + +8.536447312497115 +47.349728453653185 +426.98545354865894 +20.498500380669416 +89.23569085054235 +0 +120 +absolute + + + +0.01 +smooth + +8.536447713831754 +47.34972861893508 +427.0004357919109 +20.496838430205255 +89.23482383511472 +0 +120 +absolute + + + +0.01 +smooth + +8.536448116204395 +47.34972878484696 +427.0153862394427 +20.494986095868413 +89.2339214504548 +0 +120 +absolute + + + +0.01 +smooth + +8.536448519606973 +47.34972895138535 +427.03030445990055 +20.492946633030904 +89.2329842750321 +0 +120 +absolute + + + +0.01 +smooth + +8.536448924031431 +47.349729118546804 +427.0451900219303 +20.49072329706477 +89.23201288731623 +0 +120 +absolute + + + +0.01 +smooth + +8.536449329469704 +47.3497292863278 +427.0600424941783 +20.488319343342013 +89.23100786577675 +0 +120 +absolute + + + +0.01 +smooth + +8.536449735913726 +47.349729454724866 +427.07486144529037 +20.485738027234678 +89.22996978888317 +0 +120 +absolute + + + +0.01 +smooth + +8.536450143355436 +47.349729623734525 +427.0896464439129 +20.482982604114774 +89.22889923510508 +0 +120 +absolute + + + +0.01 +smooth + +8.536450551786773 +47.349729793353305 +427.1043970586919 +20.480056329354333 +89.22779678291201 +0 +120 +absolute + + + +0.01 +smooth + +8.536450961199675 +47.349729963577694 +427.1191128582734 +20.476962458325378 +89.22666301077356 +0 +120 +absolute + + + +0.01 +smooth + +8.536451371586072 +47.34973013440421 +427.13379341130343 +20.473704246399922 +89.22549849715926 +0 +120 +absolute + + + +0.01 +smooth + +8.53645178293791 +47.349730305829404 +427.14843828642853 +20.470284948950006 +89.22430382053871 +0 +120 +absolute + + + +0.01 +smooth + +8.536452195247117 +47.34973047784976 +427.16304705229413 +20.466707821347637 +89.22307955938138 +0 +120 +absolute + + + +0.01 +smooth + +8.536452608505638 +47.349730650461794 +427.1776192775468 +20.462976118964846 +89.22182629215689 +0 +120 +absolute + + + +0.01 +smooth + +8.536453022705405 +47.34973082366204 +427.19215453083245 +20.459093097173664 +89.2205445973348 +0 +120 +absolute + + + +0.01 +smooth + +8.53645343783836 +47.34973099744702 +427.2066523807973 +20.455062011346104 +89.21923505338466 +0 +120 +absolute + + + +0.01 +smooth + +8.536453853896436 +47.349731171813225 +427.2211123960874 +20.450886116854196 +89.217898238776 +0 +120 +absolute + + + +0.01 +smooth + +8.536454270871568 +47.34973134675718 +427.2355341453487 +20.446568669069954 +89.21653473197843 +0 +120 +absolute + + + +0.01 +smooth + +8.536454688755702 +47.349731522275434 +427.24991719722766 +20.442112923365425 +89.21514511146147 +0 +120 +absolute + + + +0.01 +smooth + +8.536455107540766 +47.349731698364444 +427.2642611203699 +20.4375221351126 +89.21372995569465 +0 +120 +absolute + + + +0.01 +smooth + +8.536455527218699 +47.349731875020765 +427.27856548342186 +20.432799559683527 +89.21228984314757 +0 +120 +absolute + + + +0.01 +smooth + +8.536455947781441 +47.3497320522409 +427.29282985502954 +20.42794845245022 +89.21082535228977 +0 +120 +absolute + + + +0.01 +smooth + +8.53645636922093 +47.3497322300214 +427.3070538038392 +20.42297206878471 +89.20933706159087 +0 +120 +absolute + + + +0.01 +smooth + +8.5364567915291 +47.34973240835873 +427.3212368984965 +20.41787366405901 +89.20782554952034 +0 +120 +absolute + + + +0.01 +smooth + +8.536457214697887 +47.34973258724944 +427.33537870764803 +20.41265649364515 +89.20629139454775 +0 +120 +absolute + + + +0.01 +smooth + +8.53645763871923 +47.349732766690046 +427.34947879993973 +20.40732381291516 +89.20473517514272 +0 +120 +absolute + + + +0.01 +smooth + +8.536458063585066 +47.34973294667704 +427.3635367440175 +20.401878877241046 +89.20315746977474 +0 +120 +absolute + + + +0.01 +smooth + +8.536458489287334 +47.34973312720696 +427.37755210852765 +20.39632494199485 +89.20155885691337 +0 +120 +absolute + + + +0.01 +smooth + +8.536458915817967 +47.34973330827632 +427.3915244621162 +20.390665262548588 +89.19993991502822 +0 +120 +absolute + + + +0.01 +smooth + +8.536459343168904 +47.34973348988162 +427.4054533734293 +20.38490309427428 +89.19830122258881 +0 +120 +absolute + + + +0.01 +smooth + +8.536459771332083 +47.349733672019404 +427.4193384111131 +20.379041692543957 +89.19664335806472 +0 +120 +absolute + + + +0.01 +smooth + +8.536460200299441 +47.34973385468617 +427.4331791438135 +20.373084312729638 +89.19496689992548 +0 +120 +absolute + + + +0.01 +smooth + +8.536460630062916 +47.34973403787845 +427.44697514017673 +20.36703421020335 +89.19327242664065 +0 +120 +absolute + + + +0.01 +smooth + +8.536461060614442 +47.34973422159273 +427.4607259688489 +20.36089464033711 +89.19156051667981 +0 +120 +absolute + + + +0.01 +smooth + +8.536461491945957 +47.349734405825565 +427.47443119847605 +20.354668858502954 +89.18983174851252 +0 +120 +absolute + + + +0.01 +smooth + +8.536461924049398 +47.34973459057345 +427.48809039770435 +20.348360120072897 +89.1880867006083 +0 +120 +absolute + + + +0.01 +smooth + +8.536462356916704 +47.3497347758329 +427.5017031351799 +20.34197168041896 +89.18632595143674 +0 +120 +absolute + + + +0.01 +smooth + +8.536462790539812 +47.34973496160043 +427.51526897954875 +20.335506794913176 +89.18455007946739 +0 +120 +absolute + + + +0.01 +smooth + +8.536463224910657 +47.34973514787258 +427.52878749945705 +20.328968718927563 +89.18275966316979 +0 +120 +absolute + + + +0.01 +smooth + +8.536463660021177 +47.34973533464584 +427.5422582635508 +20.322360707834143 +89.18095528101352 +0 +120 +absolute + + + +0.01 +smooth + +8.536464095863309 +47.34973552191673 +427.55568084047616 +20.315686017004943 +89.17913751146814 +0 +120 +absolute + + + +0.01 +smooth + +8.53646453242899 +47.34973570968178 +427.5690547988793 +20.308947901811987 +89.1773069330032 +0 +120 +absolute + + + +0.01 +smooth + +8.53646496971016 +47.34973589793751 +427.5823797074062 +20.302149617627297 +89.17546412408824 +0 +120 +absolute + + + +0.01 +smooth + +8.53646540769875 +47.34973608668041 +427.59565513470295 +20.295294419822895 +89.17360966319285 +0 +120 +absolute + + + +0.01 +smooth + +8.536465846386701 +47.349736275907006 +427.60888064941577 +20.288385563770806 +89.17174412878657 +0 +120 +absolute + + + +0.01 +smooth + +8.536466285765952 +47.34973646561383 +427.62205582019067 +20.28142630484306 +89.16986809933891 +0 +120 +absolute + + + +0.01 +smooth + +8.536466725828436 +47.3497366557974 +427.6351802156738 +20.274419898411672 +89.16798215331954 +0 +120 +absolute + + + +0.01 +smooth + +8.53646716656609 +47.34973684645421 +427.6482534045112 +20.26736959984867 +89.1660868691979 +0 +120 +absolute + + + +0.01 +smooth + +8.536467607970856 +47.349737037580795 +427.6612749553491 +20.260278664526076 +89.16418282544365 +0 +120 +absolute + + + +0.01 +smooth + +8.536468050034667 +47.349737229173655 +427.67424443683336 +20.253150347815918 +89.16227060052626 +0 +120 +absolute + + + +0.01 +smooth + +8.536468492749462 +47.34973742122933 +427.68716141761035 +20.245987905090217 +89.16035077291535 +0 +120 +absolute + + + +0.01 +smooth + +8.536468936107175 +47.34973761374432 +427.700025466326 +20.23879459172099 +89.15842392108043 +0 +120 +absolute + + + +0.01 +smooth + +8.536469380099746 +47.34973780671514 +427.7128361516264 +20.23157366308027 +89.15649062349108 +0 +120 +absolute + + + +0.01 +smooth + +8.536469824719113 +47.349738000138316 +427.7255930421578 +20.22432837454008 +89.15455145861688 +0 +120 +absolute + + + +0.01 +smooth + +8.53647026995721 +47.34973819401035 +427.73829570656613 +20.21706198147244 +89.15260700492733 +0 +120 +absolute + + + +0.01 +smooth + +8.536470715805974 +47.34973838832778 +427.7509437134976 +20.209777739249375 +89.15065784089207 +0 +120 +absolute + + + +0.01 +smooth + +8.536471162257344 +47.34973858308712 +427.76353663159824 +20.202478903242906 +89.14870454498057 +0 +120 +absolute + + + +0.01 +smooth + +8.536471609303257 +47.34973877828486 +427.7760740295141 +20.195168728825063 +89.14674769566244 +0 +120 +absolute + + + +0.01 +smooth + +8.53647205693565 +47.34973897391753 +427.7885554758915 +20.18785047136786 +89.14478787140723 +0 +120 +absolute + + + +0.01 +smooth + +8.536472505146461 +47.34973916998168 +427.8009805393763 +20.18052738624333 +89.14282565068447 +0 +120 +absolute + + + +0.01 +smooth + +8.536472953927625 +47.34973936647378 +427.81334878861475 +20.173202728823497 +89.14086161196377 +0 +120 +absolute + + + +0.01 +smooth + +8.53647340327108 +47.34973956339035 +427.8256597922528 +20.165879754480383 +89.13889633371464 +0 +120 +absolute + + + +0.01 +smooth + +8.53647385320582 +47.3497397607493 +427.83791550389253 +20.158539374160295 +89.13692764663644 +0 +120 +absolute + + + +0.01 +smooth + +8.536474304066578 +47.349739958744536 +427.8501375576207 +20.150978232003542 +89.13493064135045 +0 +120 +absolute + + + +0.01 +smooth + +8.536474755928769 +47.34974015742062 +427.862330901474 +20.143149523394957 +89.13289950961334 +0 +120 +absolute + + + +0.01 +smooth + +8.536475208784443 +47.349740356774056 +427.87449511818363 +20.135056732398773 +89.13083461262883 +0 +120 +absolute + + + +0.01 +smooth + +8.536475662625651 +47.34974055680135 +427.88662979048064 +20.12670334307921 +89.12873631160072 +0 +120 +absolute + + + +0.01 +smooth + +8.536476117444439 +47.34974075749901 +427.8987345010964 +20.118092839500513 +89.12660496773265 +0 +120 +absolute + + + +0.01 +smooth + +8.536476573232857 +47.349740958863556 +427.9108088327622 +20.10922870572689 +89.12444094222842 +0 +120 +absolute + + + +0.01 +smooth + +8.536477029982949 +47.3497411608915 +427.92285236820913 +20.10011442582257 +89.12224459629172 +0 +120 +absolute + + + +0.01 +smooth + +8.536477487686767 +47.34974136357932 +427.93486469016847 +20.09075348385179 +89.12001629112628 +0 +120 +absolute + + + +0.01 +smooth + +8.536477946336358 +47.34974156692355 +427.94684538137125 +20.08114936387877 +89.11775638793586 +0 +120 +absolute + + + +0.01 +smooth + +8.536478405923772 +47.34974177092069 +427.9587940245491 +20.071305549967736 +89.11546524792418 +0 +120 +absolute + + + +0.01 +smooth + +8.536478866441053 +47.34974197556725 +427.97071020243294 +20.06122552618292 +89.11314323229497 +0 +120 +absolute + + + +0.01 +smooth + +8.536479327880256 +47.34974218085975 +427.982593497754 +20.05091277658854 +89.11079070225198 +0 +120 +absolute + + + +0.01 +smooth + +8.536479790233422 +47.34974238679468 +427.9944434932435 +20.040370785248843 +89.10840801899889 +0 +120 +absolute + + + +0.01 +smooth + +8.536480253492607 +47.349742593368575 +428.0062597716331 +20.029603036228036 +89.10599554373954 +0 +120 +absolute + + + +0.01 +smooth + +8.536480717649852 +47.34974280057787 +428.0180419156532 +20.018613013590343 +89.1035536376775 +0 +120 +absolute + + + +0.01 +smooth + +8.53648118269721 +47.34974300841918 +428.02978950803583 +20.007404201400014 +89.1010826620167 +0 +120 +absolute + + + +0.01 +smooth + +8.536481648626726 +47.34974321688894 +428.0415021315116 +19.995980083721243 +89.09858297796067 +0 +120 +absolute + + + +0.01 +smooth + +8.536482115430452 +47.34974342598368 +428.0531793688122 +19.984344144618294 +89.0960549467133 +0 +120 +absolute + + + +0.01 +smooth + +8.536482583100433 +47.34974363569991 +428.06482080266846 +19.972499868155364 +89.09349892947823 +0 +120 +absolute + + + +0.01 +smooth + +8.536483051628718 +47.34974384603412 +428.0764260158118 +19.96045073839669 +89.09091528745923 +0 +120 +absolute + + + +0.01 +smooth + +8.536483521007357 +47.349744056982864 +428.0879945909735 +19.948200239406507 +89.08830438186001 +0 +120 +absolute + + + +0.01 +smooth + +8.536483991228398 +47.34974426854261 +428.0995261108847 +19.935751855249034 +89.08566657388434 +0 +120 +absolute + + + +0.01 +smooth + +8.536484462283886 +47.349744480709866 +428.11102015827663 +19.9231090699885 +89.08300222473594 +0 +120 +absolute + + + +0.01 +smooth + +8.536484934165873 +47.349744693481156 +428.1224763158805 +19.910275367689124 +89.08031169561849 +0 +120 +absolute + + + +0.01 +smooth + +8.536485406866406 +47.349744906853 +428.1338941664275 +19.897254232415143 +89.0775953477358 +0 +120 +absolute + + + +0.01 +smooth + +8.536485880377535 +47.349745120821865 +428.145273292649 +19.884049148230783 +89.07485354229154 +0 +120 +absolute + + + +0.01 +smooth + +8.536486354691306 +47.349745335384306 +428.15661327727616 +19.87066359920027 +89.0720866404895 +0 +120 +absolute + + + +0.01 +smooth + +8.536486829799765 +47.34974555053679 +428.16791370303997 +19.85710106938782 +89.06929500353333 +0 +120 +absolute + + + +0.01 +smooth + +8.536487305694967 +47.349745766275866 +428.1791741526721 +19.84336504285768 +89.06647899262688 +0 +120 +absolute + + + +0.01 +smooth + +8.536487782368951 +47.349745982597994 +428.19039420890323 +19.829459003674057 +89.06363896897375 +0 +120 +absolute + + + +0.01 +smooth + +8.536488259813778 +47.34974619949975 +428.2015734544653 +19.815386435901196 +89.0607752937778 +0 +120 +absolute + + + +0.01 +smooth + +8.536488738021484 +47.34974641697757 +428.2127114720886 +19.801150823603304 +89.05788832824263 +0 +120 +absolute + + + +0.01 +smooth + +8.536489216984124 +47.349746635028005 +428.2238078445052 +19.78675565084463 +89.05497843357207 +0 +120 +absolute + + + +0.01 +smooth + +8.536489696693748 +47.349746853647574 +428.234862154446 +19.77220440168939 +89.05204597096986 +0 +120 +absolute + + + +0.01 +smooth + +8.536490177142397 +47.349747072832734 +428.24587398464206 +19.757500560201805 +89.04909130163965 +0 +120 +absolute + + + +0.01 +smooth + +8.536490658322125 +47.34974729258005 +428.2568429178248 +19.742647610446106 +89.04611478678525 +0 +120 +absolute + + + +0.01 +smooth + +8.536491140224976 +47.349747512885976 +428.26776853672544 +19.727649036486525 +89.04311678761033 +0 +120 +absolute + + + +0.01 +smooth + +8.536491622843004 +47.349747733747066 +428.2786504240751 +19.712508322387283 +89.04009766531868 +0 +120 +absolute + + + +0.01 +smooth + +8.536492106168252 +47.34974795515981 +428.28948816260515 +19.69722895221261 +89.03705778111399 +0 +120 +absolute + + + +0.01 +smooth + +8.536492590192774 +47.349748177120716 +428.30028133504663 +19.681814410026735 +89.03399749620002 +0 +120 +absolute + + + +0.01 +smooth + +8.536493074908611 +47.34974839962631 +428.31102952413084 +19.66626817989388 +89.03091717178047 +0 +120 +absolute + + + +0.01 +smooth + +8.536493560307816 +47.34974862267307 +428.32173231258906 +19.650593745878275 +89.02781716905912 +0 +120 +absolute + + + +0.01 +smooth + +8.536494046382437 +47.34974884625752 +428.33238928315245 +19.634794592044145 +89.02469784923964 +0 +120 +absolute + + + +0.01 +smooth + +8.536494533124522 +47.34974907037617 +428.3430000185523 +19.618874202455718 +89.02155957352582 +0 +120 +absolute + + + +0.01 +smooth + +8.536495020526118 +47.34974929502553 +428.3535641015198 +19.602836061177218 +89.01840270312135 +0 +120 +absolute + + + +0.01 +smooth + +8.536495508579275 +47.349749520202096 +428.36408111478613 +19.586683652272878 +89.01522759923 +0 +120 +absolute + + + +0.01 +smooth + +8.536495997276042 +47.349749745902386 +428.3745506410825 +19.570420459806925 +89.01203462305548 +0 +120 +absolute + + + +0.01 +smooth + +8.536496486608463 +47.34974997212292 +428.3849722631403 +19.554049967843575 +89.00882413580152 +0 +120 +absolute + + + +0.01 +smooth + +8.536496976568593 +47.34975019886018 +428.3953455636905 +19.537575660447065 +89.00559649867185 +0 +120 +absolute + + + +0.01 +smooth + +8.536497467148472 +47.34975042611069 +428.40567012546455 +19.52100102168162 +89.00235207287022 +0 +120 +absolute + + + +0.01 +smooth + +8.536497958340156 +47.34975065387097 +428.4159455311934 +19.504329535611465 +88.99909121960036 +0 +120 +absolute + + + +0.01 +smooth + +8.536498450135689 +47.3497508821375 +428.4261713636086 +19.48756468630083 +88.99581430006597 +0 +120 +absolute + + + +0.01 +smooth + +8.53649894252712 +47.3497511109068 +428.43634720544117 +19.47070995781394 +88.99252167547083 +0 +120 +absolute + + + +0.01 +smooth + +8.5364994355065 +47.349751340175395 +428.44647263942244 +19.45376883421502 +88.98921370701862 +0 +120 +absolute + + + +0.01 +smooth + +8.53649992906587 +47.34975156993978 +428.4565472482835 +19.436744799568295 +88.98589075591312 +0 +120 +absolute + + + +0.01 +smooth + +8.536500423197285 +47.34975180019646 +428.4665706147557 +19.419641337938003 +88.98255318335805 +0 +120 +absolute + + + +0.01 +smooth + +8.536500917892793 +47.34975203094194 +428.47654232157015 +19.40246193338836 +88.97920135055712 +0 +120 +absolute + + + +0.01 +smooth + +8.53650141314444 +47.34975226217274 +428.48646195145824 +19.385210069983597 +88.97583561871409 +0 +120 +absolute + + + +0.01 +smooth + +8.536501908944276 +47.34975249388536 +428.4963290871511 +19.367889231787938 +88.97245634903267 +0 +120 +absolute + + + +0.01 +smooth + +8.536502405284349 +47.349752726076325 +428.5061433113798 +19.350502902865614 +88.9690639027166 +0 +120 +absolute + + + +0.01 +smooth + +8.536502902156705 +47.349752958742116 +428.5159042068758 +19.333054567280854 +88.96565864096962 +0 +120 +absolute + + + +0.01 +smooth + +8.536503399553395 +47.349753191879266 +428.5256113563702 +19.315547709097874 +88.96224092499546 +0 +120 +absolute + + + +0.01 +smooth + +8.536503897466465 +47.349753425484266 +428.53526434259425 +19.29798581238091 +88.95881111599783 +0 +120 +absolute + + + +0.01 +smooth + +8.536504395887967 +47.34975365955365 +428.5448627482792 +19.280372361194186 +88.95536957518048 +0 +120 +absolute + + + +0.01 +smooth + +8.536504894809944 +47.34975389408389 +428.5544061561562 +19.262710839601933 +88.95191666374717 +0 +120 +absolute + + + +0.01 +smooth + +8.53650539422445 +47.34975412907151 +428.5638941489565 +19.24500473166837 +88.9484527429016 +0 +120 +absolute + + + +0.01 +smooth + +8.53650589412353 +47.34975436451303 +428.5733263094114 +19.227257521457734 +88.94497817384749 +0 +120 +absolute + + + +0.01 +smooth + +8.536506394499233 +47.34975460040495 +428.58270222025203 +19.209472693034247 +88.9414933177886 +0 +120 +absolute + + + +0.01 +smooth + +8.536506895352137 +47.349754836748914 +428.5920220983849 +19.191649290375302 +88.93799803580701 +0 +120 +absolute + + + +0.01 +smooth + +8.536507396955844 +47.3497550737108 +428.601306453143 +19.173644021663637 +88.93447616872368 +0 +120 +absolute + + + +0.01 +smooth + +8.536507899439043 +47.34975531136926 +428.61056500967095 +19.15538838779219 +88.93092001486774 +0 +120 +absolute + + + +0.01 +smooth + +8.536508402793926 +47.349755549720776 +428.6197973457853 +19.136884818591607 +88.92732986723944 +0 +120 +absolute + + + +0.01 +smooth + +8.536508907012697 +47.34975578876184 +428.62900303930286 +19.11813574389252 +88.92370601883904 +0 +120 +absolute + + + +0.01 +smooth + +8.53650941208756 +47.34975602848891 +428.6381816680404 +19.099143593525568 +88.92004876266675 +0 +120 +absolute + + + +0.01 +smooth + +8.536509918010715 +47.34975626889853 +428.6473328098148 +19.079910797321407 +88.91635839172294 +0 +120 +absolute + + + +0.01 +smooth + +8.536510424774367 +47.34975650998716 +428.65645604244304 +19.060439785110667 +88.91263519900777 +0 +120 +absolute + + + +0.01 +smooth + +8.536510932370714 +47.34975675175129 +428.6655509437418 +19.040732986723995 +88.9088794775215 +0 +120 +absolute + + + +0.01 +smooth + +8.536511440791957 +47.34975699418741 +428.6746170915277 +19.020792831992033 +88.90509152026436 +0 +120 +absolute + + + +0.01 +smooth + +8.5365119500303 +47.34975723729202 +428.68365406361795 +19.00062175074542 +88.90127162023673 +0 +120 +absolute + + + +0.01 +smooth + +8.536512460077946 +47.349757481061616 +428.69266143782914 +18.98022217281481 +88.89742007043874 +0 +120 +absolute + + + +0.01 +smooth + +8.53651297092709 +47.34975772549264 +428.70163879197804 +18.959596528030826 +88.89353716387068 +0 +120 +absolute + + + +0.01 +smooth + +8.536513482569944 +47.34975797058165 +428.71058570388175 +18.938747246224125 +88.88962319353281 +0 +120 +absolute + + + +0.01 +smooth + +8.536513994998705 +47.34975821632509 +428.7195017513569 +18.917676757225347 +88.88567845242541 +0 +120 +absolute + + + +0.01 +smooth + +8.536514508205574 +47.34975846271947 +428.7283865122203 +18.896387490865134 +88.88170323354869 +0 +120 +absolute + + + +0.01 +smooth + +8.536515022182751 +47.34975870976129 +428.7372395642888 +18.874881876974126 +88.87769782990296 +0 +120 +absolute + + + +0.01 +smooth + +8.53651553692244 +47.349758957446994 +428.74606048537913 +18.85316234538296 +88.87366253448836 +0 +120 +absolute + + + +0.01 +smooth + +8.536516052416845 +47.34975920577313 +428.75484885330826 +18.831231325922285 +88.86959764030529 +0 +120 +absolute + + + +0.01 +smooth + +8.536516568658161 +47.34975945473615 +428.76360424589285 +18.80909124842274 +88.86550344035389 +0 +120 +absolute + + + +0.01 +smooth + +8.5365170856386 +47.34975970433257 +428.77232624095 +18.786744542714978 +88.86138022763453 +0 +120 +absolute + + + +0.01 +smooth + +8.536517603350354 +47.34975995455885 +428.7810144162962 +18.764193638629624 +88.85722829514735 +0 +120 +absolute + + + +0.01 +smooth + +8.53651812178563 +47.34976020541151 +428.7896683497485 +18.74144096599733 +88.85304793589265 +0 +120 +absolute + + + +0.01 +smooth + +8.536518640936627 +47.349760456887026 +428.79828761912364 +18.718488954648738 +88.84883944287073 +0 +120 +absolute + + + +0.01 +smooth + +8.53651916079555 +47.349760708981876 +428.80687180223845 +18.695340034414485 +88.84460310908175 +0 +120 +absolute + + + +0.01 +smooth + +8.5365196813546 +47.34976096169258 +428.8154204769097 +18.671996635125222 +88.84033922752604 +0 +120 +absolute + + + +0.01 +smooth + +8.536520202605972 +47.3497612150156 +428.8239332209542 +18.64846118661158 +88.83604809120384 +0 +120 +absolute + + + +0.01 +smooth + +8.53652072454188 +47.34976146894746 +428.83240961218905 +18.624736118704217 +88.8317299931154 +0 +120 +absolute + + + +0.01 +smooth + +8.536521247154516 +47.349761723484605 +428.84084922843056 +18.600823861233753 +88.82738522626096 +0 +120 +absolute + + + +0.01 +smooth + +8.536521770436087 +47.34976197862355 +428.849251647496 +18.57672684403085 +88.8230140836408 +0 +120 +absolute + + + +0.01 +smooth + +8.536522294378791 +47.349762234360796 +428.85761644720213 +18.552447496926145 +88.81861685825514 +0 +120 +absolute + + + +0.01 +smooth + +8.536522818974829 +47.349762490692804 +428.86594320536534 +18.52798824975027 +88.81419384310425 +0 +120 +absolute + + + +0.01 +smooth + +8.536523344216409 +47.34976274761611 +428.8742314998031 +18.503351532333888 +88.80974533118842 +0 +120 +absolute + + + +0.01 +smooth + +8.53652387009573 +47.34976300512715 +428.8824809083318 +18.47853977450762 +88.80527161550786 +0 +120 +absolute + + + +0.01 +smooth + +8.536524396604989 +47.349763263222464 +428.8906910087685 +18.453555406102122 +88.80077298906286 +0 +120 +absolute + + + +0.01 +smooth + +8.536524923736394 +47.34976352189849 +428.8988613789296 +18.428400856948024 +88.79624974485364 +0 +120 +absolute + + + +0.01 +smooth + +8.536525451482143 +47.34976378115175 +428.9069915966325 +18.403078556875975 +88.79170217588046 +0 +120 +absolute + + + +0.01 +smooth + +8.536525979834439 +47.34976404097875 +428.9150812396935 +18.377590935716622 +88.7871305751436 +0 +120 +absolute + + + +0.01 +smooth + +8.536526508785485 +47.34976430137595 +428.9231298859298 +18.3519404233006 +88.78253523564328 +0 +120 +absolute + + + +0.01 +smooth + +8.53652703832748 +47.34976456233985 +428.9311371131581 +18.32612944945856 +88.7779164503798 +0 +120 +absolute + + + +0.01 +smooth + +8.53652756845263 +47.34976482386695 +428.9391024991952 +18.30016044402113 +88.77327451235338 +0 +120 +absolute + + + +0.01 +smooth + +8.53652809915313 +47.34976508595373 +428.9470256218579 +18.274035836818964 +88.76860971456426 +0 +120 +absolute + + + +0.01 +smooth + +8.53652863042119 +47.34976534859667 +428.954906058963 +18.247758057682695 +88.76392235001273 +0 +120 +absolute + + + +0.01 +smooth + +8.536529162249003 +47.34976561179228 +428.96274338832745 +18.221329536442976 +88.75921271169906 +0 +120 +absolute + + + +0.01 +smooth + +8.53652969462878 +47.34976587553704 +428.97053718776795 +18.19475270293044 +88.75448109262345 +0 +120 +absolute + + + +0.01 +smooth + +8.536530227552715 +47.34976613982745 +428.97828703510135 +18.16802998697574 +88.7497277857862 +0 +120 +absolute + + + +0.01 +smooth + +8.536530761013012 +47.34976640465999 +428.9859925081444 +18.141163818409506 +88.74495308418754 +0 +120 +absolute + + + +0.01 +smooth + +8.536531295001875 +47.349766670031144 +428.99365318471416 +18.114156627062385 +88.74015728082773 +0 +120 +absolute + + + +0.01 +smooth + +8.536531829511505 +47.349766935937424 +429.0012686426271 +18.087010842765014 +88.73534066870704 +0 +120 +absolute + + + +0.01 +smooth + +8.536532364534104 +47.349767202375304 +429.00883845970037 +18.059728895348048 +88.73050354082568 +0 +120 +absolute + + + +0.01 +smooth + +8.536532900061871 +47.34976746934128 +429.0163622137506 +18.03231321464212 +88.72564619018397 +0 +120 +absolute + + + +0.01 +smooth + +8.53653343608701 +47.349767736831836 +429.0238394825947 +18.00476623047787 +88.72076890978211 +0 +120 +absolute + + + +0.01 +smooth + +8.536533972601722 +47.34976800484347 +429.03126984404946 +17.977090372685954 +88.71587199262038 +0 +120 +absolute + + + +0.01 +smooth + +8.53653450959821 +47.34976827337266 +429.03865287593163 +17.949288071096998 +88.71095573169904 +0 +120 +absolute + + + +0.01 +smooth + +8.536535047068675 +47.349768542415916 +429.0459881560582 +17.92136175554165 +88.70602042001833 +0 +120 +absolute + + + +0.01 +smooth + +8.536535585005318 +47.34976881196971 +429.0532752622458 +17.89331385585055 +88.70106635057851 +0 +120 +absolute + + + +0.01 +smooth + +8.53653612340034 +47.34976908203054 +429.0605137723113 +17.865146801854348 +88.69609381637983 +0 +120 +absolute + + + +0.01 +smooth + +8.536536662245947 +47.3497693525949 +429.06770326407167 +17.83686302338368 +88.69110311042256 +0 +120 +absolute + + + +0.01 +smooth + +8.536537201534337 +47.34976962365927 +429.07484331534357 +17.80846495026919 +88.68609452570695 +0 +120 +absolute + + + +0.01 +smooth + +8.53653774125771 +47.34976989522015 +429.08193350394384 +17.779955012341524 +88.68106835523322 +0 +120 +absolute + + + +0.01 +smooth + +8.536538281408273 +47.34977016727402 +429.08897340768937 +17.75133563943131 +88.67602489200168 +0 +120 +absolute + + + +0.01 +smooth + +8.536538821978224 +47.34977043981739 +429.09596260439696 +17.722609261369207 +88.67096442901256 +0 +120 +absolute + + + +0.01 +smooth + +8.536539362959768 +47.34977071284673 +429.10290067188345 +17.693778307985845 +88.6658872592661 +0 +120 +absolute + + + +0.01 +smooth + +8.536539904345103 +47.349770986358536 +429.1097871879656 +17.664845209111874 +88.66079367576258 +0 +120 +absolute + + + +0.01 +smooth + +8.536540446126432 +47.3497712603493 +429.11662173046017 +17.635812394577933 +88.65568397150223 +0 +120 +absolute + + + +0.01 +smooth + +8.536540988295958 +47.3497715348155 +429.12340387718416 +17.606682294214664 +88.65055843948532 +0 +120 +absolute + + + +0.01 +smooth + +8.536541530845883 +47.349771809753655 +429.13013320595434 +17.577457337852717 +88.6454173727121 +0 +120 +absolute + + + +0.01 +smooth + +8.536542073768404 +47.34977208516023 +429.1368092945874 +17.548139955322714 +88.64026106418285 +0 +120 +absolute + + + +0.01 +smooth + +8.53654261705573 +47.349772361031725 +429.14343172090025 +17.518732576455317 +88.63508980689778 +0 +120 +absolute + + + +0.01 +smooth + +8.536543160700058 +47.34977263736464 +429.15000006270975 +17.489237631081163 +88.62990389385718 +0 +120 +absolute + + + +0.01 +smooth + +8.536543704890802 +47.34977291427883 +429.15653127159493 +17.459571039772932 +88.62469305872446 +0 +120 +absolute + + + +0.01 +smooth + +8.536544249817476 +47.34977319189417 +429.1630422732553 +17.42964846339667 +88.61944701547654 +0 +120 +absolute + + + +0.01 +smooth + +8.536544795472443 +47.34977347020711 +429.1695326066889 +17.399471942223098 +88.61416602758409 +0 +120 +absolute + + + +0.01 +smooth + +8.536545341848056 +47.34977374921412 +429.1760018108935 +17.369043516522876 +88.60885035851767 +0 +120 +absolute + + + +0.01 +smooth + +8.536545888936672 +47.34977402891163 +429.1824494248669 +17.33836522656671 +88.60350027174789 +0 +120 +absolute + + + +0.01 +smooth + +8.536546436730646 +47.34977430929606 +429.18887498760665 +17.30743911262529 +88.59811603074526 +0 +120 +absolute + + + +0.01 +smooth + +8.53654698522234 +47.34977459036393 +429.1952780381109 +17.276267214969305 +88.59269789898043 +0 +120 +absolute + + + +0.01 +smooth + +8.536547534404106 +47.349774872111645 +429.20165811537737 +17.24485157386946 +88.58724613992403 +0 +120 +absolute + + + +0.01 +smooth + +8.536548084268304 +47.34977515453567 +429.20801475840375 +17.21319422959644 +88.58176101704657 +0 +120 +absolute + + + +0.01 +smooth + +8.53654863480729 +47.34977543763243 +429.21434750618795 +17.181297222420937 +88.57624279381866 +0 +120 +absolute + + + +0.01 +smooth + +8.536549186013424 +47.349775721398416 +429.22065589772774 +17.149162592613646 +88.57069173371092 +0 +120 +absolute + + + +0.01 +smooth + +8.536549737879055 +47.349776005830066 +429.226939472021 +17.116792380445258 +88.5651081001939 +0 +120 +absolute + + + +0.01 +smooth + +8.536550290396548 +47.34977629092381 +429.23319776806545 +17.084188626186464 +88.55949215673823 +0 +120 +absolute + + + +0.01 +smooth + +8.536550843558254 +47.34977657667612 +429.2394303248588 +17.051353370107957 +88.55384416681447 +0 +120 +absolute + + + +0.01 +smooth + +8.536551397356536 +47.349776863083456 +429.2456366813991 +17.018288652480436 +88.5481643938932 +0 +120 +absolute + + + +0.01 +smooth + +8.53655195178375 +47.34977715014225 +429.2518163766841 +16.984996513574593 +88.54245310144508 +0 +120 +absolute + + + +0.01 +smooth + +8.53655250683225 +47.34977743784895 +429.2579689497114 +16.95147899366112 +88.53671055294059 +0 +120 +absolute + + + +0.01 +smooth + +8.53655306249439 +47.34977772620001 +429.264093939479 +16.917738133010694 +88.53093701185037 +0 +120 +absolute + + + +0.01 +smooth + +8.536553618762532 +47.34977801519189 +429.2701908849847 +16.88377597189403 +88.52513274164502 +0 +120 +absolute + + + +0.01 +smooth + +8.536554175629037 +47.349778304821044 +429.2762593252264 +16.84959455058181 +88.51929800579519 +0 +120 +absolute + + + +0.01 +smooth + +8.53655473308625 +47.34977859508389 +429.2822987992015 +16.815195909344716 +88.5134330677713 +0 +120 +absolute + + + +0.01 +smooth + +8.53655529112654 +47.34977888597693 +429.2883088459083 +16.780582088453468 +88.50753819104412 +0 +120 +absolute + + + +0.01 +smooth + +8.536555849742259 +47.34977917749659 +429.29428900434436 +16.74575512817874 +88.50161363908414 +0 +120 +absolute + + + +0.01 +smooth + +8.53655640892576 +47.34977946963932 +429.30023881350746 +16.710717068791233 +88.49565967536196 +0 +120 +absolute + + + +0.01 +smooth + +8.536556968669403 +47.34977976240155 +429.30615781239555 +16.675469950561624 +88.48967656334818 +0 +120 +absolute + + + +0.01 +smooth + +8.53655752896555 +47.349780055779775 +429.3120455400063 +16.640015813760623 +88.4836645665134 +0 +120 +absolute + + + +0.01 +smooth + +8.536558089806553 +47.34978034977043 +429.3179015353376 +16.60435669865891 +88.4776239483282 +0 +120 +absolute + + + +0.01 +smooth + +8.536558651184766 +47.34978064436993 +429.32372533738715 +16.56849464552719 +88.47155497226314 +0 +120 +absolute + + + +0.01 +smooth + +8.536559213092554 +47.34978093957478 +429.32951648515296 +16.532431694636145 +88.46545790178888 +0 +120 +absolute + + + +0.01 +smooth + +8.536559775522267 +47.34978123538139 +429.33527451763274 +16.496169886256478 +88.45933300037592 +0 +120 +absolute + + + +0.01 +smooth + +8.536560338466268 +47.34978153178625 +429.34099897382424 +16.45971126065888 +88.45318053149495 +0 +120 +absolute + + + +0.01 +smooth + +8.536560901916905 +47.34978182878576 +429.3466893927252 +16.42305785811403 +88.44700075861644 +0 +120 +absolute + + + +0.01 +smooth + +8.536561465866544 +47.34978212637641 +429.35234531333373 +16.38621171889264 +88.4407939452111 +0 +120 +absolute + + + +0.01 +smooth + +8.53656203030754 +47.34978242455465 +429.3579662746473 +16.349174883265384 +88.43456035474944 +0 +120 +absolute + + + +0.01 +smooth + +8.536562595232247 +47.34978272331691 +429.3635518156639 +16.311949391502967 +88.42830025070207 +0 +120 +absolute + + + +0.01 +smooth + +8.536563160633024 +47.34978302265965 +429.3691014753814 +16.274537283876082 +88.4220138965396 +0 +120 +absolute + + + +0.01 +smooth + +8.536563726502227 +47.349783322579334 +429.3746147927974 +16.236940600655423 +88.41570155573257 +0 +120 +absolute + + + +0.01 +smooth + +8.536564292832214 +47.34978362307239 +429.38009130690983 +16.19916138211167 +88.40936349175162 +0 +120 +absolute + + + +0.01 +smooth + +8.536564859615341 +47.34978392413529 +429.3855305567165 +16.161201668515524 +88.40299996806732 +0 +120 +absolute + + + +0.01 +smooth + +8.536565426843966 +47.34978422576448 +429.39093208121517 +16.12306350013768 +88.39661124815026 +0 +120 +absolute + + + +0.01 +smooth + +8.536565994510443 +47.349784527956395 +429.3962954194037 +16.084748917248827 +88.39019759547102 +0 +120 +absolute + + + +0.01 +smooth + +8.536566562607135 +47.3497848307075 +429.40162011027985 +16.04625996011966 +88.38375927350022 +0 +120 +absolute + + + +0.01 +smooth + +8.536567131126393 +47.349785134014255 +429.4069056928415 +16.00759866902087 +88.37729654570839 +0 +120 +absolute + + + +0.01 +smooth + +8.536567700060576 +47.34978543787308 +429.41215170608643 +15.968767084223153 +88.37080967556618 +0 +120 +absolute + + + +0.01 +smooth + +8.536568269402043 +47.34978574228046 +429.41735768901236 +15.929767245997198 +88.36429892654415 +0 +120 +absolute + + + +0.01 +smooth + +8.536568839143149 +47.34978604723283 +429.42252318061725 +15.890601194613698 +88.35776456211289 +0 +120 +absolute + + + +0.01 +smooth + +8.53656940927625 +47.34978635272664 +429.4276477198988 +15.851270970343345 +88.35120684574301 +0 +120 +absolute + + + +0.01 +smooth + +8.536569979793706 +47.34978665875835 +429.4327308458548 +15.811778613456836 +88.34462604090507 +0 +120 +absolute + + + +0.01 +smooth + +8.536570550687872 +47.3497869653244 +429.43777209748316 +15.772126164224858 +88.33802241106966 +0 +120 +absolute + + + +0.01 +smooth + +8.536571121951104 +47.34978727242124 +429.44277101378157 +15.732315662918106 +88.33139621970739 +0 +120 +absolute + + + +0.01 +smooth + +8.53657169357576 +47.34978758004533 +429.447727133748 +15.692349149807283 +88.32474773028886 +0 +120 +absolute + + + +0.01 +smooth + +8.536572265554199 +47.34978788819312 +429.45263999638007 +15.652228665163063 +88.31807720628461 +0 +120 +absolute + + + +0.01 +smooth + +8.536572837878776 +47.349788196861056 +429.45750914067565 +15.61195624925615 +88.31138491116529 +0 +120 +absolute + + + +0.01 +smooth + +8.536573410541845 +47.3497885060456 +429.46233410563264 +15.571533942357235 +88.30467110840144 +0 +120 +absolute + + + +0.01 +smooth + +8.536573983535769 +47.34978881574318 +429.4671144302488 +15.53096378473701 +88.29793606146369 +0 +120 +absolute + + + +0.01 +smooth + +8.536574556852901 +47.34978912595027 +429.4718496535219 +15.490247816666166 +88.29118003382257 +0 +120 +absolute + + + +0.01 +smooth + +8.536575130485598 +47.349789436663315 +429.47653931444967 +15.4493880784154 +88.28440328894874 +0 +120 +absolute + + + +0.01 +smooth + +8.53657570442622 +47.349789747878745 +429.48118295203005 +15.408386610255405 +88.27760609031273 +0 +120 +absolute + + + +0.01 +smooth + +8.536576278667122 +47.34979005959305 +429.48578010526086 +15.36724545245687 +88.27078870138517 +0 +120 +absolute + + + +0.01 +smooth + +8.53657685320066 +47.349790371802655 +429.4903303131399 +15.325966645290485 +88.26395138563663 +0 +120 +absolute + + + +0.01 +smooth + +8.536577428019193 +47.349790684504015 +429.4948331146649 +15.284552229026948 +88.2570944065377 +0 +120 +absolute + + + +0.01 +smooth + +8.536578003115075 +47.349790997693574 +429.49928804883365 +15.24300424393695 +88.25021802755899 +0 +120 +absolute + + + +0.01 +smooth + +8.536578578480666 +47.3497913113678 +429.50369465464405 +15.201324730291184 +88.24332251217103 +0 +120 +absolute + + + +0.01 +smooth + +8.53657915410832 +47.34979162552313 +429.5080524710939 +15.15951572836035 +88.23640812384451 +0 +120 +absolute + + + +0.01 +smooth + +8.5365797299904 +47.349791940156024 +429.512361037181 +15.117579278415128 +88.22947512604992 +0 +120 +absolute + + + +0.01 +smooth + +8.536580306119257 +47.349792255262926 +429.5166198919031 +15.075517420726214 +88.22252378225791 +0 +120 +absolute + + + +0.01 +smooth + +8.536580882487248 +47.3497925708403 +429.520828574258 +15.033332195564304 +88.21555435593905 +0 +120 +absolute + + + +0.01 +smooth + +8.536581459086733 +47.34979288688457 +429.52498662324354 +14.991025643200087 +88.2085671105639 +0 +120 +absolute + + + +0.01 +smooth + +8.536582035910067 +47.34979320339221 +429.5290935778576 +14.948599803904258 +88.20156230960309 +0 +120 +absolute + + + +0.01 +smooth + +8.536582613067624 +47.3497935204357 +429.53316207403117 +14.906008815469757 +88.19453419443143 +0 +120 +absolute + + + +0.01 +smooth + +8.536583190795234 +47.34979383816825 +429.53721859657537 +14.863155822780381 +88.1874706008797 +0 +120 +absolute + + + +0.01 +smooth + +8.536583769092763 +47.34979415659101 +429.5412633805149 +14.820039694640808 +88.18037140303734 +0 +120 +absolute + + + +0.01 +smooth + +8.536584347952704 +47.349794475700385 +429.54529584149356 +14.77666229256894 +88.17323685128758 +0 +120 +absolute + + + +0.01 +smooth + +8.536584927367546 +47.34979479549276 +429.5493153951553 +14.733025478082633 +88.16606719601359 +0 +120 +absolute + + + +0.01 +smooth + +8.536585507329777 +47.34979511596452 +429.5533214571436 +14.68913111269977 +88.1588626875986 +0 +120 +absolute + + + +0.01 +smooth + +8.536586087831887 +47.34979543711203 +429.55731344310243 +14.644981057938217 +88.15162357642566 +0 +120 +absolute + + + +0.01 +smooth + +8.53658666886637 +47.34979575893171 +429.56129076867586 +14.60057717531586 +88.14435011287814 +0 +120 +absolute + + + +0.01 +smooth + +8.536587250425715 +47.34979608141997 +429.5652528495075 +14.555921326350571 +88.13704254733914 +0 +120 +absolute + + + +0.01 +smooth + +8.536587832502413 +47.34979640457317 +429.5691991012411 +14.511015372560218 +88.12970113019183 +0 +120 +absolute + + + +0.01 +smooth + +8.536588415088946 +47.34979672838768 +429.5731289395206 +14.465861175462667 +88.1223261118194 +0 +120 +absolute + + + +0.01 +smooth + +8.536588998177816 +47.34979705285996 +429.57704177998977 +14.420460596575808 +88.1149177426051 +0 +120 +absolute + + + +0.01 +smooth + +8.53658958176151 +47.34979737798633 +429.5809370382927 +14.374815497417512 +88.10747627293206 +0 +120 +absolute + + + +0.01 +smooth + +8.536590165832514 +47.3497977037632 +429.5848141300727 +14.328927739505641 +88.10000195318345 +0 +120 +absolute + + + +0.01 +smooth + +8.536590750383324 +47.349798030187 +429.58867247097413 +14.282799184358087 +88.09249503374254 +0 +120 +absolute + + + +0.01 +smooth + +8.536591335406426 +47.34979835725407 +429.5925114766405 +14.236431693492724 +88.08495576499246 +0 +120 +absolute + + + +0.01 +smooth + +8.536591920894312 +47.34979868496083 +429.59633056271565 +14.18982712842741 +88.07738439731642 +0 +120 +absolute + + + +0.01 +smooth + +8.536592506839469 +47.349799013303645 +429.60012914484344 +14.142987350680023 +88.06978118109758 +0 +120 +absolute + + + +0.01 +smooth + +8.536593093234393 +47.34979934227894 +429.60390663866787 +14.095914221768446 +88.06214636671913 +0 +120 +absolute + + + +0.01 +smooth + +8.53659368007157 +47.349799671883076 +429.6076624598325 +14.04860960321055 +88.05448020456434 +0 +120 +absolute + + + +0.01 +smooth + +8.536594267343492 +47.34980000211246 +429.61139602398134 +14.0010753565242 +88.04678294501628 +0 +120 +absolute + + + +0.01 +smooth + +8.53659485504265 +47.34980033296349 +429.61510674675816 +13.953313343227288 +88.03905483845821 +0 +120 +absolute + + + +0.01 +smooth + +8.536595443161534 +47.34980066443252 +429.6187940438067 +13.905325424837685 +88.0312961352733 +0 +120 +absolute + + + +0.01 +smooth + +8.536596031692632 +47.34980099651599 +429.6224573307711 +13.857113462873247 +88.02350708584476 +0 +120 +absolute + + + +0.01 +smooth + +8.536596620628433 +47.34980132921023 +429.6260960232946 +13.808679318851857 +88.01568794055571 +0 +120 +absolute + + + +0.01 +smooth + +8.536597209961434 +47.349801662511695 +429.62970953702165 +13.760024854291398 +88.00783894978942 +0 +120 +absolute + + + +0.01 +smooth + +8.536597799684122 +47.349801996416744 +429.6332972875958 +13.711151930709734 +87.99996036392903 +0 +120 +absolute + + + +0.01 +smooth + +8.536598389788983 +47.34980233092175 +429.6368586906607 +13.662062409624742 +87.99205243335774 +0 +120 +absolute + + + +0.01 +smooth + +8.536598980268513 +47.34980266602314 +429.6403931618604 +13.612758152554308 +87.98411540845876 +0 +120 +absolute + + + +0.01 +smooth + +8.536599571115204 +47.349803001717284 +429.64390011683884 +13.56324102101629 +87.97614953961524 +0 +120 +absolute + + + +0.01 +smooth + +8.536600162321538 +47.34980333800058 +429.64737897123956 +13.513512876528564 +87.96815507721041 +0 +120 +absolute + + + +0.01 +smooth + +8.536600753880009 +47.34980367486939 +429.65082914070643 +13.463575580609007 +87.9601322716274 +0 +120 +absolute + + + +0.01 +smooth + +8.536601345783112 +47.34980401232016 +429.65425004088365 +13.413430994775501 +87.95208137324947 +0 +120 +absolute + + + +0.01 +smooth + +8.53660193802333 +47.349804350349245 +429.65764108741445 +13.36308098054591 +87.94400263245976 +0 +120 +absolute + + + +0.01 +smooth + +8.536602530593157 +47.34980468895303 +429.6610016959431 +13.312527399438107 +87.93589629964146 +0 +120 +absolute + + + +0.01 +smooth + +8.536603123485083 +47.34980502812792 +429.6643312821132 +13.26177211296998 +87.92776262517776 +0 +120 +absolute + + + +0.01 +smooth + +8.5366037166916 +47.3498053678703 +429.6676292615688 +13.21081698265939 +87.91960185945189 +0 +120 +absolute + + + +0.01 +smooth + +8.536604310205195 +47.34980570817656 +429.6708950499535 +13.159663870024211 +87.91141425284698 +0 +120 +absolute + + + +0.01 +smooth + +8.536604904018361 +47.349806049043096 +429.67412806291117 +13.108314636582325 +87.90320005574625 +0 +120 +absolute + + + +0.01 +smooth + +8.536605498123585 +47.34980639046629 +429.67732771608576 +13.0567711438516 +87.89495951853289 +0 +120 +absolute + + + +0.01 +smooth + +8.536606092513361 +47.34980673244255 +429.680493425121 +13.005035253349913 +87.88669289159009 +0 +120 +absolute + + + +0.01 +smooth + +8.536606687180175 +47.349807074968254 +429.6836246056607 +12.953108826595136 +87.878400425301 +0 +120 +absolute + + + +0.01 +smooth + +8.536607282116522 +47.349807418039774 +429.68672067334876 +12.900993725105156 +87.87008237004883 +0 +120 +absolute + + + +0.01 +smooth + +8.536607877314891 +47.34980776165353 +429.68978104382893 +12.848691810397828 +87.8617389762168 +0 +120 +absolute + + + +0.01 +smooth + +8.536608472767767 +47.34980810580591 +429.6928051327451 +12.79620494399103 +87.85337049418806 +0 +120 +absolute + + + +0.01 +smooth + +8.53660906846765 +47.349808450493285 +429.6957923557411 +12.743534987402645 +87.84497717434584 +0 +120 +absolute + + + +0.01 +smooth + +8.536609664407024 +47.34980879571206 +429.6987421284607 +12.690683802150541 +87.83655926707327 +0 +120 +absolute + + + +0.01 +smooth + +8.536610260578378 +47.34980914145862 +429.70165386654764 +12.637653249752594 +87.82811702275359 +0 +120 +absolute + + + +0.01 +smooth + +8.536610856974205 +47.34980948772937 +429.704526985646 +12.584445191726676 +87.81965069176994 +0 +120 +absolute + + + +0.01 +smooth + +8.536611453586994 +47.34980983452067 +429.7073609013994 +12.531061489590677 +87.81116052450555 +0 +120 +absolute + + + +0.01 +smooth + +8.536612050409238 +47.34981018182894 +429.7101550294517 +12.477504004862444 +87.8026467713436 +0 +120 +absolute + + + +0.01 +smooth + +8.536612647433424 +47.349810529650554 +429.71290878544676 +12.423774599059868 +87.79410968266728 +0 +120 +absolute + + + +0.01 +smooth + +8.536613244652045 +47.34981087798192 +429.71562158502843 +12.369875133700816 +87.78554950885976 +0 +120 +absolute + + + +0.01 +smooth + +8.536613842057587 +47.34981122681941 +429.71829284384046 +12.31580747030317 +87.77696650030423 +0 +120 +absolute + + + +0.01 +smooth + +8.536614439642547 +47.34981157615942 +429.7209219775268 +12.261573470384796 +87.76836090738388 +0 +120 +absolute + + + +0.01 +smooth + +8.53661503739941 +47.34981192599834 +429.7235084017311 +12.207174995463575 +87.75973298048191 +0 +120 +absolute + + + +0.01 +smooth + +8.536615635320667 +47.34981227633257 +429.72605153209736 +12.152613907057388 +87.75108296998152 +0 +120 +absolute + + + +0.01 +smooth + +8.536616233398808 +47.349812627158485 +429.72855078426926 +12.09789206668409 +87.74241112626588 +0 +120 +absolute + + + +0.01 +smooth + +8.536616831626327 +47.349812978472485 +429.7310055738908 +12.043011335861564 +87.73371769971817 +0 +120 +absolute + + + +0.01 +smooth + +8.536617429995712 +47.34981333027096 +429.7334153166056 +11.987973576107684 +87.7250029407216 +0 +120 +absolute + + + +0.01 +smooth + +8.536618028499449 +47.349813682550305 +429.73577942805764 +11.932780648940327 +87.71626709965933 +0 +120 +absolute + + + +0.01 +smooth + +8.536618627130034 +47.349814035306906 +429.73809732389066 +11.877434415877365 +87.70751042691458 +0 +120 +absolute + + + +0.01 +smooth + +8.536619225879955 +47.34981438853715 +429.7403684197485 +11.821936738436683 +87.6987331728705 +0 +120 +absolute + + + +0.01 +smooth + +8.536619824741702 +47.34981474223743 +429.74259213127505 +11.766289478136134 +87.68993558791034 +0 +120 +absolute + + + +0.01 +smooth + +8.536620423707769 +47.34981509640413 +429.74476787411413 +11.710494496493602 +87.68111792241723 +0 +120 +absolute + + + +0.01 +smooth + +8.536621022770642 +47.34981545103364 +429.7468950639094 +11.654553655026964 +87.67228042677436 +0 +120 +absolute + + + +0.01 +smooth + +8.536621621922812 +47.34981580612237 +429.7489731163049 +11.59846881525409 +87.66342335136495 +0 +120 +absolute + + + +0.01 +smooth + +8.536622221156769 +47.349816161666695 +429.7510014469443 +11.54224183869286 +87.65454694657218 +0 +120 +absolute + + + +0.01 +smooth + +8.536622820465004 +47.34981651766302 +429.75297947147163 +11.485874586861144 +87.64565146277926 +0 +120 +absolute + + + +0.01 +smooth + +8.536623419903217 +47.34981687414894 +429.75491718701176 +11.429344570864181 +87.63673405269839 +0 +120 +absolute + + + +0.01 +smooth + +8.536624019723805 +47.34981723129036 +429.756857320267 +11.372553509397667 +87.62778222999165 +0 +120 +absolute + + + +0.01 +smooth + +8.536624619947426 +47.34981758910191 +429.75880355498407 +11.315492360429381 +87.61879486407486 +0 +120 +absolute + + + +0.01 +smooth + +8.53662522056666 +47.34981794757987 +429.76075486011786 +11.258162902109577 +87.6097722009907 +0 +120 +absolute + + + +0.01 +smooth + +8.536625821574084 +47.349818306720614 +429.76271020462326 +11.200566912588515 +87.600714486782 +0 +120 +absolute + + + +0.01 +smooth + +8.536626422962271 +47.349818666520434 +429.76466855745497 +11.142706170016448 +87.59162196749146 +0 +120 +absolute + + + +0.01 +smooth + +8.536627024723792 +47.34981902697562 +429.76662888756744 +11.084582452543629 +87.58249488916177 +0 +120 +absolute + + + +0.01 +smooth + +8.536627626851233 +47.34981938808253 +429.7685901639159 +11.026197538320327 +87.57333349783572 +0 +120 +absolute + + + +0.01 +smooth + +8.536628229337165 +47.34981974983747 +429.7705513554548 +10.967553205496776 +87.56413803955604 +0 +120 +absolute + + + +0.01 +smooth + +8.536628832174156 +47.349820112236735 +429.7725114311391 +10.90865123222324 +87.55490876036545 +0 +120 +absolute + + + +0.01 +smooth + +8.536629435354788 +47.34982047527664 +429.77446935992333 +10.849493396649972 +87.54564590630665 +0 +120 +absolute + + + +0.01 +smooth + +8.536630038871639 +47.34982083895353 +429.7764241107623 +10.790081476927234 +87.53634972342248 +0 +120 +absolute + + + +0.01 +smooth + +8.536630642717281 +47.349821203263694 +429.778374652611 +10.730417251205278 +87.52702045775555 +0 +120 +absolute + + + +0.01 +smooth + +8.536631246884285 +47.34982156820345 +429.78031995442376 +10.670502497634354 +87.5176583553487 +0 +120 +absolute + + + +0.01 +smooth + +8.536631851365234 +47.34982193376914 +429.78225898515575 +10.610338994364737 +87.5082636622446 +0 +120 +absolute + + + +0.01 +smooth + +8.536632456152702 +47.34982229995705 +429.7841907137616 +10.549928519546656 +87.49883662448603 +0 +120 +absolute + + + +0.01 +smooth + +8.536633061239261 +47.34982266676352 +429.786114109196 +10.48927285133038 +87.48937748811571 +0 +120 +absolute + + + +0.01 +smooth + +8.536633666617487 +47.349823034184844 +429.78802814041353 +10.428373767866159 +87.47988649917635 +0 +120 +absolute + + + +0.01 +smooth + +8.53663427227996 +47.34982340221735 +429.7899317763695 +10.367233047304255 +87.47036390371072 +0 +120 +absolute + + + +0.01 +smooth + +8.536634878219246 +47.34982377085735 +429.79182398601796 +10.305852467794914 +87.46080994776153 +0 +120 +absolute + + + +0.01 +smooth + +8.536635484427931 +47.34982414010115 +429.79370373831415 +10.244233807488408 +87.45122487737152 +0 +120 +absolute + + + +0.01 +smooth + +8.53663609089858 +47.34982450994507 +429.7955700022127 +10.18237884453497 +87.44160893858341 +0 +120 +absolute + + + +0.01 +smooth + +8.536636697623779 +47.349824880385455 +429.79742174666836 +10.120289357084868 +87.43196237744002 +0 +120 +absolute + + + +0.01 +smooth + +8.536637304596098 +47.349825251418586 +429.7992579406359 +10.057967123288355 +87.422285439984 +0 +120 +absolute + + + +0.01 +smooth + +8.53663791180811 +47.34982562304078 +429.80107755306994 +9.995413921295686 +87.4125783722581 +0 +120 +absolute + + + +0.01 +smooth + +8.536638519252396 +47.349825995248395 +429.8028795529257 +9.932631529257119 +87.40284142030507 +0 +120 +absolute + + + +0.01 +smooth + +8.536639126921523 +47.349826368037675 +429.80466290915723 +9.869621725322904 +87.39307483016765 +0 +120 +absolute + + + +0.01 +smooth + +8.536639734808078 +47.34982674140499 +429.8064265907197 +9.806386287643313 +87.38327884788853 +0 +120 +absolute + + + +0.01 +smooth + +8.536640342904626 +47.34982711534664 +429.8081695665678 +9.742926994368574 +87.37345371951051 +0 +120 +absolute + + + +0.01 +smooth + +8.53664095120375 +47.34982748985896 +429.80989080565644 +9.679245623648963 +87.36359969107632 +0 +120 +absolute + + + +0.01 +smooth + +8.53664155969802 +47.34982786493822 +429.8115892769401 +9.615343953634719 +87.35371700862865 +0 +120 +absolute + + + +0.01 +smooth + +8.536642168380013 +47.34982824058078 +429.8132639493738 +9.551223762476111 +87.34380591821026 +0 +120 +absolute + + + +0.01 +smooth + +8.53664277724231 +47.349828616782936 +429.8149137919121 +9.48688682832339 +87.33386666586391 +0 +120 +absolute + + + +0.01 +smooth + +8.536643386277474 +47.349828993540996 +429.81653777350976 +9.42233492932681 +87.32389949763225 +0 +120 +absolute + + + +0.01 +smooth + +8.53664399547809 +47.349829370851296 +429.8181348631216 +9.35756984363664 +87.31390465955812 +0 +120 +absolute + + + +0.01 +smooth + +8.53664460483673 +47.34982974871014 +429.81970402970245 +9.292593349403107 +87.30388239768422 +0 +120 +absolute + + + +0.01 +smooth + +8.536645214345974 +47.34983012711385 +429.82124424220694 +9.227407224776485 +87.29383295805327 +0 +120 +absolute + + + +0.01 +smooth + +8.536645823998391 +47.34983050605873 +429.8227544695899 +9.162013247907025 +87.28375658670801 +0 +120 +absolute + + + +0.01 +smooth + +8.53664643378656 +47.34983088554111 +429.82423368080606 +9.096413196944983 +87.27365352969119 +0 +120 +absolute + + + +0.01 +smooth + +8.536647043703054 +47.34983126555729 +429.8256808448101 +9.030608850040618 +87.26352403304551 +0 +120 +absolute + + + +0.01 +smooth + +8.53664765374045 +47.34983164610361 +429.827094930557 +8.964601985344178 +87.25336834281376 +0 +120 +absolute + + + +0.01 +smooth + +8.536648263891324 +47.34983202717636 +429.82847490700124 +8.898394381005936 +87.24318670503862 +0 +120 +absolute + + + +0.01 +smooth + +8.536648874148252 +47.34983240877186 +429.8298197430977 +8.83198781517612 +87.23297936576287 +0 +120 +absolute + + + +0.01 +smooth + +8.536649484503805 +47.34983279088645 +429.8311284078012 +8.765384066004998 +87.2227465710292 +0 +120 +absolute + + + +0.01 +smooth + +8.536650094950565 +47.349833173516416 +429.83239987006647 +8.698584911642826 +87.21248856688042 +0 +120 +absolute + + + +0.01 +smooth + +8.536650705481101 +47.3498335566581 +429.8336330988481 +8.631592130239861 +87.2022055993592 +0 +120 +absolute + + + +0.01 +smooth + +8.536651316087992 +47.34983394030779 +429.8348270631011 +8.564407499946356 +87.1918979145083 +0 +120 +absolute + + + +0.01 +smooth + +8.536651926763813 +47.34983432446181 +429.83598073178007 +8.497032798912564 +87.18156575837044 +0 +120 +absolute + + + +0.01 +smooth + +8.536652537501137 +47.34983470911649 +429.8370930738397 +8.429469805288758 +87.17120937698837 +0 +120 +absolute + + + +0.01 +smooth + +8.536653148292544 +47.34983509426814 +429.838163058235 +8.361720297225165 +87.16082901640482 +0 +120 +absolute + + + +0.01 +smooth + +8.536653759130605 +47.34983547991306 +429.83918965392047 +8.29378605287205 +87.15042492266252 +0 +120 +absolute + + + +0.01 +smooth + +8.536654370007899 +47.34983586604759 +429.840171829851 +8.225668850379677 +87.13999734180423 +0 +120 +absolute + + + +0.01 +smooth + +8.536654980916996 +47.34983625266803 +429.84110855498125 +8.157370467898295 +87.12954651987266 +0 +120 +absolute + + + +0.01 +smooth + +8.536655591850478 +47.34983663977069 +429.8419987982661 +8.088892683578157 +87.11907270291056 +0 +120 +absolute + + + +0.01 +smooth + +8.536656202800916 +47.34983702735191 +429.84284152866024 +8.020237275569537 +87.10857613696066 +0 +120 +absolute + + + +0.01 +smooth + +8.536656813760887 +47.34983741540799 +429.84363571511847 +7.95140602202266 +87.0980570680657 +0 +120 +absolute + + + +0.01 +smooth + +8.536657424722966 +47.349837803935245 +429.84438032659534 +7.882400701087796 +87.08751574226841 +0 +120 +absolute + + + +0.01 +smooth + +8.536658035679729 +47.34983819292999 +429.84507433204595 +7.813223090915201 +87.07695240561152 +0 +120 +absolute + + + +0.01 +smooth + +8.536658646623748 +47.349838582388536 +429.8457167004248 +7.7438749696551294 +87.06636730413778 +0 +120 +absolute + + + +0.01 +smooth + +8.536659257547605 +47.349838972307225 +429.8463064006867 +7.674358115457837 +87.05576068388991 +0 +120 +absolute + + + +0.01 +smooth + +8.536659868443868 +47.34983936268234 +429.84684240178643 +7.604674306473578 +87.04513279091067 +0 +120 +absolute + + + +0.01 +smooth + +8.53666047930512 +47.3498397535102 +429.84732367267884 +7.534825320852621 +87.03448387124277 +0 +120 +absolute + + + +0.01 +smooth + +8.536661090123928 +47.34984014478715 +429.84774918231847 +7.4648129367451945 +87.02381417092897 +0 +120 +absolute + + + +0.01 +smooth + +8.536661700892873 +47.34984053650949 +429.8481178996602 +7.39463893230157 +87.01312393601198 +0 +120 +absolute + + + +0.01 +smooth + +8.53666231160453 +47.34984092867352 +429.84842879365885 +7.324305085671999 +87.00241341253455 +0 +120 +absolute + + + +0.01 +smooth + +8.536662922251473 +47.349841321275576 +429.84868083326904 +7.253813175006739 +86.99168284653942 +0 +120 +absolute + + + +0.01 +smooth + +8.53666353282628 +47.349841714311964 +429.84887298744565 +7.183164978456043 +86.98093248406931 +0 +120 +absolute + + + +0.01 +smooth + +8.536664143321522 +47.349842107779004 +429.8490042251434 +7.11236227417017 +86.97016257116698 +0 +120 +absolute + + + +0.01 +smooth + +8.536664753729776 +47.34984250167301 +429.8490735153169 +7.041406840299383 +86.95937335387514 +0 +120 +absolute + + + +0.01 +smooth + +8.536665364071071 +47.34984289600798 +429.84908475952994 +6.970290470240171 +86.94856380137269 +0 +120 +absolute + + + +0.01 +smooth + +8.536665974591882 +47.349843290943795 +429.8490828931084 +6.898922572208548 +86.93772234896522 +0 +120 +absolute + + + +0.01 +smooth + +8.53666658534655 +47.349843686516465 +429.8490789609997 +6.827282427114834 +86.92684637048129 +0 +120 +absolute + + + +0.01 +smooth + +8.53666719632765 +47.349844082722235 +429.849072972183 +6.755371779551831 +86.91593611273973 +0 +120 +absolute + + + +0.01 +smooth + +8.53666780752776 +47.349844479557355 +429.8490649356372 +6.683192374112341 +86.90499182255931 +0 +120 +absolute + + + +0.01 +smooth + +8.536668418939454 +47.34984487701806 +429.8490548603416 +6.6107459553891665 +86.89401374675886 +0 +120 +absolute + + + +0.01 +smooth + +8.536669030555304 +47.34984527510058 +429.84904275527504 +6.538034267975121 +86.88300213215716 +0 +120 +absolute + + + +0.01 +smooth + +8.536669642367887 +47.34984567380116 +429.84902862941675 +6.465059056462985 +86.87195722557303 +0 +120 +absolute + + + +0.01 +smooth + +8.536670254369781 +47.34984607311605 +429.84901249174584 +6.391822065445567 +86.86087927382523 +0 +120 +absolute + + + +0.01 +smooth + +8.536670866553562 +47.34984647304147 +429.8489943512414 +6.3183250395156705 +86.84976852373262 +0 +120 +absolute + + + +0.01 +smooth + +8.536671478911803 +47.34984687357366 +429.84897421688237 +6.244569723266099 +86.83862522211396 +0 +120 +absolute + + + +0.01 +smooth + +8.53667209143708 +47.349847274708864 +429.84895209764807 +6.1705578612896534 +86.82744961578805 +0 +120 +absolute + + + +0.01 +smooth + +8.536672704121969 +47.349847676443325 +429.8489280025173 +6.09629119817915 +86.81624195157372 +0 +120 +absolute + + + +0.01 +smooth + +8.536673316959046 +47.34984807877327 +429.84890194046943 +6.021771478527363 +86.80500247628976 +0 +120 +absolute + + + +0.01 +smooth + +8.53667392994089 +47.349848481694984 +429.8488739204835 +5.947000446927108 +86.79373143675494 +0 +120 +absolute + + + +0.01 +smooth + +8.536674543060064 +47.34984888520463 +429.8488439515384 +5.871979847971183 +86.78242907978807 +0 +120 +absolute + + + +0.01 +smooth + +8.536675156309162 +47.3498492892985 +429.8488120426136 +5.796711426252398 +86.77109565220802 +0 +120 +absolute + + + +0.01 +smooth + +8.536675769680741 +47.34984969397279 +429.84877820268747 +5.721196926363546 +86.75973140083347 +0 +120 +absolute + + + +0.01 +smooth + +8.536676383167395 +47.34985009922381 +429.84874244074007 +5.645438092897435 +86.74833657248332 +0 +120 +absolute + + + +0.01 +smooth + +8.536676996761683 +47.349850505047726 +429.84870476574963 +5.569436670446877 +86.73691141397636 +0 +120 +absolute + + + +0.01 +smooth + +8.536677610456188 +47.349850911440804 +429.84866518669565 +5.493194403604648 +86.72545617213133 +0 +120 +absolute + + + +0.01 +smooth + +8.536678224243484 +47.34985131839928 +429.8486237125573 +5.416713036963564 +86.71397109376707 +0 +120 +absolute + + + +0.01 +smooth + +8.536678838116151 +47.349851725919414 +429.8485803523134 +5.339994315116426 +86.7024564257024 +0 +120 +absolute + + + +0.01 +smooth + +8.536679452066759 +47.34985213399741 +429.8485351149432 +5.263039982656034 +86.69091241475608 +0 +120 +absolute + + + +0.01 +smooth + +8.536680066087888 +47.349852542629534 +429.84848800942575 +5.185851784175194 +86.67933930774694 +0 +120 +absolute + + + +0.01 +smooth + +8.53668068017211 +47.34985295181201 +429.8484390447402 +5.108431464266705 +86.66773735149377 +0 +120 +absolute + + + +0.01 +smooth + +8.536681294312 +47.349853361541086 +429.8483882298656 +5.030780767523382 +86.65610679281536 +0 +120 +absolute + + + +0.01 +smooth + +8.536681908500139 +47.34985377181299 +429.848335573781 +4.952901438538001 +86.64444787853054 +0 +120 +absolute + + + +0.01 +smooth + +8.536682522729095 +47.34985418262396 +429.84828108546526 +4.874795221903376 +86.63276085545807 +0 +120 +absolute + + + +0.01 +smooth + +8.536683136991453 +47.349854593970264 +429.8482247738981 +4.7964638622123115 +86.62104597041682 +0 +120 +absolute + + + +0.01 +smooth + +8.536683751279776 +47.349855005848084 +429.8481666480579 +4.717909104057606 +86.60930347022548 +0 +120 +absolute + + + +0.01 +smooth + +8.536684365586652 +47.349855418253725 +429.84810671692435 +4.639132692032065 +86.59753360170299 +0 +120 +absolute + + + +0.01 +smooth + +8.53668497990465 +47.34985583118336 +429.848044989476 +4.560136370728485 +86.58573661166801 +0 +120 +absolute + + + +0.01 +smooth + +8.536685594226343 +47.34985624463327 +429.84798147469235 +4.480921884739686 +86.57391274693943 +0 +120 +absolute + + + +0.01 +smooth + +8.536686208544317 +47.34985665859972 +429.8479161815524 +4.401490978658445 +86.56206225433606 +0 +120 +absolute + + + +0.01 +smooth + +8.536686822851136 +47.34985707307888 +429.8478491190351 +4.321845397077569 +86.55018538067661 +0 +120 +absolute + + + +0.01 +smooth + +8.536687437139381 +47.34985748806702 +429.84778029611954 +4.241986884589866 +86.53828237277999 +0 +120 +absolute + + + +0.01 +smooth + +8.536688051401628 +47.34985790356039 +429.847709721785 +4.161917185788136 +86.52635347746491 +0 +120 +absolute + + + +0.01 +smooth + +8.536688665630452 +47.34985831955522 +429.84763740501046 +4.081638045265181 +86.51439894155024 +0 +120 +absolute + + + +0.01 +smooth + +8.536689279818427 +47.349858736047736 +429.84756335477493 +4.001151207613803 +86.50241901185473 +0 +120 +absolute + + + +0.01 +smooth + +8.53668989395813 +47.349859153034195 +429.84748758005753 +3.9204584174268176 +86.49041393519721 +0 +120 +absolute + + + +0.01 +smooth + +8.536690508042135 +47.349859570510844 +429.84741008983747 +3.839561419296999 +86.47838395839649 +0 +120 +absolute + + + +0.01 +smooth + +8.536691122063019 +47.34985998847389 +429.84733089309367 +3.758461957817163 +86.46632932827133 +0 +120 +absolute + + + +0.01 +smooth + +8.536691736013358 +47.34986040691959 +429.8472499988054 +3.6771617775801104 +86.45425029164056 +0 +120 +absolute + + + +0.01 +smooth + +8.536692349885726 +47.34986082584418 +429.8471674159516 +3.5956626231786446 +86.442147095323 +0 +120 +absolute + + + +0.01 +smooth + +8.536692963672701 +47.3498612452439 +429.8470831535114 +3.5139662392055664 +86.4300199861374 +0 +120 +absolute + + + +0.01 +smooth + +8.536693577366854 +47.34986166511499 +429.8469972204639 +3.4320743702536927 +86.4178692109026 +0 +120 +absolute + + + +0.01 +smooth + +8.536694190960766 +47.349862085453694 +429.84690962578816 +3.349988760915796 +86.40569501643736 +0 +120 +absolute + + + +0.01 +smooth + +8.536694804447011 +47.34986250625624 +429.84682037846335 +3.267711155784692 +86.39349764956054 +0 +120 +absolute + + + +0.01 +smooth + +8.536695417818162 +47.34986292751887 +429.84672948746845 +3.1852432994531834 +86.3812773570909 +0 +120 +absolute + + + +0.01 +smooth + +8.536696031066796 +47.34986334923782 +429.8466369617826 +3.1025869365140717 +86.36903438584724 +0 +120 +absolute + + + +0.01 +smooth + +8.53669664418549 +47.34986377140933 +429.846542810385 +3.019743811560158 +86.35676898264838 +0 +120 +absolute + + + +0.01 +smooth + +8.536697257166816 +47.34986419402965 +429.84644704225445 +2.9367156691842453 +86.34448139431309 +0 +120 +absolute + + + +0.01 +smooth + +8.536697870003353 +47.349864617095 +429.8463496663703 +2.8535042539791498 +86.33217186766022 +0 +120 +absolute + + + +0.01 +smooth + +8.536698482687676 +47.34986504060163 +429.8462506917116 +2.7701113105376445 +86.31984064950854 +0 +120 +absolute + + + +0.01 +smooth + +8.53669909521236 +47.34986546454578 +429.8461501272573 +2.6865385834525437 +86.30748798667685 +0 +120 +absolute + + + +0.01 +smooth + +8.53669970756998 +47.34986588892369 +429.84604798198666 +2.602787817316651 +86.29511412598396 +0 +120 +absolute + + + +0.01 +smooth + +8.53670031975311 +47.34986631373158 +429.84594426487865 +2.5188607567227685 +86.28271931424862 +0 +120 +absolute + + + +0.01 +smooth + +8.53670093175433 +47.34986673896571 +429.84583898491246 +2.4347591462636977 +86.27030379828972 +0 +120 +absolute + + + +0.01 +smooth + +8.536701543566213 +47.34986716462231 +429.84573215106707 +2.35048473053224 +86.25786782492601 +0 +120 +absolute + + + +0.01 +smooth + +8.536702155181334 +47.34986759069762 +429.8456237723216 +2.2660392541212113 +86.24541164097629 +0 +120 +absolute + + + +0.01 +smooth + +8.536702766592269 +47.34986801718788 +429.84551385765513 +2.1814244616233855 +86.23293549325938 +0 +120 +absolute + + + +0.01 +smooth + +8.536703377791595 +47.34986844408933 +429.84540241604674 +2.096642097631578 +86.22043962859405 +0 +120 +absolute + + + +0.01 +smooth + +8.536703988771885 +47.34986887139821 +429.8452894564756 +2.0116939067385915 +86.20792429379912 +0 +120 +absolute + + + +0.01 +smooth + +8.536704599525716 +47.34986929911074 +429.8451749879208 +1.9265816335372279 +86.19538973569341 +0 +120 +absolute + + + +0.01 +smooth + +8.536705210045666 +47.34986972722318 +429.8450590193613 +1.8413070226202874 +86.1828362010957 +0 +120 +absolute + + + +0.01 +smooth + +8.536705820324304 +47.349870155731764 +429.8449415597763 +1.755871818580573 +86.17026393682477 +0 +120 +absolute + + + +0.01 +smooth + +8.536706430354213 +47.34987058463273 +429.8448226181448 +1.6702777660109018 +86.15767318969947 +0 +120 +absolute + + + +0.01 +smooth + +8.536707040127965 +47.34987101392231 +429.844702203446 +1.5845266095040447 +86.14506420653855 +0 +120 +absolute + + + +0.01 +smooth + +8.536707649645068 +47.34987144360101 +429.8445793681079 +1.4986177678197259 +86.13243693538588 +0 +120 +absolute + + + +0.01 +smooth + +8.536708259126858 +47.3498718738058 +429.8444227706677 +1.4124762311338674 +86.11978176437056 +0 +120 +absolute + + + +0.01 +smooth + +8.53670886867673 +47.349872304601114 +429.8442179183241 +1.3260665235452103 +86.10709416320186 +0 +120 +absolute + + + +0.01 +smooth + +8.536709478287124 +47.3498727359831 +429.843965718976 +1.2393903816265104 +86.09437438238105 +0 +120 +absolute + + + +0.01 +smooth + +8.536710087950478 +47.349873167947955 +429.84366708052295 +1.152449541950541 +86.08162267240938 +0 +120 +absolute + + + +0.01 +smooth + +8.536710697659236 +47.34987360049182 +429.84332291086383 +1.065245741090028 +86.06883928378817 +0 +120 +absolute + + + +0.01 +smooth + +8.536711307405847 +47.349874033610895 +429.84293411789827 +0.9777807156177444 +86.05602446701873 +0 +120 +absolute + + + +0.01 +smooth + +8.536711917182748 +47.349874467301355 +429.8425016095252 +0.8900562021064469 +86.04317847260235 +0 +120 +absolute + + + +0.01 +smooth + +8.536712526982381 +47.349874901559375 +429.842026293644 +0.8020739371288934 +86.03030155104032 +0 +120 +absolute + + + +0.01 +smooth + +8.536713136797188 +47.3498753363811 +429.84150907815365 +0.7138356572578395 +86.01739395283388 +0 +120 +absolute + + + +0.01 +smooth + +8.536713746619611 +47.34987577176276 +429.8409508709537 +0.6253430990660441 +86.00445592848439 +0 +120 +absolute + + + +0.01 +smooth + +8.5367143564421 +47.349876207700476 +429.84035257994316 +0.536597999126279 +85.99148772849314 +0 +120 +absolute + + + +0.01 +smooth + +8.536714966257087 +47.34987664419044 +429.8397151130212 +0.4476020940112703 +85.97848960336135 +0 +120 +absolute + + + +0.01 +smooth + +8.536715576057023 +47.34987708122884 +429.8390393780873 +0.3583571202937908 +85.96546180359039 +0 +120 +absolute + + + +0.01 +smooth + +8.536716185834349 +47.34987751881184 +429.83832628304054 +0.26886481454659766 +85.95240457968153 +0 +120 +absolute + + + +0.01 +smooth + +8.536716795581505 +47.34987795693562 +429.8375767357801 +0.1791269133424479 +85.93931818213605 +0 +120 +absolute + + + +0.01 +smooth + +8.536717405290931 +47.34987839559634 +429.8367916442052 +0.08914515325409884 +85.92620286145525 +0 +120 +absolute + + + +0.01 +smooth + +8.536718014955072 +47.34987883479017 +429.83597191621516 +-0.001078729145692875 +85.91305886814041 +0 +120 +absolute + + + +0.01 +smooth + +8.536718624566372 +47.34987927451331 +429.83511845970907 +-0.09154299728415356 +85.89988645269284 +0 +120 +absolute + + + +0.01 +smooth + +8.536719234117271 +47.34987971476191 +429.8342321825862 +-0.18224591458855824 +85.8866858656138 +0 +120 +absolute + + + +0.01 +smooth + +8.536719843600219 +47.34988015553218 +429.833313992746 +-0.2731857444861335 +85.87345735740466 +0 +120 +absolute + + + +0.01 +smooth + +8.536720453007648 +47.34988059682025 +429.83236479808727 +-0.3643607504041231 +85.8602011785666 +0 +120 +absolute + + + +0.01 +smooth + +8.536721062332004 +47.349881038622314 +429.8313855065095 +-0.4557691957697685 +85.84691757960101 +0 +120 +absolute + + + +0.01 +smooth + +8.536721671565733 +47.349881480934556 +429.830377025912 +-0.547409344010314 +85.83360681100913 +0 +120 +absolute + + + +0.01 +smooth + +8.536722280701273 +47.349881923753124 +429.82934026419366 +-0.6392794585530018 +85.82026912329223 +0 +120 +absolute + + + +0.01 +smooth + +8.536722889731069 +47.349882367074215 +429.82827612925405 +-0.7313778028250583 +85.80690476695167 +0 +120 +absolute + + + +0.01 +smooth + +8.536723498647563 +47.349882810894 +429.8271855289922 +-0.8237026402537592 +85.79351399248868 +0 +120 +absolute + + + +0.01 +smooth + +8.5367241074432 +47.34988325520866 +429.82606937130754 +-0.9162522342663306 +85.78009705040465 +0 +120 +absolute + + + +0.01 +smooth + +8.536724716110417 +47.349883700014345 +429.8249285640988 +-1.0090248482900162 +85.76665419120074 +0 +120 +absolute + + + +0.01 +smooth + +8.536725324641658 +47.34988414530725 +429.82376401526574 +-1.102018745752058 +85.75318566537834 +0 +120 +absolute + + + +0.01 +smooth + +8.536725933029372 +47.349884591083544 +429.8225766327074 +-1.1952321900796998 +85.7396917234387 +0 +120 +absolute + + + +0.01 +smooth + +8.53672654126599 +47.349885037339384 +429.8213673243228 +-1.2886634447001837 +85.72617261588306 +0 +120 +absolute + + + +0.01 +smooth + +8.536727149343967 +47.349885484070974 +429.8201369980115 +-1.3823107730407367 +85.71262859321283 +0 +120 +absolute + + + +0.01 +smooth + +8.536727757255735 +47.349885931274486 +429.81888656167257 +-1.4761724385286334 +85.69905990592925 +0 +120 +absolute + + + +0.01 +smooth + +8.536728364993746 +47.349886378946074 +429.8176169232052 +-1.5702467045911017 +85.68546680453359 +0 +120 +absolute + + + +0.01 +smooth + +8.536728972550433 +47.34988682708192 +429.8163289905085 +-1.6645318346553837 +85.67184953952713 +0 +120 +absolute + + + +0.01 +smooth + +8.536729579918243 +47.3498872756782 +429.815023671482 +-1.759026092148722 +85.65820836141123 +0 +120 +absolute + + + +0.01 +smooth + +8.536730187089619 +47.349887724731076 +429.8137018740247 +-1.8537277404983596 +85.64454352068712 +0 +120 +absolute + + + +0.01 +smooth + +8.536730794057004 +47.34988817423675 +429.8123645060358 +-1.948635043131524 +85.63085526785609 +0 +120 +absolute + + + +0.01 +smooth + +8.536731400812839 +47.34988862419137 +429.8110124754147 +-2.043746263475489 +85.6171438534195 +0 +120 +absolute + + + +0.01 +smooth + +8.536732007349565 +47.34988907459113 +429.8096466900605 +-2.139059664957483 +85.60340952787857 +0 +120 +absolute + + + +0.01 +smooth + +8.536732613659629 +47.3498895254322 +429.80826805787245 +-2.234573511004747 +85.58965254173462 +0 +120 +absolute + + + +0.01 +smooth + +8.536733219735469 +47.349889976710735 +429.8068774867498 +-2.3302860650445263 +85.57587314548896 +0 +120 +absolute + + + +0.01 +smooth + +8.53673382556953 +47.34989042842293 +429.80547588459166 +-2.4261955905040615 +85.56207158964284 +0 +120 +absolute + + + +0.01 +smooth + +8.536734431154255 +47.349890880564956 +429.80406415929735 +-2.522300350810596 +85.54824812469758 +0 +120 +absolute + + + +0.01 +smooth + +8.536735036482083 +47.34989133313299 +429.8026432187661 +-2.618598609391356 +85.53440300115449 +0 +120 +absolute + + + +0.01 +smooth + +8.53673564154546 +47.34989178612318 +429.80121397089715 +-2.7150886296736187 +85.52053646951484 +0 +120 +absolute + + + +0.01 +smooth + +8.536736246336828 +47.34989223953173 +429.79977732358964 +-2.8117686750846094 +85.50664878027989 +0 +120 +absolute + + + +0.01 +smooth + +8.536736850848628 +47.34989269335481 +429.79833418474277 +-2.90863700905157 +85.49274018395099 +0 +120 +absolute + + + +0.01 +smooth + +8.536737455073304 +47.34989314758858 +429.7968854622559 +-3.0056918950017457 +85.4788109310294 +0 +120 +absolute + + + +0.01 +smooth + +8.536738059003296 +47.34989360222923 +429.79543206402815 +-3.1029315963623776 +85.4648612720164 +0 +120 +absolute + + + +0.01 +smooth + +8.53673866263105 +47.349894057272934 +429.79397489795883 +-3.200354376560709 +85.45089145741332 +0 +120 +absolute + + + +0.01 +smooth + +8.536739265949008 +47.34989451271585 +429.792514871947 +-3.2979584990239657 +85.43690173772143 +0 +120 +absolute + + + +0.01 +smooth + +8.536739868949608 +47.34989496855416 +429.7910528938921 +-3.395742227179425 +85.42289236344202 +0 +120 +absolute + + + +0.01 +smooth + +8.536740471625299 +47.34989542478405 +429.7895898716931 +-3.493703824454313 +85.40886358507639 +0 +120 +absolute + + + +0.01 +smooth + +8.536741073968518 +47.34989588140168 +429.78812671324954 +-3.5918415542758706 +85.39481565312582 +0 +120 +absolute + + + +0.01 +smooth + +8.53674167597171 +47.34989633840323 +429.7866643264603 +-3.690153680071343 +85.38074881809162 +0 +120 +absolute + + + +0.01 +smooth + +8.536742277627319 +47.34989679578487 +429.78520361922483 +-3.7886384652679728 +85.36666333047506 +0 +120 +absolute + + + +0.01 +smooth + +8.536742878927782 +47.34989725354279 +429.7837454994423 +-3.8872941732930006 +85.35255944077745 +0 +120 +absolute + + + +0.01 +smooth + +8.536743479865548 +47.34989771167314 +429.7822908750119 +-3.986119067573654 +85.3384373995001 +0 +120 +absolute + + + +0.01 +smooth + +8.536744080433056 +47.34989817017211 +429.7808406538329 +-4.085111411537211 +85.32429745714424 +0 +120 +absolute + + + +0.01 +smooth + +8.536744680622752 +47.34989862903588 +429.77939574380457 +-4.184269468610895 +85.31013986421121 +0 +120 +absolute + + + +0.01 +smooth + +8.536745280427072 +47.3498990882606 +429.77795705282585 +-4.283591502221951 +85.2959648712023 +0 +120 +absolute + + + +0.01 +smooth + +8.536745879838463 +47.34989954784246 +429.7765254887964 +-4.383075775797621 +85.2817727286188 +0 +120 +absolute + + + +0.01 +smooth + +8.536746478849368 +47.34990000777765 +429.7751019596151 +-4.482720552765146 +85.26756368696199 +0 +120 +absolute + + + +0.01 +smooth + +8.536747077452226 +47.3499004680623 +429.77368737318125 +-4.582524096551772 +85.2533379967332 +0 +120 +absolute + + + +0.01 +smooth + +8.536747675639484 +47.34990092869263 +429.77228263739414 +-4.682484670584723 +85.23909590843364 +0 +120 +absolute + + + +0.01 +smooth + +8.536748273403582 +47.3499013896648 +429.7708886601531 +-4.782600538291276 +85.22483767256468 +0 +120 +absolute + + + +0.01 +smooth + +8.536748870736961 +47.34990185097497 +429.76950634935713 +-4.882869963098659 +85.21056353962759 +0 +120 +absolute + + + +0.01 +smooth + +8.536749467632067 +47.34990231261933 +429.76813661290544 +-4.983291208434111 +85.19627376012365 +0 +120 +absolute + + + +0.01 +smooth + +8.53675006426352 +47.34990277469675 +429.76676385753717 +-5.083916937377874 +85.1819615410588 +0 +120 +absolute + + + +0.01 +smooth + +8.536750660805724 +47.3499032373061 +429.7653720961715 +-5.18479981182691 +85.16762009274471 +0 +120 +absolute + + + +0.01 +smooth + +8.536751257250799 +47.34990370044351 +429.7639616459787 +-5.285938093433533 +85.15324967064151 +0 +120 +absolute + + + +0.01 +smooth + +8.536751853590859 +47.34990416410512 +429.7625328241289 +-5.387330043850105 +85.13885053020908 +0 +120 +absolute + + + +0.01 +smooth + +8.53675244981802 +47.34990462828706 +429.76108594779237 +-5.488973924728943 +85.12442292690746 +0 +120 +absolute + + + +0.01 +smooth + +8.536753045924394 +47.34990509298544 +429.7596213341387 +-5.590867997722373 +85.10996711619663 +0 +120 +absolute + + + +0.01 +smooth + +8.536753641902108 +47.349905558196426 +429.7581393003385 +-5.693010524482728 +85.09548335353662 +0 +120 +absolute + + + +0.01 +smooth + +8.536754237743267 +47.34990602391616 +429.7566401635617 +-5.795399766662336 +85.08097189438746 +0 +120 +absolute + + + +0.01 +smooth + +8.536754833439995 +47.34990649014075 +429.75512424097855 +-5.8980339859135285 +85.06643299420908 +0 +120 +absolute + + + +0.01 +smooth + +8.536755428984398 +47.34990695686631 +429.75359184975855 +-6.000911443888615 +85.05186690846149 +0 +120 +absolute + + + +0.01 +smooth + +8.536756024368605 +47.349907424089025 +429.75204330707265 +-6.104030402239964 +85.03727389260473 +0 +120 +absolute + + + +0.01 +smooth + +8.536756619584727 +47.34990789180502 +429.7504789300906 +-6.207389122619887 +85.02265420209876 +0 +120 +absolute + + + +0.01 +smooth + +8.536757214624876 +47.3499083600104 +429.7488990359824 +-6.3109858666807135 +85.00800809240364 +0 +120 +absolute + + + +0.01 +smooth + +8.536757809481172 +47.34990882870131 +429.7473039419182 +-6.414818896074772 +84.99333581897928 +0 +120 +absolute + + + +0.01 +smooth + +8.536758404145733 +47.34990929787391 +429.7456939650681 +-6.518886472454398 +84.97863763728576 +0 +120 +absolute + + + +0.01 +smooth + +8.53675899861067 +47.349909767524295 +429.7440694226025 +-6.623186857471916 +84.96391380278305 +0 +120 +absolute + + + +0.01 +smooth + +8.536759592868103 +47.34991023764864 +429.74243063169115 +-6.72771831277964 +84.94916457093112 +0 +120 +absolute + + + +0.01 +smooth + +8.536760186910147 +47.34991070824304 +429.7407779095042 +-6.832479100029935 +84.93439019719 +0 +120 +absolute + + + +0.01 +smooth + +8.536760780728917 +47.34991117930364 +429.7391115732119 +-6.9374674808751156 +84.91959093701968 +0 +120 +absolute + + + +0.01 +smooth + +8.536761374316534 +47.349911650826606 +429.7374319399843 +-7.042681716967509 +84.90476704588019 +0 +120 +absolute + + + +0.01 +smooth + +8.536761967665104 +47.349912122808014 +429.7357393269914 +-7.148120069959445 +84.88991877923146 +0 +120 +absolute + + + +0.01 +smooth + +8.536762560766755 +47.34991259524406 +429.7340340514035 +-7.253780801503258 +84.87504639253359 +0 +120 +absolute + + + +0.01 +smooth + +8.536763153613597 +47.349913068130846 +429.73231643039077 +-7.359662173251275 +84.86015014124652 +0 +120 +absolute + + + +0.01 +smooth + +8.536763746197748 +47.34991354146451 +429.73058678112307 +-7.465762446855807 +84.84523028083025 +0 +120 +absolute + + + +0.01 +smooth + +8.536764338511322 +47.34991401524117 +429.7288454207704 +-7.57207988396922 +84.83028706674476 +0 +120 +absolute + + + +0.01 +smooth + +8.536764930546434 +47.34991448945699 +429.72709266650327 +-7.678612746243828 +84.8153207544501 +0 +120 +absolute + + + +0.01 +smooth + +8.536765522295205 +47.3499149641081 +429.72532883549167 +-7.785359295331962 +84.80033159940625 +0 +120 +absolute + + + +0.01 +smooth + +8.536766113749747 +47.349915439190596 +429.72355424490536 +-7.892317792885945 +84.78531985707316 +0 +120 +absolute + + + +0.01 +smooth + +8.536766704902181 +47.34991591470067 +429.7217692119151 +-7.999486500558119 +84.7702857829109 +0 +120 +absolute + + + +0.01 +smooth + +8.536767295744617 +47.34991639063442 +429.71997405369035 +-8.106863680000783 +84.75522963237947 +0 +120 +absolute + + + +0.01 +smooth + +8.536767886269176 +47.34991686698799 +429.7181690874017 +-8.214447592866314 +84.74015166093884 +0 +120 +absolute + + + +0.01 +smooth + +8.53676847646797 +47.34991734375749 +429.71635463021875 +-8.322236500807016 +84.72505212404894 +0 +120 +absolute + + + +0.01 +smooth + +8.536769066333118 +47.349917820939105 +429.7145309993121 +-8.430228665475225 +84.70993127716993 +0 +120 +absolute + + + +0.01 +smooth + +8.536769655856737 +47.34991829852893 +429.7126985118516 +-8.538422348523266 +84.6947893757617 +0 +120 +absolute + + + +0.01 +smooth + +8.53677024503094 +47.349918776523104 +429.71085748500747 +-8.646815811603473 +84.67962667528424 +0 +120 +absolute + + + +0.01 +smooth + +8.536770833847848 +47.34991925491778 +429.70900823594974 +-8.755407316368172 +84.66444343119761 +0 +120 +absolute + + + +0.01 +smooth + +8.536771422299571 +47.34991973370907 +429.7071510818485 +-8.864195124469678 +84.6492398989618 +0 +120 +absolute + + + +0.01 +smooth + +8.536772010378229 +47.349920212893124 +429.70528633987396 +-8.973177497560357 +84.63401633403676 +0 +120 +absolute + + + +0.01 +smooth + +8.536772598075936 +47.34992069246607 +429.7034143271961 +-9.082352697292523 +84.61877299188252 +0 +120 +absolute + + + +0.01 +smooth + +8.536773185384812 +47.34992117242403 +429.70153536098525 +-9.191718985318502 +84.6035101279591 +0 +120 +absolute + + + +0.01 +smooth + +8.536773772296968 +47.34992165276316 +429.6996497584113 +-9.301274623290624 +84.58822799772648 +0 +120 +absolute + + + +0.01 +smooth + +8.536774358804525 +47.34992213347958 +429.69775783664437 +-9.41101787286122 +84.57292685664464 +0 +120 +absolute + + + +0.01 +smooth + +8.536774944899596 +47.34992261456943 +429.69585991285476 +-9.520946995682625 +84.55760696017362 +0 +120 +absolute + + + +0.01 +smooth + +8.5367755305743 +47.349923096028846 +429.6939563042123 +-9.631060253407142 +84.5422685637734 +0 +120 +absolute + + + +0.01 +smooth + +8.536776115820748 +47.34992357785397 +429.6920473278873 +-9.74135590768714 +84.52691192290398 +0 +120 +absolute + + + +0.01 +smooth + +8.536776700631062 +47.349924060040905 +429.69013330104974 +-9.851832220174938 +84.51153729302536 +0 +120 +absolute + + + +0.01 +smooth + +8.536777284997354 +47.349924542585825 +429.6882145408699 +-9.96248745252286 +84.49614492959752 +0 +120 +absolute + + + +0.01 +smooth + +8.536777868911743 +47.34992502548483 +429.6862913645178 +-10.073319866383233 +84.4807350880805 +0 +120 +absolute + + + +0.01 +smooth + +8.536778452366343 +47.349925508734074 +429.6843640891635 +-10.184327723408394 +84.46530802393427 +0 +120 +absolute + + + +0.01 +smooth + +8.53677903535327 +47.34992599232969 +429.6824330319771 +-10.295509285250667 +84.44986399261884 +0 +120 +absolute + + + +0.01 +smooth + +8.536779617864644 +47.3499264762678 +429.6804985101288 +-10.40686281356237 +84.43440324959421 +0 +120 +absolute + + + +0.01 +smooth + +8.536780199892576 +47.349926960544565 +429.6785608407887 +-10.518386569995862 +84.41892605032038 +0 +120 +absolute + + + +0.01 +smooth + +8.536780781429185 +47.349927445156084 +429.67662034112675 +-10.630078816203461 +84.40343265025734 +0 +120 +absolute + + + +0.01 +smooth + +8.536781362466588 +47.34992793009852 +429.67467732831324 +-10.741937813837495 +84.38792330486513 +0 +120 +absolute + + + +0.01 +smooth + +8.536781942996898 +47.349928415367984 +429.67273211951823 +-10.853961824550293 +84.37239826960368 +0 +120 +absolute + + + +0.01 +smooth + +8.536782523012235 +47.34992890096063 +429.6707850319118 +-10.966149109994186 +84.35685779993305 +0 +120 +absolute + + + +0.01 +smooth + +8.53678310250471 +47.34992938687259 +429.66883638266415 +-11.078497931821506 +84.3413021513132 +0 +120 +absolute + + + +0.01 +smooth + +8.536783681466446 +47.349929873099974 +429.6668864889451 +-11.19100655168456 +84.32573157920416 +0 +120 +absolute + + + +0.01 +smooth + +8.536784259889554 +47.349930359638954 +429.6649356679252 +-11.303673231235717 +84.31014633906591 +0 +120 +absolute + + + +0.01 +smooth + +8.53678483776615 +47.349930846485634 +429.6629842367742 +-11.41649623212729 +84.29454668635847 +0 +120 +absolute + + + +0.01 +smooth + +8.536785415088353 +47.349931333636164 +429.66103251266236 +-11.52947381601161 +84.2789328765418 +0 +120 +absolute + + + +0.01 +smooth + +8.536785991848278 +47.34993182108667 +429.6590808127597 +-11.642604244541003 +84.26330516507595 +0 +120 +absolute + + + +0.01 +smooth + +8.53678656803804 +47.3499323088333 +429.6571294542365 +-11.755885779367802 +84.24766380742089 +0 +120 +absolute + + + +0.01 +smooth + +8.536787143649759 +47.34993279687217 +429.65517875426275 +-11.869316682144312 +84.23200905903663 +0 +120 +absolute + + + +0.01 +smooth + +8.536787718675546 +47.34993328519943 +429.6532290300085 +-11.982895214522914 +84.21634117538314 +0 +120 +absolute + + + +0.01 +smooth + +8.53678829310752 +47.349933773811195 +429.65128059864395 +-12.096619638155905 +84.20066041192047 +0 +120 +absolute + + + +0.01 +smooth + +8.536788866937796 +47.34993426270362 +429.64933377733917 +-12.210488214695625 +84.18496702410857 +0 +120 +absolute + + + +0.01 +smooth + +8.536789440158492 +47.34993475187282 +429.6473888832644 +-12.3244992057944 +84.1692612674075 +0 +120 +absolute + + + +0.01 +smooth + +8.536790012761724 +47.349935241314945 +429.6454462335895 +-12.438650873104558 +84.15354339727719 +0 +120 +absolute + + + +0.01 +smooth + +8.536790584867587 +47.349935731089374 +429.6435021387276 +-12.552974083577379 +84.13780938265548 +0 +120 +absolute + + + +0.01 +smooth + +8.53679115673185 +47.34993622132263 +429.6415485796005 +-12.66753434707662 +84.1220506407796 +0 +120 +absolute + + + +0.01 +smooth + +8.536791728354032 +47.349936712014795 +429.6395854899376 +-12.782331962685507 +84.10626716422271 +0 +120 +absolute + + + +0.01 +smooth + +8.536792299725661 +47.34993720316202 +429.63761305299823 +-12.897365191653344 +84.09045921349933 +0 +120 +absolute + + + +0.01 +smooth + +8.536792870838262 +47.34993769476041 +429.6356314520416 +-13.01263229522944 +84.07462704912398 +0 +120 +absolute + + + +0.01 +smooth + +8.536793441683358 +47.349938186806085 +429.63364087032676 +-13.128131534663124 +84.05877093161106 +0 +120 +absolute + + + +0.01 +smooth + +8.536794012252464 +47.34993867929516 +429.631641491113 +-13.243861171203697 +84.04289112147512 +0 +120 +absolute + + + +0.01 +smooth + +8.53679458253712 +47.349939172223785 +429.6296334976594 +-13.359819466100491 +84.02698787923069 +0 +120 +absolute + + + +0.01 +smooth + +8.536795152528839 +47.34993966558806 +429.62761707322534 +-13.476004680602797 +84.01106146539217 +0 +120 +absolute + + + +0.01 +smooth + +8.536795722219146 +47.349940159384126 +429.62559240106987 +-13.592415075959972 +83.99511214047412 +0 +120 +absolute + + + +0.01 +smooth + +8.536796291599567 +47.349940653608066 +429.623559664452 +-13.709048913421308 +83.97914016499098 +0 +120 +absolute + + + +0.01 +smooth + +8.536796860661624 +47.34994114825605 +429.6215190466312 +-13.825904454236136 +83.96314579945728 +0 +120 +absolute + + + +0.01 +smooth + +8.536797429396843 +47.34994164332419 +429.6194707308666 +-13.942979959653762 +83.9471293043875 +0 +120 +absolute + + + +0.01 +smooth + +8.536797997796745 +47.34994213880859 +429.61741490041715 +-14.060273690923506 +83.93109094029609 +0 +120 +absolute + + + +0.01 +smooth + +8.536798565852855 +47.3499426347054 +429.6153517385425 +-14.177783909294691 +83.91503096769765 +0 +120 +absolute + + + +0.01 +smooth + +8.5367991335567 +47.349943131010725 +429.61328142850135 +-14.295508876016607 +83.89894964710656 +0 +120 +absolute + + + +0.01 +smooth + +8.5367997008998 +47.349943627720684 +429.6112041535532 +-14.413446852338613 +83.88284723903735 +0 +120 +absolute + + + +0.01 +smooth + +8.536800267873677 +47.34994412483141 +429.60912009695693 +-14.531596099510006 +83.8667240040045 +0 +120 +absolute + + + +0.01 +smooth + +8.53680083446986 +47.349944622339024 +429.60702944197214 +-14.64995487878011 +83.85058020252255 +0 +120 +absolute + + + +0.01 +smooth + +8.536801400679872 +47.34994512023965 +429.6049323718577 +-14.768521451398232 +83.83441609510591 +0 +120 +absolute + + + +0.01 +smooth + +8.536801966495231 +47.349945618529404 +429.60282906987277 +-14.887294078613698 +83.81823194226911 +0 +120 +absolute + + + +0.01 +smooth + +8.536802531907467 +47.34994611720442 +429.60071971927687 +-15.006271021675795 +83.80202800452668 +0 +120 +absolute + + + +0.01 +smooth + +8.536803096908102 +47.34994661626082 +429.5986045033289 +-15.125450541833898 +83.78580454239307 +0 +120 +absolute + + + +0.01 +smooth + +8.53680366148866 +47.34994711569473 +429.59648360528814 +-15.244830900337288 +83.76956181638278 +0 +120 +absolute + + + +0.01 +smooth + +8.536804225640662 +47.349947615502245 +429.59435720841344 +-15.36441035843528 +83.75330008701023 +0 +120 +absolute + + + +0.01 +smooth + +8.536804789355637 +47.34994811567953 +429.5922254959646 +-15.484187177377208 +83.73701961479004 +0 +120 +absolute + + + +0.01 +smooth + +8.536805352625104 +47.349948616222676 +429.5900886512004 +-15.604159618412377 +83.72072066023662 +0 +120 +absolute + + + +0.01 +smooth + +8.536805915440588 +47.34994911712781 +429.5879468573801 +-15.724325942790104 +83.70440348386447 +0 +120 +absolute + + + +0.01 +smooth + +8.536806477793615 +47.34994961839108 +429.5858002977628 +-15.844684411759694 +83.6880683461881 +0 +120 +absolute + + + +0.01 +smooth + +8.53680703967571 +47.349950120008586 +429.583649155608 +-15.965233286570502 +83.67171550772201 +0 +120 +absolute + + + +0.01 +smooth + +8.536807601078392 +47.34995062197645 +429.58149361417446 +-16.08597082847182 +83.65534522898064 +0 +120 +absolute + + + +0.01 +smooth + +8.536808161993186 +47.3499511242908 +429.57933385672163 +-16.206895298712965 +83.6389577704785 +0 +120 +absolute + + + +0.01 +smooth + +8.536808722411621 +47.34995162694778 +429.57717006650876 +-16.328004958543268 +83.62255339273014 +0 +120 +absolute + + + +0.01 +smooth + +8.536809282325212 +47.34995212994348 +429.5750024267947 +-16.449298069212027 +83.60613235624996 +0 +120 +absolute + + + +0.01 +smooth + +8.53680984172549 +47.34995263327403 +429.57283112083894 +-16.570772891968574 +83.58969492155249 +0 +120 +absolute + + + +0.01 +smooth + +8.536810400603974 +47.34995313693556 +429.57065633190064 +-16.692427688062196 +83.57324134915224 +0 +120 +absolute + + + +0.01 +smooth + +8.536810958952191 +47.349953640924205 +429.5684782432387 +-16.81426071874226 +83.5567718995637 +0 +120 +absolute + + + +0.01 +smooth + +8.536811516761665 +47.34995414523607 +429.5662970381127 +-16.936270245258058 +83.54028683330131 +0 +120 +absolute + + + +0.01 +smooth + +8.536812074023919 +47.349954649867286 +429.56411289978155 +-17.058454528858906 +83.5237864108796 +0 +120 +absolute + + + +0.01 +smooth + +8.536812630730475 +47.34995515481397 +429.5619260115045 +-17.180811830794127 +83.50727089281307 +0 +120 +absolute + + + +0.01 +smooth + +8.536813186872859 +47.349955660072254 +429.5597365565408 +-17.30334041231303 +83.49074053961618 +0 +120 +absolute + + + +0.01 +smooth + +8.536813742442595 +47.34995616563826 +429.55754471814964 +-17.426038534664936 +83.47419561180345 +0 +120 +absolute + + + +0.01 +smooth + +8.536814297431205 +47.349956671508096 +429.5553506795901 +-17.548904459099145 +83.45763636988937 +0 +120 +absolute + + + +0.01 +smooth + +8.536814851830215 +47.34995717767791 +429.5531546241214 +-17.671936446865015 +83.44106307438841 +0 +120 +absolute + + + +0.01 +smooth + +8.536815405631145 +47.3499576841438 +429.5509567350027 +-17.79513275921184 +83.42447598581506 +0 +120 +absolute + + + +0.01 +smooth + +8.536815958825525 +47.3499581909019 +429.54875719549335 +-17.918491657388934 +83.40787536468383 +0 +120 +absolute + + + +0.01 +smooth + +8.536816511404872 +47.34995869794834 +429.5465561888524 +-18.04201140264562 +83.3912614715092 +0 +120 +absolute + + + +0.01 +smooth + +8.536817063360715 +47.34995920527924 +429.54435389833895 +-18.165690256231215 +83.37463456680564 +0 +120 +absolute + + + +0.01 +smooth + +8.536817614684576 +47.34995971289071 +429.54215050721234 +-18.289526479395036 +83.35799491108769 +0 +120 +absolute + + + +0.01 +smooth + +8.536818165367977 +47.34996022077888 +429.5399461987316 +-18.413518333386374 +83.34134276486981 +0 +120 +absolute + + + +0.01 +smooth + +8.536818715402445 +47.34996072893989 +429.53774115615613 +-18.5376640794546 +83.32467838866648 +0 +120 +absolute + + + +0.01 +smooth + +8.536819264779503 +47.34996123736984 +429.53553556274494 +-18.661961978849 +83.3080020429922 +0 +120 +absolute + + + +0.01 +smooth + +8.536819813490673 +47.349961746064864 +429.53332960175726 +-18.786410292818893 +83.29131398836148 +0 +120 +absolute + + + +0.01 +smooth + +8.536820361527479 +47.34996225502108 +429.5311234564523 +-18.911007282613596 +83.2746144852888 +0 +120 +absolute + + + +0.01 +smooth + +8.536820908881447 +47.34996276423463 +429.5289173100892 +-19.03575120948243 +83.25790379428864 +0 +120 +absolute + + + +0.01 +smooth + +8.536821455544098 +47.349963273701604 +429.5267113459272 +-19.16064033467469 +83.24118217587548 +0 +120 +absolute + + + +0.01 +smooth + +8.536822001506959 +47.34996378341815 +429.5245057472255 +-19.285672919439733 +83.22444989056385 +0 +120 +absolute + + + +0.01 +smooth + +8.536822546761552 +47.34996429338038 +429.5223006972431 +-19.410847225026856 +83.2077071988682 +0 +120 +absolute + + + +0.01 +smooth + +8.5368230912994 +47.34996480358442 +429.5200963792394 +-19.536161512685382 +83.19095436130306 +0 +120 +absolute + + + +0.01 +smooth + +8.536823635112029 +47.34996531402639 +429.5178929764735 +-19.66161404366462 +83.1741916383829 +0 +120 +absolute + + + +0.01 +smooth + +8.53682417819096 +47.34996582470242 +429.5156906722045 +-19.78720307921389 +83.15741929062219 +0 +120 +absolute + + + +0.01 +smooth + +8.53682472052772 +47.34996633560863 +429.51348964969173 +-19.91292688058251 +83.14063757853545 +0 +120 +absolute + + + +0.01 +smooth + +8.53682526211383 +47.349966846741154 +429.5112900921944 +-20.03878370901978 +83.12384676263717 +0 +120 +absolute + + + +0.01 +smooth + +8.536825802940815 +47.34996735809608 +429.5090921829716 +-20.164771825775052 +83.10704710344183 +0 +120 +absolute + + + +0.01 +smooth + +8.5368263430002 +47.34996786966957 +429.50689610528246 +-20.290889492097627 +83.0902388614639 +0 +120 +absolute + + + +0.01 +smooth + +8.536826882283506 +47.34996838145773 +429.50470204238616 +-20.417134969236823 +83.07342229721792 +0 +120 +absolute + + + +0.01 +smooth + +8.536827420782261 +47.34996889345669 +429.5025101775421 +-20.543506518441955 +83.05659767121834 +0 +120 +absolute + + + +0.01 +smooth + +8.536827958487983 +47.34996940566256 +429.5003206940092 +-20.670002400962336 +83.03976524397967 +0 +120 +absolute + + + +0.01 +smooth + +8.536828495392202 +47.349969918071466 +429.4981337750468 +-20.7966208780473 +83.02292527601641 +0 +120 +absolute + + + +0.01 +smooth + +8.53682903156896 +47.34997043071376 +429.4959483065376 +-20.923377379504252 +83.00607571075916 +0 +120 +absolute + + + +0.01 +smooth + +8.536829567348622 +47.34997094372625 +429.49375911359755 +-21.05034075224715 +82.98920728478559 +0 +120 +absolute + + + +0.01 +smooth + +8.536830102758467 +47.34997145712026 +429.49156574701686 +-21.17751689669736 +82.97231923302097 +0 +120 +absolute + + + +0.01 +smooth + +8.536830637789059 +47.349971970891936 +429.4893683326672 +-21.304904083044395 +82.9554118203214 +0 +120 +absolute + + + +0.01 +smooth + +8.536831172430976 +47.34997248503741 +429.48716699642085 +-21.432500581477786 +82.938485311543 +0 +120 +absolute + + + +0.01 +smooth + +8.536831706674787 +47.349972999552854 +429.4849618641493 +-21.56030466218705 +82.92153997154189 +0 +120 +absolute + + + +0.01 +smooth + +8.53683224051106 +47.34997351443436 +429.48275306172445 +-21.68831459536169 +82.90457606517413 +0 +120 +absolute + + + +0.01 +smooth + +8.536832773930373 +47.34997402967808 +429.48054071501855 +-21.816528651191227 +82.88759385729583 +0 +120 +absolute + + + +0.01 +smooth + +8.536833306923292 +47.34997454528016 +429.478324949903 +-21.944945099865215 +82.87059361276314 +0 +120 +absolute + + + +0.01 +smooth + +8.536833839480385 +47.349975061236734 +429.47610589225 +-22.073562211573147 +82.85357559643212 +0 +120 +absolute + + + +0.01 +smooth + +8.536834371592231 +47.34997557754392 +429.4738836679308 +-22.202378256504534 +82.83654007315887 +0 +120 +absolute + + + +0.01 +smooth + +8.536834903249396 +47.3499760941979 +429.47165840281804 +-22.331391504848913 +82.8194873077995 +0 +120 +absolute + + + +0.01 +smooth + +8.536835434442455 +47.34997661119477 +429.4694302227831 +-22.460600226795794 +82.80241756521015 +0 +120 +absolute + + + +0.01 +smooth + +8.536835965161975 +47.34997712853068 +429.46719925369786 +-22.590002692534686 +82.78533111024687 +0 +120 +absolute + + + +0.01 +smooth + +8.53683649539853 +47.349977646201765 +429.46496562143426 +-22.71959717225511 +82.76822820776582 +0 +120 +absolute + + + +0.01 +smooth + +8.536837025142692 +47.34997816420419 +429.4627294518642 +-22.849381936146614 +82.75110912262306 +0 +120 +absolute + + + +0.01 +smooth + +8.53683755438503 +47.34997868253406 +429.4604908708596 +-22.979355254398694 +82.73397411967471 +0 +120 +absolute + + + +0.01 +smooth + +8.536838083116114 +47.34997920118751 +429.4582500042918 +-23.109515397200866 +82.71682346377682 +0 +120 +absolute + + + +0.01 +smooth + +8.536838611326521 +47.34997972016069 +429.4560069780335 +-23.239860634742666 +82.69965741978561 +0 +120 +absolute + + + +0.01 +smooth + +8.536839139006814 +47.349980239449735 +429.4537619179559 +-23.37038923721359 +82.6824762525571 +0 +120 +absolute + + + +0.01 +smooth + +8.53683966614757 +47.34998075905079 +429.451514949931 +-23.501099474803148 +82.66528022694739 +0 +120 +absolute + + + +0.01 +smooth + +8.536840192739358 +47.34998127895997 +429.4492661998307 +-23.6319896177009 +82.6480696078126 +0 +120 +absolute + + + +0.01 +smooth + +8.536840718772753 +47.34998179917345 +429.4470157935268 +-23.763057936096352 +82.63084466000888 +0 +120 +absolute + + + +0.01 +smooth + +8.53684124423832 +47.349982319687335 +429.4447638568913 +-23.894302700179008 +82.61360564839225 +0 +120 +absolute + + + +0.01 +smooth + +8.536841769126633 +47.34998284049777 +429.4425105157959 +-24.02572218013839 +82.59635283781886 +0 +120 +absolute + + + +0.01 +smooth + +8.536842293428268 +47.349983361600906 +429.4402558961127 +-24.157314646164036 +82.57908649314484 +0 +120 +absolute + + + +0.01 +smooth + +8.536842817133786 +47.34998388299286 +429.43800012371315 +-24.289078368445438 +82.56180687922622 +0 +120 +absolute + + + +0.01 +smooth + +8.536843340233768 +47.34998440466978 +429.43574332446934 +-24.421011617172105 +82.54451426091917 +0 +120 +absolute + + + +0.01 +smooth + +8.536843862718777 +47.3499849266278 +429.43348562425314 +-24.553112662533596 +82.52720890307975 +0 +120 +absolute + + + +0.01 +smooth + +8.536844384579394 +47.34998544886308 +429.4312271489365 +-24.685379774719422 +82.50989107056412 +0 +120 +absolute + + + +0.01 +smooth + +8.536844905806182 +47.3499859713717 +429.42896802439094 +-24.81781122391909 +82.49256102822831 +0 +120 +absolute + + + +0.01 +smooth + +8.536845426389714 +47.34998649414986 +429.42670837648853 +-24.95040528032212 +82.47521904092847 +0 +120 +absolute + + + +0.01 +smooth + +8.536845946320563 +47.34998701719367 +429.42444833110125 +-25.08316021411803 +82.45786537352069 +0 +120 +absolute + + + +0.01 +smooth + +8.536846465589297 +47.34998754049926 +429.42218801410064 +-25.21607429549634 +82.44050029086107 +0 +120 +absolute + + + +0.01 +smooth + +8.536846984186491 +47.34998806406279 +429.41992755135874 +-25.349145794646542 +82.42312405780574 +0 +120 +absolute + + + +0.01 +smooth + +8.536847502102717 +47.34998858788037 +429.41766706874745 +-25.48237298175821 +82.40573693921075 +0 +120 +absolute + + + +0.01 +smooth + +8.53684801932854 +47.34998911194817 +429.4154066921385 +-25.615754127020843 +82.38833919993229 +0 +120 +absolute + + + +0.01 +smooth + +8.536848535854535 +47.34998963626228 +429.4131465474039 +-25.74928750062394 +82.37093110482637 +0 +120 +absolute + + + +0.01 +smooth + +8.536849051671277 +47.349990160818884 +429.41088676041534 +-25.88297137275704 +82.35351291874916 +0 +120 +absolute + + + +0.01 +smooth + +8.53684956676933 +47.3499906856141 +429.40862745704464 +-26.01680401360965 +82.33608490655672 +0 +120 +absolute + + + +0.01 +smooth + +8.53685008113927 +47.34999121064407 +429.4063687631638 +-26.150783693371295 +82.31864733310518 +0 +120 +absolute + + + +0.01 +smooth + +8.536850594771668 +47.34999173590492 +429.40411080464474 +-26.28490868223147 +82.30120046325062 +0 +120 +absolute + + + +0.01 +smooth + +8.53685110765709 +47.3499922613928 +429.4018537073592 +-26.419177250379743 +82.28374456184918 +0 +120 +absolute + + + +0.01 +smooth + +8.536851619786114 +47.34999278710384 +429.39959759717885 +-26.553587668005605 +82.26627989375694 +0 +120 +absolute + + + +0.01 +smooth + +8.536852131149308 +47.34999331303419 +429.3973425999758 +-26.68813820529857 +82.24880672383001 +0 +120 +absolute + + + +0.01 +smooth + +8.536852641737246 +47.34999383917996 +429.3950888416218 +-26.822827132448168 +82.23132531692447 +0 +120 +absolute + + + +0.01 +smooth + +8.536853151540495 +47.34999436553733 +429.39283644798877 +-26.95765271964391 +82.21383593789646 +0 +120 +absolute + + + +0.01 +smooth + +8.536853660549626 +47.34999489210239 +429.3905855449485 +-27.092613237075295 +82.19633885160206 +0 +120 +absolute + + + +0.01 +smooth + +8.536854168755216 +47.34999541887131 +429.3883362583729 +-27.22770695493189 +82.17883432289739 +0 +120 +absolute + + + +0.01 +smooth + +8.536854676147831 +47.349995945840206 +429.38608871413373 +-27.36293214340319 +82.16132261663853 +0 +120 +absolute + + + +0.01 +smooth + +8.536855182718043 +47.34999647300524 +429.3838430381029 +-27.498287072678714 +82.14380399768162 +0 +120 +absolute + + + +0.01 +smooth + +8.536855688456424 +47.349997000362535 +429.3815993561524 +-27.633770012947977 +82.12627873088272 +0 +120 +absolute + + + +0.01 +smooth + +8.536856193353547 +47.34999752790822 +429.3793577941538 +-27.7693792344005 +82.10874708109796 +0 +120 +absolute + + + +0.01 +smooth + +8.536856697399978 +47.34999805563845 +429.37711847797914 +-27.905113007225804 +82.09120931318344 +0 +120 +absolute + + + +0.01 +smooth + +8.536857200586294 +47.34999858354935 +429.37488153350023 +-28.040969601613384 +82.07366569199527 +0 +120 +absolute + + + +0.01 +smooth + +8.536857702903063 +47.34999911163707 +429.37264708658887 +-28.176947287752807 +82.05611648238954 +0 +120 +absolute + + + +0.01 +smooth + +8.536858204340856 +47.34999963989773 +429.370415263117 +-28.31304433583356 +82.03856194922236 +0 +120 +absolute + + + +0.01 +smooth + +8.536858704890246 +47.350000168327476 +429.3681861889565 +-28.449259016045172 +82.02100235734981 +0 +120 +absolute + + + +0.01 +smooth + +8.536859204541805 +47.35000069692245 +429.36595998997916 +-28.58558959857716 +82.00343797162805 +0 +120 +absolute + + + +0.01 +smooth + +8.536859703286101 +47.35000122567878 +429.36373679205667 +-28.722034353619044 +81.98586905691313 +0 +120 +absolute + + + +0.01 +smooth + +8.536860201113708 +47.35000175459261 +429.36151672106126 +-28.858591551360334 +81.96829587806117 +0 +120 +absolute + + + +0.01 +smooth + +8.536860698015193 +47.35000228366009 +429.3592999028645 +-28.99525946199054 +81.9507186999283 +0 +120 +absolute + + + +0.01 +smooth + +8.536861193981132 +47.35000281287732 +429.3570864633383 +-29.132036355699213 +81.93313778737058 +0 +120 +absolute + + + +0.01 +smooth + +8.536861689002095 +47.35000334224046 +429.35487652835457 +-29.268920502675858 +81.91555340524414 +0 +120 +absolute + + + +0.01 +smooth + +8.536862183068653 +47.35000387174566 +429.352670223785 +-29.40591017310999 +81.89796581840508 +0 +120 +absolute + + + +0.01 +smooth + +8.536862676171374 +47.35000440138904 +429.3504676755017 +-29.543003637191134 +81.8803752917095 +0 +120 +absolute + + + +0.01 +smooth + +8.536863168300835 +47.35000493116675 +429.34826900937634 +-29.680199165108803 +81.86278209001351 +0 +120 +absolute + + + +0.01 +smooth + +8.536863659447603 +47.35000546107492 +429.34607435128083 +-29.817495027052516 +81.8451864781732 +0 +120 +absolute + + + +0.01 +smooth + +8.536864149602248 +47.35000599110968 +429.34388382708704 +-29.954889493211766 +81.8275887210447 +0 +120 +absolute + + + +0.01 +smooth + +8.536864638799168 +47.35000652128184 +429.341697147884 +-30.092387970658443 +81.80998808024351 +0 +120 +absolute + + + +0.01 +smooth + +8.536865127433813 +47.35000705172328 +429.3395105930577 +-30.23005475348288 +81.79237554169099 +0 +120 +absolute + + + +0.01 +smooth + +8.53686561559399 +47.350007582463164 +429.3373233271747 +-30.367904192130148 +81.77474911594582 +0 +120 +absolute + + + +0.01 +smooth + +8.536866103268805 +47.35000811349764 +429.33513544627283 +-30.50593458048163 +81.757109071049 +0 +120 +absolute + + + +0.01 +smooth + +8.536866590447376 +47.35000864482288 +429.3329470463896 +-30.64414421241867 +81.73945567504163 +0 +120 +absolute + + + +0.01 +smooth + +8.536867077118815 +47.35000917643507 +429.3307582235631 +-30.782531381822665 +81.72178919596472 +0 +120 +absolute + + + +0.01 +smooth + +8.536867563272237 +47.350009708330376 +429.32856907383086 +-30.921094382574953 +81.70410990185933 +0 +120 +absolute + + + +0.01 +smooth + +8.536868048896753 +47.350010240504936 +429.3263796932307 +-31.05983150855695 +81.68641806076647 +0 +120 +absolute + + + +0.01 +smooth + +8.536868533981485 +47.35001077295496 +429.32419017780035 +-31.19874105365001 +81.66871394072722 +0 +120 +absolute + + + +0.01 +smooth + +8.536869018515539 +47.350011305676595 +429.32200062357765 +-31.337821311735496 +81.65099780978262 +0 +120 +absolute + + + +0.01 +smooth + +8.536869502488031 +47.35001183866601 +429.31981112660014 +-31.477070576694782 +81.63326993597373 +0 +120 +absolute + + + +0.01 +smooth + +8.536869985888075 +47.35001237191937 +429.3176217829057 +-31.61648714240924 +81.61553058734155 +0 +120 +absolute + + + +0.01 +smooth + +8.536870468704784 +47.35001290543284 +429.3154326885319 +-31.756069302760228 +81.59778003192713 +0 +120 +absolute + + + +0.01 +smooth + +8.536870950927273 +47.350013439202606 +429.31324393951684 +-31.89581535162913 +81.58001853777151 +0 +120 +absolute + + + +0.01 +smooth + +8.536871432544656 +47.35001397322482 +429.31105563189806 +-32.03572358289732 +81.56224637291578 +0 +120 +absolute + + + +0.01 +smooth + +8.536871913546042 +47.350014507495644 +429.3088678617131 +-32.17579229044614 +81.54446380540095 +0 +120 +absolute + + + +0.01 +smooth + +8.536872393920552 +47.35001504201125 +429.30668072500015 +-32.31601976815694 +81.52667110326806 +0 +120 +absolute + + + +0.01 +smooth + +8.536872873657295 +47.350015576767824 +429.3044943177967 +-32.456404309911186 +81.50886853455816 +0 +120 +absolute + + + +0.01 +smooth + +8.536873352745388 +47.35001611176151 +429.3023087361404 +-32.596944209590184 +81.49105636731228 +0 +120 +absolute + + + +0.01 +smooth + +8.536873831173942 +47.3500166469885 +429.3001240760693 +-32.737637761075334 +81.47323486957154 +0 +120 +absolute + + + +0.01 +smooth + +8.536874308932074 +47.35001718244494 +429.2979404336208 +-32.87848325824797 +81.45540430937686 +0 +120 +absolute + + + +0.01 +smooth + +8.536874786008893 +47.35001771812699 +429.2957579048327 +-33.01947899498947 +81.43756495476936 +0 +120 +absolute + + + +0.01 +smooth + +8.536875262393519 +47.350018254030864 +429.2935765857433 +-33.16062326518124 +81.4197170737901 +0 +120 +absolute + + + +0.01 +smooth + +8.536875738075057 +47.35001879015266 +429.2913965723896 +-33.3019143627046 +81.40186093448006 +0 +120 +absolute + + + +0.01 +smooth + +8.536876213042628 +47.35001932648862 +429.2892179608097 +-33.44335058144095 +81.38399680488031 +0 +120 +absolute + + + +0.01 +smooth + +8.536876687285348 +47.35001986303486 +429.28704084704134 +-33.58493021527167 +81.36612495303193 +0 +120 +absolute + + + +0.01 +smooth + +8.53687716079232 +47.35002039978755 +429.284865327122 +-33.72665155807808 +81.3482456469759 +0 +120 +absolute + + + +0.01 +smooth + +8.536877633552672 +47.35002093674289 +429.28269149709 +-33.86851290374161 +81.33035915475332 +0 +120 +absolute + + + +0.01 +smooth + +8.536878105555509 +47.35002147389704 +429.2805194529826 +-34.01051254614361 +81.31246574440522 +0 +120 +absolute + + + +0.01 +smooth + +8.53687857678994 +47.35002201124612 +429.2783492908376 +-34.152648779165375 +81.29456568397259 +0 +120 +absolute + + + +0.01 +smooth + +8.53687904724509 +47.35002254878637 +429.276181106693 +-34.29491989668841 +81.27665924149659 +0 +120 +absolute + + + +0.01 +smooth + +8.536879516910066 +47.3500230865139 +429.27401499658623 +-34.43732419259402 +81.25874668501814 +0 +120 +absolute + + + +0.01 +smooth + +8.536879985773984 +47.35002362442491 +429.27185105655525 +-34.57985996076357 +81.24082828257832 +0 +120 +absolute + + + +0.01 +smooth + +8.53688045382596 +47.35002416251556 +429.2696893826378 +-34.72252549507845 +81.22290430221823 +0 +120 +absolute + + + +0.01 +smooth + +8.536880921055099 +47.350024700782 +429.2675300708714 +-34.865319089420005 +81.20497501197885 +0 +120 +absolute + + + +0.01 +smooth + +8.536881387450524 +47.35002523922042 +429.2653732172941 +-35.00823903766962 +81.18704067990124 +0 +120 +absolute + + + +0.01 +smooth + +8.536881853001347 +47.350025777826986 +429.26321891794345 +-35.15128363370867 +81.16910157402646 +0 +120 +absolute + + + +0.01 +smooth + +8.536882317696678 +47.35002631659786 +429.26106726885735 +-35.29445117141851 +81.15115796239554 +0 +120 +absolute + + + +0.01 +smooth + +8.536882781525637 +47.35002685552922 +429.2589183660733 +-35.43773994468052 +81.13321011304954 +0 +120 +absolute + + + +0.01 +smooth + +8.53688324447733 +47.350027394617214 +429.2567723056293 +-35.58114824737608 +81.11525829402947 +0 +120 +absolute + + + +0.01 +smooth + +8.536883706540877 +47.35002793385802 +429.254629183563 +-35.724674373386534 +81.09730277337641 +0 +120 +absolute + + + +0.01 +smooth + +8.536884167705388 +47.350028473247804 +429.2524890959122 +-35.86831661659328 +81.07934381913138 +0 +120 +absolute + + + +0.01 +smooth + +8.536884627959981 +47.35002901278275 +429.25035213871456 +-36.01207327087768 +81.06138169933543 +0 +120 +absolute + + + +0.01 +smooth + +8.536885087293767 +47.350029552459 +429.24821840800774 +-36.15594263012104 +81.0434166820296 +0 +120 +absolute + + + +0.01 +smooth + +8.536885545695858 +47.350030092272725 +429.2460879998298 +-36.29992298820485 +81.02544903525494 +0 +120 +absolute + + + +0.01 +smooth + +8.53688600315537 +47.350030632220104 +429.24396101021813 +-36.44401263901041 +81.0074790270525 +0 +120 +absolute + + + +0.01 +smooth + +8.53688645966142 +47.35003117229731 +429.2418375352107 +-36.588209876419114 +80.9895069254633 +0 +120 +absolute + + + +0.01 +smooth + +8.536886915203114 +47.350031712500495 +429.2397176708452 +-36.732512994312316 +80.9715329985284 +0 +120 +absolute + + + +0.01 +smooth + +8.536887369769572 +47.350032252825834 +429.23760151315935 +-36.87692028657139 +80.95355751428886 +0 +120 +absolute + + + +0.01 +smooth + +8.536887823349906 +47.3500327932695 +429.23548915819094 +-37.02143004707771 +80.9355807407857 +0 +120 +absolute + + + +0.01 +smooth + +8.53688827593323 +47.350033333827646 +429.2333807019777 +-37.166040569712635 +80.91760294605996 +0 +120 +absolute + + + +0.01 +smooth + +8.536888727508657 +47.35003387449646 +429.23127624055746 +-37.310750148357556 +80.8996243981527 +0 +120 +absolute + + + +0.01 +smooth + +8.536889178065303 +47.35003441527209 +429.2291758699677 +-37.455557076893825 +80.88164536510496 +0 +120 +absolute + + + +0.01 +smooth + +8.536889627592277 +47.35003495615072 +429.2270796862465 +-37.60045964920282 +80.86366611495777 +0 +120 +absolute + + + +0.01 +smooth + +8.5368900760787 +47.3500354971285 +429.2249877854314 +-37.74545615916591 +80.84568691575218 +0 +120 +absolute + + + +0.01 +smooth + +8.53689052351368 +47.350036038201615 +429.2229002635602 +-37.890544900664466 +80.82770803552924 +0 +120 +absolute + + + +0.01 +smooth + +8.536890969886333 +47.350036579366225 +429.2208172166705 +-38.0357241675798 +80.80972974233 +0 +120 +absolute + + + +0.01 +smooth + +8.53689141518577 +47.350037120618495 +429.2187387408004 +-38.180992253793406 +80.79175230419551 +0 +120 +absolute + + + +0.01 +smooth + +8.53689185940111 +47.3500376619546 +429.2166649319874 +-38.32634745318657 +80.77377598916678 +0 +120 +absolute + + + +0.01 +smooth + +8.536892302521464 +47.35003820337071 +429.2145958862692 +-38.471788059640694 +80.75580106528486 +0 +120 +absolute + + + +0.01 +smooth + +8.536892744535944 +47.35003874486297 +429.21253169968367 +-38.61731236703714 +80.73782780059082 +0 +120 +absolute + + + +0.01 +smooth + +8.536893185433668 +47.350039286427574 +429.21047246826856 +-38.76291866925727 +80.7198564631257 +0 +120 +absolute + + + +0.01 +smooth + +8.536893625203746 +47.35003982806069 +429.2084182880616 +-38.908605260182455 +80.7018873209305 +0 +120 +absolute + + + +0.01 +smooth + +8.536894063835291 +47.35004036975847 +429.20636925510036 +-39.05437043369406 +80.6839206420463 +0 +120 +absolute + + + +0.01 +smooth + +8.536894501317422 +47.35004091151707 +429.2043254654229 +-39.200212483673475 +80.66595669451415 +0 +120 +absolute + + + +0.01 +smooth + +8.536894937639248 +47.350041453332686 +429.20228701506676 +-39.34612970400206 +80.6479957463751 +0 +120 +absolute + + + +0.01 +smooth + +8.536895372789886 +47.35004199520148 +429.20025400006966 +-39.492120388561176 +80.63003806567016 +0 +120 +absolute + + + +0.01 +smooth + +8.536895806758448 +47.35004253711961 +429.19822651646945 +-39.63818283123221 +80.6120839204404 +0 +120 +absolute + + + +0.01 +smooth + +8.536896239534046 +47.35004307908325 +429.19620466030386 +-39.78431532589653 +80.59413357872684 +0 +120 +absolute + + + +0.01 +smooth + +8.536896671119441 +47.35004362109214 +429.1941884387388 +-39.93051783407605 +80.57618706009775 +0 +120 +absolute + + + +0.01 +smooth + +8.536897101953336 +47.35004416325999 +429.19217501107414 +-40.076843691825395 +80.55823643345114 +0 +120 +absolute + + + +0.01 +smooth + +8.536897532241111 +47.35004470564001 +429.1901630366366 +-40.22331791262751 +80.54027799297366 +0 +120 +absolute + + + +0.01 +smooth + +8.536897961969645 +47.35004524822839 +429.1881525949398 +-40.36993883217624 +80.52231200862093 +0 +120 +absolute + + + +0.01 +smooth + +8.536898391125819 +47.350045791021365 +429.1861437654975 +-40.51670478616548 +80.50433875034874 +0 +120 +absolute + + + +0.01 +smooth + +8.536898819696521 +47.35004633401507 +429.18413662782353 +-40.66361411028917 +80.48635848811263 +0 +120 +absolute + + + +0.01 +smooth + +8.536899247668634 +47.35004687720578 +429.1821312614317 +-40.81066514024125 +80.46837149186837 +0 +120 +absolute + + + +0.01 +smooth + +8.536899675029039 +47.35004742058967 +429.180127745836 +-40.957856211715594 +80.45037803157163 +0 +120 +absolute + + + +0.01 +smooth + +8.536900101764623 +47.35004796416292 +429.17812616054977 +-41.10518566040615 +80.43237837717807 +0 +120 +absolute + + + +0.01 +smooth + +8.536900527862265 +47.35004850792172 +429.1761265850872 +-41.25265182200681 +80.41437279864336 +0 +120 +absolute + + + +0.01 +smooth + +8.536900953308859 +47.35004905186233 +429.17412909896217 +-41.40025303221154 +80.39636156592321 +0 +120 +absolute + + + +0.01 +smooth + +8.53690137809128 +47.35004959598093 +429.1721337816883 +-41.54798762671423 +80.37834494897334 +0 +120 +absolute + + + +0.01 +smooth + +8.536901802196407 +47.35005014027367 +429.1701407127793 +-41.695853941208775 +80.36032321774931 +0 +120 +absolute + + + +0.01 +smooth + +8.536902225611136 +47.35005068473682 +429.16814997174913 +-41.84385031138915 +80.34229664220692 +0 +120 +absolute + + + +0.01 +smooth + +8.53690264832235 +47.35005122936654 +429.16616163811165 +-41.99197507294923 +80.3242654923018 +0 +120 +absolute + + + +0.01 +smooth + +8.53690307031692 +47.350051774159056 +429.1641757913806 +-42.140226561582885 +80.30623003798962 +0 +120 +absolute + + + +0.01 +smooth + +8.536903491581741 +47.35005231911056 +429.16219251106963 +-42.288603112984156 +80.28819054922609 +0 +120 +absolute + + + +0.01 +smooth + +8.536903912103693 +47.35005286421723 +429.1602118766926 +-42.437103062846894 +80.27014729596686 +0 +120 +absolute + + + +0.01 +smooth + +8.536904331869662 +47.3500534094753 +429.1582339677635 +-42.58572474686503 +80.25210054816763 +0 +120 +absolute + + + +0.01 +smooth + +8.536904750866528 +47.35005395488095 +429.15625886379615 +-42.73446650073248 +80.23405057578408 +0 +120 +absolute + + + +0.01 +smooth + +8.536905169081178 +47.35005450043039 +429.15428664430414 +-42.883326660143155 +80.21599764877188 +0 +120 +absolute + + + +0.01 +smooth + +8.536905586500493 +47.350055046119834 +429.1523173888014 +-43.032303560790986 +80.19794203708672 +0 +120 +absolute + + + +0.01 +smooth + +8.536906003111362 +47.35005559194548 +429.1503511768018 +-43.1813955383699 +80.1798840106843 +0 +120 +absolute + + + +0.01 +smooth + +8.536906418900658 +47.35005613790348 +429.1483880878188 +-43.330600928573766 +80.16182383952024 +0 +120 +absolute + + + +0.01 +smooth + +8.53690683385528 +47.35005668399011 +429.14642820136663 +-43.47991806709656 +80.1437617935503 +0 +120 +absolute + + + +0.01 +smooth + +8.536907247962098 +47.35005723020153 +429.1444715969589 +-43.629345289632184 +80.1256981427301 +0 +120 +absolute + + + +0.01 +smooth + +8.536907661208003 +47.35005777653393 +429.1425183541094 +-43.77888093187453 +80.10763315701533 +0 +120 +absolute + + + +0.01 +smooth + +8.53690807357988 +47.35005832298354 +429.1405685523321 +-43.92852332951755 +80.08956710636173 +0 +120 +absolute + + + +0.01 +smooth + +8.536908485064606 +47.35005886954655 +429.13862227114066 +-44.078270818255106 +80.0715002607249 +0 +120 +absolute + + + +0.01 +smooth + +8.53690889564907 +47.350059416219175 +429.1366795900489 +-44.228121733781215 +80.05343289006055 +0 +120 +absolute + + + +0.01 +smooth + +8.536909305320156 +47.35005996299759 +429.1347405885707 +-44.37807441178975 +80.03536526432438 +0 +120 +absolute + + + +0.01 +smooth + +8.536909714064741 +47.350060509878 +429.1328053462196 +-44.52812718797459 +80.01729765347203 +0 +120 +absolute + + + +0.01 +smooth + +8.536910121869719 +47.350061056856624 +429.1308739425097 +-44.67827839802972 +79.99923032745924 +0 +120 +absolute + + + +0.01 +smooth + +8.536910528721968 +47.35006160392965 +429.1289464569549 +-44.82852637764901 +79.98116355624164 +0 +120 +absolute + + + +0.01 +smooth + +8.536910934608368 +47.350062151093276 +429.12702296906855 +-44.97886946252639 +79.9630976097749 +0 +120 +absolute + + + +0.01 +smooth + +8.536911339515813 +47.35006269834373 +429.1251035583649 +-45.129305988355796 +79.94503275801478 +0 +120 +absolute + + + +0.01 +smooth + +8.536911743431178 +47.350063245677184 +429.12318830435754 +-45.27983429083114 +79.92696927091687 +0 +120 +absolute + + + +0.01 +smooth + +8.53691214634135 +47.35006379308985 +429.1212772865603 +-45.430452705646324 +79.90890741843691 +0 +120 +absolute + + + +0.01 +smooth + +8.536912548233213 +47.35006434057792 +429.1193705844871 +-45.58115956849528 +79.89084747053055 +0 +120 +absolute + + + +0.01 +smooth + +8.536912949093649 +47.350064888137624 +429.11746827765154 +-45.73195321507192 +79.87278969715348 +0 +120 +absolute + + + +0.01 +smooth + +8.536913348909543 +47.350065435765124 +429.1155704455675 +-45.88283198107017 +79.85473436826138 +0 +120 +absolute + + + +0.01 +smooth + +8.536913747667779 +47.35006598345665 +429.11367716774896 +-46.03379420218395 +79.83668175380993 +0 +120 +absolute + + + +0.01 +smooth + +8.536914145355242 +47.3500665312084 +429.11178852370955 +-46.18483821410712 +79.81863212375482 +0 +120 +absolute + + + +0.01 +smooth + +8.536914541958811 +47.35006707901655 +429.109904592963 +-46.335962352533706 +79.80058574805173 +0 +120 +absolute + + + +0.01 +smooth + +8.536914937465374 +47.350067626877326 +429.1080254550234 +-46.487164953157574 +79.78254289665632 +0 +120 +absolute + + + +0.01 +smooth + +8.536915331861817 +47.35006817478693 +429.1061511894044 +-46.638444351672646 +79.76450383952428 +0 +120 +absolute + + + +0.01 +smooth + +8.536915725135016 +47.35006872274155 +429.1042818756197 +-46.78979888377284 +79.7464688466113 +0 +120 +absolute + + + +0.01 +smooth + +8.536916117271861 +47.35006927073739 +429.1024175931832 +-46.941226885152076 +79.72843818787305 +0 +120 +absolute + + + +0.01 +smooth + +8.536916508259234 +47.35006981877066 +429.1005584216087 +-47.09272669150426 +79.71041213326524 +0 +120 +absolute + + + +0.01 +smooth + +8.53691689808402 +47.350070366837556 +429.09870444041 +-47.24429663852334 +79.69239095274351 +0 +120 +absolute + + + +0.01 +smooth + +8.5369172867331 +47.350070914934285 +429.096855729101 +-47.39593506190319 +79.67437491626356 +0 +120 +absolute + + + +0.01 +smooth + +8.53691767419336 +47.350071463057034 +429.0950123671953 +-47.54764029733777 +79.65636429378107 +0 +120 +absolute + + + +0.01 +smooth + +8.536918060451683 +47.350072011202016 +429.09317443420696 +-47.699410680520984 +79.63835935525172 +0 +120 +absolute + + + +0.01 +smooth + +8.536918445494951 +47.35007255936543 +429.09134200964957 +-47.85124454714675 +79.6203603706312 +0 +120 +absolute + + + +0.01 +smooth + +8.53691882931005 +47.350073107543466 +429.08951517303706 +-48.00314023290899 +79.60236760987516 +0 +120 +absolute + + + +0.01 +smooth + +8.536919211883864 +47.35007365573235 +429.08769400388314 +-48.155096073501554 +79.58438134293931 +0 +120 +absolute + + + +0.01 +smooth + +8.536919593203276 +47.350074203928266 +429.08587858170176 +-48.30711040461849 +79.56640183977933 +0 +120 +absolute + + + +0.01 +smooth + +8.53691997325517 +47.35007475212741 +429.0840689860066 +-48.459181561953656 +79.54842937035087 +0 +120 +absolute + + + +0.01 +smooth + +8.536920352026428 +47.350075300326 +429.0822652963115 +-48.61130788120097 +79.53046420460967 +0 +120 +absolute + + + +0.01 +smooth + +8.536920729503937 +47.350075848520234 +429.0804675921303 +-48.76348769805434 +79.51250661251134 +0 +120 +absolute + + + +0.01 +smooth + +8.536921105674578 +47.3500763967063 +429.07867595297677 +-48.91571934820771 +79.4945568640116 +0 +120 +absolute + + + +0.01 +smooth + +8.536921480525237 +47.3500769448804 +429.0768904583647 +-49.068001167354964 +79.47661522906613 +0 +120 +absolute + + + +0.01 +smooth + +8.536921854042795 +47.35007749303875 +429.075111187808 +-49.22033149119006 +79.45868197763062 +0 +120 +absolute + + + +0.01 +smooth + +8.536922226214138 +47.35007804117754 +429.0733382208203 +-49.37270865540688 +79.44075737966071 +0 +120 +absolute + + + +0.01 +smooth + +8.53692259702615 +47.35007858929298 +429.0715716369155 +-49.525130995699364 +79.42284170511212 +0 +120 +absolute + + + +0.01 +smooth + +8.536922966465712 +47.350079137381265 +429.0698115156074 +-49.677596847761436 +79.40493522394053 +0 +120 +absolute + + + +0.01 +smooth + +8.53692333451971 +47.35007968543859 +429.06805793640984 +-49.830104547287 +79.3870382061016 +0 +120 +absolute + + + +0.01 +smooth + +8.536923701175029 +47.35008023346117 +429.0663109788366 +-49.982652429969974 +79.36915092155101 +0 +120 +absolute + + + +0.01 +smooth + +8.536924066418548 +47.35008078144519 +429.0645707224016 +-50.135238831504296 +79.35127364024446 +0 +120 +absolute + + + +0.01 +smooth + +8.536924430237157 +47.350081329386875 +429.06283724661836 +-50.287862087583804 +79.33340663213762 +0 +120 +absolute + + + +0.01 +smooth + +8.536924793062107 +47.350081877369874 +429.06110847360986 +-50.44055949162138 +79.31554389518068 +0 +120 +absolute + + + +0.01 +smooth + +8.536925155322262 +47.35008242547788 +429.05938231978797 +-50.59336837819436 +79.29767942788298 +0 +120 +absolute + + + +0.01 +smooth + +8.536925517000917 +47.35008297370713 +429.0576588561005 +-50.7462871447437 +79.27981350103904 +0 +120 +absolute + + + +0.01 +smooth + +8.536925878081362 +47.35008352205384 +429.0559381534946 +-50.89931418871031 +79.26194638544334 +0 +120 +absolute + + + +0.01 +smooth + +8.53692623854689 +47.35008407051424 +429.0542202829182 +-51.0524479075351 +79.24407835189037 +0 +120 +absolute + + + +0.01 +smooth + +8.536926598380788 +47.350084619084534 +429.0525053153187 +-51.20568669865897 +79.22620967117453 +0 +120 +absolute + + + +0.01 +smooth + +8.536926957566356 +47.35008516776097 +429.05079332164377 +-51.3590289595229 +79.20834061409042 +0 +120 +absolute + + + +0.01 +smooth + +8.536927316086887 +47.350085716539766 +429.04908437284104 +-51.51247308756774 +79.19047145143247 +0 +120 +absolute + + + +0.01 +smooth + +8.536927673925664 +47.35008626541712 +429.0473785398578 +-51.66601748023446 +79.17260245399513 +0 +120 +absolute + + + +0.01 +smooth + +8.536928031065989 +47.350086814389314 +429.0456758936421 +-51.819660534963994 +79.15473389257296 +0 +120 +absolute + + + +0.01 +smooth + +8.53692838749115 +47.35008736345251 +429.0439765051411 +-51.97340064919722 +79.1368660379604 +0 +120 +absolute + + + +0.01 +smooth + +8.536928743184438 +47.35008791260296 +429.0422804453024 +-52.12723622037505 +79.11899916095189 +0 +120 +absolute + + + +0.01 +smooth + +8.53692909812915 +47.35008846183692 +429.04058778507414 +-52.281165645938415 +79.101133532342 +0 +120 +absolute + + + +0.01 +smooth + +8.536929452308572 +47.350089011150544 +429.0388985954031 +-52.435187323328286 +79.08326942292517 +0 +120 +absolute + + + +0.01 +smooth + +8.536929805706004 +47.35008956054012 +429.0372129472374 +-52.589299649985556 +79.06540710349583 +0 +120 +absolute + + + +0.01 +smooth + +8.536930158304731 +47.350090110001844 +429.03553091152446 +-52.743501023351136 +79.04754684484855 +0 +120 +absolute + + + +0.01 +smooth + +8.536930510088048 +47.350090659531936 +429.03385255921177 +-52.89778984086594 +79.02968891777776 +0 +120 +absolute + + + +0.01 +smooth + +8.536930861039249 +47.35009120912664 +429.03217796124704 +-53.052164499970914 +79.01183359307797 +0 +120 +absolute + + + +0.01 +smooth + +8.536931211141628 +47.35009175878217 +429.0305071885779 +-53.20662339810697 +78.99398114154366 +0 +120 +absolute + + + +0.01 +smooth + +8.53693156037847 +47.35009230849473 +429.0288403121516 +-53.361164932714985 +78.97613183396925 +0 +120 +absolute + + + +0.01 +smooth + +8.536931908733077 +47.35009285826058 +429.02717740291615 +-53.51578750123595 +78.95828594114934 +0 +120 +absolute + + + +0.01 +smooth + +8.536932256188733 +47.350093408075935 +429.02551853181893 +-53.67048950111075 +78.94044373387831 +0 +120 +absolute + + + +0.01 +smooth + +8.536932602728735 +47.35009395793699 +429.02386376980735 +-53.8252693297803 +78.92260548295067 +0 +120 +absolute + + + +0.01 +smooth + +8.536932948336377 +47.35009450784002 +429.02221318782944 +-53.98012538468554 +78.90477145916097 +0 +120 +absolute + + + +0.01 +smooth + +8.536933292994943 +47.350095057781196 +429.0205668568324 +-54.13505606326737 +78.88694193330358 +0 +120 +absolute + + + +0.01 +smooth + +8.536933636687731 +47.350095607756764 +429.0189248477638 +-54.29005976296671 +78.86911717617303 +0 +120 +absolute + + + +0.01 +smooth + +8.536933979398038 +47.35009615776299 +429.0172872315715 +-54.445134881224476 +78.85129745856388 +0 +120 +absolute + + + +0.01 +smooth + +8.536934321109147 +47.35009670779601 +429.01565407920265 +-54.60027981548162 +78.83348305127048 +0 +120 +absolute + + + +0.01 +smooth + +8.536934661804358 +47.35009725785214 +429.01402546160534 +-54.75549296317907 +78.81567422508739 +0 +120 +absolute + + + +0.01 +smooth + +8.536935001466958 +47.35009780792755 +429.01240144972684 +-54.91077272175771 +78.79787125080908 +0 +120 +absolute + + + +0.01 +smooth + +8.53693534008024 +47.350098358018464 +429.01078211451477 +-55.066117488658485 +78.78007439923002 +0 +120 +absolute + + + +0.01 +smooth + +8.536935677627502 +47.35009890812114 +429.0091675269168 +-55.2215256613223 +78.76228394114474 +0 +120 +absolute + + + +0.01 +smooth + +8.53693601409203 +47.35009945823178 +429.0075577578804 +-55.37699563719009 +78.74450014734767 +0 +120 +absolute + + + +0.01 +smooth + +8.536936349457116 +47.3501000083466 +429.00595287835307 +-55.53252581370276 +78.7267232886333 +0 +120 +absolute + + + +0.01 +smooth + +8.53693668370606 +47.35010055846184 +429.0043529592827 +-55.688114588301254 +78.70895363579612 +0 +120 +absolute + + + +0.01 +smooth + +8.536937016822147 +47.35010110857372 +429.00275807161665 +-55.843760358426465 +78.69119145963062 +0 +120 +absolute + + + +0.01 +smooth + +8.53693734878867 +47.35010165867846 +429.00116828630246 +-55.99946152151932 +78.67343703093127 +0 +120 +absolute + + + +0.01 +smooth + +8.536937679588926 +47.3501022087723 +428.9995836742878 +-56.15521647502076 +78.65569062049256 +0 +120 +absolute + + + +0.01 +smooth + +8.536938009206203 +47.35010275885144 +428.99800430652016 +-56.311023616371685 +78.63795249910898 +0 +120 +absolute + + + +0.01 +smooth + +8.536938337623793 +47.35010330891212 +428.99643025394727 +-56.46688134301296 +78.62022293757501 +0 +120 +absolute + + + +0.01 +smooth + +8.53693866482499 +47.35010385895056 +428.9948615875166 +-56.62278805238563 +78.6025022066851 +0 +120 +absolute + + + +0.01 +smooth + +8.53693899079309 +47.350104408963 +428.9932983781757 +-56.77874214193055 +78.58479057723379 +0 +120 +absolute + + + +0.01 +smooth + +8.536939315511379 +47.350104958945636 +428.9917406968724 +-56.93474200908866 +78.56708832001551 +0 +120 +absolute + + + +0.01 +smooth + +8.536939638963153 +47.35010550889471 +428.9901886145539 +-57.09078605130085 +78.54939570582478 +0 +120 +absolute + + + +0.01 +smooth + +8.536939961131703 +47.35010605880644 +428.98864220216797 +-57.24687266600806 +78.53171300545606 +0 +120 +absolute + + + +0.01 +smooth + +8.536940282000321 +47.35010660867705 +428.98710153066236 +-57.40300025065121 +78.51404048970383 +0 +120 +absolute + + + +0.01 +smooth + +8.5369406015523 +47.35010715850277 +428.9855666709844 +-57.55916720267122 +78.49637842936258 +0 +120 +absolute + + + +0.01 +smooth + +8.536940919770934 +47.35010770827983 +428.9840376940816 +-57.71537191950901 +78.4787270952268 +0 +120 +absolute + + + +0.01 +smooth + +8.536941236639514 +47.35010825800445 +428.9825146709019 +-57.871612798605504 +78.46108675809099 +0 +120 +absolute + + + +0.01 +smooth + +8.53694155214133 +47.35010880767284 +428.9809976723925 +-58.02788823740161 +78.44345768874959 +0 +120 +absolute + + + +0.01 +smooth + +8.536941866259678 +47.350109357281234 +428.97948676950125 +-58.18419663333826 +78.4258401579971 +0 +120 +absolute + + + +0.01 +smooth + +8.53694217897785 +47.350109906825864 +428.9779820331755 +-58.340536383856374 +78.40823443662799 +0 +120 +absolute + + + +0.01 +smooth + +8.536942490279134 +47.350110456302936 +428.97648353436307 +-58.496905886396874 +78.39064079543678 +0 +120 +absolute + + + +0.01 +smooth + +8.536942800146829 +47.3501110057087 +428.9749913440114 +-58.65330353840062 +78.37305950521794 +0 +120 +absolute + + + +0.01 +smooth + +8.536943108564223 +47.35011155503936 +428.9735055330681 +-58.80972773730865 +78.35549083676592 +0 +120 +absolute + + + +0.01 +smooth + +8.536943415514607 +47.35011210429114 +428.9720261724807 +-58.96617688056182 +78.33793506087524 +0 +120 +absolute + + + +0.01 +smooth + +8.536943720981277 +47.350112653460286 +428.9705533331968 +-59.122649365601056 +78.32039244834036 +0 +120 +absolute + + + +0.01 +smooth + +8.536944024947523 +47.350113202543 +428.969087086164 +-59.27914358986728 +78.30286326995576 +0 +120 +absolute + + + +0.01 +smooth + +8.536944327396641 +47.35011375153552 +428.96762750232995 +-59.435657950801414 +78.28534779651595 +0 +120 +absolute + + + +0.01 +smooth + +8.536944628311918 +47.35011430043406 +428.96617465264217 +-59.59219084584438 +78.26784629881539 +0 +120 +absolute + + + +0.01 +smooth + +8.53694492767665 +47.350114849234856 +428.9647286080482 +-59.748740672437094 +78.25035904764857 +0 +120 +absolute + + + +0.01 +smooth + +8.53694522547413 +47.35011539793411 +428.9632894394956 +-59.905305828020474 +78.23288631380996 +0 +120 +absolute + + + +0.01 +smooth + +8.536945521687645 +47.35011594652807 +428.96185721793205 +-60.06188471003544 +78.21542836809407 +0 +120 +absolute + + + +0.01 +smooth + +8.536945816300495 +47.350116495012955 +428.96043201430507 +-60.218475715922935 +78.19798548129535 +0 +120 +absolute + + + +0.01 +smooth + +8.536946109295966 +47.350117043384984 +428.95901389956225 +-60.375077243123854 +78.1805579242083 +0 +120 +absolute + + + +0.01 +smooth + +8.536946400657353 +47.350117591640384 +428.95760294465117 +-60.53168768907913 +78.16314596762741 +0 +120 +absolute + + + +0.01 +smooth + +8.536946690367948 +47.350118139775375 +428.9561992205194 +-60.68830545122969 +78.14574988234715 +0 +120 +absolute + + + +0.01 +smooth + +8.536946978411045 +47.350118687786185 +428.9548027981145 +-60.84492892701637 +78.12836993916201 +0 +120 +absolute + + + +0.01 +smooth + +8.536947264769932 +47.35011923566904 +428.9534137483842 +-61.00155651388024 +78.11100640886647 +0 +120 +absolute + + + +0.01 +smooth + +8.536947549824633 +47.35011978347599 +428.9520306926089 +-61.158209888029084 +78.09365542789189 +0 +120 +absolute + + + +0.01 +smooth + +8.536947834373146 +47.350120331318365 +428.950650710488 +-61.31493550375586 +78.07630874004835 +0 +120 +absolute + + + +0.01 +smooth + +8.53694811841706 +47.350120879195856 +428.9492737799539 +-61.47173329508962 +78.05896635798922 +0 +120 +absolute + + + +0.01 +smooth + +8.536948401933124 +47.350121427104725 +428.94789996952795 +-61.628601741684584 +78.04162855276749 +0 +120 +absolute + + + +0.01 +smooth + +8.536948684898078 +47.350121975041176 +428.94652934773023 +-61.785539323194925 +78.02429559543586 +0 +120 +absolute + + + +0.01 +smooth + +8.536948967288673 +47.35012252300143 +428.9451619830819 +-61.94254451927489 +78.00696775704728 +0 +120 +absolute + + + +0.01 +smooth + +8.536949249081664 +47.35012307098175 +428.94379794410366 +-62.09961580957867 +77.98964530865457 +0 +120 +absolute + + + +0.01 +smooth + +8.536949530253784 +47.350123618978316 +428.94243729931617 +-62.25675167376047 +77.97232852131054 +0 +120 +absolute + + + +0.01 +smooth + +8.536949810781785 +47.350124166987385 +428.94108011724035 +-62.41395059147451 +77.95501766606809 +0 +120 +absolute + + + +0.01 +smooth + +8.536950090642422 +47.350124715005165 +428.93972646639685 +-62.57121104237501 +77.93771301398007 +0 +120 +absolute + + + +0.01 +smooth + +8.536950369812432 +47.35012526302787 +428.9383764153064 +-62.72853150611617 +77.92041483609931 +0 +120 +absolute + + + +0.01 +smooth + +8.536950648268569 +47.350125811051754 +428.9370300324898 +-62.88591046235212 +77.90312340347869 +0 +120 +absolute + + + +0.01 +smooth + +8.536950925987572 +47.35012635907302 +428.93568738646775 +-63.04334639073721 +77.88583898717098 +0 +120 +absolute + + + +0.01 +smooth + +8.5369512029462 +47.350126907087926 +428.9343485457613 +-63.2008377709256 +77.86856185822916 +0 +120 +absolute + + + +0.01 +smooth + +8.536951479121187 +47.35012745509265 +428.9330135788907 +-63.358383082571464 +77.85129228770596 +0 +120 +absolute + + + +0.01 +smooth + +8.536951754489285 +47.35012800308344 +428.931682554377 +-63.51598080532903 +77.83403054665428 +0 +120 +absolute + + + +0.01 +smooth + +8.53695202902725 +47.35012855105654 +428.93035554074123 +-63.67362941885253 +77.81677690612699 +0 +120 +absolute + + + +0.01 +smooth + +8.536952302711814 +47.35012909900814 +428.9290326065036 +-63.831327402796134 +77.79953163717691 +0 +120 +absolute + + + +0.01 +smooth + +8.536952575519733 +47.350129646934484 +428.92771382018503 +-63.98907323681408 +77.7822950108569 +0 +120 +absolute + + + +0.01 +smooth + +8.536952847427756 +47.35013019483181 +428.9263992503067 +-64.14686540056056 +77.76506729821982 +0 +120 +absolute + + + +0.01 +smooth + +8.536953118412624 +47.35013074269634 +428.92508896538885 +-64.3047023736898 +77.7478487703185 +0 +120 +absolute + + + +0.01 +smooth + +8.536953388451082 +47.350131290524246 +428.92378303395236 +-64.462582635856 +77.73063969820576 +0 +120 +absolute + + + +0.01 +smooth + +8.536953657519886 +47.35013183831183 +428.9224815245183 +-64.62050466671337 +77.71344035293455 +0 +120 +absolute + + + +0.01 +smooth + +8.536953925595778 +47.35013238605529 +428.92118450560713 +-64.77846694591612 +77.69625100555766 +0 +120 +absolute + + + +0.01 +smooth + +8.536954192655504 +47.350132933750814 +428.9198920457396 +-64.93646795311845 +77.67907192712792 +0 +120 +absolute + + + +0.01 +smooth + +8.536954458675813 +47.35013348139467 +428.91860421343637 +-65.09450616797452 +77.66190338869818 +0 +120 +absolute + + + +0.01 +smooth + +8.536954723633455 +47.35013402898309 +428.9173210772186 +-65.25258007013866 +77.64474566132135 +0 +120 +absolute + + + +0.01 +smooth + +8.53695498750517 +47.35013457651226 +428.91604270560674 +-65.41068813926502 +77.62759901605024 +0 +120 +absolute + + + +0.01 +smooth + +8.536955250267708 +47.350135123978426 +428.91476916712156 +-65.5688288550078 +77.61046372393766 +0 +120 +absolute + + + +0.01 +smooth + +8.53695551189782 +47.350135671377835 +428.913500530284 +-65.72700069702123 +77.59334005603654 +0 +120 +absolute + + + +0.01 +smooth + +8.53695577237225 +47.35013621870669 +428.91223686361474 +-65.88520214495951 +77.57622828339971 +0 +120 +absolute + + + +0.01 +smooth + +8.536956031667739 +47.35013676596118 +428.9109782356343 +-66.04343167847681 +77.55912867707997 +0 +120 +absolute + + + +0.01 +smooth + +8.536956289761047 +47.350137313137594 +428.90972471486384 +-66.20168777722739 +77.5420415081302 +0 +120 +absolute + + + +0.01 +smooth + +8.536956546628913 +47.350137860232145 +428.90847636982386 +-66.35996892086546 +77.5249670476033 +0 +120 +absolute + + + +0.01 +smooth + +8.536956802248081 +47.350138407241026 +428.90723326903503 +-66.5182735890452 +77.50790556655203 +0 +120 +absolute + + + +0.01 +smooth + +8.536957056595305 +47.35013895416047 +428.90599548101835 +-66.67660026142083 +77.4908573360293 +0 +120 +absolute + + + +0.01 +smooth + +8.536957309647327 +47.350139500986735 +428.90476307429446 +-66.83494741764656 +77.47382262708793 +0 +120 +absolute + + + +0.01 +smooth + +8.536957561380898 +47.35014004771601 +428.90353611738425 +-66.99331353737662 +77.45680171078081 +0 +120 +absolute + + + +0.01 +smooth + +8.536957811772764 +47.350140594344545 +428.90231467880824 +-67.15169710026512 +77.43979485816075 +0 +120 +absolute + + + +0.01 +smooth + +8.53695806079967 +47.35014114086855 +428.90109882708737 +-67.31009658596642 +77.42280234028063 +0 +120 +absolute + + + +0.01 +smooth + +8.536958308438365 +47.35014168728425 +428.8998886307423 +-67.46851047413466 +77.40582442819327 +0 +120 +absolute + + + +0.01 +smooth + +8.536958554665595 +47.35014223358789 +428.8986841582939 +-67.62693724442404 +77.38886139295154 +0 +120 +absolute + + + +0.01 +smooth + +8.536958799458107 +47.350142779775666 +428.8974854782628 +-67.78537537648879 +77.37191350560829 +0 +120 +absolute + + + +0.01 +smooth + +8.536959042792649 +47.35014332584382 +428.8962926591699 +-67.9438233499831 +77.35498103721638 +0 +120 +absolute + + + +0.01 +smooth + +8.536959284645967 +47.350143871788575 +428.8951057695357 +-68.1022796445612 +77.33806425882862 +0 +120 +absolute + + + +0.01 +smooth + +8.53695952499481 +47.35014441760617 +428.8939248778814 +-68.26074273987726 +77.32116344149792 +0 +120 +absolute + + + +0.01 +smooth + +8.536959763815922 +47.350144963292806 +428.8927500527273 +-68.41921111558554 +77.30427885627708 +0 +120 +absolute + + + +0.01 +smooth + +8.536960001086053 +47.35014550884472 +428.89158136259437 +-68.57768325134022 +77.28741077421898 +0 +120 +absolute + + + +0.01 +smooth + +8.536960236781947 +47.35014605425814 +428.8904188760034 +-68.73615762679552 +77.27055946637644 +0 +120 +absolute + + + +0.01 +smooth + +8.536960470880356 +47.35014659952928 +428.88926266147513 +-68.89463272160563 +77.25372520380235 +0 +120 +absolute + + + +0.01 +smooth + +8.536960703358021 +47.350147144654386 +428.88811278753025 +-69.05310701542479 +77.23690825754953 +0 +120 +absolute + + + +0.01 +smooth + +8.536960934191693 +47.350147689629665 +428.88696932268954 +-69.21157898790719 +77.22010889867084 +0 +120 +absolute + + + +0.01 +smooth + +8.536961163358118 +47.35014823445135 +428.8858323354737 +-69.37004711870698 +77.20332739821913 +0 +120 +absolute + + + +0.01 +smooth + +8.536961390834044 +47.35014877911567 +428.88470189440375 +-69.52850988747849 +77.18656402724724 +0 +120 +absolute + + + +0.01 +smooth + +8.536961616596216 +47.35014932361884 +428.88357806800013 +-69.68696577387587 +77.16981905680805 +0 +120 +absolute + + + +0.01 +smooth + +8.53696184062138 +47.350149867957086 +428.8824609247838 +-69.84541325755335 +77.15309275795438 +0 +120 +absolute + + + +0.01 +smooth + +8.536962062886289 +47.35015041212664 +428.88135053327534 +-70.00385081816509 +77.13638540173909 +0 +120 +absolute + + + +0.01 +smooth + +8.536962283367684 +47.35015095612372 +428.8802469619957 +-70.16227693536534 +77.11969725921504 +0 +120 +absolute + + + +0.01 +smooth + +8.536962502042314 +47.35015149994456 +428.8791502794655 +-70.3206900888083 +77.10302860143508 +0 +120 +absolute + + + +0.01 +smooth + +8.536962718886928 +47.35015204358538 +428.8780605542056 +-70.4790887581482 +77.08637969945204 +0 +120 +absolute + + + +0.01 +smooth + +8.536962933878272 +47.350152587042416 +428.87697785473677 +-70.6374714230392 +77.06975082431876 +0 +120 +absolute + + + +0.01 +smooth + +8.536963146993088 +47.350153130311874 +428.87590224957955 +-70.79583656313555 +77.05314224708815 +0 +120 +absolute + + + +0.01 +smooth + +8.536963358208132 +47.35015367339 +428.87483380725496 +-70.95418265809144 +77.03655423881301 +0 +120 +absolute + + + +0.01 +smooth + +8.536963567500145 +47.350154216273005 +428.87377259628374 +-71.1125081875611 +77.01998707054621 +0 +120 +absolute + + + +0.01 +smooth + +8.536963774845875 +47.3501547589571 +428.87271868518644 +-71.27081163119873 +77.00344101334058 +0 +120 +absolute + + + +0.01 +smooth + +8.53696398022207 +47.35015530143856 +428.871672142484 +-71.42909146865846 +76.98691633824899 +0 +120 +absolute + + + +0.01 +smooth + +8.536964183605477 +47.35015584371355 +428.87063303669714 +-71.58734617959465 +76.97041331632431 +0 +120 +absolute + + + +0.01 +smooth + +8.536964384972842 +47.35015638577834 +428.86960143634656 +-71.74557424366141 +76.95393221861933 +0 +120 +absolute + + + +0.01 +smooth + +8.536964584300913 +47.35015692762914 +428.86857740995305 +-71.90377414051298 +76.93747331618694 +0 +120 +absolute + + + +0.01 +smooth + +8.536964781921364 +47.350157469294025 +428.8675601171884 +-72.06195655638219 +76.92103443807902 +0 +120 +absolute + + + +0.01 +smooth + +8.536964979263336 +47.3501580109002 +428.866545892142 +-72.22017019707931 +76.9046058162477 +0 +120 +absolute + + + +0.01 +smooth + +8.536965176445921 +47.35015855245802 +428.8655344038434 +-72.37841906676482 +76.8881866369518 +0 +120 +absolute + + + +0.01 +smooth + +8.536965373430034 +47.35015909396368 +428.864525725377 +-72.53670174717531 +76.87177717179866 +0 +120 +absolute + + + +0.01 +smooth + +8.53696557017659 +47.35015963541336 +428.86351992982696 +-72.69501682004733 +76.85537769239566 +0 +120 +absolute + + + +0.01 +smooth + +8.536965766646519 +47.35016017680329 +428.86251709027783 +-72.8533628671175 +76.83898847035019 +0 +120 +absolute + + + +0.01 +smooth + +8.536965962800734 +47.35016071812964 +428.86151727981377 +-73.01173847012238 +76.82260977726962 +0 +120 +absolute + + + +0.01 +smooth + +8.536966158600155 +47.35016125938859 +428.8605205715191 +-73.17014221079857 +76.80624188476122 +0 +120 +absolute + + + +0.01 +smooth + +8.536966354005708 +47.35016180057638 +428.8595270384781 +-73.3285726708827 +76.7898850644325 +0 +120 +absolute + + + +0.01 +smooth + +8.536966548978304 +47.350162341689206 +428.85853675377524 +-73.48702843211132 +76.77353958789072 +0 +120 +absolute + + + +0.01 +smooth + +8.536966743478866 +47.350162882723204 +428.85754979049483 +-73.64550807622095 +76.75720572674331 +0 +120 +absolute + + + +0.01 +smooth + +8.536966937468316 +47.350163423674644 +428.856566221721 +-73.80401018494832 +76.7408837525976 +0 +120 +absolute + + + +0.01 +smooth + +8.536967130907573 +47.35016396453967 +428.855586120538 +-73.96253334002995 +76.72457393706095 +0 +120 +absolute + + + +0.01 +smooth + +8.536967323757555 +47.35016450531451 +428.85460956003055 +-74.12107612320243 +76.70827655174078 +0 +120 +absolute + + + +0.01 +smooth + +8.536967515979182 +47.350165045995325 +428.85363661328256 +-74.27963711620235 +76.6919918682444 +0 +120 +absolute + + + +0.01 +smooth + +8.536967707533371 +47.35016558657834 +428.85266735337854 +-74.43821490076628 +76.67572015817919 +0 +120 +absolute + + + +0.01 +smooth + +8.53696789838105 +47.350166127059765 +428.8517018534027 +-74.59680805863086 +76.65946169315252 +0 +120 +absolute + + + +0.01 +smooth + +8.536968088483134 +47.35016666743578 +428.8507401864396 +-74.75541517153263 +76.64321674477178 +0 +120 +absolute + + + +0.01 +smooth + +8.536968277800538 +47.35016720770255 +428.84978242557315 +-74.91403482120818 +76.62698558464429 +0 +120 +absolute + + + +0.01 +smooth + +8.536968466294187 +47.35016774785631 +428.848828643888 +-75.07266558939413 +76.61076848437747 +0 +120 +absolute + + + +0.01 +smooth + +8.536968653925003 +47.350168287893254 +428.84787891446837 +-75.23130605782706 +76.59456571557867 +0 +120 +absolute + + + +0.01 +smooth + +8.536968840653898 +47.350168827809554 +428.84693331039836 +-75.38995480824352 +76.57837754985522 +0 +120 +absolute + + + +0.01 +smooth + +8.536969026441799 +47.35016936760145 +428.84599190476274 +-75.54861042238015 +76.56220425881455 +0 +120 +absolute + + + +0.01 +smooth + +8.536969211249623 +47.35016990726509 +428.8450547706455 +-75.70727148197352 +76.54604611406396 +0 +120 +absolute + + + +0.01 +smooth + +8.53696939503829 +47.3501704467967 +428.84412198113085 +-75.86593656876015 +76.52990338721087 +0 +120 +absolute + + + +0.01 +smooth + +8.536969577768717 +47.350170986192474 +428.8431936093035 +-76.02460426447678 +76.51377634986261 +0 +120 +absolute + + + +0.01 +smooth + +8.536969759401826 +47.35017152544857 +428.8422697282472 +-76.18327315085986 +76.49766527362655 +0 +120 +absolute + + + +0.01 +smooth + +8.536969939898537 +47.35017206456124 +428.84135041104685 +-76.34194180964609 +76.48157043011008 +0 +120 +absolute + + + +0.01 +smooth + +8.536970119219774 +47.35017260352667 +428.84043573078657 +-76.50060882257198 +76.46549209092056 +0 +120 +absolute + + + +0.01 +smooth + +8.536970297326445 +47.35017314234102 +428.8395257605503 +-76.65927277137409 +76.44943052766534 +0 +120 +absolute + + + +0.01 +smooth + +8.536970474179482 +47.35017368100053 +428.83862057342293 +-76.81793223778914 +76.43338601195182 +0 +120 +absolute + + + +0.01 +smooth + +8.536970649739798 +47.350174219501355 +428.83772024248844 +-76.97658580355358 +76.41735881538733 +0 +120 +absolute + + + +0.01 +smooth + +8.536970823968312 +47.35017475783971 +428.83682484083107 +-77.13523205040406 +76.40134920957925 +0 +120 +absolute + + + +0.01 +smooth + +8.536970996825952 +47.35017529601183 +428.8359344415355 +-77.29386956007723 +76.38535746613496 +0 +120 +absolute + + + +0.01 +smooth + +8.536971168273627 +47.35017583401383 +428.8350491176857 +-77.45249691430953 +76.3693838566618 +0 +120 +absolute + + + +0.01 +smooth + +8.536971338272263 +47.350176371841975 +428.83416894236603 +-77.61111269483769 +76.35342865276715 +0 +120 +absolute + + + +0.01 +smooth + +8.536971506782777 +47.35017690949244 +428.83329398866096 +-77.7697154833982 +76.3374921260584 +0 +120 +absolute + + + +0.01 +smooth + +8.53697167376609 +47.3501774469614 +428.8324243296547 +-77.92830386172767 +76.32157454814288 +0 +120 +absolute + + + +0.01 +smooth + +8.536971839183122 +47.350177984245086 +428.8315600384316 +-78.08687641156274 +76.30567619062796 +0 +120 +absolute + + + +0.01 +smooth + +8.536972002994792 +47.35017852133968 +428.830701188076 +-78.24543171463998 +76.28979732512104 +0 +120 +absolute + + + +0.01 +smooth + +8.53697216516202 +47.35017905824137 +428.829847851672 +-78.40396835269595 +76.27393822322946 +0 +120 +absolute + + + +0.01 +smooth + +8.536972325645724 +47.35017959494636 +428.8290001023041 +-78.56248490746728 +76.25809915656058 +0 +120 +absolute + + + +0.01 +smooth + +8.536972484406828 +47.35018013145085 +428.8281580130568 +-78.72097996069051 +76.2422803967218 +0 +120 +absolute + + + +0.01 +smooth + +8.536972641406248 +47.35018066775103 +428.82732165701407 +-78.87945209410228 +76.22648221532043 +0 +120 +absolute + + + +0.01 +smooth + +8.536972796604905 +47.35018120384311 +428.8264911072604 +-79.03789988943913 +76.2107048839639 +0 +120 +absolute + + + +0.01 +smooth + +8.536972949963719 +47.350181739723254 +428.82566643688 +-79.19632192843767 +76.19494867425955 +0 +120 +absolute + + + +0.01 +smooth + +8.536973101443607 +47.350182275387695 +428.82484771895736 +-79.3547167928345 +76.17921385781473 +0 +120 +absolute + + + +0.01 +smooth + +8.536973251005493 +47.35018281083261 +428.82403502657655 +-79.51308306436619 +76.16350070623685 +0 +120 +absolute + + + +0.01 +smooth + +8.536973398610296 +47.350183346054195 +428.823228432822 +-79.67141932476933 +76.14780949113322 +0 +120 +absolute + + + +0.01 +smooth + +8.536973544218931 +47.35018388104865 +428.8224280107782 +-79.82972415578053 +76.13214048411123 +0 +120 +absolute + + + +0.01 +smooth + +8.536973687792324 +47.35018441581217 +428.82163383352923 +-79.98799613913636 +76.11649395677827 +0 +120 +absolute + + + +0.01 +smooth + +8.53697382929139 +47.35018495034095 +428.8208459741595 +-80.14623385657333 +76.1008701807417 +0 +120 +absolute + + + +0.01 +smooth + +8.536973968677051 +47.350185484631204 +428.82006450575324 +-80.3044358898282 +76.08526942760884 +0 +120 +absolute + + + +0.01 +smooth + +8.536974105910227 +47.35018601867911 +428.8192895013949 +-80.46260082063746 +76.06969196898712 +0 +120 +absolute + + + +0.01 +smooth + +8.536974240951835 +47.350186552480864 +428.8185210341686 +-80.62072723073771 +76.05413807648387 +0 +120 +absolute + + + +0.01 +smooth + +8.536974373762797 +47.35018708603266 +428.8177591771589 +-80.77881370186554 +76.03860802170647 +0 +120 +absolute + + + +0.01 +smooth + +8.536974504304034 +47.35018761933071 +428.81700400344994 +-80.93685881575753 +76.02310207626229 +0 +120 +absolute + + + +0.01 +smooth + +8.536974632536463 +47.3501881523712 +428.81625558612603 +-81.09486115415028 +76.00762051175866 +0 +120 +absolute + + + +0.01 +smooth + +8.536974758421007 +47.35018868515033 +428.81551399827157 +-81.25281929878037 +75.99216359980299 +0 +120 +absolute + + + +0.01 +smooth + +8.53697488191858 +47.350189217664294 +428.8147793129708 +-81.4107318313844 +75.97673161200265 +0 +120 +absolute + + + +0.01 +smooth + +8.536975002990106 +47.350189749909276 +428.81405160330814 +-81.56859733369893 +75.96132481996497 +0 +120 +absolute + + + +0.01 +smooth + +8.536975121596505 +47.350190281881495 +428.8133309423678 +-81.72641438746058 +75.94594349529733 +0 +120 +absolute + + + +0.01 +smooth + +8.536975237698694 +47.350190813577136 +428.8126174032342 +-81.88418157440593 +75.93058790960713 +0 +120 +absolute + + + +0.01 +smooth + +8.536975351257595 +47.350191344992396 +428.8119110589914 +-82.04189747627159 +75.91525833450167 +0 +120 +absolute + + + +0.01 +smooth + +8.536975462234128 +47.350191876123475 +428.8112119827241 +-82.19956067479403 +75.89995504158841 +0 +120 +absolute + + + +0.01 +smooth + +8.53697557058921 +47.35019240696656 +428.81052024751625 +-82.35716975171002 +75.88467830247461 +0 +120 +absolute + + + +0.01 +smooth + +8.536975676283765 +47.35019293751786 +428.80983592645237 +-82.51472328875604 +75.8694283887677 +0 +120 +absolute + + + +0.01 +smooth + +8.53697577927871 +47.35019346777355 +428.8091590926168 +-82.67221986766873 +75.85420557207505 +0 +120 +absolute + + + +0.01 +smooth + +8.536975879534962 +47.35019399772987 +428.80848981909367 +-82.82965807018464 +75.83901012400402 +0 +120 +absolute + + + +0.01 +smooth + +8.536975977268337 +47.35019452739759 +428.8078276907956 +-82.98704151918116 +75.8238411552843 +0 +120 +absolute + + + +0.01 +smooth + +8.536976074793339 +47.35019505690826 +428.8071682712106 +-83.14441546617338 +75.808688200166 +0 +120 +absolute + + + +0.01 +smooth + +8.53697617263247 +47.350195586290965 +428.8065105522836 +-83.30178994834019 +75.79354892047269 +0 +120 +absolute + + + +0.01 +smooth + +8.536976270733959 +47.35019611554179 +428.8058546254467 +-83.45916366749844 +75.77842359014237 +0 +120 +absolute + + + +0.01 +smooth + +8.53697636904603 +47.350196644656904 +428.80520058213193 +-83.616535325465 +75.76331248311307 +0 +120 +absolute + + + +0.01 +smooth + +8.536976467516922 +47.35019717363244 +428.80454851377175 +-83.77390362405681 +75.7482158733229 +0 +120 +absolute + + + +0.01 +smooth + +8.536976566094859 +47.35019770246452 +428.8038985117983 +-83.93126726509072 +75.73313403470996 +0 +120 +absolute + + + +0.01 +smooth + +8.536976664728073 +47.35019823114928 +428.80325066764385 +-84.0886249503836 +75.71806724121221 +0 +120 +absolute + + + +0.01 +smooth + +8.536976763364796 +47.35019875968287 +428.80260507274073 +-84.24597538175237 +75.70301576676783 +0 +120 +absolute + + + +0.01 +smooth + +8.536976861953262 +47.35019928806142 +428.80196181852097 +-84.40331726101384 +75.6879798853148 +0 +120 +absolute + + + +0.01 +smooth + +8.53697696044169 +47.350199816281055 +428.80132099641685 +-84.56064928998502 +75.67295987079125 +0 +120 +absolute + + + +0.01 +smooth + +8.536977058778323 +47.350200344337935 +428.80068269786074 +-84.71797017048273 +75.65795599713518 +0 +120 +absolute + + + +0.01 +smooth + +8.536977156911382 +47.35020087222815 +428.80004701428453 +-84.87527860432382 +75.64296853828468 +0 +120 +absolute + + + +0.01 +smooth + +8.536977254789099 +47.350201399947885 +428.799414037121 +-85.03257329332524 +75.62799776817783 +0 +120 +absolute + + + +0.01 +smooth + +8.53697735235971 +47.35020192749325 +428.7987838578019 +-85.18985293930386 +75.61304396075269 +0 +120 +absolute + + + +0.01 +smooth + +8.536977449571435 +47.350202454860366 +428.7981565677594 +-85.3471162440765 +75.59810738994726 +0 +120 +absolute + + + +0.01 +smooth + +8.536977546372517 +47.35020298204541 +428.7975322584262 +-85.50436190946014 +75.58318832969972 +0 +120 +absolute + + + +0.01 +smooth + +8.536977642711179 +47.35020350904448 +428.79691102123434 +-85.66158863727163 +75.56828705394807 +0 +120 +absolute + + + +0.01 +smooth + +8.536977738535649 +47.35020403585374 +428.7962929476158 +-85.81879512932781 +75.55340383663035 +0 +120 +absolute + + + +0.01 +smooth + +8.536977833794166 +47.35020456246932 +428.7956781290032 +-85.97598008744565 +75.5385389516847 +0 +120 +absolute + + + +0.01 +smooth + +8.53697792843495 +47.350205088887314 +428.79506665682834 +-86.13314221344194 +75.5236926730491 +0 +120 +absolute + + + +0.01 +smooth + +8.536978022406238 +47.3502056151039 +428.79445862252373 +-86.29028020913361 +75.50886527466166 +0 +120 +absolute + + + +0.01 +smooth + +8.536978115656261 +47.35020614111523 +428.79385411752173 +-86.44739277633755 +75.49405703046047 +0 +120 +absolute + + + +0.01 +smooth + +8.536978208133242 +47.35020666691737 +428.79325323325406 +-86.60447861687061 +75.47926821438352 +0 +120 +absolute + + + +0.01 +smooth + +8.53697829978542 +47.35020719250653 +428.79265606115354 +-86.76153643254979 +75.46449910036894 +0 +120 +absolute + + + +0.01 +smooth + +8.536978390561023 +47.35020771787882 +428.792062692652 +-86.91856492519183 +75.44974996235477 +0 +120 +absolute + + + +0.01 +smooth + +8.536978480408276 +47.35020824303033 +428.7914732191818 +-87.07556279661371 +75.43502107427906 +0 +120 +absolute + + + +0.01 +smooth + +8.536978569275416 +47.35020876795726 +428.79088773217535 +-87.23252874863229 +75.42031271007991 +0 +120 +absolute + + + +0.01 +smooth + +8.53697865711067 +47.35020929265573 +428.7903063230645 +-87.38946148306442 +75.40562514369537 +0 +120 +absolute + + + +0.01 +smooth + +8.536978743862267 +47.35020981712184 +428.7897290832816 +-87.54635970172701 +75.39095864906348 +0 +120 +absolute + + + +0.01 +smooth + +8.536978829478446 +47.35021034135178 +428.7891561042593 +-87.70322210643702 +75.37631350012235 +0 +120 +absolute + + + +0.01 +smooth + +8.536978913907424 +47.35021086534162 +428.78858747742913 +-87.8600473990112 +75.36168997080998 +0 +120 +absolute + + + +0.01 +smooth + +8.536978997097439 +47.35021138908756 +428.78802329422376 +-88.0168342812665 +75.3470883350645 +0 +120 +absolute + + + +0.01 +smooth + +8.536979078996723 +47.350211912585706 +428.7874636460756 +-88.17358145501986 +75.33250886682397 +0 +120 +absolute + + + +0.01 +smooth + +8.536979159553502 +47.350212435832184 +428.7869086244162 +-88.33028762208802 +75.31795184002638 +0 +120 +absolute + + + +0.01 +smooth + +8.536979238716008 +47.350212958823136 +428.78635832067835 +-88.486951484288 +75.30341752860987 +0 +120 +absolute + + + +0.01 +smooth + +8.53697931643247 +47.350213481554704 +428.7858128262942 +-88.64357174343661 +75.28890620651248 +0 +120 +absolute + + + +0.01 +smooth + +8.536979392651121 +47.35021400402302 +428.7852722326959 +-88.8001471013508 +75.27441814767226 +0 +120 +absolute + + + +0.01 +smooth + +8.53697946732019 +47.35021452622422 +428.7847366313157 +-88.95667625984741 +75.25995362602731 +0 +120 +absolute + + + +0.01 +smooth + +8.536979540387906 +47.35021504815444 +428.78420611358564 +-89.11315792074333 +75.24551291551568 +0 +120 +absolute + + + +0.01 +smooth + +8.536979611802504 +47.35021556980982 +428.7836807709383 +-89.26959078585548 +75.23109629007541 +0 +120 +absolute + + + +0.01 +smooth + +8.536979681512207 +47.35021609118648 +428.7831606948057 +-89.42597355700072 +75.21670402364458 +0 +120 +absolute + + + +0.01 +smooth + +8.536979749465253 +47.350216612280576 +428.7826459766201 +-89.5823049359959 +75.20233639016126 +0 +120 +absolute + + + +0.01 +smooth + +8.536979815609866 +47.35021713308823 +428.7821367078138 +-89.73858362465793 +75.18799366356353 +0 +120 +absolute + + + +0.01 +smooth + +8.536979879894279 +47.350217653605576 +428.7816329798188 +-89.89480832480373 +75.17367611778943 +0 +120 +absolute + + + +0.01 +smooth + +8.536979942266724 +47.35021817382876 +428.7811348840676 +-90.05097773825015 +75.15938402677702 +0 +120 +absolute + + + +0.01 +smooth + +8.53698000267543 +47.3502186937539 +428.78064251199237 +-90.20709056681409 +75.14511766446438 +0 +120 +absolute + + + +0.01 +smooth + +8.536980061068624 +47.35021921337716 +428.7801559550252 +-90.36314551231241 +75.13087730478956 +0 +120 +absolute + + + +0.01 +smooth + +8.53698011739454 +47.35021973269464 +428.7796753045984 +-90.51914127656204 +75.11666322169066 +0 +120 +absolute + + + +0.01 +smooth + +8.53698017160141 +47.3502202517025 +428.77920065214425 +-90.67507656137975 +75.10247568910569 +0 +120 +absolute + + + +0.01 +smooth + +8.53698022363746 +47.35022077039686 +428.778732089095 +-90.83095006858258 +75.08831498097275 +0 +120 +absolute + + + +0.01 +smooth + +8.536980273450922 +47.35022128877388 +428.7782697068827 +-90.98676049998735 +75.07418137122991 +0 +120 +absolute + + + +0.01 +smooth + +8.536980320990027 +47.35022180682968 +428.7778135969397 +-91.14250655741094 +75.06007513381522 +0 +120 +absolute + + + +0.01 +smooth + +8.536980366203007 +47.350222324560384 +428.7773638506983 +-91.29818694267026 +75.04599654266674 +0 +120 +absolute + + + +0.01 +smooth + +8.536980409038087 +47.350222841962136 +428.7769205595906 +-91.45380035758215 +75.03194587172254 +0 +120 +absolute + + + +0.01 +smooth + +8.536980449443503 +47.35022335903108 +428.77648381504895 +-91.60934550396354 +75.01792339492069 +0 +120 +absolute + + + +0.01 +smooth + +8.536980487367483 +47.35022387576335 +428.7760537085054 +-91.76482108363126 +75.00392938619925 +0 +120 +absolute + + + +0.01 +smooth + +8.536980522758256 +47.35022439215507 +428.77563033139234 +-91.92022579840226 +74.98996411949628 +0 +120 +absolute + + + +0.01 +smooth + +8.536980555564053 +47.35022490820238 +428.775213775142 +-92.07555835009339 +74.97602786874984 +0 +120 +absolute + + + +0.01 +smooth + +8.536980585733106 +47.35022542390141 +428.7748041311865 +-92.23081744052152 +74.96212090789803 +0 +120 +absolute + + + +0.01 +smooth + +8.536980613213643 +47.35022593924832 +428.77440149095816 +-92.38600177150357 +74.94824351087885 +0 +120 +absolute + + + +0.01 +smooth + +8.5369806379539 +47.35022645423923 +428.77400594588914 +-92.54111004485644 +74.93439595163044 +0 +120 +absolute + + + +0.01 +smooth + +8.536980659902097 +47.35022696887026 +428.7736175874117 +-92.69614096239695 +74.92057850409081 +0 +120 +absolute + + + +0.01 +smooth + +8.536980679006474 +47.35022748313756 +428.77323650695814 +-92.85109322594198 +74.90679144219803 +0 +120 +absolute + + + +0.01 +smooth + +8.536980695215256 +47.350227997037265 +428.7728627959606 +-93.00596553730848 +74.89303503989021 +0 +120 +absolute + + + +0.01 +smooth + +8.536980708476676 +47.350228510565515 +428.77249654585125 +-93.16075659831336 +74.87930957110534 +0 +120 +absolute + + + +0.01 +smooth + +8.536980718738961 +47.350229023718434 +428.77213784806247 +-93.31546511077343 +74.86561530978155 +0 +120 +absolute + + + +0.01 +smooth + +8.536980725950349 +47.35022953649218 +428.7717867940264 +-93.4700897765056 +74.85195252985686 +0 +120 +absolute + + + +0.01 +smooth + +8.536980730059058 +47.35023004888285 +428.7714434751754 +-93.62462929732675 +74.83832150526936 +0 +120 +absolute + + + +0.01 +smooth + +8.536980731054761 +47.35023056089045 +428.7711077956322 +-93.77908353985629 +74.82472219371732 +0 +120 +absolute + + + +0.01 +smooth + +8.536980730268452 +47.35023107263789 +428.7707736863391 +-93.93348967669408 +74.81114443478945 +0 +120 +absolute + + + +0.01 +smooth + +8.536980728369171 +47.35023158418273 +428.7704383188926 +-94.08786516673018 +74.79758344841022 +0 +120 +absolute + + + +0.01 +smooth + +8.536980725369972 +47.35023209552099 +428.7701018710449 +-94.2422088463712 +74.78403951503626 +0 +120 +absolute + + + +0.01 +smooth + +8.536980721283916 +47.350232606648724 +428.76976452054845 +-94.3965195520237 +74.77051291512424 +0 +120 +absolute + + + +0.01 +smooth + +8.53698071612405 +47.35023311756196 +428.7694264451554 +-94.55079612009429 +74.7570039291308 +0 +120 +absolute + + + +0.01 +smooth + +8.536980709903446 +47.35023362825677 +428.7690878226182 +-94.70503738698969 +74.74351283751268 +0 +120 +absolute + + + +0.01 +smooth + +8.536980702635152 +47.350234138729185 +428.76874883068933 +-94.8592421891164 +74.73003992072647 +0 +120 +absolute + + + +0.01 +smooth + +8.536980694332229 +47.35023464897524 +428.76840964712085 +-95.01340936288105 +74.7165854592289 +0 +120 +absolute + + + +0.01 +smooth + +8.53698068500773 +47.350235158990984 +428.76807044966523 +-95.16753774469036 +74.70314973347655 +0 +120 +absolute + + + +0.01 +smooth + +8.536980674674723 +47.350235668772484 +428.76773141607504 +-95.32162617095094 +74.68973302392621 +0 +120 +absolute + + + +0.01 +smooth + +8.536980663346252 +47.35023617831577 +428.7673927241025 +-95.4756734780693 +74.67633561103449 +0 +120 +absolute + + + +0.01 +smooth + +8.536980651035382 +47.35023668761687 +428.76705455149965 +-95.62967850245212 +74.66295777525801 +0 +120 +absolute + + + +0.01 +smooth + +8.53698063775517 +47.35023719667185 +428.7667170760193 +-95.78364008050609 +74.6495997970535 +0 +120 +absolute + + + +0.01 +smooth + +8.536980623518673 +47.35023770547676 +428.7663804754136 +-95.93755704863771 +74.6362619568776 +0 +120 +absolute + + + +0.01 +smooth + +8.536980608338947 +47.35023821402763 +428.766044927435 +-96.09142824325369 +74.62294453518703 +0 +120 +absolute + + + +0.01 +smooth + +8.536980592229051 +47.3502387223205 +428.7657106098357 +-96.24525250076057 +74.6096478124384 +0 +120 +absolute + + + +0.01 +smooth + +8.536980575202042 +47.35023923035142 +428.76537770036805 +-96.39902865756504 +74.59637206908837 +0 +120 +absolute + + + +0.01 +smooth + +8.536980557270978 +47.350239738116436 +428.7650463767846 +-96.5527555500737 +74.58311758559367 +0 +120 +absolute + + + +0.01 +smooth + +8.536980538448914 +47.3502402456116 +428.76471681683756 +-96.70643201469316 +74.56988464241091 +0 +120 +absolute + + + +0.01 +smooth + +8.53698051874891 +47.35024075283294 +428.7643891982792 +-96.86005688783 +74.55667351999678 +0 +120 +absolute + + + +0.01 +smooth + +8.536980498184024 +47.35024125977651 +428.7640636988621 +-97.01362900589086 +74.54348449880796 +0 +120 +absolute + + + +0.01 +smooth + +8.536980476767308 +47.350241766438366 +428.76374049633847 +-97.16714720528245 +74.5303178593011 +0 +120 +absolute + + + +0.01 +smooth + +8.536980454511827 +47.350242272814526 +428.7634197684606 +-97.32061032241127 +74.51717388193288 +0 +120 +absolute + + + +0.01 +smooth + +8.536980431430637 +47.350242778901084 +428.7631016929811 +-97.47401719368406 +74.50405284716 +0 +120 +absolute + + + +0.01 +smooth + +8.536980407536786 +47.35024328469401 +428.762786447652 +-97.62736665550733 +74.49095503543903 +0 +120 +absolute + + + +0.01 +smooth + +8.536980382843344 +47.3502437901894 +428.7624742102257 +-97.78065754428775 +74.47788072722673 +0 +120 +absolute + + + +0.01 +smooth + +8.536980357363365 +47.35024429538332 +428.762165158455 +-97.93388869643196 +74.46483020297975 +0 +120 +absolute + + + +0.01 +smooth + +8.536980331109902 +47.35024480027175 +428.76185947009157 +-98.08705894834651 +74.45180374315473 +0 +120 +absolute + + + +0.01 +smooth + +8.536980304096014 +47.35024530485077 +428.7615573228881 +-98.24016713643807 +74.43880162820838 +0 +120 +absolute + + + +0.01 +smooth + +8.536980276334763 +47.35024580911645 +428.7612588945972 +-98.39321209711325 +74.42582413859732 +0 +120 +absolute + + + +0.01 +smooth + +8.536980247839198 +47.35024631306477 +428.76096436297064 +-98.54619266677867 +74.41287155477822 +0 +120 +absolute + + + +0.01 +smooth + +8.536980218622388 +47.35024681669183 +428.76067390576134 +-98.69910768184096 +74.39994415720783 +0 +120 +absolute + + + +0.01 +smooth + +8.536980188697381 +47.35024731999366 +428.7603877007214 +-98.85195597870673 +74.38704222634274 +0 +120 +absolute + + + +0.01 +smooth + +8.536980158077233 +47.350247822966296 +428.76010592560294 +-99.00473639378257 +74.3741660426396 +0 +120 +absolute + + + +0.01 +smooth + +8.536980126775008 +47.3502483256058 +428.7598287581588 +-99.15744776347512 +74.36131588655516 +0 +120 +absolute + + + +0.01 +smooth + +8.536980094803765 +47.35024882790818 +428.75955637614095 +-99.31008892419104 +74.34849203854603 +0 +120 +absolute + + + +0.01 +smooth + +8.536980062176553 +47.35024932986952 +428.7592889573019 +-99.46265871233693 +74.33569477906889 +0 +120 +absolute + + + +0.01 +smooth + +8.536980028906438 +47.35024983148585 +428.759026679394 +-99.61515596431937 +74.3229243885804 +0 +120 +absolute + + + +0.01 +smooth + +8.53697999500647 +47.35025033275321 +428.7587697201696 +-99.76757951654503 +74.31018114753725 +0 +120 +absolute + + + +0.01 +smooth + +8.536979960489713 +47.35025083366765 +428.75851825738096 +-99.91992820542052 +74.2974653363961 +0 +120 +absolute + + + +0.01 +smooth + +8.536979925369218 +47.350251334225206 +428.7582724687805 +-100.07220086735242 +74.2847772356136 +0 +120 +absolute + + + +0.01 +smooth + +8.536979889658049 +47.35025183442195 +428.75803253212064 +-100.22439633874741 +74.27211712564645 +0 +120 +absolute + + + +0.01 +smooth + +8.536979853369258 +47.35025233425389 +428.7577986251536 +-100.37651345601206 +74.2594852869513 +0 +120 +absolute + + + +0.01 +smooth + +8.536979816515906 +47.35025283371709 +428.7575709256318 +-100.52855105555301 +74.24688199998482 +0 +120 +absolute + + + +0.01 +smooth + +8.536979779111046 +47.3502533328076 +428.75734961130763 +-100.68050797377688 +74.23430754520368 +0 +120 +absolute + + + +0.01 +smooth + +8.536979741167743 +47.35025383152144 +428.75713485993344 +-100.83238304709029 +74.22176220306454 +0 +120 +absolute + + + +0.01 +smooth + +8.536979702699048 +47.35025432985469 +428.7569268492615 +-100.98417511189986 +74.20924625402407 +0 +120 +absolute + + + +0.01 +smooth + +8.53697966371802 +47.35025482780336 +428.75672575704414 +-101.13588300461214 +74.19675997853895 +0 +120 +absolute + + + +0.01 +smooth + +8.536979624237716 +47.35025532536352 +428.7565317610339 +-101.28750556163388 +74.18430365706584 +0 +120 +absolute + + + +0.01 +smooth + +8.536979584271196 +47.35025582253121 +428.75634503898294 +-101.43904161937164 +74.17187757006141 +0 +120 +absolute + + + +0.01 +smooth + +8.536979543831515 +47.35025631930246 +428.7561657686437 +-101.59049001423202 +74.15948199798234 +0 +120 +absolute + + + +0.01 +smooth + +8.53697950293173 +47.350256815673326 +428.75599412776853 +-101.74184958262168 +74.14711722128528 +0 +120 +absolute + + + +0.01 +smooth + +8.5369794615849 +47.35025731163985 +428.7558302941098 +-101.89311916094718 +74.1347835204269 +0 +120 +absolute + + + +0.01 +smooth + +8.536979419804084 +47.35025780719809 +428.7556744454198 +-102.04429758561521 +74.12248117586387 +0 +120 +absolute + + + +0.01 +smooth + +8.536979377602336 +47.350258302344066 +428.75552675945096 +-102.19538369303234 +74.11021046805288 +0 +120 +absolute + + + +0.01 +smooth + +8.536979334992715 +47.35025879707384 +428.75538741395553 +-102.34637631960523 +74.09797167745056 +0 +120 +absolute + + + +0.01 +smooth + +8.536979291988278 +47.35025929138345 +428.75525658668585 +-102.49727430174045 +74.08576508451361 +0 +120 +absolute + + + +0.01 +smooth + +8.536979248602083 +47.350259785268946 +428.75513445539445 +-102.64807647584468 +74.07359096969869 +0 +120 +absolute + + + +0.01 +smooth + +8.536979204847187 +47.35026027872637 +428.75502119783346 +-102.79878167832446 +74.06144961346244 +0 +120 +absolute + + + +0.01 +smooth + +8.536979160736648 +47.35026077175176 +428.7549169917555 +-102.94938874558648 +74.04934129626157 +0 +120 +absolute + + + +0.01 +smooth + +8.536979116283522 +47.350261264341164 +428.75482201491275 +-103.09989651403733 +74.03726629855274 +0 +120 +absolute + + + +0.01 +smooth + +8.536979071500868 +47.35026175649063 +428.75473644505746 +-103.25030382008359 +74.02522490079261 +0 +120 +absolute + + + +0.01 +smooth + +8.536979026401742 +47.350262248196216 +428.7546604599422 +-103.40060950013196 +74.01321738343782 +0 +120 +absolute + + + +0.01 +smooth + +8.536978980999205 +47.35026273945394 +428.7545942373192 +-103.55081239058903 +74.0012440269451 +0 +120 +absolute + + + +0.01 +smooth + +8.53697893530631 +47.35026323025986 +428.7545379549408 +-103.70091132786142 +73.98930511177105 +0 +120 +absolute + + + +0.01 +smooth + +8.536978889336115 +47.350263720610016 +428.7544917905594 +-103.85090514835574 +73.97740091837241 +0 +120 +absolute + + + +0.01 +smooth + +8.53697884310168 +47.35026421050047 +428.7544559219274 +-104.00079268847863 +73.96553172720577 +0 +120 +absolute + + + +0.01 +smooth + +8.536978796616062 +47.35026469992724 +428.75443052679714 +-104.15057278463668 +73.95369781872786 +0 +120 +absolute + + + +0.01 +smooth + +8.536978749892317 +47.35026518888639 +428.7544157829208 +-104.30024427323652 +73.94189947339534 +0 +120 +absolute + + + +0.01 +smooth + +8.536978701218507 +47.35026567747629 +428.75440648758655 +-104.4498327267518 +73.93012817527058 +0 +120 +absolute + + + +0.01 +smooth + +8.53697864891227 +47.35026616579521 +428.7543973197343 +-104.59936381360231 +73.91837541814428 +0 +120 +absolute + + + +0.01 +smooth + +8.536978593031032 +47.35026665383909 +428.7543882795958 +-104.74883651411417 +73.9066414970655 +0 +120 +absolute + + + +0.01 +smooth + +8.536978533632215 +47.35026714160387 +428.75437936740155 +-104.8982498086133 +73.8949267070832 +0 +120 +absolute + + + +0.01 +smooth + +8.536978470773239 +47.35026762908546 +428.7543705833829 +-105.04760267742576 +73.88323134324646 +0 +120 +absolute + + + +0.01 +smooth + +8.536978404511528 +47.35026811627975 +428.7543619277705 +-105.19689410087739 +73.87155570060429 +0 +120 +absolute + + + +0.01 +smooth + +8.53697833490451 +47.350268603182734 +428.75435340079594 +-105.34612305929444 +73.85990007420575 +0 +120 +absolute + + + +0.01 +smooth + +8.536978262009603 +47.35026908979028 +428.75434500268994 +-105.49528853300276 +73.84826475909992 +0 +120 +absolute + + + +0.01 +smooth + +8.536978185884232 +47.350269576098334 +428.75433673368366 +-105.6443895023284 +73.83665005033575 +0 +120 +absolute + + + +0.01 +smooth + +8.536978106585819 +47.35027006210281 +428.7543285940079 +-105.7934249475973 +73.82505624296229 +0 +120 +absolute + + + +0.01 +smooth + +8.536978024171786 +47.350270547799646 +428.7543205838942 +-105.94239384913556 +73.81348363202864 +0 +120 +absolute + + + +0.01 +smooth + +8.536977938699561 +47.35027103318476 +428.7543127035732 +-106.0912951872691 +73.80193251258376 +0 +120 +absolute + + + +0.01 +smooth + +8.536977850226561 +47.35027151825407 +428.75430495327623 +-106.24012794232395 +73.79040317967674 +0 +120 +absolute + + + +0.01 +smooth + +8.53697775881021 +47.35027200300349 +428.75429733323386 +-106.38889109462606 +73.77889592835658 +0 +120 +absolute + + + +0.01 +smooth + +8.536977664507935 +47.350272487428974 +428.7542898436777 +-106.53758362450152 +73.76741105367235 +0 +120 +absolute + + + +0.01 +smooth + +8.536977567377157 +47.35027297152642 +428.75428248483865 +-106.6862045122763 +73.75594885067305 +0 +120 +absolute + + + +0.01 +smooth + +8.536977467475294 +47.350273455291756 +428.75427525694755 +-106.83475273827635 +73.74450961440773 +0 +120 +absolute + + + +0.01 +smooth + +8.53697736485978 +47.350273938720925 +428.7542681602357 +-106.98322728282777 +73.73309363992544 +0 +120 +absolute + + + +0.01 +smooth + +8.53697725958803 +47.35027442180984 +428.75426119493403 +-107.13162712625646 +73.72170122227521 +0 +120 +absolute + + + +0.01 +smooth + +8.536977151717464 +47.3502749045544 +428.75425436127347 +-107.2799512488884 +73.71033265650604 +0 +120 +absolute + + + +0.01 +smooth + +8.536977041305516 +47.350275386950585 +428.7542476594855 +-107.42819863104977 +73.69898823766704 +0 +120 +absolute + + + +0.01 +smooth + +8.536976928409599 +47.35027586899426 +428.7542410898006 +-107.57636825306639 +73.68766826080716 +0 +120 +absolute + + + +0.01 +smooth + +8.536976813087138 +47.350276350681376 +428.7542346524502 +-107.72445909526436 +73.67637302097549 +0 +120 +absolute + + + +0.01 +smooth + +8.536976695395563 +47.35027683200787 +428.7542283476652 +-107.87247013796967 +73.66510281322105 +0 +120 +absolute + + + +0.01 +smooth + +8.53697657539229 +47.35027731296963 +428.75422217567666 +-108.02040036150827 +73.65385793259289 +0 +120 +absolute + + + +0.01 +smooth + +8.53697645313474 +47.35027779356261 +428.75421613671574 +-108.16824874620617 +73.64263867414002 +0 +120 +absolute + + + +0.01 +smooth + +8.536976328680344 +47.35027827378274 +428.7542102310134 +-108.31601427238945 +73.63144533291151 +0 +120 +absolute + + + +0.01 +smooth + +8.536976202086517 +47.35027875362591 +428.75420445880064 +-108.46369592038398 +73.62027820395632 +0 +120 +absolute + + + +0.01 +smooth + +8.53697607341069 +47.350279233088074 +428.7541988203088 +-108.61129267051588 +73.60913758232358 +0 +120 +absolute + + + +0.01 +smooth + +8.536975942710281 +47.35027971216513 +428.7541933157686 +-108.75880350311111 +73.5980237630623 +0 +120 +absolute + + + +0.01 +smooth + +8.53697581004271 +47.35028019085303 +428.7541879454111 +-108.90622739849567 +73.58693704122149 +0 +120 +absolute + + + +0.01 +smooth + +8.53697567546541 +47.350280669147686 +428.7541827094676 +-109.05356333699557 +73.57587771185021 +0 +120 +absolute + + + +0.01 +smooth + +8.536975539035796 +47.35028114704502 +428.754177608169 +-109.2008102989368 +73.56484606999746 +0 +120 +absolute + + + +0.01 +smooth + +8.536975400811292 +47.350281624540955 +428.7541726417463 +-109.34796726464528 +73.5538424107123 +0 +120 +absolute + + + +0.01 +smooth + +8.536975260849323 +47.35028210163141 +428.75416781043066 +-109.49503321444715 +73.54286702904378 +0 +120 +absolute + + + +0.01 +smooth + +8.536975119207309 +47.350282578312324 +428.754163114453 +-109.6420071286684 +73.53192022004092 +0 +120 +absolute + + + +0.01 +smooth + +8.536974975942677 +47.350283054579606 +428.7541585540446 +-109.78888798763494 +73.52100227875276 +0 +120 +absolute + + + +0.01 +smooth + +8.536974831112849 +47.350283530429195 +428.75415412943624 +-109.93567477167284 +73.51011350022831 +0 +120 +absolute + + + +0.01 +smooth + +8.536974684775243 +47.350284005857006 +428.7541498408592 +-110.08236646110807 +73.49925417951665 +0 +120 +absolute + + + +0.01 +smooth + +8.53697453698729 +47.35028448085897 +428.7541456885443 +-110.22896203626661 +73.48842461166679 +0 +120 +absolute + + + +0.01 +smooth + +8.536974387806408 +47.35028495543099 +428.7541416727228 +-110.37546047747455 +73.47762509172776 +0 +120 +absolute + + + +0.01 +smooth + +8.536974237290021 +47.35028542956901 +428.7541377936256 +-110.52186076505777 +73.46685591474862 +0 +120 +absolute + + + +0.01 +smooth + +8.536974085495554 +47.35028590326896 +428.75413405148396 +-110.66816187934236 +73.45611737577838 +0 +120 +absolute + + + +0.01 +smooth + +8.536973932480427 +47.35028637652673 +428.75413044652873 +-110.81436280065431 +73.44540976986607 +0 +120 +absolute + + + +0.01 +smooth + +8.536973778302062 +47.35028684933829 +428.75412697899094 +-110.9604625093196 +73.43473339206076 +0 +120 +absolute + + + +0.01 +smooth + +8.53697362301789 +47.350287321699525 +428.75412364910187 +-111.10645998566423 +73.42408853741148 +0 +120 +absolute + + + +0.01 +smooth + +8.536973466685323 +47.350287793606384 +428.75412045709226 +-111.25235421001418 +73.41347550096724 +0 +120 +absolute + + + +0.01 +smooth + +8.536973309361791 +47.35028826505477 +428.75411740319345 +-111.3981441626955 +73.40289457777709 +0 +120 +absolute + + + +0.01 +smooth + +8.536973151104714 +47.350288736040625 +428.75411448763634 +-111.54382882403418 +73.39234606289006 +0 +120 +absolute + + + +0.01 +smooth + +8.53697299197152 +47.350289206559864 +428.75411171065207 +-111.6894071743562 +73.3818302513552 +0 +120 +absolute + + + +0.01 +smooth + +8.536972832019625 +47.35028967660841 +428.75410907247146 +-111.8348781939876 +73.37134743822153 +0 +120 +absolute + + + +0.01 +smooth + +8.536972671306458 +47.3502901461822 +428.7541065733259 +-111.98024086325434 +73.3608979185381 +0 +120 +absolute + + + +0.01 +smooth + +8.536972509889438 +47.350290615277146 +428.7541042134462 +-112.12549416248245 +73.35048198735393 +0 +120 +absolute + + + +0.01 +smooth + +8.53697234782599 +47.350291083889175 +428.7541019930635 +-112.2706370719979 +73.34009993971807 +0 +120 +absolute + + + +0.01 +smooth + +8.536972185173536 +47.350291552014205 +428.75409991240883 +-112.41566857212672 +73.32975207067955 +0 +120 +absolute + + + +0.01 +smooth + +8.5369720219895 +47.350292019648165 +428.75409797171324 +-112.56058764319489 +73.3194386752874 +0 +120 +absolute + + + +0.01 +smooth + +8.536971858331306 +47.350292486786984 +428.75409617120783 +-112.70539326552844 +73.30916004859066 +0 +120 +absolute + + + +0.01 +smooth + +8.536971694256373 +47.35029295342658 +428.7540945111236 +-112.85008441945334 +73.29891648563836 +0 +120 +absolute + + + +0.01 +smooth + +8.536971529822129 +47.35029341956289 +428.75409299169155 +-112.9946600852956 +73.28870828147956 +0 +120 +absolute + + + +0.01 +smooth + +8.536971365085993 +47.3502938851918 +428.7540916131428 +-113.13911924338123 +73.27853573116326 +0 +120 +absolute + + + +0.01 +smooth + +8.53697120010539 +47.35029435030927 +428.75409037570853 +-113.28346087403618 +73.26839912973853 +0 +120 +absolute + + + +0.01 +smooth + +8.536971034937743 +47.35029481491122 +428.7540892796195 +-113.42768395758654 +73.25829877225436 +0 +120 +absolute + + + +0.01 +smooth + +8.536970869640474 +47.35029527899357 +428.754088325107 +-113.57178747435827 +73.24823495375985 +0 +120 +absolute + + + +0.01 +smooth + +8.536970704271008 +47.35029574255223 +428.7540875124019 +-113.71577040467739 +73.23820796930399 +0 +120 +absolute + + + +0.01 +smooth + +8.536970538886765 +47.35029620558315 +428.7540868417355 +-113.85963172886986 +73.22821811393582 +0 +120 +absolute + + + +0.01 +smooth + +8.536970373545172 +47.35029666808224 +428.75408631333863 +-114.00337042726169 +73.21826568270438 +0 +120 +absolute + + + +0.01 +smooth + +8.536970208303648 +47.35029713004541 +428.75408592744236 +-114.14698548017893 +73.20835097065871 +0 +120 +absolute + + + +0.01 +smooth + +8.536970043219618 +47.3502975914686 +428.75408568427787 +-114.29047586794752 +73.19847427284785 +0 +120 +absolute + + + +0.01 +smooth + +8.53696987835051 +47.35029805234774 +428.75408558407605 +-114.4338405708935 +73.18863588432083 +0 +120 +absolute + + + +0.01 +smooth + +8.536969712849322 +47.35029851274941 +428.7540883800438 +-114.57709412651356 +73.17882966001912 +0 +120 +absolute + + + +0.01 +smooth + +8.536969544893177 +47.350298972815196 +428.75409966281427 +-114.72026768094887 +73.16904262811235 +0 +120 +absolute + + + +0.01 +smooth + +8.536969374455444 +47.35029943254526 +428.75411944351936 +-114.86336133244633 +73.15927471028496 +0 +120 +absolute + + + +0.01 +smooth + +8.53696920156585 +47.350299891935386 +428.75414756014914 +-115.00637420790703 +73.14952623092385 +0 +120 +absolute + + + +0.01 +smooth + +8.53696902625411 +47.350300350981335 +428.75418385069275 +-115.14930543423193 +73.13979751441582 +0 +120 +absolute + + + +0.01 +smooth + +8.536968848549945 +47.35030080967886 +428.7542281531401 +-115.29215413832206 +73.1300888851477 +0 +120 +absolute + + + +0.01 +smooth + +8.53696866848307 +47.35030126802372 +428.7542803054805 +-115.4349194470784 +73.12040066750627 +0 +120 +absolute + + + +0.01 +smooth + +8.536968486083211 +47.35030172601171 +428.75434014570374 +-115.57760048740201 +73.11073318587839 +0 +120 +absolute + + + +0.01 +smooth + +8.53696830138008 +47.350302183638554 +428.7544075117994 +-115.72019638619382 +73.10108676465089 +0 +120 +absolute + + + +0.01 +smooth + +8.536968114403397 +47.35030264090004 +428.754482241757 +-115.86270627035485 +73.09146172821056 +0 +120 +absolute + + + +0.01 +smooth + +8.536967925182884 +47.35030309779191 +428.754564173566 +-116.00512926678607 +73.08185840094423 +0 +120 +absolute + + + +0.01 +smooth + +8.536967733748263 +47.35030355430993 +428.75465314521625 +-116.14746450238853 +73.07227710723873 +0 +120 +absolute + + + +0.01 +smooth + +8.536967540129249 +47.3503040104499 +428.7547489946972 +-116.28971110406324 +73.06271817148088 +0 +120 +absolute + + + +0.01 +smooth + +8.536967344355554 +47.35030446620751 +428.7548515599983 +-116.43186819871113 +73.05318191805748 +0 +120 +absolute + + + +0.01 +smooth + +8.536967146456911 +47.350304921578605 +428.7549606791096 +-116.57393491323329 +73.04366867135542 +0 +120 +absolute + + + +0.01 +smooth + +8.536966946463032 +47.35030537655891 +428.7550761900202 +-116.71591037453065 +73.03417875576145 +0 +120 +absolute + + + +0.01 +smooth + +8.536966744403633 +47.350305831144155 +428.75519793071976 +-116.85779370950421 +73.02471249566241 +0 +120 +absolute + + + +0.01 +smooth + +8.53696654030844 +47.35030628533016 +428.75532573919816 +-116.99958404505503 +73.01527021544516 +0 +120 +absolute + + + +0.01 +smooth + +8.536966334207168 +47.35030673911265 +428.75545945344476 +-117.14128050808404 +73.00585223949648 +0 +120 +absolute + + + +0.01 +smooth + +8.536966126129535 +47.350307192487406 +428.7555989114492 +-117.28288222549232 +72.9964588922032 +0 +120 +absolute + + + +0.01 +smooth + +8.536965916105265 +47.350307645450194 +428.75574395120117 +-117.42438832418084 +72.98709049795215 +0 +120 +absolute + + + +0.01 +smooth + +8.536965704164068 +47.350308097996745 +428.7558944106898 +-117.56579793105053 +72.97774738113013 +0 +120 +absolute + + + +0.01 +smooth + +8.536965490335671 +47.35030855012286 +428.75605012790544 +-117.70711017300253 +72.96842986612401 +0 +120 +absolute + + + +0.01 +smooth + +8.536965274649795 +47.35030900182429 +428.7562109408371 +-117.84832417693774 +72.95913827732058 +0 +120 +absolute + + + +0.01 +smooth + +8.536965057136149 +47.35030945309677 +428.75637668747436 +-117.98943906975715 +72.94987293910661 +0 +120 +absolute + + + +0.01 +smooth + +8.536964837824462 +47.350309903936115 +428.7565472058072 +-118.13045397836181 +72.94063417586905 +0 +120 +absolute + + + +0.01 +smooth + +8.536964616744449 +47.35031035433805 +428.756722333825 +-118.27136802965273 +72.93142231199461 +0 +120 +absolute + + + +0.01 +smooth + +8.536964393925825 +47.350310804298346 +428.7569019095172 +-118.41218035053085 +72.92223767187015 +0 +120 +absolute + + + +0.01 +smooth + +8.536964169398319 +47.35031125381278 +428.7570857708737 +-118.55289006789728 +72.91308057988252 +0 +120 +absolute + + + +0.01 +smooth + +8.53696394319164 +47.35031170287708 +428.7572737558838 +-118.69349630865288 +72.90395136041846 +0 +120 +absolute + + + +0.01 +smooth + +8.536963715335512 +47.35031215148703 +428.75746570253716 +-118.83399819969868 +72.89485033786488 +0 +120 +absolute + + + +0.01 +smooth + +8.536963485859657 +47.35031259963843 +428.75766144882357 +-118.9743948679358 +72.88577783660861 +0 +120 +absolute + + + +0.01 +smooth + +8.536963254793786 +47.350313047326964 +428.7578608327323 +-119.11468544026509 +72.87673418103634 +0 +120 +absolute + + + +0.01 +smooth + +8.536963022167626 +47.35031349454846 +428.75806369225324 +-119.25486904358769 +72.86771969553506 +0 +120 +absolute + + + +0.01 +smooth + +8.53696278801089 +47.35031394129865 +428.7582698653758 +-119.3949448048045 +72.85873470449147 +0 +120 +absolute + + + +0.01 +smooth + +8.5369625523533 +47.350314387573306 +428.7584791900896 +-119.53491185081657 +72.84977953229246 +0 +120 +absolute + + + +0.01 +smooth + +8.536962315224576 +47.3503148333682 +428.7586915043842 +-119.67476930852487 +72.84085450332482 +0 +120 +absolute + + + +0.01 +smooth + +8.536962076654435 +47.35031527867907 +428.75890664624933 +-119.81451630483042 +72.83195994197537 +0 +120 +absolute + + + +0.01 +smooth + +8.536961836672598 +47.350315723501694 +428.75912445367436 +-119.95415196663423 +72.82309617263095 +0 +120 +absolute + + + +0.01 +smooth + +8.536961595308782 +47.35031616783185 +428.75934476464903 +-120.09367542083726 +72.81426351967838 +0 +120 +absolute + + + +0.01 +smooth + +8.536961352592707 +47.35031661166528 +428.7595674171629 +-120.23308579434055 +72.80546230750447 +0 +120 +absolute + + + +0.01 +smooth + +8.536961108554092 +47.350317054997745 +428.7597922492056 +-120.37238221404509 +72.79669286049605 +0 +120 +absolute + + + +0.01 +smooth + +8.536960863222657 +47.35031749782501 +428.7600190987666 +-120.5115638068519 +72.78795550303994 +0 +120 +absolute + + + +0.01 +smooth + +8.536960616628118 +47.350317940142844 +428.76024780383545 +-120.65062969966193 +72.77925055952296 +0 +120 +absolute + + + +0.01 +smooth + +8.536960368800198 +47.35031838194702 +428.760478202402 +-120.78957901937623 +72.77057835433193 +0 +120 +absolute + + + +0.01 +smooth + +8.536960119768615 +47.35031882323327 +428.76071013245564 +-120.92841089289573 +72.7619392118537 +0 +120 +absolute + + + +0.01 +smooth + +8.536959869563086 +47.35031926399739 +428.760943431986 +-121.06712444712153 +72.75333345647503 +0 +120 +absolute + + + +0.01 +smooth + +8.536959618213332 +47.350319704235126 +428.76117793898266 +-121.20571880895459 +72.74476141258282 +0 +120 +absolute + + + +0.01 +smooth + +8.536959365749071 +47.35032014394224 +428.76141349143523 +-121.34419310529589 +72.73622340456382 +0 +120 +absolute + + + +0.01 +smooth + +8.536959112200023 +47.350320583114495 +428.76164992733334 +-121.48254646304645 +72.72771975680489 +0 +120 +absolute + + + +0.01 +smooth + +8.53695885759591 +47.350321021747675 +428.76188708466645 +-121.62077800910727 +72.71925079369285 +0 +120 +absolute + + + +0.01 +smooth + +8.536958601966441 +47.3503214598375 +428.7621248014242 +-121.75888687037934 +72.71081683961452 +0 +120 +absolute + + + +0.01 +smooth + +8.536958345341347 +47.35032189737978 +428.7623629155962 +-121.89687217376368 +72.70241821895672 +0 +120 +absolute + + + +0.01 +smooth + +8.536958087750339 +47.35032233437024 +428.76260126517207 +-122.03473304616128 +72.69405525610628 +0 +120 +absolute + + + +0.01 +smooth + +8.536957829223141 +47.35032277080467 +428.7628396881413 +-122.17246861447313 +72.68572827545 +0 +120 +absolute + + + +0.01 +smooth + +8.536957569789468 +47.35032320667881 +428.7630780224937 +-122.31007800560025 +72.67743760137472 +0 +120 +absolute + + + +0.01 +smooth + +8.536957309479043 +47.350323641988425 +428.76331610621867 +-122.44756034644362 +72.66918355826726 +0 +120 +absolute + + + +0.01 +smooth + +8.53695704832158 +47.35032407672931 +428.7635537773058 +-122.58491476390427 +72.66096647051445 +0 +120 +absolute + + + +0.01 +smooth + +8.536956786346805 +47.35032451089718 +428.76379087374465 +-122.72214038488312 +72.65278666250309 +0 +120 +absolute + + + +0.01 +smooth + +8.536956523584431 +47.350324944487845 +428.76402723352487 +-122.8592363362813 +72.64464445862002 +0 +120 +absolute + + + +0.01 +smooth + +8.53695626006418 +47.35032537749703 +428.7642626946361 +-122.99620174499972 +72.63654018325205 +0 +120 +absolute + + + +0.01 +smooth + +8.53695599581577 +47.35032580992052 +428.76449709506784 +-123.13303573793942 +72.62847416078601 +0 +120 +absolute + + + +0.01 +smooth + +8.536955730868922 +47.350326241754054 +428.7647302728098 +-123.26973744200137 +72.62044671560872 +0 +120 +absolute + + + +0.01 +smooth + +8.53695546525335 +47.35032667299343 +428.7649620658514 +-123.40630598408663 +72.61245817210701 +0 +120 +absolute + + + +0.01 +smooth + +8.536955198998779 +47.350327103634385 +428.7651923121823 +-123.54274049109613 +72.60450885466769 +0 +120 +absolute + + + +0.01 +smooth + +8.536954932134925 +47.35032753367268 +428.7654208497921 +-123.67904008993091 +72.59659908767757 +0 +120 +absolute + + + +0.01 +smooth + +8.536954664691509 +47.35032796310411 +428.7656475166704 +-123.81520390749196 +72.5887291955235 +0 +120 +absolute + + + +0.01 +smooth + +8.536954396698247 +47.35032839192439 +428.7658721508068 +-123.95123107068028 +72.58089950259229 +0 +120 +absolute + + + +0.01 +smooth + +8.536954128184862 +47.35032882012932 +428.7660945901909 +-124.08712070639686 +72.57311033327079 +0 +120 +absolute + + + +0.01 +smooth + +8.536953858881414 +47.350329247758125 +428.7663157530687 +-124.22287982468357 +72.56535769430013 +0 +120 +absolute + + + +0.01 +smooth + +8.536953587581912 +47.350329674985176 +428.7665399632426 +-124.35854002146976 +72.55762418423268 +0 +120 +absolute + + + +0.01 +smooth + +8.536953314174221 +47.35033010182534 +428.7667676409215 +-124.4941040654281 +72.54990826436126 +0 +120 +absolute + + + +0.01 +smooth + +8.536953038679123 +47.35033052827417 +428.76699872899763 +-124.62957122539808 +72.54221031646269 +0 +120 +absolute + + + +0.01 +smooth + +8.536952761117426 +47.350330954327184 +428.7672331703629 +-124.76494077021927 +72.53453072231376 +0 +120 +absolute + + + +0.01 +smooth + +8.536952481509932 +47.35033137997993 +428.7674709079099 +-124.90021196873124 +72.52686986369137 +0 +120 +absolute + + + +0.01 +smooth + +8.536952199877437 +47.350331805227945 +428.7677118845308 +-125.03538408977353 +72.51922812237231 +0 +120 +absolute + + + +0.01 +smooth + +8.536951916240735 +47.35033223006676 +428.76795604311747 +-125.1704564021856 +72.5116058801334 +0 +120 +absolute + + + +0.01 +smooth + +8.536951630620635 +47.35033265449193 +428.7682033265625 +-125.30542817480708 +72.50400351875149 +0 +120 +absolute + + + +0.01 +smooth + +8.536951343037929 +47.350333078499 +428.76845367775803 +-125.44029867647743 +72.49642142000339 +0 +120 +absolute + + + +0.01 +smooth + +8.536951053513413 +47.35033350208346 +428.7687070395961 +-125.57506717603619 +72.48885996566592 +0 +120 +absolute + + + +0.01 +smooth + +8.536950762067896 +47.350333925240896 +428.7689633549692 +-125.70973294232294 +72.48131953751593 +0 +120 +absolute + + + +0.01 +smooth + +8.536950468722168 +47.350334347966836 +428.76922256676926 +-125.84429524417723 +72.47380051733028 +0 +120 +absolute + + + +0.01 +smooth + +8.536950173497031 +47.35033477025679 +428.7694846178886 +-125.9787533504385 +72.46630328688569 +0 +120 +absolute + + + +0.01 +smooth + +8.536949876413283 +47.350335192106336 +428.7697494512195 +-126.1131065299464 +72.4588282279591 +0 +120 +absolute + + + +0.01 +smooth + +8.536949577491727 +47.35033561351099 +428.77001700965417 +-126.24735405154044 +72.4513757223273 +0 +120 +absolute + + + +0.01 +smooth + +8.536949276753157 +47.3503360344663 +428.7702872360848 +-126.38149518406009 +72.44394615176711 +0 +120 +absolute + + + +0.01 +smooth + +8.536948974218376 +47.350336454967795 +428.7705600734036 +-126.5155291963449 +72.43653989805536 +0 +120 +absolute + + + +0.01 +smooth + +8.536948669908176 +47.350336875011 +428.77083546450257 +-126.64945535723444 +72.42915734296885 +0 +120 +absolute + + + +0.01 +smooth + +8.536948363843365 +47.35033729459148 +428.77111335227437 +-126.78327293556829 +72.42179886828447 +0 +120 +absolute + + + +0.01 +smooth + +8.536948056044734 +47.350337713704775 +428.7713936796107 +-126.91698120018594 +72.41446485577899 +0 +120 +absolute + + + +0.01 +smooth + +8.536947746533087 +47.35033813234639 +428.7716763894042 +-127.05057941992688 +72.40715568722928 +0 +120 +absolute + + + +0.01 +smooth + +8.536947435329221 +47.35033855051191 +428.771961424547 +-127.18406686363075 +72.39987174441217 +0 +120 +absolute + + + +0.01 +smooth + +8.536947122453936 +47.35033896819682 +428.772248727931 +-127.31744280013699 +72.39261340910441 +0 +120 +absolute + + + +0.01 +smooth + +8.53694680792803 +47.350339385396694 +428.7725382424488 +-127.45070649828517 +72.38538106308293 +0 +120 +absolute + + + +0.01 +smooth + +8.536946491772305 +47.35033980210708 +428.7728299109926 +-127.58385722691489 +72.37817508812454 +0 +120 +absolute + + + +0.01 +smooth + +8.53694617400755 +47.350340218323474 +428.7731236764543 +-127.71689425486555 +72.370995866006 +0 +120 +absolute + + + +0.01 +smooth + +8.536945854654576 +47.350340634041444 +428.7734194817263 +-127.8498168509768 +72.36384377850419 +0 +120 +absolute + + + +0.01 +smooth + +8.536945533734176 +47.35034104925652 +428.77371726970097 +-127.98262428408815 +72.35671920739595 +0 +120 +absolute + + + +0.01 +smooth + +8.536945211267147 +47.350341463964234 +428.77401698327014 +-128.11531582303908 +72.34962253445806 +0 +120 +absolute + + + +0.01 +smooth + +8.536944887274295 +47.350341878160144 +428.7743185653263 +-128.24789073666918 +72.3425541414674 +0 +120 +absolute + + + +0.01 +smooth + +8.53694456177641 +47.350342291839766 +428.7746219587616 +-128.380348293818 +72.33551441020076 +0 +120 +absolute + + + +0.01 +smooth + +8.536944234794298 +47.350342704998646 +428.7749271064683 +-128.51268776332503 +72.32850372243497 +0 +120 +absolute + + + +0.01 +smooth + +8.536943906348757 +47.350343117632335 +428.7752339513387 +-128.6449084140299 +72.32152245994692 +0 +120 +absolute + + + +0.01 +smooth + +8.536943576460581 +47.35034352973635 +428.77554243626474 +-128.777009514772 +72.31457100451334 +0 +120 +absolute + + + +0.01 +smooth + +8.536943245150574 +47.35034394130623 +428.77585250413887 +-128.908990334391 +72.30764973791112 +0 +120 +absolute + + + +0.01 +smooth + +8.536942912439534 +47.350344352337544 +428.7761640978532 +-129.04085014172637 +72.30075904191708 +0 +120 +absolute + + + +0.01 +smooth + +8.536942578348258 +47.3503447628258 +428.77647716029986 +-129.17258820561767 +72.29389929830803 +0 +120 +absolute + + + +0.01 +smooth + +8.536942242897545 +47.35034517276654 +428.7767916343712 +-129.3042037949044 +72.28707088886081 +0 +120 +absolute + + + +0.01 +smooth + +8.536941906108197 +47.350345582155306 +428.77710746295946 +-129.43569617842613 +72.28027419535226 +0 +120 +absolute + + + +0.01 +smooth + +8.536941568001009 +47.35034599098764 +428.7774245889567 +-129.5670646250224 +72.27350959955919 +0 +120 +absolute + + + +0.01 +smooth + +8.536941228596781 +47.350346399259074 +428.77774295525535 +-129.6983084035327 +72.26677748325845 +0 +120 +absolute + + + +0.01 +smooth + +8.536940887916316 +47.35034680696514 +428.7780625047474 +-129.82942678279662 +72.26007822822685 +0 +120 +absolute + + + +0.01 +smooth + +8.536940545980407 +47.3503472141014 +428.77838318032525 +-129.96041903165371 +72.2534122162412 +0 +120 +absolute + + + +0.01 +smooth + +8.536940202809856 +47.350347620663364 +428.778704924881 +-130.0912844189434 +72.24677982907838 +0 +120 +absolute + + + +0.01 +smooth + +8.53693985842546 +47.350348026646586 +428.77902768130684 +-130.22202221350534 +72.24018144851516 +0 +120 +absolute + + + +0.01 +smooth + +8.536939512848022 +47.3503484320466 +428.7793513924951 +-130.35263168417902 +72.23361745632839 +0 +120 +absolute + + + +0.01 +smooth + +8.536939166098337 +47.35034883685895 +428.779676001338 +-130.48311209980398 +72.22708823429492 +0 +120 +absolute + + + +0.01 +smooth + +8.536938818197207 +47.35034924107916 +428.78000145072747 +-130.61346272921975 +72.22059416419157 +0 +120 +absolute + + + +0.01 +smooth + +8.536938469165428 +47.35034964470279 +428.78032768355604 +-130.74368284126592 +72.21413562779514 +0 +120 +absolute + + + +0.01 +smooth + +8.536938119023798 +47.35035004772535 +428.78065464271594 +-130.87377170478192 +72.2077130068825 +0 +120 +absolute + + + +0.01 +smooth + +8.53693776779312 +47.3503504501424 +428.7809822710991 +-131.0037285886074 +72.20132668323043 +0 +120 +absolute + + + +0.01 +smooth + +8.53693741549419 +47.35035085194947 +428.781310511598 +-131.13355276158183 +72.19497703861579 +0 +120 +absolute + + + +0.01 +smooth + +8.536937062147807 +47.350351253142094 +428.7816393071047 +-131.26324349254475 +72.18866445481541 +0 +120 +absolute + + + +0.01 +smooth + +8.536936707774773 +47.35035165371583 +428.7819686005115 +-131.39280005033572 +72.18238931360611 +0 +120 +absolute + + + +0.01 +smooth + +8.536936352395882 +47.350352053666185 +428.7822983347106 +-131.52222170379426 +72.1761519967647 +0 +120 +absolute + + + +0.01 +smooth + +8.536935996031938 +47.35035245298873 +428.78262845259417 +-131.6515077217599 +72.16995288606805 +0 +120 +absolute + + + +0.01 +smooth + +8.536935638703737 +47.35035285167897 +428.78295889705447 +-131.78065737307216 +72.16379236329296 +0 +120 +absolute + + + +0.01 +smooth + +8.536935280432076 +47.350353249732464 +428.7832896109837 +-131.90966992657064 +72.15767081021625 +0 +120 +absolute + + + +0.01 +smooth + +8.536934921237759 +47.35035364714475 +428.783620537274 +-132.03854465109484 +72.15158860861476 +0 +120 +absolute + + + +0.01 +smooth + +8.53693456114158 +47.350354043911366 +428.7839516188177 +-132.16728081548428 +72.14554614026532 +0 +120 +absolute + + + +0.01 +smooth + +8.53693420016434 +47.35035444002784 +428.78428279850687 +-132.2958776885785 +72.13954378694477 +0 +120 +absolute + + + +0.01 +smooth + +8.53693383832684 +47.35035483548972 +428.7846140192339 +-132.4243345392171 +72.13358193042991 +0 +120 +absolute + + + +0.01 +smooth + +8.536933475649876 +47.35035523029252 +428.784945223891 +-132.55265063623955 +72.12766095249759 +0 +120 +absolute + + + +0.01 +smooth + +8.536933112154248 +47.35035562443183 +428.78527635537023 +-132.68082524848538 +72.12178123492463 +0 +120 +absolute + + + +0.01 +smooth + +8.536932747860755 +47.35035601790313 +428.78560735656396 +-132.80885764479416 +72.11594315948786 +0 +120 +absolute + + + +0.01 +smooth + +8.536932382790196 +47.35035641070199 +428.78593817036415 +-132.9367470940054 +72.1101471079641 +0 +120 +absolute + + + +0.01 +smooth + +8.536932016963366 +47.35035680282395 +428.7862687396633 +-133.06449286495868 +72.10439346213019 +0 +120 +absolute + + + +0.01 +smooth + +8.53693165040107 +47.35035719426454 +428.7865990073535 +-133.19209422649348 +72.09868260376294 +0 +120 +absolute + + + +0.01 +smooth + +8.536931283028517 +47.35035758504073 +428.7869291005193 +-133.31955357964537 +72.09301246268443 +0 +120 +absolute + + + +0.01 +smooth + +8.536930913980836 +47.35035797534651 +428.7872606737308 +-133.446899208609 +72.08736077939734 +0 +120 +absolute + + + +0.01 +smooth + +8.536930543059517 +47.35035836522535 +428.7875941070412 +-133.57413755208356 +72.08172253188987 +0 +120 +absolute + + + +0.01 +smooth + +8.536930170280867 +47.35035875467247 +428.7879293675213 +-133.70126800914142 +72.07609822226813 +0 +120 +absolute + + + +0.01 +smooth + +8.536929795661175 +47.35035914368307 +428.788266422242 +-133.82828997885463 +72.07048835263828 +0 +120 +absolute + + + +0.01 +smooth + +8.536929419216749 +47.350359532252405 +428.78860523827444 +-133.95520286029557 +72.06489342510652 +0 +120 +absolute + + + +0.01 +smooth + +8.536929040963882 +47.3503599203757 +428.78894578268955 +-134.0820060525364 +72.059313941779 +0 +120 +absolute + + + +0.01 +smooth + +8.536928660918871 +47.350360308048124 +428.7892880225582 +-134.2086989546493 +72.05375040476189 +0 +120 +absolute + + + +0.01 +smooth + +8.536928279098023 +47.350360695264925 +428.78963192495155 +-134.3352809657066 +72.04820331616133 +0 +120 +absolute + + + +0.01 +smooth + +8.53692789551763 +47.35036108202132 +428.78997745694045 +-134.46175148478045 +72.04267317808349 +0 +120 +absolute + + + +0.01 +smooth + +8.536927510193992 +47.35036146831253 +428.79032458559595 +-134.5881099109432 +72.03716049263456 +0 +120 +absolute + + + +0.01 +smooth + +8.53692712314341 +47.35036185413375 +428.79067327798896 +-134.71435564326694 +72.03166576192065 +0 +120 +absolute + + + +0.01 +smooth + +8.53692673438218 +47.35036223948021 +428.7910235011903 +-134.84048808082397 +72.02618948804795 +0 +120 +absolute + + + +0.01 +smooth + +8.536926343926602 +47.350362624347134 +428.7913752222711 +-134.96650662268652 +72.02073217312264 +0 +120 +absolute + + + +0.01 +smooth + +8.536925951792975 +47.35036300872974 +428.7917284083024 +-135.09241066792683 +72.01529431925086 +0 +120 +absolute + + + +0.01 +smooth + +8.536925557997597 +47.350363392623215 +428.79208302635493 +-135.21819961561704 +72.00987642853875 +0 +120 +absolute + + + +0.01 +smooth + +8.536925162556768 +47.350363776022824 +428.79243904349994 +-135.3438728648295 +72.00447900309253 +0 +120 +absolute + + + +0.01 +smooth + +8.536924765486788 +47.35036415892375 +428.7927964268084 +-135.46942981463647 +71.99910254501832 +0 +120 +absolute + + + +0.01 +smooth + +8.536924366803952 +47.35036454132122 +428.793155143351 +-135.59486986411005 +71.99374755642228 +0 +120 +absolute + + + +0.01 +smooth + +8.536923966524563 +47.35036492321048 +428.79351516019904 +-135.7201924123226 +71.98841453941064 +0 +120 +absolute + + + +0.01 +smooth + +8.536923564664916 +47.35036530458668 +428.793876444423 +-135.8453968583462 +71.98310399608944 +0 +120 +absolute + + + +0.01 +smooth + +8.53692316124131 +47.3503656854451 +428.79423896309436 +-135.97048260125317 +71.97781642856494 +0 +120 +absolute + + + +0.01 +smooth + +8.53692275627005 +47.35036606578093 +428.79460268328404 +-136.09544904011585 +71.97255233894327 +0 +120 +absolute + + + +0.01 +smooth + +8.536922349767424 +47.35036644558939 +428.7949675720627 +-136.22029557400623 +71.96731222933059 +0 +120 +absolute + + + +0.01 +smooth + +8.536921941749743 +47.350366824865695 +428.7953335965015 +-136.34502160199676 +71.96209660183305 +0 +120 +absolute + + + +0.01 +smooth + +8.536921532233297 +47.350367203605074 +428.79570072367153 +-136.46962652315958 +71.95690595855686 +0 +120 +absolute + + + +0.01 +smooth + +8.536921121234384 +47.35036758180272 +428.79606892064334 +-136.59410973656685 +71.9517408016081 +0 +120 +absolute + + + +0.01 +smooth + +8.53692070876931 +47.35036795945389 +428.7964381544884 +-136.71847064129093 +71.94660163309304 +0 +120 +absolute + + + +0.01 +smooth + +8.536920294854372 +47.35036833655377 +428.7968083922775 +-136.842708636404 +71.94148895511776 +0 +120 +absolute + + + +0.01 +smooth + +8.536919879505861 +47.350368713097566 +428.79717960108144 +-136.9668231209782 +71.93640326978844 +0 +120 +absolute + + + +0.01 +smooth + +8.536919462740089 +47.350369089080544 +428.79755174797145 +-137.09081349408598 +71.93134507921128 +0 +120 +absolute + + + +0.01 +smooth + +8.53691904457334 +47.350369464497874 +428.7979248000183 +-137.21467915479937 +71.92631488549237 +0 +120 +absolute + + + +0.01 +smooth + +8.536918625021924 +47.3503698393448 +428.79829872429303 +-137.33841950219067 +71.92131319073795 +0 +120 +absolute + + + +0.01 +smooth + +8.536918204102138 +47.35037021361654 +428.7986734878667 +-137.4620339353322 +71.91634049705414 +0 +120 +absolute + + + +0.01 +smooth + +8.536917781830274 +47.35037058730828 +428.79904905781 +-137.58552185329603 +71.91139730654707 +0 +120 +absolute + + + +0.01 +smooth + +8.536917358222638 +47.350370960415276 +428.79942540119424 +-137.70888265515447 +71.90648412132296 +0 +120 +absolute + + + +0.01 +smooth + +8.536916933295526 +47.35037133293271 +428.7998024850902 +-137.8321157399798 +71.90160144348798 +0 +120 +absolute + + + +0.01 +smooth + +8.53691650706524 +47.350371704855824 +428.80018027656894 +-137.95522050684414 +71.89674977514822 +0 +120 +absolute + + + +0.01 +smooth + +8.536916079548071 +47.350372076179845 +428.80055874270147 +-138.07819635481985 +71.89192961840992 +0 +120 +absolute + + + +0.01 +smooth + +8.536915650760326 +47.350372446899954 +428.8009378505585 +-138.20104268297905 +71.8871414753792 +0 +120 +absolute + + + +0.01 +smooth + +8.536915220718301 +47.35037281701141 +428.8013175672113 +-138.323758890394 +71.88238584816222 +0 +120 +absolute + + + +0.01 +smooth + +8.536914789438292 +47.350373186509394 +428.80169785973067 +-138.446344376137 +71.87766323886515 +0 +120 +absolute + + + +0.01 +smooth + +8.5369143569366 +47.35037355538915 +428.8020786951877 +-138.5687985392802 +71.87297414959417 +0 +120 +absolute + + + +0.01 +smooth + +8.536913923229527 +47.350373923645876 +428.8024600406533 +-138.69112077889582 +71.86831908245543 +0 +120 +absolute + + + +0.01 +smooth + +8.536913488333367 +47.35037429127479 +428.8028418631983 +-138.81331049405617 +71.86369853955507 +0 +120 +absolute + + + +0.01 +smooth + +8.53691305226442 +47.35037465827113 +428.8032241298939 +-138.93536708383348 +71.85911302299928 +0 +120 +absolute + + + +0.01 +smooth + +8.536912615038988 +47.35037502463009 +428.803606807811 +-139.05728994729992 +71.85456303489424 +0 +120 +absolute + + + +0.01 +smooth + +8.536912176673363 +47.350375390346905 +428.80398986402054 +-139.17907848352775 +71.85004907734606 +0 +120 +absolute + + + +0.01 +smooth + +8.53691173718385 +47.35037575541678 +428.8043732655934 +-139.3007320915892 +71.84557165246093 +0 +120 +absolute + + + +0.01 +smooth + +8.536911296586746 +47.350376119834934 +428.80475697960077 +-139.42225017055648 +71.84113126234502 +0 +120 +absolute + + + +0.01 +smooth + +8.536910854898348 +47.35037648359659 +428.80514097311334 +-139.54363211950186 +71.83672840910447 +0 +120 +absolute + + + +0.01 +smooth + +8.53691041213496 +47.350376846696975 +428.8055252132024 +-139.66487733749756 +71.83236359484546 +0 +120 +absolute + + + +0.01 +smooth + +8.536909968312873 +47.350377209131274 +428.80590966693865 +-139.7859852236158 +71.82803732167415 +0 +120 +absolute + + + +0.01 +smooth + +8.536909523448394 +47.350377570894736 +428.8062943013932 +-139.90695517692882 +71.8237500916967 +0 +120 +absolute + + + +0.01 +smooth + +8.536909077557814 +47.350377931982564 +428.80667908363694 +-140.0277865965088 +71.81950240701926 +0 +120 +absolute + + + +0.01 +smooth + +8.536908630657436 +47.35037829238996 +428.80706398074096 +-140.1484788814281 +71.81529476974802 +0 +120 +absolute + + + +0.01 +smooth + +8.536908182763561 +47.350378652112184 +428.80744895977614 +-140.26903143075876 +71.81112768198912 +0 +120 +absolute + + + +0.01 +smooth + +8.536907733892484 +47.35037901114442 +428.8078339878135 +-140.3894436435732 +71.80700164584871 +0 +120 +absolute + + + +0.01 +smooth + +8.536907284060504 +47.350379369481885 +428.8082190319239 +-140.50971491894356 +71.802917163433 +0 +120 +absolute + + + +0.01 +smooth + +8.536906833283922 +47.350379727119815 +428.8086040591785 +-140.62984465594212 +71.79887473684809 +0 +120 +absolute + + + +0.01 +smooth + +8.536906381579032 +47.35038008405341 +428.8089890366481 +-140.74983225364105 +71.7948748682002 +0 +120 +absolute + + + +0.01 +smooth + +8.53690592896214 +47.3503804402779 +428.8093739314037 +-140.8696771111126 +71.79091805959546 +0 +120 +absolute + + + +0.01 +smooth + +8.53690547544954 +47.35038079578849 +428.80975871051635 +-140.98937862742903 +71.78700481314003 +0 +120 +absolute + + + +0.01 +smooth + +8.536905021057532 +47.35038115058042 +428.8101433410569 +-141.10893620166254 +71.78313563094008 +0 +120 +absolute + + + +0.01 +smooth + +8.536904565802415 +47.35038150464887 +428.81052779009644 +-141.2283492328854 +71.7793110151018 +0 +120 +absolute + + + +0.01 +smooth + +8.536904109700485 +47.35038185798909 +428.8109120247059 +-141.34761712016976 +71.77553146773128 +0 +120 +absolute + + + +0.01 +smooth + +8.536903652768046 +47.35038221059629 +428.81129601195624 +-141.46673926258794 +71.77179749093476 +0 +120 +absolute + + + +0.01 +smooth + +8.536903195021392 +47.350382562465676 +428.81167971891847 +-141.58571505921213 +71.76810958681835 +0 +120 +absolute + + + +0.01 +smooth + +8.536902736476826 +47.350382913592476 +428.81206311266345 +-141.7045439091146 +71.76446825748826 +0 +120 +absolute + + + +0.01 +smooth + +8.536902277132096 +47.350383263977974 +428.8124461864781 +-141.823225908956 +71.76087309505704 +0 +120 +absolute + + + +0.01 +smooth + +8.536901816390802 +47.35038361381733 +428.81282977502946 +-141.94178350515966 +71.7572946514747 +0 +120 +absolute + + + +0.01 +smooth + +8.536901353970055 +47.35038396320244 +428.8132142740633 +-142.06022735846227 +71.75371916535931 +0 +120 +absolute + + + +0.01 +smooth + +8.536900889883414 +47.35038431212803 +428.81359966097415 +-142.1785569801549 +71.75014747061847 +0 +120 +absolute + + + +0.01 +smooth + +8.536900424144443 +47.350384660588865 +428.81398591315707 +-142.29677188152888 +71.7465804011597 +0 +120 +absolute + + + +0.01 +smooth + +8.536899956766707 +47.350385008579664 +428.81437300800684 +-142.41487157387547 +71.74301879089066 +0 +120 +absolute + + + +0.01 +smooth + +8.536899487763772 +47.35038535609527 +428.8147609229186 +-142.5328555684861 +71.73946347371893 +0 +120 +absolute + + + +0.01 +smooth + +8.5368990171492 +47.35038570313039 +428.81514963528707 +-142.6507233766519 +71.73591528355207 +0 +120 +absolute + + + +0.01 +smooth + +8.536898544936552 +47.35038604967979 +428.8155391225074 +-142.76847450966426 +71.73237505429772 +0 +120 +absolute + + + +0.01 +smooth + +8.53689807113939 +47.35038639573824 +428.81592936197427 +-142.88610847881435 +71.72884361986338 +0 +120 +absolute + + + +0.01 +smooth + +8.536897595771288 +47.350386741300504 +428.81632033108275 +-143.0036247953936 +71.72532181415677 +0 +120 +absolute + + + +0.01 +smooth + +8.536897118845802 +47.35038708636134 +428.8167120072276 +-143.12102297069322 +71.72181047108539 +0 +120 +absolute + + + +0.01 +smooth + +8.536896640376495 +47.35038743091549 +428.81710436780395 +-143.2383025160045 +71.71831042455686 +0 +120 +absolute + + + +0.01 +smooth + +8.536896160376934 +47.35038777495776 +428.8174973902066 +-143.35546294261877 +71.71482250847876 +0 +120 +absolute + + + +0.01 +smooth + +8.536895678860683 +47.35038811848287 +428.81789105183054 +-143.47250376182728 +71.71134755675868 +0 +120 +absolute + + + +0.01 +smooth + +8.536895195841302 +47.35038846148561 +428.81828533007064 +-143.58942448492138 +71.70788640330424 +0 +120 +absolute + + + +0.01 +smooth + +8.536894711332359 +47.35038880396071 +428.8186802023218 +-143.7062246231923 +71.70443988202302 +0 +120 +absolute + + + +0.01 +smooth + +8.536894225347414 +47.35038914590296 +428.81907564597884 +-143.82290368793136 +71.70100882682259 +0 +120 +absolute + + + +0.01 +smooth + +8.536893737900032 +47.350389487307105 +428.8194716384369 +-143.93946119042982 +71.69759407161055 +0 +120 +absolute + + + +0.01 +smooth + +8.53689324900378 +47.35038982816792 +428.8198681570909 +-144.05589664197905 +71.69419645029451 +0 +120 +absolute + + + +0.01 +smooth + +8.536892758672218 +47.35039016848015 +428.8202651793355 +-144.17220955387023 +71.69081679678204 +0 +120 +absolute + + + +0.01 +smooth + +8.53689226691891 +47.350390508238576 +428.82066268256585 +-144.28839943739467 +71.68745594498074 +0 +120 +absolute + + + +0.01 +smooth + +8.536891773757425 +47.35039084743795 +428.82106064417684 +-144.40446580384378 +71.6841147287982 +0 +120 +absolute + + + +0.01 +smooth + +8.536891279201315 +47.350391186073004 +428.8214590415632 +-144.5204081645087 +71.68079398214199 +0 +120 +absolute + + + +0.01 +smooth + +8.536890783264155 +47.35039152413856 +428.8218578521202 +-144.6362260306808 +71.67749453891977 +0 +120 +absolute + + + +0.01 +smooth + +8.536890285959505 +47.35039186162933 +428.8222570532425 +-144.75191891365134 +71.67421723303907 +0 +120 +absolute + + + +0.01 +smooth + +8.536889787300927 +47.350392198540085 +428.822656622325 +-144.8674863247116 +71.67096289840748 +0 +120 +absolute + + + +0.01 +smooth + +8.536889287301989 +47.35039253486562 +428.82305653676286 +-144.98292777515297 +71.66773236893263 +0 +120 +absolute + + + +0.01 +smooth + +8.536888785976249 +47.35039287060066 +428.8234567739506 +-145.0982427762666 +71.66452647852206 +0 +120 +absolute + + + +0.01 +smooth + +8.536888283337275 +47.35039320573996 +428.8238573112836 +-145.21343083934389 +71.66134606108342 +0 +120 +absolute + + + +0.01 +smooth + +8.53688777939863 +47.35039354027832 +428.82425812615656 +-145.32849147567603 +71.65819195052426 +0 +120 +absolute + + + +0.01 +smooth + +8.536887274173873 +47.350393874210454 +428.8246591959642 +-145.44342419655436 +71.65506498075216 +0 +120 +absolute + + + +0.01 +smooth + +8.536886767676577 +47.350394207531174 +428.8250604981019 +-145.55822851327025 +71.65196598567479 +0 +120 +absolute + + + +0.01 +smooth + +8.536886259920301 +47.350394540235214 +428.8254620099642 +-145.67290393711485 +71.64889579919965 +0 +120 +absolute + + + +0.01 +smooth + +8.536885750918604 +47.35039487231731 +428.82586370894603 +-145.78744997937952 +71.64585525523435 +0 +120 +absolute + + + +0.01 +smooth + +8.536885240685057 +47.350395203772266 +428.82626557244265 +-145.9018661513556 +71.64284518768653 +0 +120 +absolute + + + +0.01 +smooth + +8.536884729233222 +47.350395534594846 +428.8266675778486 +-146.01615196433426 +71.63986643046375 +0 +120 +absolute + + + +0.01 +smooth + +8.53688421657666 +47.35039586477977 +428.82706970255896 +-146.13030692960686 +71.6369198174736 +0 +120 +absolute + + + +0.01 +smooth + +8.536883702728936 +47.35039619432183 +428.8274719239687 +-146.2443305584647 +71.63400618262366 +0 +120 +absolute + + + +0.01 +smooth + +8.536883187703616 +47.35039652321578 +428.8278742194726 +-146.35822236219903 +71.63112635982154 +0 +120 +absolute + + + +0.01 +smooth + +8.53688267151426 +47.350396851456374 +428.8282765664658 +-146.4719818521012 +71.62828118297483 +0 +120 +absolute + + + +0.01 +smooth + +8.536882154174435 +47.35039717903839 +428.82867894234306 +-146.5856085394624 +71.62547148599113 +0 +120 +absolute + + + +0.01 +smooth + +8.536881635697704 +47.35039750595658 +428.82908132449927 +-146.69910193557408 +71.622698102778 +0 +120 +absolute + + + +0.01 +smooth + +8.536881116097627 +47.350397832205715 +428.8294836903294 +-146.81246155172738 +71.61996186724305 +0 +120 +absolute + + + +0.01 +smooth + +8.536880595387773 +47.35039815778053 +428.8298860172283 +-146.92568689921364 +71.61726361329389 +0 +120 +absolute + + + +0.01 +smooth + +8.536880073581703 +47.350398482675814 +428.8302882825911 +-147.0387774893242 +71.61460417483808 +0 +120 +absolute + + + +0.01 +smooth + +8.536879550692982 +47.35039880688631 +428.8306904638126 +-147.1517328333503 +71.61198438578322 +0 +120 +absolute + + + +0.01 +smooth + +8.536879026735171 +47.3503991304068 +428.83109253828763 +-147.26455244258318 +71.60940508003691 +0 +120 +absolute + + + +0.01 +smooth + +8.536878501721839 +47.350399453232015 +428.8314944834111 +-147.3772358283142 +71.60686709150676 +0 +120 +absolute + + + +0.01 +smooth + +8.536877975666545 +47.35039977535675 +428.83189627657816 +-147.4897825018347 +71.60437125410031 +0 +120 +absolute + + + +0.01 +smooth + +8.536877448582855 +47.35040009677574 +428.8322978951835 +-147.60219197443584 +71.60191840172519 +0 +120 +absolute + + + +0.01 +smooth + +8.536876920484332 +47.35040041748376 +428.83269931662215 +-147.71446375740902 +71.59950936828898 +0 +120 +absolute + + + +0.01 +smooth + +8.536876391384537 +47.350400737475574 +428.83310051828903 +-147.82659736204545 +71.59714498769928 +0 +120 +absolute + + + +0.01 +smooth + +8.53687586129704 +47.35040105674593 +428.83350147757903 +-147.9385922996365 +71.59482609386367 +0 +120 +absolute + + + +0.01 +smooth + +8.536875330235398 +47.35040137528959 +428.8339021718871 +-148.0504480814734 +71.59255352068975 +0 +120 +absolute + + + +0.01 +smooth + +8.536874798213182 +47.35040169310134 +428.8343025786081 +-148.1621642188474 +71.5903281020851 +0 +120 +absolute + + + +0.01 +smooth + +8.536874265243949 +47.35040201017592 +428.8347026751369 +-148.2737402230499 +71.58815067195732 +0 +120 +absolute + + + +0.01 +smooth + +8.536873731341267 +47.35040232650809 +428.8351024388685 +-148.38517560537213 +71.586022064214 +0 +120 +absolute + + + +0.01 +smooth + +8.536873196518695 +47.35040264209262 +428.835501847198 +-148.4964698771054 +71.58394311276274 +0 +120 +absolute + + + +0.01 +smooth + +8.536872660789804 +47.35040295692426 +428.83590087752003 +-148.60762254954096 +71.58191465151111 +0 +120 +absolute + + + +0.01 +smooth + +8.536872124168152 +47.35040327099779 +428.8362995072297 +-148.71863313397014 +71.57993751436673 +0 +120 +absolute + + + +0.01 +smooth + +8.536871586667303 +47.35040358430795 +428.8366977137218 +-148.82950114168426 +71.57801253523718 +0 +120 +absolute + + + +0.01 +smooth + +8.536871048300824 +47.35040389684953 +428.8370954743913 +-148.94022608397452 +71.57614054803003 +0 +120 +absolute + + + +0.01 +smooth + +8.536870509082275 +47.350404208617256 +428.83749276663315 +-149.05080747213228 +71.5743223866529 +0 +120 +absolute + + + +0.01 +smooth + +8.536869969025226 +47.35040451960592 +428.8378895678422 +-149.1612448174488 +71.57255888501336 +0 +120 +absolute + + + +0.01 +smooth + +8.536869428143234 +47.35040482981025 +428.8382858554135 +-149.27153763121538 +71.57085087701903 +0 +120 +absolute + + + +0.01 +smooth + +8.536868886449865 +47.35040513922503 +428.8386816067418 +-149.38168542472332 +71.56919919657747 +0 +120 +absolute + + + +0.01 +smooth + +8.536868343958682 +47.35040544784505 +428.83907679922214 +-149.4916877092639 +71.56760467759628 +0 +120 +absolute + + + +0.01 +smooth + +8.536867800683249 +47.350405755665015 +428.83947141024936 +-149.60154399612833 +71.56606815398305 +0 +120 +absolute + + + +0.01 +smooth + +8.536867256637132 +47.35040606267972 +428.8398654172185 +-149.71125379660805 +71.5645904596454 +0 +120 +absolute + + + +0.01 +smooth + +8.536866711457716 +47.35040636905849 +428.84025925776723 +-149.82083223537163 +71.56314231854404 +0 +120 +absolute + + + +0.01 +smooth + +8.536866164781157 +47.35040667497024 +428.84065337317776 +-149.93029449647725 +71.5616943112231 +0 +120 +absolute + + + +0.01 +smooth + +8.536865616619185 +47.35040698040909 +428.84104774631163 +-150.03964018030075 +71.56024705646539 +0 +120 +absolute + + + +0.01 +smooth + +8.536865066983522 +47.350407285369165 +428.8414423600302 +-150.14886888721784 +71.55880117305362 +0 +120 +absolute + + + +0.01 +smooth + +8.536864515885892 +47.35040758984458 +428.841837197195 +-150.2579802176042 +71.5573572797705 +0 +120 +absolute + + + +0.01 +smooth + +8.536863963338016 +47.35040789382944 +428.84223224066756 +-150.36697377183557 +71.55591599539879 +0 +120 +absolute + + + +0.01 +smooth + +8.536863409351625 +47.350408197317876 +428.84262747330934 +-150.47584915028776 +71.55447793872126 +0 +120 +absolute + + + +0.01 +smooth + +8.536862853938441 +47.350408500304034 +428.84302287798204 +-150.58460595333645 +71.5530437285206 +0 +120 +absolute + + + +0.01 +smooth + +8.536862297110186 +47.35040880278198 +428.8434184375465 +-150.69324378135732 +71.55161398357959 +0 +120 +absolute + + + +0.01 +smooth + +8.53686173887859 +47.35040910474588 +428.84381413486506 +-150.80176223472628 +71.55018932268092 +0 +120 +absolute + + + +0.01 +smooth + +8.536861179255371 +47.35040940618983 +428.8442099527986 +-150.91016091381888 +71.54877036460739 +0 +120 +absolute + + + +0.01 +smooth + +8.536860618252256 +47.350409707107964 +428.8446058742088 +-151.01843941901095 +71.54735772814168 +0 +120 +absolute + + + +0.01 +smooth + +8.536860055880974 +47.3504100074944 +428.84500188195744 +-151.1265973506782 +71.54595203206661 +0 +120 +absolute + + + +0.01 +smooth + +8.53685949215324 +47.35041030734324 +428.84539795890544 +-151.2346343091963 +71.54455389516484 +0 +120 +absolute + + + +0.01 +smooth + +8.536858927080786 +47.350410606648616 +428.84579408791467 +-151.3425498949412 +71.54316393621912 +0 +120 +absolute + + + +0.01 +smooth + +8.536858360675337 +47.350410905404665 +428.8461902518465 +-151.45034370828841 +71.54178277401223 +0 +120 +absolute + + + +0.01 +smooth + +8.536857792948611 +47.35041120360546 +428.8465864335624 +-151.55801534961375 +71.54041102732688 +0 +120 +absolute + + + +0.01 +smooth + +8.536857223912337 +47.35041150124518 +428.84698261592393 +-151.665564419293 +71.53904931494581 +0 +120 +absolute + + + +0.01 +smooth + +8.536856653578239 +47.35041179831791 +428.84737878179266 +-151.7729905177018 +71.53769825565179 +0 +120 +absolute + + + +0.01 +smooth + +8.536856081958039 +47.35041209481774 +428.84777491402974 +-151.8802932452159 +71.5363584682275 +0 +120 +absolute + + + +0.01 +smooth + +8.536855509063466 +47.35041239073887 +428.8481709954971 +-151.98747220221117 +71.53503057145576 +0 +120 +absolute + + + +0.01 +smooth + +8.536854934906241 +47.350412686075344 +428.8485670090559 +-152.09452698906318 +71.53371518411923 +0 +120 +absolute + + + +0.01 +smooth + +8.536854359498088 +47.350412980821325 +428.84896293756765 +-152.20145720614772 +71.53241292500068 +0 +120 +absolute + + + +0.01 +smooth + +8.536853782850738 +47.35041327497093 +428.8493587638942 +-152.30826245384063 +71.5311244128829 +0 +120 +absolute + + + +0.01 +smooth + +8.536853204975904 +47.35041356851824 +428.84975447089647 +-152.4149423325174 +71.52985026654854 +0 +120 +absolute + + + +0.01 +smooth + +8.53685262588532 +47.35041386145741 +428.8501500414364 +-152.521496442554 +71.52859110478036 +0 +120 +absolute + + + +0.01 +smooth + +8.536852045590706 +47.35041415378258 +428.8505454583754 +-152.62792438432606 +71.5273475463612 +0 +120 +absolute + + + +0.01 +smooth + +8.536851464103787 +47.35041444548781 +428.8509407045746 +-152.73422575820933 +71.52612021007366 +0 +120 +absolute + + + +0.01 +smooth + +8.53685088143629 +47.35041473656727 +428.85133576289604 +-152.8404001645796 +71.52490971470057 +0 +120 +absolute + + + +0.01 +smooth + +8.536850297599939 +47.35041502701506 +428.8517306162008 +-152.9464472038125 +71.5237166790246 +0 +120 +absolute + + + +0.01 +smooth + +8.53684971260645 +47.35041531682529 +428.8521252473505 +-153.05236647628382 +71.52254172182857 +0 +120 +absolute + + + +0.01 +smooth + +8.536849126467562 +47.350415605992104 +428.85251963920666 +-153.15815758236934 +71.52138546189518 +0 +120 +absolute + + + +0.01 +smooth + +8.536848539194988 +47.35041589450961 +428.85291377463074 +-153.26382012244477 +71.52024851800715 +0 +120 +absolute + + + +0.01 +smooth + +8.536847950800457 +47.350416182371916 +428.8533076364842 +-153.36935369688578 +71.51913150894724 +0 +120 +absolute + + + +0.01 +smooth + +8.536847361295694 +47.35041646957316 +428.85370120762866 +-153.4747579060682 +71.5180350534982 +0 +120 +absolute + + + +0.01 +smooth + +8.536846770692422 +47.35041675610746 +428.8540944709254 +-153.58003235036767 +71.51695977044274 +0 +120 +absolute + + + +0.01 +smooth + +8.536846179002364 +47.35041704196891 +428.85448740923607 +-153.68517663016 +71.51590627856363 +0 +120 +absolute + + + +0.01 +smooth + +8.536845586237249 +47.350417327151675 +428.85488000542205 +-153.7901903458209 +71.51487519664359 +0 +120 +absolute + + + +0.01 +smooth + +8.536844992408797 +47.35041761164983 +428.8552722423449 +-153.8950730977261 +71.51386714346536 +0 +120 +absolute + + + +0.01 +smooth + +8.536844397528734 +47.350417895457525 +428.85566410286606 +-153.99982448625133 +71.5128827378117 +0 +120 +absolute + + + +0.01 +smooth + +8.536843801608784 +47.35041817856887 +428.85605556984706 +-154.10444411177235 +71.51192259846532 +0 +120 +absolute + + + +0.01 +smooth + +8.536843204660673 +47.35041846097798 +428.8564466261493 +-154.20893157466486 +71.51098734420898 +0 +120 +absolute + + + +0.01 +smooth + +8.536842606696123 +47.350418742678976 +428.85683725463446 +-154.31328647530464 +71.51007759382541 +0 +120 +absolute + + + +0.01 +smooth + +8.536842007726861 +47.350419023665985 +428.8572274381639 +-154.4175084140674 +71.50919396609736 +0 +120 +absolute + + + +0.01 +smooth + +8.536841407764609 +47.350419303933116 +428.85761715959904 +-154.52159699132892 +71.50833707980756 +0 +120 +absolute + + + +0.01 +smooth + +8.536840806821095 +47.35041958347449 +428.85800640180145 +-154.62555180746483 +71.50750755373875 +0 +120 +absolute + + + +0.01 +smooth + +8.536840204908042 +47.35041986228424 +428.85839514763256 +-154.72937246285096 +71.50670600667365 +0 +120 +absolute + + + +0.01 +smooth + +8.536839602037169 +47.350420140356476 +428.85878337995405 +-154.83305855786298 +71.50593305739505 +0 +120 +absolute + + + +0.01 +smooth + +8.536838998220208 +47.35042041768532 +428.8591710816272 +-154.9366096928767 +71.50518932468566 +0 +120 +absolute + + + +0.01 +smooth + +8.536838393468882 +47.35042069426489 +428.85955823551365 +-155.0400254682678 +71.5044754273282 +0 +120 +absolute + + + +0.01 +smooth + +8.536837787794912 +47.35042097008932 +428.85994482447467 +-155.14330548441205 +71.50379198410545 +0 +120 +absolute + + + +0.01 +smooth + +8.536837181210025 +47.35042124515269 +428.8603308313719 +-155.2464493416851 +71.50313961380012 +0 +120 +absolute + + + +0.01 +smooth + +8.536836573725946 +47.35042151944916 +428.8607162390669 +-155.3494566404628 +71.50251893519494 +0 +120 +absolute + + + +0.01 +smooth + +8.536835965354397 +47.350421792972824 +428.86110103042097 +-155.4523269811208 +71.50193056707269 +0 +120 +absolute + + + +0.01 +smooth + +8.536835356107105 +47.35042206571782 +428.86148518829566 +-155.5550599640349 +71.50137512821607 +0 +120 +absolute + + + +0.01 +smooth + +8.536834745995794 +47.35042233767827 +428.86186869555263 +-155.65765518958082 +71.50085323740785 +0 +120 +absolute + + + +0.01 +smooth + +8.536834135032185 +47.35042260884828 +428.86225153505325 +-155.76011225813426 +71.50036551343075 +0 +120 +absolute + + + +0.01 +smooth + +8.536833523228006 +47.350422879221966 +428.8626336896588 +-155.862430770071 +71.49991257506751 +0 +120 +absolute + + + +0.01 +smooth + +8.536832910594981 +47.35042314879347 +428.8630151422311 +-155.96461032576673 +71.49949504110089 +0 +120 +absolute + + + +0.01 +smooth + +8.536832297144835 +47.35042341755688 +428.86339587563145 +-156.06665052559723 +71.4991135303136 +0 +120 +absolute + + + +0.01 +smooth + +8.536831682889291 +47.35042368550634 +428.8637758727214 +-156.1685509699382 +71.4987686614884 +0 +120 +absolute + + + +0.01 +smooth + +8.536831067840073 +47.35042395263598 +428.8641551163624 +-156.27031125916537 +71.49846105340802 +0 +120 +absolute + + + +0.01 +smooth + +8.536830452008909 +47.35042421893988 +428.86453358941594 +-156.37193099365453 +71.4981913248552 +0 +120 +absolute + + + +0.01 +smooth + +8.536829835407518 +47.3504244844122 +428.86491127474363 +-156.47340977378136 +71.49796009461268 +0 +120 +absolute + + + +0.01 +smooth + +8.536829218047629 +47.35042474904703 +428.86528815520677 +-156.57474719992163 +71.49776798146321 +0 +120 +absolute + + + +0.01 +smooth + +8.536828599940966 +47.35042501283851 +428.86566421366695 +-156.67594287245103 +71.4976156041895 +0 +120 +absolute + + + +0.01 +smooth + +8.53682798109925 +47.35042527578075 +428.8660394329857 +-156.77699639174529 +71.49750358157434 +0 +120 +absolute + + + +0.01 +smooth + +8.53682736153421 +47.350425537867864 +428.8664137960244 +-156.87790735818024 +71.49743253240041 +0 +120 +absolute + + + +0.01 +smooth + +8.536826741257567 +47.35042579909399 +428.8667872856445 +-156.97867537213162 +71.4974030754505 +0 +120 +absolute + + + +0.01 +smooth + +8.536826120080026 +47.35042605958487 +428.86716012816925 +-157.079309105005 +71.49741298338817 +0 +120 +absolute + + + +0.01 +smooth + +8.53682549759801 +47.35042631960564 +428.8675328103066 +-157.17982689994236 +71.49745641058229 +0 +120 +absolute + + + +0.01 +smooth + +8.536824873809376 +47.35042657915773 +428.86790533327456 +-157.28022898637255 +71.49753270472748 +0 +120 +absolute + + + +0.01 +smooth + +8.536824248724546 +47.35042683823436 +428.86827768309615 +-157.3805150272025 +71.49764138406388 +0 +120 +absolute + + + +0.01 +smooth + +8.536823622353937 +47.350427096828724 +428.86864984579415 +-157.4806846853386 +71.49778196683161 +0 +120 +absolute + + + +0.01 +smooth + +8.536822994707963 +47.35042735493401 +428.8690218073911 +-157.58073762368753 +71.49795397127073 +0 +120 +absolute + + + +0.01 +smooth + +8.536822365797049 +47.35042761254346 +428.8693935539102 +-157.6806735051559 +71.4981569156214 +0 +120 +absolute + + + +0.01 +smooth + +8.53682173563161 +47.350427869650275 +428.8697650713742 +-157.78049199265044 +71.49839031812375 +0 +120 +absolute + + + +0.01 +smooth + +8.536821104222058 +47.35042812624763 +428.8701363458055 +-157.88019274907757 +71.49865369701784 +0 +120 +absolute + + + +0.01 +smooth + +8.536820471578823 +47.35042838232876 +428.8705073632275 +-157.97977543734396 +71.49894657054381 +0 +120 +absolute + + + +0.01 +smooth + +8.536819837712315 +47.35042863788685 +428.87087810966267 +-158.07923972035636 +71.49926845694178 +0 +120 +absolute + + + +0.01 +smooth + +8.536819202632953 +47.350428892915126 +428.87124857113395 +-158.1785852610211 +71.49961887445183 +0 +120 +absolute + + + +0.01 +smooth + +8.536818566351155 +47.35042914740677 +428.87161873366404 +-158.27781172224513 +71.49999734131411 +0 +120 +absolute + + + +0.01 +smooth + +8.536817928877335 +47.35042940135499 +428.8719885832758 +-158.37691876693484 +71.5004033757687 +0 +120 +absolute + + + +0.01 +smooth + +8.536817290221922 +47.35042965475302 +428.87235810599213 +-158.47590605799695 +71.50083649605574 +0 +120 +absolute + + + +0.01 +smooth + +8.536816650395325 +47.35042990759405 +428.87272728783586 +-158.574773258338 +71.50129622041534 +0 +120 +absolute + + + +0.01 +smooth + +8.536816009407962 +47.35043015987126 +428.8730961148295 +-158.67352003086464 +71.50178206708758 +0 +120 +absolute + + + +0.01 +smooth + +8.536815367270256 +47.3504304115779 +428.87346457299634 +-158.77214603848347 +71.50229355431262 +0 +120 +absolute + + + +0.01 +smooth + +8.53681472399262 +47.35043066270714 +428.87383264835887 +-158.87065094410113 +71.50283020033055 +0 +120 +absolute + + + +0.01 +smooth + +8.536814079585476 +47.35043091325219 +428.87420032694 +-158.96903441062418 +71.50339152338147 +0 +120 +absolute + + + +0.01 +smooth + +8.53681343405924 +47.35043116320628 +428.87456759476277 +-159.06729610095937 +71.50397704170554 +0 +120 +absolute + + + +0.01 +smooth + +8.53681278742433 +47.3504314125626 +428.8749344378494 +-159.1654356780131 +71.50458627354278 +0 +120 +absolute + + + +0.01 +smooth + +8.536812139691163 +47.35043166131434 +428.87530084222334 +-159.26345280469215 +71.50521873713339 +0 +120 +absolute + + + +0.01 +smooth + +8.53681149087016 +47.35043190945474 +428.8756667939071 +-159.3613471439031 +71.50587395071747 +0 +120 +absolute + + + +0.01 +smooth + +8.536810840971732 +47.35043215697695 +428.8760322789234 +-159.45911835855236 +71.50655143253508 +0 +120 +absolute + + + +0.01 +smooth + +8.536810190006308 +47.35043240387424 +428.8763972832954 +-159.55676611154692 +71.50725070082642 +0 +120 +absolute + + + +0.01 +smooth + +8.536809537984297 +47.35043265013978 +428.87676179304566 +-159.65429006579313 +71.5079712738315 +0 +120 +absolute + + + +0.01 +smooth + +8.53680888491612 +47.35043289576678 +428.87712579419696 +-159.7516898841977 +71.5087126697905 +0 +120 +absolute + + + +0.01 +smooth + +8.536808230812198 +47.35043314074846 +428.8774892727724 +-159.84896522966727 +71.50947440694354 +0 +120 +absolute + + + +0.01 +smooth + +8.536807575682941 +47.350433385077984 +428.8778522147944 +-159.94611576510832 +71.51025600353067 +0 +120 +absolute + + + +0.01 +smooth + +8.536806919538773 +47.35043362874859 +428.87821460628606 +-160.0431411534275 +71.51105697779205 +0 +120 +absolute + + + +0.01 +smooth + +8.536806262390115 +47.35043387175351 +428.87857643327027 +-160.1400410575316 +71.51187684796783 +0 +120 +absolute + + + +0.01 +smooth + +8.536805604247377 +47.35043411408589 +428.8789376817695 +-160.236815140327 +71.51271513229803 +0 +120 +absolute + + + +0.01 +smooth + +8.53680494512098 +47.35043435573899 +428.8792983378069 +-160.33346306472043 +71.51357134902283 +0 +120 +absolute + + + +0.01 +smooth + +8.536804285021345 +47.35043459670596 +428.879658387405 +-160.42998449361852 +71.51444501638233 +0 +120 +absolute + + + +0.01 +smooth + +8.536803623958885 +47.35043483698005 +428.880017816587 +-160.52637908992784 +71.5153356526166 +0 +120 +absolute + + + +0.01 +smooth + +8.536802961944023 +47.35043507655445 +428.88037661137537 +-160.62264651655502 +71.51624277596581 +0 +120 +absolute + + + +0.01 +smooth + +8.536802298987176 +47.35043531542236 +428.8807347577931 +-160.71878643640665 +71.51716590467007 +0 +120 +absolute + + + +0.01 +smooth + +8.536801635098758 +47.350435553577 +428.8810922418628 +-160.81479851238936 +71.51810455696945 +0 +120 +absolute + + + +0.01 +smooth + +8.536800970289189 +47.35043579101156 +428.88144904960757 +-160.91068240740975 +71.51905825110407 +0 +120 +absolute + + + +0.01 +smooth + +8.536800304568889 +47.350436027719255 +428.8818051670501 +-161.0064377843745 +71.52002650531409 +0 +120 +absolute + + + +0.01 +smooth + +8.536799637948274 +47.35043626369329 +428.88216058021317 +-161.10206430619013 +71.52100883783957 +0 +120 +absolute + + + +0.01 +smooth + +8.536798970437765 +47.35043649892686 +428.88251527511966 +-161.19756163576332 +71.52200476692066 +0 +120 +absolute + + + +0.01 +smooth + +8.536798302047774 +47.35043673341319 +428.8828692377923 +-161.29292943600066 +71.52301381079747 +0 +120 +absolute + + + +0.01 +smooth + +8.536797632788723 +47.35043696714547 +428.88322245425405 +-161.38816736980874 +71.52403548771007 +0 +120 +absolute + + + +0.01 +smooth + +8.536796962671032 +47.3504372001169 +428.8835749105276 +-161.48327510009426 +71.5250693158986 +0 +120 +absolute + + + +0.01 +smooth + +8.536796291705114 +47.35043743232071 +428.8839265926358 +-161.5782522897637 +71.52611481360319 +0 +120 +absolute + + + +0.01 +smooth + +8.53679561990139 +47.35043766375008 +428.88427748660155 +-161.67309860172378 +71.52717149906394 +0 +120 +absolute + + + +0.01 +smooth + +8.536794947270277 +47.350437894398226 +428.8846275784475 +-161.76781369888107 +71.52823889052095 +0 +120 +absolute + + + +0.01 +smooth + +8.536794273822194 +47.35043812425836 +428.88497685419657 +-161.8623972441422 +71.52931650621434 +0 +120 +absolute + + + +0.01 +smooth + +8.536793599567558 +47.35043835332368 +428.8853252998716 +-161.95684890041372 +71.53040386438424 +0 +120 +absolute + + + +0.01 +smooth + +8.536792924516787 +47.35043858158738 +428.88567290149535 +-162.05116833060237 +71.53150048327075 +0 +120 +absolute + + + +0.01 +smooth + +8.5367922486803 +47.35043880904269 +428.88601964509076 +-162.14535519761463 +71.53260588111395 +0 +120 +absolute + + + +0.01 +smooth + +8.536791572068513 +47.3504390356828 +428.8863655166804 +-162.2394091643572 +71.53371957615401 +0 +120 +absolute + + + +0.01 +smooth + +8.536790894691848 +47.35043926150091 +428.8867105022873 +-162.33332989373667 +71.53484108663102 +0 +120 +absolute + + + +0.01 +smooth + +8.536790216560718 +47.35043948649024 +428.88705458793424 +-162.42711704865968 +71.53596993078507 +0 +120 +absolute + + + +0.01 +smooth + +8.536789537685541 +47.350439710644 +428.88739775964405 +-162.52077029203278 +71.5371056268563 +0 +120 +absolute + + + +0.01 +smooth + +8.53678885807674 +47.35043993395537 +428.8877400034394 +-162.61428928676264 +71.53824769308481 +0 +120 +absolute + + + +0.01 +smooth + +8.536788177744729 +47.35044015641758 +428.8880813053433 +-162.70767369575586 +71.53939564771072 +0 +120 +absolute + + + +0.01 +smooth + +8.536787496699926 +47.35044037802382 +428.8884216513784 +-162.80092318191902 +71.54054900897414 +0 +120 +absolute + + + +0.01 +smooth + +8.536786814952752 +47.35044059876729 +428.8887610275676 +-162.8940374081588 +71.54170729511517 +0 +120 +absolute + + + +0.01 +smooth + +8.536786132513623 +47.350440818641225 +428.88909941993387 +-162.9870160373817 +71.54287002437395 +0 +120 +absolute + + + +0.01 +smooth + +8.536785449392955 +47.35044103763881 +428.88943681449973 +-163.07985873249447 +71.54403671499058 +0 +120 +absolute + + + +0.01 +smooth + +8.536784765601169 +47.350441255753246 +428.88977319728815 +-163.17256515640366 +71.54520688520516 +0 +120 +absolute + + + +0.01 +smooth + +8.536784081148681 +47.35044147297774 +428.89010855432196 +-163.26513497201586 +71.54638005325782 +0 +120 +absolute + + + +0.01 +smooth + +8.536783396045912 +47.35044168930551 +428.89044287162403 +-163.35756784223767 +71.54755573738866 +0 +120 +absolute + + + +0.01 +smooth + +8.536782710303276 +47.35044190472975 +428.8907761352169 +-163.44986342997575 +71.5487334558378 +0 +120 +absolute + + + +0.01 +smooth + +8.536782023931195 +47.350442119243674 +428.8911083311238 +-163.54202139813677 +71.54991272684535 +0 +120 +absolute + + + +0.01 +smooth + +8.53678133694008 +47.35044233284047 +428.89143944536715 +-163.63404140962723 +71.55109306865144 +0 +120 +absolute + + + +0.01 +smooth + +8.536780649243635 +47.3504425456032 +428.8917695921775 +-163.7259278902049 +71.55228368349073 +0 +120 +absolute + + + +0.01 +smooth + +8.536779960454195 +47.350442757893745 +428.89209928543255 +-163.81770009819977 +71.55352375723632 +0 +120 +absolute + + + +0.01 +smooth + +8.536779270538272 +47.3504429697439 +428.8924285699177 +-163.9093598471343 +71.5548167828392 +0 +120 +absolute + + + +0.01 +smooth + +8.536778579505336 +47.35044318114552 +428.89275743348657 +-164.00090683463426 +71.5561619402313 +0 +120 +absolute + + + +0.01 +smooth + +8.536777887364847 +47.35044339209041 +428.89308586399153 +-164.09234075832512 +71.55755840934448 +0 +120 +absolute + + + +0.01 +smooth + +8.536777194126277 +47.350443602570415 +428.89341384928616 +-164.18366131583255 +71.55900537011061 +0 +120 +absolute + + + +0.01 +smooth + +8.536776499799094 +47.350443812577375 +428.89374137722365 +-164.27486820478236 +71.56050200246163 +0 +120 +absolute + + + +0.01 +smooth + +8.53677580439276 +47.350444022103105 +428.8940684356569 +-164.36596112279992 +71.56204748632936 +0 +120 +absolute + + + +0.01 +smooth + +8.536775107916753 +47.350444231139456 +428.89439501243913 +-164.45693976751107 +71.56364100164573 +0 +120 +absolute + + + +0.01 +smooth + +8.53677441038053 +47.35044443967823 +428.89472109542334 +-164.5478038365413 +71.56528172834258 +0 +120 +absolute + + + +0.01 +smooth + +8.536773711793565 +47.35044464771129 +428.89504667246297 +-164.63855302751634 +71.56696884635186 +0 +120 +absolute + + + +0.01 +smooth + +8.53677301216532 +47.35044485523044 +428.8953717314107 +-164.72918703806175 +71.56870153560538 +0 +120 +absolute + + + +0.01 +smooth + +8.536772311505267 +47.35044506222753 +428.89569626011996 +-164.81970556580322 +71.5704789760351 +0 +120 +absolute + + + +0.01 +smooth + +8.536771609822873 +47.350445268694415 +428.8960202464439 +-164.91010830836635 +71.57230034757285 +0 +120 +absolute + + + +0.01 +smooth + +8.536770907127604 +47.350445474622866 +428.8963436782355 +-165.0003949633768 +71.57416483015054 +0 +120 +absolute + + + +0.01 +smooth + +8.536770203428924 +47.35044568000476 +428.8966665433478 +-165.0905652284602 +71.57607160370004 +0 +120 +absolute + + + +0.01 +smooth + +8.536769498736309 +47.35044588483194 +428.89698882963415 +-165.18061880124222 +71.57801984815328 +0 +120 +absolute + + + +0.01 +smooth + +8.536768793059217 +47.3504460890962 +428.8973105249476 +-165.27055537934837 +71.58000874344208 +0 +120 +absolute + + + +0.01 +smooth + +8.536768086407122 +47.350446292789385 +428.89763161714103 +-165.3603746604044 +71.58203746949833 +0 +120 +absolute + + + +0.01 +smooth + +8.536767378789492 +47.35044649590334 +428.89795209406805 +-165.4500763420359 +71.58410520625398 +0 +120 +absolute + + + +0.01 +smooth + +8.536766670215789 +47.350446698429906 +428.89827194358145 +-165.53966012186856 +71.58621113364089 +0 +120 +absolute + + + +0.01 +smooth + +8.536765960695481 +47.35044690036087 +428.8985911535342 +-165.62912569752788 +71.58835443159086 +0 +120 +absolute + + + +0.01 +smooth + +8.536765250238044 +47.3504471016881 +428.89890971177994 +-165.71847276663965 +71.59053428003591 +0 +120 +absolute + + + +0.01 +smooth + +8.536764538852939 +47.350447302403445 +428.89922760617145 +-165.80770102682933 +71.59274985890784 +0 +120 +absolute + + + +0.01 +smooth + +8.536763826549628 +47.35044750249867 +428.89954482456164 +-165.89681017572272 +71.59500034813854 +0 +120 +absolute + + + +0.01 +smooth + +8.536763113337583 +47.35044770196566 +428.89986135480405 +-165.98579991094536 +71.5972849276599 +0 +120 +absolute + + + +0.01 +smooth + +8.536762399226282 +47.350447900796254 +428.9001771847517 +-166.07466993012298 +71.59960277740386 +0 +120 +absolute + + + +0.01 +smooth + +8.536761684225176 +47.35044809898226 +428.9004923022576 +-166.1634199308811 +71.60195307730223 +0 +120 +absolute + + + +0.01 +smooth + +8.536760968343742 +47.3504482965155 +428.9008066951749 +-166.25204961084538 +71.6043350072869 +0 +120 +absolute + + + +0.01 +smooth + +8.536760251591444 +47.350448493387844 +428.9011203513568 +-166.34055866764155 +71.60674774728983 +0 +120 +absolute + + + +0.01 +smooth + +8.536759533977753 +47.350448689591104 +428.9014332586565 +-166.4289467988951 +71.60919047724285 +0 +120 +absolute + + + +0.01 +smooth + +8.53675881551213 +47.350448885117096 +428.90174540492677 +-166.51721370223174 +71.61166237707782 +0 +120 +absolute + + + +0.01 +smooth + +8.536758096204046 +47.35044907995766 +428.902056778021 +-166.60535907527708 +71.61416262672667 +0 +120 +absolute + + + +0.01 +smooth + +8.536757376062972 +47.35044927410467 +428.90236736579243 +-166.69338261565682 +71.6166904061213 +0 +120 +absolute + + + +0.01 +smooth + +8.536756655098369 +47.35044946754988 +428.90267715609383 +-166.78128402099648 +71.6192448951935 +0 +120 +absolute + + + +0.01 +smooth + +8.536755933319709 +47.350449660285186 +428.9029861367786 +-166.86906298892177 +71.62182527387526 +0 +120 +absolute + + + +0.01 +smooth + +8.536755210736459 +47.35044985230239 +428.9032942956998 +-166.95671921705832 +71.62443072209842 +0 +120 +absolute + + + +0.01 +smooth + +8.536754487358085 +47.350450043593334 +428.9036016207106 +-167.04425240303172 +71.62706041979487 +0 +120 +absolute + + + +0.01 +smooth + +8.536753763194055 +47.350450234149854 +428.903908099664 +-167.13166224446763 +71.62971354689651 +0 +120 +absolute + + + +0.01 +smooth + +8.536753038253837 +47.35045042396378 +428.90421372041317 +-167.21894843899173 +71.63238928333519 +0 +120 +absolute + + + +0.01 +smooth + +8.536752312546897 +47.35045061302692 +428.90451847081124 +-167.3061106842296 +71.63508680904283 +0 +120 +absolute + + + +0.01 +smooth + +8.536751586082703 +47.35045080133115 +428.9048223387114 +-167.3931486778069 +71.6378053039513 +0 +120 +absolute + + + +0.01 +smooth + +8.536750858870723 +47.350450988868275 +428.9051253119667 +-167.4800621173492 +71.64054394799247 +0 +120 +absolute + + + +0.01 +smooth + +8.536750130920424 +47.35045117563013 +428.90542737843026 +-167.56685070048223 +71.64330192109826 +0 +120 +absolute + + + +0.01 +smooth + +8.536749402241274 +47.350451361608535 +428.9057285259552 +-167.65351412483156 +71.64607840320052 +0 +120 +absolute + + + +0.01 +smooth + +8.53674867284274 +47.35045154679534 +428.9060287423947 +-167.74005208802282 +71.64887257423116 +0 +120 +absolute + + + +0.01 +smooth + +8.53674794273429 +47.35045173118238 +428.90632801560184 +-167.8264642876817 +71.65168361412205 +0 +120 +absolute + + + +0.01 +smooth + +8.53674721192539 +47.35045191476147 +428.90662633342976 +-167.91275042143377 +71.6545107028051 +0 +120 +absolute + + + +0.01 +smooth + +8.536746480425508 +47.35045209752447 +428.90692368373163 +-167.9989101869047 +71.65735302021216 +0 +120 +absolute + + + +0.01 +smooth + +8.536745748244114 +47.35045227946317 +428.90722005436044 +-168.08494328172011 +71.66020974627513 +0 +120 +absolute + + + +0.01 +smooth + +8.536745015390673 +47.350452460569436 +428.90751543316946 +-168.1708494035056 +71.66308006092589 +0 +120 +absolute + + + +0.01 +smooth + +8.53674428187465 +47.35045264083509 +428.9078098080117 +-168.2566282498869 +71.66596314409634 +0 +120 +absolute + + + +0.01 +smooth + +8.536743547705518 +47.35045282025196 +428.9081031667403 +-168.34227951848953 +71.66885817571837 +0 +120 +absolute + + + +0.01 +smooth + +8.53674281289274 +47.350452998811875 +428.9083954972085 +-168.42780290693923 +71.67176433572382 +0 +120 +absolute + + + +0.01 +smooth + +8.536742077445787 +47.35045317650668 +428.9086867872693 +-168.51319811286157 +71.67468080404464 +0 +120 +absolute + + + +0.01 +smooth + +8.536741341374121 +47.3504533533282 +428.9089770247758 +-168.5984648338822 +71.67760676061266 +0 +120 +absolute + + + +0.01 +smooth + +8.536740604687218 +47.350453529268265 +428.90926619758136 +-168.68360276762672 +71.6805413853598 +0 +120 +absolute + + + +0.01 +smooth + +8.536739867394537 +47.35045370431872 +428.9095542935387 +-168.76861161172081 +71.68348385821793 +0 +120 +absolute + + + +0.01 +smooth + +8.536739129505548 +47.350453878471384 +428.9098413005013 +-168.8534910637901 +71.68643335911894 +0 +120 +absolute + + + +0.01 +smooth + +8.536738391029722 +47.350454051718074 +428.91012720632216 +-168.9382408214602 +71.68938906799471 +0 +120 +absolute + + + +0.01 +smooth + +8.536737651976523 +47.35045422405066 +428.9104119988544 +-169.0228605823567 +71.69235016477711 +0 +120 +absolute + + + +0.01 +smooth + +8.536736912355419 +47.35045439546094 +428.91069566595115 +-169.10735004410537 +71.69531582939806 +0 +120 +absolute + + + +0.01 +smooth + +8.536736172175878 +47.350454565940765 +428.9109781954654 +-169.19170890433173 +71.69828524178942 +0 +120 +absolute + + + +0.01 +smooth + +8.536735431447365 +47.35045473548196 +428.91125957525054 +-169.27593686066143 +71.7012575818831 +0 +120 +absolute + + + +0.01 +smooth + +8.536734690179351 +47.350454904076365 +428.9115397931594 +-169.3600336107201 +71.70423202961094 +0 +120 +absolute + + + +0.01 +smooth + +8.536733948381302 +47.3504550717158 +428.9118188370455 +-169.4439988521334 +71.70720776490487 +0 +120 +absolute + + + +0.01 +smooth + +8.536733206062687 +47.35045523839211 +428.91209669476154 +-169.527832282527 +71.71018396769674 +0 +120 +absolute + + + +0.01 +smooth + +8.53673246323297 +47.35045540409711 +428.9123733541609 +-169.61153359952647 +71.71315981791847 +0 +120 +absolute + + + +0.01 +smooth + +8.53673171990162 +47.35045556882265 +428.9126488030965 +-169.69510250075743 +71.71613449550193 +0 +120 +absolute + + + +0.01 +smooth + +8.536730976040483 +47.35045573261125 +428.9129230873071 +-169.7785407376974 +71.71911029820359 +0 +120 +absolute + + + +0.01 +smooth + +8.536730231310777 +47.350455895923055 +428.9131967303763 +-169.8618670087494 +71.722115374588 +0 +120 +absolute + + + +0.01 +smooth + +8.53672948563667 +47.35045605886184 +428.91346985123886 +-169.94508564032668 +71.72515629019242 +0 +120 +absolute + + + +0.01 +smooth + +8.53672873902693 +47.35045622141709 +428.91374243864067 +-170.02819633816236 +71.72823261909765 +0 +120 +absolute + + + +0.01 +smooth + +8.536727991490329 +47.350456383578326 +428.91401448132785 +-170.11119880798933 +71.7313439353845 +0 +120 +absolute + + + +0.01 +smooth + +8.536727243035642 +47.35045654533511 +428.9142859680465 +-170.1940927555409 +71.73448981313382 +0 +120 +absolute + + + +0.01 +smooth + +8.53672649367164 +47.35045670667693 +428.91455688754274 +-170.27687788654998 +71.73766982642644 +0 +120 +absolute + + + +0.01 +smooth + +8.536725743407098 +47.3504568675933 +428.9148272285624 +-170.35955390674974 +71.74088354934314 +0 +120 +absolute + + + +0.01 +smooth + +8.536724992250791 +47.3504570280738 +428.91509697985185 +-170.44212052187328 +71.74413055596482 +0 +120 +absolute + + + +0.01 +smooth + +8.536724240211482 +47.35045718810786 +428.9153661301567 +-170.52457743765356 +71.74741042037222 +0 +120 +absolute + + + +0.01 +smooth + +8.536723487297952 +47.35045734768508 +428.91563466822356 +-170.6069243598238 +71.75072271664622 +0 +120 +absolute + + + +0.01 +smooth + +8.536722733518975 +47.350457506794946 +428.91590258279814 +-170.689160994117 +71.75406701886764 +0 +120 +absolute + + + +0.01 +smooth + +8.536721978883312 +47.350457665426966 +428.9161698626265 +-170.7712870462662 +71.75744290111729 +0 +120 +absolute + + + +0.01 +smooth + +8.536721223399752 +47.35045782357071 +428.9164364964548 +-170.85330222200457 +71.76084993747601 +0 +120 +absolute + + + +0.01 +smooth + +8.536720467077057 +47.35045798121566 +428.91670247302915 +-170.93520622706515 +71.76428770202462 +0 +120 +absolute + + + +0.01 +smooth + +8.536719709924 +47.350458138351335 +428.9169677810953 +-171.01699876718095 +71.76775576884391 +0 +120 +absolute + + + +0.01 +smooth + +8.536718951949359 +47.35045829496728 +428.91723240939973 +-171.09867954808524 +71.77125371201477 +0 +120 +absolute + + + +0.01 +smooth + +8.536718193161903 +47.35045845105303 +428.91749634668827 +-171.18024827551093 +71.77478110561799 +0 +120 +absolute + + + +0.01 +smooth + +8.536717433570402 +47.35045860659806 +428.917759581707 +-171.26170465519112 +71.77833752373438 +0 +120 +absolute + + + +0.01 +smooth + +8.536716673183637 +47.35045876159194 +428.9180221032022 +-171.34304839285895 +71.78192254044481 +0 +120 +absolute + + + +0.01 +smooth + +8.536715912010374 +47.35045891602414 +428.91828389991946 +-171.42427919424742 +71.78553572983006 +0 +120 +absolute + + + +0.01 +smooth + +8.536715150059385 +47.35045906988421 +428.91854496060523 +-171.50539676508964 +71.78917666597096 +0 +120 +absolute + + + +0.01 +smooth + +8.536714387339453 +47.35045922316169 +428.9188052740056 +-171.5864008111188 +71.7928449229484 +0 +120 +absolute + + + +0.01 +smooth + +8.536713623859333 +47.350459375846064 +428.91906482886617 +-171.66729103806773 +71.7965400748431 +0 +120 +absolute + + + +0.01 +smooth + +8.536712859627814 +47.35045952792689 +428.9193236139335 +-171.74806715166977 +71.80026169573597 +0 +120 +absolute + + + +0.01 +smooth + +8.536712094653659 +47.35045967939366 +428.91958161795344 +-171.8287288576579 +71.8040093597078 +0 +120 +absolute + + + +0.01 +smooth + +8.536711328945644 +47.3504598302359 +428.9198388296721 +-171.90927586176508 +71.80778264083942 +0 +120 +absolute + + + +0.01 +smooth + +8.536710562512544 +47.350459980443155 +428.9200952378354 +-171.98970786972464 +71.81158111321164 +0 +120 +absolute + + + +0.01 +smooth + +8.53670979536313 +47.35046013000492 +428.9203508311897 +-172.07002458726942 +71.81540435090534 +0 +120 +absolute + + + +0.01 +smooth + +8.53670902750617 +47.350460278910724 +428.92060559848073 +-172.1502257201326 +71.81925192800125 +0 +120 +absolute + + + +0.01 +smooth + +8.536708258950446 +47.35046042715011 +428.9208595284548 +-172.2303109740473 +71.82312341858031 +0 +120 +absolute + + + +0.01 +smooth + +8.536707489704721 +47.35046057471257 +428.92111260985774 +-172.31028005474653 +71.82701839672325 +0 +120 +absolute + + + +0.01 +smooth + +8.536706719777772 +47.35046072158763 +428.9213648314358 +-172.3901326679634 +71.83093643651094 +0 +120 +absolute + + + +0.01 +smooth + +8.536705949178376 +47.35046086776484 +428.92161618193495 +-172.46986851943097 +71.8348771120242 +0 +120 +absolute + + + +0.01 +smooth + +8.536705177915296 +47.35046101323368 +428.9218666501013 +-172.54948731488236 +71.83883999734384 +0 +120 +absolute + + + +0.01 +smooth + +8.536704405997314 +47.35046115798369 +428.9221162246809 +-172.62898876005056 +71.84282466655071 +0 +120 +absolute + + + +0.01 +smooth + +8.536703633433197 +47.350461302004405 +428.92236489441973 +-172.70837256066872 +71.84683069372562 +0 +120 +absolute + + + +0.01 +smooth + +8.53670286023172 +47.35046144528533 +428.92261264806393 +-172.78763842246994 +71.85085765294939 +0 +120 +absolute + + + +0.01 +smooth + +8.536702086401657 +47.35046158781599 +428.9228594743596 +-172.86678605118723 +71.85490511830287 +0 +120 +absolute + + + +0.01 +smooth + +8.536701311951777 +47.350461729585916 +428.92310536205264 +-172.94581515255373 +71.85897266386685 +0 +120 +absolute + + + +0.01 +smooth + +8.536700536890859 +47.35046187058462 +428.9233502998893 +-173.02472543230255 +71.86305986372219 +0 +120 +absolute + + + +0.01 +smooth + +8.536699761227666 +47.35046201080162 +428.9235942766156 +-173.10351659616666 +71.86716629194969 +0 +120 +absolute + + + +0.01 +smooth + +8.536698984970979 +47.35046215022645 +428.9238372809774 +-173.18218834987917 +71.87129152263017 +0 +120 +absolute + + + +0.01 +smooth + +8.536698208129565 +47.35046228884863 +428.92407930172095 +-173.2607403991732 +71.8754351298445 +0 +120 +absolute + + + +0.01 +smooth + +8.536697430712202 +47.35046242665767 +428.9243203275924 +-173.33917244978184 +71.87959668767346 +0 +120 +absolute + + + +0.01 +smooth + +8.53669665272766 +47.35046256364309 +428.92456034733755 +-173.41748420743815 +71.88377577019787 +0 +120 +absolute + + + +0.01 +smooth + +8.536695874184712 +47.350462699794434 +428.92479934970265 +-173.49567537787516 +71.88797195149859 +0 +120 +absolute + + + +0.01 +smooth + +8.53669509509213 +47.350462835101204 +428.92503732343374 +-173.573745666826 +71.89218480565644 +0 +120 +absolute + + + +0.01 +smooth + +8.536694315458686 +47.350462969552936 +428.9252742572767 +-173.65169478002375 +71.89641390675223 +0 +120 +absolute + + + +0.01 +smooth + +8.536693535293155 +47.350463103139134 +428.9255101399779 +-173.72952242320144 +71.90065882886678 +0 +120 +absolute + + + +0.01 +smooth + +8.53669275460431 +47.35046323584932 +428.9257449602832 +-173.8072283020922 +71.90491914608094 +0 +120 +absolute + + + +0.01 +smooth + +8.53669197340092 +47.350463367673036 +428.9259787069386 +-173.8848121224291 +71.9091944324755 +0 +120 +absolute + + + +0.01 +smooth + +8.536691191691762 +47.350463498599794 +428.9262113686903 +-173.96227358994523 +71.91348426213133 +0 +120 +absolute + + + +0.01 +smooth + +8.536690409485606 +47.35046362861911 +428.92644293428435 +-174.03961241037365 +71.91778820912923 +0 +120 +absolute + + + +0.01 +smooth + +8.536689626791226 +47.350463757720505 +428.92667339246674 +-174.11682828944743 +71.92210584755 +0 +120 +absolute + + + +0.01 +smooth + +8.536688843617394 +47.35046388589353 +428.92690273198355 +-174.1939209328997 +71.92643675147453 +0 +120 +absolute + + + +0.01 +smooth + +8.536688059972882 +47.35046401312765 +428.92713094158086 +-174.27089004646345 +71.9307804949836 +0 +120 +absolute + + + +0.01 +smooth + +8.536687275866463 +47.35046413941243 +428.92735801000475 +-174.34773533587185 +71.93513665215802 +0 +120 +absolute + + + +0.01 +smooth + +8.536686491306911 +47.35046426473738 +428.92758392600126 +-174.4244565068579 +71.93950479707865 +0 +120 +absolute + + + +0.01 +smooth + +8.536685706302999 +47.350464389092025 +428.9278086783164 +-174.50105326515475 +71.9438845038263 +0 +120 +absolute + + + +0.01 +smooth + +8.536684920863499 +47.350464512465884 +428.9280322556963 +-174.57752531649544 +71.9482753464818 +0 +120 +absolute + + + +0.01 +smooth + +8.536684134997179 +47.35046463484848 +428.9282546468869 +-174.65387236661306 +71.95267689912598 +0 +120 +absolute + + + +0.01 +smooth + +8.53668334871282 +47.350464756229314 +428.92847584063446 +-174.73009412124065 +71.95708873583965 +0 +120 +absolute + + + +0.01 +smooth + +8.536682562019191 +47.35046487659795 +428.92869582568494 +-174.80619028611136 +71.96151043070364 +0 +120 +absolute + + + +0.01 +smooth + +8.536681774925063 +47.35046499594387 +428.9289145907843 +-174.8821605669582 +71.96594155779877 +0 +120 +absolute + + + +0.01 +smooth + +8.53668098743921 +47.35046511425662 +428.9291321246788 +-174.9580046695143 +71.97038169120589 +0 +120 +absolute + + + +0.01 +smooth + +8.536680199570405 +47.3504652315257 +428.9293484161143 +-175.03372229951273 +71.97483040500582 +0 +120 +absolute + + + +0.01 +smooth + +8.53667941132742 +47.350465347740666 +428.92956345383703 +-175.10931316268656 +71.97928727327937 +0 +120 +absolute + + + +0.01 +smooth + +8.536678622719029 +47.350465462890995 +428.9297772265929 +-175.18477696476887 +71.98375187010734 +0 +120 +absolute + + + +0.01 +smooth + +8.53667783374558 +47.35046557698386 +428.92998973864604 +-175.26011393125526 +71.98822421380409 +0 +120 +absolute + + + +0.01 +smooth + +8.536677044137747 +47.35046569058856 +428.93020149083884 +-175.33534091648062 +71.99271857284202 +0 +120 +absolute + + + +0.01 +smooth + +8.53667625376908 +47.35046580397202 +428.9304127202213 +-175.41046592912303 +71.99724175815149 +0 +120 +absolute + + + +0.01 +smooth + +8.536675462647846 +47.35046591711887 +428.9306234155577 +-175.48548866007755 +72.00179348834398 +0 +120 +absolute + + + +0.01 +smooth + +8.53667467078231 +47.35046603001379 +428.93083356561283 +-175.5604088002393 +72.00637348203098 +0 +120 +absolute + + + +0.01 +smooth + +8.536673878180737 +47.3504661426414 +428.9310431591511 +-175.63522604050303 +72.01098145782396 +0 +120 +absolute + + + +0.01 +smooth + +8.536673084851401 +47.3504662549864 +428.9312521849373 +-175.70994007176424 +72.01561713433445 +0 +120 +absolute + + + +0.01 +smooth + +8.536672290802565 +47.350466367033434 +428.93146063173583 +-175.78455058491772 +72.02028023017397 +0 +120 +absolute + + + +0.01 +smooth + +8.5366714960425 +47.35046647876718 +428.93166848831135 +-175.85905727085867 +72.02497046395395 +0 +120 +absolute + + + +0.01 +smooth + +8.536670700579469 +47.35046659017225 +428.93187574342835 +-175.93345982048206 +72.02968755428593 +0 +120 +absolute + + + +0.01 +smooth + +8.536669904421746 +47.35046670123336 +428.93208238585163 +-176.007757924683 +72.03443121978138 +0 +120 +absolute + + + +0.01 +smooth + +8.536669107577593 +47.35046681193514 +428.9322884043457 +-176.0819512743566 +72.03920117905183 +0 +120 +absolute + + + +0.01 +smooth + +8.536668310055278 +47.35046692226226 +428.93249378767496 +-176.1560395603978 +72.04399715070872 +0 +120 +absolute + + + +0.01 +smooth + +8.536667511863072 +47.35046703219938 +428.9326985246043 +-176.23002247370178 +72.04881885336363 +0 +120 +absolute + + + +0.01 +smooth + +8.536666713009243 +47.350467141731166 +428.93290260389807 +-176.30389970516362 +72.053666005628 +0 +120 +absolute + + + +0.01 +smooth + +8.536665913502056 +47.35046725084226 +428.933106014321 +-176.37767094567832 +72.05853832611331 +0 +120 +absolute + + + +0.01 +smooth + +8.536665113349777 +47.35046735951733 +428.93330874463766 +-176.45133588614092 +72.0634355334311 +0 +120 +absolute + + + +0.01 +smooth + +8.536664312560676 +47.35046746774103 +428.9335107836124 +-176.52489421744647 +72.06835734619283 +0 +120 +absolute + + + +0.01 +smooth + +8.536663511143022 +47.350467575498044 +428.93371212001017 +-176.59834563049017 +72.07330348301 +0 +120 +absolute + + + +0.01 +smooth + +8.53666270910508 +47.35046768277302 +428.9339127425953 +-176.67168981616703 +72.07827366249411 +0 +120 +absolute + + + +0.01 +smooth + +8.536661906455116 +47.35046778955059 +428.9341126401325 +-176.74492646537203 +72.08326760325666 +0 +120 +absolute + + + +0.01 +smooth + +8.536661103201402 +47.350467895815456 +428.93431180138623 +-176.81805526900027 +72.08828502390917 +0 +120 +absolute + + + +0.01 +smooth + +8.536660299352205 +47.35046800155225 +428.93451021512124 +-176.8910759179469 +72.09332564306308 +0 +120 +absolute + + + +0.01 +smooth + +8.536659494915789 +47.350468106745645 +428.934707870102 +-176.96398810310686 +72.09838917932993 +0 +120 +absolute + + + +0.01 +smooth + +8.53665868990043 +47.350468211380324 +428.9349047550934 +-177.0367915153754 +72.10347535132121 +0 +120 +absolute + + + +0.01 +smooth + +8.536657884314383 +47.35046831544089 +428.9351008588594 +-177.10948584564738 +72.10858387764839 +0 +120 +absolute + + + +0.01 +smooth + +8.536657078165923 +47.35046841891204 +428.93529617016503 +-177.18207078481794 +72.11371447692298 +0 +120 +absolute + + + +0.01 +smooth + +8.53665627146332 +47.35046852177845 +428.935490677775 +-177.25454602378224 +72.11886686775652 +0 +120 +absolute + + + +0.01 +smooth + +8.536655464214837 +47.35046862402474 +428.9356843704536 +-177.32691125343518 +72.12404076876042 +0 +120 +absolute + + + +0.01 +smooth + +8.536654656428743 +47.350468725635594 +428.9358772369655 +-177.39916616467198 +72.12923589854626 +0 +120 +absolute + + + +0.01 +smooth + +8.536653848113307 +47.35046882659567 +428.9360692660754 +-177.4713104483876 +72.13445197572545 +0 +120 +absolute + + + +0.01 +smooth + +8.53665303927679 +47.35046892688961 +428.93626044654746 +-177.54334379547709 +72.13968871890954 +0 +120 +absolute + + + +0.01 +smooth + +8.536652229927471 +47.35046902650211 +428.936450767147 +-177.61526589683564 +72.14494584671006 +0 +120 +absolute + + + +0.01 +smooth + +8.536651420073609 +47.35046912541782 +428.93664021663807 +-177.68707644335825 +72.15022307773842 +0 +120 +absolute + + + +0.01 +smooth + +8.536650609723473 +47.35046922362135 +428.93682878378524 +-177.75877512593988 +72.15552013060615 +0 +120 +absolute + + + +0.01 +smooth + +8.536649798885334 +47.350469321097435 +428.93701645735337 +-177.83036163547578 +72.16083672392479 +0 +120 +absolute + + + +0.01 +smooth + +8.536648987567457 +47.35046941783069 +428.93720322610693 +-177.9018356628609 +72.16617257630578 +0 +120 +absolute + + + +0.01 +smooth + +8.536648175778108 +47.35046951380579 +428.93738907881055 +-177.97319689899032 +72.17152740636064 +0 +120 +absolute + + + +0.01 +smooth + +8.536647363525558 +47.350469609007384 +428.93757400422874 +-178.04444503475912 +72.17690093270086 +0 +120 +absolute + + + +0.01 +smooth + +8.536646550818073 +47.350469703420146 +428.93775799112603 +-178.1155797610624 +72.18229287393791 +0 +120 +absolute + + + +0.01 +smooth + +8.536645737663921 +47.350469797028715 +428.9379410282672 +-178.18660076879516 +72.18770294868335 +0 +120 +absolute + + + +0.01 +smooth + +8.53664492407137 +47.350469889817774 +428.93812310441666 +-178.2575077488525 +72.1931308755486 +0 +120 +absolute + + + +0.01 +smooth + +8.536644110048687 +47.35046998177197 +428.93830420833905 +-178.32830039212945 +72.19857637314523 +0 +120 +absolute + + + +0.01 +smooth + +8.536643295604138 +47.35047007287598 +428.93848432879906 +-178.39897838952115 +72.20403916008468 +0 +120 +absolute + + + +0.01 +smooth + +8.536642480745993 +47.350470163114444 +428.93866345456115 +-178.4695414319226 +72.20951895497846 +0 +120 +absolute + + + +0.01 +smooth + +8.536641665482518 +47.35047025247203 +428.93884157438987 +-178.5399892102289 +72.21501547643805 +0 +120 +absolute + + + +0.01 +smooth + +8.536640849821984 +47.350470340933384 +428.93901867704994 +-178.61032141533508 +72.22052844307501 +0 +120 +absolute + + + +0.01 +smooth + +8.536640033772654 +47.35047042848319 +428.93919475130593 +-178.68053773813622 +72.22605757350075 +0 +120 +absolute + + + +0.01 +smooth + +8.536639217342799 +47.35047051510611 +428.9393697859223 +-178.7506378695274 +72.23160258632683 +0 +120 +absolute + + + +0.01 +smooth + +8.536638400540683 +47.35047060078678 +428.93954376966377 +-178.82062150040366 +72.2371632001647 +0 +120 +absolute + + + +0.01 +smooth + +8.536637583374578 +47.350470685509876 +428.93971669129496 +-178.89048832166011 +72.24273913362589 +0 +120 +absolute + + + +0.01 +smooth + +8.53663676585275 +47.350470769260056 +428.93988853958024 +-178.9602380241918 +72.24833010532188 +0 +120 +absolute + + + +0.01 +smooth + +8.536635947983465 +47.35047085202197 +428.9400593032844 +-179.0298702988938 +72.25393583386418 +0 +120 +absolute + + + +0.01 +smooth + +8.536635129774993 +47.3504709337803 +428.940228971172 +-179.09938483666107 +72.25955603786426 +0 +120 +absolute + + + +0.01 +smooth + +8.536634311235597 +47.350471014519684 +428.9403975320076 +-179.16878132838886 +72.26519043593362 +0 +120 +absolute + + + +0.01 +smooth + +8.53663349237355 +47.35047109422479 +428.9405649745557 +-179.23805946497208 +72.27083874668378 +0 +120 +absolute + + + +0.01 +smooth + +8.536632673197118 +47.35047117288028 +428.94073128758095 +-179.3072189373059 +72.27650068872623 +0 +120 +absolute + + + +0.01 +smooth + +8.536631853714567 +47.35047125047082 +428.940896459848 +-179.3762594362853 +72.28217598067243 +0 +120 +absolute + + + +0.01 +smooth + +8.536631033934167 +47.35047132698105 +428.9410604801214 +-179.4451806528054 +72.28786434113391 +0 +120 +absolute + + + +0.01 +smooth + +8.536630213864186 +47.350471402395655 +428.9412233371657 +-179.51398227776124 +72.29356548872215 +0 +120 +absolute + + + +0.01 +smooth + +8.536629393512886 +47.350471476699276 +428.94138501974544 +-179.58266400204792 +72.29927914204868 +0 +120 +absolute + + + +0.01 +smooth + +8.536628572888542 +47.35047154987658 +428.9415455166254 +-179.65122551656046 +72.30500501972494 +0 +120 +absolute + + + +0.01 +smooth + +8.536627751999417 +47.35047162191224 +428.94170481657 +-179.71966651219392 +72.31074284036247 +0 +120 +absolute + + + +0.01 +smooth + +8.53662693085378 +47.35047169279089 +428.94186290834386 +-179.7879866798434 +72.31649232257273 +0 +120 +absolute + + + +0.01 +smooth + +8.536626109459897 +47.35047176249721 +428.9420197807116 +-179.85618571040405 +72.32225318496725 +0 +120 +absolute + + + +0.01 +smooth + +8.53662528782604 +47.35047183101586 +428.9421754224378 +-179.92426329477078 +72.32802514615753 +0 +120 +absolute + + + +0.01 +smooth + +8.536624465960472 +47.350471898331485 +428.9423298222869 +-179.99221912383874 +72.333807924755 +0 +120 +absolute + + + +0.01 +smooth + +8.536623643871462 +47.350471964428756 +428.9424829690238 +-180.06005288850292 +72.33960123937123 +0 +120 +absolute + + + +0.01 +smooth + +8.536622821567278 +47.350472029292334 +428.9426348514128 +-180.12776427965846 +72.34540480861767 +0 +120 +absolute + + + +0.01 +smooth + +8.536621999056187 +47.35047209290688 +428.9427854582186 +-180.19535298820045 +72.35121835110586 +0 +120 +absolute + + + +0.01 +smooth + +8.53662117615329 +47.350472156055076 +428.9429352164516 +-180.26283234746427 +72.35704913762916 +0 +120 +absolute + + + +0.01 +smooth + +8.536620352673435 +47.35047221950692 +428.94308455231254 +-180.33021566942568 +72.36290448982732 +0 +120 +absolute + + + +0.01 +smooth + +8.536619528624536 +47.35047228322802 +428.94323345335204 +-180.39750261294063 +72.36878420258148 +0 +120 +absolute + + + +0.01 +smooth + +8.536618704014494 +47.350472347184024 +428.9433819071204 +-180.46469283686466 +72.37468807077269 +0 +120 +absolute + + + +0.01 +smooth + +8.53661787885121 +47.35047241134048 +428.94352990116806 +-180.53178600005356 +72.380615889282 +0 +120 +absolute + + + +0.01 +smooth + +8.536617053142587 +47.35047247566303 +428.9436774230453 +-180.59878176136291 +72.38656745299046 +0 +120 +absolute + + + +0.01 +smooth + +8.536616226896538 +47.35047254011731 +428.94382446030284 +-180.66567977964863 +72.39254255677923 +0 +120 +absolute + + + +0.01 +smooth + +8.536615400120963 +47.35047260466891 +428.9439710004909 +-180.73247971376637 +72.39854099552932 +0 +120 +absolute + + + +0.01 +smooth + +8.536614572823762 +47.350472669283434 +428.9441170311598 +-180.7991812225718 +72.40456256412182 +0 +120 +absolute + + + +0.01 +smooth + +8.536613745012847 +47.3504727339265 +428.94426253986006 +-180.8657839649207 +72.41060705743777 +0 +120 +absolute + + + +0.01 +smooth + +8.536612916696116 +47.35047279856372 +428.9444075141423 +-180.93228759966874 +72.4166742703583 +0 +120 +absolute + + + +0.01 +smooth + +8.536612087881478 +47.35047286316072 +428.94455194155665 +-180.99869178567172 +72.42276399776443 +0 +120 +absolute + + + +0.01 +smooth + +8.536611258576837 +47.35047292768311 +428.9446958096537 +-181.0649961817853 +72.42887603453728 +0 +120 +absolute + + + +0.01 +smooth + +8.536610428790093 +47.350472992096456 +428.94483910598353 +-181.13120044686508 +72.43501017555785 +0 +120 +absolute + + + +0.01 +smooth + +8.536609598529155 +47.35047305636644 +428.9449818180971 +-181.19730423976702 +72.4411662157073 +0 +120 +absolute + + + +0.01 +smooth + +8.536608767801926 +47.350473120458624 +428.9451239335445 +-181.26330721934667 +72.44734394986666 +0 +120 +absolute + + + +0.01 +smooth + +8.53660793661631 +47.350473184338625 +428.945265439876 +-181.3292090444598 +72.45354317291697 +0 +120 +absolute + + + +0.01 +smooth + +8.53660710498021 +47.350473247972104 +428.94540632464236 +-181.39500937396213 +72.45976367973935 +0 +120 +absolute + + + +0.01 +smooth + +8.536606272901535 +47.350473311324606 +428.94554657539396 +-181.46070786670938 +72.46600526521489 +0 +120 +absolute + + + +0.01 +smooth + +8.536605440388183 +47.350473374361755 +428.94568617968076 +-181.5263041815572 +72.47226772422458 +0 +120 +absolute + + + +0.01 +smooth + +8.536604607448064 +47.350473437049224 +428.94582512505383 +-181.59179797736147 +72.47855085164962 +0 +120 +absolute + + + +0.01 +smooth + +8.53660377408908 +47.35047349935255 +428.9459633990631 +-181.65718891297774 +72.48485444237095 +0 +120 +absolute + + + +0.01 +smooth + +8.536602940319135 +47.35047356123739 +428.9461009892593 +-181.72247664726189 +72.49117829126969 +0 +120 +absolute + + + +0.01 +smooth + +8.536602106146136 +47.35047362266935 +428.9462378831927 +-181.7876608390695 +72.49752219322696 +0 +120 +absolute + + + +0.01 +smooth + +8.536601271577982 +47.35047368361401 +428.94637406841355 +-181.85274114725632 +72.50388594312376 +0 +120 +absolute + + + +0.01 +smooth + +8.536600436622583 +47.35047374403702 +428.9465095324726 +-181.91771723067814 +72.51026933584122 +0 +120 +absolute + + + +0.01 +smooth + +8.536599601287843 +47.35047380390399 +428.94664426292013 +-181.9825887481906 +72.5166721662604 +0 +120 +absolute + + + +0.01 +smooth + +8.536598765581658 +47.3504738631805 +428.9467782473063 +-182.0473553586494 +72.52309422926233 +0 +120 +absolute + + + +0.01 +smooth + +8.536597929511947 +47.35047392183218 +428.94691147318196 +-182.1120167209104 +72.52953531972814 +0 +120 +absolute + + + +0.01 +smooth + +8.536597093086602 +47.350473979824656 +428.94704392809734 +-182.17657249382918 +72.53599523253887 +0 +120 +absolute + + + +0.01 +smooth + +8.536596256313532 +47.35047403712352 +428.9471755996027 +-182.2410223362615 +72.54247376257558 +0 +120 +absolute + + + +0.01 +smooth + +8.536595419200646 +47.35047409369441 +428.94730647524875 +-182.3053659070631 +72.5489707047194 +0 +120 +absolute + + + +0.01 +smooth + +8.536594581755839 +47.3504741495029 +428.9474365425857 +-182.3696028650897 +72.55548585385134 +0 +120 +absolute + + + +0.01 +smooth + +8.536593743987021 +47.350474204514626 +428.947565789164 +-182.43373286919694 +72.56201900485252 +0 +120 +absolute + + + +0.01 +smooth + +8.536592905902097 +47.3504742586952 +428.9476942025342 +-182.49775557824069 +72.56856995260398 +0 +120 +absolute + + + +0.01 +smooth + +8.53659206750897 +47.35047431201023 +428.9478217702465 +-182.5616706510765 +72.57513849198679 +0 +120 +absolute + + + +0.01 +smooth + +8.536591228815542 +47.35047436442532 +428.94794847985145 +-182.6254777465602 +72.58172441788206 +0 +120 +absolute + + + +0.01 +smooth + +8.53659038982972 +47.35047441590609 +428.9480743188994 +-182.68917652354753 +72.58832752517081 +0 +120 +absolute + + + +0.01 +smooth + +8.53658955055941 +47.350474466418156 +428.94819927494075 +-182.7527666408941 +72.59494760873416 +0 +120 +absolute + + + +0.01 +smooth + +8.536588711012513 +47.350474515927125 +428.9483233355261 +-182.8162477574557 +72.60158446345315 +0 +120 +absolute + + + +0.01 +smooth + +8.536587871196938 +47.35047456439861 +428.94844648820566 +-182.87961953208804 +72.60823788420888 +0 +120 +absolute + + + +0.01 +smooth + +8.536587031120582 +47.35047461179822 +428.94856872053003 +-182.94288162364688 +72.61490766588241 +0 +120 +absolute + + + +0.01 +smooth + +8.536586190791358 +47.35047465809157 +428.94869002004947 +-183.00603369098783 +72.6215936033548 +0 +120 +absolute + + + +0.01 +smooth + +8.536585350217164 +47.35047470324427 +428.9488103743144 +-183.06907539296674 +72.62829549150713 +0 +120 +absolute + + + +0.01 +smooth + +8.536584509405905 +47.35047474722194 +428.94892977087534 +-183.1320063884392 +72.6350131252205 +0 +120 +absolute + + + +0.01 +smooth + +8.53658366836549 +47.35047478999018 +428.9490481972826 +-183.19482633626103 +72.64174629937594 +0 +120 +absolute + + + +0.01 +smooth + +8.53658282710382 +47.35047483151461 +428.94916564108667 +-183.25753489528788 +72.64849480885452 +0 +120 +absolute + + + +0.01 +smooth + +8.536581985628798 +47.35047487176083 +428.949282089838 +-183.32013172437553 +72.65525844853735 +0 +120 +absolute + + + +0.01 +smooth + +8.536581143948332 +47.35047491069447 +428.9493975310869 +-183.38261648237966 +72.66203701330551 +0 +120 +absolute + + + +0.01 +smooth + +8.536580302070323 +47.35047494828113 +428.94951195238383 +-183.44498882815603 +72.66883029804004 +0 +120 +absolute + + + +0.01 +smooth + +8.536579460002681 +47.350474984486425 +428.94962534127916 +-183.5072484205603 +72.67563809762201 +0 +120 +absolute + + + +0.01 +smooth + +8.536578617753303 +47.350475019275976 +428.9497376853235 +-183.5693949184482 +72.6824602069325 +0 +120 +absolute + + + +0.01 +smooth + +8.536577775330095 +47.35047505261538 +428.949848972067 +-183.63142798067554 +72.6892964208526 +0 +120 +absolute + + + +0.01 +smooth + +8.536576932740967 +47.35047508447025 +428.9499591890602 +-183.69334726609787 +72.69614653426336 +0 +120 +absolute + + + +0.01 +smooth + +8.536576089993819 +47.3504751148062 +428.9500683238536 +-183.75515243357108 +72.70301034204587 +0 +120 +absolute + + + +0.01 +smooth + +8.536575247096554 +47.35047514358885 +428.95017636399757 +-183.8168431419508 +72.70988763908119 +0 +120 +absolute + + + +0.01 +smooth + +8.536574404057081 +47.35047517078381 +428.95028329704246 +-183.87841905009273 +72.7167782202504 +0 +120 +absolute + + + +0.01 +smooth + +8.536573560883301 +47.35047519635669 +428.9503891105387 +-183.93987981685268 +72.72368188043457 +0 +120 +absolute + + + +0.01 +smooth + +8.536572717583118 +47.3504752202731 +428.9504937920367 +-184.00122510108628 +72.73059841451477 +0 +120 +absolute + + + +0.01 +smooth + +8.53657187416444 +47.35047524249863 +428.9505973290869 +-184.06245456164925 +72.73752761737207 +0 +120 +absolute + + + +0.01 +smooth + +8.53657103063517 +47.35047526299895 +428.95069970923987 +-184.12356785739738 +72.74446928388755 +0 +120 +absolute + + + +0.01 +smooth + +8.536570187003209 +47.35047528173962 +428.9508009200457 +-184.18456464718633 +72.75142320894228 +0 +120 +absolute + + + +0.01 +smooth + +8.536569343276463 +47.35047529868627 +428.9509009490551 +-184.24544458987185 +72.75838918741734 +0 +120 +absolute + + + +0.01 +smooth + +8.53656849946284 +47.35047531380451 +428.95099978381825 +-184.30620734430968 +72.76536701419379 +0 +120 +absolute + + + +0.01 +smooth + +8.53656765557024 +47.35047532705995 +428.95109741188577 +-184.36685256935547 +72.7723564841527 +0 +120 +absolute + + + +0.01 +smooth + +8.536566811606571 +47.35047533841821 +428.95119382080793 +-184.427379923865 +72.77935739217516 +0 +120 +absolute + + + +0.01 +smooth + +8.536565967579735 +47.35047534784489 +428.9512889981353 +-184.4877890666939 +72.78636953314223 +0 +120 +absolute + + + +0.01 +smooth + +8.536565123497637 +47.35047535530561 +428.9513829314181 +-184.54807965669806 +72.79339270193498 +0 +120 +absolute + + + +0.01 +smooth + +8.53656427936818 +47.350475360765984 +428.951475608207 +-184.60825135273302 +72.8004266934345 +0 +120 +absolute + + + +0.01 +smooth + +8.53656343508315 +47.350475364831674 +428.95156736521625 +-184.66831321377836 +72.8074748663795 +0 +120 +absolute + + + +0.01 +smooth + +8.536562590410812 +47.35047536880683 +428.9516589078373 +-184.72828426363336 +72.81454439065575 +0 +120 +absolute + + + +0.01 +smooth + +8.536561745351555 +47.35047537273101 +428.95175024119345 +-184.7881647066987 +72.82163532904228 +0 +120 +absolute + + + +0.01 +smooth + +8.536560899913038 +47.35047537660399 +428.95184134855697 +-184.84795415958612 +72.82874752188008 +0 +120 +absolute + + + +0.01 +smooth + +8.5365600541029 +47.35047538042554 +428.9519322132001 +-184.90765223890702 +72.83588080951007 +0 +120 +absolute + + + +0.01 +smooth + +8.536559207928798 +47.35047538419545 +428.9520228183948 +-184.96725856127304 +72.84303503227328 +0 +120 +absolute + + + +0.01 +smooth + +8.536558361398372 +47.350475387913455 +428.9521131474133 +-185.02677274329565 +72.85021003051061 +0 +120 +absolute + + + +0.01 +smooth + +8.536557514519277 +47.35047539157938 +428.95220318352796 +-185.0861944015865 +72.85740564456306 +0 +120 +absolute + + + +0.01 +smooth + +8.536556667299163 +47.35047539519296 +428.95229291001084 +-185.14552315275702 +72.86462171477162 +0 +120 +absolute + + + +0.01 +smooth + +8.536555819745674 +47.35047539875397 +428.95238231013406 +-185.2047586134188 +72.87185808147723 +0 +120 +absolute + + + +0.01 +smooth + +8.536554971866456 +47.35047540226219 +428.9524713671697 +-185.26390040018322 +72.8791145850208 +0 +120 +absolute + + + +0.01 +smooth + +8.536554123669172 +47.35047540571742 +428.95256006439024 +-185.32294812966205 +72.88639106574341 +0 +120 +absolute + + + +0.01 +smooth + +8.536553275161458 +47.350475409119404 +428.9526483850675 +-185.38190141846673 +72.89368736398593 +0 +120 +absolute + + + +0.01 +smooth + +8.536552426350966 +47.35047541246791 +428.95273631247386 +-185.44075988320876 +72.90100332008939 +0 +120 +absolute + + + +0.01 +smooth + +8.536551577245346 +47.35047541576275 +428.9528238298816 +-185.4995231404998 +72.90833877439474 +0 +120 +absolute + + + +0.01 +smooth + +8.536550727852248 +47.35047541900366 +428.9529109205627 +-185.5581908069513 +72.91569356724294 +0 +120 +absolute + + + +0.01 +smooth + +8.536549878179319 +47.35047542219041 +428.9529975677892 +-185.6167624991747 +72.92306753897492 +0 +120 +absolute + + + +0.01 +smooth + +8.53654902823421 +47.35047542532282 +428.95308375483376 +-185.67523783378178 +72.93046052993174 +0 +120 +absolute + + + +0.01 +smooth + +8.536548178024564 +47.35047542840061 +428.953169464968 +-185.73361642738385 +72.93787238045427 +0 +120 +absolute + + + +0.01 +smooth + +8.536547327558036 +47.35047543142358 +428.9532546814645 +-185.7918978965926 +72.94530293088353 +0 +120 +absolute + + + +0.01 +smooth + +8.536546476842275 +47.35047543439153 +428.95333938759524 +-185.85008185801954 +72.9527520215605 +0 +120 +absolute + + + +0.01 +smooth + +8.536545625884926 +47.350475437304155 +428.9534235666323 +-185.90816792827607 +72.96021949282607 +0 +120 +absolute + + + +0.01 +smooth + +8.536544774693642 +47.35047544016132 +428.95350720184814 +-185.96615572397394 +72.9677051850213 +0 +120 +absolute + + + +0.01 +smooth + +8.53654392327607 +47.350475442962754 +428.9535902765147 +-186.0240448617246 +72.97520893848713 +0 +120 +absolute + + + +0.01 +smooth + +8.536543071639853 +47.350475445708206 +428.95367277390415 +-186.08183495813947 +72.98273059356445 +0 +120 +absolute + + + +0.01 +smooth + +8.53654221979265 +47.350475448397496 +428.9537546772889 +-186.1395256298303 +72.99026999059436 +0 +120 +absolute + + + +0.01 +smooth + +8.536541367742107 +47.35047545103039 +428.9538359699408 +-186.19711649340854 +72.99782696991771 +0 +120 +absolute + + + +0.01 +smooth + +8.536540515495865 +47.350475453606634 +428.95391663513226 +-186.25460716548565 +73.00540137187552 +0 +120 +absolute + + + +0.01 +smooth + +8.536539663061589 +47.35047545612604 +428.9539966561356 +-186.3119972626733 +73.01299303680878 +0 +120 +absolute + + + +0.01 +smooth + +8.53653881044691 +47.35047545858835 +428.9540760162225 +-186.3692864015829 +73.02060180505839 +0 +120 +absolute + + + +0.01 +smooth + +8.536537957659487 +47.35047546099333 +428.9541546986653 +-186.42647419882604 +73.02822751696536 +0 +120 +absolute + + + +0.01 +smooth + +8.53653710470697 +47.3504754633408 +428.9542326867366 +-186.48356027101434 +73.03587001287067 +0 +120 +absolute + + + +0.01 +smooth + +8.536536251597 +47.35047546563049 +428.95430996370794 +-186.54054423475924 +73.04352913311523 +0 +120 +absolute + + + +0.01 +smooth + +8.536535398337232 +47.3504754678622 +428.95438651285207 +-186.59742570667234 +73.05120471804008 +0 +120 +absolute + + + +0.01 +smooth + +8.536534544935314 +47.35047547003569 +428.95446231744074 +-186.65420430336505 +73.05889660798614 +0 +120 +absolute + + + +0.01 +smooth + +8.536533691398896 +47.35047547215073 +428.95453736074626 +-186.7108796414491 +73.0666046432944 +0 +120 +absolute + + + +0.01 +smooth + +8.536532837735622 +47.350475474207116 +428.9546116260409 +-186.7674513375359 +73.0743286643058 +0 +120 +absolute + + + +0.01 +smooth + +8.536531983953148 +47.350475476204586 +428.95468509659673 +-186.82391900823706 +73.08206851136133 +0 +120 +absolute + + + +0.01 +smooth + +8.536531130059117 +47.35047547814296 +428.95475775568593 +-186.88028227016406 +73.08982402480193 +0 +120 +absolute + + + +0.01 +smooth + +8.53653027606118 +47.35047548002197 +428.9548295865807 +-186.93654073992846 +73.0975950449686 +0 +120 +absolute + + + +0.01 +smooth + +8.536529421966987 +47.350475481841414 +428.9549005725532 +-186.9926940341418 +73.10538141220229 +0 +120 +absolute + + + +0.01 +smooth + +8.536528567784185 +47.35047548360105 +428.95497069687553 +-187.04874176941559 +73.11318296684397 +0 +120 +absolute + + + +0.01 +smooth + +8.536527713520423 +47.350475485300656 +428.95503994282 +-187.10468356236146 +73.12099954923461 +0 +120 +absolute + + + +0.01 +smooth + +8.53652685918335 +47.35047548694002 +428.9551082936587 +-187.16051902959086 +73.12883099971515 +0 +120 +absolute + + + +0.01 +smooth + +8.536526004780619 +47.350475488518896 +428.95517573266386 +-187.21624778771536 +73.13667715862661 +0 +120 +absolute + + + +0.01 +smooth + +8.536525150319871 +47.35047549003707 +428.9552422431076 +-187.27186945334645 +73.14453786630992 +0 +120 +absolute + + + +0.01 +smooth + +8.53652429580876 +47.35047549149432 +428.9553078082621 +-187.32738364309577 +73.15241296310606 +0 +120 +absolute + + + +0.01 +smooth + +8.536523441254936 +47.3504754928904 +428.9553724113995 +-187.38278997357477 +73.16030228935595 +0 +120 +absolute + + + +0.01 +smooth + +8.536522586666045 +47.3504754942251 +428.9554360357921 +-187.43808806139504 +73.16820568540064 +0 +120 +absolute + + + +0.01 +smooth + +8.536521732049737 +47.350475495498195 +428.95549866471197 +-187.4932775231681 +73.17612299158104 +0 +120 +absolute + + + +0.01 +smooth + +8.536520877413661 +47.35047549670945 +428.9555602814312 +-187.5483579755055 +73.18405404823812 +0 +120 +absolute + + + +0.01 +smooth + +8.536520022765465 +47.35047549785864 +428.9556208692221 +-187.60332903501876 +73.19199869571288 +0 +120 +absolute + + + +0.01 +smooth + +8.5365191681128 +47.35047549894554 +428.95568041135687 +-187.65819031831938 +73.19995677434625 +0 +120 +absolute + + + +0.01 +smooth + +8.536518313463311 +47.35047549996993 +428.9557388911076 +-187.71294144201903 +73.20792812447922 +0 +120 +absolute + + + +0.01 +smooth + +8.536517458824651 +47.35047550093158 +428.9557962917464 +-187.76758202272913 +73.21591258645273 +0 +120 +absolute + + + +0.01 +smooth + +8.536516604204468 +47.35047550183025 +428.95585259654564 +-187.82211167706126 +73.22391000060779 +0 +120 +absolute + + + +0.01 +smooth + +8.536515749610409 +47.35047550266573 +428.95590778877727 +-187.87653002162693 +73.23192020728533 +0 +120 +absolute + + + +0.01 +smooth + +8.536514895050125 +47.3504755034378 +428.9559618517136 +-187.93083667303773 +73.23994304682633 +0 +120 +absolute + + + +0.01 +smooth + +8.536514040531262 +47.35047550414622 +428.9560147686268 +-187.9850312479051 +73.24797835957175 +0 +120 +absolute + + + +0.01 +smooth + +8.536513186061471 +47.35047550479076 +428.956066522789 +-188.03911336284074 +73.25602598586256 +0 +120 +absolute + + + +0.01 +smooth + +8.536512331648401 +47.3504755053712 +428.9561170974723 +-188.09308263445607 +73.26408576603974 +0 +120 +absolute + + + +0.01 +smooth + +8.536511477299703 +47.35047550588732 +428.95616647594915 +-188.14693867936262 +73.27215754044424 +0 +120 +absolute + + + +0.01 +smooth + +8.536510623023021 +47.35047550633888 +428.95621464149144 +-188.200681114172 +73.28024114941704 +0 +120 +absolute + + + +0.01 +smooth + +8.536509768826006 +47.350475506725665 +428.9562615773714 +-188.2543095554957 +73.28833643329908 +0 +120 +absolute + + + +0.01 +smooth + +8.53650891471631 +47.350475507047456 +428.9563072668612 +-188.3078236199453 +73.29644323243139 +0 +120 +absolute + + + +0.01 +smooth + +8.536508060701575 +47.350475507304004 +428.95635169323316 +-188.36122292413233 +73.30456138715485 +0 +120 +absolute + + + +0.01 +smooth + +8.536507206789457 +47.3504755074951 +428.9563948397593 +-188.4145070846683 +73.31269073781047 +0 +120 +absolute + + + +0.01 +smooth + +8.536506352987601 +47.35047550762051 +428.9564366897118 +-188.46767571816468 +73.32083112473926 +0 +120 +absolute + + + +0.01 +smooth + +8.536505499303656 +47.35047550768002 +428.95647722636284 +-188.5207284412332 +73.3289823882821 +0 +120 +absolute + + + +0.01 +smooth + +8.536504645682424 +47.35047550733841 +428.9565166860707 +-188.57367062886198 +73.33714594070692 +0 +120 +absolute + + + +0.01 +smooth + +8.536503791873091 +47.35047550523296 +428.95655609184007 +-188.62652555163592 +73.34532809622401 +0 +120 +absolute + + + +0.01 +smooth + +8.536502937855214 +47.350475501247736 +428.95659553775505 +-188.6792953412942 +73.3535294200505 +0 +120 +absolute + + + +0.01 +smooth + +8.536502083636268 +47.35047549541658 +428.9566350053715 +-188.73197956908777 +73.36174977948824 +0 +120 +absolute + + + +0.01 +smooth + +8.53650122922373 +47.350475487773416 +428.95667447624515 +-188.78457780626786 +73.36998904183906 +0 +120 +absolute + + + +0.01 +smooth + +8.536500374625083 +47.35047547835209 +428.95671393193203 +-188.83708962408554 +73.37824707440491 +0 +120 +absolute + + + +0.01 +smooth + +8.536499519847807 +47.35047546718649 +428.95675335398784 +-188.88951459379186 +73.38652374448756 +0 +120 +absolute + + + +0.01 +smooth + +8.536498664899373 +47.350475454310455 +428.9567927239682 +-188.94185228663787 +73.39481891938891 +0 +120 +absolute + + + +0.01 +smooth + +8.536497809787269 +47.3504754397579 +428.95683202342934 +-188.99410227387477 +73.40313246641085 +0 +120 +absolute + + + +0.01 +smooth + +8.536496954518967 +47.35047542356266 +428.95687123392673 +-189.04626412675353 +73.41146425285521 +0 +120 +absolute + + + +0.01 +smooth + +8.536496099101948 +47.35047540575862 +428.95691033701615 +-189.0983374165252 +73.41981414602385 +0 +120 +absolute + + + +0.01 +smooth + +8.536495243543696 +47.350475386379664 +428.9569493142536 +-189.150321714441 +73.42818201321869 +0 +120 +absolute + + + +0.01 +smooth + +8.536494387851684 +47.350475365459644 +428.956988147195 +-189.20221659175192 +73.43656772174153 +0 +120 +absolute + + + +0.01 +smooth + +8.536493532033392 +47.35047534303244 +428.95702681739573 +-189.254021619709 +73.44497113889426 +0 +120 +absolute + + + +0.01 +smooth + +8.5364926760963 +47.35047531913193 +428.9570653064119 +-189.30573636956345 +73.45339213197877 +0 +120 +absolute + + + +0.01 +smooth + +8.536491820047889 +47.35047529379197 +428.95710359579937 +-189.35736041256627 +73.46183056829689 +0 +120 +absolute + + + +0.01 +smooth + +8.53649096389563 +47.35047526704645 +428.9571416671138 +-189.40889331996848 +73.47028631515049 +0 +120 +absolute + + + +0.01 +smooth + +8.536490107647014 +47.35047523892924 +428.957179501911 +-189.46033466302129 +73.47875923984147 +0 +120 +absolute + + + +0.01 +smooth + +8.536489251309503 +47.350475209474176 +428.95721708174676 +-189.51168401297562 +73.4872492096716 +0 +120 +absolute + + + +0.01 +smooth + +8.536488394890595 +47.35047517871518 +428.957254388177 +-189.56294094108281 +73.49575609194285 +0 +120 +absolute + + + +0.01 +smooth + +8.536487538397758 +47.35047514668611 +428.9572914027575 +-189.6141050185937 +73.50427975395704 +0 +120 +absolute + + + +0.01 +smooth + +8.536486681838468 +47.350475113420806 +428.95732810704396 +-189.66517581675936 +73.51282006301602 +0 +120 +absolute + + + +0.01 +smooth + +8.536485825220215 +47.350475078953195 +428.9573644825925 +-189.7161529068311 +73.5213768864217 +0 +120 +absolute + + + +0.01 +smooth + +8.536484968550468 +47.35047504331709 +428.95740051095845 +-189.76703586005985 +73.52995009147592 +0 +120 +absolute + + + +0.01 +smooth + +8.536484111836709 +47.3504750065464 +428.95743617369783 +-189.81782424769665 +73.5385395454805 +0 +120 +absolute + + + +0.01 +smooth + +8.536483255086422 +47.35047496867501 +428.95747145236686 +-189.8685176409927 +73.54714511573741 +0 +120 +absolute + + + +0.01 +smooth + +8.536482398307077 +47.35047492973673 +428.95750632852065 +-189.91911561119898 +73.5557666695484 +0 +120 +absolute + + + +0.01 +smooth + +8.53648154150616 +47.35047488976548 +428.9575407837154 +-189.96961772956658 +73.5644040742154 +0 +120 +absolute + + + +0.01 +smooth + +8.536480684691146 +47.350474848795145 +428.95757479950686 +-190.02002356734667 +73.57305719704028 +0 +120 +absolute + + + +0.01 +smooth + +8.536479827869513 +47.350474806859545 +428.9576083574508 +-190.07033269579023 +73.58172590532486 +0 +120 +absolute + + + +0.01 +smooth + +8.536478971048744 +47.3504747639926 +428.9576414391031 +-190.12054468614832 +73.59041006637104 +0 +120 +absolute + + + +0.01 +smooth + +8.536478114236315 +47.350474720228156 +428.9576740260195 +-190.17065910967216 +73.59910954748067 +0 +120 +absolute + + + +0.01 +smooth + +8.536477257439707 +47.3504746756001 +428.9577060997558 +-190.2206755376127 +73.60782421595559 +0 +120 +absolute + + + +0.01 +smooth + +8.536476400666398 +47.35047463014229 +428.95773764186805 +-190.2705935412212 +73.61655393909776 +0 +120 +absolute + + + +0.01 +smooth + +8.536475543923864 +47.35047458388859 +428.95776863391166 +-190.32041269174852 +73.62529858420893 +0 +120 +absolute + + + +0.01 +smooth + +8.536474687219588 +47.3504745368729 +428.95779905744274 +-190.37013256044585 +73.63405801859102 +0 +120 +absolute + + + +0.01 +smooth + +8.536473830561048 +47.35047448912906 +428.95782889401687 +-190.41975271856424 +73.64283210954589 +0 +120 +absolute + + + +0.01 +smooth + +8.536472973955721 +47.35047444069098 +428.95785812519 +-190.4692727373548 +73.65162072437539 +0 +120 +absolute + + + +0.01 +smooth + +8.536472117411087 +47.3504743915925 +428.957886732518 +-190.51869218806863 +73.66042373038141 +0 +120 +absolute + + + +0.01 +smooth + +8.536471260934626 +47.3504743418675 +428.9579146975565 +-190.56801064195676 +73.6692409948658 +0 +120 +absolute + + + +0.01 +smooth + +8.536470404533816 +47.35047429154986 +428.9579420018615 +-190.61722767027032 +73.67807238513042 +0 +120 +absolute + + + +0.01 +smooth + +8.536469548216136 +47.350474240673435 +428.95796862698865 +-190.6663428442603 +73.68691776847714 +0 +120 +absolute + + + +0.01 +smooth + +8.536468691989064 +47.35047418927211 +428.95799455449395 +-190.71535573517792 +73.69577701220783 +0 +120 +absolute + + + +0.01 +smooth + +8.53646783586008 +47.35047413737976 +428.9580197659329 +-190.76426591427412 +73.70464998362435 +0 +120 +absolute + + + +0.01 +smooth + +8.536466979836662 +47.35047408503024 +428.95804424286155 +-190.81307295280004 +73.71353655002855 +0 +120 +absolute + + + +0.01 +smooth + +8.53646612392629 +47.35047403225745 +428.9580679668357 +-190.8617764220068 +73.72243657872231 +0 +120 +absolute + + + +0.01 +smooth + +8.536465268136443 +47.35047397909523 +428.9580909194111 +-190.91037589314544 +73.73134993700751 +0 +120 +absolute + + + +0.01 +smooth + +8.5364644124746 +47.35047392557747 +428.95811308214354 +-190.95887093746705 +73.74027649218598 +0 +120 +absolute + + + +0.01 +smooth + +8.536463556948238 +47.35047387173803 +428.9581344365888 +-191.00726112622272 +73.74921611155962 +0 +120 +absolute + + + +0.01 +smooth + +8.536462701564837 +47.35047381761079 +428.9581549643028 +-191.05554603066355 +73.75816866243026 +0 +120 +absolute + + + +0.01 +smooth + +8.536461846331875 +47.35047376322963 +428.9581746468413 +-191.10372522204057 +73.76713401209979 +0 +120 +absolute + + + +0.01 +smooth + +8.536460991256835 +47.35047370862841 +428.95819346576013 +-191.15179827160486 +73.77611202787006 +0 +120 +absolute + + + +0.01 +smooth + +8.53646013634719 +47.35047365384099 +428.958211402615 +-191.19976475060756 +73.78510257704295 +0 +120 +absolute + + + +0.01 +smooth + +8.536459281610423 +47.350473598901274 +428.9582284389618 +-191.2476242302997 +73.7941055269203 +0 +120 +absolute + + + +0.01 +smooth + +8.536458427054011 +47.35047354384311 +428.95824455635636 +-191.29537628193233 +73.803120744804 +0 +120 +absolute + + + +0.01 +smooth + +8.536457572685432 +47.35047348870038 +428.9582597363544 +-191.3430204767566 +73.8121480979959 +0 +120 +absolute + + + +0.01 +smooth + +8.53645671851217 +47.35047343350695 +428.95827396051186 +-191.3905563860236 +73.82118745379788 +0 +120 +absolute + + + +0.01 +smooth + +8.536455864541697 +47.350473378296684 +428.95828721038436 +-191.43798358098434 +73.83023867951177 +0 +120 +absolute + + + +0.01 +smooth + +8.536455010781498 +47.35047332310347 +428.95829946752787 +-191.48530163288999 +73.83930164243947 +0 +120 +absolute + + + +0.01 +smooth + +8.536454157239048 +47.35047326796117 +428.95831071349824 +-191.5325101129916 +73.84837620988283 +0 +120 +absolute + + + +0.01 +smooth + +8.536453303921826 +47.350473212903665 +428.9583209298511 +-191.57960859254013 +73.85746224914374 +0 +120 +absolute + + + +0.01 +smooth + +8.536452450837313 +47.350473157964814 +428.9583300981423 +-191.6265966427868 +73.86655962752401 +0 +120 +absolute + + + +0.01 +smooth + +8.536451597992986 +47.350473103178494 +428.9583381999278 +-191.6734738349827 +73.87566821232554 +0 +120 +absolute + + + +0.01 +smooth + +8.536450745396326 +47.35047304857858 +428.95834521676323 +-191.72023974037887 +73.8847878708502 +0 +120 +absolute + + + +0.01 +smooth + +8.536449893054812 +47.35047299419894 +428.9583511302044 +-191.76689393022633 +73.89391847039985 +0 +120 +absolute + + + +0.01 +smooth + +8.536449040975919 +47.350472940073445 +428.9583559218073 +-191.81343597577626 +73.90305987827635 +0 +120 +absolute + + + +0.01 +smooth + +8.536448189167128 +47.35047288623597 +428.9583595731276 +-191.8598654482797 +73.91221196178155 +0 +120 +absolute + + + +0.01 +smooth + +8.53644733763592 +47.35047283272039 +428.9583620657212 +-191.9061819189877 +73.92137458821735 +0 +120 +absolute + + + +0.01 +smooth + +8.53644648638977 +47.35047277956057 +428.9583633811437 +-191.9523849591514 +73.93054762488556 +0 +120 +absolute + + + +0.01 +smooth + +8.536445635408638 +47.35047272667294 +428.9583635697579 +-191.9984769288263 +73.9397315216572 +0 +120 +absolute + + + +0.01 +smooth + +8.536444784445392 +47.35047267299871 +428.958363257021 +-192.04448318183074 +73.94893153903153 +0 +120 +absolute + + + +0.01 +smooth + +8.536443933445486 +47.35047261828915 +428.9583626007098 +-192.0904095243017 +73.95814886784852 +0 +120 +absolute + + + +0.01 +smooth + +8.536443082416309 +47.35047256255865 +428.9583616051522 +-192.136255485018 +73.96738338898193 +0 +120 +absolute + + + +0.01 +smooth + +8.536442231365228 +47.350472505821514 +428.9583602746762 +-192.18202059275816 +73.97663498330557 +0 +120 +absolute + + + +0.01 +smooth + +8.536441380299644 +47.35047244809211 +428.9583586136099 +-192.22770437630098 +73.9859035316933 +0 +120 +absolute + + + +0.01 +smooth + +8.536440529226923 +47.35047238938481 +428.95835662628105 +-192.27330636442508 +73.99518891501887 +0 +120 +absolute + + + +0.01 +smooth + +8.53643967815445 +47.350472329713945 +428.95835431701767 +-192.31882608590914 +74.00449101415606 +0 +120 +absolute + + + +0.01 +smooth + +8.53643882708961 +47.35047226909388 +428.9583516901477 +-192.36426306953177 +74.01380970997872 +0 +120 +absolute + + + +0.01 +smooth + +8.53643797603978 +47.35047220753896 +428.95834874999946 +-192.40961684407173 +74.02314488336066 +0 +120 +absolute + + + +0.01 +smooth + +8.536437125012343 +47.350472145063534 +428.9583455009004 +-192.45488693830762 +74.03249641517567 +0 +120 +absolute + + + +0.01 +smooth + +8.536436274014676 +47.35047208168197 +428.9583419471788 +-192.5000728810182 +74.04186418629753 +0 +120 +absolute + + + +0.01 +smooth + +8.536435423054163 +47.35047201740859 +428.95833809316235 +-192.54517420098202 +74.05124807760005 +0 +120 +absolute + + + +0.01 +smooth + +8.536434572138186 +47.35047195225778 +428.95833394317924 +-192.59019042697787 +74.06064796995706 +0 +120 +absolute + + + +0.01 +smooth + +8.536433721274124 +47.35047188624388 +428.9583295015575 +-192.6351210877843 +74.07006374424236 +0 +120 +absolute + + + +0.01 +smooth + +8.536432870469355 +47.35047181938121 +428.95832477262474 +-192.67996571218 +74.07949528132967 +0 +120 +absolute + + + +0.01 +smooth + +8.536432019731269 +47.35047175168419 +428.95831976070923 +-192.72472382894378 +74.08894246209294 +0 +120 +absolute + + + +0.01 +smooth + +8.536431169067239 +47.35047168316712 +428.9583144701389 +-192.76939496685424 +74.09840516740587 +0 +120 +absolute + + + +0.01 +smooth + +8.536430318484646 +47.35047161384438 +428.9583089052416 +-192.8139786546899 +74.1078832781423 +0 +120 +absolute + + + +0.01 +smooth + +8.53642946799088 +47.3504715437303 +428.9583030703455 +-192.8584744212297 +74.11737667517605 +0 +120 +absolute + + + +0.01 +smooth + +8.53642861759331 +47.35047147283924 +428.9582969697782 +-192.90288179525206 +74.12688523938084 +0 +120 +absolute + + + +0.01 +smooth + +8.536427767299323 +47.35047140118555 +428.9582906078679 +-192.94720030553574 +74.13640885163056 +0 +120 +absolute + + + +0.01 +smooth + +8.536426917116303 +47.3504713287836 +428.9582839889428 +-192.99142948085958 +74.14594739279902 +0 +120 +absolute + + + +0.01 +smooth + +8.536426067051625 +47.35047125564771 +428.9582771173302 +-193.03556885000194 +74.15550074375993 +0 +120 +absolute + + + +0.01 +smooth + +8.53642521711267 +47.350471181792265 +428.9582699973588 +-193.0796179417417 +74.16506878538718 +0 +120 +absolute + + + +0.01 +smooth + +8.536424367306825 +47.3504711072316 +428.95826263335607 +-193.1235762848575 +74.17465139855454 +0 +120 +absolute + + + +0.01 +smooth + +8.536423517641461 +47.350471031980064 +428.95825502965 +-193.16744340812795 +74.18424846413582 +0 +120 +absolute + + + +0.01 +smooth + +8.536422668123974 +47.35047095605202 +428.9582471905689 +-193.21121884033178 +74.19385986300482 +0 +120 +absolute + + + +0.01 +smooth + +8.536421818761731 +47.35047087946183 +428.9582391204404 +-193.2549021102477 +74.20348547603535 +0 +120 +absolute + + + +0.01 +smooth + +8.536420969562117 +47.3504708022238 +428.9582308235925 +-193.29849274665423 +74.21312518410119 +0 +120 +absolute + + + +0.01 +smooth + +8.536420120532519 +47.35047072435235 +428.9582223043534 +-193.34199027833023 +74.2227788680762 +0 +120 +absolute + + + +0.01 +smooth + +8.53641927168031 +47.350470645861776 +428.9582135670506 +-193.38539423405416 +74.2324464088341 +0 +120 +absolute + + + +0.01 +smooth + +8.536418423012874 +47.350470566766454 +428.95820461601267 +-193.42870414260491 +74.24212768724877 +0 +120 +absolute + + + +0.01 +smooth + +8.536417574537595 +47.35047048708074 +428.95819545556714 +-193.471919532761 +74.25182258419399 +0 +120 +absolute + + + +0.01 +smooth + +8.536416726261846 +47.35047040681897 +428.95818609004203 +-193.51503993330113 +74.26153098054353 +0 +120 +absolute + + + +0.01 +smooth + +8.536415878193015 +47.350470325995516 +428.9581765237654 +-193.558064873004 +74.27125275717123 +0 +120 +absolute + + + +0.01 +smooth + +8.536415030338482 +47.35047024462471 +428.9581667610651 +-193.60099388064828 +74.28098779495087 +0 +120 +absolute + + + +0.01 +smooth + +8.536414182705625 +47.35047016272092 +428.9581568062692 +-193.6438264850126 +74.29073597475629 +0 +120 +absolute + + + +0.01 +smooth + +8.536413335301829 +47.35047008029851 +428.9581466637057 +-193.68656221487572 +74.30049717746125 +0 +120 +absolute + + + +0.01 +smooth + +8.536412488134472 +47.35046999737179 +428.9581363377024 +-193.72920059901617 +74.31027128393957 +0 +120 +absolute + + + +0.01 +smooth + +8.536411641210936 +47.35046991395515 +428.95812583258737 +-193.77174116621276 +74.32005817506507 +0 +120 +absolute + + + +0.01 +smooth + +8.5364107945386 +47.35046983006292 +428.95811515268855 +-193.81418344524408 +74.32985773171154 +0 +120 +absolute + + + +0.01 +smooth + +8.53640994812485 +47.350469745709475 +428.95810430233394 +-193.85652696488884 +74.33966983475277 +0 +120 +absolute + + + +0.01 +smooth + +8.536409101977064 +47.35046966090915 +428.95809328585136 +-193.89877125392564 +74.34949436506258 +0 +120 +absolute + + + +0.01 +smooth + +8.536408256102622 +47.3504695756763 +428.95808210756894 +-193.94091584113323 +74.35933120351478 +0 +120 +absolute + + + +0.01 +smooth + +8.536407410508902 +47.350469490025276 +428.95807077181456 +-193.9829602552903 +74.36918023098316 +0 +120 +absolute + + + +0.01 +smooth + +8.536406565203293 +47.350469403970436 +428.9580592829162 +-194.02490402517543 +74.37904132834153 +0 +120 +absolute + + + +0.01 +smooth + +8.53640572019317 +47.35046931752613 +428.9580476452019 +-194.06674667956736 +74.38891437646369 +0 +120 +absolute + + + +0.01 +smooth + +8.536404875485914 +47.35046923070671 +428.9580358629994 +-194.10848774724468 +74.39879925622344 +0 +120 +absolute + + + +0.01 +smooth + +8.53640403108891 +47.350469143526524 +428.9580239406368 +-194.1501267569862 +74.40869584849459 +0 +120 +absolute + + + +0.01 +smooth + +8.536403187009537 +47.35046905599993 +428.9580118824422 +-194.19166323757042 +74.41860403415093 +0 +120 +absolute + + + +0.01 +smooth + +8.536402343255173 +47.350468968141286 +428.95799969274333 +-194.23309671777616 +74.42852369406629 +0 +120 +absolute + + + +0.01 +smooth + +8.536401499833204 +47.350468879964936 +428.95798737586824 +-194.27442672638205 +74.43845470911444 +0 +120 +absolute + + + +0.01 +smooth + +8.536400656751008 +47.35046879148523 +428.957974936145 +-194.31565279216667 +74.44839696016922 +0 +120 +absolute + + + +0.01 +smooth + +8.536399814015965 +47.35046870271652 +428.9579623779013 +-194.3567744439088 +74.45835032810439 +0 +120 +absolute + + + +0.01 +smooth + +8.536398971635458 +47.35046861367317 +428.9579497054654 +-194.39779121038706 +74.46831469379379 +0 +120 +absolute + + + +0.01 +smooth + +8.536398129616869 +47.35046852436952 +428.9579369231651 +-194.43870262038007 +74.4782899381112 +0 +120 +absolute + + + +0.01 +smooth + +8.536397287967574 +47.35046843481992 +428.9579240353284 +-194.47950820266666 +74.48827594193045 +0 +120 +absolute + + + +0.01 +smooth + +8.536396446694962 +47.35046834503874 +428.95791104628324 +-194.52020748602538 +74.49827258612532 +0 +120 +absolute + + + +0.01 +smooth + +8.536395605806405 +47.35046825504031 +428.9578979603576 +-194.56079999923492 +74.50827975156963 +0 +120 +absolute + + + +0.01 +smooth + +8.53639476530929 +47.35046816483901 +428.95788478187944 +-194.60128527107392 +74.51829731913716 +0 +120 +absolute + + + +0.01 +smooth + +8.536393925210994 +47.35046807444916 +428.95787151517675 +-194.64166283032114 +74.52832516970174 +0 +120 +absolute + + + +0.01 +smooth + +8.536393085518906 +47.35046798388514 +428.95785816457743 +-194.68193220575517 +74.53836318413715 +0 +120 +absolute + + + +0.01 +smooth + +8.536392246240396 +47.35046789316128 +428.9578447344095 +-194.7220929261547 +74.54841124331723 +0 +120 +absolute + + + +0.01 +smooth + +8.536391407382851 +47.350467802291945 +428.9578312290009 +-194.76214452029836 +74.55846922811574 +0 +120 +absolute + + + +0.01 +smooth + +8.536390568953653 +47.350467711291486 +428.9578176526795 +-194.80208651696495 +74.5685370194065 +0 +120 +absolute + + + +0.01 +smooth + +8.536389730960181 +47.35046762017425 +428.9578040097735 +-194.84191844493304 +74.5786144980633 +0 +120 +absolute + + + +0.01 +smooth + +8.536388893409814 +47.3504675289546 +428.9577903046107 +-194.88163983298128 +74.58870154495997 +0 +120 +absolute + + + +0.01 +smooth + +8.536388056309937 +47.35046743764688 +428.95777654151897 +-194.9212502098884 +74.59879804097032 +0 +120 +absolute + + + +0.01 +smooth + +8.536387219660996 +47.35046734625132 +428.95776270573924 +-194.96074985943102 +74.608903996974 +0 +120 +absolute + + + +0.01 +smooth + +8.536386383241561 +47.350467254314765 +428.9577481748942 +-195.00016321678376 +74.61902358472945 +0 +120 +absolute + + + +0.01 +smooth + +8.536385546948056 +47.35046716162082 +428.95773265972866 +-195.03950185891975 +74.62915876777322 +0 +120 +absolute + + + +0.01 +smooth + +8.536384710787823 +47.350467068178475 +428.9577161777929 +-195.07876527905125 +74.63930942985442 +0 +120 +absolute + + + +0.01 +smooth + +8.536383874768207 +47.35046697399676 +428.9576987466376 +-195.11795297039035 +74.64947545472205 +0 +120 +absolute + + + +0.01 +smooth + +8.536383038896554 +47.35046687908469 +428.95768038381306 +-195.1570644261492 +74.65965672612514 +0 +120 +absolute + + + +0.01 +smooth + +8.536382203180215 +47.35046678345132 +428.9576611068699 +-195.19609913954025 +74.66985312781273 +0 +120 +absolute + + + +0.01 +smooth + +8.536381367626534 +47.35046668710565 +428.9576409333588 +-195.23505660377555 +74.68006454353386 +0 +120 +absolute + + + +0.01 +smooth + +8.536380532242857 +47.35046659005674 +428.95761988082995 +-195.27393631206732 +74.69029085703754 +0 +120 +absolute + + + +0.01 +smooth + +8.536379697036523 +47.350466492313544 +428.9575979668339 +-195.31273775762776 +74.70053195207277 +0 +120 +absolute + + + +0.01 +smooth + +8.53637886201489 +47.35046639388517 +428.95757520892136 +-195.35146043366916 +74.71078771238868 +0 +120 +absolute + + + +0.01 +smooth + +8.536378027185297 +47.3504662947806 +428.9575516246428 +-195.3901038334038 +74.72105802173422 +0 +120 +absolute + + + +0.01 +smooth + +8.536377192555088 +47.35046619500886 +428.9575272315483 +-195.42866745004366 +74.73134276385844 +0 +120 +absolute + + + +0.01 +smooth + +8.536376358131617 +47.350466094578984 +428.957502047189 +-195.46715077680116 +74.7416418225104 +0 +120 +absolute + + + +0.01 +smooth + +8.536375523922223 +47.350465993500016 +428.9574760891151 +-195.50555330688843 +74.75195508143909 +0 +120 +absolute + + + +0.01 +smooth + +8.536374689934256 +47.35046589178095 +428.9574493748771 +-195.5438745335177 +74.7622824243936 +0 +120 +absolute + + + +0.01 +smooth + +8.536373856175063 +47.35046578943082 +428.95742192202556 +-195.5821139499012 +74.77262373512288 +0 +120 +absolute + + + +0.01 +smooth + +8.536373022651983 +47.350465686458655 +428.95739374811086 +-195.62027104925116 +74.78297889737601 +0 +120 +absolute + + + +0.01 +smooth + +8.536372189372372 +47.35046558287349 +428.9573648706838 +-195.6583453247797 +74.79334779490203 +0 +120 +absolute + + + +0.01 +smooth + +8.53637135634357 +47.35046547868434 +428.9573353072946 +-195.69633626969917 +74.80373031144997 +0 +120 +absolute + + + +0.01 +smooth + +8.536370523572922 +47.35046537390022 +428.9573050754937 +-195.73424337722167 +74.81412633076881 +0 +120 +absolute + + + +0.01 +smooth + +8.536369691067778 +47.350465268530186 +428.95727419283196 +-195.77206614055947 +74.82453573660764 +0 +120 +absolute + + + +0.01 +smooth + +8.536368858835482 +47.35046516258325 +428.9572426768598 +-195.80980405292482 +74.8349584127155 +0 +120 +absolute + + + +0.01 +smooth + +8.536368026883379 +47.350465056068394 +428.95721054512734 +-195.84745660752978 +74.84539424284135 +0 +120 +absolute + + + +0.01 +smooth + +8.53636719521882 +47.35046494899473 +428.95717781518545 +-195.88502329758677 +74.85584311073431 +0 +120 +absolute + + + +0.01 +smooth + +8.536366363849147 +47.35046484137121 +428.9571445045847 +-195.92250361630786 +74.86630490014333 +0 +120 +absolute + + + +0.01 +smooth + +8.536365532781705 +47.35046473320689 +428.9571106308752 +-195.9598970569053 +74.87677949481748 +0 +120 +absolute + + + +0.01 +smooth + +8.536364702023846 +47.350464624510806 +428.95707621160795 +-195.9972031125914 +74.88726677850582 +0 +120 +absolute + + + +0.01 +smooth + +8.536363871582909 +47.35046451529196 +428.9570412643331 +-196.03442127657823 +74.89776663495734 +0 +120 +absolute + + + +0.01 +smooth + +8.536363041466243 +47.350464405559386 +428.95700580660133 +-196.07155104207808 +74.90827894792108 +0 +120 +absolute + + + +0.01 +smooth + +8.536362211681197 +47.35046429532212 +428.95696985596305 +-196.1085919023032 +74.91880360114608 +0 +120 +absolute + + + +0.01 +smooth + +8.53636138223511 +47.350464184589164 +428.95693342996873 +-196.14554335046566 +74.92934047838135 +0 +120 +absolute + + + +0.01 +smooth + +8.536360553135337 +47.35046407336957 +428.9568965461691 +-196.1824048797778 +74.93988946337596 +0 +120 +absolute + + + +0.01 +smooth + +8.53635972438922 +47.35046396167236 +428.9568592221144 +-196.21917598345192 +74.95045043987894 +0 +120 +absolute + + + +0.01 +smooth + +8.5363588960041 +47.350463849506525 +428.95682147535524 +-196.25585615469996 +74.96102329163924 +0 +120 +absolute + + + +0.01 +smooth + +8.536358067987331 +47.35046373688113 +428.9567833234422 +-196.29244488673442 +74.97160790240602 +0 +120 +absolute + + + +0.01 +smooth + +8.536357240346256 +47.3504636238052 +428.9567447839258 +-196.32894167276731 +74.98220415592822 +0 +120 +absolute + + + +0.01 +smooth + +8.536356413088221 +47.350463510287724 +428.9567058743563 +-196.36534600601095 +74.99281193595488 +0 +120 +absolute + + + +0.01 +smooth + +8.536355586220573 +47.35046339633778 +428.9566666122844 +-196.40165737967757 +75.00343112623506 +0 +120 +absolute + + + +0.01 +smooth + +8.536354759750655 +47.35046328196435 +428.95662701526066 +-196.4378752869793 +75.0140616105178 +0 +120 +absolute + + + +0.01 +smooth + +8.536353933685819 +47.35046316717647 +428.9565871008355 +-196.47399922112845 +75.02470327255209 +0 +120 +absolute + + + +0.01 +smooth + +8.536353108033405 +47.35046305198319 +428.95654688655947 +-196.5100286753371 +75.03535599608699 +0 +120 +absolute + + + +0.01 +smooth + +8.536352282800761 +47.3504629363935 +428.9565063899829 +-196.54596314281764 +75.04601966487152 +0 +120 +absolute + + + +0.01 +smooth + +8.536351457995234 +47.35046282041645 +428.9564656286566 +-196.58180211678217 +75.05669416265472 +0 +120 +absolute + + + +0.01 +smooth + +8.536350633624172 +47.35046270406106 +428.95642462013086 +-196.61754509044295 +75.06737937318562 +0 +120 +absolute + + + +0.01 +smooth + +8.536349809694917 +47.350462587336345 +428.95638338195624 +-196.6531915570121 +75.07807518021326 +0 +120 +absolute + + + +0.01 +smooth + +8.536348986214819 +47.35046247025135 +428.9563419316833 +-196.68874100970197 +75.08878146748664 +0 +120 +absolute + + + +0.01 +smooth + +8.53634816319122 +47.35046235281507 +428.9563002868624 +-196.7241929417247 +75.09949811875482 +0 +120 +absolute + + + +0.01 +smooth + +8.536347340631469 +47.350462235036574 +428.95625846504413 +-196.7595468462925 +75.11022501776682 +0 +120 +absolute + + + +0.01 +smooth + +8.536346518542912 +47.350462116924845 +428.95621648377914 +-196.7948022166176 +75.1209620482717 +0 +120 +absolute + + + +0.01 +smooth + +8.536345696932894 +47.35046199848895 +428.95617436061764 +-196.82995854591223 +75.13170909401846 +0 +120 +absolute + + + +0.01 +smooth + +8.536344875808762 +47.35046187973788 +428.95613211311047 +-196.86501532738862 +75.14246603875614 +0 +120 +absolute + + + +0.01 +smooth + +8.53634405517786 +47.35046176068066 +428.9560897588078 +-196.89997205425894 +75.15323276623377 +0 +120 +absolute + + + +0.01 +smooth + +8.536343235047537 +47.35046164132635 +428.95604731526043 +-196.93482821973544 +75.16400916020038 +0 +120 +absolute + + + +0.01 +smooth + +8.536342415425139 +47.35046152168395 +428.9560048000187 +-196.96958331703027 +75.174795104405 +0 +120 +absolute + + + +0.01 +smooth + +8.53634159631801 +47.35046140176248 +428.9559622306332 +-197.0042368393557 +75.18559048259667 +0 +120 +absolute + + + +0.01 +smooth + +8.536340777733498 +47.35046128157098 +428.9559196246543 +-197.03878827992395 +75.19639517852443 +0 +120 +absolute + + + +0.01 +smooth + +8.536339959678946 +47.350461161118474 +428.95587699963266 +-197.07323713194722 +75.20720907593729 +0 +120 +absolute + + + +0.01 +smooth + +8.536339142161705 +47.35046104041398 +428.9558343731187 +-197.10758288863775 +75.21803205858428 +0 +120 +absolute + + + +0.01 +smooth + +8.536338325189117 +47.350460919466535 +428.955791762663 +-197.1418250432077 +75.22886401021447 +0 +120 +absolute + + + +0.01 +smooth + +8.53633750876853 +47.350460798285155 +428.955749185816 +-197.17596308886934 +75.23970481457684 +0 +120 +absolute + + + +0.01 +smooth + +8.536336692907287 +47.350460676878875 +428.95570666012816 +-197.20999651883483 +75.25055435542046 +0 +120 +absolute + + + +0.01 +smooth + +8.53633587761274 +47.3504605552567 +428.95566420315015 +-197.24392482631643 +75.26141251649435 +0 +120 +absolute + + + +0.01 +smooth + +8.536335062892231 +47.35046043342768 +428.95562183243237 +-197.27774750452636 +75.27227918154753 +0 +120 +absolute + + + +0.01 +smooth + +8.536334248753107 +47.35046031140082 +428.9555795655252 +-197.31146404667678 +75.28315423432905 +0 +120 +absolute + + + +0.01 +smooth + +8.536333435202714 +47.35046018918517 +428.95553741997935 +-197.34507394597995 +75.29403755858792 +0 +120 +absolute + + + +0.01 +smooth + +8.536332622248397 +47.35046006678974 +428.9554954133453 +-197.3785766956481 +75.30492903807321 +0 +120 +absolute + + + +0.01 +smooth + +8.536331809897503 +47.35045994422355 +428.9554535631736 +-197.4119717888934 +75.31582855653389 +0 +120 +absolute + + + +0.01 +smooth + +8.536330998157382 +47.35045982149564 +428.9554118870146 +-197.44525871892807 +75.32673599771904 +0 +120 +absolute + + + +0.01 +smooth + +8.536330187035373 +47.350459698615026 +428.9553704024188 +-197.47843697896434 +75.33765124537769 +0 +120 +absolute + + + +0.01 +smooth + +8.536329376360598 +47.350459575365555 +428.9553287883907 +-197.51152630584934 +75.3485772970821 +0 +120 +absolute + + + +0.01 +smooth + +8.53632856596218 +47.350459451529495 +428.95528671725435 +-197.544546418471 +75.35951714644881 +0 +120 +absolute + + + +0.01 +smooth + +8.536327755847493 +47.35045932711358 +428.9552441965407 +-197.5774967831033 +75.3704706712932 +0 +120 +absolute + + + +0.01 +smooth + +8.536326946023904 +47.35045920212448 +428.9552012337801 +-197.6103768660198 +75.38143774943069 +0 +120 +absolute + + + +0.01 +smooth + +8.536326136498776 +47.35045907656892 +428.9551578365032 +-197.64318613349437 +75.39241825867663 +0 +120 +absolute + + + +0.01 +smooth + +8.536325327279478 +47.35045895045355 +428.9551140122401 +-197.67592405180062 +75.4034120768464 +0 +120 +absolute + + + +0.01 +smooth + +8.536324518373375 +47.350458823785125 +428.95506976852204 +-197.70859008721243 +75.41441908175541 +0 +120 +absolute + + + +0.01 +smooth + +8.53632370978784 +47.350458696570314 +428.95502511287924 +-197.7411837060035 +75.42543915121905 +0 +120 +absolute + + + +0.01 +smooth + +8.53632290153023 +47.3504585688158 +428.95498005284225 +-197.77370437444748 +75.4364721630527 +0 +120 +absolute + + + +0.01 +smooth + +8.536322093607925 +47.35045844052832 +428.9549345959418 +-197.80615155881827 +75.44751799507178 +0 +120 +absolute + + + +0.01 +smooth + +8.536321286028281 +47.35045831171456 +428.9548887497083 +-197.83852472538956 +75.45857652509162 +0 +120 +absolute + + + +0.01 +smooth + +8.536320478798666 +47.35045818238121 +428.95484252167216 +-197.870823340435 +75.46964763092764 +0 +120 +absolute + + + +0.01 +smooth + +8.53631967192646 +47.35045805253499 +428.95479591936436 +-197.90304687022854 +75.48073119039526 +0 +120 +absolute + + + +0.01 +smooth + +8.536318865419013 +47.350457922182535 +428.954748950315 +-197.9351947810437 +75.49182708130981 +0 +120 +absolute + + + +0.01 +smooth + +8.536318059283701 +47.350457791330626 +428.95470162205504 +-197.96726653915434 +75.50293518148673 +0 +120 +absolute + + + +0.01 +smooth + +8.536317253527892 +47.35045765998592 +428.95465394211476 +-197.99926161083422 +75.51405536874138 +0 +120 +absolute + + + +0.01 +smooth + +8.536316448158948 +47.3504575281551 +428.9546059180247 +-198.03117946235702 +75.52518752088915 +0 +120 +absolute + + + +0.01 +smooth + +8.536315643184242 +47.3504573958449 +428.9545575573157 +-198.06301955999655 +75.53633151574542 +0 +120 +absolute + + + +0.01 +smooth + +8.536314838611139 +47.350457263062026 +428.9545088675182 +-198.09478137002657 +75.54748723112563 +0 +120 +absolute + + + +0.01 +smooth + +8.536314034446997 +47.35045712981313 +428.95445985616243 +-198.12646435872063 +75.55865454484507 +0 +120 +absolute + + + +0.01 +smooth + +8.536313230699202 +47.350456996104946 +428.9544105307795 +-198.15806799235278 +75.56983333471923 +0 +120 +absolute + + + +0.01 +smooth + +8.536312427375105 +47.350456861944146 +428.95436089889955 +-198.18959173719657 +75.58102347856347 +0 +120 +absolute + + + +0.01 +smooth + +8.536311624482076 +47.35045672733745 +428.9543109680533 +-198.22103505952575 +75.59222485419312 +0 +120 +absolute + + + +0.01 +smooth + +8.53631082202749 +47.350456592291565 +428.9542607457715 +-198.2523974256142 +75.60343733942365 +0 +120 +absolute + + + +0.01 +smooth + +8.536310020018705 +47.35045645681317 +428.95421023958426 +-198.28367830173545 +75.6146608120704 +0 +120 +absolute + + + +0.01 +smooth + +8.536309218463094 +47.35045632090897 +428.9541594570225 +-198.3148771541634 +75.62589514994876 +0 +120 +absolute + + + +0.01 +smooth + +8.536308417368021 +47.350456184585674 +428.95410840561664 +-198.34599344917183 +75.63714023087417 +0 +120 +absolute + + + +0.01 +smooth + +8.536307616740851 +47.350456047849946 +428.95405709289713 +-198.37702665303428 +75.64839593266191 +0 +120 +absolute + + + +0.01 +smooth + +8.53630681658896 +47.35045591070852 +428.9540055263949 +-198.40797623202477 +75.6596621331275 +0 +120 +absolute + + + +0.01 +smooth + +8.536306016919706 +47.350455773168086 +428.9539537136401 +-198.4388416524168 +75.67093871008626 +0 +120 +absolute + + + +0.01 +smooth + +8.536305217740457 +47.350455635235335 +428.9539016621635 +-198.46962238048428 +75.68222554135356 +0 +120 +absolute + + + +0.01 +smooth + +8.536304419058586 +47.35045549691698 +428.95384937949564 +-198.5003178825009 +75.69352250474482 +0 +120 +absolute + + + +0.01 +smooth + +8.536303620881457 +47.350455358219705 +428.9537968731671 +-198.53092762474034 +75.70482947807544 +0 +120 +absolute + + + +0.01 +smooth + +8.536302823216433 +47.350455219150206 +428.9537441507083 +-198.56145107347646 +75.71614633916074 +0 +120 +absolute + + + +0.01 +smooth + +8.536302026070887 +47.3504550797152 +428.95369121965 +-198.59188769498297 +75.72747296581622 +0 +120 +absolute + + + +0.01 +smooth + +8.536301229452185 +47.35045493992138 +428.9536380875227 +-198.62223695553357 +75.73880923585719 +0 +120 +absolute + + + +0.01 +smooth + +8.53630043336769 +47.350454799775434 +428.9535847618568 +-198.65249832140202 +75.75015502709904 +0 +120 +absolute + + + +0.01 +smooth + +8.536299637824774 +47.35045465928407 +428.95353125018306 +-198.68267125886211 +75.76151021735718 +0 +120 +absolute + + + +0.01 +smooth + +8.536298842830801 +47.35045451845398 +428.95347756003196 +-198.7127552341875 +75.772874684447 +0 +120 +absolute + + + +0.01 +smooth + +8.53629804839314 +47.35045437729187 +428.953423698934 +-198.74274971365205 +75.78424830618387 +0 +120 +absolute + + + +0.01 +smooth + +8.536297254519157 +47.35045423580443 +428.9533696744197 +-198.7726541635294 +75.7956309603832 +0 +120 +absolute + + + +0.01 +smooth + +8.536296461216219 +47.35045409399836 +428.9533154940199 +-198.80246805009335 +75.80702252486037 +0 +120 +absolute + + + +0.01 +smooth + +8.536295668491695 +47.35045395188037 +428.95326116526485 +-198.83219083961762 +75.81842287743078 +0 +120 +absolute + + + +0.01 +smooth + +8.53629487635295 +47.35045380945715 +428.9532066956853 +-198.861821998376 +75.82983189590979 +0 +120 +absolute + + + +0.01 +smooth + +8.536294084807349 +47.3504536667354 +428.9531520928117 +-198.8913609926422 +75.8412494581128 +0 +120 +absolute + + + +0.01 +smooth + +8.536293293862265 +47.35045352372181 +428.95309736417465 +-198.92080728868996 +75.85267544185523 +0 +120 +absolute + + + +0.01 +smooth + +8.536292503525061 +47.3504533804231 +428.95304251730465 +-198.95016035279303 +75.86410972495241 +0 +120 +absolute + + + +0.01 +smooth + +8.536291713803106 +47.350453236845944 +428.9529875597325 +-198.97941965122516 +75.87555218521979 +0 +120 +absolute + + + +0.01 +smooth + +8.536290924703763 +47.35045309299706 +428.9529324989884 +-199.00858465026013 +75.88700270047272 +0 +120 +absolute + + + +0.01 +smooth + +8.536290136234404 +47.35045294888313 +428.9528773426032 +-199.03765481617162 +75.8984611485266 +0 +120 +absolute + + + +0.01 +smooth + +8.536289348402397 +47.350452804510866 +428.9528220981073 +-199.06662961523347 +75.9099274071968 +0 +120 +absolute + + + +0.01 +smooth + +8.536288561215104 +47.350452659886955 +428.95276677303127 +-199.09550851371927 +75.92140135429875 +0 +120 +absolute + + + +0.01 +smooth + +8.536287774679893 +47.35045251501812 +428.9527113749058 +-199.12429097790286 +75.93288286764778 +0 +120 +absolute + + + +0.01 +smooth + +8.536286988804134 +47.35045236991103 +428.9526559112613 +-199.15297647405805 +75.94437182505933 +0 +120 +absolute + + + +0.01 +smooth + +8.536286203595193 +47.35045222457241 +428.9526003896284 +-199.18156446845848 +75.95586810434878 +0 +120 +absolute + + + +0.01 +smooth + +8.536285419060437 +47.35045207900893 +428.9525448175376 +-199.2100544273779 +75.96737158333151 +0 +120 +absolute + + + +0.01 +smooth + +8.536284635207233 +47.350451933227305 +428.9524892025195 +-199.23844581709014 +75.9788821398229 +0 +120 +absolute + + + +0.01 +smooth + +8.536283852042947 +47.350451787234235 +428.9524335521047 +-199.2667381038689 +75.99039965163836 +0 +120 +absolute + + + +0.01 +smooth + +8.53628306957495 +47.350451641036415 +428.9523778738238 +-199.2949307539879 +76.00192399659325 +0 +120 +absolute + + + +0.01 +smooth + +8.536282287810602 +47.35045149464055 +428.9523221752071 +-199.3230232337209 +76.01345505250298 +0 +120 +absolute + + + +0.01 +smooth + +8.536281506757275 +47.350451348053326 +428.95226646378546 +-199.35101500934167 +76.02499269718294 +0 +120 +absolute + + + +0.01 +smooth + +8.536280726422337 +47.35045120128145 +428.9522107470892 +-199.3789055471239 +76.0365368084485 +0 +120 +absolute + + + +0.01 +smooth + +8.536279946813154 +47.350451054331614 +428.9521550326492 +-199.4066943133414 +76.04808726411505 +0 +120 +absolute + + + +0.01 +smooth + +8.536279167937092 +47.35045090721053 +428.95209932799565 +-199.43438077426788 +76.05964394199802 +0 +120 +absolute + + + +0.01 +smooth + +8.53627838980152 +47.3504507599249 +428.9520436406594 +-199.4619643961771 +76.07120671991275 +0 +120 +absolute + + + +0.01 +smooth + +8.5362776124138 +47.350450612481396 +428.9519879781708 +-199.4894446453428 +76.08277547567467 +0 +120 +absolute + + + +0.01 +smooth + +8.536276835781308 +47.350450464886734 +428.9519323480605 +-199.5168209880387 +76.0943500870991 +0 +120 +absolute + + + +0.01 +smooth + +8.536276059911401 +47.350450317147605 +428.951876757859 +-199.54409289053856 +76.10593043200149 +0 +120 +absolute + + + +0.01 +smooth + +8.536275284811454 +47.35045016927072 +428.951821215097 +-199.57125981911614 +76.11751638819722 +0 +120 +absolute + + + +0.01 +smooth + +8.536274510369509 +47.35045002115901 +428.95176563105986 +-199.5983350032064 +76.12910987045139 +0 +120 +absolute + + + +0.01 +smooth + +8.53627373634687 +47.35044987260449 +428.95170981319274 +-199.62534628538745 +76.14071495073684 +0 +120 +absolute + + + +0.01 +smooth + +8.536272962743507 +47.350449723606154 +428.95165376010425 +-199.65229397333928 +76.15233162120734 +0 +120 +absolute + + + +0.01 +smooth + +8.536272189566867 +47.35044957416945 +428.9515974763994 +-199.6791775144182 +76.16395974662035 +0 +120 +absolute + + + +0.01 +smooth + +8.53627141682439 +47.35044942429983 +428.9515409666827 +-199.70599635598055 +76.1755991917333 +0 +120 +absolute + + + +0.01 +smooth + +8.5362706445235 +47.35044927400273 +428.9514842355589 +-199.73274994538244 +76.1872498213035 +0 +120 +absolute + + + +0.01 +smooth + +8.53626987267165 +47.35044912328364 +428.9514272876328 +-199.75943772998025 +76.19891150008846 +0 +120 +absolute + + + +0.01 +smooth + +8.536269101276266 +47.350448972148 +428.9513701275089 +-199.78605915713027 +76.21058409284552 +0 +120 +absolute + + + +0.01 +smooth + +8.536268330344791 +47.35044882060126 +428.9513127597918 +-199.81261367418867 +76.22226746433208 +0 +120 +absolute + + + +0.01 +smooth + +8.536267559884658 +47.35044866864889 +428.95125518908674 +-199.83910072851185 +76.23396147930558 +0 +120 +absolute + + + +0.01 +smooth + +8.536266789903312 +47.35044851629633 +428.95119741999775 +-199.86551976745605 +76.24566600252341 +0 +120 +absolute + + + +0.01 +smooth + +8.536266020408183 +47.35044836354903 +428.95113945712995 +-199.89187023837744 +76.25738089874297 +0 +120 +absolute + + + +0.01 +smooth + +8.536265251406713 +47.35044821041246 +428.95108130508777 +-199.91815158863238 +76.26910603272167 +0 +120 +absolute + + + +0.01 +smooth + +8.536264482906333 +47.350448056892056 +428.95102296847597 +-199.94436326557712 +76.28084126921688 +0 +120 +absolute + + + +0.01 +smooth + +8.536263714914488 +47.3504479029933 +428.9509644518994 +-199.970504716568 +76.29258647298606 +0 +120 +absolute + + + +0.01 +smooth + +8.536262947438612 +47.35044774872164 +428.95090575996267 +-199.99657538896122 +76.3043415087866 +0 +120 +absolute + + + +0.01 +smooth + +8.53626218048614 +47.3504475940825 +428.95084689727025 +-200.02257473011298 +76.31610624137586 +0 +120 +absolute + + + +0.01 +smooth + +8.536261414064516 +47.35044743908139 +428.9507878684273 +-200.04850218737977 +76.32788053551133 +0 +120 +absolute + + + +0.01 +smooth + +8.536260648181171 +47.35044728372372 +428.95072867803805 +-200.07435720811765 +76.33966425595032 +0 +120 +absolute + + + +0.01 +smooth + +8.536259882843543 +47.35044712801494 +428.9506693307073 +-200.100139239683 +76.35145726745026 +0 +120 +absolute + + + +0.01 +smooth + +8.536259118059078 +47.35044697196057 +428.9506098310401 +-200.12584772943217 +76.36325943476864 +0 +120 +absolute + + + +0.01 +smooth + +8.536258353835201 +47.35044681556598 +428.95055018364064 +-200.1514821247212 +76.37507062266273 +0 +120 +absolute + + + +0.01 +smooth + +8.536257590179357 +47.350446658836674 +428.95049039311385 +-200.17704187290653 +76.38689069589 +0 +120 +absolute + + + +0.01 +smooth + +8.536256827098981 +47.35044650177811 +428.9504304640645 +-200.20252642134446 +76.39871951920792 +0 +120 +absolute + + + +0.01 +smooth + +8.536256064601508 +47.350446344395706 +428.950370401097 +-200.2279352173911 +76.41055695737376 +0 +120 +absolute + + + +0.01 +smooth + +8.536255302694382 +47.35044618669496 +428.95031020881635 +-200.2532677084029 +76.42240287514501 +0 +120 +absolute + + + +0.01 +smooth + +8.536254541385038 +47.350446028681304 +428.9502498918271 +-200.27852334173605 +76.43425713727908 +0 +120 +absolute + + + +0.01 +smooth + +8.536253780680905 +47.35044587036018 +428.95018945473385 +-200.30370156474677 +76.4461196085333 +0 +120 +absolute + + + +0.01 +smooth + +8.536253020589434 +47.35044571173708 +428.9501289021415 +-200.32880182479153 +76.45799015366518 +0 +120 +absolute + + + +0.01 +smooth + +8.536252261118053 +47.35044555281744 +428.95006823865464 +-200.35382356922634 +76.46986863743203 +0 +120 +absolute + + + +0.01 +smooth + +8.536251502274201 +47.35044539360669 +428.95000746887786 +-200.37876624540763 +76.48175492459133 +0 +120 +absolute + + + +0.01 +smooth + +8.536250744065322 +47.350445234110346 +428.94994659741616 +-200.40362930069173 +76.49364887990043 +0 +120 +absolute + + + +0.01 +smooth + +8.536249986498841 +47.3504450743338 +428.94988562887374 +-200.4284121824347 +76.50555036811673 +0 +120 +absolute + + + +0.01 +smooth + +8.536249229582207 +47.35044491428255 +428.9498245678558 +-200.45311433799304 +76.5174592539977 +0 +120 +absolute + + + +0.01 +smooth + +8.536248473322853 +47.35044475396203 +428.94976341896677 +-200.4777352147229 +76.52937540230067 +0 +120 +absolute + + + +0.01 +smooth + +8.536247717728216 +47.35044459337769 +428.9497021868113 +-200.50227425998054 +76.5412986777831 +0 +120 +absolute + + + +0.01 +smooth + +8.53624696280573 +47.350444432535 +428.9496408759942 +-200.52673092112232 +76.55322894520235 +0 +120 +absolute + + + +0.01 +smooth + +8.53624620856284 +47.3504442714394 +428.94957949112006 +-200.55110464550444 +76.56516606931586 +0 +120 +absolute + + + +0.01 +smooth + +8.536245455006977 +47.35044411009636 +428.9495180367937 +-200.5753948804832 +76.57710991488102 +0 +120 +absolute + + + +0.01 +smooth + +8.536244702145584 +47.350443948511334 +428.9494565176197 +-200.59960107341487 +76.58906034665522 +0 +120 +absolute + + + +0.01 +smooth + +8.536243949986092 +47.350443786689766 +428.94939493820283 +-200.62372267165568 +76.60101722939588 +0 +120 +absolute + + + +0.01 +smooth + +8.536243198535942 +47.35044362463712 +428.9493333031477 +-200.64775912256204 +76.6129804278604 +0 +120 +absolute + + + +0.01 +smooth + +8.536242447802572 +47.350443462358854 +428.949271617059 +-200.67170987349007 +76.62494980680619 +0 +120 +absolute + + + +0.01 +smooth + +8.536241697793418 +47.35044329986041 +428.9492098845415 +-200.69557437179608 +76.63692523099066 +0 +120 +absolute + + + +0.01 +smooth + +8.536240948515918 +47.350443137147245 +428.94914811019987 +-200.71935206483641 +76.64890656517119 +0 +120 +absolute + + + +0.01 +smooth + +8.53624019997751 +47.350442974224826 +428.9490862986388 +-200.7430423999673 +76.6608936741052 +0 +120 +absolute + + + +0.01 +smooth + +8.53623945218563 +47.35044281109859 +428.949024454463 +-200.76664482454498 +76.6728864225501 +0 +120 +absolute + + + +0.01 +smooth + +8.536238705147715 +47.35044264777402 +428.9489625822771 +-200.7901587859257 +76.68488467526328 +0 +120 +absolute + + + +0.01 +smooth + +8.536237958871205 +47.35044248425654 +428.94890068668576 +-200.81358373146594 +76.69688829700215 +0 +120 +absolute + + + +0.01 +smooth + +8.536237213363535 +47.35044232055162 +428.9488387722938 +-200.83691910852167 +76.70889715252413 +0 +120 +absolute + + + +0.01 +smooth + +8.536236468632142 +47.35044215666473 +428.9487768437058 +-200.86016436444936 +76.72091110658661 +0 +120 +absolute + + + +0.01 +smooth + +8.536235724684467 +47.35044199260129 +428.9487149055265 +-200.88331894660524 +76.73293002394698 +0 +120 +absolute + + + +0.01 +smooth + +8.536234981527944 +47.35044182836678 +428.9486529623606 +-200.9063823023456 +76.74495376936267 +0 +120 +absolute + + + +0.01 +smooth + +8.53623423917001 +47.350441663966656 +428.9485910188128 +-200.92935387902668 +76.75698220759108 +0 +120 +absolute + + + +0.01 +smooth + +8.536233497618106 +47.35044149940636 +428.9485290794878 +-200.95223312400478 +76.76901520338959 +0 +120 +absolute + + + +0.01 +smooth + +8.536232756879667 +47.35044133469135 +428.9484671489902 +-200.9750194846361 +76.78105262151564 +0 +120 +absolute + + + +0.01 +smooth + +8.536232016962128 +47.35044116982708 +428.9484052319247 +-200.99771240827704 +76.7930943267266 +0 +120 +absolute + + + +0.01 +smooth + +8.536231277872933 +47.35044100481902 +428.9483433328961 +-201.02031134228378 +76.80514018377991 +0 +120 +absolute + + + +0.01 +smooth + +8.536230539619512 +47.35044083967261 +428.948281456509 +-201.0428157340126 +76.81719005743294 +0 +120 +absolute + + + +0.01 +smooth + +8.536229802209306 +47.3504406743933 +428.9482196073682 +-201.06522503081982 +76.82924381244311 +0 +120 +absolute + + + +0.01 +smooth + +8.536229065649755 +47.350440508986566 +428.9481577900783 +-201.08753868006164 +76.84130131356784 +0 +120 +absolute + + + +0.01 +smooth + +8.536228329948292 +47.35044034345785 +428.94809600924395 +-201.10975612909445 +76.8533624255645 +0 +120 +absolute + + + +0.01 +smooth + +8.536227595112356 +47.3504401778126 +428.94803426947 +-201.1318768252744 +76.86542701319053 +0 +120 +absolute + + + +0.01 +smooth + +8.536226861149384 +47.35044001205628 +428.9479725753609 +-201.15390021595778 +76.8774949412033 +0 +120 +absolute + + + +0.01 +smooth + +8.536226128066813 +47.35043984619434 +428.9479109315215 +-201.17582574850096 +76.88956607436023 +0 +120 +absolute + + + +0.01 +smooth + +8.536225395872084 +47.350439680232256 +428.9478493425566 +-201.1976528702601 +76.90164027741874 +0 +120 +absolute + + + +0.01 +smooth + +8.53622466457263 +47.350439514175456 +428.9477878130707 +-201.21938102859156 +76.91371741513622 +0 +120 +absolute + + + +0.01 +smooth + +8.53622393417589 +47.35043934802941 +428.9477263476685 +-201.24100967085158 +76.92579735227008 +0 +120 +absolute + + + +0.01 +smooth + +8.536223204689303 +47.35043918179956 +428.94766495095485 +-201.26253824439638 +76.93787995357769 +0 +120 +absolute + + + +0.01 +smooth + +8.536222476049119 +47.35043901544566 +428.947603594717 +-201.28397435365193 +76.94996631619425 +0 +120 +absolute + + + +0.01 +smooth + +8.536221747970181 +47.350438848784925 +428.9475421480614 +-201.3053509746733 +76.96206136344104 +0 +120 +absolute + + + +0.01 +smooth + +8.5362210204284 +47.35043868180182 +428.94748059967765 +-201.3266711666745 +76.97416548982748 +0 +120 +absolute + + + +0.01 +smooth + +8.536220293431327 +47.35043851450106 +428.94741895280384 +-201.34793436313484 +76.98627854164727 +0 +120 +absolute + + + +0.01 +smooth + +8.536219566986516 +47.35043834688743 +428.94735721067883 +-201.36913999753418 +76.998400365194 +0 +120 +absolute + + + +0.01 +smooth + +8.536218841101519 +47.35043817896566 +428.94729537654086 +-201.39028750335197 +77.01053080676132 +0 +120 +absolute + + + +0.01 +smooth + +8.536218115783882 +47.35043801074046 +428.9472334536283 +-201.41137631406787 +77.02266971264288 +0 +120 +absolute + + + +0.01 +smooth + +8.536217391041166 +47.350437842216635 +428.94717144518 +-201.43240586316148 +77.03481692913229 +0 +120 +absolute + + + +0.01 +smooth + +8.536216666880913 +47.35043767339889 +428.947109354434 +-201.45337558411228 +77.04697230252322 +0 +120 +absolute + + + +0.01 +smooth + +8.536215943310683 +47.35043750429199 +428.9470471846291 +-201.47428491039994 +77.0591356791093 +0 +120 +absolute + + + +0.01 +smooth + +8.536215220338018 +47.35043733490065 +428.9469849390033 +-201.495133275504 +77.0713069051841 +0 +120 +absolute + + + +0.01 +smooth + +8.53621449797048 +47.350437165229636 +428.9469226207956 +-201.5159201129041 +77.08348582704136 +0 +120 +absolute + + + +0.01 +smooth + +8.536213776215618 +47.350436995283694 +428.94686023324414 +-201.5366448560798 +77.09567229097466 +0 +120 +absolute + + + +0.01 +smooth + +8.536213055080976 +47.350436825067554 +428.94679777958714 +-201.55730693851066 +77.10786614327762 +0 +120 +absolute + + + +0.01 +smooth + +8.536212334574117 +47.350436654586005 +428.9467352630638 +-201.57790579367636 +77.12006723024395 +0 +120 +absolute + + + +0.01 +smooth + +8.536211614702587 +47.350436483843744 +428.94667268691194 +-201.5984408550564 +77.13227539816724 +0 +120 +absolute + + + +0.01 +smooth + +8.536210895473937 +47.350436312845524 +428.9466100543702 +-201.61891155613034 +77.14449049334111 +0 +120 +absolute + + + +0.01 +smooth + +8.536210176895723 +47.3504361415961 +428.9465473686771 +-201.63931733037788 +77.15671236205922 +0 +120 +absolute + + + +0.01 +smooth + +8.536209458975486 +47.3504359701002 +428.946484633071 +-201.65965761127845 +77.16894085061517 +0 +120 +absolute + + + +0.01 +smooth + +8.536208741720792 +47.35043579836262 +428.9464218507905 +-201.67993183231178 +77.18117580530267 +0 +120 +absolute + + + +0.01 +smooth + +8.536208025139183 +47.350435626388034 +428.9463590250739 +-201.70013942695743 +77.19341707241531 +0 +120 +absolute + + + +0.01 +smooth + +8.536207309238213 +47.35043545418123 +428.9462961591597 +-201.7202798286949 +77.20566449824672 +0 +120 +absolute + + + +0.01 +smooth + +8.536206594025439 +47.35043528174696 +428.9462332562865 +-201.74035247100397 +77.21791792909058 +0 +120 +absolute + + + +0.01 +smooth + +8.536205879508405 +47.35043510908994 +428.9461703196926 +-201.760356787364 +77.23017721124049 +0 +120 +absolute + + + +0.01 +smooth + +8.536205165694662 +47.350434936214924 +428.94610735261654 +-201.78029221125468 +77.24244219099009 +0 +120 +absolute + + + +0.01 +smooth + +8.536204452591774 +47.35043476312668 +428.9460443582969 +-201.80015817615566 +77.25471271463303 +0 +120 +absolute + + + +0.01 +smooth + +8.536203740207279 +47.35043458982991 +428.94598133997175 +-201.81995411554635 +77.26698862846294 +0 +120 +absolute + + + +0.01 +smooth + +8.536203028548735 +47.3504344163294 +428.94591830087995 +-201.83967946290653 +77.27926977877345 +0 +120 +absolute + + + +0.01 +smooth + +8.536202317623694 +47.35043424262988 +428.94585524425975 +-201.8593336517157 +77.29155601185822 +0 +120 +absolute + + + +0.01 +smooth + +8.536201607439702 +47.35043406873607 +428.94579217334956 +-201.87891611545336 +77.30384717401084 +0 +120 +absolute + + + +0.01 +smooth + +8.536200898004319 +47.35043389465276 +428.94572909138805 +-201.89842628759925 +77.31614311152498 +0 +120 +absolute + + + +0.01 +smooth + +8.536200189325092 +47.35043372038467 +428.94566600161363 +-201.91786360163294 +77.3284436706943 +0 +120 +absolute + + + +0.01 +smooth + +8.536199481409572 +47.350433545936525 +428.94560290726446 +-201.93722749103387 +77.34074869781239 +0 +120 +absolute + + + +0.01 +smooth + +8.536198774265316 +47.350433371313116 +428.94553981157947 +-201.9565173892818 +77.35305803917294 +0 +120 +absolute + + + +0.01 +smooth + +8.53619806789987 +47.35043319651916 +428.9454767177968 +-201.97573272985625 +77.36537154106954 +0 +120 +absolute + + + +0.01 +smooth + +8.536197362320786 +47.35043302155941 +428.945413629155 +-201.99487294623674 +77.37768904979583 +0 +120 +absolute + + + +0.01 +smooth + +8.53619665753562 +47.35043284643859 +428.9453505488925 +-202.01393747190298 +77.39001041164548 +0 +120 +absolute + + + +0.01 +smooth + +8.53619595355192 +47.35043267116148 +428.9452874802479 +-202.03292574033446 +77.40233547291211 +0 +120 +absolute + + + +0.01 +smooth + +8.536195250377238 +47.35043249573279 +428.94522442645945 +-202.0518371850108 +77.41466407988933 +0 +120 +absolute + + + +0.01 +smooth + +8.536194548019129 +47.3504323201573 +428.94516139076563 +-202.0706712394116 +77.42699607887081 +0 +120 +absolute + + + +0.01 +smooth + +8.53619384648514 +47.35043214443972 +428.9450983764051 +-202.08942733701645 +77.4393313161502 +0 +120 +absolute + + + +0.01 +smooth + +8.536193145782825 +47.35043196858483 +428.94503538661615 +-202.10810491130488 +77.45166963802112 +0 +120 +absolute + + + +0.01 +smooth + +8.536192445919736 +47.35043179259734 +428.9449724246373 +-202.12670339575658 +77.46401089077719 +0 +120 +absolute + + + +0.01 +smooth + +8.536191746903425 +47.35043161648203 +428.944909493707 +-202.14522222385105 +77.47635492071204 +0 +120 +absolute + + + +0.01 +smooth + +8.536191048741443 +47.350431440243604 +428.9448465970636 +-202.1636608290679 +77.48870157411935 +0 +120 +absolute + + + +0.01 +smooth + +8.536190351441341 +47.35043126388684 +428.9447837379457 +-202.18201864488674 +77.50105069729274 +0 +120 +absolute + + + +0.01 +smooth + +8.536189655010674 +47.35043108741647 +428.9447209195918 +-202.2002951047871 +77.51340213652583 +0 +120 +absolute + + + +0.01 +smooth + +8.536188959456988 +47.35043091083725 +428.9446581452402 +-202.21848964224864 +77.52575573811227 +0 +120 +absolute + + + +0.01 +smooth + +8.536188264787839 +47.3504307341539 +428.9445954181295 +-202.2366016907509 +77.5381113483457 +0 +120 +absolute + + + +0.01 +smooth + +8.53618757101078 +47.35043055737119 +428.94453274149805 +-202.25463068377348 +77.55046881351974 +0 +120 +absolute + + + +0.01 +smooth + +8.536186878133357 +47.350430380493854 +428.9444701185844 +-202.272576054796 +77.56282797992806 +0 +120 +absolute + + + +0.01 +smooth + +8.536186186163127 +47.35043020352664 +428.94440755262684 +-202.29043723729794 +77.57518869386428 +0 +120 +absolute + + + +0.01 +smooth + +8.53618549510764 +47.3504300264743 +428.9443450468641 +-202.30821366475902 +77.587550801622 +0 +120 +absolute + + + +0.01 +smooth + +8.536184804974447 +47.35042984934156 +428.94428260453446 +-202.32590477065872 +77.59991414949494 +0 +120 +absolute + + + +0.01 +smooth + +8.5361841157711 +47.350429672133174 +428.94422022887636 +-202.3435099884767 +77.61227858377666 +0 +120 +absolute + + + +0.01 +smooth + +8.53618342750515 +47.3504294948539 +428.94415792312833 +-202.36102875169252 +77.62464395076083 +0 +120 +absolute + + + +0.01 +smooth + +8.536182740184152 +47.35042931750846 +428.9440956905288 +-202.37846049378578 +77.63701009674108 +0 +120 +absolute + + + +0.01 +smooth + +8.536182053815654 +47.35042914010161 +428.94403353431636 +-202.39580464823604 +77.64937686801105 +0 +120 +absolute + + + +0.01 +smooth + +8.536181368407208 +47.350428962638105 +428.9439714577292 +-202.41306064852296 +77.66174411086439 +0 +120 +absolute + + + +0.01 +smooth + +8.536180683966368 +47.35042878512267 +428.94390946400597 +-202.43022792812604 +77.67411167159469 +0 +120 +absolute + + + +0.01 +smooth + +8.536180000500684 +47.350428607560076 +428.9438475563851 +-202.44730592052483 +77.68647939649566 +0 +120 +absolute + + + +0.01 +smooth + +8.536179318017709 +47.350428429955045 +428.94378573810513 +-202.46429405919903 +77.69884713186087 +0 +120 +absolute + + + +0.01 +smooth + +8.536178636524994 +47.35042825231233 +428.94372401240435 +-202.4811917776282 +77.71121472398403 +0 +120 +absolute + + + +0.01 +smooth + +8.536177956030091 +47.35042807463667 +428.9436623825212 +-202.49799850929185 +77.72358201915868 +0 +120 +absolute + + + +0.01 +smooth + +8.536177276540549 +47.35042789693281 +428.9436008516944 +-202.51471368766968 +77.73594886367853 +0 +120 +absolute + + + +0.01 +smooth + +8.536176598063925 +47.3504277192055 +428.9435394231621 +-202.53133674624118 +77.7483151038372 +0 +120 +absolute + + + +0.01 +smooth + +8.536175920607766 +47.350427541459496 +428.943478100163 +-202.547867118486 +77.76068058592833 +0 +120 +absolute + + + +0.01 +smooth + +8.536175244179626 +47.350427363699524 +428.94341688593545 +-202.56430423788373 +77.77304515624554 +0 +120 +absolute + + + +0.01 +smooth + +8.536174568787057 +47.350427185930336 +428.94335578371795 +-202.5806475379139 +77.78540866108249 +0 +120 +absolute + + + +0.01 +smooth + +8.536173894403705 +47.35042700813949 +428.94329478605005 +-202.59690025604442 +77.79777155693854 +0 +120 +absolute + + + +0.01 +smooth + +8.536173220723565 +47.350426830172644 +428.94323379695453 +-202.6130970078726 +77.81013932727028 +0 +120 +absolute + + + +0.01 +smooth + +8.536172547678055 +47.35042665199548 +428.9431727948755 +-202.62924577211396 +77.82251317050024 +0 +120 +absolute + + + +0.01 +smooth + +8.536171875274876 +47.35042647361237 +428.943111782283 +-202.64534596763323 +77.83489291075816 +0 +120 +absolute + + + +0.01 +smooth + +8.536171203521734 +47.35042629502763 +428.9430507616469 +-202.66139701329507 +77.8472783721737 +0 +120 +absolute + + + +0.01 +smooth + +8.536170532426343 +47.35042611624564 +428.9429897354378 +-202.6773983279644 +77.8596693788767 +0 +120 +absolute + + + +0.01 +smooth + +8.5361698619964 +47.35042593727074 +428.94292870612554 +-202.693349330506 +77.87206575499684 +0 +120 +absolute + + + +0.01 +smooth + +8.536169192239617 +47.35042575810726 +428.9428676761804 +-202.70924943978463 +77.8844673246638 +0 +120 +absolute + + + +0.01 +smooth + +8.536168523163703 +47.350425578759584 +428.9428066480726 +-202.72509807466514 +77.89687391200741 +0 +120 +absolute + + + +0.01 +smooth + +8.536167854776357 +47.35042539923203 +428.9427456242721 +-202.7408946540123 +77.90928534115736 +0 +120 +absolute + + + +0.01 +smooth + +8.536167187085294 +47.350425219528965 +428.9426846072492 +-202.75663859669092 +77.92170143624338 +0 +120 +absolute + + + +0.01 +smooth + +8.536166520098213 +47.35042503965472 +428.942623599474 +-202.77232932156568 +77.9341220213952 +0 +120 +absolute + + + +0.01 +smooth + +8.536165853822821 +47.350424859613646 +428.9425626034165 +-202.78796624750154 +77.94654692074255 +0 +120 +absolute + + + +0.01 +smooth + +8.536165188266832 +47.35042467941011 +428.9425016215473 +-202.80354879336315 +77.9589759584152 +0 +120 +absolute + + + +0.01 +smooth + +8.536164523437943 +47.35042449904844 +428.94244065633615 +-202.81907637801547 +77.97140895854284 +0 +120 +absolute + + + +0.01 +smooth + +8.536163859343864 +47.35042431853298 +428.9423797102533 +-202.83454842032305 +77.98384574525524 +0 +120 +absolute + + + +0.01 +smooth + +8.536163195992302 +47.35042413786812 +428.94231878576903 +-202.84996433915094 +77.99628614268211 +0 +120 +absolute + + + +0.01 +smooth + +8.536162533390968 +47.35042395705816 +428.94225788535334 +-202.86532355336385 +78.00872997495321 +0 +120 +absolute + + + +0.01 +smooth + +8.536161871547558 +47.35042377610746 +428.94219701147637 +-202.88062548182643 +78.0211770661982 +0 +120 +absolute + + + +0.01 +smooth + +8.536161210469789 +47.35042359502038 +428.94213616660846 +-202.89586954340373 +78.03362724054696 +0 +120 +absolute + + + +0.01 +smooth + +8.536160550165361 +47.35042341380127 +428.94207535321965 +-202.91105515696032 +78.04608032212907 +0 +120 +absolute + + + +0.01 +smooth + +8.536159890641981 +47.35042323245446 +428.94201457377994 +-202.9261817413611 +78.05853613507432 +0 +120 +absolute + + + +0.01 +smooth + +8.536159231907359 +47.35042305098433 +428.94195383075987 +-202.94124871547086 +78.0709945035125 +0 +120 +absolute + + + +0.01 +smooth + +8.5361585739692 +47.350422869395196 +428.94189312662917 +-202.95625549815438 +78.08345525157326 +0 +120 +absolute + + + +0.01 +smooth + +8.536157916835206 +47.35042268769142 +428.94183246385825 +-202.9712015082764 +78.09591820338638 +0 +120 +absolute + + + +0.01 +smooth + +8.536157260513091 +47.35042250587737 +428.9417718449174 +-202.98608616470193 +78.10838318308159 +0 +120 +absolute + + + +0.01 +smooth + +8.536156605010554 +47.35042232395734 +428.94171127227634 +-203.00090888629543 +78.12085001478862 +0 +120 +absolute + + + +0.01 +smooth + +8.536155950335306 +47.35042214193573 +428.94165074840555 +-203.01566909192195 +78.13331852263718 +0 +120 +absolute + + + +0.01 +smooth + +8.536155296495055 +47.35042195981687 +428.94159027577507 +-203.03036620044617 +78.14578853075705 +0 +120 +absolute + + + +0.01 +smooth + +8.5361546434975 +47.350421777605085 +428.9415298568551 +-203.04499963073283 +78.15825986327788 +0 +120 +absolute + + + +0.01 +smooth + +8.536153991350359 +47.35042159530479 +428.94146949411584 +-203.05956880164698 +78.17073234432952 +0 +120 +absolute + + + +0.01 +smooth + +8.536153340061325 +47.350421412920255 +428.9414091900271 +-203.07407313205314 +78.18320579804163 +0 +120 +absolute + + + +0.01 +smooth + +8.536152689638115 +47.35042123045588 +428.9413489470596 +-203.08851204081623 +78.19568004854395 +0 +120 +absolute + + + +0.01 +smooth + +8.536152040088432 +47.350421047916 +428.94128876768326 +-203.10288494680105 +78.20815491996626 +0 +120 +absolute + + + +0.01 +smooth + +8.53615139141998 +47.35042086530495 +428.94122865436793 +-203.11719126887232 +78.22063023643821 +0 +120 +absolute + + + +0.01 +smooth + +8.53615074364047 +47.35042068262709 +428.94116860958417 +-203.1314304258949 +78.23310582208961 +0 +120 +absolute + + + +0.01 +smooth + +8.536150096757602 +47.35042049988676 +428.941108635802 +-203.14560183673356 +78.24558150105017 +0 +120 +absolute + + + +0.01 +smooth + +8.536149450779089 +47.35042031708832 +428.94104873549145 +-203.1597049202531 +78.25805709744961 +0 +120 +absolute + + + +0.01 +smooth + +8.536148805712635 +47.35042013423613 +428.9409889111229 +-203.17373909531835 +78.27053243541766 +0 +120 +absolute + + + +0.01 +smooth + +8.536148161565947 +47.35041995133451 +428.94092916516627 +-203.187703780794 +78.2830073390841 +0 +120 +absolute + + + +0.01 +smooth + +8.53614751834673 +47.35041976838782 +428.94086950009194 +-203.20159839554495 +78.2954816325786 +0 +120 +absolute + + + +0.01 +smooth + +8.536146876062691 +47.3504195854004 +428.9408099183699 +-203.21542235843597 +78.30795514003094 +0 +120 +absolute + + + +0.01 +smooth + +8.536146234721539 +47.35041940237662 +428.9407504224704 +-203.22917508833183 +78.32042768557085 +0 +120 +absolute + + + +0.01 +smooth + +8.536145594330975 +47.35041921932081 +428.9406910148635 +-203.24285600409732 +78.33289909332802 +0 +120 +absolute + + + +0.01 +smooth + +8.53614495489871 +47.350419036237334 +428.94063169801944 +-203.25646452459728 +78.34536918743224 +0 +120 +absolute + + + +0.01 +smooth + +8.536144316432448 +47.35041885313052 +428.9405724744083 +-203.2700000686964 +78.35783779201321 +0 +120 +absolute + + + +0.01 +smooth + +8.536143678939897 +47.35041867000473 +428.9405133465003 +-203.2834620552596 +78.3703047312007 +0 +120 +absolute + + + +0.01 +smooth + +8.536143042428765 +47.35041848686431 +428.94045431676557 +-203.29684990315164 +78.3827698291244 +0 +120 +absolute + + + +0.01 +smooth + +8.536142406906755 +47.3504183037136 +428.94039538767424 +-203.31016303123727 +78.39523290991406 +0 +120 +absolute + + + +0.01 +smooth + +8.536141772381576 +47.35041812055696 +428.94033656169654 +-203.32340085838132 +78.40769379769942 +0 +120 +absolute + + + +0.01 +smooth + +8.53614113886093 +47.35041793739873 +428.94027784130253 +-203.33656280344854 +78.4201523166102 +0 +120 +absolute + + + +0.01 +smooth + +8.53614050635253 +47.35041775424327 +428.9402192289625 +-203.3496482853038 +78.43260829077614 +0 +120 +absolute + + + +0.01 +smooth + +8.536139874864078 +47.350417571094916 +428.94016072714646 +-203.36265672281183 +78.44506154432702 +0 +120 +absolute + + + +0.01 +smooth + +8.53613924440328 +47.35041738795802 +428.9401023383246 +-203.37558753483745 +78.45751190139248 +0 +120 +absolute + + + +0.01 +smooth + +8.536138614977848 +47.35041720483693 +428.9400440649671 +-203.38844014024545 +78.46995918610233 +0 +120 +absolute + + + +0.01 +smooth + +8.536137986595481 +47.35041702173601 +428.939985909544 +-203.4012139579006 +78.48240322258627 +0 +120 +absolute + + + +0.01 +smooth + +8.53613735926389 +47.350416838659584 +428.93992787452567 +-203.4139084066677 +78.49484383497405 +0 +120 +absolute + + + +0.01 +smooth + +8.53613673299078 +47.35041665561201 +428.9398699623822 +-203.42652290541162 +78.50728084739538 +0 +120 +absolute + + + +0.01 +smooth + +8.53613610778386 +47.35041647259763 +428.9398121755836 +-203.43905687299707 +78.51971408398003 +0 +120 +absolute + + + +0.01 +smooth + +8.536135483650833 +47.3504162896208 +428.9397545166002 +-203.4515097282889 +78.53214336885773 +0 +120 +absolute + + + +0.01 +smooth + +8.536134860599407 +47.35041610668587 +428.9396969879019 +-203.46388089015184 +78.54456852615817 +0 +120 +absolute + + + +0.01 +smooth + +8.536134238637288 +47.350415923797186 +428.93963959195924 +-203.47616977745074 +78.55698938001113 +0 +120 +absolute + + + +0.01 +smooth + +8.536133617772183 +47.35041574095909 +428.93958233124215 +-203.4883758090504 +78.56940575454632 +0 +120 +absolute + + + +0.01 +smooth + +8.536132998011798 +47.35041555817596 +428.93952520822074 +-203.50049840381553 +78.58181747389348 +0 +120 +absolute + + + +0.01 +smooth + +8.53613237936384 +47.350415375452116 +428.9394682253652 +-203.51253698061103 +78.59422436218235 +0 +120 +absolute + + + +0.01 +smooth + +8.536131761836014 +47.350415192791885 +428.9394113851457 +-203.5244909583016 +78.60662624354265 +0 +120 +absolute + + + +0.01 +smooth + +8.536131145436027 +47.35041501019966 +428.9393546900325 +-203.53635975575213 +78.61902294210412 +0 +120 +absolute + + + +0.01 +smooth + +8.536130530171585 +47.35041482767977 +428.93929814249566 +-203.54814279182736 +78.63141428199651 +0 +120 +absolute + + + +0.01 +smooth + +8.536129916050399 +47.350414645236555 +428.93924174500523 +-203.55983948539202 +78.64380008734952 +0 +120 +absolute + + + +0.01 +smooth + +8.53612930307102 +47.350414462870475 +428.9391854977653 +-203.5714502571159 +78.65618035610608 +0 +120 +absolute + + + +0.01 +smooth + +8.536128690939227 +47.350414280456185 +428.93912932834075 +-203.5830075791212 +78.66856064239339 +0 +120 +absolute + + + +0.01 +smooth + +8.53612807951649 +47.350414097935136 +428.93907320251003 +-203.59452687569043 +78.68094352962606 +0 +120 +absolute + + + +0.01 +smooth + +8.536127468810715 +47.35041391531145 +428.93901712226057 +-203.6060075394269 +78.69332881761403 +0 +120 +absolute + + + +0.01 +smooth + +8.536126858829789 +47.35041373258924 +428.93896108958046 +-203.61744896293408 +78.70571630616718 +0 +120 +absolute + + + +0.01 +smooth + +8.536126249581626 +47.350413549772746 +428.9389051064573 +-203.62885053881556 +78.7181057950955 +0 +120 +absolute + + + +0.01 +smooth + +8.536125641074117 +47.35041336686606 +428.93884917487924 +-203.6402116596746 +78.73049708420889 +0 +120 +absolute + + + +0.01 +smooth + +8.536125033315168 +47.350413183873364 +428.93879329683375 +-203.6515317181147 +78.7428899733173 +0 +120 +absolute + + + +0.01 +smooth + +8.536124426312677 +47.350413000798824 +428.9387374743089 +-203.66281010673944 +78.75528426223066 +0 +120 +absolute + + + +0.01 +smooth + +8.536123820074543 +47.35041281764659 +428.9386817092925 +-203.67404621815214 +78.76767975075892 +0 +120 +absolute + + + +0.01 +smooth + +8.53612321460867 +47.35041263442083 +428.93862600377236 +-203.68523944495627 +78.78007623871198 +0 +120 +absolute + + + +0.01 +smooth + +8.536122609922957 +47.35041245112568 +428.93857035973616 +-203.69638917975533 +78.7924735258998 +0 +120 +absolute + + + +0.01 +smooth + +8.5361220060253 +47.35041226776528 +428.93851477917195 +-203.70749481515264 +78.80487141213224 +0 +120 +absolute + + + +0.01 +smooth + +8.536121402923607 +47.35041208434384 +428.9384592640674 +-203.7185557437518 +78.81726969721934 +0 +120 +absolute + + + +0.01 +smooth + +8.536120800625772 +47.35041190086549 +428.93840381641036 +-203.72957135815616 +78.82966818097097 +0 +120 +absolute + + + +0.01 +smooth + +8.536120199139699 +47.35041171733439 +428.9383484381889 +-203.74054105096923 +78.84206666319709 +0 +120 +absolute + + + +0.01 +smooth + +8.53611959847329 +47.3504115337547 +428.93829313139054 +-203.75146421479442 +78.8544649437076 +0 +120 +absolute + + + +0.01 +smooth + +8.53611899863444 +47.35041135013055 +428.93823789800325 +-203.76234024223518 +78.86686282231246 +0 +120 +absolute + + + +0.01 +smooth + +8.536118399631054 +47.350411166466145 +428.9381827400149 +-203.773168525895 +78.8792600988216 +0 +120 +absolute + + + +0.01 +smooth + +8.536117801471027 +47.35041098276563 +428.9381276594133 +-203.7839484583773 +78.89165657304495 +0 +120 +absolute + + + +0.01 +smooth + +8.536117204162267 +47.350410799033135 +428.9380726581861 +-203.79467943228548 +78.90405204479242 +0 +120 +absolute + + + +0.01 +smooth + +8.536116607712668 +47.35041061527284 +428.9380177383214 +-203.8053608402231 +78.91644631387398 +0 +120 +absolute + + + +0.01 +smooth + +8.536116012130133 +47.3504104314889 +428.937962901807 +-203.8159920747936 +78.92883918009953 +0 +120 +absolute + + + +0.01 +smooth + +8.53611541742256 +47.35041024768546 +428.93790815063045 +-203.82657252860022 +78.94123044327903 +0 +120 +absolute + + + +0.01 +smooth + +8.536114823597856 +47.3504100638667 +428.9378534867799 +-203.8371015942467 +78.95361990322239 +0 +120 +absolute + + + +0.01 +smooth + +8.536114230663914 +47.35040988003677 +428.93779891224307 +-203.84757866433634 +78.96600735973958 +0 +120 +absolute + + + +0.01 +smooth + +8.536113638628636 +47.350409696199804 +428.93774442900764 +-203.85800313147251 +78.97839261264046 +0 +120 +absolute + + + +0.01 +smooth + +8.536113047499926 +47.35040951236001 +428.93769003906186 +-203.86837438825887 +78.99077546173504 +0 +120 +absolute + + + +0.01 +smooth + +8.536112457285684 +47.35040932852149 +428.9376357443931 +-203.87869182729872 +79.00315570683321 +0 +120 +absolute + + + +0.01 +smooth + +8.536111867993805 +47.35040914468843 +428.93758154698935 +-203.88895484119553 +79.01553314774492 +0 +120 +absolute + + + +0.01 +smooth + +8.536111279632195 +47.35040896086501 +428.93752744883864 +-203.8991628225528 +79.02790758428013 +0 +120 +absolute + + + +0.01 +smooth + +8.536110692208748 +47.350408777055335 +428.9374734519285 +-203.9093151639739 +79.04027881624869 +0 +120 +absolute + + + +0.01 +smooth + +8.536110105731373 +47.3504085932636 +428.937419558247 +-203.9194112580623 +79.05264664346059 +0 +120 +absolute + + + +0.01 +smooth + +8.536109520207964 +47.35040840949395 +428.9373657697819 +-203.92945049742156 +79.0650108657258 +0 +120 +absolute + + + +0.01 +smooth + +8.536108935646421 +47.350408225750535 +428.9373120885208 +-203.93943227465496 +79.07737128285413 +0 +120 +absolute + + + +0.01 +smooth + +8.53610835205465 +47.35040804203752 +428.9372585164519 +-203.94935598236603 +79.08972769465564 +0 +120 +absolute + + + +0.01 +smooth + +8.536107769440548 +47.350407858359084 +428.9372050555627 +-203.95922101315827 +79.10207990094018 +0 +120 +absolute + + + +0.01 +smooth + +8.536107187812014 +47.35040767471935 +428.9371517078413 +-203.96902675963503 +79.11442770151776 +0 +120 +absolute + + + +0.01 +smooth + +8.53610660717695 +47.3504074911225 +428.9370984752755 +-203.97877261439982 +79.12677089619822 +0 +120 +absolute + + + +0.01 +smooth + +8.536106027543259 +47.350407307572674 +428.93704535985296 +-203.9884579700561 +79.1391092847916 +0 +120 +absolute + + + +0.01 +smooth + +8.536105448918834 +47.350407124074046 +428.93699236356167 +-203.99808221920725 +79.15144266710772 +0 +120 +absolute + + + +0.01 +smooth + +8.536104871311583 +47.35040694063076 +428.9369394883894 +-204.00764475445683 +79.16377084295658 +0 +120 +absolute + + + +0.01 +smooth + +8.536104294729402 +47.350406757246986 +428.93688673632397 +-204.01714496840816 +79.17609361214812 +0 +120 +absolute + + + +0.01 +smooth + +8.536103719180193 +47.350406573926875 +428.93683410935324 +-204.02658225366477 +79.18841077449224 +0 +120 +absolute + + + +0.01 +smooth + +8.536103144671856 +47.35040639067458 +428.93678160946496 +-204.03595600283006 +79.20072212979888 +0 +120 +absolute + + + +0.01 +smooth + +8.536102571212291 +47.35040620749427 +428.93672923864716 +-204.04526560850758 +79.21302747787797 +0 +120 +absolute + + + +0.01 +smooth + +8.5361019988094 +47.35040602439008 +428.93667699888744 +-204.05451046330072 +79.22532661853947 +0 +120 +absolute + + + +0.01 +smooth + +8.536101427471083 +47.3504058413662 +428.93662489217377 +-204.06368995981285 +79.23761935159327 +0 +120 +absolute + + + +0.01 +smooth + +8.536100857205238 +47.350405658426766 +428.936572920494 +-204.07280349064752 +79.24990547684934 +0 +120 +absolute + + + +0.01 +smooth + +8.536100288019767 +47.35040547557593 +428.9365210858358 +-204.08185044840815 +79.26218479411757 +0 +120 +absolute + + + +0.01 +smooth + +8.536099719922571 +47.35040529281787 +428.9364693901872 +-204.09083022569814 +79.27445710320795 +0 +120 +absolute + + + +0.01 +smooth + +8.53609915292155 +47.350405110156736 +428.93641783553585 +-204.09974221512107 +79.28672220393037 +0 +120 +absolute + + + +0.01 +smooth + +8.536098587024604 +47.350404927596685 +428.9363664238698 +-204.1085858092802 +79.29897989609479 +0 +120 +absolute + + + +0.01 +smooth + +8.536098022239633 +47.350404745141866 +428.9363151571767 +-204.1173604007792 +79.31122997951113 +0 +120 +absolute + + + +0.01 +smooth + +8.536097458574538 +47.350404562796456 +428.9362640374444 +-204.12606538222133 +79.32347225398931 +0 +120 +absolute + + + +0.01 +smooth + +8.53609689603722 +47.350404380564584 +428.9362130666609 +-204.13470014621012 +79.33570651933925 +0 +120 +absolute + + + +0.01 +smooth + +8.536096334635578 +47.350404198450434 +428.93616224681375 +-204.14326408534902 +79.34793257537093 +0 +120 +absolute + + + +0.01 +smooth + +8.536095774377515 +47.35040401645815 +428.93611157989096 +-204.1517565922415 +79.36015022189426 +0 +120 +absolute + + + +0.01 +smooth + +8.536095215270926 +47.35040383459189 +428.93606106788036 +-204.16017705949093 +79.37235925871919 +0 +120 +absolute + + + +0.01 +smooth + +8.536094657323718 +47.35040365285582 +428.93601071276976 +-204.16852487970084 +79.38455948565561 +0 +120 +absolute + + + +0.01 +smooth + +8.536094100543787 +47.3504034712541 +428.9359605165471 +-204.17679944547461 +79.39675070251349 +0 +120 +absolute + + + +0.01 +smooth + +8.536093544939035 +47.35040328979086 +428.9359104811999 +-204.1850001494158 +79.40893270910273 +0 +120 +absolute + + + +0.01 +smooth + +8.53609299051736 +47.3504031084703 +428.9358606087163 +-204.1931263841277 +79.42110530523328 +0 +120 +absolute + + + +0.01 +smooth + +8.536092437286667 +47.35040292729654 +428.9358109010841 +-204.2011775422139 +79.4332682907151 +0 +120 +absolute + + + +0.01 +smooth + +8.536091885254853 +47.35040274627376 +428.93576136029094 +-204.2091530162778 +79.4454214653581 +0 +120 +absolute + + + +0.01 +smooth + +8.536091334429818 +47.35040256540611 +428.9357119883248 +-204.21705219892286 +79.45756462897221 +0 +120 +absolute + + + +0.01 +smooth + +8.536090784819466 +47.350402384697745 +428.9356627871735 +-204.22487448275245 +79.46969758136734 +0 +120 +absolute + + + +0.01 +smooth + +8.536090236431694 +47.35040220415282 +428.9356137588249 +-204.23261926037011 +79.48182012235345 +0 +120 +absolute + + + +0.01 +smooth + +8.536089689274402 +47.35040202377551 +428.93556490526674 +-204.2402859243793 +79.49393205174046 +0 +120 +absolute + + + +0.01 +smooth + +8.536089143355492 +47.350401843569955 +428.93551622848685 +-204.2478738673834 +79.50603316933834 +0 +120 +absolute + + + +0.01 +smooth + +8.53608859843468 +47.35040166344374 +428.935467677783 +-204.2554094517987 +79.51812829286216 +0 +120 +absolute + + + +0.01 +smooth + +8.536088054271831 +47.35040148330441 +428.93541920223316 +-204.26291899737868 +79.53022222317317 +0 +120 +absolute + + + +0.01 +smooth + +8.536087510875088 +47.3504013031561 +428.93537080349637 +-204.27040183273294 +79.54231473480063 +0 +120 +absolute + + + +0.01 +smooth + +8.536086968252581 +47.3504011230029 +428.93532248323146 +-204.27785728647078 +79.55440560227369 +0 +120 +absolute + + + +0.01 +smooth + +8.536086426412442 +47.35040094284893 +428.935274243097 +-204.28528468720168 +79.56649460012156 +0 +120 +absolute + + + +0.01 +smooth + +8.536085885362805 +47.35040076269828 +428.93522608475155 +-204.29268336353496 +79.57858150287339 +0 +120 +absolute + + + +0.01 +smooth + +8.536085345111807 +47.350400582555096 +428.9351780098545 +-204.30005264408024 +79.59066608505846 +0 +120 +absolute + + + +0.01 +smooth + +8.536084805667585 +47.35040040242348 +428.9351300200642 +-204.30739185744682 +79.60274812120592 +0 +120 +absolute + + + +0.01 +smooth + +8.536084267038264 +47.35040022230752 +428.9350821170394 +-204.31470033224412 +79.61482738584493 +0 +120 +absolute + + + +0.01 +smooth + +8.536083729231986 +47.35040004221137 +428.93503430243925 +-204.3219773970817 +79.62690365350477 +0 +120 +absolute + + + +0.01 +smooth + +8.536083192256882 +47.35039986213911 +428.93498657792213 +-204.3292223805689 +79.63897669871459 +0 +120 +absolute + + + +0.01 +smooth + +8.536082656121085 +47.350399682094846 +428.9349389451467 +-204.33643461131504 +79.65104629600354 +0 +120 +absolute + + + +0.01 +smooth + +8.536082120832734 +47.35039950208272 +428.9348914057723 +-204.34361341792973 +79.6631122199009 +0 +120 +absolute + + + +0.01 +smooth + +8.536081586399957 +47.35039932210685 +428.9348439614574 +-204.35075812902235 +79.67517424493582 +0 +120 +absolute + + + +0.01 +smooth + +8.536081052830895 +47.3503991421713 +428.93479661386056 +-204.35786807320227 +79.6872321456375 +0 +120 +absolute + + + +0.01 +smooth + +8.536080520133675 +47.35039896228022 +428.934749364641 +-204.364942579079 +79.69928569653511 +0 +120 +absolute + + + +0.01 +smooth + +8.536079988316432 +47.35039878243771 +428.93470221545704 +-204.3719809752619 +79.71133467215788 +0 +120 +absolute + + + +0.01 +smooth + +8.536079457387304 +47.35039860264787 +428.9346551679678 +-204.3789825903604 +79.72337884703501 +0 +120 +absolute + + + +0.01 +smooth + +8.536078927354428 +47.35039842291485 +428.93460822383196 +-204.38594675298407 +79.73541799569568 +0 +120 +absolute + + + +0.01 +smooth + +8.536078398225925 +47.350398243242715 +428.9345613847081 +-204.39287279174212 +79.74745189266908 +0 +120 +absolute + + + +0.01 +smooth + +8.536077870009944 +47.35039806363562 +428.9345146522553 +-204.3997600352441 +79.7594803124844 +0 +120 +absolute + + + +0.01 +smooth + +8.536077342714613 +47.350397884097646 +428.93446802813224 +-204.40660781209954 +79.77150302967088 +0 +120 +absolute + + + +0.01 +smooth + +8.53607681634806 +47.350397704632904 +428.93442151399745 +-204.4134154509176 +79.78351981875764 +0 +120 +absolute + + + +0.01 +smooth + +8.536076290918432 +47.350397525245526 +428.9343751115101 +-204.42018228030796 +79.79553045427397 +0 +120 +absolute + + + +0.01 +smooth + +8.536075766433854 +47.35039734593962 +428.9343288223288 +-204.42690762887997 +79.807534710749 +0 +120 +absolute + + + +0.01 +smooth + +8.53607524290246 +47.35039716671929 +428.9342826481121 +-204.43359082524302 +79.81953236271191 +0 +120 +absolute + + + +0.01 +smooth + +8.536074720332389 +47.35039698758867 +428.9342365905192 +-204.44023119800661 +79.83152318469195 +0 +120 +absolute + + + +0.01 +smooth + +8.53607419873177 +47.35039680855182 +428.93419065120844 +-204.44682807578002 +79.84350695121827 +0 +120 +absolute + + + +0.01 +smooth + +8.53607367810874 +47.350396629612916 +428.93414483183903 +-204.4533807871729 +79.85548343682012 +0 +120 +absolute + + + +0.01 +smooth + +8.536073158471435 +47.35039645077602 +428.9340991340694 +-204.45988866079452 +79.86745241602664 +0 +120 +absolute + + + +0.01 +smooth + +8.536072639827985 +47.35039627204527 +428.9340535595584 +-204.46635102525437 +79.87941366336706 +0 +120 +absolute + + + +0.01 +smooth + +8.53607212218653 +47.35039609342478 +428.93400810996496 +-204.47276720916187 +79.89136695337056 +0 +120 +absolute + + + +0.01 +smooth + +8.536071605555197 +47.35039591491864 +428.93396278694763 +-204.47913654112642 +79.90331206056632 +0 +120 +absolute + + + +0.01 +smooth + +8.536071089942123 +47.35039573653098 +428.93391759216536 +-204.4854583497575 +79.91524875948356 +0 +120 +absolute + + + +0.01 +smooth + +8.536070575355442 +47.350395558265916 +428.933872527277 +-204.49173196366456 +79.9271768246515 +0 +120 +absolute + + + +0.01 +smooth + +8.53607006180329 +47.35039538012755 +428.93382759394115 +-204.49795671145694 +79.93909603059926 +0 +120 +absolute + + + +0.01 +smooth + +8.536069549293801 +47.35039520212 +428.9337827938166 +-204.5041319217441 +79.95100615185612 +0 +120 +absolute + + + +0.01 +smooth + +8.536069037835105 +47.35039502424736 +428.933738128562 +-204.51025692313553 +79.9629069629512 +0 +120 +absolute + + + +0.01 +smooth + +8.53606852743534 +47.350394846513765 +428.9336935998365 +-204.51633104424064 +79.97479823841374 +0 +120 +absolute + + + +0.01 +smooth + +8.53606801810264 +47.35039466892332 +428.93364920929866 +-204.52235361366874 +79.98667975277293 +0 +120 +absolute + + + +0.01 +smooth + +8.536067509845136 +47.35039449148013 +428.933604958607 +-204.52832396002944 +79.99855128055796 +0 +120 +absolute + + + +0.01 +smooth + +8.536067002670965 +47.35039431418832 +428.9335608494208 +-204.53424141193207 +80.01041259629804 +0 +120 +absolute + + + +0.01 +smooth + +8.53606649658826 +47.350394137051985 +428.9335168833986 +-204.5401052979861 +80.02226347452233 +0 +120 +absolute + + + +0.01 +smooth + +8.536065991605158 +47.35039396007525 +428.933473062199 +-204.54591494680085 +80.03410368976006 +0 +120 +absolute + + + +0.01 +smooth + +8.536065487729788 +47.350393783262234 +428.93342938748106 +-204.5516696869859 +80.04593301654042 +0 +120 +absolute + + + +0.01 +smooth + +8.536064984970288 +47.35039360661702 +428.9333858609034 +-204.55736884715063 +80.05775122939258 +0 +120 +absolute + + + +0.01 +smooth + +8.536064483334792 +47.35039343014374 +428.93334248412486 +-204.56301175590443 +80.06955810284576 +0 +120 +absolute + + + +0.01 +smooth + +8.536063982831433 +47.35039325384652 +428.93329925880414 +-204.56859774185676 +80.08135341142916 +0 +120 +absolute + + + +0.01 +smooth + +8.536063483468343 +47.350393077729436 +428.93325618660003 +-204.57412613361703 +80.09313692967196 +0 +120 +absolute + + + +0.01 +smooth + +8.53606298525366 +47.35039290179664 +428.9332132691714 +-204.57959625979476 +80.10490843210334 +0 +120 +absolute + + + +0.01 +smooth + +8.536062488195515 +47.35039272605221 +428.9331705081769 +-204.5850074489992 +80.11666769325255 +0 +120 +absolute + + + +0.01 +smooth + +8.536061992302045 +47.35039255050028 +428.93312790527546 +-204.59035902983993 +80.12841448764874 +0 +120 +absolute + + + +0.01 +smooth + +8.53606149758138 +47.35039237514495 +428.9330854621257 +-204.59565033092633 +80.14014858982111 +0 +120 +absolute + + + +0.01 +smooth + +8.53606100404166 +47.350392199990345 +428.93304318038645 +-204.60088068086787 +80.15186977429886 +0 +120 +absolute + + + +0.01 +smooth + +8.536060511691014 +47.35039202504056 +428.9330010617166 +-204.6060494082739 +80.16357781561119 +0 +120 +absolute + + + +0.01 +smooth + +8.53606002053758 +47.350391850299715 +428.9329591077747 +-204.6111558417539 +80.17527248828728 +0 +120 +absolute + + + +0.01 +smooth + +8.536059530589487 +47.35039167577193 +428.93291732021964 +-204.61619930991733 +80.18695356685636 +0 +120 +absolute + + + +0.01 +smooth + +8.536059041854873 +47.3503915014613 +428.9328757007103 +-204.62117914137357 +80.1986208258476 +0 +120 +absolute + + + +0.01 +smooth + +8.536058554341874 +47.350391327371966 +428.9328342509052 +-204.62609466473202 +80.21027403979019 +0 +120 +absolute + + + +0.01 +smooth + +8.536058068058619 +47.350391153508 +428.9327929724635 +-204.6309452086022 +80.22191298321334 +0 +120 +absolute + + + +0.01 +smooth + +8.536057583013246 +47.35039097987354 +428.9327518670435 +-204.63573010159348 +80.23353743064624 +0 +120 +absolute + + + +0.01 +smooth + +8.536057099213888 +47.350390806472696 +428.9327109363045 +-204.64044867231533 +80.24514715661807 +0 +120 +absolute + + + +0.01 +smooth + +8.536056616668679 +47.35039063330957 +428.9326701819048 +-204.64510024937715 +80.25674193565806 +0 +120 +absolute + + + +0.01 +smooth + +8.536056135385751 +47.35039046038829 +428.9326296055035 +-204.64968416138834 +80.26832154229538 +0 +120 +absolute + + + +0.01 +smooth + +8.536055655373241 +47.350390287712955 +428.9325892087591 +-204.6541997369584 +80.27988575105925 +0 +120 +absolute + + + +0.01 +smooth + +8.536055176639284 +47.35039011528769 +428.9325489933306 +-204.6586463046967 +80.29143433647883 +0 +120 +absolute + + + +0.01 +smooth + +8.53605469919201 +47.35038994311658 +428.9325089608767 +-204.66302319321267 +80.30296707308332 +0 +120 +absolute + + + +0.01 +smooth + +8.536054223039558 +47.35038977120377 +428.93246911305624 +-204.6673297311158 +80.31448373540195 +0 +120 +absolute + + + +0.01 +smooth + +8.53605374819006 +47.350389599553345 +428.9324294515279 +-204.6715652470155 +80.32598409796388 +0 +120 +absolute + + + +0.01 +smooth + +8.536053274478762 +47.350389428104684 +428.9323899452431 +-204.6757491579611 +80.33747168370695 +0 +120 +absolute + + + +0.01 +smooth + +8.536052801557364 +47.35038925672836 +428.9323505282707 +-204.67992211528193 +80.34895398443658 +0 +120 +absolute + + + +0.01 +smooth + +8.53605232942348 +47.35038908542452 +428.9323111999852 +-204.68408450134433 +80.36043098354183 +0 +120 +absolute + + + +0.01 +smooth + +8.53605185808551 +47.350388914197325 +428.9322719618031 +-204.688235441633 +80.3719024299657 +0 +120 +absolute + + + +0.01 +smooth + +8.536051387551867 +47.35038874305095 +428.9322328151414 +-204.69237406163245 +80.38336807265108 +0 +120 +absolute + + + +0.01 +smooth + +8.536050917830952 +47.350388571989555 +428.93219376141644 +-204.69649948682724 +80.39482766054093 +0 +120 +absolute + + + +0.01 +smooth + +8.536050448931187 +47.35038840101734 +428.93215480204543 +-204.7006108427021 +80.40628094257826 +0 +120 +absolute + + + +0.01 +smooth + +8.53604998086097 +47.35038823013848 +428.932115938445 +-204.70470725474166 +80.41772766770602 +0 +120 +absolute + + + +0.01 +smooth + +8.536049513628717 +47.35038805935713 +428.93207717203177 +-204.70878784843038 +80.42916758486712 +0 +120 +absolute + + + +0.01 +smooth + +8.536049047242836 +47.35038788867749 +428.9320385042229 +-204.7128517492531 +80.44060044300456 +0 +120 +absolute + + + +0.01 +smooth + +8.536048581711729 +47.350387718103704 +428.9319999364347 +-204.71689808269423 +80.45202599106128 +0 +120 +absolute + + + +0.01 +smooth + +8.536048117043816 +47.35038754763997 +428.9319614700842 +-204.72092597423855 +80.46344397798022 +0 +120 +absolute + + + +0.01 +smooth + +8.5360476532475 +47.35038737729046 +428.9319231065882 +-204.7249345493706 +80.47485415270437 +0 +120 +absolute + + + +0.01 +smooth + +8.536047190331189 +47.35038720705934 +428.93188484736316 +-204.72892293357495 +80.48625626417665 +0 +120 +absolute + + + +0.01 +smooth + +8.536046728303296 +47.3503870369508 +428.9318466938263 +-204.73289025233635 +80.49765006134005 +0 +120 +absolute + + + +0.01 +smooth + +8.536046267172228 +47.350386866969 +428.9318086473941 +-204.73683563113931 +80.50903529313752 +0 +120 +absolute + + + +0.01 +smooth + +8.53604580694639 +47.35038669711809 +428.9317707094833 +-204.74075819546843 +80.52041170851197 +0 +120 +absolute + + + +0.01 +smooth + +8.536045347634202 +47.350386527402314 +428.93173288151087 +-204.74465707080842 +80.53177905640644 +0 +120 +absolute + + + +0.01 +smooth + +8.536044889244064 +47.35038635782579 +428.9316951648935 +-204.74853138264385 +80.54313708576383 +0 +120 +absolute + + + +0.01 +smooth + +8.536044431784386 +47.350386188392704 +428.9316575610477 +-204.75238025645925 +80.55448554552709 +0 +120 +absolute + + + +0.01 +smooth + +8.536043975263583 +47.350386019107255 +428.93162007139074 +-204.75620281773953 +80.56582418463924 +0 +120 +absolute + + + +0.01 +smooth + +8.536043519690056 +47.350385849973584 +428.93158269733897 +-204.7599981919689 +80.57715275204313 +0 +120 +absolute + + + +0.01 +smooth + +8.536043065072219 +47.35038568099588 +428.9315454403094 +-204.76376550463223 +80.58847099668182 +0 +120 +absolute + + + +0.01 +smooth + +8.536042611418482 +47.35038551217831 +428.93150830171874 +-204.76750388121414 +80.59977866749823 +0 +120 +absolute + + + +0.01 +smooth + +8.536042158737247 +47.35038534352507 +428.9314712829835 +-204.77121244719913 +80.61107551343527 +0 +120 +absolute + + + +0.01 +smooth + +8.536041707036933 +47.350385175040316 +428.93143438552084 +-204.77489032807193 +80.62236128343595 +0 +120 +absolute + + + +0.01 +smooth + +8.536041256325943 +47.35038500672824 +428.9313976107475 +-204.7785366493171 +80.63363572644323 +0 +120 +absolute + + + +0.01 +smooth + +8.536040806612684 +47.35038483859298 +428.9313609600798 +-204.78215053641918 +80.6448985914 +0 +120 +absolute + + + +0.01 +smooth + +8.536040357905572 +47.35038467063876 +428.93132443493505 +-204.78573111486298 +80.65614962724932 +0 +120 +absolute + + + +0.01 +smooth + +8.536039910213013 +47.35038450286972 +428.93128803672977 +-204.78927751013296 +80.6673885829341 +0 +120 +absolute + + + +0.01 +smooth + +8.536039463543412 +47.350384335290045 +428.9312517668806 +-204.79278884771378 +80.67861520739724 +0 +120 +absolute + + + +0.01 +smooth + +8.536039017905187 +47.350384167903925 +428.9312156268047 +-204.7962642530901 +80.68982924958179 +0 +120 +absolute + + + +0.01 +smooth + +8.536038573306739 +47.350384000715515 +428.9311796179185 +-204.79970285174647 +80.70103045843064 +0 +120 +absolute + + + +0.01 +smooth + +8.536038129756479 +47.350383833728976 +428.93114374163883 +-204.80310376916754 +80.71221858288675 +0 +120 +absolute + + + +0.01 +smooth + +8.53603768726282 +47.35038366694853 +428.9311079993827 +-204.80646613083792 +80.72339337189312 +0 +120 +absolute + + + +0.01 +smooth + +8.536037245834166 +47.35038350037831 +428.9310723925665 +-204.8097890622423 +80.73455457439267 +0 +120 +absolute + + + +0.01 +smooth + +8.536036805478929 +47.35038333402251 +428.93103692260723 +-204.81307168886514 +80.74570193932838 +0 +120 +absolute + + + +0.01 +smooth + +8.536036366205517 +47.35038316788528 +428.9310015909216 +-204.81631313619118 +80.75683521564319 +0 +120 +absolute + + + +0.01 +smooth + +8.53603592802234 +47.350383001970826 +428.93096639892633 +-204.81951252970504 +80.76795415228005 +0 +120 +absolute + + + +0.01 +smooth + +8.536035490937806 +47.350382836283316 +428.93093134803837 +-204.82266899489127 +80.77905849818194 +0 +120 +absolute + + + +0.01 +smooth + +8.536035054960324 +47.35038267082692 +428.93089643967437 +-204.8257816572345 +80.7901480022918 +0 +120 +absolute + + + +0.01 +smooth + +8.536034620098306 +47.35038250560581 +428.9308616752511 +-204.82884964221938 +80.8012224135526 +0 +120 +absolute + + + +0.01 +smooth + +8.536034186360157 +47.35038234062415 +428.9308270561853 +-204.83187207533052 +80.81228148090726 +0 +120 +absolute + + + +0.01 +smooth + +8.536033753754289 +47.35038217588614 +428.9307925838937 +-204.83484808205253 +80.82332495329877 +0 +120 +absolute + + + +0.01 +smooth + +8.536033322289109 +47.35038201139594 +428.93075825979327 +-204.83777678786998 +80.8343525796701 +0 +120 +absolute + + + +0.01 +smooth + +8.536032891973026 +47.35038184715773 +428.93072408530054 +-204.8406573182676 +80.84536410896416 +0 +120 +absolute + + + +0.01 +smooth + +8.536032462814452 +47.35038168317568 +428.9306900618325 +-204.84348879872994 +80.85635929012393 +0 +120 +absolute + + + +0.01 +smooth + +8.536032034821796 +47.35038151945396 +428.9306561908058 +-204.84627035474153 +80.86733787209239 +0 +120 +absolute + + + +0.01 +smooth + +8.536031608003464 +47.35038135599676 +428.9306224736372 +-204.84900111178717 +80.87829960381247 +0 +120 +absolute + + + +0.01 +smooth + +8.536031182367864 +47.35038119280824 +428.9305889117435 +-204.85168019535138 +80.88924423422714 +0 +120 +absolute + + + +0.01 +smooth + +8.53603075792341 +47.350381029892596 +428.9305555065414 +-204.85430673091872 +80.90017151227933 +0 +120 +absolute + + + +0.01 +smooth + +8.53603033467851 +47.350380867253975 +428.9305222594477 +-204.8568798439739 +80.91108118691201 +0 +120 +absolute + + + +0.01 +smooth + +8.53602991264157 +47.350380704896565 +428.9304891718793 +-204.8593986600015 +80.92197300706815 +0 +120 +absolute + + + +0.01 +smooth + +8.536029491821001 +47.35038054282454 +428.9304562452528 +-204.86186230448618 +80.93284672169071 +0 +120 +absolute + + + +0.01 +smooth + +8.536029072225212 +47.35038038104207 +428.9304234809851 +-204.86426990291247 +80.94370207972261 +0 +120 +absolute + + + +0.01 +smooth + +8.536028653862612 +47.350380219553344 +428.9303908804929 +-204.86662058076504 +80.95453883010683 +0 +120 +absolute + + + +0.01 +smooth + +8.536028236741611 +47.35038005836253 +428.93035844519295 +-204.86891346352854 +80.96535672178635 +0 +120 +absolute + + + +0.01 +smooth + +8.536027820870617 +47.3503798974738 +428.93032617650204 +-204.8711476766875 +80.97615550370408 +0 +120 +absolute + + + +0.01 +smooth + +8.536027406258041 +47.35037973689133 +428.93029407583697 +-204.8733223457266 +80.986934924803 +0 +120 +absolute + + + +0.01 +smooth + +8.536026992912289 +47.35037957661929 +428.9302621446145 +-204.87543659613047 +80.99769473402608 +0 +120 +absolute + + + +0.01 +smooth + +8.53602658084177 +47.35037941666185 +428.93023038425133 +-204.87748955338367 +81.00843468031627 +0 +120 +absolute + + + +0.01 +smooth + +8.536026170054898 +47.35037925702321 +428.93019879616435 +-204.87948034297088 +81.0191545126165 +0 +120 +absolute + + + +0.01 +smooth + +8.536025760560076 +47.35037909770752 +428.9301673817703 +-204.88140809037665 +81.02985397986974 +0 +120 +absolute + + + +0.01 +smooth + +8.536025352365717 +47.35037893871896 +428.93013614248576 +-204.88327192108565 +81.04053283101896 +0 +120 +absolute + + + +0.01 +smooth + +8.53602494548023 +47.35037878006171 +428.9301050797278 +-204.8850709605825 +81.0511908150071 +0 +120 +absolute + + + +0.01 +smooth + +8.536024539912022 +47.35037862173994 +428.93007419491295 +-204.88680433435178 +81.06182768077713 +0 +120 +absolute + + + +0.01 +smooth + +8.536024135669503 +47.35037846375784 +428.9300434894581 +-204.88847116787815 +81.072443177272 +0 +120 +absolute + + + +0.01 +smooth + +8.536023732761082 +47.35037830611955 +428.9300129647801 +-204.89007058664617 +81.08303705343468 +0 +120 +absolute + + + +0.01 +smooth + +8.536023331195171 +47.35037814882929 +428.9299826222955 +-204.89160171614049 +81.09360905820812 +0 +120 +absolute + + + +0.01 +smooth + +8.536022930874148 +47.350377991851204 +428.929952445414 +-204.8930758329988 +81.10416141893432 +0 +120 +absolute + + + +0.01 +smooth + +8.536022531370698 +47.35037783502508 +428.92992236144136 +-204.8945421543479 +81.11470406255235 +0 +120 +absolute + + + +0.01 +smooth + +8.536022132646403 +47.35037767833746 +428.9298923636045 +-204.89600551849207 +81.12523781447194 +0 +120 +absolute + + + +0.01 +smooth + +8.536021734709994 +47.35037752179265 +428.92986245312864 +-204.89746537177948 +81.13576239790602 +0 +120 +absolute + + + +0.01 +smooth + +8.536021337570197 +47.35037736539501 +428.929832631239 +-204.89892116055836 +81.14627753606763 +0 +120 +absolute + + + +0.01 +smooth + +8.536020941235742 +47.35037720914883 +428.92980289916085 +-204.90037233117687 +81.15678295216975 +0 +120 +absolute + + + +0.01 +smooth + +8.536020545715347 +47.35037705305843 +428.92977325811916 +-204.90181832998312 +81.1672783694253 +0 +120 +absolute + + + +0.01 +smooth + +8.536020151017745 +47.35037689712817 +428.9297437093393 +-204.90325860332544 +81.17776351104727 +0 +120 +absolute + + + +0.01 +smooth + +8.53601975715166 +47.35037674136233 +428.92971425404653 +-204.90469259755181 +81.18823810024864 +0 +120 +absolute + + + +0.01 +smooth + +8.536019364125814 +47.35037658576527 +428.9296848934659 +-204.9061197590106 +81.19870186024237 +0 +120 +absolute + + + +0.01 +smooth + +8.536018971948934 +47.350376430341264 +428.9296556288224 +-204.90753953404987 +81.20915451424142 +0 +120 +absolute + + + +0.01 +smooth + +8.536018580629753 +47.35037627509468 +428.9296264613415 +-204.90895136901784 +81.21959578545878 +0 +120 +absolute + + + +0.01 +smooth + +8.536018190176987 +47.350376120029836 +428.9295973922484 +-204.91035471026274 +81.23002539710741 +0 +120 +absolute + + + +0.01 +smooth + +8.536017800599366 +47.350375965151024 +428.92956842276806 +-204.91174900413264 +81.24044307240024 +0 +120 +absolute + + + +0.01 +smooth + +8.53601741190562 +47.3503758104626 +428.9295395541259 +-204.91313369697585 +81.25084853455033 +0 +120 +absolute + + + +0.01 +smooth + +8.536017024104469 +47.35037565596887 +428.9295107875471 +-204.9145082351405 +81.26124150677059 +0 +120 +absolute + + + +0.01 +smooth + +8.536016637204638 +47.35037550167413 +428.92948212425654 +-204.91587206497462 +81.27162171227398 +0 +120 +absolute + + + +0.01 +smooth + +8.536016251214859 +47.350375347582776 +428.9294535654798 +-204.91722463282665 +81.28198887427351 +0 +120 +absolute + + + +0.01 +smooth + +8.536015866143854 +47.35037519369905 +428.92942511244183 +-204.9185653850446 +81.29234271598213 +0 +120 +absolute + + + +0.01 +smooth + +8.53601548200035 +47.350375040027316 +428.9293967663678 +-204.91989376797665 +81.30268296061277 +0 +120 +absolute + + + +0.01 +smooth + +8.536015098793072 +47.35037488657193 +428.9293685284832 +-204.92120922797116 +81.31300933137848 +0 +120 +absolute + + + +0.01 +smooth + +8.536014716530746 +47.35037473333712 +428.92934040001273 +-204.92251121137608 +81.32332155149219 +0 +120 +absolute + + + +0.01 +smooth + +8.536014335222099 +47.35037458032727 +428.929312382182 +-204.9237991645397 +81.33361934416683 +0 +120 +absolute + + + +0.01 +smooth + +8.536013954875854 +47.35037442754672 +428.9292844762159 +-204.92507253381024 +81.34390243261542 +0 +120 +absolute + + + +0.01 +smooth + +8.536013575500737 +47.35037427499975 +428.92925668333976 +-204.9263307655357 +81.35417054005093 +0 +120 +absolute + + + +0.01 +smooth + +8.536013197105483 +47.35037412269073 +428.929229004779 +-204.92757330606457 +81.36442338968634 +0 +120 +absolute + + + +0.01 +smooth + +8.536012819698803 +47.35037397062392 +428.92920144175827 +-204.9287996017447 +81.37466070473457 +0 +120 +absolute + + + +0.01 +smooth + +8.536012443289433 +47.35037381880368 +428.9291739955032 +-204.9300090989245 +81.3848822084086 +0 +120 +absolute + + + +0.01 +smooth + +8.536012067886098 +47.350373667234344 +428.9291466672388 +-204.93120124395207 +81.39508762392146 +0 +120 +absolute + + + +0.01 +smooth + +8.53601169349752 +47.3503735159202 +428.92911945819014 +-204.93237548317555 +81.40527667448603 +0 +120 +absolute + + + +0.01 +smooth + +8.536011320132427 +47.3503733648656 +428.9290923695827 +-204.9335312629432 +81.41544908331537 +0 +120 +absolute + + + +0.01 +smooth + +8.536010947799546 +47.350373214074864 +428.9290654026415 +-204.93466802960316 +81.4256045736224 +0 +120 +absolute + + + +0.01 +smooth + +8.536010576507598 +47.35037306355227 +428.9290385585916 +-204.93578522950355 +81.43574286862004 +0 +120 +absolute + + + +0.01 +smooth + +8.536010206265319 +47.35037291330222 +428.92901183865854 +-204.93688230899272 +81.44586369152138 +0 +120 +absolute + + + +0.01 +smooth + +8.536009837081425 +47.35037276332897 +428.92898524406723 +-204.93795871441867 +81.45596676553932 +0 +120 +absolute + + + +0.01 +smooth + +8.536009468964645 +47.35037261363687 +428.92895877604286 +-204.9390138921297 +81.46605181388682 +0 +120 +absolute + + + +0.01 +smooth + +8.536009101923707 +47.35037246423025 +428.9289324358108 +-204.94004728847392 +81.47611855977685 +0 +120 +absolute + + + +0.01 +smooth + +8.536008735967334 +47.350372315113404 +428.92890622459595 +-204.94105834979956 +81.48616672642241 +0 +120 +absolute + + + +0.01 +smooth + +8.536008371104252 +47.350372166290676 +428.92888014362376 +-204.94204652245475 +81.49619603703646 +0 +120 +absolute + + + +0.01 +smooth + +8.536008007343188 +47.35037201776639 +428.92885419411925 +-204.94301125278773 +81.50620621483196 +0 +120 +absolute + + + +0.01 +smooth + +8.53600764469287 +47.35037186954485 +428.92882837730775 +-204.94395198714665 +81.5161969830219 +0 +120 +absolute + + + +0.01 +smooth + +8.536007283162018 +47.350371721630395 +428.92880269441434 +-204.94486817187965 +81.52616806481922 +0 +120 +absolute + + + +0.01 +smooth + +8.536006922759364 +47.35037157402734 +428.92877714666423 +-204.94575925333498 +81.53611918343691 +0 +120 +absolute + + + +0.01 +smooth + +8.536006563493633 +47.35037142674002 +428.9287517352825 +-204.9466246778608 +81.54605006208791 +0 +120 +absolute + + + +0.01 +smooth + +8.536006205373546 +47.350371279772745 +428.9287264614946 +-204.94746389180526 +81.55596042398524 +0 +120 +absolute + + + +0.01 +smooth + +8.536005848407832 +47.35037113312983 +428.9287013265255 +-204.94827634151656 +81.56584999234185 +0 +120 +absolute + + + +0.01 +smooth + +8.53600549260522 +47.35037098681562 +428.9286763316005 +-204.94906147334288 +81.57571849037069 +0 +120 +absolute + + + +0.01 +smooth + +8.53600513797443 +47.35037084083442 +428.92865147794464 +-204.94981873363247 +81.58556564128475 +0 +120 +absolute + + + +0.01 +smooth + +8.53600478452419 +47.350370695190556 +428.9286267667834 +-204.95054756873333 +81.59539116829698 +0 +120 +absolute + + + +0.01 +smooth + +8.536004432263228 +47.35037054988835 +428.92860219934164 +-204.95124742499382 +81.60519479462039 +0 +120 +absolute + + + +0.01 +smooth + +8.536004081200268 +47.35037040493214 +428.9285777768446 +-204.95191774876207 +81.61497624346791 +0 +120 +absolute + + + +0.01 +smooth + +8.536003731344035 +47.35037026032623 +428.92855350051764 +-204.95255798638624 +81.62473523805251 +0 +120 +absolute + + + +0.01 +smooth + +8.536003382703258 +47.35037011607494 +428.9285293715859 +-204.9531675842145 +81.63447150158717 +0 +120 +absolute + + + +0.01 +smooth + +8.536003035286662 +47.35036997218262 +428.9285053912745 +-204.95374598859505 +81.64418475728488 +0 +120 +absolute + + + +0.01 +smooth + +8.536002689102968 +47.350369828653555 +428.92848156080856 +-204.95429264587605 +81.6538747283586 +0 +120 +absolute + + + +0.01 +smooth + +8.53600234416091 +47.35036968549209 +428.92845788141335 +-204.95480700240574 +81.66354113802127 +0 +120 +absolute + + + +0.01 +smooth + +8.536002000469207 +47.35036954270254 +428.92843435431405 +-204.95528850453223 +81.6731837094859 +0 +120 +absolute + + + +0.01 +smooth + +8.536001658036588 +47.35036940028924 +428.9284109807359 +-204.95573659860372 +81.68280216596543 +0 +120 +absolute + + + +0.01 +smooth + +8.53600131687178 +47.35036925825649 +428.9283877619041 +-204.95615073096843 +81.69239623067286 +0 +120 +absolute + + + +0.01 +smooth + +8.536000976983505 +47.350369116608626 +428.92836469904364 +-204.95653034797448 +81.70196562682113 +0 +120 +absolute + + + +0.01 +smooth + +8.536000638380491 +47.35036897534998 +428.92834179337996 +-204.9568748959701 +81.71151007762322 +0 +120 +absolute + + + +0.01 +smooth + +8.536000301071466 +47.350368834484854 +428.9283190461381 +-204.95718382130343 +81.72102930629208 +0 +120 +absolute + + + +0.01 +smooth + +8.535999965065152 +47.35036869401759 +428.92829645854323 +-204.9574565703227 +81.73052303604075 +0 +120 +absolute + + + +0.01 +smooth + +8.535999630370277 +47.3503685539525 +428.9282740318206 +-204.95769258937608 +81.73999099008212 +0 +120 +absolute + + + +0.01 +smooth + +8.535999296995566 +47.350368414293904 +428.9282517671954 +-204.9578913248117 +81.74943289162918 +0 +120 +absolute + + + +0.01 +smooth + +8.535998964949746 +47.35036827504614 +428.92822966589273 +-204.95805222297776 +81.75884846389494 +0 +120 +absolute + + + +0.01 +smooth + +8.535998634241542 +47.3503681362135 +428.92820772913797 +-204.95817473022248 +81.76823743009233 +0 +120 +absolute + + + +0.01 +smooth + +8.535998304879682 +47.35036799780033 +428.92818595815606 +-204.95825829289404 +81.77759951343432 +0 +120 +absolute + + + +0.01 +smooth + +8.535997976872888 +47.35036785981096 +428.92816435417234 +-204.95830235734056 +81.7869344371339 +0 +120 +absolute + + + +0.01 +smooth + +8.5359976501785 +47.350367722229564 +428.92814291067106 +-204.9583076503247 +81.79624322503433 +0 +120 +absolute + + + +0.01 +smooth + +8.535997324329983 +47.35036758487433 +428.9281215572201 +-204.95828576847498 +81.80553762267628 +0 +120 +absolute + + + +0.01 +smooth + +8.535996999220778 +47.35036744770448 +428.9281002774746 +-204.95823992088978 +81.81482025522399 +0 +120 +absolute + + + +0.01 +smooth + +8.53599667485996 +47.35036731072453 +428.9280790724972 +-204.95817049202125 +81.82409081986177 +0 +120 +absolute + + + +0.01 +smooth + +8.535996351256616 +47.35036717393906 +428.9280579433506 +-204.95807786632153 +81.83334901377393 +0 +120 +absolute + + + +0.01 +smooth + +8.535996028419824 +47.3503670373526 +428.92803689109724 +-204.95796242824275 +81.8425945341448 +0 +120 +absolute + + + +0.01 +smooth + +8.535995706358662 +47.350366900969675 +428.92801591679967 +-204.95782456223716 +81.85182707815872 +0 +120 +absolute + + + +0.01 +smooth + +8.535995385082218 +47.35036676479483 +428.92799502152064 +-204.95766465275688 +81.86104634300001 +0 +120 +absolute + + + +0.01 +smooth + +8.535995064599572 +47.350366628832596 +428.92797420632263 +-204.95748308425402 +81.87025202585292 +0 +120 +absolute + + + +0.01 +smooth + +8.535994744919808 +47.35036649308754 +428.9279534722683 +-204.95728024118077 +81.87944382390188 +0 +120 +absolute + + + +0.01 +smooth + +8.535994426052003 +47.350366357564184 +428.9279328204202 +-204.95705650798936 +81.88862143433116 +0 +120 +absolute + + + +0.01 +smooth + +8.535994108005246 +47.35036622226707 +428.9279122518411 +-204.9568122691319 +81.89778455432507 +0 +120 +absolute + + + +0.01 +smooth + +8.53599379078861 +47.35036608720074 +428.9278917675932 +-204.95654790906053 +81.90693288106793 +0 +120 +absolute + + + +0.01 +smooth + +8.53599347441118 +47.350365952369714 +428.92787136873943 +-204.9562638122274 +81.91606611174406 +0 +120 +absolute + + + +0.01 +smooth + +8.53599315888204 +47.35036581777855 +428.92785105634226 +-204.95596036308467 +81.9251839435378 +0 +120 +absolute + + + +0.01 +smooth + +8.53599284421027 +47.35036568343179 +428.9278308314642 +-204.95563794608455 +81.93428607363346 +0 +120 +absolute + + + +0.01 +smooth + +8.53599253040495 +47.35036554933395 +428.9278106951679 +-204.95529694567918 +81.94337219921536 +0 +120 +absolute + + + +0.01 +smooth + +8.535992217475165 +47.350365415489605 +428.92779064851595 +-204.9549377463206 +81.95244201746782 +0 +120 +absolute + + + +0.01 +smooth + +8.535991905429995 +47.350365281903265 +428.927770692571 +-204.95456073246118 +81.96149522557519 +0 +120 +absolute + + + +0.01 +smooth + +8.535991594278522 +47.35036514857948 +428.92775082839563 +-204.95416628855293 +81.97053152072172 +0 +120 +absolute + + + +0.01 +smooth + +8.535991284029828 +47.35036501552278 +428.9277310570524 +-204.95375479904808 +81.97955060009181 +0 +120 +absolute + + + +0.01 +smooth + +8.535990974692995 +47.350364882737736 +428.9277113796039 +-204.9533266483988 +81.98855216086973 +0 +120 +absolute + + + +0.01 +smooth + +8.535990666277105 +47.350364750228856 +428.92769179711274 +-204.95288222105714 +81.99753590023982 +0 +120 +absolute + + + +0.01 +smooth + +8.535990358791238 +47.35036461800069 +428.92767231064147 +-204.95242190147542 +82.00650151538642 +0 +120 +absolute + + + +0.01 +smooth + +8.535990052244475 +47.35036448605777 +428.92765292125256 +-204.9519460741057 +82.01544870349379 +0 +120 +absolute + + + +0.01 +smooth + +8.535989746645905 +47.35036435440465 +428.927633630009 +-204.95145512340014 +82.02437716174632 +0 +120 +absolute + + + +0.01 +smooth + +8.5359894420046 +47.35036422304585 +428.927614437973 +-204.9509494338109 +82.03328658732829 +0 +120 +absolute + + + +0.01 +smooth + +8.535989138329649 +47.35036409198593 +428.9275953462072 +-204.95042938979017 +82.04217667742402 +0 +120 +absolute + + + +0.01 +smooth + +8.53598883563013 +47.35036396122942 +428.92757635577436 +-204.9498953757901 +82.05104712921785 +0 +120 +absolute + + + +0.01 +smooth + +8.535988533915123 +47.35036383078085 +428.92755746773685 +-204.9493477762628 +82.05989763989407 +0 +120 +absolute + + + +0.01 +smooth + +8.535988233193716 +47.35036370064477 +428.92753868315754 +-204.9487869756605 +82.06872790663705 +0 +120 +absolute + + + +0.01 +smooth + +8.535987933474985 +47.35036357082572 +428.9275200030988 +-204.94821335843534 +82.07753762663106 +0 +120 +absolute + + + +0.01 +smooth + +8.535987634768015 +47.35036344132824 +428.9275014286232 +-204.94762730903952 +82.08632649706047 +0 +120 +absolute + + + +0.01 +smooth + +8.535987337081883 +47.35036331215686 +428.9274829607934 +-204.94702921192507 +82.09509421510955 +0 +120 +absolute + + + +0.01 +smooth + +8.53598704042568 +47.35036318331613 +428.92746460067207 +-204.94641945154427 +82.10384047796266 +0 +120 +absolute + + + +0.01 +smooth + +8.535986744808476 +47.35036305481057 +428.9274463493216 +-204.9457984123492 +82.11256498280409 +0 +120 +absolute + + + +0.01 +smooth + +8.535986450239362 +47.350362926644756 +428.9274282078049 +-204.9451664787921 +82.12126742681818 +0 +120 +absolute + + + +0.01 +smooth + +8.535986156727416 +47.3503627988232 +428.92741017718424 +-204.9445240353251 +82.12994750718926 +0 +120 +absolute + + + +0.01 +smooth + +8.53598586428172 +47.350362671350446 +428.9273922585224 +-204.94387146640037 +82.13860492110165 +0 +120 +absolute + + + +0.01 +smooth + +8.535985572911358 +47.35036254423102 +428.92737445288185 +-204.94320915647006 +82.14723936573961 +0 +120 +absolute + + + +0.01 +smooth + +8.53598528262541 +47.3503624174695 +428.9273567613253 +-204.94253748998625 +82.15585053828755 +0 +120 +absolute + + + +0.01 +smooth + +8.535984993432955 +47.35036229107038 +428.9273391849153 +-204.9418568514012 +82.16443813592974 +0 +120 +absolute + + + +0.01 +smooth + +8.535984705343079 +47.35036216503824 +428.9273217247144 +-204.94116762516708 +82.17300185585052 +0 +120 +absolute + + + +0.01 +smooth + +8.535984418364862 +47.3503620393776 +428.92730438178523 +-204.94047019573594 +82.18154139523419 +0 +120 +absolute + + + +0.01 +smooth + +8.535984132507384 +47.350361914092986 +428.9272871571903 +-204.93976494756006 +82.1900564512651 +0 +120 +absolute + + + +0.01 +smooth + +8.535983847779729 +47.35036178918896 +428.92727005199225 +-204.93905226509156 +82.19854672112753 +0 +120 +absolute + + + +0.01 +smooth + +8.53598356419098 +47.35036166467005 +428.92725306725373 +-204.9383325327826 +82.20701190200583 +0 +120 +absolute + + + +0.01 +smooth + +8.535983281750216 +47.3503615405408 +428.9272362040373 +-204.93760613508528 +82.21545169108433 +0 +120 +absolute + + + +0.01 +smooth + +8.535983000466521 +47.35036141680575 +428.92721946340544 +-204.9368734564518 +82.2238657855473 +0 +120 +absolute + + + +0.01 +smooth + +8.535982720348974 +47.35036129346942 +428.92720284642087 +-204.93613488133437 +82.23225388257913 +0 +120 +absolute + + + +0.01 +smooth + +8.53598244140666 +47.35036117053638 +428.9271863541462 +-204.93539079418508 +82.24061567936411 +0 +120 +absolute + + + +0.01 +smooth + +8.535982163648656 +47.35036104801115 +428.92716998764394 +-204.93464157945613 +82.24895087308653 +0 +120 +absolute + + + +0.01 +smooth + +8.535981887084048 +47.350360925898286 +428.9271537479766 +-204.9338876215997 +82.25725916093076 +0 +120 +absolute + + + +0.01 +smooth + +8.535981611721919 +47.35036080420231 +428.927137636207 +-204.93312930506787 +82.2655402400811 +0 +120 +absolute + + + +0.01 +smooth + +8.535981337571346 +47.35036068292777 +428.92712165339753 +-204.93236701431283 +82.27379380772184 +0 +120 +absolute + + + +0.01 +smooth + +8.535981064641414 +47.350360562079196 +428.9271058006109 +-204.9316011337868 +82.28201956103734 +0 +120 +absolute + + + +0.01 +smooth + +8.535980792941203 +47.35036044166114 +428.9270900789096 +-204.9308320479419 +82.29021719721194 +0 +120 +absolute + + + +0.01 +smooth + +8.535980522479795 +47.35036032167814 +428.9270744893563 +-204.93006014123026 +82.29838641342991 +0 +120 +absolute + + + +0.01 +smooth + +8.535980253266274 +47.35036020213472 +428.9270590330136 +-204.9292857981041 +82.3065269068756 +0 +120 +absolute + + + +0.01 +smooth + +8.535979985309718 +47.35036008303544 +428.9270437109439 +-204.92850940301554 +82.31463837473332 +0 +120 +absolute + + + +0.01 +smooth + +8.535979718619211 +47.35035996438482 +428.92702852421013 +-204.9277313404167 +82.3227205141874 +0 +120 +absolute + + + +0.01 +smooth + +8.535979453203836 +47.350359846187416 +428.9270134738746 +-204.9269519947598 +82.33077302242215 +0 +120 +absolute + + + +0.01 +smooth + +8.535979189072672 +47.350359728447756 +428.92699856099995 +-204.92617175049702 +82.33879559662189 +0 +120 +absolute + + + +0.01 +smooth + +8.535978926234803 +47.35035961117039 +428.92698378664886 +-204.92539099208045 +82.34678793397094 +0 +120 +absolute + + + +0.01 +smooth + +8.535978664699309 +47.35035949435986 +428.9269691518839 +-204.92461010396227 +82.35474973165365 +0 +120 +absolute + + + +0.01 +smooth + +8.535978404475271 +47.35035937802068 +428.9269546577676 +-204.92382947059465 +82.3626806868543 +0 +120 +absolute + + + +0.01 +smooth + +8.535978145571775 +47.350359262157404 +428.92694030536256 +-204.92304947642984 +82.37058049675723 +0 +120 +absolute + + + +0.01 +smooth + +8.535977887997898 +47.35035914677459 +428.92692609573146 +-204.92227050591987 +82.37844885854678 +0 +120 +absolute + + + +0.01 +smooth + +8.535977631762727 +47.35035903187675 +428.9269120299367 +-204.9214929435169 +82.38628546940723 +0 +120 +absolute + + + +0.01 +smooth + +8.53597737686134 +47.350358917462636 +428.9268981072142 +-204.92071651420608 +82.39409041100815 +0 +120 +absolute + + + +0.01 +smooth + +8.535977122840961 +47.35035880334569 +428.9268842683027 +-204.91991989123002 +82.40187606217638 +0 +120 +absolute + + + +0.01 +smooth + +8.535976869487039 +47.35035868943796 +428.92687048490353 +-204.91909309815918 +82.40964824815023 +0 +120 +absolute + + + +0.01 +smooth + +8.535976616809046 +47.350358575744295 +428.9268567579336 +-204.91823673279455 +82.41740663957357 +0 +120 +absolute + + + +0.01 +smooth + +8.535976364816449 +47.35035846226948 +428.9268430883097 +-204.91735139293687 +82.42515090709016 +0 +120 +absolute + + + +0.01 +smooth + +8.53597611351871 +47.35035834901835 +428.9268294769484 +-204.91643767638695 +82.43288072134376 +0 +120 +absolute + + + +0.01 +smooth + +8.535975862925294 +47.35035823599569 +428.92681592476634 +-204.91549618094558 +82.44059575297818 +0 +120 +absolute + + + +0.01 +smooth + +8.535975613045679 +47.35035812320635 +428.92680243268063 +-204.9145275044137 +82.44829567263726 +0 +120 +absolute + + + +0.01 +smooth + +8.535975363889323 +47.35035801065511 +428.9267890016078 +-204.91353224459206 +82.45598015096478 +0 +120 +absolute + + + +0.01 +smooth + +8.535975115465689 +47.35035789834678 +428.92677563246457 +-204.91251099928144 +82.46364885860449 +0 +120 +absolute + + + +0.01 +smooth + +8.535974867784258 +47.350357786286196 +428.9267623261678 +-204.9114643662828 +82.47130146620027 +0 +120 +absolute + + + +0.01 +smooth + +8.535974620854487 +47.35035767447816 +428.92674908363415 +-204.91039294339686 +82.47893764439587 +0 +120 +absolute + + + +0.01 +smooth + +8.535974374685845 +47.35035756292747 +428.92673590578033 +-204.90929732842446 +82.48655706383508 +0 +120 +absolute + + + +0.01 +smooth + +8.535974129287798 +47.35035745163898 +428.92672279352325 +-204.90817811916648 +82.49415939516173 +0 +120 +absolute + + + +0.01 +smooth + +8.535973884669815 +47.350357340617464 +428.92670974777946 +-204.90703591342375 +82.50174430901963 +0 +120 +absolute + + + +0.01 +smooth + +8.535973640841362 +47.35035722986774 +428.9266967694658 +-204.90587130899706 +82.50931147605256 +0 +120 +absolute + + + +0.01 +smooth + +8.53597339781191 +47.35035711939462 +428.926683859499 +-204.90468490368727 +82.51686056690427 +0 +120 +absolute + + + +0.01 +smooth + +8.53597315559092 +47.35035700920293 +428.9266710187958 +-204.90347729529506 +82.52439125221862 +0 +120 +absolute + + + +0.01 +smooth + +8.535972914187859 +47.350356899297466 +428.92665824827293 +-204.90224908162145 +82.53190320263937 +0 +120 +absolute + + + +0.01 +smooth + +8.535972673612198 +47.35035678968307 +428.9266455488472 +-204.90100086046718 +82.53939608881039 +0 +120 +absolute + + + +0.01 +smooth + +8.5359724338734 +47.350356680364506 +428.9266329214352 +-204.8997332296331 +82.54686958137536 +0 +120 +absolute + + + +0.01 +smooth + +8.535972194980939 +47.35035657134664 +428.92662036695395 +-204.89844678692006 +82.55432335097822 +0 +120 +absolute + + + +0.01 +smooth + +8.535971956944273 +47.35035646263423 +428.92660788631986 +-204.8971421301288 +82.56175706826265 +0 +120 +absolute + + + +0.01 +smooth + +8.535971719772876 +47.35035635423213 +428.9265954804499 +-204.89581985706022 +82.56917040387252 +0 +120 +absolute + + + +0.01 +smooth + +8.535971483476212 +47.350356246145154 +428.9265831502608 +-204.89448056551515 +82.5765630284516 +0 +120 +absolute + + + +0.01 +smooth + +8.535971248063747 +47.35035613837807 +428.9265708966692 +-204.89312485329438 +82.58393461264367 +0 +120 +absolute + + + +0.01 +smooth + +8.535971013544952 +47.35035603093575 +428.92655872059186 +-204.89175331819874 +82.59128482709255 +0 +120 +absolute + + + +0.01 +smooth + +8.535970779929292 +47.35035592382296 +428.9265466229457 +-204.8903665580291 +82.59861334244206 +0 +120 +absolute + + + +0.01 +smooth + +8.535970547226228 +47.35035581704451 +428.9265346046471 +-204.88896517058618 +82.60591982933596 +0 +120 +absolute + + + +0.01 +smooth + +8.535970315445237 +47.35035571060526 +428.92652266661327 +-204.88754975367098 +82.6132039584181 +0 +120 +absolute + + + +0.01 +smooth + +8.535970084595778 +47.350355604509986 +428.92651080976054 +-204.8861209050842 +82.62046540033221 +0 +120 +absolute + + + +0.01 +smooth + +8.535969854687322 +47.350355498763484 +428.92649903500586 +-204.88467922262666 +82.62770382572212 +0 +120 +absolute + + + +0.01 +smooth + +8.535969625729338 +47.35035539337063 +428.92648734326605 +-204.8832253040993 +82.63491890523167 +0 +120 +absolute + + + +0.01 +smooth + +8.535969397731291 +47.35035528833616 +428.92647573545764 +-204.88175974730285 +82.64211030950462 +0 +120 +absolute + + + +0.01 +smooth + +8.535969170702643 +47.35035518366494 +428.9264642124974 +-204.8802831500381 +82.64927770918473 +0 +120 +absolute + + + +0.01 +smooth + +8.53596894465287 +47.35035507936176 +428.92645277530244 +-204.878796110106 +82.65642077491589 +0 +120 +absolute + + + +0.01 +smooth + +8.535968719591434 +47.35035497543144 +428.92644142478906 +-204.8772992253073 +82.66353917734182 +0 +120 +absolute + + + +0.01 +smooth + +8.5359684955278 +47.35035487187879 +428.9264301618742 +-204.87579309344284 +82.67063258710635 +0 +120 +absolute + + + +0.01 +smooth + +8.53596827247144 +47.350354768708634 +428.92641898747445 +-204.87427831231344 +82.67770067485327 +0 +120 +absolute + + + +0.01 +smooth + +8.535968050431817 +47.35035466592575 +428.92640790250687 +-204.87275547971993 +82.6847431112264 +0 +120 +absolute + + + +0.01 +smooth + +8.5359678294184 +47.35035456353499 +428.92639690788786 +-204.8712251934632 +82.69175956686952 +0 +120 +absolute + + + +0.01 +smooth + +8.535967609440656 +47.350354461541144 +428.9263860045343 +-204.86968805134396 +82.69874971242642 +0 +120 +absolute + + + +0.01 +smooth + +8.53596739050805 +47.35035435994903 +428.926375193363 +-204.86814465116313 +82.70571321854091 +0 +120 +absolute + + + +0.01 +smooth + +8.535967172630052 +47.350354258763446 +428.9263644752906 +-204.86659559072152 +82.7126497558568 +0 +120 +absolute + + + +0.01 +smooth + +8.535966955816125 +47.350354157989244 +428.92635385123396 +-204.8650414678199 +82.71955899501788 +0 +120 +absolute + + + +0.01 +smooth + +8.535966740075743 +47.35035405763119 +428.92634332210974 +-204.86348288025914 +82.72644060666794 +0 +120 +absolute + + + +0.01 +smooth + +8.535966525418367 +47.35035395769413 +428.9263328888347 +-204.86192042584008 +82.7332942614508 +0 +120 +absolute + + + +0.01 +smooth + +8.535966311853462 +47.35035385818286 +428.9263225523256 +-204.86035470236357 +82.74011963001021 +0 +120 +absolute + + + +0.01 +smooth + +8.535966099390503 +47.3503537591022 +428.9263123134992 +-204.85878630763034 +82.74691638299002 +0 +120 +absolute + + + +0.01 +smooth + +8.535965888038952 +47.350353660456946 +428.9263021732721 +-204.85721583944132 +82.75368419103404 +0 +120 +absolute + + + +0.01 +smooth + +8.535965677808274 +47.350353562251925 +428.92629213256123 +-204.85564389559727 +82.760422724786 +0 +120 +absolute + + + +0.01 +smooth + +8.535965468707941 +47.35035346449196 +428.9262821922832 +-204.85407107389904 +82.76713165488977 +0 +120 +absolute + + + +0.01 +smooth + +8.53596526074742 +47.35035336718184 +428.9262723533549 +-204.85249797214743 +82.7738106519891 +0 +120 +absolute + + + +0.01 +smooth + +8.53596505393617 +47.350353270326394 +428.92626261669295 +-204.85092518814338 +82.7804593867278 +0 +120 +absolute + + + +0.01 +smooth + +8.535964848283667 +47.35035317393043 +428.9262529832142 +-204.84935331968757 +82.7870775297497 +0 +120 +absolute + + + +0.01 +smooth + +8.535964643799375 +47.35035307799875 +428.92624345383524 +-204.84778296458092 +82.79366475169854 +0 +120 +absolute + + + +0.01 +smooth + +8.53596444049276 +47.35035298253618 +428.92623402947294 +-204.84621472062418 +82.80022072321819 +0 +120 +absolute + + + +0.01 +smooth + +8.535964238373289 +47.35035288754753 +428.9262247110439 +-204.84464918561827 +82.80674511495238 +0 +120 +absolute + + + +0.01 +smooth + +8.53596403745043 +47.3503527930376 +428.9262154994652 +-204.84308695736394 +82.81323759754495 +0 +120 +absolute + + + +0.01 +smooth + +8.53596383773365 +47.350352699011225 +428.92620639565314 +-204.8415286336621 +82.81969784163971 +0 +120 +absolute + + + +0.01 +smooth + +8.535963639232415 +47.350352605473205 +428.9261974005248 +-204.83997481231347 +82.82612551788041 +0 +120 +absolute + + + +0.01 +smooth + +8.535963441956195 +47.350352512428344 +428.92618851499674 +-204.83842609111898 +82.8325202969109 +0 +120 +absolute + + + +0.01 +smooth + +8.535963245914452 +47.35035241988146 +428.9261797399858 +-204.8368830678794 +82.83888184937496 +0 +120 +absolute + + + +0.01 +smooth + +8.535963051116658 +47.35035232783737 +428.92617107640876 +-204.83534634039555 +82.84520984591634 +0 +120 +absolute + + + +0.01 +smooth + +8.535962857572276 +47.35035223630089 +428.9261625251822 +-204.83381650646828 +82.85150395717893 +0 +120 +absolute + + + +0.01 +smooth + +8.535962665290775 +47.35035214527682 +428.9261540872229 +-204.8322941638984 +82.85776385380645 +0 +120 +absolute + + + +0.01 +smooth + +8.535962474281623 +47.35035205476999 +428.9261457634478 +-204.83077991048674 +82.86398920644275 +0 +120 +absolute + + + +0.01 +smooth + +8.535962284554287 +47.35035196478519 +428.92613755477345 +-204.8292743440342 +82.8701796857316 +0 +120 +absolute + + + +0.01 +smooth + +8.53596209611823 +47.350351875327256 +428.92612946211665 +-204.8277780623415 +82.87633496231682 +0 +120 +absolute + + + +0.01 +smooth + +8.535961908982923 +47.35035178640098 +428.92612148639415 +-204.8262916632095 +82.88245470684218 +0 +120 +absolute + + + +0.01 +smooth + +8.535961722777632 +47.3503516978436 +428.92611358674816 +-204.82480507043027 +82.88854992239034 +0 +120 +absolute + + + +0.01 +smooth + +8.535961537131882 +47.350351609492535 +428.9261057222317 +-204.82330800733956 +82.89463159415843 +0 +120 +absolute + + + +0.01 +smooth + +8.535961352055534 +47.350351521352955 +428.92609789362774 +-204.82180077105417 +82.9006993659621 +0 +120 +absolute + + + +0.01 +smooth + +8.535961167558439 +47.350351433429935 +428.9260901017193 +-204.82028365869078 +82.90675288161691 +0 +120 +absolute + + + +0.01 +smooth + +8.535960983650453 +47.35035134572863 +428.92608234728937 +-204.81875696736606 +82.91279178493853 +0 +120 +absolute + + + +0.01 +smooth + +8.535960800341432 +47.35035125825415 +428.9260746311206 +-204.81722099419653 +82.9188157197425 +0 +120 +absolute + + + +0.01 +smooth + +8.535960617641228 +47.35035117101161 +428.9260669539963 +-204.81567603629892 +82.92482432984445 +0 +120 +absolute + + + +0.01 +smooth + +8.535960435559705 +47.35035108400616 +428.92605931669925 +-204.81412239078998 +82.93081725906005 +0 +120 +absolute + + + +0.01 +smooth + +8.535960254106712 +47.3503509972429 +428.92605172001254 +-204.8125603547863 +82.93679415120482 +0 +120 +absolute + + + +0.01 +smooth + +8.535960073292106 +47.35035091072696 +428.9260441647191 +-204.8109902254046 +82.94275465009444 +0 +120 +absolute + + + +0.01 +smooth + +8.53595989312574 +47.35035082446347 +428.92603665160146 +-204.80941229976142 +82.94869839954445 +0 +120 +absolute + + + +0.01 +smooth + +8.535959713617476 +47.350350738457564 +428.92602918144325 +-204.80782687497353 +82.95462504337051 +0 +120 +absolute + + + +0.01 +smooth + +8.535959534777167 +47.35035065271435 +428.9260217550271 +-204.80623424815764 +82.96053422538822 +0 +120 +absolute + + + +0.01 +smooth + +8.535959356614661 +47.350350567238934 +428.9260143731359 +-204.8046347164302 +82.96642558941315 +0 +120 +absolute + + + +0.01 +smooth + +8.535959179139828 +47.3503504820365 +428.92600703655273 +-204.8030285769082 +82.97229877926097 +0 +120 +absolute + + + +0.01 +smooth + +8.535959002362514 +47.3503503971121 +428.9259997460606 +-204.80141612670806 +82.97815343874726 +0 +120 +absolute + + + +0.01 +smooth + +8.535958826292573 +47.350350312470894 +428.9259925024422 +-204.79979766294642 +82.98398921168757 +0 +120 +absolute + + + +0.01 +smooth + +8.53595865093987 +47.350350228118025 +428.9259853064809 +-204.7981734827402 +82.98980574189764 +0 +120 +absolute + + + +0.01 +smooth + +8.535958476314248 +47.35035014405858 +428.9259781589593 +-204.79654388320577 +82.99560267319296 +0 +120 +absolute + + + +0.01 +smooth + +8.535958302425572 +47.35035006029771 +428.9259710606605 +-204.79490916145994 +83.00137964938916 +0 +120 +absolute + + + +0.01 +smooth + +8.535958129283697 +47.35034997684055 +428.92596401236756 +-204.79326961461945 +83.00713631430192 +0 +120 +absolute + + + +0.01 +smooth + +8.535957956898471 +47.35034989369217 +428.9259570148632 +-204.7916255398008 +83.01287231174676 +0 +120 +absolute + + + +0.01 +smooth + +8.53595778527976 +47.35034981085772 +428.92595006893043 +-204.78997723412076 +83.01858728553933 +0 +120 +absolute + + + +0.01 +smooth + +8.535957614437411 +47.35034972834236 +428.92594317535253 +-204.78832499469596 +83.02428087949527 +0 +120 +absolute + + + +0.01 +smooth + +8.535957444381285 +47.350349646151166 +428.92593633491197 +-204.78666911864303 +83.02995273743008 +0 +120 +absolute + + + +0.01 +smooth + +8.535957275121234 +47.35034956428928 +428.925929548392 +-204.78500990307867 +83.0356025031595 +0 +120 +absolute + + + +0.01 +smooth + +8.53595710666712 +47.35034948276184 +428.9259228165756 +-204.78334764511965 +83.04122982049908 +0 +120 +absolute + + + +0.01 +smooth + +8.535956939028786 +47.35034940157394 +428.9259161402455 +-204.78168264188236 +83.04683433326436 +0 +120 +absolute + + + +0.01 +smooth + +8.5359567722161 +47.350349320730736 +428.925909520185 +-204.78001519048382 +83.05241568527109 +0 +120 +absolute + + + +0.01 +smooth + +8.535956606238912 +47.350349240237335 +428.9259029571767 +-204.7783455880404 +83.05797352033477 +0 +120 +absolute + + + +0.01 +smooth + +8.535956441107079 +47.35034916009885 +428.9258964520037 +-204.77667413166887 +83.06350748227104 +0 +120 +absolute + + + +0.01 +smooth + +8.535956276830456 +47.35034908032044 +428.92589000544916 +-204.775001118486 +83.06901721489552 +0 +120 +absolute + + + +0.01 +smooth + +8.535956113418898 +47.350349000907194 +428.9258836182957 +-204.77332684560824 +83.0745023620238 +0 +120 +absolute + + + +0.01 +smooth + +8.535955950882263 +47.35034892186425 +428.92587729132663 +-204.77165161015247 +83.07996256747151 +0 +120 +absolute + + + +0.01 +smooth + +8.535955789230403 +47.35034884319675 +428.92587102532457 +-204.76997570923518 +83.08539747505424 +0 +120 +absolute + + + +0.01 +smooth + +8.535955628473179 +47.350348764909775 +428.92586482107254 +-204.76829943997313 +83.09080672858761 +0 +120 +absolute + + + +0.01 +smooth + +8.53595546862044 +47.35034868700849 +428.9258586793538 +-204.76662309948298 +83.09618997188721 +0 +120 +absolute + + + +0.01 +smooth + +8.535955309682043 +47.350348609498 +428.925852600951 +-204.7649469848814 +83.10154684876865 +0 +120 +absolute + + + +0.01 +smooth + +8.535955151667848 +47.35034853238342 +428.925846586647 +-204.76327139328504 +83.10687700304759 +0 +120 +absolute + + + +0.01 +smooth + +8.535954994587705 +47.3503484556699 +428.9258406372251 +-204.7615966218105 +83.11218007853957 +0 +120 +absolute + + + +0.01 +smooth + +8.535954838451474 +47.35034837936254 +428.92583475346817 +-204.75992296757448 +83.11745571906022 +0 +120 +absolute + + + +0.01 +smooth + +8.53595468326901 +47.35034830346648 +428.925828936159 +-204.75825072769376 +83.12270356842515 +0 +120 +absolute + + + +0.01 +smooth + +8.535954529050166 +47.35034822798685 +428.9258231860807 +-204.75658019928488 +83.12792327044998 +0 +120 +absolute + + + +0.01 +smooth + +8.535954375804799 +47.35034815292874 +428.9258175040161 +-204.7549116794645 +83.13311446895032 +0 +120 +absolute + + + +0.01 +smooth + +8.535954223542767 +47.350348078297316 +428.9258118907484 +-204.75324546534938 +83.13827680774176 +0 +120 +absolute + + + +0.01 +smooth + +8.53595407227392 +47.35034800409767 +428.92580634706013 +-204.75158185405607 +83.1434099306399 +0 +120 +absolute + + + +0.01 +smooth + +8.535953922008119 +47.35034793033495 +428.92580087373466 +-204.74992114270128 +83.1485134814604 +0 +120 +absolute + + + +0.01 +smooth + +8.535953772755217 +47.350347857014256 +428.9257954715548 +-204.74826362840176 +83.15358710401883 +0 +120 +absolute + + + +0.01 +smooth + +8.535953624525071 +47.35034778414074 +428.92579014130354 +-204.74660960827404 +83.15863044213077 +0 +120 +absolute + + + +0.01 +smooth + +8.535953477327535 +47.35034771171949 +428.92578488376375 +-204.74495937943487 +83.1636431396119 +0 +120 +absolute + + + +0.01 +smooth + +8.535953331172463 +47.35034763975567 +428.92577969971836 +-204.74331323900088 +83.16862484027776 +0 +120 +absolute + + + +0.01 +smooth + +8.535953186069715 +47.35034756825438 +428.9257745899505 +-204.74167148408878 +83.17357518794401 +0 +120 +absolute + + + +0.01 +smooth + +8.535953042029142 +47.35034749722075 +428.925769555243 +-204.74003441181512 +83.17849382642623 +0 +120 +absolute + + + +0.01 +smooth + +8.535952899060604 +47.350347426659894 +428.9257645963788 +-204.73840231929668 +83.18338039954001 +0 +120 +absolute + + + +0.01 +smooth + +8.535952757173956 +47.35034735657695 +428.925759714141 +-204.7367755036501 +83.18823455110099 +0 +120 +absolute + + + +0.01 +smooth + +8.53595261637905 +47.350347286977055 +428.9257549093125 +-204.73515426199205 +83.19305592492478 +0 +120 +absolute + + + +0.01 +smooth + +8.535952476685743 +47.3503472178653 +428.9257501826762 +-204.73353889143914 +83.19784416482699 +0 +120 +absolute + + + +0.01 +smooth + +8.535952338103892 +47.35034714924683 +428.92574553501504 +-204.73192968910809 +83.2025989146232 +0 +120 +absolute + + + +0.01 +smooth + +8.535952200643353 +47.35034708112675 +428.925740967112 +-204.73032695211555 +83.20731981812905 +0 +120 +absolute + + + +0.01 +smooth + +8.535952064313978 +47.3503470135102 +428.92573647975007 +-204.7287309775782 +83.21200651916013 +0 +120 +absolute + + + +0.01 +smooth + +8.535951929125627 +47.35034694640232 +428.9257320737122 +-204.72714206261264 +83.21665866153202 +0 +120 +absolute + + + +0.01 +smooth + +8.535951795088152 +47.35034687980821 +428.92572774978134 +-204.72556050433562 +83.22127588906041 +0 +120 +absolute + + + +0.01 +smooth + +8.53595166221141 +47.350346813733 +428.9257235087405 +-204.72398659986374 +83.22585784556084 +0 +120 +absolute + + + +0.01 +smooth + +8.535951530505258 +47.350346748181806 +428.92571935137255 +-204.7224206463137 +83.23040417484893 +0 +120 +absolute + + + +0.01 +smooth + +8.535951399979552 +47.35034668315976 +428.9257152784605 +-204.72086294080214 +83.23491452074029 +0 +120 +absolute + + + +0.01 +smooth + +8.535951270644142 +47.35034661867199 +428.92571129078726 +-204.71931378044576 +83.23938852705055 +0 +120 +absolute + + + +0.01 +smooth + +8.53595114250889 +47.35034655472362 +428.9257073891359 +-204.7177734623612 +83.24382583759531 +0 +120 +absolute + + + +0.01 +smooth + +8.535951015583649 +47.35034649131978 +428.9257035742893 +-204.71624228366514 +83.24822609619017 +0 +120 +absolute + + + +0.01 +smooth + +8.535950889878274 +47.35034642846557 +428.9256998470303 +-204.71472054147418 +83.2525889466507 +0 +120 +absolute + + + +0.01 +smooth + +8.535950765139882 +47.35034636604252 +428.9256961845315 +-204.7132045054329 +83.2569225158096 +0 +120 +absolute + + + +0.01 +smooth + +8.535950640836594 +47.35034630380095 +428.92569253881845 +-204.71168613120193 +83.26124393018473 +0 +120 +absolute + + + +0.01 +smooth + +8.535950516962169 +47.35034624173857 +428.9256889090864 +-204.71016540017595 +83.26555333890944 +0 +120 +absolute + + + +0.01 +smooth + +8.535950393526765 +47.3503461798608 +428.9256852960059 +-204.70864254503715 +83.26985036076164 +0 +120 +absolute + + + +0.01 +smooth + +8.535950270540564 +47.3503461181731 +428.9256817002477 +-204.7071177984678 +83.27413461451921 +0 +120 +absolute + + + +0.01 +smooth + +8.535950148013734 +47.3503460566809 +428.92567812248194 +-204.70559139315006 +83.27840571896009 +0 +120 +absolute + + + +0.01 +smooth + +8.535950025956451 +47.350345995389596 +428.9256745633788 +-204.70406356176608 +83.28266329286214 +0 +120 +absolute + + + +0.01 +smooth + +8.535949904378889 +47.350345934304656 +428.9256710236093 +-204.7025345369981 +83.2869069550033 +0 +120 +absolute + + + +0.01 +smooth + +8.53594978329121 +47.3503458734315 +428.92566750384356 +-204.70100455152829 +83.29113632416147 +0 +120 +absolute + + + +0.01 +smooth + +8.535949662703596 +47.35034581277556 +428.925664004752 +-204.69947383803876 +83.2953510191145 +0 +120 +absolute + + + +0.01 +smooth + +8.535949542626213 +47.35034575234228 +428.925660527005 +-204.6979426292118 +83.29955065864031 +0 +120 +absolute + + + +0.01 +smooth + +8.535949423069235 +47.350345692137076 +428.92565707127335 +-204.69641115772959 +83.30373486151683 +0 +120 +absolute + + + +0.01 +smooth + +8.53594930404284 +47.350345632165386 +428.9256536382271 +-204.6948796562743 +83.30790324652195 +0 +120 +absolute + + + +0.01 +smooth + +8.53594918555719 +47.350345572432644 +428.9256502285368 +-204.69334835752807 +83.3120554324335 +0 +120 +absolute + + + +0.01 +smooth + +8.535949067622465 +47.350345512944294 +428.92564684287316 +-204.6918174941732 +83.31619103802952 +0 +120 +absolute + + + +0.01 +smooth + +8.535948950248834 +47.350345453705756 +428.92564348190626 +-204.69028729889177 +83.32030968208778 +0 +120 +absolute + + + +0.01 +smooth + +8.535948833446469 +47.35034539472245 +428.92564014630653 +-204.68875800436604 +83.32441098338622 +0 +120 +absolute + + + +0.01 +smooth + +8.535948717225546 +47.350345335999855 +428.9256368367449 +-204.6872298432782 +83.32849456070278 +0 +120 +absolute + + + +0.01 +smooth + +8.53594860159623 +47.35034527754335 +428.9256335538911 +-204.68570304831033 +83.3325600328153 +0 +120 +absolute + + + +0.01 +smooth + +8.535948486568701 +47.350345219358395 +428.92563029841614 +-204.68417785214478 +83.33660701850171 +0 +120 +absolute + + + +0.01 +smooth + +8.535948372153126 +47.35034516145042 +428.92562707099023 +-204.68265448746362 +83.34063513653993 +0 +120 +absolute + + + +0.01 +smooth + +8.535948258359676 +47.35034510382484 +428.9256238722837 +-204.68113318694907 +83.3446440057078 +0 +120 +absolute + + + +0.01 +smooth + +8.53594814519853 +47.35034504648714 +428.92562070296725 +-204.67961418328338 +83.3486332447833 +0 +120 +absolute + + + +0.01 +smooth + +8.535948032679855 +47.35034498944268 +428.92561756371117 +-204.67809770914866 +83.35260247254426 +0 +120 +absolute + + + +0.01 +smooth + +8.535947920813822 +47.35034493269694 +428.9256144551858 +-204.67658399722708 +83.3565513077686 +0 +120 +absolute + + + +0.01 +smooth + +8.53594780961061 +47.350344876255356 +428.92561137806194 +-204.675073280201 +83.36047936923427 +0 +120 +absolute + + + +0.01 +smooth + +8.535947699080381 +47.35034482012333 +428.9256083330095 +-204.67356579075235 +83.36438627571907 +0 +120 +absolute + + + +0.01 +smooth + +8.535947589233317 +47.35034476430632 +428.92560532069933 +-204.6720617615635 +83.36827164600098 +0 +120 +absolute + + + +0.01 +smooth + +8.535947480079587 +47.35034470880976 +428.92560234180183 +-204.67056142531663 +83.37213509885788 +0 +120 +absolute + + + +0.01 +smooth + +8.535947371629359 +47.35034465363905 +428.92559939698714 +-204.66906501469384 +83.37597625306765 +0 +120 +absolute + + + +0.01 +smooth + +8.53594726389281 +47.35034459879965 +428.925596486926 +-204.66757276237735 +83.37979472740821 +0 +120 +absolute + + + +0.01 +smooth + +8.53594715688011 +47.350344544297 +428.92559361228894 +-204.6660849010495 +83.38359014065747 +0 +120 +absolute + + + +0.01 +smooth + +8.53594705060143 +47.35034449013649 +428.92559077374585 +-204.66460166339215 +83.38736211159328 +0 +120 +absolute + + + +0.01 +smooth + +8.535946945066948 +47.350344436323624 +428.9255879719678 +-204.66312328208778 +83.3911102589936 +0 +120 +absolute + + + +0.01 +smooth + +8.53594684028683 +47.35034438286377 +428.92558520762486 +-204.6616499898185 +83.39483420163631 +0 +120 +absolute + + + +0.01 +smooth + +8.535946736271251 +47.350344329762386 +428.92558248138766 +-204.6601820192665 +83.39853355829929 +0 +120 +absolute + + + +0.01 +smooth + +8.535946633030383 +47.3503442770249 +428.92557979392643 +-204.65871960311392 +83.40220794776047 +0 +120 +absolute + + + +0.01 +smooth + +8.535946530574396 +47.35034422465677 +428.9255771459119 +-204.65726297404302 +83.40585698879771 +0 +120 +absolute + + + +0.01 +smooth + +8.535946428913466 +47.3503441726634 +428.92557453801425 +-204.65581236473588 +83.40948030018896 +0 +120 +absolute + + + +0.01 +smooth + +8.535946328057761 +47.35034412105021 +428.92557197090406 +-204.65436800787484 +83.41307750071206 +0 +120 +absolute + + + +0.01 +smooth + +8.535946228017457 +47.35034406982267 +428.92556944525165 +-204.65293013614195 +83.41664820914497 +0 +120 +absolute + + + +0.01 +smooth + +8.535946128802724 +47.350344018986185 +428.92556696172755 +-204.6514989822195 +83.42019204426555 +0 +120 +absolute + + + +0.01 +smooth + +8.535946030423734 +47.350343968546206 +428.9255645210022 +-204.65007477878962 +83.42370862485171 +0 +120 +absolute + + + +0.01 +smooth + +8.535945932890662 +47.350343918508145 +428.925562123746 +-204.6486577585345 +83.42719756968134 +0 +120 +absolute + + + +0.01 +smooth + +8.535945836213674 +47.35034386887745 +428.9255597706294 +-204.64724815413638 +83.43065849753238 +0 +120 +absolute + + + +0.01 +smooth + +8.535945740402951 +47.350343819659564 +428.92555746232284 +-204.64584619827738 +83.43409102718267 +0 +120 +absolute + + + +0.01 +smooth + +8.535945645468658 +47.3503437708599 +428.9255551994968 +-204.64445212363978 +83.43749477741017 +0 +120 +absolute + + + +0.01 +smooth + +8.53594555142097 +47.350343722483885 +428.92555298282167 +-204.64306616290565 +83.44086936699273 +0 +120 +absolute + + + +0.01 +smooth + +8.53594545827006 +47.35034367453698 +428.9255508129679 +-204.64168854875726 +83.44421441470828 +0 +120 +absolute + + + +0.01 +smooth + +8.535945366026098 +47.3503436270246 +428.9255486906059 +-204.6403195138768 +83.44752953933472 +0 +120 +absolute + + + +0.01 +smooth + +8.535945274699257 +47.35034357995217 +428.9255466164062 +-204.6389592909464 +83.45081435964993 +0 +120 +absolute + + + +0.01 +smooth + +8.53594518429971 +47.350343533325145 +428.9255445910391 +-204.6376081126483 +83.45406849443182 +0 +120 +absolute + + + +0.01 +smooth + +8.53594509483763 +47.350343487148926 +428.92554261517523 +-204.6362662116647 +83.4572915624583 +0 +120 +absolute + + + +0.01 +smooth + +8.535945006323185 +47.350343441428976 +428.9255406894849 +-204.63493382067776 +83.46048318250725 +0 +120 +absolute + + + +0.01 +smooth + +8.53594491876655 +47.350343396170715 +428.92553881463857 +-204.63361117236965 +83.46364297335657 +0 +120 +absolute + + + +0.01 +smooth + +8.5359448321779 +47.35034335137958 +428.92553699130656 +-204.63229849942263 +83.46677055378416 +0 +120 +absolute + + + +0.01 +smooth + +8.535944746567402 +47.35034330706099 +428.9255352201595 +-204.63099603451883 +83.46986554256796 +0 +120 +absolute + + + +0.01 +smooth + +8.535944661945232 +47.35034326322039 +428.9255335018678 +-204.6297040103404 +83.47292755848582 +0 +120 +absolute + + + +0.01 +smooth + +8.53594457832156 +47.35034321986322 +428.92553183710174 +-204.62842265956965 +83.47595622031568 +0 +120 +absolute + + + +0.01 +smooth + +8.535944495706559 +47.3503431769949 +428.925530226532 +-204.62715221488867 +83.4789511468354 +0 +120 +absolute + + + +0.01 +smooth + +8.535944414110402 +47.350343134620864 +428.92552867082884 +-204.62589290897967 +83.4819119568229 +0 +120 +absolute + + + +0.01 +smooth + +8.53594433354326 +47.35034309274655 +428.9255271706627 +-204.62464497452484 +83.48483826905606 +0 +120 +absolute + + + +0.01 +smooth + +8.535944254015305 +47.35034305137738 +428.9255257267041 +-204.6234086442064 +83.48772970231282 +0 +120 +absolute + + + +0.01 +smooth + +8.53594417553671 +47.350343010518806 +428.92552433962356 +-204.62218415070652 +83.49058587537104 +0 +120 +absolute + + + +0.01 +smooth + +8.535944098117648 +47.350342970176236 +428.9255230100913 +-204.62097172670735 +83.49340640700865 +0 +120 +absolute + + + +0.01 +smooth + +8.535944021768287 +47.350342930355126 +428.92552173877783 +-204.61977160489113 +83.49619091600354 +0 +120 +absolute + + + +0.01 +smooth + +8.535943946498806 +47.3503428910609 +428.9255205263537 +-204.61858401794004 +83.49893902113361 +0 +120 +absolute + + + +0.01 +smooth + +8.53594387231937 +47.35034285229897 +428.92551937348924 +-204.61740919853625 +83.50165034117674 +0 +120 +absolute + + + +0.01 +smooth + +8.535943799240158 +47.35034281407481 +428.92551828085504 +-204.61624737936197 +83.50432449491086 +0 +120 +absolute + + + +0.01 +smooth + +8.535943727114487 +47.350342776315195 +428.92551723879694 +-204.6150964359066 +83.5069665628106 +0 +120 +absolute + + + +0.01 +smooth + +8.535943655307706 +47.350342738702395 +428.92551620539194 +-204.61394690613577 +83.50959861177482 +0 +120 +absolute + + + +0.01 +smooth + +8.535943583760238 +47.35034270120704 +428.9255151763819 +-204.61279796588502 +83.51222267540676 +0 +120 +absolute + + + +0.01 +smooth + +8.535943512482222 +47.350342663834724 +428.92551415208845 +-204.611649838379 +83.51483835954384 +0 +120 +absolute + + + +0.01 +smooth + +8.535943441483795 +47.350342626591 +428.92551313283235 +-204.61050274684217 +83.51744527002337 +0 +120 +absolute + + + +0.01 +smooth + +8.535943370775101 +47.350342589481485 +428.92551211893556 +-204.6093569144994 +83.52004301268282 +0 +120 +absolute + + + +0.01 +smooth + +8.535943300366275 +47.35034255251173 +428.92551111071907 +-204.60821256457515 +83.52263119335953 +0 +120 +absolute + + + +0.01 +smooth + +8.535943230267458 +47.350342515687345 +428.92551010850417 +-204.6070699202941 +83.52520941789089 +0 +120 +absolute + + + +0.01 +smooth + +8.535943160488781 +47.350342479013875 +428.925509112612 +-204.60592920488077 +83.52777729211428 +0 +120 +absolute + + + +0.01 +smooth + +8.535943091040394 +47.350342442496945 +428.92550812336424 +-204.60479064155987 +83.53033442186714 +0 +120 +absolute + + + +0.01 +smooth + +8.53594302193243 +47.35034240614212 +428.9255071410821 +-204.603654453556 +83.53288041298678 +0 +120 +absolute + + + +0.01 +smooth + +8.535942953175029 +47.35034236995497 +428.92550616608673 +-204.60252086409375 +83.53541487131065 +0 +120 +absolute + + + +0.01 +smooth + +8.535942884778324 +47.350342333941086 +428.92550519869934 +-204.60139009639767 +83.53793740267606 +0 +120 +absolute + + + +0.01 +smooth + +8.535942816752462 +47.350342298106064 +428.9255042392417 +-204.60026237369257 +83.5404476129205 +0 +120 +absolute + + + +0.01 +smooth + +8.535942749107576 +47.35034226245546 +428.92550328803475 +-204.59913791920292 +83.54294510788128 +0 +120 +absolute + + + +0.01 +smooth + +8.535942681853806 +47.350342226994876 +428.9255023453998 +-204.5980169561533 +83.5454294933958 +0 +120 +absolute + + + +0.01 +smooth + +8.53594261500129 +47.35034219172989 +428.92550141165844 +-204.5968997077684 +83.54790037530148 +0 +120 +absolute + + + +0.01 +smooth + +8.535942548560174 +47.35034215666607 +428.9255004871318 +-204.59578639727292 +83.55035735943568 +0 +120 +absolute + + + +0.01 +smooth + +8.53594248254058 +47.350342121809 +428.92549957214095 +-204.59467724789118 +83.55280005163573 +0 +120 +absolute + + + +0.01 +smooth + +8.535942416952663 +47.35034208716429 +428.9254986670077 +-204.5935724828482 +83.55522805773916 +0 +120 +absolute + + + +0.01 +smooth + +8.535942351806556 +47.3503420527375 +428.92549777205295 +-204.5924723253683 +83.55764098358323 +0 +120 +absolute + + + +0.01 +smooth + +8.535942287112395 +47.35034201853421 +428.9254968875981 +-204.5913769986762 +83.56003843500535 +0 +120 +absolute + + + +0.01 +smooth + +8.53594222288032 +47.35034198456002 +428.9254960139646 +-204.59028672599658 +83.56242001784297 +0 +120 +absolute + + + +0.01 +smooth + +8.535942159120474 +47.35034195082048 +428.9254951514737 +-204.58920173055384 +83.5647853379334 +0 +120 +absolute + + + +0.01 +smooth + +8.535942095842987 +47.350341917321195 +428.92549430044653 +-204.58812223557285 +83.56713400111406 +0 +120 +absolute + + + +0.01 +smooth + +8.53594203305801 +47.35034188406776 +428.9254934612049 +-204.58704846427813 +83.56946561322238 +0 +120 +absolute + + + +0.01 +smooth + +8.535941970775665 +47.35034185106573 +428.9254926340694 +-204.5859806398942 +83.57177978009564 +0 +120 +absolute + + + +0.01 +smooth + +8.535941909006105 +47.35034181832069 +428.9254918193619 +-204.58491898564574 +83.5740761075713 +0 +120 +absolute + + + +0.01 +smooth + +8.535941847759464 +47.35034178583825 +428.9254910174036 +-204.5838637247574 +83.57635420148678 +0 +120 +absolute + + + +0.01 +smooth + +8.535941787045877 +47.35034175362394 +428.9254902285154 +-204.5828150804537 +83.57861366767935 +0 +120 +absolute + + + +0.01 +smooth + +8.535941726875489 +47.35034172168341 +428.9254894530194 +-204.5817732759595 +83.58085411198654 +0 +120 +absolute + + + +0.01 +smooth + +8.535941667258431 +47.35034169002218 +428.9254886912361 +-204.58073853449912 +83.58307514024561 +0 +120 +absolute + + + +0.01 +smooth + +8.535941608204851 +47.35034165864586 +428.9254879434873 +-204.57971107929734 +83.58527635829401 +0 +120 +absolute + + + +0.01 +smooth + +8.53594154972488 +47.35034162756005 +428.9254872100943 +-204.57869113357873 +83.58745737196915 +0 +120 +absolute + + + +0.01 +smooth + +8.535941491828659 +47.350341596770285 +428.925486491378 +-204.5776789205679 +83.58961778710835 +0 +120 +absolute + + + +0.01 +smooth + +8.535941434526327 +47.35034156628218 +428.9254857876602 +-204.57667466348948 +83.59175720954904 +0 +120 +absolute + + + +0.01 +smooth + +8.535941377828022 +47.350341536101325 +428.92548509926183 +-204.5756785855681 +83.59387524512859 +0 +120 +absolute + + + +0.01 +smooth + +8.535941321743884 +47.35034150623327 +428.92548442650457 +-204.57469091002838 +83.59597149968441 +0 +120 +absolute + + + +0.01 +smooth + +8.53594126628405 +47.350341476683624 +428.92548376970944 +-204.57371186009487 +83.59804557905387 +0 +120 +absolute + + + +0.01 +smooth + +8.53594121145866 +47.35034144745796 +428.9254831291978 +-204.57274165899224 +83.60009708907434 +0 +120 +absolute + + + +0.01 +smooth + +8.53594115727785 +47.35034141856187 +428.92548250529114 +-204.5717805299451 +83.60212563558323 +0 +120 +absolute + + + +0.01 +smooth + +8.535941103751764 +47.35034139000091 +428.92548189831047 +-204.57082869617807 +83.60413082441792 +0 +120 +absolute + + + +0.01 +smooth + +8.535941050890534 +47.35034136178068 +428.92548130857733 +-204.56988638091576 +83.60611226141583 +0 +120 +absolute + + + +0.01 +smooth + +8.535940998704303 +47.35034133390677 +428.92548073641296 +-204.5689538073828 +83.60806955241426 +0 +120 +absolute + + + +0.01 +smooth + +8.535940947203208 +47.35034130638475 +428.9254801821387 +-204.56803119880374 +83.61000230325068 +0 +120 +absolute + + + +0.01 +smooth + +8.535940896397388 +47.3503412792202 +428.9254796460758 +-204.56711877840326 +83.61191011976244 +0 +120 +absolute + + + +0.01 +smooth + +8.535940846296983 +47.35034125241871 +428.9254791285456 +-204.56621676940603 +83.61379260778693 +0 +120 +absolute + + + +0.01 +smooth + +8.53594079691213 +47.35034122598586 +428.92547862986953 +-204.5653253950365 +83.61564937316155 +0 +120 +absolute + + + +0.01 +smooth + +8.535940748252965 +47.350341199927215 +428.92547815036863 +-204.56444487851945 +83.61748002172367 +0 +120 +absolute + + + +0.01 +smooth + +8.535940700329633 +47.350341174248385 +428.9254776903644 +-204.5635754430794 +83.61928415931068 +0 +120 +absolute + + + +0.01 +smooth + +8.535940653152267 +47.35034114895494 +428.9254772501781 +-204.562717311941 +83.62106139175998 +0 +120 +absolute + + + +0.01 +smooth + +8.53594060673101 +47.35034112405246 +428.92547683013106 +-204.56187070832883 +83.62281132490892 +0 +120 +absolute + + + +0.01 +smooth + +8.535940561075996 +47.35034109954653 +428.92547643054456 +-204.5610358554676 +83.62453356459493 +0 +120 +absolute + + + +0.01 +smooth + +8.535940516197368 +47.35034107544274 +428.9254760517399 +-204.5602129765818 +83.62622771665538 +0 +120 +absolute + + + +0.01 +smooth + +8.53594047210526 +47.350341051746646 +428.9254756940385 +-204.55940229489613 +83.62789338692767 +0 +120 +absolute + + + +0.01 +smooth + +8.535940428809816 +47.35034102846385 +428.92547535776157 +-204.55860403363516 +83.62953018124915 +0 +120 +absolute + + + +0.01 +smooth + +8.53594038632117 +47.35034100559994 +428.92547504323045 +-204.55781841602357 +83.63113770545723 +0 +120 +absolute + + + +0.01 +smooth + +8.535940344649465 +47.35034098316048 +428.92547475076634 +-204.5570456652859 +83.63271556538928 +0 +120 +absolute + + + +0.01 +smooth + +8.535940303804834 +47.35034096115106 +428.9254744806908 +-204.55628600464684 +83.63426336688272 +0 +120 +absolute + + + +0.01 +smooth + +8.535940263797421 +47.35034093957728 +428.9254742333249 +-204.55553965733094 +83.63578071577493 +0 +120 +absolute + + + +0.01 +smooth + +8.535940224637361 +47.35034091844468 +428.92547400899 +-204.55480684656283 +83.63726721790329 +0 +120 +absolute + + + +0.01 +smooth + +8.535940186334795 +47.35034089775889 +428.9254738080076 +-204.55408779556717 +83.63872247910516 +0 +120 +absolute + + + +0.01 +smooth + +8.53594014889986 +47.350340877525454 +428.92547363069866 +-204.5533827275685 +83.64014610521795 +0 +120 +absolute + + + +0.01 +smooth + +8.535940112342695 +47.35034085774997 +428.9254734773848 +-204.5526918657915 +83.64153770207903 +0 +120 +absolute + + + +0.01 +smooth + +8.535940076673437 +47.35034083843803 +428.9254733483872 +-204.55201543346078 +83.64289687552584 +0 +120 +absolute + + + +0.01 +smooth + +8.53594004190223 +47.350340819595196 +428.9254732440272 +-204.55135365380093 +83.6442232313957 +0 +120 +absolute + + + +0.01 +smooth + +8.535940008039208 +47.35034080122707 +428.92547316462606 +-204.55070675003654 +83.64551637552603 +0 +120 +absolute + + + +0.01 +smooth + +8.53593997509451 +47.350340783339206 +428.92547311050515 +-204.55007494539234 +83.64677591375421 +0 +120 +absolute + + + +0.01 +smooth + +8.535939943078276 +47.35034076593722 +428.9254730819858 +-204.5494584630928 +83.64800145191764 +0 +120 +absolute + + + +0.01 +smooth + +8.535939911932019 +47.35034074899026 +428.9254730778763 +-204.54885629863793 +83.64919515017114 +0 +120 +absolute + + + +0.01 +smooth + +8.53593988103042 +47.35034073216681 +428.9254730843465 +-204.5482573084071 +83.65038026356703 +0 +120 +absolute + + + +0.01 +smooth + +8.535939850227322 +47.35034071538965 +428.92547309786477 +-204.54765892334382 +83.65156220782649 +0 +120 +absolute + + + +0.01 +smooth + +8.535939819530864 +47.350340698663366 +428.9254731182748 +-204.54706133486363 +83.65274065545661 +0 +120 +absolute + + + +0.01 +smooth + +8.53593978894917 +47.35034068199256 +428.9254731454202 +-204.54646473438174 +83.65391527896445 +0 +120 +absolute + + + +0.01 +smooth + +8.535939758490377 +47.35034066538191 +428.9254731791452 +-204.54586931331391 +83.65508575085715 +0 +120 +absolute + + + +0.01 +smooth + +8.535939728162619 +47.350340648835974 +428.92547321929317 +-204.54527526307547 +83.65625174364179 +0 +120 +absolute + + + +0.01 +smooth + +8.535939697974023 +47.350340632359384 +428.92547326570786 +-204.54468277508195 +83.6574129298254 +0 +120 +absolute + + + +0.01 +smooth + +8.535939667932727 +47.350340615956775 +428.9254733182335 +-204.54409204074892 +83.65856898191518 +0 +120 +absolute + + + +0.01 +smooth + +8.53593963804686 +47.35034059963273 +428.9254733767135 +-204.54350325149176 +83.65971957241815 +0 +120 +absolute + + + +0.01 +smooth + +8.535939608324556 +47.3503405833919 +428.92547344099177 +-204.54291659872604 +83.66086437384143 +0 +120 +absolute + + + +0.01 +smooth + +8.535939578773945 +47.35034056723889 +428.92547351091196 +-204.54233227386715 +83.66200305869212 +0 +120 +absolute + + + +0.01 +smooth + +8.53593954940316 +47.35034055117828 +428.9254735863179 +-204.54175046833058 +83.66313529947723 +0 +120 +absolute + + + +0.01 +smooth + +8.535939520220339 +47.350340535214734 +428.92547366705355 +-204.54117137353197 +83.66426076870397 +0 +120 +absolute + + + +0.01 +smooth + +8.535939491233606 +47.35034051935285 +428.9254737529624 +-204.54059518088667 +83.66537913887937 +0 +120 +absolute + + + +0.01 +smooth + +8.5359394624511 +47.35034050359723 +428.92547384388837 +-204.54002208181015 +83.66649008251053 +0 +120 +absolute + + + +0.01 +smooth + +8.53593943388095 +47.35034048795252 +428.92547393967527 +-204.539452267718 +83.66759327210458 +0 +120 +absolute + + + +0.01 +smooth + +8.535939405531288 +47.35034047242331 +428.9254740401667 +-204.53888593002557 +83.66868838016852 +0 +120 +absolute + + + +0.01 +smooth + +8.53593937741025 +47.35034045701423 +428.92547414520675 +-204.5383232601485 +83.66977507920956 +0 +120 +absolute + + + +0.01 +smooth + +8.535939349525966 +47.3503404417299 +428.925474254639 +-204.53776444950228 +83.67085304173472 +0 +120 +absolute + + + +0.01 +smooth + +8.535939321886566 +47.3503404265749 +428.92547436830716 +-204.53720968950216 +83.67192194025107 +0 +120 +absolute + + + +0.01 +smooth + +8.535939294500189 +47.35034041155391 +428.92547448605524 +-204.5366591715639 +83.67298144726578 +0 +120 +absolute + + + +0.01 +smooth + +8.535939267374962 +47.350340396671484 +428.92547460772687 +-204.53611308710288 +83.67403123528592 +0 +120 +absolute + + + +0.01 +smooth + +8.535939240519015 +47.35034038193226 +428.9254747331657 +-204.53557162753452 +83.6750709768185 +0 +120 +absolute + + + +0.01 +smooth + +8.535939213940491 +47.350340367340884 +428.92547486221594 +-204.5350349842745 +83.67610034437075 +0 +120 +absolute + + + +0.01 +smooth + +8.535939187647513 +47.35034035290193 +428.92547499472084 +-204.5345033487381 +83.67711901044967 +0 +120 +absolute + + + +0.01 +smooth + +8.535939161648214 +47.35034033862003 +428.9254751305244 +-204.53397691234088 +83.67812664756237 +0 +120 +absolute + + + +0.01 +smooth + +8.535939135950734 +47.350340324499804 +428.92547526947055 +-204.53345586649837 +83.67912292821596 +0 +120 +absolute + + + +0.01 +smooth + +8.535939110563195 +47.35034031054586 +428.9254754114029 +-204.53294040262602 +83.68010752491752 +0 +120 +absolute + + + +0.01 +smooth + +8.535939085493736 +47.35034029676281 +428.92547555616517 +-204.53243071213927 +83.68108011017412 +0 +120 +absolute + + + +0.01 +smooth + +8.53593906075049 +47.350340283155305 +428.9254757036015 +-204.53192698645378 +83.68204035649293 +0 +120 +absolute + + + +0.01 +smooth + +8.535939036341585 +47.350340269727916 +428.9254758535552 +-204.5314294169848 +83.68298793638095 +0 +120 +absolute + + + +0.01 +smooth + +8.535939012275156 +47.350340256485275 +428.9254760058703 +-204.53093819514797 +83.68392252234533 +0 +120 +absolute + + + +0.01 +smooth + +8.535938988559336 +47.35034024343201 +428.9254761603906 +-204.5304535123588 +83.68484378689314 +0 +120 +absolute + + + +0.01 +smooth + +8.535938965202257 +47.35034023057271 +428.9254763169597 +-204.5299755600326 +83.68575140253147 +0 +120 +absolute + + + +0.01 +smooth + +8.53593894221205 +47.350340217912006 +428.9254764754215 +-204.52950452958507 +83.68664504176742 +0 +120 +absolute + + + +0.01 +smooth + +8.53593891959685 +47.35034020545454 +428.9254766356198 +-204.52904061243152 +83.6875243771081 +0 +120 +absolute + + + +0.01 +smooth + +8.535938897364787 +47.350340193204886 +428.92547679739835 +-204.52858399998763 +83.68838908106058 +0 +120 +absolute + + + +0.01 +smooth + +8.535938875523993 +47.35034018116769 +428.9254769606009 +-204.5281348836687 +83.68923882613197 +0 +120 +absolute + + + +0.01 +smooth + +8.535938854082605 +47.350340169347554 +428.9254771250713 +-204.5276934548903 +83.69007328482934 +0 +120 +absolute + + + +0.01 +smooth + +8.535938833048752 +47.35034015774909 +428.9254772906533 +-204.52725990506795 +83.6908921296598 +0 +120 +absolute + + + +0.01 +smooth + +8.535938812430565 +47.350340146376915 +428.92547745719054 +-204.52683442561707 +83.69169503313043 +0 +120 +absolute + + + +0.01 +smooth + +8.535938792236179 +47.35034013523566 +428.9254776245271 +-204.52641720795316 +83.69248166774835 +0 +120 +absolute + + + +0.01 +smooth + +8.535938772473724 +47.35034012432992 +428.9254777925065 +-204.52600844349178 +83.69325170602063 +0 +120 +absolute + + + +0.01 +smooth + +8.535938753151335 +47.35034011366434 +428.92547796097256 +-204.5256083236483 +83.69400482045435 +0 +120 +absolute + + + +0.01 +smooth + +8.535938734277146 +47.35034010324351 +428.92547812976915 +-204.5252170398383 +83.69474068355663 +0 +120 +absolute + + + +0.01 +smooth + +8.535938715859285 +47.35034009307204 +428.9254782987399 +-204.52483478347725 +83.69545896783457 +0 +120 +absolute + + + +0.01 +smooth + +8.535938697905884 +47.35034008315458 +428.9254784677289 +-204.5244617459806 +83.69615934579522 +0 +120 +absolute + + + +0.01 +smooth + +8.53593868042508 +47.350340073495715 +428.9254786365795 +-204.5240981187639 +83.69684148994571 +0 +120 +absolute + + + +0.01 +smooth + +8.535938663425004 +47.350340064100074 +428.92547880513587 +-204.52374409324253 +83.69750507279312 +0 +120 +absolute + + + +0.01 +smooth + +8.535938646913785 +47.35034005497227 +428.9254789732415 +-204.5233998608321 +83.69814976684455 +0 +120 +absolute + + + +0.01 +smooth + +8.53593863089956 +47.35034004611692 +428.92547914074026 +-204.52306561294802 +83.69877524460709 +0 +120 +absolute + + + +0.01 +smooth + +8.53593861539046 +47.35034003753864 +428.92547930747605 +-204.52274154100576 +83.69938117858783 +0 +120 +absolute + + + +0.01 +smooth + +8.535938600394616 +47.350340029242055 +428.9254794732925 +-204.52242783642092 +83.69996724129385 +0 +120 +absolute + + + +0.01 +smooth + +8.53593858592016 +47.35034002123177 +428.9254796380334 +-204.5221246906089 +83.70053310523227 +0 +120 +absolute + + + +0.01 +smooth + +8.53593857197523 +47.35034001351239 +428.92547980154256 +-204.5218322949852 +83.70107844291014 +0 +120 +absolute + + + +0.01 +smooth + +8.53593855856795 +47.35034000608856 +428.92547996366386 +-204.52155084096526 +83.70160292683462 +0 +120 +absolute + + + +0.01 +smooth + +8.535938545706458 +47.35033999896488 +428.92548012424095 +-204.52128051996465 +83.70210622951274 +0 +120 +absolute + + + +0.01 +smooth + +8.535938533398886 +47.35033999214596 +428.9254802831176 +-204.52102152339882 +83.70258802345163 +0 +120 +absolute + + + +0.01 +smooth + +8.535938521653364 +47.35033998563641 +428.9254804401377 +-204.52077404268329 +83.70304798115836 +0 +120 +absolute + + + +0.01 +smooth + +8.535938510478026 +47.35033997944087 +428.9254805951449 +-204.52053826923347 +83.70348577514004 +0 +120 +absolute + + + +0.01 +smooth + +8.535938499881006 +47.35033997356395 +428.92548074798304 +-204.52031439446492 +83.70390107790375 +0 +120 +absolute + + + +0.01 +smooth + +8.535938489870432 +47.35033996801025 +428.92548089849595 +-204.5201026097931 +83.70429356195659 +0 +120 +absolute + + + +0.01 +smooth + +8.535938480454442 +47.3503399627844 +428.92548104652724 +-204.51990310663348 +83.70466289980564 +0 +120 +absolute + + + +0.01 +smooth + +8.535938471641165 +47.35033995789101 +428.92548119192094 +-204.5197160764016 +83.70500876395803 +0 +120 +absolute + + + +0.01 +smooth + +8.535938463438733 +47.350339953334704 +428.92548133452067 +-204.5195417105129 +83.70533082692081 +0 +120 +absolute + + + +0.01 +smooth + +8.53593845585528 +47.350339949120084 +428.92548147417017 +-204.5193802003829 +83.7056287612011 +0 +120 +absolute + + + +0.01 +smooth + +8.535938448898937 +47.35033994525178 +428.9254816107134 +-204.51923173742702 +83.70590223930598 +0 +120 +absolute + + + +0.01 +smooth + +8.535938442577839 +47.350339941734404 +428.92548174399394 +-204.51909651306084 +83.70615093374253 +0 +120 +absolute + + + +0.01 +smooth + +8.535938436887998 +47.350339938565874 +428.925481873928 +-204.518974464861 +83.7063749903527 +0 +120 +absolute + + + +0.01 +smooth + +8.535938431435945 +47.350339935528694 +428.92548200278395 +-204.51885736716451 +83.70658977060903 +0 +120 +absolute + + + +0.01 +smooth + +8.53593842602955 +47.35033993251662 +428.9254821317024 +-204.51874119959652 +83.7068027768974 +0 +120 +absolute + + + +0.01 +smooth + +8.535938420669824 +47.350339929530286 +428.9254822606837 +-204.51862598524875 +83.70701396887617 +0 +120 +absolute + + + +0.01 +smooth + +8.535938415357773 +47.35033992657022 +428.9254823897273 +-204.51851174721273 +83.70722330620347 +0 +120 +absolute + + + +0.01 +smooth + +8.535938410094397 +47.350339923637 +428.9254825188335 +-204.51839850857996 +83.70743074853755 +0 +120 +absolute + + + +0.01 +smooth + +8.535938404880707 +47.35033992073116 +428.92548264800206 +-204.518286292442 +83.70763625553663 +0 +120 +absolute + + + +0.01 +smooth + +8.535938399717704 +47.35033991785335 +428.9254827772331 +-204.51817512189058 +83.70783978685895 +0 +120 +absolute + + + +0.01 +smooth + +8.535938394606397 +47.35033991500406 +428.9254829065264 +-204.51806502001725 +83.70804130216275 +0 +120 +absolute + + + +0.01 +smooth + +8.535938389547786 +47.350339912183884 +428.925483035882 +-204.51795600991343 +83.70824076110621 +0 +120 +absolute + + + +0.01 +smooth + +8.535938384542881 +47.3503399093934 +428.92548316529997 +-204.51784811467098 +83.70843812334762 +0 +120 +absolute + + + +0.01 +smooth + +8.53593837959269 +47.35033990663319 +428.9254832947802 +-204.51774135738125 +83.70863334854518 +0 +120 +absolute + + + +0.01 +smooth + +8.53593837469821 +47.35033990390377 +428.9254834243224 +-204.51763576113586 +83.70882639635707 +0 +120 +absolute + + + +0.01 +smooth + +8.535938369860453 +47.35033990120578 +428.92548355392694 +-204.5175313490265 +83.70901722644162 +0 +120 +absolute + + + +0.01 +smooth + +8.535938365080424 +47.350339898539744 +428.92548368359354 +-204.51742814414467 +83.70920579845695 +0 +120 +absolute + + + +0.01 +smooth + +8.535938360359125 +47.350339895906245 +428.9254838133222 +-204.517326169582 +83.70939207206135 +0 +120 +absolute + + + +0.01 +smooth + +8.535938355697564 +47.35033989330585 +428.92548394311285 +-204.51722544843005 +83.70957600691303 +0 +120 +absolute + + + +0.01 +smooth + +8.535938351096744 +47.35033989073909 +428.92548407296533 +-204.5171260037803 +83.70975756267019 +0 +120 +absolute + + + +0.01 +smooth + +8.535938346557671 +47.3503398882066 +428.92548420287994 +-204.51702785872448 +83.70993669899111 +0 +120 +absolute + + + +0.01 +smooth + +8.535938342081353 +47.35033988570893 +428.9254843328564 +-204.51693103635412 +83.71011337553401 +0 +120 +absolute + + + +0.01 +smooth + +8.535938337668794 +47.350339883246605 +428.92548446289453 +-204.5168355597608 +83.71028755195707 +0 +120 +absolute + + + +0.01 +smooth + +8.535938333320997 +47.35033988082024 +428.9254845929946 +-204.5167414520361 +83.71045918791856 +0 +120 +absolute + + + +0.01 +smooth + +8.535938329038972 +47.350339878430404 +428.92548472315656 +-204.51664873627158 +83.7106282430767 +0 +120 +absolute + + + +0.01 +smooth + +8.535938324823716 +47.350339876077626 +428.9254848533799 +-204.5165574355589 +83.71079467708967 +0 +120 +absolute + + + +0.01 +smooth + +8.535938320676243 +47.35033987376252 +428.9254849836651 +-204.51646757298957 +83.71095844961577 +0 +120 +absolute + + + +0.01 +smooth + +8.535938316597555 +47.35033987148564 +428.92548511401196 +-204.51637917165516 +83.7111195203132 +0 +120 +absolute + + + +0.01 +smooth + +8.535938312588659 +47.350339869247534 +428.9254852444202 +-204.5162922546473 +83.71127784884017 +0 +120 +absolute + + + +0.01 +smooth + +8.53593830865056 +47.35033986704882 +428.9254853748903 +-204.51620684505767 +83.71143339485495 +0 +120 +absolute + + + +0.01 +smooth + +8.535938304784256 +47.35033986488999 +428.9254855054216 +-204.51612296597756 +83.71158611801569 +0 +120 +absolute + + + +0.01 +smooth + +8.535938300990765 +47.35033986277168 +428.9254856360145 +-204.5160406404989 +83.7117359779807 +0 +120 +absolute + + + +0.01 +smooth + +8.535938297271082 +47.35033986069445 +428.92548576666877 +-204.515959891713 +83.71188293440815 +0 +120 +absolute + + + +0.01 +smooth + +8.535938293626216 +47.35033985865883 +428.9254858973843 +-204.5158807427116 +83.71202694695629 +0 +120 +absolute + + + +0.01 +smooth + +8.535938290057175 +47.350339856665435 +428.92548602816134 +-204.51580321658628 +83.71216797528336 +0 +120 +absolute + + + +0.01 +smooth + +8.535938286564962 +47.35033985471482 +428.92548615899966 +-204.51572733642848 +83.71230597904756 +0 +120 +absolute + + + +0.01 +smooth + +8.535938283150578 +47.350339852807515 +428.92548628989914 +-204.5156531253299 +83.71244091790712 +0 +120 +absolute + + + +0.01 +smooth + +8.535938279815038 +47.35033985094416 +428.92548642085984 +-204.51558060638214 +83.7125727515203 +0 +120 +absolute + + + +0.01 +smooth + +8.53593827655934 +47.35033984912527 +428.9254865518817 +-204.51550980267675 +83.7127014395453 +0 +120 +absolute + + + +0.01 +smooth + +8.535938273384492 +47.350339847351435 +428.9254866829647 +-204.5154407373053 +83.71282694164034 +0 +120 +absolute + + + +0.01 +smooth + +8.535938270291497 +47.35033984562322 +428.9254868141087 +-204.5153734333594 +83.71294921746366 +0 +120 +absolute + + + +0.01 +smooth + +8.535938267281365 +47.35033984394118 +428.92548694531376 +-204.51530791393054 +83.71306822667349 +0 +120 +absolute + + + +0.01 +smooth + +8.535938264355096 +47.35033984230591 +428.9254870765798 +-204.51524420211047 +83.71318392892802 +0 +120 +absolute + + + +0.01 +smooth + +8.535938261513698 +47.35033984071795 +428.9254872079068 +-204.5151823209906 +83.71329628388555 +0 +120 +absolute + + + +0.01 +smooth + +8.535938258758176 +47.350339839177906 +428.92548733929465 +-204.51512229366264 +83.71340525120426 +0 +120 +absolute + + + +0.01 +smooth + +8.535938256089535 +47.350339837686306 +428.9254874707434 +-204.51506414321807 +83.71351079054237 +0 +120 +absolute + + + +0.01 +smooth + +8.535938253508784 +47.350339836243755 +428.92548760225293 +-204.51500789274854 +83.71361286155813 +0 +120 +absolute + + + +0.01 +smooth + +8.535938251016923 +47.3503398348508 +428.9254877338232 +-204.51495356534568 +83.71371142390976 +0 +120 +absolute + + + +0.01 +smooth + +8.535938248614958 +47.35033983350801 +428.9254878654542 +-204.51490118410095 +83.71380643725547 +0 +120 +absolute + + + +0.01 +smooth + +8.535938246303896 +47.35033983221597 +428.9254879971459 +-204.51485077210597 +83.71389786125351 +0 +120 +absolute + + + +0.01 +smooth + +8.535938244084745 +47.35033983097523 +428.9254881288982 +-204.51480235245245 +83.71398565556211 +0 +120 +absolute + + + +0.01 +smooth + +8.535938241958506 +47.35033982978637 +428.9254882607112 +-204.5147559482318 +83.71406977983949 +0 +120 +absolute + + + +0.01 +smooth + +8.535938239926185 +47.35033982864995 +428.9254883925847 +-204.51471158253565 +83.71415019374385 +0 +120 +absolute + + + +0.01 +smooth + +8.535938237988788 +47.35033982756656 +428.92548852451876 +-204.51466927845564 +83.71422685693346 +0 +120 +absolute + + + +0.01 +smooth + +8.53593823614732 +47.350339826536754 +428.92548865651315 +-204.51462905908335 +83.71429972906651 +0 +120 +absolute + + + +0.01 +smooth + +8.535938234402792 +47.35033982556109 +428.92548878856815 +-204.51459094751027 +83.71436876980127 +0 +120 +absolute + + + +0.01 +smooth + +8.535938232756198 +47.35033982464016 +428.9254889206834 +-204.5145549668281 +83.71443393879592 +0 +120 +absolute + + + +0.01 +smooth + +8.535938231208554 +47.35033982377451 +428.925489052859 +-204.5145211401283 +83.71449519570872 +0 +120 +absolute + + + +0.01 +smooth + +8.535938229760859 +47.35033982296473 +428.92548918509493 +-204.51448949050257 +83.71455250019788 +0 +120 +absolute + + + +0.01 +smooth + +8.535938228414121 +47.35033982221138 +428.9254893173911 +-204.51446004104238 +83.71460581192164 +0 +120 +absolute + + + +0.01 +smooth + +8.535938227169344 +47.35033982151502 +428.9254894497475 +-204.51443281483944 +83.71465509053822 +0 +120 +absolute + + + +0.01 +smooth + +8.535938226027532 +47.35033982087623 +428.92548958216406 +-204.51440783498524 +83.71470029570585 +0 +120 +absolute + + + +0.01 +smooth + +8.535938224989696 +47.35033982029559 +428.92548971464066 +-204.5143851245714 +83.71474138708274 +0 +120 +absolute + + + +0.01 +smooth + +8.535938224056837 +47.35033981977364 +428.92548984717746 +-204.51436470668946 +83.71477832432714 +0 +120 +absolute + + + +0.01 +smooth + +8.53593822322996 +47.35033981931097 +428.9254899797742 +-204.51434660443107 +83.71481106709729 +0 +120 +absolute + + + +0.01 +smooth + +8.535938222510072 +47.35033981890814 +428.92549011243096 +-204.51433084088774 +83.71483957505137 +0 +120 +absolute + + + +0.01 +smooth + +8.535938221898178 +47.35033981856573 +428.9254902451478 +-204.5143174391511 +83.71486380784764 +0 +120 +absolute + + + +0.01 +smooth + +8.535938221395282 +47.35033981828428 +428.9254903779244 +-204.51430642231276 +83.71488372514432 +0 +120 +absolute + + + +0.01 +smooth + +8.535938221002391 +47.35033981806441 +428.9254905107609 +-204.51429781346422 +83.71489928659966 +0 +120 +absolute + + + +0.01 +smooth + +8.53593822072051 +47.35033981790664 +428.9254906436572 +-204.51429163569713 +83.71491045187184 +0 +120 +absolute + + + +0.01 +smooth + +8.535938220550644 +47.350339817811566 +428.9254907766134 +-204.51428791210307 +83.71491718061912 +0 +120 +absolute + + + +0.01 +smooth + +8.535938220493799 +47.35033981777975 +428.9254909096292 +-204.51428666577357 +83.71491943249971 +0 +120 +absolute + + + + + + diff --git a/parameter-learning_nd_disc/kmls/saffa4.kml b/parameter-learning_nd_disc/kmls/saffa4.kml new file mode 100755 index 0000000..791df76 --- /dev/null +++ b/parameter-learning_nd_disc/kmls/saffa4.kml @@ -0,0 +1,67072 @@ + + + + + +Tour + + +0.01 +smooth + +8.536348154452593 +47.34969652396877 +412.35755233845094 +14.0290626583571 +88.46603184312883 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154459349 +47.34969652396768 +412.3576625956297 +14.029065733461069 +88.46603227695475 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154479546 +47.3496965239644 +412.35785637105494 +14.029074926583228 +88.4660335738708 +0 +120 +absolute + + + +0.01 +smooth + +8.5363481545131 +47.34969652395897 +412.35813261574714 +14.02909018943899 +88.4660357270346 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154559908 +47.34969652395142 +412.35849028072585 +14.02911147374374 +88.46603872960358 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154619883 +47.34969652394177 +412.35892831701125 +14.029138731212878 +88.46604257473541 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154692933 +47.34969652393007 +412.3594456756233 +14.029171913561804 +88.46604725558755 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154778961 +47.34969652391631 +412.36004130758175 +14.029210972505908 +88.46605276531751 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154877876 +47.34969652390055 +412.3607141639068 +14.029255859760593 +88.4660590970829 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154989582 +47.34969652388277 +412.3614631956181 +14.029306527041252 +88.46606624404123 +0 +120 +absolute + + + +0.01 +smooth + +8.536348155113988 +47.34969652386306 +412.36228735373595 +14.029362926063284 +88.46607419935003 +0 +120 +absolute + + + +0.01 +smooth + +8.536348155251 +47.34969652384141 +412.3631855892802 +14.029425008542084 +88.46608295616684 +0 +120 +absolute + + + +0.01 +smooth + +8.536348155400525 +47.34969652381786 +412.36415685327074 +14.029492726193054 +88.46609250764922 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815556247 +47.349696523792424 +412.3652000967273 +14.029566030731583 +88.46610284695467 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815573674 +47.34969652376514 +412.3663142706703 +14.029644873873071 +88.46611396724076 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815592324 +47.349696523736014 +412.36749832611923 +14.029729207332915 +88.466125861665 +0 +120 +absolute + + + +0.01 +smooth + +8.536348156121884 +47.3496965237051 +412.3687512140945 +14.029818982826514 +88.46613852338496 +0 +120 +absolute + + + +0.01 +smooth + +8.536348156332576 +47.349696523672414 +412.3700718856157 +14.029914152069262 +88.46615194555818 +0 +120 +absolute + + + +0.01 +smooth + +8.536348156555217 +47.34969652363798 +412.371459291703 +14.030014666776555 +88.46616612134216 +0 +120 +absolute + + + +0.01 +smooth + +8.536348156789721 +47.34969652360184 +412.37291238337633 +14.030120478663799 +88.46618104389448 +0 +120 +absolute + + + +0.01 +smooth + +8.536348157035986 +47.34969652356399 +412.37443011165533 +14.030231539446373 +88.46619670637263 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815729393 +47.3496965235245 +412.37601142756046 +14.03034780083969 +88.46621310193422 +0 +120 +absolute + + + +0.01 +smooth + +8.536348157563454 +47.34969652348335 +412.3776552821114 +14.03046921455914 +88.4662302237367 +0 +120 +absolute + + + +0.01 +smooth + +8.536348157844463 +47.349696523440606 +412.37936062632804 +14.030595732320117 +88.46624806493769 +0 +120 +absolute + + + +0.01 +smooth + +8.536348158136866 +47.349696523396275 +412.3811264112305 +14.030727305838028 +88.4662666186947 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815844057 +47.34969652335038 +412.38295158783865 +14.030863886828257 +88.46628587816524 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815875548 +47.349696523302974 +412.38483510717253 +14.031005427006212 +88.4663058365069 +0 +120 +absolute + + + +0.01 +smooth + +8.536348159081504 +47.349696523254075 +412.38677592025203 +14.031151878087288 +88.46632648687716 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815941855 +47.349696523203676 +412.3887729780971 +14.03130319178687 +88.46634782243362 +0 +120 +absolute + + + +0.01 +smooth + +8.536348159766519 +47.34969652315183 +412.39082523172755 +14.031459319820367 +88.46636983633374 +0 +120 +absolute + + + +0.01 +smooth + +8.536348160125323 +47.34969652309857 +412.3929316321635 +14.031620213903173 +88.46639252173513 +0 +120 +absolute + + + +0.01 +smooth + +8.53634816049487 +47.34969652304392 +412.3950911304249 +14.031785825750681 +88.46641587179532 +0 +120 +absolute + + + +0.01 +smooth + +8.536348160875063 +47.34969652298791 +412.3973026775316 +14.0319561070783 +88.46643987967182 +0 +120 +absolute + + + +0.01 +smooth + +8.536348161265812 +47.34969652293057 +412.39956522450393 +14.032131009601413 +88.4664645385222 +0 +120 +absolute + + + +0.01 +smooth + +8.53634816166702 +47.349696522871895 +412.40187772236135 +14.032310485035419 +88.46648984150397 +0 +120 +absolute + + + +0.01 +smooth + +8.536348162078596 +47.349696522811946 +412.40423912212395 +14.032494485095716 +88.46651578177465 +0 +120 +absolute + + + +0.01 +smooth + +8.536348162500445 +47.34969652275073 +412.4066483748119 +14.032682961497708 +88.46654235249183 +0 +120 +absolute + + + +0.01 +smooth + +8.536348162932475 +47.34969652268828 +412.40910443144475 +14.032875865956779 +88.46656954681302 +0 +120 +absolute + + + +0.01 +smooth + +8.536348163374596 +47.349696522624654 +412.4116062430431 +14.033073150188342 +88.46659735789578 +0 +120 +absolute + + + +0.01 +smooth + +8.536348163826707 +47.34969652255983 +412.4141527606263 +14.033274765907779 +88.46662577889762 +0 +120 +absolute + + + +0.01 +smooth + +8.536348164288722 +47.34969652249386 +412.4167429352145 +14.033480664830492 +88.4666548029761 +0 +120 +absolute + + + +0.01 +smooth + +8.536348164760543 +47.34969652242677 +412.41937571782773 +14.033690798671879 +88.46668442328875 +0 +120 +absolute + + + +0.01 +smooth + +8.536348165242082 +47.34969652235858 +412.42205005948574 +14.033905119147338 +88.46671463299309 +0 +120 +absolute + + + +0.01 +smooth + +8.536348165733239 +47.34969652228932 +412.4247649112088 +14.034123577972263 +88.46674542524669 +0 +120 +absolute + + + +0.01 +smooth + +8.536348166233925 +47.34969652221902 +412.4275192240167 +14.034346126862049 +88.46677679320705 +0 +120 +absolute + + + +0.01 +smooth + +8.536348166744046 +47.34969652214771 +412.43031194892933 +14.0345727175321 +88.46680873003176 +0 +120 +absolute + + + +0.01 +smooth + +8.53634816726351 +47.349696522075405 +412.4331420369666 +14.034803301697806 +88.46684122887831 +0 +120 +absolute + + + +0.01 +smooth + +8.53634816779222 +47.349696522002134 +412.43600843914874 +14.035037831074565 +88.46687428290429 +0 +120 +absolute + + + +0.01 +smooth + +8.536348168330086 +47.349696521927946 +412.4389101064955 +14.035276257377776 +88.4669078852672 +0 +120 +absolute + + + +0.01 +smooth + +8.536348168877012 +47.34969652185284 +412.44184599002676 +14.035518532322834 +88.46694202912457 +0 +120 +absolute + + + +0.01 +smooth + +8.536348169432909 +47.34969652177686 +412.4448150407627 +14.035764607625136 +88.46697670763396 +0 +120 +absolute + + + +0.01 +smooth + +8.53634816999768 +47.34969652170003 +412.44781620972316 +14.036014435000082 +88.46701191395292 +0 +120 +absolute + + + +0.01 +smooth + +8.536348170571234 +47.34969652162237 +412.45084844792797 +14.036267966163065 +88.46704764123896 +0 +120 +absolute + + + +0.01 +smooth + +8.536348171153477 +47.34969652154391 +412.4539107063973 +14.036525152829483 +88.46708388264965 +0 +120 +absolute + + + +0.01 +smooth + +8.536348171744313 +47.349696521464686 +412.45700193615096 +14.036785946714733 +88.46712063134248 +0 +120 +absolute + + + +0.01 +smooth + +8.536348172343653 +47.349696521384715 +412.460121088209 +14.03705029953421 +88.46715788047506 +0 +120 +absolute + + + +0.01 +smooth + +8.536348172951401 +47.34969652130402 +412.4632671135913 +14.037318163003313 +88.46719562320486 +0 +120 +absolute + + + +0.01 +smooth + +8.536348173567463 +47.34969652122264 +412.46643896331784 +14.037589488837439 +88.46723385268945 +0 +120 +absolute + + + +0.01 +smooth + +8.536348174191751 +47.3496965211406 +412.46963558840855 +14.037864228751983 +88.46727256208635 +0 +120 +absolute + + + +0.01 +smooth + +8.536348174824164 +47.349696521057915 +412.47285593988346 +14.038142334462343 +88.46731174455313 +0 +120 +absolute + + + +0.01 +smooth + +8.536348175464616 +47.34969652097463 +412.47609896876247 +14.038423757683919 +88.46735139324731 +0 +120 +absolute + + + +0.01 +smooth + +8.536348176113009 +47.34969652089076 +412.4793636260655 +14.038708450132098 +88.46739150132643 +0 +120 +absolute + + + +0.01 +smooth + +8.536348176769252 +47.34969652080633 +412.48264886281254 +14.038996363522285 +88.46743206194802 +0 +120 +absolute + + + +0.01 +smooth + +8.53634817743325 +47.34969652072138 +412.48595363002363 +14.039287449569878 +88.46747306826964 +0 +120 +absolute + + + +0.01 +smooth + +8.536348178104909 +47.34969652063592 +412.48927687871856 +14.039581659990269 +88.46751451344879 +0 +120 +absolute + + + +0.01 +smooth + +8.53634817878414 +47.34969652055 +412.49261755991733 +14.039878946498856 +88.46755639064305 +0 +120 +absolute + + + +0.01 +smooth + +8.536348179470846 +47.349696520463624 +412.49597462464 +14.040179260811037 +88.46759869300996 +0 +120 +absolute + + + +0.01 +smooth + +8.536348180164936 +47.349696520376824 +412.4993470239064 +14.04048255464221 +88.46764141370701 +0 +120 +absolute + + + +0.01 +smooth + +8.536348180866312 +47.34969652028964 +412.5027337087366 +14.040788779707768 +88.46768454589179 +0 +120 +absolute + + + +0.01 +smooth + +8.536348181574889 +47.34969652020209 +412.50613363015043 +14.041097887723112 +88.4677280827218 +0 +120 +absolute + + + +0.01 +smooth + +8.536348182290567 +47.3496965201142 +412.50954573916806 +14.041409830403634 +88.46777201735462 +0 +120 +absolute + + + +0.01 +smooth + +8.536348183013255 +47.34969652002599 +412.51296898680914 +14.041724559464733 +88.46781634294774 +0 +120 +absolute + + + +0.01 +smooth + +8.536348183742858 +47.349696519937496 +412.51640232409386 +14.04204202662181 +88.46786105265873 +0 +120 +absolute + + + +0.01 +smooth + +8.536348184479285 +47.349696519848756 +412.51984470204195 +14.042362183590255 +88.46790613964512 +0 +120 +absolute + + + +0.01 +smooth + +8.536348185222444 +47.349696519759775 +412.5232950716736 +14.042684982085468 +88.46795159706446 +0 +120 +absolute + + + +0.01 +smooth + +8.536348185972237 +47.3496965196706 +412.52675238400866 +14.043010373822845 +88.46799741807428 +0 +120 +absolute + + + +0.01 +smooth + +8.536348186728574 +47.349696519581244 +412.53021559006714 +14.043338310517786 +88.46804359583211 +0 +120 +absolute + + + +0.01 +smooth + +8.53634818749136 +47.34969651949174 +412.53368364086896 +14.043668743885686 +88.4680901234955 +0 +120 +absolute + + + +0.01 +smooth + +8.536348188260506 +47.3496965194021 +412.53715548743406 +14.044001625641936 +88.468136994222 +0 +120 +absolute + + + +0.01 +smooth + +8.536348189035913 +47.34969651931238 +412.5406300807822 +14.044336907501943 +88.46818420116911 +0 +120 +absolute + + + +0.01 +smooth + +8.53634818981888 +47.34969651922243 +412.54410853030714 +14.044675077008511 +88.46823181274429 +0 +120 +absolute + + + +0.01 +smooth + +8.536348190663 +47.349696519126255 +412.54767308456235 +14.045036720952067 +88.46828271990128 +0 +120 +absolute + + + +0.01 +smooth + +8.536348191595184 +47.34969651902093 +412.5513649606583 +14.04543211636257 +88.46833836536376 +0 +120 +absolute + + + +0.01 +smooth + +8.53634819261464 +47.34969651890677 +412.5551824768144 +14.045860869454952 +88.46839869321914 +0 +120 +absolute + + + +0.01 +smooth + +8.536348193720569 +47.34969651878401 +412.55912395124915 +14.046322586444132 +88.46846364755476 +0 +120 +absolute + + + +0.01 +smooth + +8.536348194912177 +47.34969651865292 +412.56318770218155 +14.046816873545058 +88.46853317245788 +0 +120 +absolute + + + +0.01 +smooth + +8.53634819618867 +47.34969651851377 +412.5673720478304 +14.04734333697264 +88.4686072120159 +0 +120 +absolute + + + +0.01 +smooth + +8.53634819754925 +47.34969651836681 +412.57167530641453 +14.04790158294182 +88.46868571031614 +0 +120 +absolute + + + +0.01 +smooth + +8.536348198993124 +47.34969651821231 +412.5760957961528 +14.048491217667522 +88.46876861144592 +0 +120 +absolute + + + +0.01 +smooth + +8.536348200519496 +47.34969651805054 +412.58063183526394 +14.04911184736467 +88.46885585949258 +0 +120 +absolute + + + +0.01 +smooth + +8.536348202127572 +47.34969651788178 +412.5852817419671 +14.04976307824821 +88.4689473985435 +0 +120 +absolute + + + +0.01 +smooth + +8.536348203816555 +47.34969651770627 +412.5900438344807 +14.050444516533048 +88.46904317268601 +0 +120 +absolute + + + +0.01 +smooth + +8.53634820558565 +47.349696517524286 +412.5949164310241 +14.051155768434135 +88.46914312600742 +0 +120 +absolute + + + +0.01 +smooth + +8.536348207434065 +47.34969651733609 +412.5998978498157 +14.051896440166388 +88.46924720259506 +0 +120 +absolute + + + +0.01 +smooth + +8.536348209360995 +47.34969651714194 +412.6049864090745 +14.052666137944737 +88.46935534653628 +0 +120 +absolute + + + +0.01 +smooth + +8.536348211365652 +47.3496965169421 +412.6101804270192 +14.053464467984112 +88.4694675019184 +0 +120 +absolute + + + +0.01 +smooth + +8.536348213447246 +47.34969651673687 +412.615478221869 +14.054291036499446 +88.46958361282881 +0 +120 +absolute + + + +0.01 +smooth + +8.53634821560497 +47.349696516526464 +412.62087811184244 +14.055145449705662 +88.46970362335479 +0 +120 +absolute + + + +0.01 +smooth + +8.536348217838036 +47.34969651631117 +412.6263784151584 +14.056027313817696 +88.46982747758372 +0 +120 +absolute + + + +0.01 +smooth + +8.53634822014565 +47.349696516091264 +412.631977450036 +14.056936235050472 +88.46995511960291 +0 +120 +absolute + + + +0.01 +smooth + +8.536348222527007 +47.34969651586698 +412.6376735346936 +14.057871819618919 +88.47008649349974 +0 +120 +absolute + + + +0.01 +smooth + +8.536348224981323 +47.34969651563861 +412.6434649873505 +14.058833673737974 +88.47022154336148 +0 +120 +absolute + + + +0.01 +smooth + +8.5363482275078 +47.34969651540643 +412.6493501262254 +14.059821403622557 +88.47036021327553 +0 +120 +absolute + + + +0.01 +smooth + +8.536348230105634 +47.34969651517065 +412.6553272695369 +14.060834615487597 +88.47050244732917 +0 +120 +absolute + + + +0.01 +smooth + +8.536348232774042 +47.34969651493158 +412.66139473550413 +14.061872915548026 +88.47064818960976 +0 +120 +absolute + + + +0.01 +smooth + +8.53634823551222 +47.349696514689484 +412.6675508423459 +14.06293591001878 +88.47079738420467 +0 +120 +absolute + + + +0.01 +smooth + +8.536348238319377 +47.34969651444462 +412.67379390828097 +14.064023205114776 +88.47094997520124 +0 +120 +absolute + + + +0.01 +smooth + +8.536348241194714 +47.34969651419722 +412.6801222515282 +14.065134407050952 +88.47110590668672 +0 +120 +absolute + + + +0.01 +smooth + +8.536348244137441 +47.34969651394761 +412.6865341903065 +14.066269122042234 +88.47126512274856 +0 +120 +absolute + + + +0.01 +smooth + +8.536348247146758 +47.34969651369601 +412.69302804283456 +14.067426956303553 +88.47142756747402 +0 +120 +absolute + + + +0.01 +smooth + +8.536348250221874 +47.3496965134427 +412.6996021273315 +14.068607516049836 +88.47159318495049 +0 +120 +absolute + + + +0.01 +smooth + +8.536348253361986 +47.34969651318793 +412.7062547620159 +14.069810407496009 +88.47176191926523 +0 +120 +absolute + + + +0.01 +smooth + +8.536348256566306 +47.34969651293197 +412.71298426510657 +14.071035236857007 +88.47193371450565 +0 +120 +absolute + + + +0.01 +smooth + +8.53634825983404 +47.34969651267512 +412.7197889548228 +14.072281610347762 +88.47210851475911 +0 +120 +absolute + + + +0.01 +smooth + +8.536348263164387 +47.349696512417594 +412.7266671493828 +14.073549134183192 +88.47228626411285 +0 +120 +absolute + + + +0.01 +smooth + +8.536348266556551 +47.34969651215968 +412.73361716700583 +14.074837414578234 +88.47246690665426 +0 +120 +absolute + + + +0.01 +smooth + +8.536348270009743 +47.349696511901655 +412.7406373259107 +14.076146057747817 +88.47265038647072 +0 +120 +absolute + + + +0.01 +smooth + +8.536348273523163 +47.34969651164376 +412.74772594431624 +14.07747466990687 +88.47283664764953 +0 +120 +absolute + + + +0.01 +smooth + +8.536348277096016 +47.34969651138626 +412.7548813404411 +14.078822857270318 +88.47302563427797 +0 +120 +absolute + + + +0.01 +smooth + +8.536348280727507 +47.34969651112944 +412.76210183250436 +14.080190226053094 +88.47321729044347 +0 +120 +absolute + + + +0.01 +smooth + +8.536348284416842 +47.34969651087355 +412.76938573872474 +14.081576382470129 +88.47341156023332 +0 +120 +absolute + + + +0.01 +smooth + +8.536348288163225 +47.34969651061885 +412.7767313773211 +14.082980932736346 +88.47360838773486 +0 +120 +absolute + + + +0.01 +smooth + +8.536348291965862 +47.34969651036562 +412.78413706651236 +14.08440348306668 +88.47380771703544 +0 +120 +absolute + + + +0.01 +smooth + +8.536348295823952 +47.34969651011412 +412.7916011245172 +14.085843639676057 +88.47400949222238 +0 +120 +absolute + + + +0.01 +smooth + +8.536348299736709 +47.349696509864614 +412.7991218695547 +14.087301008779406 +88.47421365738305 +0 +120 +absolute + + + +0.01 +smooth + +8.53634830370333 +47.34969650961735 +412.8066976198435 +14.088775196591659 +88.47442015660476 +0 +120 +absolute + + + +0.01 +smooth + +8.536348307723022 +47.34969650937263 +412.81432669360254 +14.090265809327743 +88.47462893397484 +0 +120 +absolute + + + +0.01 +smooth + +8.53634831179499 +47.34969650913068 +412.8220074090506 +14.091772453202587 +88.47483993358064 +0 +120 +absolute + + + +0.01 +smooth + +8.53634831591844 +47.34969650889179 +412.8297380844067 +14.093294734431122 +88.47505309950951 +0 +120 +absolute + + + +0.01 +smooth + +8.536348320092575 +47.34969650865621 +412.8375170378894 +14.094832259228276 +88.47526837584878 +0 +120 +absolute + + + +0.01 +smooth + +8.536348324316599 +47.3496965084242 +412.84534258771777 +14.096384633808979 +88.47548570668579 +0 +120 +absolute + + + +0.01 +smooth + +8.536348328589717 +47.34969650819605 +412.8532130521106 +14.09795146438816 +88.47570503610787 +0 +120 +absolute + + + +0.01 +smooth + +8.536348332911135 +47.349696507972 +412.86112674928665 +14.099532357180745 +88.47592630820236 +0 +120 +absolute + + + +0.01 +smooth + +8.536348337280057 +47.34969650775233 +412.8690819974649 +14.101126918401668 +88.47614946705659 +0 +120 +absolute + + + +0.01 +smooth + +8.536348341695689 +47.34969650753729 +412.87707711486405 +14.102734754265853 +88.47637445675791 +0 +120 +absolute + + + +0.01 +smooth + +8.536348346157231 +47.34969650732715 +412.8851104197031 +14.104355470988235 +88.47660122139364 +0 +120 +absolute + + + +0.01 +smooth + +8.536348350663895 +47.34969650712219 +412.89318023020076 +14.105988674783738 +88.47682970505113 +0 +120 +absolute + + + +0.01 +smooth + +8.53634835521488 +47.349696506922655 +412.9012848645759 +14.107633971867294 +88.47705985181773 +0 +120 +absolute + + + +0.01 +smooth + +8.536348359809393 +47.34969650672882 +412.9094226410475 +14.109290968453834 +88.47729160578075 +0 +120 +absolute + + + +0.01 +smooth + +8.536348364446637 +47.34969650654095 +412.9175918778342 +14.110959270758283 +88.47752491102756 +0 +120 +absolute + + + +0.01 +smooth + +8.536348369125818 +47.349696506359294 +412.925790893155 +14.112638484995571 +88.47775971164549 +0 +120 +absolute + + + +0.01 +smooth + +8.536348373846142 +47.349696506184145 +412.9340180052286 +14.114328217380631 +88.47799595172184 +0 +120 +absolute + + + +0.01 +smooth + +8.536348378606808 +47.349696506015746 +412.94227153227405 +14.116028074128385 +88.47823357534398 +0 +120 +absolute + + + +0.01 +smooth + +8.536348383407029 +47.34969650585437 +412.95054979250995 +14.11773766145377 +88.47847252659925 +0 +120 +absolute + + + +0.01 +smooth + +8.536348388246005 +47.349696505700265 +412.95885110415537 +14.119456585571712 +88.47871274957498 +0 +120 +absolute + + + +0.01 +smooth + +8.536348393122939 +47.34969650555372 +412.96717378542905 +14.12118445269714 +88.47895418835851 +0 +120 +absolute + + + +0.01 +smooth + +8.536348398037038 +47.34969650541499 +412.9755161545497 +14.12292086904498 +88.47919678703717 +0 +120 +absolute + + + +0.01 +smooth + +8.53634840298751 +47.349696505284335 +412.9838765297365 +14.124665440830166 +88.4794404896983 +0 +120 +absolute + + + +0.01 +smooth + +8.536348407973552 +47.34969650516203 +412.99225322920796 +14.126417774267626 +88.47968524042926 +0 +120 +absolute + + + +0.01 +smooth + +8.536348412994375 +47.34969650504832 +413.00064457118305 +14.128177475572288 +88.47993098331735 +0 +120 +absolute + + + +0.01 +smooth + +8.536348418049181 +47.349696504943495 +413.0090488738807 +14.129944150959082 +88.48017766244993 +0 +120 +absolute + + + +0.01 +smooth + +8.536348423137177 +47.349696504847806 +413.01746445551964 +14.131717406642938 +88.48042522191432 +0 +120 +absolute + + + +0.01 +smooth + +8.536348428257563 +47.34969650476151 +413.0258896343188 +14.133496848838782 +88.48067360579789 +0 +120 +absolute + + + +0.01 +smooth + +8.536348433409549 +47.34969650468489 +413.0343227284969 +14.135282083761547 +88.48092275818796 +0 +120 +absolute + + + +0.01 +smooth + +8.536348438592336 +47.34969650461821 +413.04276205627286 +14.13707271762616 +88.48117262317184 +0 +120 +absolute + + + +0.01 +smooth + +8.53634844380513 +47.349696504561706 +413.0512059358656 +14.138868356647551 +88.48142314483692 +0 +120 +absolute + + + +0.01 +smooth + +8.536348449047136 +47.349696504515684 +413.0596526854938 +14.14066860704065 +88.4816742672705 +0 +120 +absolute + + + +0.01 +smooth + +8.536348454317556 +47.34969650448036 +413.0681006233765 +14.142473075020384 +88.48192593455992 +0 +120 +absolute + + + +0.01 +smooth + +8.5363484596156 +47.34969650445604 +413.07654806773235 +14.144281366801684 +88.48217809079256 +0 +120 +absolute + + + +0.01 +smooth + +8.53634846494047 +47.34969650444299 +413.08499333678037 +14.146093088599477 +88.4824306800557 +0 +120 +absolute + + + +0.01 +smooth + +8.536348470302762 +47.34969650444212 +413.0934410963798 +14.147910626142563 +88.48268403059973 +0 +120 +absolute + + + +0.01 +smooth + +8.536348475825587 +47.34969650446101 +413.10195903150253 +14.149763840133348 +88.48294226816802 +0 +120 +absolute + + + +0.01 +smooth + +8.536348481541435 +47.34969650450154 +413.11056507188783 +14.151660564818314 +88.4832064744034 +0 +120 +absolute + + + +0.01 +smooth + +8.536348487448729 +47.34969650456347 +413.11925825752394 +14.15360033721898 +88.48347658419424 +0 +120 +absolute + + + +0.01 +smooth + +8.536348493545914 +47.34969650464664 +413.1280376283998 +14.155582694356895 +88.48375253242904 +0 +120 +absolute + + + +0.01 +smooth + +8.53634849983143 +47.34969650475087 +413.13690222450407 +14.157607173253595 +88.48403425399634 +0 +120 +absolute + + + +0.01 +smooth + +8.536348506303705 +47.34969650487591 +413.14585108582526 +14.159673310930605 +88.48432168378459 +0 +120 +absolute + + + +0.01 +smooth + +8.536348512961181 +47.34969650502162 +413.1548832523522 +14.161780644409468 +88.48461475668229 +0 +120 +absolute + + + +0.01 +smooth + +8.53634851980229 +47.34969650518777 +413.1639977640732 +14.163928710711714 +88.48491340757788 +0 +120 +absolute + + + +0.01 +smooth + +8.53634852682547 +47.34969650537418 +413.1731936609773 +14.166117046858881 +88.48521757135987 +0 +120 +absolute + + + +0.01 +smooth + +8.53634853402916 +47.34969650558066 +413.18246998305324 +14.16834518987251 +88.48552718291677 +0 +120 +absolute + + + +0.01 +smooth + +8.536348541411794 +47.34969650580699 +413.19182577028914 +14.170612676774121 +88.48584217713703 +0 +120 +absolute + + + +0.01 +smooth + +8.536348548971809 +47.34969650605301 +413.201260062674 +14.172919044585269 +88.48616248890916 +0 +120 +absolute + + + +0.01 +smooth + +8.53634855670764 +47.349696506318494 +413.21077190019645 +14.175263830327474 +88.48648805312162 +0 +120 +absolute + + + +0.01 +smooth + +8.536348564617722 +47.34969650660325 +413.220360322845 +14.177646571022274 +88.48681880466289 +0 +120 +absolute + + + +0.01 +smooth + +8.53634857270049 +47.34969650690709 +413.2300243706085 +14.180066803691204 +88.48715467842145 +0 +120 +absolute + + + +0.01 +smooth + +8.53634858095439 +47.34969650722983 +413.23976308347545 +14.182524065355805 +88.48749560928583 +0 +120 +absolute + + + +0.01 +smooth + +8.536348589377848 +47.34969650757125 +413.24957550143455 +14.185017893037612 +88.48784153214443 +0 +120 +absolute + + + +0.01 +smooth + +8.536348597969301 +47.349696507931185 +413.25946066447455 +14.187547823758148 +88.48819238188582 +0 +120 +absolute + + + +0.01 +smooth + +8.536348606727193 +47.349696508309414 +413.269417612584 +14.190113394538965 +88.48854809339846 +0 +120 +absolute + + + +0.01 +smooth + +8.536348615649954 +47.34969650870576 +413.27944538575167 +14.192714142401591 +88.48890860157081 +0 +120 +absolute + + + +0.01 +smooth + +8.536348624736021 +47.349696509119994 +413.28954302396585 +14.195349604367555 +88.48927384129134 +0 +120 +absolute + + + +0.01 +smooth + +8.53634863398383 +47.34969650955197 +413.2997095672155 +14.198019317458398 +88.48964374744855 +0 +120 +absolute + + + +0.01 +smooth + +8.536348643391818 +47.34969651000146 +413.3099440554894 +14.20072281869566 +88.490018254931 +0 +120 +absolute + + + +0.01 +smooth + +8.53634865295842 +47.34969651046826 +413.3202455287758 +14.203459645100864 +88.49039729862703 +0 +120 +absolute + + + +0.01 +smooth + +8.536348662682075 +47.34969651095221 +413.3306130270636 +14.206229333695552 +88.4907808134252 +0 +120 +absolute + + + +0.01 +smooth + +8.536348672561216 +47.34969651145308 +413.3410455903414 +14.209031421501264 +88.49116873421403 +0 +120 +absolute + + + +0.01 +smooth + +8.536348682594284 +47.349696511970706 +413.3515422585981 +14.21186544553953 +88.49156099588194 +0 +120 +absolute + + + +0.01 +smooth + +8.536348692779711 +47.34969651250487 +413.36210207182194 +14.214730942831883 +88.49195753331745 +0 +120 +absolute + + + +0.01 +smooth + +8.536348703115932 +47.34969651305537 +413.3727240700017 +14.217627450399863 +88.49235828140903 +0 +120 +absolute + + + +0.01 +smooth + +8.536348713601388 +47.34969651362204 +413.3834072931263 +14.220554505265007 +88.49276317504514 +0 +120 +absolute + + + +0.01 +smooth + +8.536348724234513 +47.349696514204666 +413.3941507811841 +14.223511644448841 +88.49317214911433 +0 +120 +absolute + + + +0.01 +smooth + +8.53634873501374 +47.34969651480305 +413.40495357416376 +14.226498404972906 +88.49358513850498 +0 +120 +absolute + + + +0.01 +smooth + +8.53634874593751 +47.349696515417 +413.415814712054 +14.229514323858734 +88.49400207810565 +0 +120 +absolute + + + +0.01 +smooth + +8.53634875700426 +47.34969651604634 +413.4267332348436 +14.232558938127873 +88.49442290280487 +0 +120 +absolute + + + +0.01 +smooth + +8.536348768212422 +47.349696516690834 +413.43770818252096 +14.23563178480184 +88.494847547491 +0 +120 +absolute + + + +0.01 +smooth + +8.53634877956043 +47.34969651735031 +413.4487385950748 +14.238732400902176 +88.49527594705259 +0 +120 +absolute + + + +0.01 +smooth + +8.53634879104673 +47.34969651802459 +413.459823512494 +14.241860323450425 +88.49570803637813 +0 +120 +absolute + + + +0.01 +smooth + +8.536348802669753 +47.34969651871346 +413.470961974767 +14.245015089468115 +88.4961437503561 +0 +120 +absolute + + + +0.01 +smooth + +8.536348814427932 +47.3496965194167 +413.48215302188237 +14.248196235976778 +88.49658302387493 +0 +120 +absolute + + + +0.01 +smooth + +8.536348826319706 +47.34969652013415 +413.4933956938289 +14.251403299997957 +88.49702579182318 +0 +120 +absolute + + + +0.01 +smooth + +8.53634883834351 +47.34969652086562 +413.5046890305953 +14.25463581855318 +88.49747198908929 +0 +120 +absolute + + + +0.01 +smooth + +8.536348850497784 +47.34969652161089 +413.5160320721701 +14.257893328663988 +88.49792155056177 +0 +120 +absolute + + + +0.01 +smooth + +8.536348862780963 +47.349696522369776 +413.5274238585421 +14.261175367351914 +88.49837441112909 +0 +120 +absolute + + + +0.01 +smooth + +8.536348875191479 +47.34969652314208 +413.53886342969963 +14.26448147163849 +88.4988305056797 +0 +120 +absolute + + + +0.01 +smooth + +8.536348887727772 +47.349696523927605 +413.5503498256317 +14.267811178545257 +88.49928976910213 +0 +120 +absolute + + + +0.01 +smooth + +8.536348900388278 +47.349696524726156 +413.5618820863268 +14.271164025093746 +88.49975213628485 +0 +120 +absolute + + + +0.01 +smooth + +8.536348913171432 +47.34969652553754 +413.57345925177356 +14.274539548305494 +88.50021754211633 +0 +120 +absolute + + + +0.01 +smooth + +8.536348926075672 +47.34969652636156 +413.5850803619607 +14.277937285202034 +88.50068592148509 +0 +120 +absolute + + + +0.01 +smooth + +8.536348939099433 +47.349696527198034 +413.59674445687693 +14.281356772804905 +88.50115720927957 +0 +120 +absolute + + + +0.01 +smooth + +8.536348952241152 +47.349696528046735 +413.6084505765107 +14.28479754813564 +88.50163134038829 +0 +120 +absolute + + + +0.01 +smooth + +8.536348965499263 +47.3496965289075 +413.62019776085083 +14.288259148215774 +88.50210824969967 +0 +120 +absolute + + + +0.01 +smooth + +8.536348978872205 +47.349696529780125 +413.6319850498859 +14.291741110066841 +88.50258787210225 +0 +120 +absolute + + + +0.01 +smooth + +8.536348992358413 +47.3496965306644 +413.6438114836045 +14.29524297071038 +88.50307014248453 +0 +120 +absolute + + + +0.01 +smooth + +8.536349005956323 +47.34969653156014 +413.6556761019955 +14.298764267167925 +88.50355499573496 +0 +120 +absolute + + + +0.01 +smooth + +8.536349019664375 +47.349696532467156 +413.6675779450473 +14.302304536461005 +88.504042366742 +0 +120 +absolute + + + +0.01 +smooth + +8.536349033480997 +47.34969653338524 +413.6795160527487 +14.305863315611164 +88.50453219039417 +0 +120 +absolute + + + +0.01 +smooth + +8.536349047404633 +47.349696534314205 +413.69148946508835 +14.309440141639936 +88.50502440157996 +0 +120 +absolute + + + +0.01 +smooth + +8.536349061433715 +47.349696535253855 +413.7034972220548 +14.313034551568848 +88.50551893518782 +0 +120 +absolute + + + +0.01 +smooth + +8.536349075566683 +47.349696536203986 +413.7155383636368 +14.316646082419442 +88.50601572610626 +0 +120 +absolute + + + +0.01 +smooth + +8.536349089801968 +47.34969653716442 +413.72761192982296 +14.320274271213256 +88.50651470922377 +0 +120 +absolute + + + +0.01 +smooth + +8.53634910413801 +47.34969653813495 +413.739716960602 +14.32391865497182 +88.5070158194288 +0 +120 +absolute + + + +0.01 +smooth + +8.536349118573245 +47.34969653911537 +413.75185249596245 +14.32757877071667 +88.50751899160984 +0 +120 +absolute + + + +0.01 +smooth + +8.536349133106109 +47.34969654010551 +413.76401757589304 +14.331254155469342 +88.50802416065541 +0 +120 +absolute + + + +0.01 +smooth + +8.536349147735036 +47.34969654110516 +413.77621124038234 +14.334944346251369 +88.50853126145395 +0 +120 +absolute + + + +0.01 +smooth + +8.536349162458466 +47.34969654211412 +413.78843252941914 +14.338648880084289 +88.50904022889397 +0 +120 +absolute + + + +0.01 +smooth + +8.536349177274833 +47.3496965431322 +413.800680482992 +14.342367293989637 +88.50955099786393 +0 +120 +absolute + + + +0.01 +smooth + +8.536349192182573 +47.3496965441592 +413.81295414108956 +14.346099124988946 +88.51006350325235 +0 +120 +absolute + + + +0.01 +smooth + +8.536349207180123 +47.349696545194945 +413.82525254370057 +14.349843910103756 +88.51057767994767 +0 +120 +absolute + + + +0.01 +smooth + +8.536349222265919 +47.349696546239215 +413.83757473081357 +14.353601186355597 +88.51109346283842 +0 +120 +absolute + + + +0.01 +smooth + +8.536349237438397 +47.34969654729183 +413.8499197424172 +14.357370490766005 +88.51161078681302 +0 +120 +absolute + + + +0.01 +smooth + +8.536349252695995 +47.34969654835258 +413.8622866185002 +14.36115136035652 +88.51212958676001 +0 +120 +absolute + + + +0.01 +smooth + +8.536349268037148 +47.34969654942128 +413.87467439905123 +14.364943332148668 +88.51264979756786 +0 +120 +absolute + + + +0.01 +smooth + +8.536349283460291 +47.34969655049773 +413.88708212405885 +14.368745943163994 +88.51317135412505 +0 +120 +absolute + + + +0.01 +smooth + +8.536349298963861 +47.34969655158176 +413.89950883351173 +14.372558730424027 +88.51369419132006 +0 +120 +absolute + + + +0.01 +smooth + +8.536349314546296 +47.34969655267313 +413.9119535673986 +14.376381230950305 +88.51421824404136 +0 +120 +absolute + + + +0.01 +smooth + +8.53634933020603 +47.349696553771665 +413.924415365708 +14.380212981764359 +88.51474344717747 +0 +120 +absolute + + + +0.01 +smooth + +8.536349345941499 +47.349696554877184 +413.9368932684287 +14.384053519887733 +88.51526973561683 +0 +120 +absolute + + + +0.01 +smooth + +8.536349361751142 +47.349696555989475 +413.94938631554925 +14.387902382341952 +88.51579704424798 +0 +120 +absolute + + + +0.01 +smooth + +8.536349377633393 +47.349696557108345 +413.96189354705837 +14.39175910614856 +88.51632530795932 +0 +120 +absolute + + + +0.01 +smooth + +8.536349393623482 +47.34969655824533 +413.9744225490678 +14.395628873380817 +88.51685522651725 +0 +120 +absolute + + + +0.01 +smooth + +8.53634940990143 +47.34969655945801 +413.98701470353114 +14.399539127031685 +88.5173905160638 +0 +120 +absolute + + + +0.01 +smooth + +8.536349426489659 +47.3496965607534 +413.99967502658916 +14.403493200623517 +88.51793162620027 +0 +120 +absolute + + + +0.01 +smooth + +8.536349443385948 +47.34969656213071 +414.01240282233863 +14.407490649373866 +88.51847849459614 +0 +120 +absolute + + + +0.01 +smooth + +8.536349460588074 +47.34969656358915 +414.02519739487576 +14.41153102850029 +88.51903105892099 +0 +120 +absolute + + + +0.01 +smooth + +8.53634947809381 +47.349696565127864 +414.0380580482966 +14.41561389322033 +88.5195892568442 +0 +120 +absolute + + + +0.01 +smooth + +8.53634949590093 +47.349696566746076 +414.0509840866978 +14.419738798751542 +88.52015302603537 +0 +120 +absolute + + + +0.01 +smooth + +8.53634951400721 +47.34969656844294 +414.0639748141753 +14.42390530031147 +88.52072230416391 +0 +120 +absolute + + + +0.01 +smooth + +8.536349532410428 +47.34969657021767 +414.0770295348258 +14.42811295311767 +88.5212970288994 +0 +120 +absolute + + + +0.01 +smooth + +8.536349551108351 +47.34969657206941 +414.09014755274507 +14.432361312387687 +88.52187713791128 +0 +120 +absolute + + + +0.01 +smooth + +8.536349570098764 +47.349696573997406 +414.10332817203005 +14.436649933339075 +88.52246256886905 +0 +120 +absolute + + + +0.01 +smooth + +8.536349589379435 +47.349696576000795 +414.11657069677665 +14.44097837118938 +88.52305325944224 +0 +120 +absolute + + + +0.01 +smooth + +8.536349608948141 +47.34969657807877 +414.12987443108113 +14.445346181156156 +88.52364914730029 +0 +120 +absolute + + + +0.01 +smooth + +8.536349628802663 +47.34969658023056 +414.14323867904017 +14.449752918456955 +88.5242501701128 +0 +120 +absolute + + + +0.01 +smooth + +8.536349648940766 +47.34969658245528 +414.1566627447496 +14.454198138309321 +88.52485626554915 +0 +120 +absolute + + + +0.01 +smooth + +8.536349669360233 +47.349696584752174 +414.1701459323061 +14.45868139593081 +88.5254673712789 +0 +120 +absolute + + + +0.01 +smooth + +8.536349690058831 +47.349696587120405 +414.18368754580575 +14.463202246538966 +88.52608342497156 +0 +120 +absolute + + + +0.01 +smooth + +8.536349711034347 +47.349696589559166 +414.19728688934515 +14.467760245351347 +88.52670436429662 +0 +120 +absolute + + + +0.01 +smooth + +8.536349732284545 +47.34969659206763 +414.2109432670202 +14.472354947585492 +88.52733012692349 +0 +120 +absolute + + + +0.01 +smooth + +8.536349753807205 +47.349696594644975 +414.22465598292735 +14.476985908458959 +88.52796065052178 +0 +120 +absolute + + + +0.01 +smooth + +8.536349775600105 +47.34969659729043 +414.2384243411631 +14.4816526831893 +88.52859587276096 +0 +120 +absolute + + + +0.01 +smooth + +8.536349797661016 +47.34969660000315 +414.25224764582373 +14.486354826994063 +88.52923573131052 +0 +120 +absolute + + + +0.01 +smooth + +8.536349819987707 +47.34969660278232 +414.2661252010052 +14.49109189509079 +88.52988016383992 +0 +120 +absolute + + + +0.01 +smooth + +8.536349842577964 +47.34969660562712 +414.2800563108041 +14.495863442697042 +88.53052910801868 +0 +120 +absolute + + + +0.01 +smooth + +8.536349865429562 +47.34969660853678 +414.29404027931685 +14.500669025030367 +88.53118250151635 +0 +120 +absolute + + + +0.01 +smooth + +8.536349888540268 +47.34969661151043 +414.30807641063944 +14.50550819730831 +88.53184028200234 +0 +120 +absolute + + + +0.01 +smooth + +8.536349911907863 +47.349696614547284 +414.32216400886824 +14.51038051474842 +88.53250238714621 +0 +120 +absolute + + + +0.01 +smooth + +8.53634993553012 +47.34969661764652 +414.3363023780999 +14.51528553256826 +88.53316875461745 +0 +120 +absolute + + + +0.01 +smooth + +8.536349959404815 +47.349696620807336 +414.35049082243034 +14.52022280598537 +88.53383932208554 +0 +120 +absolute + + + +0.01 +smooth + +8.53634998352972 +47.3496966240289 +414.3647286459559 +14.525191890217297 +88.53451402721997 +0 +120 +absolute + + + +0.01 +smooth + +8.536350007902616 +47.34969662731042 +414.37901515277315 +14.530192340481598 +88.53519280769027 +0 +120 +absolute + + + +0.01 +smooth + +8.536350032521272 +47.349696630651046 +414.3933496469781 +14.53522371199582 +88.53587560116588 +0 +120 +absolute + + + +0.01 +smooth + +8.536350057383464 +47.34969663405 +414.4077314326672 +14.540285559977514 +88.53656234531637 +0 +120 +absolute + + + +0.01 +smooth + +8.536350082486976 +47.34969663750646 +414.42215981393696 +14.545377439644234 +88.53725297781119 +0 +120 +absolute + + + +0.01 +smooth + +8.53635010782957 +47.349696641019605 +414.4366340948832 +14.550498906213518 +88.53794743631983 +0 +120 +absolute + + + +0.01 +smooth + +8.536350133409028 +47.34969664458861 +414.4511535796025 +14.555649514902928 +88.53864565851183 +0 +120 +absolute + + + +0.01 +smooth + +8.536350159223128 +47.34969664821269 +414.4657175721913 +14.560828820930011 +88.53934758205666 +0 +120 +absolute + + + +0.01 +smooth + +8.53635018526964 +47.34969665189102 +414.4803253767458 +14.56603637951232 +88.54005314462383 +0 +120 +absolute + + + +0.01 +smooth + +8.53635021154634 +47.34969665562276 +414.4949762973621 +14.571271745867396 +88.5407622838828 +0 +120 +absolute + + + +0.01 +smooth + +8.536350238051002 +47.34969665940712 +414.5096696381367 +14.576534475212792 +88.5414749375031 +0 +120 +absolute + + + +0.01 +smooth + +8.536350264781404 +47.34969666324331 +414.52440470316606 +14.581824122766065 +88.54219104315425 +0 +120 +absolute + + + +0.01 +smooth + +8.536350291735321 +47.349696667130466 +414.53918079654613 +14.58714024374476 +88.5429105385057 +0 +120 +absolute + + + +0.01 +smooth + +8.536350318910527 +47.349696671067804 +414.5539972223734 +14.592482393366431 +88.54363336122697 +0 +120 +absolute + + + +0.01 +smooth + +8.536350346304797 +47.349696675054496 +414.56885328474425 +14.597850126848622 +88.54435944898755 +0 +120 +absolute + + + +0.01 +smooth + +8.536350373915905 +47.34969667908974 +414.5837482877549 +14.603242999408884 +88.54508873945694 +0 +120 +absolute + + + +0.01 +smooth + +8.536350401741629 +47.34969668317271 +414.59868153550156 +14.60866056626477 +88.54582117030463 +0 +120 +absolute + + + +0.01 +smooth + +8.536350429779743 +47.34969668730261 +414.61365233208073 +14.614102382633831 +88.54655667920014 +0 +120 +absolute + + + +0.01 +smooth + +8.536350458028018 +47.349696691478606 +414.62865998158867 +14.619568003733614 +88.54729520381296 +0 +120 +absolute + + + +0.01 +smooth + +8.536350486484235 +47.349696695699905 +414.64370378812157 +14.625056984781672 +88.54803668181258 +0 +120 +absolute + + + +0.01 +smooth + +8.536350515146168 +47.349696699965676 +414.65878305577587 +14.63056888099555 +88.54878105086848 +0 +120 +absolute + + + +0.01 +smooth + +8.536350544011588 +47.3496967042751 +414.6738970886477 +14.636103247592805 +88.5495282486502 +0 +120 +absolute + + + +0.01 +smooth + +8.536350573078275 +47.34969670862738 +414.68904519083355 +14.641659639790984 +88.55027821282721 +0 +120 +absolute + + + +0.01 +smooth + +8.536350602344003 +47.3496967130217 +414.70422666642963 +14.647237612807634 +88.55103088106898 +0 +120 +absolute + + + +0.01 +smooth + +8.536350631806544 +47.34969671745723 +414.7194408195322 +14.652836721860309 +88.55178619104505 +0 +120 +absolute + + + +0.01 +smooth + +8.536350661463677 +47.34969672193317 +414.73468695423776 +14.65845652216656 +88.55254408042492 +0 +120 +absolute + + + +0.01 +smooth + +8.536350691313174 +47.349696726448705 +414.7499643746425 +14.664096568943933 +88.55330448687808 +0 +120 +absolute + + + +0.01 +smooth + +8.536350721352813 +47.34969673100302 +414.76527238484266 +14.66975641740998 +88.554067348074 +0 +120 +absolute + + + +0.01 +smooth + +8.536350751580368 +47.3496967355953 +414.78061028893455 +14.675435622782253 +88.5548326016822 +0 +120 +absolute + + + +0.01 +smooth + +8.536350781993612 +47.34969674022473 +414.7959773910147 +14.681133740278298 +88.55560018537216 +0 +120 +absolute + + + +0.01 +smooth + +8.536350812590323 +47.349696744890494 +414.8113729951791 +14.686850325115667 +88.5563700368134 +0 +120 +absolute + + + +0.01 +smooth + +8.536350843368275 +47.349696749591786 +414.82679640552425 +14.692584932511913 +88.55714209367542 +0 +120 +absolute + + + +0.01 +smooth + +8.536350874325244 +47.34969675432778 +414.84224692614646 +14.698337117684584 +88.5579162936277 +0 +120 +absolute + + + +0.01 +smooth + +8.536350905459003 +47.34969675909767 +414.8577238611419 +14.704106435851228 +88.55869257433973 +0 +120 +absolute + + + +0.01 +smooth + +8.53635093676733 +47.349696763900646 +414.873226514607 +14.709892442229398 +88.55947087348105 +0 +120 +absolute + + + +0.01 +smooth + +8.536350968247996 +47.34969676873588 +414.888754190638 +14.715694692036644 +88.56025112872109 +0 +120 +absolute + + + +0.01 +smooth + +8.53635099989878 +47.349696773602574 +414.90430619333125 +14.721512740490514 +88.5610332777294 +0 +120 +absolute + + + +0.01 +smooth + +8.536351031717455 +47.349696778499904 +414.919881826783 +14.727346142808557 +88.56181725817548 +0 +120 +absolute + + + +0.01 +smooth + +8.536351063701797 +47.349696783427056 +414.9354803950897 +14.733194454208327 +88.5626030077288 +0 +120 +absolute + + + +0.01 +smooth + +8.53635109584958 +47.34969678838321 +414.95110120234744 +14.739057229907374 +88.56339046405884 +0 +120 +absolute + + + +0.01 +smooth + +8.536351128158582 +47.349696793367585 +414.9667435526527 +14.744934025123246 +88.56417956483514 +0 +120 +absolute + + + +0.01 +smooth + +8.536351160626577 +47.34969679837933 +414.98240675010175 +14.750824395073494 +88.56497024772719 +0 +120 +absolute + + + +0.01 +smooth + +8.536351193251338 +47.34969680341763 +414.99809009879084 +14.756727894975665 +88.56576245040448 +0 +120 +absolute + + + +0.01 +smooth + +8.536351226030641 +47.3496968084817 +415.01379290281625 +14.762644080047314 +88.56655611053648 +0 +120 +absolute + + + +0.01 +smooth + +8.536351258962261 +47.3496968135707 +415.02951446627435 +14.768572505505986 +88.56735116579276 +0 +120 +absolute + + + +0.01 +smooth + +8.536351292043975 +47.349696818683846 +415.0452540932615 +14.774512726569238 +88.56814755384273 +0 +120 +absolute + + + +0.01 +smooth + +8.536351325273554 +47.34969682382028 +415.06101108787385 +14.780464298454612 +88.56894521235594 +0 +120 +absolute + + + +0.01 +smooth + +8.536351358648778 +47.34969682897923 +415.0767847542079 +14.786426776379667 +88.56974407900188 +0 +120 +absolute + + + +0.01 +smooth + +8.53635139216742 +47.349696834159865 +415.0925743963598 +14.792399715561945 +88.57054409145005 +0 +120 +absolute + + + +0.01 +smooth + +8.536351425827252 +47.34969683936136 +415.1083793184259 +14.798382671219002 +88.57134518736991 +0 +120 +absolute + + + +0.01 +smooth + +8.536351459626056 +47.349696844582915 +415.12419882450257 +14.804375198568383 +88.572147304431 +0 +120 +absolute + + + +0.01 +smooth + +8.536351493642165 +47.34969684985491 +415.14004289513736 +14.810385249832791 +88.57295150402798 +0 +120 +absolute + + + +0.01 +smooth + +8.536351528081468 +47.34969685525716 +415.1559385198846 +14.816434109670128 +88.57376063149773 +0 +120 +absolute + + + +0.01 +smooth + +8.536351562951834 +47.34969686079268 +415.1718865485163 +14.822522459949187 +88.57457477476103 +0 +120 +absolute + + + +0.01 +smooth + +8.536351598250477 +47.34969686646049 +415.1878864206486 +14.828649872386535 +88.57539387316706 +0 +120 +absolute + + + +0.01 +smooth + +8.536351633974597 +47.349696872259486 +415.20393757589767 +14.834815918698714 +88.57621786606477 +0 +120 +absolute + + + +0.01 +smooth + +8.536351670121418 +47.34969687818864 +415.22003945388 +14.841020170602299 +88.57704669280326 +0 +120 +absolute + + + +0.01 +smooth + +8.536351706688135 +47.34969688424685 +415.23619149421137 +14.84726219981383 +88.57788029273154 +0 +120 +absolute + + + +0.01 +smooth + +8.536351743671972 +47.349696890433144 +415.2523931365083 +14.853541578049882 +88.57871860519872 +0 +120 +absolute + + + +0.01 +smooth + +8.53635178107013 +47.34969689674639 +415.26864382038667 +14.859857877026995 +88.57956156955377 +0 +120 +absolute + + + +0.01 +smooth + +8.536351818879819 +47.34969690318555 +415.2849429854628 +14.866210668461731 +88.58040912514579 +0 +120 +absolute + + + +0.01 +smooth + +8.536351857098255 +47.34969690974964 +415.3012900713529 +14.87259952407066 +88.58126121132383 +0 +120 +absolute + + + +0.01 +smooth + +8.536351895722643 +47.34969691643751 +415.3176845176731 +14.879024015570325 +88.58211776743691 +0 +120 +absolute + + + +0.01 +smooth + +8.536351934750193 +47.34969692324816 +415.33412576403975 +14.885483714677285 +88.58297873283412 +0 +120 +absolute + + + +0.01 +smooth + +8.536351974178116 +47.349696930180514 +415.3506132500688 +14.891978193108102 +88.58384404686444 +0 +120 +absolute + + + +0.01 +smooth + +8.536352014003622 +47.34969693723354 +415.3671464153765 +14.898507022579333 +88.58471364887701 +0 +120 +absolute + + + +0.01 +smooth + +8.536352054223922 +47.34969694440617 +415.38372469957903 +14.905069774807526 +88.5855874782208 +0 +120 +absolute + + + +0.01 +smooth + +8.536352094836221 +47.34969695169733 +415.4003475422926 +14.911666021509248 +88.58646547424487 +0 +120 +absolute + + + +0.01 +smooth + +8.536352135837737 +47.34969695910601 +415.4170143831334 +14.918295334401058 +88.58734757629831 +0 +120 +absolute + + + +0.01 +smooth + +8.536352177225675 +47.349696966631136 +415.4337246617177 +14.924957285199508 +88.58823372373014 +0 +120 +absolute + + + +0.01 +smooth + +8.536352218997243 +47.34969697427163 +415.4504778176614 +14.931651445621151 +88.5891238558894 +0 +120 +absolute + + + +0.01 +smooth + +8.536352261149654 +47.349696982026465 +415.46727329058075 +14.938377387382547 +88.59001791212512 +0 +120 +absolute + + + +0.01 +smooth + +8.536352303680122 +47.34969698989459 +415.48411052009243 +14.945134682200264 +88.59091583178643 +0 +120 +absolute + + + +0.01 +smooth + +8.536352346585845 +47.34969699787493 +415.5009889458119 +14.95192290179084 +88.59181755422229 +0 +120 +absolute + + + +0.01 +smooth + +8.536352389864042 +47.34969700596644 +415.5179080073557 +14.958741617870842 +88.5927230187818 +0 +120 +absolute + + + +0.01 +smooth + +8.536352433511924 +47.34969701416808 +415.5348671443402 +14.965590402156836 +88.59363216481398 +0 +120 +absolute + + + +0.01 +smooth + +8.536352477526698 +47.34969702247878 +415.5518657963813 +14.97246882636537 +88.59454493166791 +0 +120 +absolute + + + +0.01 +smooth + +8.53635252190557 +47.34969703089748 +415.568903403095 +14.979376462212993 +88.59546125869258 +0 +120 +absolute + + + +0.01 +smooth + +8.53635256664576 +47.349697039423155 +415.58597940409805 +14.986312881416278 +88.59638108523713 +0 +120 +absolute + + + +0.01 +smooth + +8.536352611744466 +47.349697048054715 +415.6030932390061 +14.993277655691774 +88.5973043506505 +0 +120 +absolute + + + +0.01 +smooth + +8.536352657198904 +47.34969705679112 +415.6202443474356 +15.000270356756035 +88.5982309942818 +0 +120 +absolute + + + +0.01 +smooth + +8.536352703006289 +47.34969706563134 +415.6374321690028 +15.007290556325628 +88.59916095548012 +0 +120 +absolute + + + +0.01 +smooth + +8.53635274916382 +47.34969707457427 +415.6546561433236 +15.014337826117101 +88.60009417359441 +0 +120 +absolute + + + +0.01 +smooth + +8.536352795668712 +47.349697083618906 +415.6719157100143 +15.021411737847012 +88.60103058797377 +0 +120 +absolute + + + +0.01 +smooth + +8.536352842518179 +47.349697092764174 +415.68921030869126 +15.028511863231929 +88.60197013796727 +0 +120 +absolute + + + +0.01 +smooth + +8.536352889709429 +47.34969710200902 +415.70653937897055 +15.035637773988396 +88.60291276292394 +0 +120 +absolute + + + +0.01 +smooth + +8.536352937239664 +47.34969711135237 +415.72390236046806 +15.042789041832975 +88.60385840219278 +0 +120 +absolute + + + +0.01 +smooth + +8.536352985106102 +47.3496971207932 +415.74129869280034 +15.04996523848222 +88.6048069951229 +0 +120 +absolute + + + +0.01 +smooth + +8.536353033305955 +47.349697130330455 +415.75872781558365 +15.057165935652698 +88.60575848106333 +0 +120 +absolute + + + +0.01 +smooth + +8.536353081836427 +47.34969713996308 +415.77618916843386 +15.06439070506096 +88.60671279936314 +0 +120 +absolute + + + +0.01 +smooth + +8.536353130694726 +47.34969714968997 +415.79368219096716 +15.071639118423557 +88.6076698893713 +0 +120 +absolute + + + +0.01 +smooth + +8.536353179878072 +47.34969715951015 +415.81120632280005 +15.078910747457055 +88.60862969043694 +0 +120 +absolute + + + +0.01 +smooth + +8.536353229383664 +47.34969716942251 +415.8287610035483 +15.08620516387801 +88.60959214190909 +0 +120 +absolute + + + +0.01 +smooth + +8.536353279208718 +47.349697179426016 +415.84634567282853 +15.093521939402974 +88.61055718313678 +0 +120 +absolute + + + +0.01 +smooth + +8.536353329350444 +47.349697189519624 +415.86395977025654 +15.100860645748512 +88.61152475346907 +0 +120 +absolute + + + +0.01 +smooth + +8.53635337980605 +47.34969719970226 +415.8816027354488 +15.10822085463117 +88.612494792255 +0 +120 +absolute + + + +0.01 +smooth + +8.536353430572746 +47.349697209972874 +415.8992740080212 +15.115602137767517 +88.61346723884364 +0 +120 +absolute + + + +0.01 +smooth + +8.53635348164774 +47.34969722033041 +415.91697302759013 +15.123004066874104 +88.61444203258401 +0 +120 +absolute + + + +0.01 +smooth + +8.536353533028247 +47.34969723077385 +415.9346992337718 +15.13042621366749 +88.61541911282517 +0 +120 +absolute + + + +0.01 +smooth + +8.536353584711474 +47.34969724130209 +415.9524520661822 +15.137868149864229 +88.61639841891616 +0 +120 +absolute + + + +0.01 +smooth + +8.536353636694631 +47.3496972519141 +415.97023096443763 +15.14532944718088 +88.61737989020604 +0 +120 +absolute + + + +0.01 +smooth + +8.536353688974927 +47.34969726260882 +415.9880353681543 +15.152809677334005 +88.61836346604386 +0 +120 +absolute + + + +0.01 +smooth + +8.536353741549574 +47.34969727338519 +416.00586471694845 +15.160308412040154 +88.61934908577867 +0 +120 +absolute + + + +0.01 +smooth + +8.536353794415781 +47.34969728424217 +416.02371845043604 +15.167825223015885 +88.6203366887595 +0 +120 +absolute + + + +0.01 +smooth + +8.536353847570757 +47.34969729517871 +416.04159600823334 +15.175359681977762 +88.6213262143354 +0 +120 +absolute + + + +0.01 +smooth + +8.536353901011713 +47.34969730619373 +416.0594968299567 +15.182911360642334 +88.62231760185544 +0 +120 +absolute + + + +0.01 +smooth + +8.536353954735858 +47.3496973172862 +416.0774203552221 +15.19047983072616 +88.62331079066864 +0 +120 +absolute + + + +0.01 +smooth + +8.536354008740403 +47.34969732845505 +416.09536602364585 +15.1980646639458 +88.62430572012408 +0 +120 +absolute + + + +0.01 +smooth + +8.536354063022557 +47.34969733969924 +416.11333327484397 +15.205665432017812 +88.6253023295708 +0 +120 +absolute + + + +0.01 +smooth + +8.536354117579531 +47.3496973510177 +416.13132154843277 +15.213281706658748 +88.62630055835783 +0 +120 +absolute + + + +0.01 +smooth + +8.536354172408535 +47.3496973624094 +416.14933028402845 +15.22091305958517 +88.62730034583423 +0 +120 +absolute + + + +0.01 +smooth + +8.536354227506775 +47.349697373873255 +416.1673589212472 +15.228559062513636 +88.62830163134905 +0 +120 +absolute + + + +0.01 +smooth + +8.536354282871468 +47.34969738540824 +416.1854068997051 +15.236219287160695 +88.62930435425133 +0 +120 +absolute + + + +0.01 +smooth + +8.536354338499818 +47.34969739701329 +416.20347365901836 +15.243893305242914 +88.63030845389011 +0 +120 +absolute + + + +0.01 +smooth + +8.536354394389038 +47.349697408687334 +416.2215586388032 +15.251580688476842 +88.63131386961446 +0 +120 +absolute + + + +0.01 +smooth + +8.536354450536335 +47.34969742042934 +416.2396612786758 +15.259281008579043 +88.6323205407734 +0 +120 +absolute + + + +0.01 +smooth + +8.536354506938924 +47.34969743223825 +416.25778101825233 +15.26699383726607 +88.63332840671603 +0 +120 +absolute + + + +0.01 +smooth + +8.536354563594008 +47.349697444113 +416.2759172971489 +15.27471874625448 +88.63433740679136 +0 +120 +absolute + + + +0.01 +smooth + +8.536354620498802 +47.349697456052546 +416.29406955498183 +15.282455307260832 +88.63534748034843 +0 +120 +absolute + + + +0.01 +smooth + +8.536354677650515 +47.34969746805583 +416.3122372313672 +15.290203092001683 +88.63635856673632 +0 +120 +absolute + + + +0.01 +smooth + +8.536354735046357 +47.34969748012179 +416.33041976592125 +15.29796167219359 +88.63737060530406 +0 +120 +absolute + + + +0.01 +smooth + +8.536354792683536 +47.34969749224939 +416.3486165982601 +15.30573061955311 +88.63838353540068 +0 +120 +absolute + + + +0.01 +smooth + +8.536354850559265 +47.34969750443757 +416.366827168 +15.313509505796802 +88.63939729637525 +0 +120 +absolute + + + +0.01 +smooth + +8.536354908670752 +47.34969751668527 +416.3850509147571 +15.32129790264122 +88.64041182757683 +0 +120 +absolute + + + +0.01 +smooth + +8.536354967015207 +47.34969752899143 +416.40328727814756 +15.329095381802919 +88.64142706835443 +0 +120 +absolute + + + +0.01 +smooth + +8.536355025589838 +47.349697541355 +416.42153569778753 +15.336901514998464 +88.64244295805715 +0 +120 +absolute + + + +0.01 +smooth + +8.536355084391861 +47.34969755377494 +416.4397956132933 +15.344715873944406 +88.643459436034 +0 +120 +absolute + + + +0.01 +smooth + +8.536355143418477 +47.34969756625018 +416.45806646428105 +15.352538030357305 +88.64447644163403 +0 +120 +absolute + + + +0.01 +smooth + +8.536355202666904 +47.349697578779676 +416.4763476903669 +15.360367555953715 +88.64549391420628 +0 +120 +absolute + + + +0.01 +smooth + +8.536355262134348 +47.34969759136237 +416.4946387311669 +15.368204022450197 +88.64651179309985 +0 +120 +absolute + + + +0.01 +smooth + +8.53635532181802 +47.3496976039972 +416.51293902629743 +15.376047001563306 +88.64753001766373 +0 +120 +absolute + + + +0.01 +smooth + +8.536355381858094 +47.349697616742155 +416.5312607938626 +15.383907289602545 +88.6485500555344 +0 +120 +absolute + + + +0.01 +smooth + +8.536355442447602 +47.349697629677024 +416.5496210531913 +15.391799853489749 +88.64957394085117 +0 +120 +absolute + + + +0.01 +smooth + +8.536355503584454 +47.34969764280101 +416.5680194292726 +15.39972435146987 +88.6506016225454 +0 +120 +absolute + + + +0.01 +smooth + +8.536355565265358 +47.34969765611283 +416.58645544158054 +15.40768034901537 +88.65163303691438 +0 +120 +absolute + + + +0.01 +smooth + +8.53635562748704 +47.3496976696112 +416.6049286095894 +15.415667411598736 +88.65266812025544 +0 +120 +absolute + + + +0.01 +smooth + +8.536355690246216 +47.34969768329488 +416.6234384527735 +15.423685104692453 +88.65370680886595 +0 +120 +absolute + + + +0.01 +smooth + +8.5363557535396 +47.34969769716255 +416.6419844906067 +15.431732993768993 +88.65474903904317 +0 +120 +absolute + + + +0.01 +smooth + +8.536355817363914 +47.34969771121292 +416.6605662425634 +15.439810644300836 +88.6557947470845 +0 +120 +absolute + + + +0.01 +smooth + +8.53635588171588 +47.34969772544475 +416.6791832281177 +15.447917621760466 +88.65684386928724 +0 +120 +absolute + + + +0.01 +smooth + +8.536355946592202 +47.349697739856715 +416.6978349667435 +15.45605349162036 +88.65789634194869 +0 +120 +absolute + + + +0.01 +smooth + +8.536356011989612 +47.349697754447575 +416.71652097791554 +15.464217819352998 +88.65895210136622 +0 +120 +absolute + + + +0.01 +smooth + +8.536356077904825 +47.34969776921602 +416.7352407811075 +15.472410170430857 +88.6600110838371 +0 +120 +absolute + + + +0.01 +smooth + +8.536356144334555 +47.349697784160796 +416.7539938957935 +15.480630110326418 +88.66107322565871 +0 +120 +absolute + + + +0.01 +smooth + +8.536356211275523 +47.34969779928061 +416.77277984144814 +15.488877204512162 +88.66213846312834 +0 +120 +absolute + + + +0.01 +smooth + +8.536356278724446 +47.349697814574185 +416.7915981375453 +15.497151018460569 +88.66320673254336 +0 +120 +absolute + + + +0.01 +smooth + +8.536356346678042 +47.349697830040206 +416.81044830355904 +15.505451117644112 +88.66427797020104 +0 +120 +absolute + + + +0.01 +smooth + +8.536356415133032 +47.34969784567747 +416.8293298589639 +15.51377706753528 +88.66535211239876 +0 +120 +absolute + + + +0.01 +smooth + +8.536356484086125 +47.349697861484614 +416.8482423232335 +15.522128433606547 +88.66642909543383 +0 +120 +absolute + + + +0.01 +smooth + +8.53635655353405 +47.349697877460414 +416.8671852158425 +15.53050478133039 +88.66750885560353 +0 +120 +absolute + + + +0.01 +smooth + +8.536356623473523 +47.349697893603576 +416.88615805626495 +15.538905676179295 +88.66859132920527 +0 +120 +absolute + + + +0.01 +smooth + +8.536356693901258 +47.34969790991281 +416.9051603639749 +15.54733068362574 +88.66967645253634 +0 +120 +absolute + + + +0.01 +smooth + +8.53635676481397 +47.34969792638683 +416.9241916584465 +15.555779369142197 +88.67076416189404 +0 +120 +absolute + + + +0.01 +smooth + +8.536356836208386 +47.34969794302438 +416.943251459154 +15.564251298201158 +88.67185439357571 +0 +120 +absolute + + + +0.01 +smooth + +8.536356908081219 +47.34969795982417 +416.9623392855716 +15.572746036275094 +88.67294708387873 +0 +120 +absolute + + + +0.01 +smooth + +8.536356980429186 +47.3496979767849 +416.98145465717323 +15.581263148836484 +88.67404216910033 +0 +120 +absolute + + + +0.01 +smooth + +8.536357053249008 +47.349697993905316 +417.00059709343327 +15.589802201357807 +88.67513958553792 +0 +120 +absolute + + + +0.01 +smooth + +8.536357126537403 +47.34969801118413 +417.019766113826 +15.598362759311556 +88.67623926948882 +0 +120 +absolute + + + +0.01 +smooth + +8.536357200291084 +47.34969802862005 +417.0389612378252 +15.606944388170188 +88.67734115725028 +0 +120 +absolute + + + +0.01 +smooth + +8.536357274506774 +47.3496980462118 +417.05818198490533 +15.615546653406199 +88.67844518511968 +0 +120 +absolute + + + +0.01 +smooth + +8.536357349181191 +47.34969806395813 +417.0774278745406 +15.624169120492065 +88.67955128939438 +0 +120 +absolute + + + +0.01 +smooth + +8.536357424311053 +47.349698081857724 +417.0966984262049 +15.63281135490026 +88.68065940637169 +0 +120 +absolute + + + +0.01 +smooth + +8.536357499893075 +47.349698099909304 +417.1159931593726 +15.64147292210327 +88.68176947234888 +0 +120 +absolute + + + +0.01 +smooth + +8.53635757592398 +47.34969811811162 +417.1353115935178 +15.650153387573575 +88.68288142362336 +0 +120 +absolute + + + +0.01 +smooth + +8.53635765240048 +47.34969813646337 +417.15465324811487 +15.658852316783653 +88.68399519649242 +0 +120 +absolute + + + +0.01 +smooth + +8.536357729319294 +47.34969815496324 +417.17401764263735 +15.667569275205976 +88.6851107272533 +0 +120 +absolute + + + +0.01 +smooth + +8.536357806677147 +47.34969817361002 +417.19340429656023 +15.676303828313033 +88.68622795220348 +0 +120 +absolute + + + +0.01 +smooth + +8.53635788447075 +47.3496981924024 +417.21281272935727 +15.685055541577302 +88.68734680764022 +0 +120 +absolute + + + +0.01 +smooth + +8.53635796269682 +47.349698211339074 +417.23224246050245 +15.693823980471256 +88.68846722986082 +0 +120 +absolute + + + +0.01 +smooth + +8.536358041352083 +47.34969823041878 +417.2516930094702 +15.702608710467379 +88.68958915516264 +0 +120 +absolute + + + +0.01 +smooth + +8.53635812043325 +47.34969824964025 +417.27116389573456 +15.711409297038154 +88.69071251984298 +0 +120 +absolute + + + +0.01 +smooth + +8.536358199937041 +47.34969826900219 +417.29065463876987 +15.720225305656058 +88.6918372601992 +0 +120 +absolute + + + +0.01 +smooth + +8.536358279860176 +47.349698288503326 +417.31016475805006 +15.729056301793568 +88.6929633125286 +0 +120 +absolute + + + +0.01 +smooth + +8.536358360199369 +47.34969830814238 +417.3296937730494 +15.737901850923164 +88.69409061312852 +0 +120 +absolute + + + +0.01 +smooth + +8.536358440951341 +47.34969832791806 +417.3492412032421 +15.746761518517328 +88.69521909829629 +0 +120 +absolute + + + +0.01 +smooth + +8.53635852211281 +47.349698347829104 +417.36880656810234 +15.755634870048539 +88.69634870432922 +0 +120 +absolute + + + +0.01 +smooth + +8.536358603680494 +47.34969836787421 +417.3883893871041 +15.764521470989274 +88.69747936752466 +0 +120 +absolute + + + +0.01 +smooth + +8.53635868565111 +47.34969838805212 +417.4079891797218 +15.773420886812016 +88.69861102417993 +0 +120 +absolute + + + +0.01 +smooth + +8.536358768021376 +47.34969840836153 +417.4276054654294 +15.78233268298924 +88.69974361059234 +0 +120 +absolute + + + +0.01 +smooth + +8.536358850788009 +47.34969842880119 +417.44723776370114 +15.791256424993428 +88.70087706305924 +0 +120 +absolute + + + +0.01 +smooth + +8.536358933947731 +47.34969844936979 +417.46688559401116 +15.800191678297061 +88.70201131787792 +0 +120 +absolute + + + +0.01 +smooth + +8.536359017497256 +47.34969847006607 +417.48654847583373 +15.809138008372617 +88.70314631134576 +0 +120 +absolute + + + +0.01 +smooth + +8.536359101433305 +47.34969849088874 +417.50622592864295 +15.818094980692573 +88.70428197976005 +0 +120 +absolute + + + +0.01 +smooth + +8.536359185752595 +47.34969851183653 +417.52591747191286 +15.827062160729415 +88.70541825941812 +0 +120 +absolute + + + +0.01 +smooth + +8.536359270451841 +47.349698532908135 +417.54562262511774 +15.836039113955618 +88.70655508661731 +0 +120 +absolute + + + +0.01 +smooth + +8.536359355527765 +47.34969855410231 +417.56534090773175 +15.845025405843659 +88.70769239765494 +0 +120 +absolute + + + +0.01 +smooth + +8.536359440977083 +47.349698575417754 +417.58507183922916 +15.854020601866026 +88.70883012882835 +0 +120 +absolute + + + +0.01 +smooth + +8.536359526796517 +47.34969859685318 +417.6048149390839 +15.863024267495188 +88.70996821643485 +0 +120 +absolute + + + +0.01 +smooth + +8.536359612982778 +47.34969861840733 +417.6245697267703 +15.87203596820363 +88.71110659677177 +0 +120 +absolute + + + +0.01 +smooth + +8.53635969953259 +47.349698640078905 +417.64433572176245 +15.881055269463833 +88.71224520613643 +0 +120 +absolute + + + +0.01 +smooth + +8.53635978644267 +47.34969866186663 +417.6641124435346 +15.890081736748273 +88.71338398082617 +0 +120 +absolute + + + +0.01 +smooth + +8.536359873709733 +47.349698683769226 +417.6838994115608 +15.89911493552943 +88.71452285713829 +0 +120 +absolute + + + +0.01 +smooth + +8.536359961330499 +47.34969870578543 +417.7036961453153 +15.908154431279785 +88.71566177137018 +0 +120 +absolute + + + +0.01 +smooth + +8.536360049301685 +47.34969872791393 +417.72350216427225 +15.917199789471818 +88.71680065981911 +0 +120 +absolute + + + +0.01 +smooth + +8.536360137620013 +47.349698750153465 +417.7433169879058 +15.92625057557801 +88.71793945878241 +0 +120 +absolute + + + +0.01 +smooth + +8.536360226282195 +47.34969877250275 +417.76314013569015 +15.935306355070836 +88.71907810455744 +0 +120 +absolute + + + +0.01 +smooth + +8.536360315284954 +47.3496987949605 +417.7829711270993 +15.944366693422776 +88.72021653344149 +0 +120 +absolute + + + +0.01 +smooth + +8.536360404625007 +47.34969881752545 +417.8028094816077 +15.95343115610631 +88.7213546817319 +0 +120 +absolute + + + +0.01 +smooth + +8.53636049429907 +47.34969884019631 +417.82265471868925 +15.96249930859392 +88.72249248572601 +0 +120 +absolute + + + +0.01 +smooth + +8.53636058430386 +47.3496988629718 +417.8425063578182 +15.971570716358084 +88.72362988172114 +0 +120 +absolute + + + +0.01 +smooth + +8.5363606746361 +47.349698885850636 +417.8623639184689 +15.980644944871282 +88.72476680601461 +0 +120 +absolute + + + +0.01 +smooth + +8.536360765292507 +47.34969890883154 +417.8822269201152 +15.98972155960599 +88.72590319490375 +0 +120 +absolute + + + +0.01 +smooth + +8.536360856269793 +47.34969893191324 +417.9020948822315 +15.998800126034693 +88.72703898468589 +0 +120 +absolute + + + +0.01 +smooth + +8.536360947564683 +47.34969895509445 +417.9219673242918 +16.00788020962987 +88.72817411165835 +0 +120 +absolute + + + +0.01 +smooth + +8.53636103917389 +47.34969897837389 +417.9418437657704 +16.016961375863996 +88.72930851211848 +0 +120 +absolute + + + +0.01 +smooth + +8.536361131094138 +47.34969900175028 +417.9617237261413 +16.026043190209553 +88.73044212236357 +0 +120 +absolute + + + +0.01 +smooth + +8.536361223322139 +47.349699025222336 +417.98160672487893 +16.03512521813902 +88.73157487869098 +0 +120 +absolute + + + +0.01 +smooth + +8.536361315854613 +47.34969904878878 +418.0014922814572 +16.044207025124877 +88.732706717398 +0 +120 +absolute + + + +0.01 +smooth + +8.53636140868828 +47.34969907244834 +418.02137991535045 +16.053288176639605 +88.733837574782 +0 +120 +absolute + + + +0.01 +smooth + +8.536361501819854 +47.34969909619973 +418.04126914603273 +16.062368238155678 +88.73496738714027 +0 +120 +absolute + + + +0.01 +smooth + +8.536361595247897 +47.34969912004247 +418.06115961792455 +16.071446901679487 +88.73609610946707 +0 +120 +absolute + + + +0.01 +smooth + +8.536361689185732 +47.34969914406981 +418.0810656044108 +16.080538653883778 +88.73722588179405 +0 +120 +absolute + + + +0.01 +smooth + +8.536361783778467 +47.349699168345246 +418.100996789551 +16.089653267451144 +88.73835814415192 +0 +120 +absolute + + + +0.01 +smooth + +8.536361879022378 +47.34969919286726 +418.120952743607 +16.09879025925745 +88.7394928204514 +0 +120 +absolute + + + +0.01 +smooth + +8.536361974913756 +47.34969921763439 +418.140933036841 +16.107949146178576 +88.74062983460341 +0 +120 +absolute + + + +0.01 +smooth + +8.53636207144888 +47.349699242645144 +418.1609372395147 +16.11712944509037 +88.74176911051867 +0 +120 +absolute + + + +0.01 +smooth + +8.53636216862404 +47.34969926789805 +418.18096492189034 +16.126330672868725 +88.74291057210807 +0 +120 +absolute + + + +0.01 +smooth + +8.53636226643551 +47.34969929339158 +418.2010156542298 +16.135552346389495 +88.74405414328234 +0 +120 +absolute + + + +0.01 +smooth + +8.536362364879587 +47.349699319124305 +418.2210890067951 +16.14479398252856 +88.74519974795238 +0 +120 +absolute + + + +0.01 +smooth + +8.536362463952548 +47.3496993450947 +418.2411845498483 +16.154055098161788 +88.74634731002894 +0 +120 +absolute + + + +0.01 +smooth + +8.536362563650679 +47.349699371301305 +418.2613018536512 +16.16333521016505 +88.74749675342288 +0 +120 +absolute + + + +0.01 +smooth + +8.53636266397026 +47.349699397742604 +418.281440488466 +16.172633835414207 +88.74864800204497 +0 +120 +absolute + + + +0.01 +smooth + +8.536362764907585 +47.34969942441717 +418.3016000245546 +16.181950490785145 +88.7498009798061 +0 +120 +absolute + + + +0.01 +smooth + +8.536362866458926 +47.34969945132343 +418.321780032179 +16.19128469315372 +88.75095561061697 +0 +120 +absolute + + + +0.01 +smooth + +8.536362968620582 +47.34969947845999 +418.3419800816011 +16.20063595939581 +88.75211181838851 +0 +120 +absolute + + + +0.01 +smooth + +8.536363071388825 +47.349699505825306 +418.36219974308295 +16.210003806387277 +88.75326952703145 +0 +120 +absolute + + + +0.01 +smooth + +8.536363174759945 +47.34969953341789 +418.3824385868867 +16.219387751004 +88.75442866045668 +0 +120 +absolute + + + +0.01 +smooth + +8.536363278730223 +47.34969956123631 +418.4026961832741 +16.228787310121845 +88.75558914257493 +0 +120 +absolute + + + +0.01 +smooth + +8.536363383295948 +47.34969958927903 +418.42297210250734 +16.238202000616685 +88.75675089729707 +0 +120 +absolute + + + +0.01 +smooth + +8.536363488453398 +47.34969961754457 +418.44326591484827 +16.247631339364386 +88.75791384853389 +0 +120 +absolute + + + +0.01 +smooth + +8.536363594198864 +47.34969964603148 +418.46357719055896 +16.257074843240822 +88.75907792019623 +0 +120 +absolute + + + +0.01 +smooth + +8.536363700528623 +47.349699674738225 +418.4839054999013 +16.266532029121855 +88.76024303619488 +0 +120 +absolute + + + +0.01 +smooth + +8.53636380743897 +47.34969970366337 +418.50425041313747 +16.276002413883372 +88.76140912044067 +0 +120 +absolute + + + +0.01 +smooth + +8.53636391492618 +47.349699732805405 +418.52461150052943 +16.285485514401227 +88.76257609684444 +0 +120 +absolute + + + +0.01 +smooth + +8.53636402298654 +47.34969976216284 +418.54498833233885 +16.294980847551294 +88.76374388931693 +0 +120 +absolute + + + +0.01 +smooth + +8.536364131616335 +47.34969979173418 +418.56538047882805 +16.30448793020944 +88.76491242176898 +0 +120 +absolute + + + +0.01 +smooth + +8.536364240811848 +47.34969982151798 +418.58578751025914 +16.31400627925155 +88.76608161811147 +0 +120 +absolute + + + +0.01 +smooth + +8.536364350569364 +47.349699851512746 +418.60620899689377 +16.323535411553475 +88.76725140225517 +0 +120 +absolute + + + +0.01 +smooth + +8.53636446088517 +47.349699881716944 +418.626644508994 +16.3330748439911 +88.76842169811084 +0 +120 +absolute + + + +0.01 +smooth + +8.536364571755543 +47.349699912129125 +418.64709361682185 +16.342624093440282 +88.76959242958938 +0 +120 +absolute + + + +0.01 +smooth + +8.536364683176778 +47.34969994274783 +418.66755589063945 +16.352182676776906 +88.77076352060156 +0 +120 +absolute + + + +0.01 +smooth + +8.536364795145154 +47.349699973571525 +418.6880309007087 +16.361750110876834 +88.77193489505822 +0 +120 +absolute + + + +0.01 +smooth + +8.53636490765695 +47.349700004598745 +418.70851821729156 +16.37132591261593 +88.77310647687014 +0 +120 +absolute + + + +0.01 +smooth + +8.536365020708455 +47.34970003582801 +418.72901741064993 +16.38090959887007 +88.77427818994812 +0 +120 +absolute + + + +0.01 +smooth + +8.536365134295956 +47.34970006725783 +418.7495280510461 +16.39050068651513 +88.77544995820307 +0 +120 +absolute + + + +0.01 +smooth + +8.536365248415736 +47.34970009888672 +418.7700497087419 +16.400098692426972 +88.77662170554572 +0 +120 +absolute + + + +0.01 +smooth + +8.536365363064077 +47.34970013071319 +418.79058195399915 +16.40970313348147 +88.7777933558869 +0 +120 +absolute + + + +0.01 +smooth + +8.53636547823726 +47.34970016273574 +418.81112435708 +16.41931352655449 +88.77896483313741 +0 +120 +absolute + + + +0.01 +smooth + +8.536365593931581 +47.34970019495295 +418.8316764882466 +16.428929388521908 +88.78013606120813 +0 +120 +absolute + + + +0.01 +smooth + +8.536365710143315 +47.34970022736327 +418.8522379177607 +16.438550236259594 +88.7813069640098 +0 +120 +absolute + + + +0.01 +smooth + +8.536365826868746 +47.349700259965225 +418.87280821588433 +16.44817558664341 +88.78247746545325 +0 +120 +absolute + + + +0.01 +smooth + +8.536365944104162 +47.34970029275733 +418.8933869528795 +16.45780495654923 +88.78364748944932 +0 +120 +absolute + + + +0.01 +smooth + +8.536366061845847 +47.34970032573813 +418.91397369900835 +16.467437862852925 +88.78481695990881 +0 +120 +absolute + + + +0.01 +smooth + +8.536366180090083 +47.34970035890611 +418.9345680245326 +16.47707382243037 +88.78598580074257 +0 +120 +absolute + + + +0.01 +smooth + +8.536366298833157 +47.3497003922598 +418.9551694997145 +16.48671235215743 +88.78715393586135 +0 +120 +absolute + + + +0.01 +smooth + +8.536366418071351 +47.34970042579771 +418.9757776948158 +16.49635296890997 +88.788321289176 +0 +120 +absolute + + + +0.01 +smooth + +8.536366537800951 +47.34970045951834 +418.99639218009867 +16.505995189563876 +88.78948778459733 +0 +120 +absolute + + + +0.01 +smooth + +8.536366658018242 +47.34970049342023 +419.0170125258251 +16.515638530995 +88.79065334603614 +0 +120 +absolute + + + +0.01 +smooth + +8.536366778719504 +47.349700527501874 +419.037638302257 +16.525282510079222 +88.79181789740329 +0 +120 +absolute + + + +0.01 +smooth + +8.536366899901028 +47.34970056176181 +419.0582690796564 +16.53492664369241 +88.79298136260954 +0 +120 +absolute + + + +0.01 +smooth + +8.536367021559093 +47.34970059619853 +419.0789044282852 +16.544570448710434 +88.79414366556574 +0 +120 +absolute + + + +0.01 +smooth + +8.536367143689985 +47.349700630810545 +419.09954391840563 +16.55421344200916 +88.79530473018266 +0 +120 +absolute + + + +0.01 +smooth + +8.536367266289986 +47.349700665596394 +419.12018712027947 +16.56385514046447 +88.79646448037118 +0 +120 +absolute + + + +0.01 +smooth + +8.536367389355386 +47.349700700554585 +419.14083360416873 +16.573495060952222 +88.79762284004208 +0 +120 +absolute + + + +0.01 +smooth + +8.536367512882464 +47.349700735683626 +419.1614829403354 +16.583132720348292 +88.79877973310617 +0 +120 +absolute + + + +0.01 +smooth + +8.536367636867508 +47.34970077098203 +419.1821346990417 +16.59276763552855 +88.79993508347425 +0 +120 +absolute + + + +0.01 +smooth + +8.536367761306801 +47.349700806448325 +419.2027884505493 +16.602399323368864 +88.80108881505718 +0 +120 +absolute + + + +0.01 +smooth + +8.536367886196626 +47.349700842081006 +419.22344376512035 +16.6120273007451 +88.80224085176575 +0 +120 +absolute + + + +0.01 +smooth + +8.536368011533268 +47.349700877878604 +419.2441002130168 +16.62165108453314 +88.80339111751076 +0 +120 +absolute + + + +0.01 +smooth + +8.536368137313012 +47.34970091383963 +419.2647573645007 +16.631270191608845 +88.80453953620304 +0 +120 +absolute + + + +0.01 +smooth + +8.536368263532141 +47.349700949962596 +419.28541478983396 +16.640884138848087 +88.8056860317534 +0 +120 +absolute + + + +0.01 +smooth + +8.536368390186942 +47.34970098624601 +419.3060720592786 +16.65049244312673 +88.80683052807265 +0 +120 +absolute + + + +0.01 +smooth + +8.536368517273697 +47.34970102268841 +419.3267287430967 +16.66009462132066 +88.80797294907163 +0 +120 +absolute + + + +0.01 +smooth + +8.53636864478869 +47.349701059288286 +419.34738441155014 +16.669690190305733 +88.80911321866112 +0 +120 +absolute + + + +0.01 +smooth + +8.536368772728206 +47.34970109604417 +419.3680386349009 +16.679278666957824 +88.81025126075195 +0 +120 +absolute + + + +0.01 +smooth + +8.536368901088531 +47.349701132954564 +419.38869098341115 +16.688859568152804 +88.81138699925495 +0 +120 +absolute + + + +0.01 +smooth + +8.536369029865947 +47.34970117001799 +419.4093410273426 +16.69843241076654 +88.81252035808089 +0 +120 +absolute + + + +0.01 +smooth + +8.53636915905674 +47.349701207232954 +419.42998833695754 +16.707996711674905 +88.81365126114063 +0 +120 +absolute + + + +0.01 +smooth + +8.536369288657195 +47.34970124459798 +419.4506324825177 +16.71755198775377 +88.81477963234497 +0 +120 +absolute + + + +0.01 +smooth + +8.536369418663591 +47.34970128211159 +419.4712730342852 +16.727097755879 +88.81590539560472 +0 +120 +absolute + + + +0.01 +smooth + +8.53636954907222 +47.34970131977229 +419.4919095625221 +16.73663353292647 +88.81702847483068 +0 +120 +absolute + + + +0.01 +smooth + +8.53636967987936 +47.34970135757859 +419.51254163749024 +16.746158835772047 +88.81814879393369 +0 +120 +absolute + + + +0.01 +smooth + +8.536369811081297 +47.34970139552901 +419.5331688294517 +16.755673181291606 +88.81926627682456 +0 +120 +absolute + + + +0.01 +smooth + +8.536369942674318 +47.34970143362207 +419.55379070866843 +16.76517608636101 +88.8203808474141 +0 +120 +absolute + + + +0.01 +smooth + +8.536370074654705 +47.34970147185628 +419.57440684540245 +16.774667067856132 +88.8214924296131 +0 +120 +absolute + + + +0.01 +smooth + +8.536370207018743 +47.34970151023014 +419.59501680991576 +16.784145642652845 +88.82260094733243 +0 +120 +absolute + + + +0.01 +smooth + +8.536370339762716 +47.34970154874219 +419.61562017247036 +16.793611327627016 +88.82370632448286 +0 +120 +absolute + + + +0.01 +smooth + +8.53637047288291 +47.34970158739093 +419.63621650332817 +16.803063639654518 +88.82480848497522 +0 +120 +absolute + + + +0.01 +smooth + +8.536370606375607 +47.349701626174884 +419.65680537275125 +16.812502095611215 +88.82590735272032 +0 +120 +absolute + + + +0.01 +smooth + +8.536370740237091 +47.34970166509257 +419.6773863510016 +16.821926212372983 +88.82700285162896 +0 +120 +absolute + + + +0.01 +smooth + +8.536370874478981 +47.34970170414951 +419.69795988997856 +16.831336679887254 +88.82809511018334 +0 +120 +absolute + + + +0.01 +smooth + +8.536371009366064 +47.34970174346738 +419.71854101198545 +16.840753526087774 +88.82918762611725 +0 +120 +absolute + + + +0.01 +smooth + +8.536371144992387 +47.34970178308953 +419.7391349601141 +16.85018365328016 +88.83028160098813 +0 +120 +absolute + + + +0.01 +smooth + +8.536371281353848 +47.34970182301428 +419.75974133981987 +16.85962644733298 +88.8313769246019 +0 +120 +absolute + + + +0.01 +smooth + +8.536371418446352 +47.34970186323997 +419.78035975655877 +16.86908129411484 +88.83247348676457 +0 +120 +absolute + + + +0.01 +smooth + +8.5363715562658 +47.349701903764924 +419.8009898157862 +16.878547579494303 +88.83357117728202 +0 +120 +absolute + + + +0.01 +smooth + +8.536371694808095 +47.34970194458747 +419.821631122958 +16.88802468933997 +88.8346698859602 +0 +120 +absolute + + + +0.01 +smooth + +8.536371834069136 +47.34970198570598 +419.84228328353004 +16.897512009520426 +88.8357695026051 +0 +120 +absolute + + + +0.01 +smooth + +8.536371974044828 +47.34970202711872 +419.8629459029575 +16.907008925904247 +88.83686991702261 +0 +120 +absolute + + + +0.01 +smooth + +8.536372114731074 +47.34970206882409 +419.8836185866967 +16.91651482436003 +88.83797101901874 +0 +120 +absolute + + + +0.01 +smooth + +8.536372256123768 +47.34970211082035 +419.9043009402029 +16.926029090756344 +88.83907269839935 +0 +120 +absolute + + + +0.01 +smooth + +8.536372398218822 +47.349702153105895 +419.9249925689318 +16.93555111096179 +88.84017484497045 +0 +120 +absolute + + + +0.01 +smooth + +8.536372541012131 +47.34970219567904 +419.94569307833945 +16.945080270844944 +88.841277348538 +0 +120 +absolute + + + +0.01 +smooth + +8.536372684499602 +47.349702238538114 +419.9664020738812 +16.95461595627439 +88.84238009890787 +0 +120 +absolute + + + +0.01 +smooth + +8.536372828677132 +47.34970228168142 +419.9871191610128 +16.964157553118717 +88.84348298588604 +0 +120 +absolute + + + +0.01 +smooth + +8.536372973540628 +47.34970232510735 +420.0078439451902 +16.97370444724652 +88.84458589927848 +0 +120 +absolute + + + +0.01 +smooth + +8.536373119085988 +47.349702368814185 +420.0285760318686 +16.983256024526362 +88.84568872889112 +0 +120 +absolute + + + +0.01 +smooth + +8.536373265309114 +47.34970241280028 +420.0493150265041 +16.99281167082684 +88.84679136452986 +0 +120 +absolute + + + +0.01 +smooth + +8.536373412205911 +47.34970245706397 +420.0700605345523 +17.002370772016544 +88.84789369600074 +0 +120 +absolute + + + +0.01 +smooth + +8.53637355977228 +47.34970250160357 +420.0908121614688 +17.011932713964054 +88.84899561310961 +0 +120 +absolute + + + +0.01 +smooth + +8.536373708004119 +47.349702546417426 +420.1115695127093 +17.021496882537953 +88.85009700566245 +0 +120 +absolute + + + +0.01 +smooth + +8.536373856897336 +47.34970259150388 +420.1323321937297 +17.031062663606832 +88.85119776346524 +0 +120 +absolute + + + +0.01 +smooth + +8.536374006447831 +47.349702636861245 +420.15309980998546 +17.040629443039272 +88.85229777632387 +0 +120 +absolute + + + +0.01 +smooth + +8.5363741566515 +47.34970268248785 +420.1738719669322 +17.050196606703853 +88.85339693404431 +0 +120 +absolute + + + +0.01 +smooth + +8.536374307504252 +47.349702728382034 +420.1946482700259 +17.059763540469167 +88.85449512643248 +0 +120 +absolute + + + +0.01 +smooth + +8.536374459001987 +47.349702774542145 +420.2154283247221 +17.0693296302038 +88.85559224329438 +0 +120 +absolute + + + +0.01 +smooth + +8.536374611140603 +47.34970282096649 +420.2362117364764 +17.07889426177633 +88.85668817443589 +0 +120 +absolute + + + +0.01 +smooth + +8.53637476391601 +47.34970286765341 +420.2569981107445 +17.088456821055352 +88.85778280966298 +0 +120 +absolute + + + +0.01 +smooth + +8.536374917324105 +47.349702914601274 +420.27778705298255 +17.098016693909447 +88.85887603878164 +0 +120 +absolute + + + +0.01 +smooth + +8.536375071360789 +47.34970296180834 +420.2985781686456 +17.10757326620719 +88.85996775159774 +0 +120 +absolute + + + +0.01 +smooth + +8.536375226021963 +47.349703009273 +420.3193710631895 +17.11712592381718 +88.86105783791724 +0 +120 +absolute + + + +0.01 +smooth + +8.536375381303534 +47.349703056993576 +420.3401653420703 +17.126674052608003 +88.86214618754616 +0 +120 +absolute + + + +0.01 +smooth + +8.536375537201401 +47.34970310496838 +420.36096061074335 +17.136217038448237 +88.86323269029036 +0 +120 +absolute + + + +0.01 +smooth + +8.536375693711463 +47.34970315319575 +420.3817564746643 +17.14575426720646 +88.8643172359558 +0 +120 +absolute + + + +0.01 +smooth + +8.536375850829629 +47.34970320167403 +420.4025525392892 +17.15528512475127 +88.86539971434844 +0 +120 +absolute + + + +0.01 +smooth + +8.536376008551798 +47.34970325040157 +420.42334841007346 +17.16480899695125 +88.86648001527425 +0 +120 +absolute + + + +0.01 +smooth + +8.536376166873865 +47.34970329937664 +420.4441436924728 +17.17432526967498 +88.8675580285391 +0 +120 +absolute + + + +0.01 +smooth + +8.536376325791743 +47.34970334859763 +420.4649379919429 +17.18383332879105 +88.86863364394901 +0 +120 +absolute + + + +0.01 +smooth + +8.536376485301325 +47.349703398062864 +420.4857309139396 +17.19333256016804 +88.8697067513099 +0 +120 +absolute + + + +0.01 +smooth + +8.536376645398516 +47.34970344777063 +420.50652206391834 +17.20282234967454 +88.87077724042766 +0 +120 +absolute + + + +0.01 +smooth + +8.536376806079222 +47.349703497719325 +420.52731104733505 +17.212302083179136 +88.87184500110831 +0 +120 +absolute + + + +0.01 +smooth + +8.536376967339338 +47.34970354790724 +420.54809746964537 +17.221771146550406 +88.8729099231578 +0 +120 +absolute + + + +0.01 +smooth + +8.536377129174774 +47.34970359833272 +420.5688809363049 +17.23122892565694 +88.87397189638203 +0 +120 +absolute + + + +0.01 +smooth + +8.536377291581424 +47.34970364899409 +420.58966105276926 +17.240674806367323 +88.87503081058694 +0 +120 +absolute + + + +0.01 +smooth + +8.536377454555193 +47.349703699889695 +420.6104374244944 +17.25010817455014 +88.87608655557851 +0 +120 +absolute + + + +0.01 +smooth + +8.536377618091983 +47.349703751017856 +420.6312096569359 +17.259528416073977 +88.87713902116263 +0 +120 +absolute + + + +0.01 +smooth + +8.536377782187696 +47.34970380237691 +420.6519773555493 +17.268934916807414 +88.87818809714534 +0 +120 +absolute + + + +0.01 +smooth + +8.536377946838236 +47.349703853965174 +420.6727401257905 +17.27832706261904 +88.8792336733325 +0 +120 +absolute + + + +0.01 +smooth + +8.5363781120395 +47.349703905781 +420.69349757311517 +17.287704239377444 +88.88027563953005 +0 +120 +absolute + + + +0.01 +smooth + +8.536378277787396 +47.349703957822726 +420.7142493029788 +17.297065832951205 +88.88131388554402 +0 +120 +absolute + + + +0.01 +smooth + +8.536378444077819 +47.34970401008866 +420.7349949208373 +17.30641122920891 +88.88234830118026 +0 +120 +absolute + + + +0.01 +smooth + +8.536378610906677 +47.34970406257716 +420.75573403214634 +17.315739814019146 +88.88337877624477 +0 +120 +absolute + + + +0.01 +smooth + +8.536378778269869 +47.34970411528653 +420.77646624236155 +17.32505097325049 +88.88440520054348 +0 +120 +absolute + + + +0.01 +smooth + +8.5363789461633 +47.34970416821512 +420.7971911569385 +17.33434409277154 +88.88542746388232 +0 +120 +absolute + + + +0.01 +smooth + +8.536379114582864 +47.34970422136127 +420.81790838133315 +17.343618558450874 +88.88644545606726 +0 +120 +absolute + + + +0.01 +smooth + +8.536379283524472 +47.349704274723294 +420.8386175210009 +17.352873756157074 +88.88745906690423 +0 +120 +absolute + + + +0.01 +smooth + +8.536379452984022 +47.34970432829953 +420.85931818139767 +17.362109071758734 +88.88846818619919 +0 +120 +absolute + + + +0.01 +smooth + +8.536379622957416 +47.34970438208832 +420.88000996797905 +17.37132389112443 +88.88947270375805 +0 +120 +absolute + + + +0.01 +smooth + +8.536379793440556 +47.349704436087976 +420.9006924862008 +17.380517600122747 +88.8904725093868 +0 +120 +absolute + + + +0.01 +smooth + +8.536379964429344 +47.34970449029686 +420.9213653415186 +17.389689584622282 +88.89146749289134 +0 +120 +absolute + + + +0.01 +smooth + +8.536380135919682 +47.34970454471327 +420.94202813938807 +17.39883923049161 +88.89245754407764 +0 +120 +absolute + + + +0.01 +smooth + +8.536380307907471 +47.34970459933557 +420.96268048526485 +17.407965923599313 +88.89344255275165 +0 +120 +absolute + + + +0.01 +smooth + +8.536380480388615 +47.34970465416207 +420.9833219846048 +17.41706904981399 +88.8944224087193 +0 +120 +absolute + + + +0.01 +smooth + +8.536380653359014 +47.3497047091911 +421.00395224286353 +17.426147995004214 +88.89539700178652 +0 +120 +absolute + + + +0.01 +smooth + +8.536380826814572 +47.34970476442102 +421.0245708654968 +17.435202145038573 +88.8963662217593 +0 +120 +absolute + + + +0.01 +smooth + +8.536381000751188 +47.349704819850146 +421.0451774579601 +17.44423088578565 +88.89732995844355 +0 +120 +absolute + + + +0.01 +smooth + +8.536381175164765 +47.349704875476796 +421.0657716257093 +17.453233603114036 +88.89828810164524 +0 +120 +absolute + + + +0.01 +smooth + +8.536381350051206 +47.349704931299314 +421.08635297420017 +17.46220968289231 +88.89924054117026 +0 +120 +absolute + + + +0.01 +smooth + +8.536381525406414 +47.349704987316045 +421.1069211088882 +17.471158510989063 +88.90018716682462 +0 +120 +absolute + + + +0.01 +smooth + +8.536381701226288 +47.3497050435253 +421.1274756352291 +17.480079473272873 +88.90112786841424 +0 +120 +absolute + + + +0.01 +smooth + +8.536381877506733 +47.349705099925416 +421.1480161586786 +17.488971955612335 +88.90206253574505 +0 +120 +absolute + + + +0.01 +smooth + +8.536382054243646 +47.349705156514744 +421.16854228469253 +17.497835343876027 +88.902991058623 +0 +120 +absolute + + + +0.01 +smooth + +8.536382231432933 +47.34970521329159 +421.18905361872646 +17.50666902393253 +88.90391332685407 +0 +120 +absolute + + + +0.01 +smooth + +8.536382409070495 +47.349705270254304 +421.209549766236 +17.51547238165044 +88.90482923024415 +0 +120 +absolute + + + +0.01 +smooth + +8.536382587152234 +47.34970532740122 +421.23003033267696 +17.524244802898334 +88.9057386585992 +0 +120 +absolute + + + +0.01 +smooth + +8.536382765674052 +47.349705384730655 +421.2504949235051 +17.5329856735448 +88.9066415017252 +0 +120 +absolute + + + +0.01 +smooth + +8.536382944631852 +47.34970544224095 +421.27094314417593 +17.541694379458427 +88.90753764942805 +0 +120 +absolute + + + +0.01 +smooth + +8.536383124021533 +47.34970549993044 +421.29137460014516 +17.55037030650779 +88.90842699151374 +0 +120 +absolute + + + +0.01 +smooth + +8.536383303839 +47.34970555779745 +421.3117888968687 +17.559012840561483 +88.90930941778817 +0 +120 +absolute + + + +0.01 +smooth + +8.536383484080153 +47.349705615840314 +421.33218563980193 +17.56762136748809 +88.9101848180573 +0 +120 +absolute + + + +0.01 +smooth + +8.53638366478295 +47.349705674077555 +421.3525666620698 +17.576200100629002 +88.91105418981734 +0 +120 +absolute + + + +0.01 +smooth + +8.536383846232429 +47.34970573264639 +421.3729469003261 +17.584781506311 +88.91192499893563 +0 +120 +absolute + + + +0.01 +smooth + +8.536384028479102 +47.34970579157133 +421.3933288969765 +17.59337095488422 +88.91279847004346 +0 +120 +absolute + + + +0.01 +smooth + +8.536384211518556 +47.34970585085058 +421.4137122861792 +17.60196749546359 +88.91367437542138 +0 +120 +absolute + + + +0.01 +smooth + +8.536384395346358 +47.34970591048231 +421.43409670209223 +17.610570177163996 +88.91455248735004 +0 +120 +absolute + + + +0.01 +smooth + +8.536384579958087 +47.349705970464676 +421.4544817788734 +17.619178049100363 +88.91543257810999 +0 +120 +absolute + + + +0.01 +smooth + +8.536384765349316 +47.34970603079589 +421.4748671506811 +17.62779016038761 +88.91631441998184 +0 +120 +absolute + + + +0.01 +smooth + +8.536384951515622 +47.3497060914741 +421.495252451673 +17.63640556014064 +88.9171977852462 +0 +120 +absolute + + + +0.01 +smooth + +8.536385138452577 +47.34970615249748 +421.5156373160074 +17.645023297474374 +88.91808244618359 +0 +120 +absolute + + + +0.01 +smooth + +8.536385326155765 +47.34970621386422 +421.5360213778424 +17.65364242150371 +88.91896817507471 +0 +120 +absolute + + + +0.01 +smooth + +8.536385514620747 +47.349706275572494 +421.5564042713356 +17.66226198134358 +88.91985474420007 +0 +120 +absolute + + + +0.01 +smooth + +8.53638570384311 +47.349706337620475 +421.5767856306456 +17.670881026108876 +88.9207419258403 +0 +120 +absolute + + + +0.01 +smooth + +8.536385893818425 +47.34970640000631 +421.5971650899299 +17.679498604914517 +88.92162949227595 +0 +120 +absolute + + + +0.01 +smooth + +8.536386084542263 +47.349706462728214 +421.61754228334695 +17.68811376687543 +88.92251721578769 +0 +120 +absolute + + + +0.01 +smooth + +8.536386276010205 +47.34970652578434 +421.6379168450545 +17.696725561106504 +88.92340486865604 +0 +120 +absolute + + + +0.01 +smooth + +8.536386468217824 +47.34970658917286 +421.65828840921074 +17.705333036722653 +88.92429222316159 +0 +120 +absolute + + + +0.01 +smooth + +8.536386661160696 +47.34970665289198 +421.67865660997364 +17.713935242838808 +88.925179051585 +0 +120 +absolute + + + +0.01 +smooth + +8.536386854834394 +47.34970671693983 +421.6990210815012 +17.722531228569864 +88.9260651262068 +0 +120 +absolute + + + +0.01 +smooth + +8.536387049234495 +47.34970678131461 +421.71938145795144 +17.73112004303074 +88.92695021930759 +0 +120 +absolute + + + +0.01 +smooth + +8.536387244356575 +47.349706846014506 +421.73973737348257 +17.73970073533635 +88.927834103168 +0 +120 +absolute + + + +0.01 +smooth + +8.536387440196204 +47.349706911037664 +421.7600884622525 +17.7482723546016 +88.92871655006857 +0 +120 +absolute + + + +0.01 +smooth + +8.536387636748962 +47.34970697638227 +421.7804343584192 +17.756833949941402 +88.92959733228994 +0 +120 +absolute + + + +0.01 +smooth + +8.536387834010428 +47.34970704204652 +421.8007746961408 +17.765384570470673 +88.93047622211269 +0 +120 +absolute + + + +0.01 +smooth + +8.536388031976168 +47.34970710802857 +421.82110910957533 +17.773923265304326 +88.93135299181738 +0 +120 +absolute + + + +0.01 +smooth + +8.536388230641762 +47.34970717432658 +421.84143723288065 +17.782449083557264 +88.93222741368461 +0 +120 +absolute + + + +0.01 +smooth + +8.536388430002784 +47.34970724093875 +421.8617587002152 +17.790961074344413 +88.93309925999503 +0 +120 +absolute + + + +0.01 +smooth + +8.53638863005481 +47.34970730786326 +421.8820731457366 +17.799458286780673 +88.93396830302919 +0 +120 +absolute + + + +0.01 +smooth + +8.536388830793413 +47.34970737509824 +421.9023802036029 +17.807939769980955 +88.93483431506763 +0 +120 +absolute + + + +0.01 +smooth + +8.536389032214172 +47.34970744264192 +421.92267950797253 +17.816404573060186 +88.93569706839104 +0 +120 +absolute + + + +0.01 +smooth + +8.53638923431266 +47.34970751049246 +421.94297069300313 +17.82485174513327 +88.93655633527996 +0 +120 +absolute + + + +0.01 +smooth + +8.536389437084452 +47.349707578648 +421.9632533928528 +17.83328033531511 +88.93741188801496 +0 +120 +absolute + + + +0.01 +smooth + +8.53638964052512 +47.34970764710676 +421.9835272416797 +17.841689392720625 +88.93826349887667 +0 +120 +absolute + + + +0.01 +smooth + +8.536389844630246 +47.34970771586689 +422.0037918736419 +17.850077966464728 +88.9391109401457 +0 +120 +absolute + + + +0.01 +smooth + +8.5363900493954 +47.34970778492657 +422.0240469228971 +17.85844510566233 +88.93995398410257 +0 +120 +absolute + + + +0.01 +smooth + +8.536390254816157 +47.34970785428396 +422.0442920236036 +17.86678985942834 +88.94079240302794 +0 +120 +absolute + + + +0.01 +smooth + +8.536390460888098 +47.349707923937295 +422.0645268099196 +17.875111276877686 +88.94162596920239 +0 +120 +absolute + + + +0.01 +smooth + +8.53639066760679 +47.349707993884664 +422.0847509160027 +17.883408407125255 +88.94245445490645 +0 +120 +absolute + + + +0.01 +smooth + +8.536390874967811 +47.349708064124286 +422.10496397601116 +17.891680299285976 +88.9432776324208 +0 +120 +absolute + + + +0.01 +smooth + +8.536391082966741 +47.34970813465436 +422.1251656241032 +17.899926002474757 +88.944095274026 +0 +120 +absolute + + + +0.01 +smooth + +8.536391291599148 +47.349708205473014 +422.1453554944365 +17.90814456580651 +88.94490715200263 +0 +120 +absolute + + + +0.01 +smooth + +8.536391500860613 +47.34970827657845 +422.1655332211693 +17.91633503839615 +88.94571303863128 +0 +120 +absolute + + + +0.01 +smooth + +8.536391710746706 +47.34970834796883 +422.1856984384596 +17.92449646935858 +88.94651270619255 +0 +120 +absolute + + + +0.01 +smooth + +8.536391921253006 +47.34970841964234 +422.2058507804654 +17.932627907808723 +88.94730592696706 +0 +120 +absolute + + + +0.01 +smooth + +8.536392132375086 +47.34970849159714 +422.22598988134484 +17.94072840286148 +88.94809247323533 +0 +120 +absolute + + + +0.01 +smooth + +8.536392344108522 +47.349708563831435 +422.2461153752557 +17.94879700363177 +88.94887211727803 +0 +120 +absolute + + + +0.01 +smooth + +8.536392556448888 +47.34970863634337 +422.2662268963563 +17.95683275923451 +88.9496446313757 +0 +120 +absolute + + + +0.01 +smooth + +8.536392769391764 +47.349708709131136 +422.28632407880457 +17.9648347187846 +88.95040978780895 +0 +120 +absolute + + + +0.01 +smooth + +8.536392982932718 +47.34970878219289 +422.3064065567585 +17.972801931396962 +88.9511673588584 +0 +120 +absolute + + + +0.01 +smooth + +8.536393197067328 +47.349708855526835 +422.326473964376 +17.9807334461865 +88.9519171168046 +0 +120 +absolute + + + +0.01 +smooth + +8.53639341179117 +47.34970892913111 +422.34652593581546 +17.988628312268133 +88.95265883392814 +0 +120 +absolute + + + +0.01 +smooth + +8.536393627099821 +47.34970900300392 +422.36656210523455 +17.99648557875677 +88.95339228250964 +0 +120 +absolute + + + +0.01 +smooth + +8.53639384298885 +47.34970907714343 +422.38658210679154 +18.00430429476732 +88.95411723482968 +0 +120 +absolute + + + +0.01 +smooth + +8.536394059453837 +47.34970915154782 +422.4065855746444 +18.0120835094147 +88.95483346316885 +0 +120 +absolute + + + +0.01 +smooth + +8.536394276490356 +47.349709226215246 +422.42657214295104 +18.019822271813823 +88.95554073980776 +0 +120 +absolute + + + +0.01 +smooth + +8.536394494093985 +47.34970930114391 +422.4465414458697 +18.0275196310796 +88.95623883702699 +0 +120 +absolute + + + +0.01 +smooth + +8.536394712260293 +47.34970937633197 +422.46649311755823 +18.035174636326932 +88.9569275271071 +0 +120 +absolute + + + +0.01 +smooth + +8.536394930984859 +47.3497094517776 +422.4864267921747 +18.04278633667075 +88.95760658232874 +0 +120 +absolute + + + +0.01 +smooth + +8.536395150263257 +47.34970952747898 +422.5063421038773 +18.05035378122595 +88.95827577497246 +0 +120 +absolute + + + +0.01 +smooth + +8.536395370091064 +47.349709603434285 +422.52623868682383 +18.057876019107454 +88.95893487731887 +0 +120 +absolute + + + +0.01 +smooth + +8.536395590463854 +47.34970967964169 +422.5461161751725 +18.065352099430168 +88.95958366164857 +0 +120 +absolute + + + +0.01 +smooth + +8.536395811377202 +47.34970975609937 +422.56597420308117 +18.07278107130901 +88.96022190024212 +0 +120 +absolute + + + +0.01 +smooth + +8.53639603282668 +47.3497098328055 +422.58581240470824 +18.080161983858886 +88.96084936538013 +0 +120 +absolute + + + +0.01 +smooth + +8.536396254807869 +47.349709909758246 +422.6056304142112 +18.087493886194714 +88.96146582934321 +0 +120 +absolute + + + +0.01 +smooth + +8.536396477316341 +47.3497099869558 +422.6254278657485 +18.0947758274314 +88.96207106441192 +0 +120 +absolute + + + +0.01 +smooth + +8.536396700347671 +47.34971006439632 +422.645204393478 +18.10200685668386 +88.96266484286687 +0 +120 +absolute + + + +0.01 +smooth + +8.536396923897435 +47.349710142077996 +422.66495963155785 +18.109186023067004 +88.96324693698864 +0 +120 +absolute + + + +0.01 +smooth + +8.536397147961207 +47.349710219999 +422.6846932141459 +18.116312375695745 +88.96381711905786 +0 +120 +absolute + + + +0.01 +smooth + +8.536397372534562 +47.34971029815749 +422.70440477540035 +18.123384963684995 +88.9643751613551 +0 +120 +absolute + + + +0.01 +smooth + +8.536397597613078 +47.349710376551656 +422.7240939494791 +18.130402836149667 +88.96492083616093 +0 +120 +absolute + + + +0.01 +smooth + +8.536397823192328 +47.349710455179675 +422.74376037054026 +18.13736504220467 +88.96545391575594 +0 +120 +absolute + + + +0.01 +smooth + +8.536398049267886 +47.349710534039716 +422.7634036727419 +18.144270630964918 +88.96597417242077 +0 +120 +absolute + + + +0.01 +smooth + +8.536398275835326 +47.34971061312996 +422.78302349024193 +18.151118651545325 +88.96648137843597 +0 +120 +absolute + + + +0.01 +smooth + +8.53639850289023 +47.34971069244857 +422.8026194571986 +18.1579081530608 +88.96697530608216 +0 +120 +absolute + + + +0.01 +smooth + +8.536398730428166 +47.34971077199373 +422.82219120776966 +18.16463818462626 +88.9674557276399 +0 +120 +absolute + + + +0.01 +smooth + +8.536398958444712 +47.34971085176361 +422.8417383761134 +18.171307795356608 +88.96792241538981 +0 +120 +absolute + + + +0.01 +smooth + +8.536399186935444 +47.34971093175639 +422.8612605963877 +18.17791603436676 +88.96837514161246 +0 +120 +absolute + + + +0.01 +smooth + +8.536399415895936 +47.34971101197024 +422.8807575027506 +18.184461950771635 +88.96881367858845 +0 +120 +absolute + + + +0.01 +smooth + +8.53639964532176 +47.34971109240335 +422.90022872936015 +18.190944593686137 +88.96923779859839 +0 +120 +absolute + + + +0.01 +smooth + +8.536399875208499 +47.349711173053876 +422.9196739103744 +18.19736301222518 +88.96964727392286 +0 +120 +absolute + + + +0.01 +smooth + +8.536400105551719 +47.34971125392 +422.9390926799514 +18.203716255503675 +88.97004187684243 +0 +120 +absolute + + + +0.01 +smooth + +8.536400336427512 +47.34971133504031 +422.9584888702647 +18.210024292004732 +88.9704246235124 +0 +120 +absolute + + + +0.01 +smooth + +8.536400568108608 +47.34971141655205 +422.97787658506013 +18.21635762261146 +88.9708065046261 +0 +120 +absolute + + + +0.01 +smooth + +8.536400800613675 +47.34971149846504 +422.9972567026942 +18.222720087917583 +88.97118833489267 +0 +120 +absolute + + + +0.01 +smooth + +8.536401033938041 +47.34971158077729 +423.0166288849097 +18.229109436586963 +88.97156999061313 +0 +120 +absolute + + + +0.01 +smooth + +8.536401268077027 +47.34971166348687 +423.03599279345053 +18.235523417283495 +88.97195134808875 +0 +120 +absolute + + + +0.01 +smooth + +8.536401503025955 +47.34971174659182 +423.0553480900592 +18.241959778671045 +88.97233228362056 +0 +120 +absolute + + + +0.01 +smooth + +8.536401738780153 +47.34971183009019 +423.0746944364796 +18.24841626941352 +88.97271267350979 +0 +120 +absolute + + + +0.01 +smooth + +8.536401975334938 +47.34971191398003 +423.0940314944546 +18.254890638174782 +88.97309239405743 +0 +120 +absolute + + + +0.01 +smooth + +8.536402212685642 +47.3497119982594 +423.11335892572777 +18.26138063361874 +88.97347132156479 +0 +120 +absolute + + + +0.01 +smooth + +8.536402450827579 +47.34971208292632 +423.1326763920421 +18.267884004409243 +88.97384933233286 +0 +120 +absolute + + + +0.01 +smooth + +8.536402689756079 +47.34971216797888 +423.15198355514104 +18.2743984992102 +88.97422630266286 +0 +120 +absolute + + + +0.01 +smooth + +8.53640292946646 +47.349712253415085 +423.1712800767677 +18.280921866685482 +88.97460210885589 +0 +120 +absolute + + + +0.01 +smooth + +8.536403169954053 +47.34971233923302 +423.19056561866546 +18.287451855498976 +88.97497662721311 +0 +120 +absolute + + + +0.01 +smooth + +8.53640341121418 +47.34971242543074 +423.2098398425776 +18.293986214314568 +88.97534973403563 +0 +120 +absolute + + + +0.01 +smooth + +8.536403653242154 +47.34971251200625 +423.2291024102472 +18.30052269179614 +88.97572130562456 +0 +120 +absolute + + + +0.01 +smooth + +8.53640389603331 +47.34971259895763 +423.2483529834176 +18.30705903660756 +88.97609121828104 +0 +120 +absolute + + + +0.01 +smooth + +8.536404139582967 +47.34971268628295 +423.2675912238323 +18.313592997412734 +88.97645934830632 +0 +120 +absolute + + + +0.01 +smooth + +8.53640438388645 +47.34971277398023 +423.2868167932344 +18.320122322875537 +88.97682557200139 +0 +120 +absolute + + + +0.01 +smooth + +8.536404628939081 +47.349712862047504 +423.30602935336685 +18.326644761659846 +88.97718976566742 +0 +120 +absolute + + + +0.01 +smooth + +8.536404874736181 +47.34971295048285 +423.32522856597336 +18.333158062429543 +88.97755180560557 +0 +120 +absolute + + + +0.01 +smooth + +8.536405121273082 +47.34971303928431 +423.34441409279714 +18.339659973848523 +88.97791156811698 +0 +120 +absolute + + + +0.01 +smooth + +8.536405368545102 +47.34971312844996 +423.3635855955813 +18.346148244580665 +88.97826892950279 +0 +120 +absolute + + + +0.01 +smooth + +8.53640561654756 +47.34971321797779 +423.3827427360691 +18.352620623289837 +88.97862376606408 +0 +120 +absolute + + + +0.01 +smooth + +8.536405865275785 +47.34971330786588 +423.4018851760038 +18.35907485863994 +88.97897595410201 +0 +120 +absolute + + + +0.01 +smooth + +8.536406114725102 +47.349713398112314 +423.42101257712886 +18.365508699294853 +88.97932536991776 +0 +120 +absolute + + + +0.01 +smooth + +8.53640636489083 +47.3497134887151 +423.4401246011874 +18.37191989391846 +88.97967188981242 +0 +120 +absolute + + + +0.01 +smooth + +8.536406615768295 +47.34971357967228 +423.45922090992246 +18.378306191174634 +88.9800153900871 +0 +120 +absolute + + + +0.01 +smooth + +8.536406867352817 +47.34971367098193 +423.4783011650776 +18.384665339727263 +88.98035574704298 +0 +120 +absolute + + + +0.01 +smooth + +8.536407119639726 +47.349713762642104 +423.4973650283962 +18.39099508824024 +88.9806928369812 +0 +120 +absolute + + + +0.01 +smooth + +8.53640737262434 +47.34971385465084 +423.5164121616212 +18.397293185377443 +88.98102653620288 +0 +120 +absolute + + + +0.01 +smooth + +8.536407626301983 +47.34971394700615 +423.53544222649595 +18.40355737980274 +88.98135672100912 +0 +120 +absolute + + + +0.01 +smooth + +8.53640788066798 +47.34971403970615 +423.55445488476374 +18.409785420180032 +88.98168326770107 +0 +120 +absolute + + + +0.01 +smooth + +8.536408135717654 +47.349714132748844 +423.5734497981679 +18.415975055173206 +88.98200605257992 +0 +120 +absolute + + + +0.01 +smooth + +8.536408391446331 +47.34971422613232 +423.59242662845173 +18.422124033446128 +88.98232495194677 +0 +120 +absolute + + + +0.01 +smooth + +8.536408647849328 +47.34971431985457 +423.6113850373582 +18.428230103662685 +88.9826398421027 +0 +120 +absolute + + + +0.01 +smooth + +8.536408904921974 +47.349714413913695 +423.63032468663084 +18.43429101448676 +88.98295059934888 +0 +120 +absolute + + + +0.01 +smooth + +8.536409162659591 +47.34971450830773 +423.649245238013 +18.44030451458225 +88.98325709998653 +0 +120 +absolute + + + +0.01 +smooth + +8.536409421057504 +47.34971460303472 +423.66814635324783 +18.44626835261303 +88.98355922031666 +0 +120 +absolute + + + +0.01 +smooth + +8.536409680111031 +47.349714698092704 +423.6870276940783 +18.452180277242974 +88.98385683664046 +0 +120 +absolute + + + +0.01 +smooth + +8.5364099398155 +47.34971479347974 +423.705888922248 +18.458038037135964 +88.98414982525904 +0 +120 +absolute + + + +0.01 +smooth + +8.536410200166237 +47.34971488919391 +423.72472969950024 +18.463839380955907 +88.9844380624736 +0 +120 +absolute + + + +0.01 +smooth + +8.53641046115856 +47.34971498523322 +423.743549687578 +18.46958205736666 +88.98472142458517 +0 +120 +absolute + + + +0.01 +smooth + +8.536410722787794 +47.349715081595726 +423.76234854822485 +18.47526381503212 +88.98499978789498 +0 +120 +absolute + + + +0.01 +smooth + +8.536410985049264 +47.349715178279496 +423.78112594318384 +18.480882402616164 +88.98527302870411 +0 +120 +absolute + + + +0.01 +smooth + +8.536411247938293 +47.349715275282556 +423.79988153419833 +18.486435568782674 +88.98554102331371 +0 +120 +absolute + + + +0.01 +smooth + +8.5364115114502 +47.34971537260297 +423.81861498301157 +18.49192106219554 +88.98580364802494 +0 +120 +absolute + + + +0.01 +smooth + +8.536411775580316 +47.34971547023879 +423.8373259513667 +18.49733663151864 +88.98606077913888 +0 +120 +absolute + + + +0.01 +smooth + +8.53641204032396 +47.34971556818807 +423.8560141010072 +18.502680025415856 +88.9863122929567 +0 +120 +absolute + + + +0.01 +smooth + +8.536412305676457 +47.349715666448844 +423.87467909367615 +18.507948992551075 +88.98655806577952 +0 +120 +absolute + + + +0.01 +smooth + +8.536412571633129 +47.34971576501917 +423.8933205911169 +18.51314128158818 +88.9867979739085 +0 +120 +absolute + + + +0.01 +smooth + +8.5364128381893 +47.34971586389709 +423.91193825507276 +18.51825464119105 +88.98703189364474 +0 +120 +absolute + + + +0.01 +smooth + +8.536413105340294 +47.34971596308066 +423.93053174728686 +18.523286820023568 +88.98725970128939 +0 +120 +absolute + + + +0.01 +smooth + +8.536413373081434 +47.34971606256793 +423.9491007295026 +18.528235566749625 +88.9874812731436 +0 +120 +absolute + + + +0.01 +smooth + +8.536413641408043 +47.349716162356955 +423.9676448634632 +18.533098630033095 +88.98769648550848 +0 +120 +absolute + + + +0.01 +smooth + +8.536413910315446 +47.34971626244578 +423.98616381091176 +18.537873758537863 +88.98790521468517 +0 +120 +absolute + + + +0.01 +smooth + +8.536414179798966 +47.34971636283244 +424.0046572335918 +18.54255870092782 +88.98810733697482 +0 +120 +absolute + + + +0.01 +smooth + +8.536414449853925 +47.349716463515 +424.02312479324644 +18.547151205866836 +88.98830272867855 +0 +120 +absolute + + + +0.01 +smooth + +8.53641472047565 +47.349716564491516 +424.0415661516189 +18.5516490220188 +88.98849126609747 +0 +120 +absolute + + + +0.01 +smooth + +8.536414991659457 +47.34971666576001 +424.05998097045256 +18.5560498980476 +88.98867282553277 +0 +120 +absolute + + + +0.01 +smooth + +8.536415263400679 +47.34971676731857 +424.07836891149066 +18.560351582617113 +88.98884728328554 +0 +120 +absolute + + + +0.01 +smooth + +8.536415535694632 +47.34971686916521 +424.09672963647637 +18.564551824391224 +88.98901451565693 +0 +120 +absolute + + + +0.01 +smooth + +8.536415808536642 +47.34971697129801 +424.1150628071531 +18.568648372033813 +88.98917439894808 +0 +120 +absolute + + + +0.01 +smooth + +8.536416081922034 +47.349717073715 +424.133368085264 +18.572638974208765 +88.98932680946012 +0 +120 +absolute + + + +0.01 +smooth + +8.536416355846129 +47.349717176414224 +424.1516451325523 +18.576521379579965 +88.9894716234942 +0 +120 +absolute + + + +0.01 +smooth + +8.536416630304252 +47.349717279393744 +424.1698936107614 +18.580293336811295 +88.9896087173514 +0 +120 +absolute + + + +0.01 +smooth + +8.536416905291727 +47.34971738265161 +424.18811318163455 +18.58395259456664 +88.98973796733293 +0 +120 +absolute + + + +0.01 +smooth + +8.536417180803877 +47.34971748618587 +424.2063035069149 +18.587496901509883 +88.98985924973985 +0 +120 +absolute + + + +0.01 +smooth + +8.536417456836023 +47.34971758999457 +424.2244642483456 +18.590924006304903 +88.98997244087334 +0 +120 +absolute + + + +0.01 +smooth + +8.536417733383491 +47.349717694075764 +424.2425950676703 +18.59423165761558 +88.99007741703454 +0 +120 +absolute + + + +0.01 +smooth + +8.536418010441604 +47.34971779842749 +424.26069562663196 +18.597417604105807 +88.99017405452454 +0 +120 +absolute + + + +0.01 +smooth + +8.536418288005686 +47.34971790304781 +424.278765586974 +18.600479594439463 +88.99026222964451 +0 +120 +absolute + + + +0.01 +smooth + +8.53641856607106 +47.34971800793477 +424.2968046104395 +18.603415377280427 +88.99034181869558 +0 +120 +absolute + + + +0.01 +smooth + +8.536418844633047 +47.349718113086425 +424.31481235877186 +18.606222701292587 +88.99041269797891 +0 +120 +absolute + + + +0.01 +smooth + +8.536419123686976 +47.34971821850081 +424.33278849371436 +18.608899315139823 +88.99047474379559 +0 +120 +absolute + + + +0.01 +smooth + +8.536419403228164 +47.349718324175996 +424.3507326770101 +18.61144296748602 +88.99052783244676 +0 +120 +absolute + + + +0.01 +smooth + +8.53641968325194 +47.34971843011001 +424.3686445704026 +18.61385140699506 +88.99057184023357 +0 +120 +absolute + + + +0.01 +smooth + +8.536419963753625 +47.34971853630091 +424.38652383563493 +18.616122382330826 +88.99060664345714 +0 +120 +absolute + + + +0.01 +smooth + +8.536420244728541 +47.34971864274675 +424.40437013445046 +18.6182536421572 +88.99063211841863 +0 +120 +absolute + + + +0.01 +smooth + +8.536420526172014 +47.34971874944558 +424.4221831285923 +18.62024293513807 +88.99064814141916 +0 +120 +absolute + + + +0.01 +smooth + +8.536420808079367 +47.34971885639544 +424.4399624798038 +18.622088009937308 +88.99065458875985 +0 +120 +absolute + + + +0.01 +smooth + +8.536421090573626 +47.349718963661346 +424.45771473673153 +18.623834773816846 +88.99064906603051 +0 +120 +absolute + + + +0.01 +smooth + +8.53642137388501 +47.3497190713645 +424.4754522478639 +18.625570662916108 +88.99062745454569 +0 +120 +absolute + + + +0.01 +smooth + +8.536421658013802 +47.349719179505534 +424.4931749767945 +18.627297263530995 +88.9905898651603 +0 +120 +absolute + + + +0.01 +smooth + +8.53642194295518 +47.34971928808244 +424.510882611764 +18.629014244503235 +88.9905365010713 +0 +120 +absolute + + + +0.01 +smooth + +8.53642222870431 +47.349719397093146 +424.5285748410123 +18.630721274674507 +88.99046756547548 +0 +120 +absolute + + + +0.01 +smooth + +8.536422515256378 +47.349719506535656 +424.5462513527799 +18.632418022886537 +88.99038326156979 +0 +120 +absolute + + + +0.01 +smooth + +8.536422802606555 +47.349719616407896 +424.56391183530684 +18.634104157981003 +88.99028379255105 +0 +120 +absolute + + + +0.01 +smooth + +8.536423090750018 +47.34971972670785 +424.5815559768337 +18.635779348799634 +88.9901693616162 +0 +120 +absolute + + + +0.01 +smooth + +8.536423379681935 +47.34971983743347 +424.5991834656006 +18.637443264184117 +88.990040171962 +0 +120 +absolute + + + +0.01 +smooth + +8.53642366939749 +47.34971994858275 +424.6167939898479 +18.639095572976167 +88.9898964267854 +0 +120 +absolute + + + +0.01 +smooth + +8.536423959891854 +47.3497200601536 +424.63438723781564 +18.64073594401748 +88.98973832928327 +0 +120 +absolute + + + +0.01 +smooth + +8.536424251160202 +47.34972017214405 +424.65196289774457 +18.64236404614976 +88.98956608265247 +0 +120 +absolute + + + +0.01 +smooth + +8.53642454319771 +47.34972028455201 +424.66952065787456 +18.64397954821471 +88.98937989008985 +0 +120 +absolute + + + +0.01 +smooth + +8.536424835999554 +47.34972039737548 +424.687060206446 +18.645582119054037 +88.98917995479235 +0 +120 +absolute + + + +0.01 +smooth + +8.536425129560907 +47.349720510612386 +424.7045812316992 +18.647171427509445 +88.98896647995676 +0 +120 +absolute + + + +0.01 +smooth + +8.536425423876947 +47.34972062426073 +424.72208342187446 +18.648747142422636 +88.98873966878 +0 +120 +absolute + + + +0.01 +smooth + +8.536425718942848 +47.34972073831845 +424.73956646521196 +18.650308932635312 +88.98849972445892 +0 +120 +absolute + + + +0.01 +smooth + +8.536426014753784 +47.349720852783555 +424.75703004995216 +18.65185646698918 +88.98824685019044 +0 +120 +absolute + + + +0.01 +smooth + +8.53642631130493 +47.34972096765394 +424.7744738643351 +18.65338941432594 +88.98798124917137 +0 +120 +absolute + + + +0.01 +smooth + +8.536426608591464 +47.34972108292761 +424.79189759660136 +18.6549074434873 +88.9877031245986 +0 +120 +absolute + + + +0.01 +smooth + +8.536426906608556 +47.34972119860252 +424.8093009349909 +18.656410223314953 +88.98741267966899 +0 +120 +absolute + + + +0.01 +smooth + +8.536427205351389 +47.34972131467666 +424.82668356774434 +18.65789742265062 +88.98711011757949 +0 +120 +absolute + + + +0.01 +smooth + +8.536427504815132 +47.34972143114797 +424.84404518310174 +18.659368710335997 +88.98679564152691 +0 +120 +absolute + + + +0.01 +smooth + +8.536427804994963 +47.34972154801439 +424.86138546930323 +18.660823755212775 +88.98646945470809 +0 +120 +absolute + + + +0.01 +smooth + +8.536428105886051 +47.34972166527391 +424.8787041145894 +18.662262226122674 +88.98613176031995 +0 +120 +absolute + + + +0.01 +smooth + +8.536428407483584 +47.34972178292452 +424.89600080720055 +18.663683791907395 +88.98578276155935 +0 +120 +absolute + + + +0.01 +smooth + +8.536428709782724 +47.349721900964155 +424.9132752353768 +18.66508812140864 +88.9854226616232 +0 +120 +absolute + + + +0.01 +smooth + +8.536429012778653 +47.349722019390754 +424.93052708735826 +18.666474883468105 +88.98505166370829 +0 +120 +absolute + + + +0.01 +smooth + +8.536429316466544 +47.34972213820232 +424.9477560513855 +18.6678437469275 +88.98466997101154 +0 +120 +absolute + + + +0.01 +smooth + +8.536429620841577 +47.34972225739683 +424.9649618156988 +18.669194380628536 +88.98427778672985 +0 +120 +absolute + + + +0.01 +smooth + +8.53642992589892 +47.3497223769722 +424.9821440685384 +18.670526453412908 +88.98387531406007 +0 +120 +absolute + + + +0.01 +smooth + +8.536430231633751 +47.34972249692642 +424.9993024981443 +18.67183963412231 +88.98346275619905 +0 +120 +absolute + + + +0.01 +smooth + +8.536430538041245 +47.34972261725744 +425.01643679275713 +18.67313359159846 +88.98304031634365 +0 +120 +absolute + + + +0.01 +smooth + +8.53643084511658 +47.34972273796326 +425.03354664061715 +18.67440799468307 +88.98260819769082 +0 +120 +absolute + + + +0.01 +smooth + +8.536431152854929 +47.34972285904182 +425.0506317299645 +18.67566251221783 +88.98216660343738 +0 +120 +absolute + + + +0.01 +smooth + +8.536431461251464 +47.34972298049107 +425.06769174903934 +18.67689681304443 +88.98171573678017 +0 +120 +absolute + + + +0.01 +smooth + +8.536431770301366 +47.34972310230899 +425.08472638608225 +18.678110566004595 +88.98125580091612 +0 +120 +absolute + + + +0.01 +smooth + +8.536432079999807 +47.349723224493566 +425.1017353293334 +18.67930343994003 +88.98078699904208 +0 +120 +absolute + + + +0.01 +smooth + +8.536432390341963 +47.349723347042726 +425.11871826703316 +18.68047510369243 +88.98030953435494 +0 +120 +absolute + + + +0.01 +smooth + +8.536432701323006 +47.34972346995443 +425.1356748874215 +18.681625226103492 +88.97982361005151 +0 +120 +absolute + + + +0.01 +smooth + +8.536433012938117 +47.34972359322667 +425.15260487873906 +18.682753476014934 +88.97932942932873 +0 +120 +absolute + + + +0.01 +smooth + +8.536433325182468 +47.3497237168574 +425.1695079292259 +18.683859522268452 +88.97882719538345 +0 +120 +absolute + + + +0.01 +smooth + +8.536433638051234 +47.34972384084458 +425.18638372712223 +18.68494303370575 +88.97831711141254 +0 +120 +absolute + + + +0.01 +smooth + +8.536433951539589 +47.349723965186186 +425.20323196066863 +18.686003679168532 +88.97779938061288 +0 +120 +absolute + + + +0.01 +smooth + +8.536434265642711 +47.34972408988017 +425.22005231810533 +18.687041127498503 +88.97727420618132 +0 +120 +absolute + + + +0.01 +smooth + +8.536434580355774 +47.3497242149245 +425.23684448767233 +18.688055047537365 +88.97674179131478 +0 +120 +absolute + + + +0.01 +smooth + +8.536434895673953 +47.34972434031713 +425.2536081576101 +18.68904510812682 +88.97620233921009 +0 +120 +absolute + + + +0.01 +smooth + +8.536435211592423 +47.34972446605604 +425.2703430161589 +18.690010978108578 +88.97565605306411 +0 +120 +absolute + + + +0.01 +smooth + +8.53643552810636 +47.34972459213918 +425.287048751559 +18.690952326324336 +88.97510313607376 +0 +120 +absolute + + + +0.01 +smooth + +8.536435845210939 +47.34972471856454 +425.30372505205077 +18.6918688216158 +88.97454379143588 +0 +120 +absolute + + + +0.01 +smooth + +8.536436162901332 +47.349724845330044 +425.32037160587436 +18.692760132824674 +88.97397822234734 +0 +120 +absolute + + + +0.01 +smooth + +8.53643648117272 +47.3497249724337 +425.3369881012701 +18.69362592879266 +88.97340663200502 +0 +120 +absolute + + + +0.01 +smooth + +8.536436800020272 +47.34972509987344 +425.3535742264783 +18.694465878361466 +88.97282922360581 +0 +120 +absolute + + + +0.01 +smooth + +8.536437119439169 +47.34972522764723 +425.3701296697393 +18.695279650372786 +88.97224620034658 +0 +120 +absolute + + + +0.01 +smooth + +8.536437439424581 +47.34972535575305 +425.3866541192932 +18.696066913668336 +88.97165776542417 +0 +120 +absolute + + + +0.01 +smooth + +8.53643775997169 +47.34972548418885 +425.40314726338045 +18.696827337089815 +88.97106412203547 +0 +120 +absolute + + + +0.01 +smooth + +8.536438081075664 +47.34972561295261 +425.41960879024117 +18.697560589478922 +88.97046547337735 +0 +120 +absolute + + + +0.01 +smooth + +8.536438402731681 +47.34972574204227 +425.4360383881159 +18.698266339677364 +88.9698620226467 +0 +120 +absolute + + + +0.01 +smooth + +8.536438724934918 +47.34972587145583 +425.45243574524454 +18.698944256526843 +88.96925397304037 +0 +120 +absolute + + + +0.01 +smooth + +8.536439047680547 +47.349726001191215 +425.46880054986775 +18.699594008869067 +88.96864152775524 +0 +120 +absolute + + + +0.01 +smooth + +8.536439370963743 +47.34972613124641 +425.4851324902256 +18.700215265545737 +88.96802488998819 +0 +120 +absolute + + + +0.01 +smooth + +8.536439694779684 +47.34972626161938 +425.50143125455844 +18.700807695398556 +88.9674042629361 +0 +120 +absolute + + + +0.01 +smooth + +8.536440019123546 +47.34972639230808 +425.5176965311065 +18.701370967269227 +88.9667798497958 +0 +120 +absolute + + + +0.01 +smooth + +8.536440343990499 +47.34972652331048 +425.53392800811014 +18.701904749999457 +88.9661518537642 +0 +120 +absolute + + + +0.01 +smooth + +8.536440669375724 +47.34972665462455 +425.55012537380946 +18.702408712430945 +88.96552047803817 +0 +120 +absolute + + + +0.01 +smooth + +8.536440995274392 +47.34972678624823 +425.5662883164451 +18.7028825234054 +88.96488592581457 +0 +120 +absolute + + + +0.01 +smooth + +8.536441321681679 +47.34972691817951 +425.582416524257 +18.703325851764518 +88.96424840029027 +0 +120 +absolute + + + +0.01 +smooth + +8.536441648592762 +47.34972705041635 +425.59850968548557 +18.70373836635001 +88.96360810466214 +0 +120 +absolute + + + +0.01 +smooth + +8.536441976002815 +47.34972718295671 +425.61456748837105 +18.704119736003573 +88.9629652421271 +0 +120 +absolute + + + +0.01 +smooth + +8.536442303907013 +47.34972731579855 +425.6305896211538 +18.704469629566916 +88.96232001588197 +0 +120 +absolute + + + +0.01 +smooth + +8.536442632300531 +47.34972744893983 +425.64657577207396 +18.704787715881743 +88.96167262912363 +0 +120 +absolute + + + +0.01 +smooth + +8.536442961178546 +47.349727582378534 +425.66252562937194 +18.70507366378976 +88.96102328504895 +0 +120 +absolute + + + +0.01 +smooth + +8.53644329053623 +47.349727716112604 +425.6784388812881 +18.70532714213266 +88.96037218685481 +0 +120 +absolute + + + +0.01 +smooth + +8.536443620368761 +47.34972785014001 +425.6943152160624 +18.705547819752155 +88.9597195377381 +0 +120 +absolute + + + +0.01 +smooth + +8.53644395067131 +47.34972798445873 +425.71015432193553 +18.705735365489947 +88.95906554089566 +0 +120 +absolute + + + +0.01 +smooth + +8.53644428143906 +47.34972811906672 +425.7259558871475 +18.705889448187737 +88.95841039952441 +0 +120 +absolute + + + +0.01 +smooth + +8.536444612667179 +47.34972825396193 +425.7417195999387 +18.70600973668723 +88.95775431682115 +0 +120 +absolute + + + +0.01 +smooth + +8.536444944350846 +47.34972838914234 +425.75744514854927 +18.70609589983013 +88.9570974959828 +0 +120 +absolute + + + +0.01 +smooth + +8.536445276485233 +47.34972852460592 +425.7731322212196 +18.70614760645815 +88.95644014020624 +0 +120 +absolute + + + +0.01 +smooth + +8.536445609065566 +47.349728660350635 +425.7887805089916 +18.706164505226354 +88.95578244935683 +0 +120 +absolute + + + +0.01 +smooth + +8.53644594226664 +47.349728796472945 +425.8044001204451 +18.706071689565352 +88.95511225197208 +0 +120 +absolute + + + +0.01 +smooth + +8.536446276251782 +47.34972893306299 +425.82000051529707 +18.705800888368643 +88.95441821196037 +0 +120 +absolute + + + +0.01 +smooth + +8.536446611016123 +47.349729070118656 +425.8355814044727 +18.7053545477157 +88.95370060123795 +0 +120 +absolute + + + +0.01 +smooth + +8.536446946554797 +47.34972920763786 +425.8511424988979 +18.704735113686002 +88.9529596917211 +0 +120 +absolute + + + +0.01 +smooth + +8.536447282862948 +47.34972934561855 +425.8666835094981 +18.70394503235903 +88.95219575532607 +0 +120 +absolute + + + +0.01 +smooth + +8.536447619935714 +47.34972948405862 +425.8822041471991 +18.702986749814272 +88.95140906396918 +0 +120 +absolute + + + +0.01 +smooth + +8.536447957768221 +47.349729622956005 +425.8977041229262 +18.70186271213118 +88.95059988956665 +0 +120 +absolute + + + +0.01 +smooth + +8.536448296355616 +47.349729762308584 +425.91318314760525 +18.70057536538926 +88.94976850403472 +0 +120 +absolute + + + +0.01 +smooth + +8.53644863569303 +47.349729902114326 +425.9286409321617 +18.699127155667977 +88.94891517928974 +0 +120 +absolute + + + +0.01 +smooth + +8.536448975775604 +47.349730042371135 +425.94407718752126 +18.69752052904682 +88.948040187248 +0 +120 +absolute + + + +0.01 +smooth + +8.536449316598471 +47.3497301830769 +425.95949162460926 +18.695757931605257 +88.94714379982564 +0 +120 +absolute + + + +0.01 +smooth + +8.53644965815677 +47.349730324229554 +425.9748839543516 +18.693841809422764 +88.94622628893904 +0 +120 +absolute + + + +0.01 +smooth + +8.53645000044564 +47.349730465827044 +425.9902538876737 +18.691774608578836 +88.94528792650448 +0 +120 +absolute + + + +0.01 +smooth + +8.536450343460212 +47.34973060786722 +426.00560113550125 +18.689558775152943 +88.94432898443813 +0 +120 +absolute + + + +0.01 +smooth + +8.536450687195622 +47.34973075034806 +426.0209254087597 +18.68719675522455 +88.94334973465632 +0 +120 +absolute + + + +0.01 +smooth + +8.536451031647013 +47.34973089326744 +426.03622641837467 +18.68469099487316 +88.94235044907535 +0 +120 +absolute + + + +0.01 +smooth + +8.536451376809518 +47.34973103662331 +426.0515038752719 +18.682043940178232 +88.94133139961144 +0 +120 +absolute + + + +0.01 +smooth + +8.53645172267828 +47.349731180413585 +426.066757490377 +18.679258037219263 +88.9402928581809 +0 +120 +absolute + + + +0.01 +smooth + +8.536452069248424 +47.34973132463616 +426.08198697461523 +18.676335732075717 +88.93923509669996 +0 +120 +absolute + + + +0.01 +smooth + +8.536452416515097 +47.34973146928897 +426.09719203891245 +18.673279470827076 +88.93815838708491 +0 +120 +absolute + + + +0.01 +smooth + +8.536452764473433 +47.349731614369915 +426.1123723941943 +18.670091699552824 +88.93706300125207 +0 +120 +absolute + + + +0.01 +smooth + +8.536453113118561 +47.34973175987691 +426.127527751386 +18.666774864332428 +88.93594921111757 +0 +120 +absolute + + + +0.01 +smooth + +8.53645346244563 +47.349731905807914 +426.14265782141365 +18.663331411245384 +88.93481728859786 +0 +120 +absolute + + + +0.01 +smooth + +8.53645381244977 +47.34973205216081 +426.15776231520255 +18.659763786371155 +88.93366750560911 +0 +120 +absolute + + + +0.01 +smooth + +8.536454163126116 +47.349732198933516 +426.1728409436783 +18.656074435789222 +88.93250013406755 +0 +120 +absolute + + + +0.01 +smooth + +8.536454514469813 +47.34973234612395 +426.1878934177666 +18.652265805579077 +88.93131544588957 +0 +120 +absolute + + + +0.01 +smooth + +8.53645486647599 +47.349732493730045 +426.20291944839295 +18.648340341820184 +88.93011371299133 +0 +120 +absolute + + + +0.01 +smooth + +8.536455219139784 +47.34973264174969 +426.21791874648284 +18.644300490592027 +88.92889520728914 +0 +120 +absolute + + + +0.01 +smooth + +8.536455572456337 +47.34973279018084 +426.23289102296224 +18.640148697974087 +88.92766020069936 +0 +120 +absolute + + + +0.01 +smooth + +8.53645592642078 +47.34973293902137 +426.2478359887564 +18.63588741004584 +88.92640896513807 +0 +120 +absolute + + + +0.01 +smooth + +8.536456281028254 +47.34973308826923 +426.2627533547908 +18.631519072886768 +88.92514177252168 +0 +120 +absolute + + + +0.01 +smooth + +8.536456636273897 +47.34973323792232 +426.27764283199144 +18.627046132576343 +88.92385889476647 +0 +120 +absolute + + + +0.01 +smooth + +8.536456992152836 +47.34973338797856 +426.2925041312834 +18.622471035194042 +88.9225606037886 +0 +120 +absolute + + + +0.01 +smooth + +8.53645734866022 +47.349733538435885 +426.3073369635929 +18.617796226819358 +88.92124717150445 +0 +120 +absolute + + + +0.01 +smooth + +8.536457705791175 +47.34973368929219 +426.322141039845 +18.61302415353176 +88.91991886983025 +0 +120 +absolute + + + +0.01 +smooth + +8.536458063540847 +47.34973384054539 +426.3369160709655 +18.60815726141072 +88.91857597068223 +0 +120 +absolute + + + +0.01 +smooth + +8.536458421904372 +47.349733992193435 +426.3516617678802 +18.603197996535737 +88.91721874597675 +0 +120 +absolute + + + +0.01 +smooth + +8.536458780876877 +47.34973414423419 +426.36637784151424 +18.59814880498627 +88.91584746763 +0 +120 +absolute + + + +0.01 +smooth + +8.536459140453509 +47.349734296665616 +426.3810640027935 +18.593012132841807 +88.91446240755828 +0 +120 +absolute + + + +0.01 +smooth + +8.5364595006294 +47.34973444948561 +426.39571996264357 +18.587790426181822 +88.91306383767787 +0 +120 +absolute + + + +0.01 +smooth + +8.536459861399688 +47.3497346026921 +426.4103454319899 +18.582486131085798 +88.91165202990501 +0 +120 +absolute + + + +0.01 +smooth + +8.536460222759509 +47.349734756283 +426.42494012175825 +18.57710169363321 +88.91022725615602 +0 +120 +absolute + + + +0.01 +smooth + +8.536460584704 +47.34973491025622 +426.43950374287414 +18.57163955990354 +88.90878978834714 +0 +120 +absolute + + + +0.01 +smooth + +8.5364609472283 +47.34973506460969 +426.454036006263 +18.566102175976265 +88.90733989839462 +0 +120 +absolute + + + +0.01 +smooth + +8.53646131032754 +47.34973521934131 +426.4685366228507 +18.56049198793087 +88.90587785821475 +0 +120 +absolute + + + +0.01 +smooth + +8.536461673996863 +47.34973537444902 +426.4830053035626 +18.55481144184682 +88.90440393972384 +0 +120 +absolute + + + +0.01 +smooth + +8.536462038231402 +47.34973552993071 +426.49744175932443 +18.549062983803605 +88.90291841483806 +0 +120 +absolute + + + +0.01 +smooth + +8.536462403026297 +47.349735685784324 +426.51184570106176 +18.5432490598807 +88.9014215554738 +0 +120 +absolute + + + +0.01 +smooth + +8.536462768376682 +47.34973584200776 +426.52621683970017 +18.537372116157584 +88.89991363354724 +0 +120 +absolute + + + +0.01 +smooth + +8.536463134277694 +47.34973599859894 +426.5405548861652 +18.531434598713737 +88.89839492097471 +0 +120 +absolute + + + +0.01 +smooth + +8.53646350072447 +47.34973615555578 +426.5548595513825 +18.52543895362863 +88.89686568967245 +0 +120 +absolute + + + +0.01 +smooth + +8.536463867712147 +47.3497363128762 +426.5691305462777 +18.519387626981754 +88.89532621155672 +0 +120 +absolute + + + +0.01 +smooth + +8.536464235235862 +47.349736470558135 +426.5833675817763 +18.51328306485258 +88.89377675854382 +0 +120 +absolute + + + +0.01 +smooth + +8.53646460329075 +47.34973662859947 +426.5975703688038 +18.507127713320592 +88.89221760254999 +0 +120 +absolute + + + +0.01 +smooth + +8.536464971871949 +47.34973678699814 +426.6117386182861 +18.500924018465263 +88.89064901549155 +0 +120 +absolute + + + +0.01 +smooth + +8.536465340974598 +47.34973694575207 +426.62587204114857 +18.49467442636607 +88.8890712692847 +0 +120 +absolute + + + +0.01 +smooth + +8.53646571059383 +47.34973710485916 +426.63997034831675 +18.4883813831025 +88.88748463584575 +0 +120 +absolute + + + +0.01 +smooth + +8.536466080724784 +47.349737264317326 +426.65403325071634 +18.48204733475403 +88.885889387091 +0 +120 +absolute + + + +0.01 +smooth + +8.536466451362596 +47.3497374241245 +426.66806045927297 +18.47567472740013 +88.88428579493666 +0 +120 +absolute + + + +0.01 +smooth + +8.536466822502401 +47.349737584278586 +426.68205168491215 +18.469266007120286 +88.88267413129903 +0 +120 +absolute + + + +0.01 +smooth + +8.536467194139341 +47.349737744777514 +426.69600663855954 +18.46282361999398 +88.88105466809438 +0 +120 +absolute + + + +0.01 +smooth + +8.536467566268547 +47.34973790561919 +426.70992503114064 +18.456350012100685 +88.87942767723898 +0 +120 +absolute + + + +0.01 +smooth + +8.536467938885158 +47.34973806680155 +426.72380657358104 +18.449847629519876 +88.87779343064912 +0 +120 +absolute + + + +0.01 +smooth + +8.536468311984311 +47.349738228322494 +426.73765097680644 +18.443318918331038 +88.87615220024102 +0 +120 +absolute + + + +0.01 +smooth + +8.536468685561143 +47.34973839017993 +426.7514579517423 +18.436766324613654 +88.874504257931 +0 +120 +absolute + + + +0.01 +smooth + +8.53646905961079 +47.3497385523718 +426.7652272093143 +18.430192294447192 +88.8728498756353 +0 +120 +absolute + + + +0.01 +smooth + +8.53646943412839 +47.349738714896 +426.77895846044805 +18.423599273911137 +88.87118932527022 +0 +120 +absolute + + + +0.01 +smooth + +8.536469809109079 +47.34973887775046 +426.792651416069 +18.416989709084966 +88.86952287875201 +0 +120 +absolute + + + +0.01 +smooth + +8.53647018454799 +47.3497390409331 +426.80630578710304 +18.41036604604816 +88.86785080799692 +0 +120 +absolute + + + +0.01 +smooth + +8.536470560440268 +47.349739204441825 +426.81992128447536 +18.40373073088019 +88.86617338492125 +0 +120 +absolute + + + +0.01 +smooth + +8.536470936781042 +47.34973936827456 +426.83349761911177 +18.39708620966055 +88.86449088144127 +0 +120 +absolute + + + +0.01 +smooth + +8.536471313565452 +47.34973953242922 +426.84703450193797 +18.390434928468704 +88.86280356947323 +0 +120 +absolute + + + +0.01 +smooth + +8.536471690788634 +47.34973969690371 +426.86053164387926 +18.38377933338414 +88.86111172093342 +0 +120 +absolute + + + +0.01 +smooth + +8.536472068445725 +47.34973986169598 +426.8739887558615 +18.377121870486327 +88.85941560773813 +0 +120 +absolute + + + +0.01 +smooth + +8.536472446531864 +47.34974002680393 +426.8874055488102 +18.370464985854756 +88.85771550180357 +0 +120 +absolute + + + +0.01 +smooth + +8.536472825042186 +47.34974019222546 +426.9007817336509 +18.36381112556889 +88.85601167504608 +0 +120 +absolute + + + +0.01 +smooth + +8.536473203971825 +47.3497403579585 +426.9141170213091 +18.357162735708226 +88.85430439938187 +0 +120 +absolute + + + +0.01 +smooth + +8.53647358331592 +47.34974052400097 +426.9274111227106 +18.35052226235223 +88.85259394672724 +0 +120 +absolute + + + +0.01 +smooth + +8.536473963069609 +47.34974069035079 +426.94066374878093 +18.343892151580384 +88.85088058899846 +0 +120 +absolute + + + +0.01 +smooth + +8.53647434323451 +47.3497408570096 +426.9538750272689 +18.337270992399034 +88.84916419493698 +0 +120 +absolute + + + +0.01 +smooth + +8.53647472401977 +47.349741024098066 +426.9670584282021 +18.330533810905628 +88.84743171212776 +0 +120 +absolute + + + +0.01 +smooth + +8.5364751055243 +47.34974119167357 +426.9802203463155 +18.323620831669984 +88.84567688887203 +0 +120 +absolute + + + +0.01 +smooth + +8.536475487743283 +47.349741359734075 +426.99336050891895 +18.316533931734725 +88.84389991557329 +0 +120 +absolute + + + +0.01 +smooth + +8.536475870671886 +47.34974152827741 +427.0064786433219 +18.309274988142462 +88.8421009826349 +0 +120 +absolute + + + +0.01 +smooth + +8.53647625430528 +47.34974169730149 +427.01957447683395 +18.3018458779358 +88.84028028046018 +0 +120 +absolute + + + +0.01 +smooth + +8.53647663863864 +47.349741866804195 +427.0326477367647 +18.294248478157353 +88.83843799945255 +0 +120 +absolute + + + +0.01 +smooth + +8.536477023667137 +47.34974203678343 +427.0456981504241 +18.28648466584973 +88.83657433001545 +0 +120 +absolute + + + +0.01 +smooth + +8.536477409385949 +47.3497422072371 +427.05872544512147 +18.278556318055546 +88.83468946255219 +0 +120 +absolute + + + +0.01 +smooth + +8.536477795790237 +47.34974237816306 +427.0717293481663 +18.270465311817407 +88.83278358746615 +0 +120 +absolute + + + +0.01 +smooth + +8.536478182875182 +47.3497425495592 +427.0847095868684 +18.262213524177923 +88.83085689516076 +0 +120 +absolute + + + +0.01 +smooth + +8.536478570635959 +47.349742721423475 +427.0976658885375 +18.253802832179712 +88.8289095760394 +0 +120 +absolute + + + +0.01 +smooth + +8.53647895906773 +47.34974289375373 +427.1105979804831 +18.245235112865377 +88.82694182050547 +0 +120 +absolute + + + +0.01 +smooth + +8.536479348165674 +47.34974306654784 +427.1235055900147 +18.236512243277527 +88.82495381896226 +0 +120 +absolute + + + +0.01 +smooth + +8.536479737924962 +47.34974323980373 +427.1363884444421 +18.22763610045878 +88.82294576181324 +0 +120 +absolute + + + +0.01 +smooth + +8.536480128340772 +47.34974341351928 +427.14924627107484 +18.218608561451752 +88.82091783946181 +0 +120 +absolute + + + +0.01 +smooth + +8.536480519408267 +47.34974358769239 +427.1620787972227 +18.209431503299037 +88.81887024231132 +0 +120 +absolute + + + +0.01 +smooth + +8.536480911122622 +47.34974376232092 +427.1748857501949 +18.200106803043262 +88.81680316076512 +0 +120 +absolute + + + +0.01 +smooth + +8.536481303479013 +47.3497439374028 +427.18766685730134 +18.19063633772702 +88.81471678522662 +0 +120 +absolute + + + +0.01 +smooth + +8.53648169647261 +47.349744112935916 +427.2004218458518 +18.181021984392938 +88.81261130609927 +0 +120 +absolute + + + +0.01 +smooth + +8.536482090098586 +47.34974428891815 +427.21315044315566 +18.171265620083624 +88.81048691378639 +0 +120 +absolute + + + +0.01 +smooth + +8.536482484352112 +47.34974446534739 +427.2258523765224 +18.161369121841677 +88.80834379869134 +0 +120 +absolute + + + +0.01 +smooth + +8.536482879228357 +47.34974464222152 +427.238527373262 +18.151334366709715 +88.80618215121753 +0 +120 +absolute + + + +0.01 +smooth + +8.536483274722503 +47.34974481953846 +427.2511751606839 +18.14116323173036 +88.80400216176838 +0 +120 +absolute + + + +0.01 +smooth + +8.536483670829718 +47.349744997296106 +427.26379546609775 +18.130857593946214 +88.80180402074724 +0 +120 +absolute + + + +0.01 +smooth + +8.53648406754517 +47.3497451754923 +427.27638801681303 +18.120419330399876 +88.79958791855748 +0 +120 +absolute + + + +0.01 +smooth + +8.536484464864033 +47.34974535412496 +427.28895254013946 +18.10985031813397 +88.79735404560252 +0 +120 +absolute + + + +0.01 +smooth + +8.536484862781483 +47.349745533192014 +427.30148876338677 +18.099152434191105 +88.79510259228573 +0 +120 +absolute + + + +0.01 +smooth + +8.536485261292693 +47.349745712691316 +427.3139964138645 +18.08832755561389 +88.79283374901051 +0 +120 +absolute + + + +0.01 +smooth + +8.536485660392831 +47.34974589262074 +427.3264752188822 +18.077377559444937 +88.79054770618019 +0 +120 +absolute + + + +0.01 +smooth + +8.536486060077069 +47.349746072978206 +427.3389249057495 +18.066304322726854 +88.78824465419818 +0 +120 +absolute + + + +0.01 +smooth + +8.536486460340583 +47.34974625376162 +427.35134520177616 +18.055109722502255 +88.78592478346793 +0 +120 +absolute + + + +0.01 +smooth + +8.536486861178545 +47.34974643496886 +427.3637358342717 +18.043795635813755 +88.78358828439276 +0 +120 +absolute + + + +0.01 +smooth + +8.536487262586125 +47.34974661659779 +427.3760965305456 +18.03236393970395 +88.78123534737605 +0 +120 +absolute + + + +0.01 +smooth + +8.536487664558493 +47.34974679864632 +427.38842701790765 +18.02081651121546 +88.7788661628212 +0 +120 +absolute + + + +0.01 +smooth + +8.53648806709083 +47.34974698111237 +427.40072702366757 +18.0091552273909 +88.7764809211316 +0 +120 +absolute + + + +0.01 +smooth + +8.536488470178302 +47.34974716399382 +427.41299627513473 +17.997381965272876 +88.77407981271065 +0 +120 +absolute + + + +0.01 +smooth + +8.536488873816081 +47.34974734728851 +427.42523449961885 +17.985498601903995 +88.77166302796167 +0 +120 +absolute + + + +0.01 +smooth + +8.53648927799934 +47.349747530994385 +427.43744142442955 +17.973507014326874 +88.7692307572881 +0 +120 +absolute + + + +0.01 +smooth + +8.536489682723255 +47.349747715109345 +427.44961677687667 +17.961409079584122 +88.76678319109334 +0 +120 +absolute + + + +0.01 +smooth + +8.536490087982996 +47.349747899631254 +427.4617602842694 +17.949206674718347 +88.7643205197807 +0 +120 +absolute + + + +0.01 +smooth + +8.536490493773734 +47.349748084558 +427.47387167391776 +17.936901676772166 +88.76184293375366 +0 +120 +absolute + + + +0.01 +smooth + +8.53649090009064 +47.34974826988749 +427.4859506731311 +17.924495962788185 +88.75935062341551 +0 +120 +absolute + + + +0.01 +smooth + +8.536491306928891 +47.34974845561761 +427.49799700921903 +17.911991409809012 +88.75684377916971 +0 +120 +absolute + + + +0.01 +smooth + +8.536491714283656 +47.34974864174626 +427.5100104094914 +17.899389894877263 +88.75432259141961 +0 +120 +absolute + + + +0.01 +smooth + +8.53649212215011 +47.349748828271316 +427.52199060125764 +17.886693295035546 +88.75178725056858 +0 +120 +absolute + + + +0.01 +smooth + +8.536492530523422 +47.34974901519069 +427.5339373118274 +17.873903487326473 +88.74923794702005 +0 +120 +absolute + + + +0.01 +smooth + +8.536492939398768 +47.34974920250225 +427.5458502685103 +17.861022348792655 +88.74667487117736 +0 +120 +absolute + + + +0.01 +smooth + +8.536493348771316 +47.349749390203904 +427.55772919861613 +17.8480517564767 +88.74409821344392 +0 +120 +absolute + + + +0.01 +smooth + +8.536493758636242 +47.34974957829355 +427.56957382945427 +17.834993587421224 +88.74150816422309 +0 +120 +absolute + + + +0.01 +smooth + +8.536494168988717 +47.34974976676906 +427.58138388833447 +17.82184971866883 +88.73890491391828 +0 +120 +absolute + + + +0.01 +smooth + +8.536494579823914 +47.34974995562834 +427.5931591025663 +17.808622027262135 +88.73628865293286 +0 +120 +absolute + + + +0.01 +smooth + +8.536494991137005 +47.34975014486928 +427.6048991994594 +17.795312390243748 +88.73365957167022 +0 +120 +absolute + + + +0.01 +smooth + +8.536495402923162 +47.34975033448976 +427.61660390632335 +17.78192268465628 +88.73101786053374 +0 +120 +absolute + + + +0.01 +smooth + +8.536495815177558 +47.349750524487696 +427.6282729504678 +17.76845478754234 +88.72836370992682 +0 +120 +absolute + + + +0.01 +smooth + +8.536496227895363 +47.34975071486095 +427.6399060592024 +17.754910575944542 +88.72569731025284 +0 +120 +absolute + + + +0.01 +smooth + +8.536496641071754 +47.349750905607436 +427.65150295983676 +17.741291926905497 +88.72301885191517 +0 +120 +absolute + + + +0.01 +smooth + +8.536497054701899 +47.34975109672504 +427.66306337968047 +17.72760071746781 +88.72032852531719 +0 +120 +absolute + + + +0.01 +smooth + +8.536497468780972 +47.34975128821166 +427.6745870460431 +17.71383882467409 +88.71762652086231 +0 +120 +absolute + + + +0.01 +smooth + +8.536497883304145 +47.349751480065166 +427.6860736862343 +17.70000812556696 +88.7149130289539 +0 +120 +absolute + + + +0.01 +smooth + +8.536498298266592 +47.349751672283475 +427.6975230275638 +17.686110497189024 +88.71218823999533 +0 +120 +absolute + + + +0.01 +smooth + +8.536498713663484 +47.34975186486446 +427.70893479734116 +17.67214781658289 +88.70945234439 +0 +120 +absolute + + + +0.01 +smooth + +8.536499129489993 +47.34975205780603 +427.72030872287587 +17.65812196079117 +88.70670553254129 +0 +120 +absolute + + + +0.01 +smooth + +8.536499545741291 +47.34975225110606 +427.73164453147774 +17.64403480685648 +88.7039479948526 +0 +120 +absolute + + + +0.01 +smooth + +8.536499962412552 +47.34975244476245 +427.74294195045627 +17.62988823182142 +88.7011799217273 +0 +120 +absolute + + + +0.01 +smooth + +8.536500379498946 +47.3497526387731 +427.7542007071211 +17.615684112728616 +88.69840150356876 +0 +120 +absolute + + + +0.01 +smooth + +8.53650079699565 +47.34975283313589 +427.7654205287819 +17.601424326620663 +88.69561293078041 +0 +120 +absolute + + + +0.01 +smooth + +8.53650121489783 +47.349753027848706 +427.7766011427482 +17.587110750540177 +88.69281439376559 +0 +120 +absolute + + + +0.01 +smooth + +8.536501633200665 +47.34975322290946 +427.78774227632965 +17.57274526152978 +88.6900060829277 +0 +120 +absolute + + + +0.01 +smooth + +8.53650205189932 +47.34975341831602 +427.79884365683597 +17.558329736632068 +88.68718818867012 +0 +120 +absolute + + + +0.01 +smooth + +8.536502470988975 +47.3497536140663 +427.80990501157663 +17.543866052889655 +88.68436090139625 +0 +120 +absolute + + + +0.01 +smooth + +8.536502890464796 +47.34975381015819 +427.82092606786136 +17.529356087345153 +88.68152441150946 +0 +120 +absolute + + + +0.01 +smooth + +8.536503310321958 +47.34975400658956 +427.8319065529997 +17.514801717041177 +88.67867890941312 +0 +120 +absolute + + + +0.01 +smooth + +8.536503730555635 +47.34975420335833 +427.84284619430133 +17.500204819020333 +88.67582458551065 +0 +120 +absolute + + + +0.01 +smooth + +8.536504151160997 +47.34975440046236 +427.85374471907585 +17.48556727032523 +88.6729616302054 +0 +120 +absolute + + + +0.01 +smooth + +8.536504572133216 +47.34975459789957 +427.8646018546329 +17.470890947998484 +88.6700902339008 +0 +120 +absolute + + + +0.01 +smooth + +8.536504993467467 +47.34975479566784 +427.87541732828197 +17.456177729082704 +88.66721058700018 +0 +120 +absolute + + + +0.01 +smooth + +8.53650541515892 +47.34975499376506 +427.8861908673328 +17.4414294906205 +88.66432287990695 +0 +120 +absolute + + + +0.01 +smooth + +8.53650583720275 +47.349755192189136 +427.8969221990951 +17.426648109654483 +88.66142730302451 +0 +120 +absolute + + + +0.01 +smooth + +8.536506259594123 +47.349755390937936 +427.9076110508783 +17.41183546322726 +88.65852404675621 +0 +120 +absolute + + + +0.01 +smooth + +8.536506682350296 +47.3497555900226 +427.91825875406045 +17.39698290417935 +88.6556121403877 +0 +120 +absolute + + + +0.01 +smooth + +8.536507105687724 +47.34975578957357 +427.9288811154958 +17.381986668452146 +88.65268012762334 +0 +120 +absolute + + + +0.01 +smooth + +8.536507529658778 +47.34975598962298 +427.9394820209312 +17.36682092659806 +88.64972516704233 +0 +120 +absolute + + + +0.01 +smooth + +8.53650795425869 +47.34975619016865 +427.95006120543405 +17.3514870529056 +88.64674742025781 +0 +120 +absolute + + + +0.01 +smooth + +8.536508379482715 +47.349756391208494 +427.96061840407214 +17.335986421663335 +88.64374704888289 +0 +120 +absolute + + + +0.01 +smooth + +8.53650880532608 +47.34975659274036 +427.97115335191245 +17.32032040715979 +88.64072421453072 +0 +120 +absolute + + + +0.01 +smooth + +8.536509231784034 +47.349756794762136 +427.9816657840228 +17.304490383683515 +88.63767907881443 +0 +120 +absolute + + + +0.01 +smooth + +8.536509658851811 +47.349756997271676 +427.9921554354705 +17.28849772552303 +88.63461180334717 +0 +120 +absolute + + + +0.01 +smooth + +8.536510086524661 +47.34975720026685 +428.002622041323 +17.272343806966894 +88.63152254974203 +0 +120 +absolute + + + +0.01 +smooth + +8.536510514797815 +47.34975740374552 +428.0130653366477 +17.256030002303632 +88.62841147961213 +0 +120 +absolute + + + +0.01 +smooth + +8.536510943666519 +47.349757607705584 +428.02348505651224 +17.239557685821804 +88.62527875457069 +0 +120 +absolute + + + +0.01 +smooth + +8.536511373126011 +47.3497578121449 +428.0338809359838 +17.22292823180992 +88.62212453623076 +0 +120 +absolute + + + +0.01 +smooth + +8.53651180317153 +47.34975801706134 +428.04425271012997 +17.206143014556545 +88.6189489862055 +0 +120 +absolute + + + +0.01 +smooth + +8.536512233798325 +47.34975822245276 +428.0546001140184 +17.189203408350213 +88.61575226610803 +0 +120 +absolute + + + +0.01 +smooth + +8.536512665001625 +47.34975842831704 +428.06492288271613 +17.17211078747945 +88.61253453755145 +0 +120 +absolute + + + +0.01 +smooth + +8.536513096776678 +47.34975863465205 +428.07522075129083 +17.15486652623281 +88.60929596214896 +0 +120 +absolute + + + +0.01 +smooth + +8.536513529118725 +47.34975884145567 +428.08549345481015 +17.13747199889883 +88.60603670151364 +0 +120 +absolute + + + +0.01 +smooth + +8.536513962023005 +47.34975904872575 +428.09574072834135 +17.119928579766054 +88.60275691725867 +0 +120 +absolute + + + +0.01 +smooth + +8.536514395484753 +47.34975925646017 +428.10596230695165 +17.102237643123004 +88.59945677099711 +0 +120 +absolute + + + +0.01 +smooth + +8.536514829499215 +47.34975946465679 +428.11615792570876 +17.08440056325823 +88.59613642434213 +0 +120 +absolute + + + +0.01 +smooth + +8.536515264061634 +47.34975967331352 +428.1263273196803 +17.066418714460283 +88.59279603890688 +0 +120 +absolute + + + +0.01 +smooth + +8.536515699167248 +47.349759882428195 +428.13647022393354 +17.04829347101769 +88.58943577630447 +0 +120 +absolute + + + +0.01 +smooth + +8.536516134811293 +47.349760091998675 +428.1465863735357 +17.030026207218985 +88.586055798148 +0 +120 +absolute + + + +0.01 +smooth + +8.536516570989015 +47.34976030202285 +428.1566755035545 +17.01161829735272 +88.58265626605062 +0 +120 +absolute + + + +0.01 +smooth + +8.536517007695657 +47.3497605124986 +428.1667373490575 +16.99307111570743 +88.57923734162553 +0 +120 +absolute + + + +0.01 +smooth + +8.536517444926455 +47.34976072342378 +428.1767716451119 +16.974386036571655 +88.57579918648578 +0 +120 +absolute + + + +0.01 +smooth + +8.536517882676646 +47.349760934796244 +428.18677812678516 +16.955564434233928 +88.57234196224451 +0 +120 +absolute + + + +0.01 +smooth + +8.536518320941477 +47.34976114661388 +428.1967565291448 +16.936607682982793 +88.56886583051484 +0 +120 +absolute + + + +0.01 +smooth + +8.53651875971619 +47.34976135887457 +428.2067065872585 +16.917517157106804 +88.56537095290999 +0 +120 +absolute + + + +0.01 +smooth + +8.536519198996018 +47.34976157157618 +428.2166280361934 +16.898294230894482 +88.56185749104299 +0 +120 +absolute + + + +0.01 +smooth + +8.536519638776207 +47.349761784716556 +428.226520611017 +16.878940278634367 +88.558325606527 +0 +120 +absolute + + + +0.01 +smooth + +8.536520079051993 +47.34976199829359 +428.2363840467968 +16.859456674615004 +88.55477546097515 +0 +120 +absolute + + + +0.01 +smooth + +8.536520519818623 +47.34976221230516 +428.24621807860035 +16.83984479312494 +88.55120721600062 +0 +120 +absolute + + + +0.01 +smooth + +8.536520961071336 +47.34976242674911 +428.2560224414951 +16.820106008452704 +88.54762103321647 +0 +120 +absolute + + + +0.01 +smooth + +8.53652140280537 +47.34976264162332 +428.2657968705482 +16.800241694886832 +88.54401707423585 +0 +120 +absolute + + + +0.01 +smooth + +8.536521845015963 +47.349762856925665 +428.27554110082735 +16.780253226715875 +88.54039550067189 +0 +120 +absolute + + + +0.01 +smooth + +8.536522287698363 +47.34976307265402 +428.28525486740006 +16.760141978228372 +88.53675647413779 +0 +120 +absolute + + + +0.01 +smooth + +8.536522730847807 +47.34976328880626 +428.29493790533377 +16.739909323712855 +88.53310015624659 +0 +120 +absolute + + + +0.01 +smooth + +8.536523174459528 +47.349763505380224 +428.30458994969564 +16.719556637457863 +88.52942670861144 +0 +120 +absolute + + + +0.01 +smooth + +8.53652361852878 +47.349763722373794 +428.31421073555333 +16.699085293751946 +88.52573629284547 +0 +120 +absolute + + + +0.01 +smooth + +8.536524063050795 +47.34976393978488 +428.32379999797456 +16.678496666883632 +88.52202907056186 +0 +120 +absolute + + + +0.01 +smooth + +8.536524508020817 +47.349764157611304 +428.33335747202636 +16.657792131141466 +88.5183052033737 +0 +120 +absolute + + + +0.01 +smooth + +8.536524953434085 +47.34976437585095 +428.3428828927763 +16.636973060813986 +88.5145648528941 +0 +120 +absolute + + + +0.01 +smooth + +8.53652539928584 +47.3497645945017 +428.35237599529194 +16.616040830189736 +88.51080818073623 +0 +120 +absolute + + + +0.01 +smooth + +8.536525845571322 +47.3497648135614 +428.3618365146407 +16.59499681355725 +88.50703534851321 +0 +120 +absolute + + + +0.01 +smooth + +8.536526292285773 +47.34976503302795 +428.37126418588986 +16.57384238520507 +88.50324651783816 +0 +120 +absolute + + + +0.01 +smooth + +8.536526739424431 +47.349765252899196 +428.3806587441072 +16.552578919421734 +88.49944185032422 +0 +120 +absolute + + + +0.01 +smooth + +8.53652718698254 +47.34976547317302 +428.3900199243598 +16.531207790495788 +88.49562150758453 +0 +120 +absolute + + + +0.01 +smooth + +8.536527634955336 +47.3497656938473 +428.3993474617154 +16.50973037271576 +88.4917856512322 +0 +120 +absolute + + + +0.01 +smooth + +8.536528083338064 +47.349765914919885 +428.4086410912414 +16.488148040370202 +88.48793444288037 +0 +120 +absolute + + + +0.01 +smooth + +8.536528532125963 +47.34976613638865 +428.41790054800515 +16.466462167747643 +88.48406804414219 +0 +120 +absolute + + + +0.01 +smooth + +8.536528981314273 +47.349766358251486 +428.4271255670741 +16.44467412913663 +88.48018661663076 +0 +120 +absolute + + + +0.01 +smooth + +8.536529430898236 +47.34976658050624 +428.4363158835157 +16.4227852988257 +88.47629032195923 +0 +120 +absolute + + + +0.01 +smooth + +8.536529880873092 +47.3497668031508 +428.4454712323976 +16.40079705110339 +88.4723793217407 +0 +120 +absolute + + + +0.01 +smooth + +8.536530331234077 +47.349767026183024 +428.45459134878706 +16.378710760258244 +88.46845377758835 +0 +120 +absolute + + + +0.01 +smooth + +8.536530781976438 +47.349767249600774 +428.46367596775156 +16.3565278005788 +88.46451385111527 +0 +120 +absolute + + + +0.01 +smooth + +8.536531233095415 +47.34976747340195 +428.4727248243586 +16.334249546353593 +88.46055970393463 +0 +120 +absolute + + + +0.01 +smooth + +8.536531684586246 +47.34976769758438 +428.4817376536756 +16.311877371871173 +88.45659149765952 +0 +120 +absolute + + + +0.01 +smooth + +8.53653213644417 +47.34976792214597 +428.49071419077006 +16.28941265142007 +88.45260939390309 +0 +120 +absolute + + + +0.01 +smooth + +8.536532588664432 +47.349768147084575 +428.4996541707093 +16.266856759288824 +88.44861355427844 +0 +120 +absolute + + + +0.01 +smooth + +8.53653304124227 +47.349768372398074 +428.508557328561 +16.24421106976598 +88.44460414039878 +0 +120 +absolute + + + +0.01 +smooth + +8.536533494172925 +47.34976859808434 +428.5174233993923 +16.221476957140077 +88.44058131387716 +0 +120 +absolute + + + +0.01 +smooth + +8.53653394745164 +47.349768824141215 +428.5262521182709 +16.19865579569965 +88.43654523632674 +0 +120 +absolute + + + +0.01 +smooth + +8.536534401073649 +47.3497690505666 +428.5350432202642 +16.175748959733244 +88.43249606936067 +0 +120 +absolute + + + +0.01 +smooth + +8.5365348550342 +47.34976927735835 +428.5437964404397 +16.152757823529395 +88.42843397459205 +0 +120 +absolute + + + +0.01 +smooth + +8.536535309328528 +47.34976950451433 +428.55251151386466 +16.12968376137664 +88.42435911363404 +0 +120 +absolute + + + +0.01 +smooth + +8.536535763951877 +47.34976973203243 +428.5611881756067 +16.106528147563523 +88.42027164809973 +0 +120 +absolute + + + +0.01 +smooth + +8.536536218899485 +47.3497699599105 +428.5698261607332 +16.083292356378585 +88.41617173960228 +0 +120 +absolute + + + +0.01 +smooth + +8.536536674166594 +47.34977018814642 +428.57842520431166 +16.05997776211036 +88.41205954975483 +0 +120 +absolute + + + +0.01 +smooth + +8.536537129748446 +47.34977041673807 +428.58698504140955 +16.036585739047393 +88.40793524017047 +0 +120 +absolute + + + +0.01 +smooth + +8.53653758564028 +47.34977064568331 +428.59550540709427 +16.01311766147822 +88.40379897246237 +0 +120 +absolute + + + +0.01 +smooth + +8.536538041837337 +47.34977087498 +428.60398603643324 +15.989574903691382 +88.39965090824366 +0 +120 +absolute + + + +0.01 +smooth + +8.536538498334856 +47.34977110462602 +428.612426664494 +15.965958839975418 +88.39549120912744 +0 +120 +absolute + + + +0.01 +smooth + +8.536538955128078 +47.34977133461925 +428.6208270263439 +15.942270844618868 +88.39132003672687 +0 +120 +absolute + + + +0.01 +smooth + +8.536539412212246 +47.34977156495755 +428.6291868570505 +15.918512291910272 +88.38713755265508 +0 +120 +absolute + + + +0.01 +smooth + +8.5365398695826 +47.34977179563879 +428.63750589168126 +15.894684556138168 +88.38294391852516 +0 +120 +absolute + + + +0.01 +smooth + +8.536540327234377 +47.34977202666083 +428.64578386530354 +15.870789011591098 +88.37873929595031 +0 +120 +absolute + + + +0.01 +smooth + +8.53654078516282 +47.34977225802156 +428.65402051298486 +15.8468270325576 +88.37452384654358 +0 +120 +absolute + + + +0.01 +smooth + +8.536541243363171 +47.34977248971884 +428.6622155697926 +15.82279999332621 +88.37029773191817 +0 +120 +absolute + + + +0.01 +smooth + +8.536541701830668 +47.349772721750526 +428.67036877079425 +15.798709268185476 +88.3660611136872 +0 +120 +absolute + + + +0.01 +smooth + +8.536542160605384 +47.349772954142416 +428.67848358706897 +15.774537724673822 +88.36181194403177 +0 +120 +absolute + + + +0.01 +smooth + +8.536542619890765 +47.34977318702186 +428.68657710029856 +15.750200719500626 +88.35754011965726 +0 +120 +absolute + + + +0.01 +smooth + +8.536543079708345 +47.349773420403054 +428.6946512257207 +15.725688616030117 +88.3532444978604 +0 +120 +absolute + + + +0.01 +smooth + +8.536543540053431 +47.349773654283794 +428.7027056936989 +15.70100259381849 +88.34892522756135 +0 +120 +absolute + + + +0.01 +smooth + +8.53654400092134 +47.34977388866196 +428.71074023459664 +15.676143832421962 +88.34458245768033 +0 +120 +absolute + + + +0.01 +smooth + +8.53654446230739 +47.34977412353536 +428.7187545787778 +15.651113511396739 +88.34021633713756 +0 +120 +absolute + + + +0.01 +smooth + +8.536544924206899 +47.34977435890188 +428.7267484566061 +15.625912810299042 +88.33582701485325 +0 +120 +absolute + + + +0.01 +smooth + +8.536545386615172 +47.34977459475932 +428.734721598445 +15.600542908685066 +88.33141463974765 +0 +120 +absolute + + + +0.01 +smooth + +8.536545849527533 +47.34977483110555 +428.7426737346583 +15.575004986111022 +88.32697936074088 +0 +120 +absolute + + + +0.01 +smooth + +8.536546312939292 +47.3497750679384 +428.7506045956097 +15.54930022213313 +88.32252132675322 +0 +120 +absolute + + + +0.01 +smooth + +8.536546776845768 +47.34977530525574 +428.7585139116629 +15.523429796307596 +88.31804068670489 +0 +120 +absolute + + + +0.01 +smooth + +8.536547241242275 +47.34977554305537 +428.76640141318126 +15.497394888190623 +88.31353758951607 +0 +120 +absolute + + + +0.01 +smooth + +8.53654770612412 +47.349775781335154 +428.7742668305287 +15.471196677338424 +88.30901218410699 +0 +120 +absolute + + + +0.01 +smooth + +8.536548171486627 +47.34977602009294 +428.7821098940688 +15.444836343307212 +88.30446461939783 +0 +120 +absolute + + + +0.01 +smooth + +8.536548637325113 +47.349776259326575 +428.7899303341655 +15.418315065653204 +88.29989504430887 +0 +120 +absolute + + + +0.01 +smooth + +8.536549103634886 +47.349776499033894 +428.797727881182 +15.391634023932589 +88.29530360776025 +0 +120 +absolute + + + +0.01 +smooth + +8.53654957041126 +47.34977673921273 +428.80550226548223 +15.364794397701594 +88.2906904586722 +0 +120 +absolute + + + +0.01 +smooth + +8.536550037649562 +47.349776979860934 +428.81325321742986 +15.337797366516423 +88.286055745965 +0 +120 +absolute + + + +0.01 +smooth + +8.536550505345092 +47.34977722097635 +428.8209804673885 +15.310644109933284 +88.28139961855875 +0 +120 +absolute + + + +0.01 +smooth + +8.53655097349317 +47.34977746255682 +428.8286837457217 +15.283335807508388 +88.27672222537372 +0 +120 +absolute + + + +0.01 +smooth + +8.536551442089118 +47.3497777046002 +428.83636278279334 +15.255873638797944 +88.27202371533014 +0 +120 +absolute + + + +0.01 +smooth + +8.536551911128242 +47.3497779471043 +428.84401730896684 +15.228258783358164 +88.26730423734818 +0 +120 +absolute + + + +0.01 +smooth + +8.536552380605865 +47.349778190067006 +428.8516470546063 +15.200492420745263 +88.26256394034813 +0 +120 +absolute + + + +0.01 +smooth + +8.53655285051729 +47.34977843348612 +428.8592517500749 +15.172575730515439 +88.25780297325008 +0 +120 +absolute + + + +0.01 +smooth + +8.536553320857845 +47.34977867735952 +428.8668311257366 +15.144509892224907 +88.25302148497433 +0 +120 +absolute + + + +0.01 +smooth + +8.53655379162284 +47.34977892168503 +428.874384911955 +15.116296085429878 +88.24821962444109 +0 +120 +absolute + + + +0.01 +smooth + +8.536554262807584 +47.34977916646048 +428.88191283909345 +15.087935489686556 +88.24339754057051 +0 +120 +absolute + + + +0.01 +smooth + +8.536554734407401 +47.34977941168375 +428.88941463751615 +15.059429284551161 +88.23855538228288 +0 +120 +absolute + + + +0.01 +smooth + +8.536555206417605 +47.34977965735265 +428.89689003758645 +15.0307786495799 +88.23369329849837 +0 +120 +absolute + + + +0.01 +smooth + +8.536555678833503 +47.349779903465034 +428.904338769668 +15.001984764328972 +88.22881143813717 +0 +120 +absolute + + + +0.01 +smooth + +8.536556151650423 +47.34978015001876 +428.9117605641247 +14.973048808354605 +88.22390995011958 +0 +120 +absolute + + + +0.01 +smooth + +8.536556624863664 +47.349780397011635 +428.9191551513199 +14.94397196121299 +88.21898898336569 +0 +120 +absolute + + + +0.01 +smooth + +8.536557098468554 +47.34978064444153 +428.9265222616175 +14.914755402460345 +88.2140486867958 +0 +120 +absolute + + + +0.01 +smooth + +8.536557572460405 +47.34978089230629 +428.9338616253811 +14.885400311652885 +88.20908920933012 +0 +120 +absolute + + + +0.01 +smooth + +8.536558046834525 +47.34978114060374 +428.94117297297424 +14.855907868346808 +88.20411069988879 +0 +120 +absolute + + + +0.01 +smooth + +8.536558521586237 +47.34978138933173 +428.94845603476074 +14.826279252098333 +88.1991133073921 +0 +120 +absolute + + + +0.01 +smooth + +8.536558996710855 +47.34978163848813 +428.95571054110434 +14.79651564246367 +88.19409718076022 +0 +120 +absolute + + + +0.01 +smooth + +8.536559472203688 +47.34978188807072 +428.9629362223682 +14.76661821899902 +88.18906246891336 +0 +120 +absolute + + + +0.01 +smooth + +8.536559948060061 +47.3497821380774 +428.97013280891673 +14.736588161260602 +88.18400932077178 +0 +120 +absolute + + + +0.01 +smooth + +8.53656042427528 +47.349782388506 +428.9773000311131 +14.706426648804621 +88.17893788525566 +0 +120 +absolute + + + +0.01 +smooth + +8.536560900844664 +47.34978263935435 +428.984437619321 +14.67613486118729 +88.17384831128518 +0 +120 +absolute + + + +0.01 +smooth + +8.536561377763526 +47.349782890620304 +428.99154530390433 +14.645713977964817 +88.16874074778062 +0 +120 +absolute + + + +0.01 +smooth + +8.536561855027184 +47.34978314230169 +428.99862281522667 +14.615165178693408 +88.16361534366212 +0 +120 +absolute + + + +0.01 +smooth + +8.53656233263095 +47.34978339439638 +429.00566988365154 +14.584489642929277 +88.15847224784996 +0 +120 +absolute + + + +0.01 +smooth + +8.53656281057014 +47.34978364690219 +429.01268623954263 +14.553688550228634 +88.15331160926429 +0 +120 +absolute + + + +0.01 +smooth + +8.536563288840071 +47.34978389981696 +429.01967161326365 +14.522763080147687 +88.14813357682536 +0 +120 +absolute + + + +0.01 +smooth + +8.536563767436057 +47.349784153138565 +429.0266257351785 +14.491714412242647 +88.14293829945336 +0 +120 +absolute + + + +0.01 +smooth + +8.53656424635341 +47.34978440686482 +429.0335483356505 +14.46054372606972 +88.13772592606854 +0 +120 +absolute + + + +0.01 +smooth + +8.536564725587448 +47.34978466099357 +429.0404391450434 +14.429252201185124 +88.13249660559107 +0 +120 +absolute + + + +0.01 +smooth + +8.536565205133485 +47.34978491552267 +429.0472978937209 +14.397841017145058 +88.1272504869412 +0 +120 +absolute + + + +0.01 +smooth + +8.536565684986837 +47.34978517044995 +429.0541243120468 +14.36631135350574 +88.1219877190391 +0 +120 +absolute + + + +0.01 +smooth + +8.536566165142816 +47.34978542577327 +429.0609181303845 +14.334664389823375 +88.116708450805 +0 +120 +absolute + + + +0.01 +smooth + +8.53656664559674 +47.34978568149045 +429.06767907909784 +14.302901305654176 +88.11141283115911 +0 +120 +absolute + + + +0.01 +smooth + +8.536567126343924 +47.34978593759935 +429.07440688855047 +14.271023280554353 +88.10610100902167 +0 +120 +absolute + + + +0.01 +smooth + +8.536567607379682 +47.34978619409781 +429.081101289106 +14.239031494080109 +88.10077313331286 +0 +120 +absolute + + + +0.01 +smooth + +8.53656808869933 +47.34978645098367 +429.0877620111281 +14.206927125787665 +88.09542935295292 +0 +120 +absolute + + + +0.01 +smooth + +8.53656857029818 +47.349786708254776 +429.09438878498054 +14.174711355233221 +88.09006981686201 +0 +120 +absolute + + + +0.01 +smooth + +8.53656905217155 +47.349786965908976 +429.1009813410268 +14.142385361972991 +88.0846946739604 +0 +120 +absolute + + + +0.01 +smooth + +8.536569534314754 +47.34978722394409 +429.1075394096307 +14.109950325563187 +88.07930407316826 +0 +120 +absolute + + + +0.01 +smooth + +8.536570016723108 +47.34978748235799 +429.11406272115585 +14.077407425560011 +88.07389816340583 +0 +120 +absolute + + + +0.01 +smooth + +8.536570499391924 +47.3497877411485 +429.1205510059659 +14.044757841519683 +88.06847709359332 +0 +120 +absolute + + + +0.01 +smooth + +8.53657098231652 +47.34978800031347 +429.12700399442446 +14.012002752998406 +88.06304101265093 +0 +120 +absolute + + + +0.01 +smooth + +8.536571465492212 +47.34978825985074 +429.1334214168954 +13.979143339552389 +88.05759006949887 +0 +120 +absolute + + + +0.01 +smooth + +8.536571948914311 +47.34978851975816 +429.13980300374214 +13.94618078073784 +88.05212441305736 +0 +120 +absolute + + + +0.01 +smooth + +8.536572432578133 +47.34978878003356 +429.14614848532847 +13.913116256110976 +88.0466441922466 +0 +120 +absolute + + + +0.01 +smooth + +8.536572916478995 +47.34978904067481 +429.15245759201804 +13.879950945228003 +88.04114955598682 +0 +120 +absolute + + + +0.01 +smooth + +8.53657340061221 +47.349789301679714 +429.1587300541745 +13.84668602764513 +88.03564065319823 +0 +120 +absolute + + + +0.01 +smooth + +8.536573884973098 +47.34978956304613 +429.16496560216154 +13.813322682918567 +88.03011763280102 +0 +120 +absolute + + + +0.01 +smooth + +8.536574369556966 +47.349789824771925 +429.17116396634276 +13.779862090604524 +88.02458064371544 +0 +120 +absolute + + + +0.01 +smooth + +8.536574854359134 +47.34979008685491 +429.17732487708196 +13.746305430259214 +88.01902983486167 +0 +120 +absolute + + + +0.01 +smooth + +8.536575339374917 +47.349790349292945 +429.18344806474266 +13.712653881438841 +88.01346535515991 +0 +120 +absolute + + + +0.01 +smooth + +8.536575824599627 +47.34979061208387 +429.18953325968863 +13.678908623699618 +88.00788735353042 +0 +120 +absolute + + + +0.01 +smooth + +8.536576310028583 +47.34979087522552 +429.1955801922834 +13.645070836597753 +88.00229597889339 +0 +120 +absolute + + + +0.01 +smooth + +8.536576795657096 +47.34979113871575 +429.2015885928907 +13.611141699689458 +87.99669138016901 +0 +120 +absolute + + + +0.01 +smooth + +8.536577281480483 +47.349791402552405 +429.2075581918743 +13.577122392530942 +87.99107370627752 +0 +120 +absolute + + + +0.01 +smooth + +8.53657776749406 +47.34979166673331 +429.21348871959776 +13.543014094678414 +87.98544310613912 +0 +120 +absolute + + + +0.01 +smooth + +8.536578253693142 +47.34979193125631 +429.21937990642476 +13.508817985688086 +87.97979972867401 +0 +120 +absolute + + + +0.01 +smooth + +8.53657874007304 +47.349792196119274 +429.2252314827189 +13.474535245116163 +87.97414372280244 +0 +120 +absolute + + + +0.01 +smooth + +8.536579226629073 +47.349792461320014 +429.231043178844 +13.440167052518857 +87.96847523744461 +0 +120 +absolute + + + +0.01 +smooth + +8.536579713356554 +47.3497927268564 +429.2368147251635 +13.405714587452382 +87.96279442152068 +0 +120 +absolute + + + +0.01 +smooth + +8.536580200324513 +47.34979299277337 +429.242553049438 +13.371150528512203 +87.9570979134296 +0 +120 +absolute + + + +0.01 +smooth + +8.536580687708476 +47.34979325918394 +429.2482754621403 +13.336406339864913 +87.95137727803663 +0 +120 +absolute + + + +0.01 +smooth + +8.536581175512017 +47.34979352609118 +429.25398246712035 +13.301479944383615 +87.94563226881345 +0 +120 +absolute + + + +0.01 +smooth + +8.53658166373051 +47.34979379349287 +429.25967376824025 +13.266372430768376 +87.93986302923287 +0 +120 +absolute + + + +0.01 +smooth + +8.536582152359346 +47.34979406138683 +429.2653490693631 +13.231084887719302 +87.93406970276762 +0 +120 +absolute + + + +0.01 +smooth + +8.536582641393894 +47.34979432977086 +429.27100807435113 +13.195618403936459 +87.92825243289053 +0 +120 +absolute + + + +0.01 +smooth + +8.536583130829541 +47.349794598642774 +429.27665048706746 +13.159974068119954 +87.92241136307442 +0 +120 +absolute + + + +0.01 +smooth + +8.536583620661661 +47.34979486800035 +429.2822760113743 +13.124152968969861 +87.91654663679209 +0 +120 +absolute + + + +0.01 +smooth + +8.536584110885638 +47.349795137841454 +429.2878843511347 +13.088156195186274 +87.9106583975163 +0 +120 +absolute + + + +0.01 +smooth + +8.536584601496847 +47.34979540816385 +429.2934752102109 +13.051984835469275 +87.90474678871986 +0 +120 +absolute + + + +0.01 +smooth + +8.536585092490677 +47.34979567896536 +429.29904829246595 +13.015639978518958 +87.89881195387562 +0 +120 +absolute + + + +0.01 +smooth + +8.536585583862498 +47.349795950243774 +429.3046033017623 +12.979122713035398 +87.89285403645633 +0 +120 +absolute + + + +0.01 +smooth + +8.536586075607696 +47.349796221996925 +429.3101399419627 +12.942434127718698 +87.88687317993481 +0 +120 +absolute + + + +0.01 +smooth + +8.536586567721647 +47.3497964942226 +429.31565791692947 +12.905575311268933 +87.88086952778382 +0 +120 +absolute + + + +0.01 +smooth + +8.536587060199736 +47.34979676691863 +429.3211569305258 +12.868547352386196 +87.87484322347622 +0 +120 +absolute + + + +0.01 +smooth + +8.536587553037336 +47.34979704008279 +429.3266366866138 +12.831351339770567 +87.86879441048477 +0 +120 +absolute + + + +0.01 +smooth + +8.536588046229834 +47.34979731371292 +429.33209688905646 +12.79398836212214 +87.86272323228228 +0 +120 +absolute + + + +0.01 +smooth + +8.536588539772604 +47.34979758780679 +429.33753724171635 +12.756459508140999 +87.85662983234151 +0 +120 +absolute + + + +0.01 +smooth + +8.53658903366103 +47.34979786236226 +429.3429574484563 +12.718765866527233 +87.85051435413537 +0 +120 +absolute + + + +0.01 +smooth + +8.536589527890486 +47.349798137377086 +429.34835721313857 +12.680908525980927 +87.84437694113653 +0 +120 +absolute + + + +0.01 +smooth + +8.536590022456359 +47.34979841284908 +429.35373623962596 +12.642888575202164 +87.83821773681785 +0 +120 +absolute + + + +0.01 +smooth + +8.536590517354028 +47.3497986887761 +429.35909423178146 +12.604707102891043 +87.83203688465214 +0 +120 +absolute + + + +0.01 +smooth + +8.53659101257887 +47.34979896515591 +429.3644308934672 +12.566365197747642 +87.82583452811218 +0 +120 +absolute + + + +0.01 +smooth + +8.536591508126262 +47.34979924198631 +429.36974592854614 +12.527863948472048 +87.81961081067075 +0 +120 +absolute + + + +0.01 +smooth + +8.53659200399159 +47.34979951926513 +429.3750390408808 +12.489204443764345 +87.81336587580068 +0 +120 +absolute + + + +0.01 +smooth + +8.536592500170231 +47.34979979699018 +429.3803099343339 +12.450387772324628 +87.80709986697477 +0 +120 +absolute + + + +0.01 +smooth + +8.536592996657566 +47.34980007515925 +429.3855583127683 +12.411415022852989 +87.80081292766582 +0 +120 +absolute + + + +0.01 +smooth + +8.536593493448976 +47.34980035377018 +429.3907838800463 +12.372287284049499 +87.79450520134662 +0 +120 +absolute + + + +0.01 +smooth + +8.536593990539835 +47.349800632820724 +429.3959863400306 +12.333005644614248 +87.78817683148993 +0 +120 +absolute + + + +0.01 +smooth + +8.536594487925525 +47.349800912308716 +429.40116539658385 +12.293571193247335 +87.78182796156861 +0 +120 +absolute + + + +0.01 +smooth + +8.536594985601434 +47.34980119223199 +429.4063207535691 +12.253985018648835 +87.77545873505545 +0 +120 +absolute + + + +0.01 +smooth + +8.536595483562932 +47.34980147258832 +429.41145211484854 +12.214248209518843 +87.76906929542322 +0 +120 +absolute + + + +0.01 +smooth + +8.536595981805402 +47.349801753375516 +429.4165591842849 +12.17436185455744 +87.76265978614472 +0 +120 +absolute + + + +0.01 +smooth + +8.536596480324222 +47.34980203459139 +429.4216416657409 +12.134327042464713 +87.75623035069277 +0 +120 +absolute + + + +0.01 +smooth + +8.53659697911478 +47.34980231623376 +429.4266992630793 +12.094144861940759 +87.74978113254018 +0 +120 +absolute + + + +0.01 +smooth + +8.536597478172448 +47.34980259830043 +429.4317316801626 +12.053816401685657 +87.74331227515974 +0 +120 +absolute + + + +0.01 +smooth + +8.536597977492605 +47.349802880789184 +429.4367386208534 +12.013342750399486 +87.7368239220242 +0 +120 +absolute + + + +0.01 +smooth + +8.536598477070633 +47.34980316369786 +429.4417197890145 +11.972724996782345 +87.73031621660641 +0 +120 +absolute + + + +0.01 +smooth + +8.536598976901917 +47.349803447024264 +429.4466748885085 +11.93196422953432 +87.72378930237919 +0 +120 +absolute + + + +0.01 +smooth + +8.53659947698183 +47.34980373076619 +429.45160362319814 +11.891061537355498 +87.71724332281529 +0 +120 +absolute + + + +0.01 +smooth + +8.536599977305753 +47.34980401492143 +429.4565056969458 +11.85001800894596 +87.71067842138753 +0 +120 +absolute + + + +0.01 +smooth + +8.536600477869069 +47.34980429948782 +429.4613808136144 +11.808834733005794 +87.70409474156868 +0 +120 +absolute + + + +0.01 +smooth + +8.536600978667156 +47.34980458446316 +429.4662286770665 +11.767512798235094 +87.6974924268316 +0 +120 +absolute + + + +0.01 +smooth + +8.536601479695394 +47.34980486984526 +429.4710489911647 +11.726053293333939 +87.69087162064902 +0 +120 +absolute + + + +0.01 +smooth + +8.536601980949163 +47.3498051556319 +429.47584145977174 +11.684457307002424 +87.68423246649381 +0 +120 +absolute + + + +0.01 +smooth + +8.536602482423842 +47.349805441820926 +429.4806057867502 +11.642725927940624 +87.67757510783872 +0 +120 +absolute + + + +0.01 +smooth + +8.536602984114811 +47.34980572841012 +429.48534167596284 +11.60086024484864 +87.67089968815655 +0 +120 +absolute + + + +0.01 +smooth + +8.536603486017452 +47.34980601539731 +429.49004883127213 +11.55886134642655 +87.66420635092011 +0 +120 +absolute + + + +0.01 +smooth + +8.53660398812714 +47.34980630278029 +429.4947269565409 +11.516730321374444 +87.65749523960223 +0 +120 +absolute + + + +0.01 +smooth + +8.536604490439261 +47.34980659055686 +429.49937575563166 +11.47446825839241 +87.65076649767565 +0 +120 +absolute + + + +0.01 +smooth + +8.53660499294919 +47.349806878724834 +429.5039949324072 +11.432076246180532 +87.64402026861322 +0 +120 +absolute + + + +0.01 +smooth + +8.53660549565231 +47.34980716728204 +429.50858419073 +11.389555373438897 +87.63725669588769 +0 +120 +absolute + + + +0.01 +smooth + +8.536605998544 +47.34980745622625 +429.51314323446286 +11.346906728867596 +87.63047592297191 +0 +120 +absolute + + + +0.01 +smooth + +8.536606501619639 +47.34980774555528 +429.51767176746836 +11.304131401166714 +87.62367809333864 +0 +120 +absolute + + + +0.01 +smooth + +8.536607004874607 +47.349808035266975 +429.5221694936091 +11.261230479036334 +87.6168633504607 +0 +120 +absolute + + + +0.01 +smooth + +8.536607508304284 +47.34980832535909 +429.5266361167479 +11.218205051176547 +87.6100318378109 +0 +120 +absolute + + + +0.01 +smooth + +8.53660801190405 +47.34980861582946 +429.5310713407473 +11.175056206287444 +87.603183698862 +0 +120 +absolute + + + +0.01 +smooth + +8.536608515669288 +47.3498089066759 +429.5354748694699 +11.131785033069102 +87.59631907708683 +0 +120 +absolute + + + +0.01 +smooth + +8.536609019595371 +47.34980919789619 +429.5398464067785 +11.088392620221615 +87.58943811595819 +0 +120 +absolute + + + +0.01 +smooth + +8.536609523677685 +47.349809489488166 +429.54418565653555 +11.04488005644507 +87.58254095894887 +0 +120 +absolute + + + +0.01 +smooth + +8.536610027911607 +47.349809781449615 +429.5484923226039 +11.001248430439553 +87.57562774953166 +0 +120 +absolute + + + +0.01 +smooth + +8.536610532292517 +47.34981007377834 +429.5527661088461 +10.957498830905148 +87.56869863117936 +0 +120 +absolute + + + +0.01 +smooth + +8.536611036815795 +47.349810366472184 +429.5570067191248 +10.913632346541945 +87.5617537473648 +0 +120 +absolute + + + +0.01 +smooth + +8.536611541476823 +47.34981065952891 +429.5612138573026 +10.869650066050031 +87.55479324156076 +0 +120 +absolute + + + +0.01 +smooth + +8.536612046270978 +47.349810952946356 +429.56538722724224 +10.825553078129492 +87.54781725724001 +0 +120 +absolute + + + +0.01 +smooth + +8.536612551193642 +47.349811246722325 +429.56952653280644 +10.781342471480414 +87.5408259378754 +0 +120 +absolute + + + +0.01 +smooth + +8.53661305624019 +47.34981154085461 +429.5736314778577 +10.737019334802888 +87.5338194269397 +0 +120 +absolute + + + +0.01 +smooth + +8.536613561406009 +47.34981183534103 +429.57770176625877 +10.692584756796998 +87.52679786790571 +0 +120 +absolute + + + +0.01 +smooth + +8.536614066686475 +47.34981213017939 +429.58173710187225 +10.64803982616283 +87.51976140424624 +0 +120 +absolute + + + +0.01 +smooth + +8.536614572076967 +47.34981242536749 +429.5857371885607 +10.603385631600474 +87.51271017943407 +0 +120 +absolute + + + +0.01 +smooth + +8.536615077572868 +47.34981272090315 +429.5897017301869 +10.558623261810016 +87.50564433694201 +0 +120 +absolute + + + +0.01 +smooth + +8.536615583169555 +47.34981301678417 +429.59363043061353 +10.51375380549154 +87.49856402024288 +0 +120 +absolute + + + +0.01 +smooth + +8.53661608886241 +47.34981331300837 +429.59752299370325 +10.468778351345136 +87.49146937280943 +0 +120 +absolute + + + +0.01 +smooth + +8.53661659464681 +47.34981360957352 +429.6013791233185 +10.423697988070893 +87.48436053811452 +0 +120 +absolute + + + +0.01 +smooth + +8.536617100518137 +47.34981390647748 +429.6051985233221 +10.37851380436889 +87.47723765963089 +0 +120 +absolute + + + +0.01 +smooth + +8.536617606471772 +47.34981420371802 +429.6089808975767 +10.333226888939224 +87.47010088083138 +0 +120 +absolute + + + +0.01 +smooth + +8.536618112503092 +47.34981450129296 +429.61272594994495 +10.287838330481978 +87.46295034518879 +0 +120 +absolute + + + +0.01 +smooth + +8.53661861860748 +47.34981479920011 +429.61643338428945 +10.242349217697235 +87.45578619617588 +0 +120 +absolute + + + +0.01 +smooth + +8.536619124780314 +47.34981509743727 +429.62010290447284 +10.196760639285086 +87.44860857726547 +0 +120 +absolute + + + +0.01 +smooth + +8.536619631016974 +47.349815396002256 +429.6237342143578 +10.15107368394562 +87.44141763193039 +0 +120 +absolute + + + +0.01 +smooth + +8.536620137421794 +47.34981569496326 +429.62734019098616 +10.105249182006704 +87.43420847764556 +0 +120 +absolute + + + +0.01 +smooth + +8.536620644130826 +47.34981599440897 +429.6309374924571 +10.059236229301373 +87.42697476932075 +0 +120 +absolute + + + +0.01 +smooth + +8.536621151140046 +47.34981629433751 +429.6345258097735 +10.013035666297222 +87.41971662330567 +0 +120 +absolute + + + +0.01 +smooth + +8.536621658444878 +47.34981659474663 +429.6381047666679 +9.96664853882996 +87.41243418159169 +0 +120 +absolute + + + +0.01 +smooth + +8.536622166040727 +47.34981689563407 +429.64167398687323 +9.92007589273527 +87.40512758617011 +0 +120 +absolute + + + +0.01 +smooth + +8.536622673923027 +47.34981719699764 +429.6452330941228 +9.873318773848863 +87.39779697903236 +0 +120 +absolute + + + +0.01 +smooth + +8.536623182087194 +47.34981749883509 +429.64878171214934 +9.826378228006451 +87.39044250216988 +0 +120 +absolute + + + +0.01 +smooth + +8.53662369052865 +47.34981780114419 +429.65231946468595 +9.779255301043728 +87.38306429757397 +0 +120 +absolute + + + +0.01 +smooth + +8.536624199242807 +47.34981810392269 +429.65584597546535 +9.731951038796394 +87.37566250723597 +0 +120 +absolute + + + +0.01 +smooth + +8.53662470822509 +47.34981840716837 +429.65936086822074 +9.684466487100158 +87.36823727314736 +0 +120 +absolute + + + +0.01 +smooth + +8.536625217470922 +47.34981871087898 +429.6628637666849 +9.636802691790717 +87.36078873729947 +0 +120 +absolute + + + +0.01 +smooth + +8.536625726975721 +47.349819015052304 +429.66635429459103 +9.58896069870378 +87.35331704168367 +0 +120 +absolute + + + +0.01 +smooth + +8.536626236734902 +47.34981931968607 +429.6698320756718 +9.540941553675042 +87.34582232829132 +0 +120 +absolute + + + +0.01 +smooth + +8.536626746743886 +47.34981962477807 +429.6732967336604 +9.492746302540207 +87.33830473911382 +0 +120 +absolute + + + +0.01 +smooth + +8.536627256998102 +47.349819930326085 +429.6767478922897 +9.444375991134985 +87.3307644161426 +0 +120 +absolute + + + +0.01 +smooth + +8.536627767492961 +47.349820236327865 +429.6801851752928 +9.395831665295074 +87.32320150136897 +0 +120 +absolute + + + +0.01 +smooth + +8.536628278223882 +47.34982054278116 +429.6836082064023 +9.347114370856163 +87.31561613678431 +0 +120 +absolute + + + +0.01 +smooth + +8.53662878918629 +47.34982084968374 +429.6870166093514 +9.298225153653975 +87.30800846438001 +0 +120 +absolute + + + +0.01 +smooth + +8.536629300375603 +47.34982115703339 +429.6904100078733 +9.249165059524204 +87.30037862614749 +0 +120 +absolute + + + +0.01 +smooth + +8.536629811787241 +47.34982146482786 +429.69378802570077 +9.199935134302553 +87.29272676407807 +0 +120 +absolute + + + +0.01 +smooth + +8.536630323416622 +47.3498217730649 +429.69715028656645 +9.150536423824718 +87.28505302016312 +0 +120 +absolute + + + +0.01 +smooth + +8.536630835259167 +47.349822081742296 +429.70049641420366 +9.100969973926407 +87.27735753639404 +0 +120 +absolute + + + +0.01 +smooth + +8.536631347310298 +47.34982239085783 +429.7038260323453 +9.05123683044333 +87.26964045476224 +0 +120 +absolute + + + +0.01 +smooth + +8.536631859565434 +47.349822700409234 +429.70713876472445 +9.001338039211175 +87.2619019172591 +0 +120 +absolute + + + +0.01 +smooth + +8.536632372019993 +47.34982301039427 +429.71043423507365 +8.951274646065652 +87.25414206587591 +0 +120 +absolute + + + +0.01 +smooth + +8.536632884669391 +47.34982332081072 +429.7137120671263 +8.901047696842461 +87.24636104260411 +0 +120 +absolute + + + +0.01 +smooth + +8.536633397509059 +47.349823631656356 +429.7169718846153 +8.85065823737731 +87.2385589894351 +0 +120 +absolute + + + +0.01 +smooth + +8.536633910534409 +47.349823942928936 +429.7202133112734 +8.800107313505896 +87.23073604836024 +0 +120 +absolute + + + +0.01 +smooth + +8.536634423740859 +47.349824254626206 +429.72343597083375 +8.749395971063919 +87.22289236137087 +0 +120 +absolute + + + +0.01 +smooth + +8.536634937123832 +47.34982456674594 +429.72663948702916 +8.698525255887088 +87.2150280704584 +0 +120 +absolute + + + +0.01 +smooth + +8.536635450678753 +47.349824879285926 +429.7298234835928 +8.647496213811102 +87.20714331761421 +0 +120 +absolute + + + +0.01 +smooth + +8.536635964401036 +47.34982519224392 +429.7329875842575 +8.596309890671666 +87.1992382448297 +0 +120 +absolute + + + +0.01 +smooth + +8.5366364782861 +47.34982550561766 +429.73613141275615 +8.544967332304475 +87.19131299409617 +0 +120 +absolute + + + +0.01 +smooth + +8.536636992329367 +47.34982581940492 +429.7392545928217 +8.493469584545238 +87.18336770740504 +0 +120 +absolute + + + +0.01 +smooth + +8.536637506526256 +47.34982613360349 +429.7423567481874 +8.441817693229659 +87.17540252674773 +0 +120 +absolute + + + +0.01 +smooth + +8.536638020872191 +47.349826448211125 +429.745437502586 +8.390012704193436 +87.16741759411559 +0 +120 +absolute + + + +0.01 +smooth + +8.536638535362583 +47.349826763225565 +429.7484964797503 +8.338055663272272 +87.15941305149997 +0 +120 +absolute + + + +0.01 +smooth + +8.536639049992859 +47.34982707864461 +429.7515333034135 +8.285947616301868 +87.15138904089225 +0 +120 +absolute + + + +0.01 +smooth + +8.536639564758438 +47.349827394466004 +429.7545475973086 +8.233689609117933 +87.14334570428386 +0 +120 +absolute + + + +0.01 +smooth + +8.536640079654738 +47.34982771068751 +429.7575389851684 +8.181282687556163 +87.13528318366613 +0 +120 +absolute + + + +0.01 +smooth + +8.536640594677179 +47.3498280273069 +429.7605070907259 +8.128727897452261 +87.12720162103045 +0 +120 +absolute + + + +0.01 +smooth + +8.536641109821183 +47.349828344321956 +429.7634515377142 +8.076026284641932 +87.1191011583682 +0 +120 +absolute + + + +0.01 +smooth + +8.536641625082169 +47.34982866173041 +429.766371949866 +8.023178894960875 +87.11098193767076 +0 +120 +absolute + + + +0.01 +smooth + +8.536642140455553 +47.34982897953004 +429.7692679509145 +7.970186774244796 +87.1028441009295 +0 +120 +absolute + + + +0.01 +smooth + +8.53664265593676 +47.34982929771862 +429.77213916459266 +7.917050968329396 +87.0946877901358 +0 +120 +absolute + + + +0.01 +smooth + +8.536643171521208 +47.3498296162939 +429.77498521463326 +7.863772523050377 +87.08651314728104 +0 +120 +absolute + + + +0.01 +smooth + +8.536643687204316 +47.34982993525366 +429.77780572476934 +7.810352484243441 +87.0783203143566 +0 +120 +absolute + + + +0.01 +smooth + +8.536644202981508 +47.34983025459565 +429.78060031873395 +7.75679189774429 +87.07010943335385 +0 +120 +absolute + + + +0.01 +smooth + +8.536644718848198 +47.34983057431765 +429.7833686202599 +7.70309180938863 +87.06188064626417 +0 +120 +absolute + + + +0.01 +smooth + +8.536645234799808 +47.34983089441741 +429.78611025308027 +7.649253265012158 +87.05363409507893 +0 +120 +absolute + + + +0.01 +smooth + +8.53664575083176 +47.3498312148927 +429.78882484092793 +7.59527731045058 +87.04536992178954 +0 +120 +absolute + + + +0.01 +smooth + +8.53664626693947 +47.3498315357413 +429.79151200753597 +7.541164991539599 +87.03708826838735 +0 +120 +absolute + + + +0.01 +smooth + +8.53664678311836 +47.349831856960954 +429.79417137663734 +7.486917354114915 +87.02878927686375 +0 +120 +absolute + + + +0.01 +smooth + +8.536647299363851 +47.34983217854944 +429.7968025719648 +7.432535444012231 +87.0204730892101 +0 +120 +absolute + + + +0.01 +smooth + +8.536647815671364 +47.349832500504505 +429.79940521725155 +7.378020307067248 +87.0121398474178 +0 +120 +absolute + + + +0.01 +smooth + +8.536648332036314 +47.349832822823934 +429.8019789362304 +7.323372989115674 +87.0037896934782 +0 +120 +absolute + + + +0.01 +smooth + +8.536648848454124 +47.349833145505485 +429.8045233526345 +7.268594535993204 +86.9954227693827 +0 +120 +absolute + + + +0.01 +smooth + +8.536649364920214 +47.34983346854693 +429.8070380901965 +7.213685993535545 +86.98703921712269 +0 +120 +absolute + + + +0.01 +smooth + +8.536649881430002 +47.34983379194602 +429.80952277264964 +7.158648407578397 +86.97863917868949 +0 +120 +absolute + + + +0.01 +smooth + +8.536650397978907 +47.34983411570052 +429.8119770237268 +7.103482823957465 +86.97022279607454 +0 +120 +absolute + + + +0.01 +smooth + +8.536650914562355 +47.3498344398082 +429.81440046716085 +7.048190288508451 +86.9617902112692 +0 +120 +absolute + + + +0.01 +smooth + +8.53665143117576 +47.34983476426683 +429.81679272668487 +6.992771847067055 +86.95334156626484 +0 +120 +absolute + + + +0.01 +smooth + +8.536651947814544 +47.349835089074176 +429.8191534260318 +6.937228545468981 +86.94487700305282 +0 +120 +absolute + + + +0.01 +smooth + +8.536652464474127 +47.34983541422798 +429.8214821889346 +6.881561429549931 +86.93639666362458 +0 +120 +absolute + + + +0.01 +smooth + +8.536652981149928 +47.34983573972603 +429.8237786391262 +6.825771545145607 +86.92790068997141 +0 +120 +absolute + + + +0.01 +smooth + +8.536653497837365 +47.349836065566095 +429.82604240033953 +6.769859938091713 +86.91938922408477 +0 +120 +absolute + + + +0.01 +smooth + +8.536654014531862 +47.349836391745924 +429.8282730963076 +6.713827654223951 +86.91086240795599 +0 +120 +absolute + + + +0.01 +smooth + +8.536654531228837 +47.34983671826329 +429.83047035076345 +6.657675739378021 +86.90232038357644 +0 +120 +absolute + + + +0.01 +smooth + +8.53665504792371 +47.349837045115954 +429.8326337874399 +6.601405239389629 +86.89376329293754 +0 +120 +absolute + + + +0.01 +smooth + +8.536655564611902 +47.349837372301685 +429.83476303007 +6.545017200094473 +86.88519127803062 +0 +120 +absolute + + + +0.01 +smooth + +8.536656081288829 +47.34983769981824 +429.8368577023867 +6.4885126673282585 +86.8766044808471 +0 +120 +absolute + + + +0.01 +smooth + +8.536656597949914 +47.349838027663395 +429.8389174281229 +6.431892686926688 +86.86800304337834 +0 +120 +absolute + + + +0.01 +smooth + +8.536657114590577 +47.34983835583491 +429.84094183101166 +6.375158304725463 +86.85938710761572 +0 +120 +absolute + + + +0.01 +smooth + +8.536657631206236 +47.34983868433055 +429.84293053478586 +6.318310566560287 +86.8507568155506 +0 +120 +absolute + + + +0.01 +smooth + +8.536658147792313 +47.34983901314806 +429.84488316317857 +6.261350518266861 +86.84211230917438 +0 +120 +absolute + + + +0.01 +smooth + +8.536658664344227 +47.34983934228524 +429.84679933992254 +6.204279205680887 +86.83345373047842 +0 +120 +absolute + + + +0.01 +smooth + +8.536659180857397 +47.34983967173984 +429.84867868875097 +6.147097674638067 +86.82478122145412 +0 +120 +absolute + + + +0.01 +smooth + +8.536659697327243 +47.34984000150962 +429.85052083339673 +6.089806970974106 +86.81609492409287 +0 +120 +absolute + + + +0.01 +smooth + +8.536660213749187 +47.349840331592354 +429.8523253975927 +6.032408140524707 +86.80739498038598 +0 +120 +absolute + + + +0.01 +smooth + +8.536660730120309 +47.34984066198685 +429.85409231201885 +5.974901645421037 +86.79868145898467 +0 +120 +absolute + + + +0.01 +smooth + +8.536661246583472 +47.349840992785005 +429.8558483280049 +5.91723680451318 +86.7899480032285 +0 +120 +absolute + + + +0.01 +smooth + +8.53666176322947 +47.34984132404539 +429.85761036552293 +5.859381186741604 +86.78119055156021 +0 +120 +absolute + + + +0.01 +smooth + +8.536662280053724 +47.34984165576578 +429.85937770350324 +5.801335820539351 +86.77240924688095 +0 +120 +absolute + + + +0.01 +smooth + +8.536662797051648 +47.34984198794385 +429.86114962087584 +5.743101734339444 +86.76360423209168 +0 +120 +absolute + + + +0.01 +smooth + +8.536663314218659 +47.349842320577324 +429.8629253965708 +5.684679956574918 +86.7547756500935 +0 +120 +absolute + + + +0.01 +smooth + +8.536663831550172 +47.34984265366394 +429.8647043095186 +5.626071515678804 +86.74592364378745 +0 +120 +absolute + + + +0.01 +smooth + +8.536664349041605 +47.34984298720142 +429.86648563864935 +5.56727744008414 +86.7370483560746 +0 +120 +absolute + + + +0.01 +smooth + +8.536664866688367 +47.34984332118747 +429.86826866289294 +5.508298758223952 +86.72814992985596 +0 +120 +absolute + + + +0.01 +smooth + +8.536665384485882 +47.349843655619814 +429.87005266117967 +5.449136498531274 +86.71922850803263 +0 +120 +absolute + + + +0.01 +smooth + +8.536665902429556 +47.349843990496154 +429.8718369124399 +5.389791689439138 +86.7102842335056 +0 +120 +absolute + + + +0.01 +smooth + +8.53666642051482 +47.34984432581427 +429.8736206956036 +5.330265359380579 +86.70131724917601 +0 +120 +absolute + + + +0.01 +smooth + +8.536666938737076 +47.3498446615718 +429.87540328960114 +5.2705585367886245 +86.69232769794483 +0 +120 +absolute + + + +0.01 +smooth + +8.536667457091747 +47.34984499776652 +429.87718397336243 +5.210672250096311 +86.68331572271316 +0 +120 +absolute + + + +0.01 +smooth + +8.536667975574249 +47.34984533439616 +429.8789620258178 +5.150607527736673 +86.67428146638204 +0 +120 +absolute + + + +0.01 +smooth + +8.536668494179992 +47.34984567145839 +429.88073672589735 +5.090365398142735 +86.6652250718525 +0 +120 +absolute + + + +0.01 +smooth + +8.536669012904394 +47.349846008950955 +429.88250735253126 +5.029946889747535 +86.6561466820256 +0 +120 +absolute + + + +0.01 +smooth + +8.536669531742875 +47.34984634687158 +429.8842731846497 +4.969353030984102 +86.64704643980241 +0 +120 +absolute + + + +0.01 +smooth + +8.536670050690848 +47.34984668521797 +429.8860335011829 +4.908584850285471 +86.63792448808398 +0 +120 +absolute + + + +0.01 +smooth + +8.536670569743732 +47.34984702398787 +429.88778758106116 +4.847643376084677 +86.62878096977137 +0 +120 +absolute + + + +0.01 +smooth + +8.536671088896938 +47.34984736317898 +429.8895347032143 +4.786529636814745 +86.6196160277656 +0 +120 +absolute + + + +0.01 +smooth + +8.536671608145884 +47.34984770278903 +429.89127414657264 +4.725244660908711 +86.61042980496775 +0 +120 +absolute + + + +0.01 +smooth + +8.536672127485986 +47.349848042815744 +429.8930051900665 +4.663789476799609 +86.60122244427886 +0 +120 +absolute + + + +0.01 +smooth + +8.536672646912658 +47.349848383256806 +429.8947271126257 +4.602165112920469 +86.59199408859995 +0 +120 +absolute + + + +0.01 +smooth + +8.53667316642132 +47.34984872410998 +429.89643919318087 +4.540372597704323 +86.58274488083211 +0 +120 +absolute + + + +0.01 +smooth + +8.536673686007383 +47.34984906537298 +429.8981407106618 +4.478412959584206 +86.57347496387644 +0 +120 +absolute + + + +0.01 +smooth + +8.536674205666266 +47.3498494070435 +429.8998309439987 +4.416287226993157 +86.56418448063386 +0 +120 +absolute + + + +0.01 +smooth + +8.53667472539339 +47.3498497491193 +429.90150917212225 +4.3539964283641925 +86.55487357400558 +0 +120 +absolute + + + +0.01 +smooth + +8.536675245184156 +47.34985009159805 +429.90317467396187 +4.291541592130351 +86.54554238689254 +0 +120 +absolute + + + +0.01 +smooth + +8.536675765033992 +47.3498504344775 +429.90482672844803 +4.228923746724663 +86.5361910621958 +0 +120 +absolute + + + +0.01 +smooth + +8.536676284938315 +47.34985077775539 +429.9064646145113 +4.1661439205801685 +86.52681974281647 +0 +120 +absolute + + + +0.01 +smooth + +8.53667680489253 +47.349851121429396 +429.9080876110812 +4.1032031421298925 +86.51742857165554 +0 +120 +absolute + + + +0.01 +smooth + +8.536677324892063 +47.34985146549727 +429.90969499708825 +4.040102439806869 +86.50801769161409 +0 +120 +absolute + + + +0.01 +smooth + +8.536677844932328 +47.34985180995672 +429.91128605146264 +3.9768428420441326 +86.49858724559317 +0 +120 +absolute + + + +0.01 +smooth + +8.536678365008735 +47.34985215480545 +429.91286005313424 +3.913425377274713 +86.48913737649383 +0 +120 +absolute + + + +0.01 +smooth + +8.536678885116709 +47.34985250004121 +429.91441628103377 +3.8498510739316454 +86.47966822721713 +0 +120 +absolute + + + +0.01 +smooth + +8.536679405251657 +47.34985284566171 +429.91595401409086 +3.7861209604479593 +86.47017994066411 +0 +120 +absolute + + + +0.01 +smooth + +8.536679925409 +47.34985319166465 +429.91747253123583 +3.7222360652566877 +86.46067265973583 +0 +120 +absolute + + + +0.01 +smooth + +8.536680445584157 +47.349853538047796 +429.9189711113991 +3.6581974167908653 +86.45114652733336 +0 +120 +absolute + + + +0.01 +smooth + +8.536680965772534 +47.34985388480882 +429.9204490335105 +3.5940060434835206 +86.44160168635773 +0 +120 +absolute + + + +0.01 +smooth + +8.536681485969554 +47.34985423194547 +429.9219055765004 +3.529662973767688 +86.43203827970996 +0 +120 +absolute + + + +0.01 +smooth + +8.536682006170631 +47.349854579455446 +429.9233400192989 +3.4651692360763993 +86.42245645029116 +0 +120 +absolute + + + +0.01 +smooth + +8.536682526371182 +47.349854927336494 +429.92475164083623 +3.400525858842688 +86.41285634100234 +0 +120 +absolute + + + +0.01 +smooth + +8.53668304656662 +47.349855275586314 +429.92613972004244 +3.3357338704995847 +86.40323809474461 +0 +120 +absolute + + + +0.01 +smooth + +8.536683566752366 +47.34985562420263 +429.92750353584785 +3.270794299480122 +86.39360185441895 +0 +120 +absolute + + + +0.01 +smooth + +8.536684086923833 +47.34985597318317 +429.9288423671826 +3.205708174217333 +86.38394776292644 +0 +120 +absolute + + + +0.01 +smooth + +8.536684607076435 +47.34985632252564 +429.9301554929766 +3.1404765231442506 +86.37427596316813 +0 +120 +absolute + + + +0.01 +smooth + +8.53668512720559 +47.34985667222777 +429.9314421921604 +3.0751003746939043 +86.36458659804508 +0 +120 +absolute + + + +0.01 +smooth + +8.536685647306712 +47.34985702228729 +429.932701743664 +3.0095807572993296 +86.35487981045834 +0 +120 +absolute + + + +0.01 +smooth + +8.53668616737522 +47.34985737270189 +429.9339334264175 +2.943918699393557 +86.34515574330896 +0 +120 +absolute + + + +0.01 +smooth + +8.536686687406528 +47.34985772346933 +429.9351365193512 +2.8781152294096195 +86.335414539498 +0 +120 +absolute + + + +0.01 +smooth + +8.536687207396053 +47.349858074587296 +429.9363103013953 +2.812171375780548 +86.32565634192649 +0 +120 +absolute + + + +0.01 +smooth + +8.536687727339206 +47.349858426053515 +429.9374540514797 +2.746088166939377 +86.3158812934955 +0 +120 +absolute + + + +0.01 +smooth + +8.53668824723141 +47.34985877786572 +429.9385670485349 +2.679866631319137 +86.30608953710608 +0 +120 +absolute + + + +0.01 +smooth + +8.536688767068078 +47.34985913002163 +429.9396485714908 +2.613507797352862 +86.29628121565926 +0 +120 +absolute + + + +0.01 +smooth + +8.536689286844624 +47.349859482518944 +429.9406978992778 +2.547012693473583 +86.28645647205613 +0 +120 +absolute + + + +0.01 +smooth + +8.536689806556467 +47.34985983535541 +429.9417143108259 +2.4803823481143326 +86.27661544919772 +0 +120 +absolute + + + +0.01 +smooth + +8.536690326199018 +47.34986018852872 +429.9426970850653 +2.4136177897081423 +86.26675828998509 +0 +120 +absolute + + + +0.01 +smooth + +8.536690845767701 +47.34986054203663 +429.9436455009262 +2.3467200466880467 +86.25688513731927 +0 +120 +absolute + + + +0.01 +smooth + +8.536691365257923 +47.34986089587682 +429.94455883733883 +2.279690147487076 +86.24699613410132 +0 +120 +absolute + + + +0.01 +smooth + +8.536691884665107 +47.34986125004704 +429.9454363732332 +2.2125291205382625 +86.23709142323233 +0 +120 +absolute + + + +0.01 +smooth + +8.536692403984661 +47.349861604545 +429.9462773875397 +2.14523799427464 +86.2271711476133 +0 +120 +absolute + + + +0.01 +smooth + +8.536692923212009 +47.349861959368425 +429.9470811591883 +2.0778177971292395 +86.21723545014531 +0 +120 +absolute + + + +0.01 +smooth + +8.536693442342564 +47.34986231451502 +429.9478469671093 +2.010269557535094 +86.2072844737294 +0 +120 +absolute + + + +0.01 +smooth + +8.53669396137174 +47.349862669982514 +429.9485740902328 +1.9425943039252358 +86.19731836126664 +0 +120 +absolute + + + +0.01 +smooth + +8.536694480294953 +47.34986302576863 +429.9492618074888 +1.8747930647326962 +86.18733725565806 +0 +120 +absolute + + + +0.01 +smooth + +8.536694999107622 +47.349863381871096 +429.94990939780786 +1.8068668683905091 +86.17734129980471 +0 +120 +absolute + + + +0.01 +smooth + +8.53669551780516 +47.34986373828761 +429.95051614011993 +1.7388167433317057 +86.16733063660767 +0 +120 +absolute + + + +0.01 +smooth + +8.536696036382985 +47.3498640950159 +429.9510813133552 +1.6706437179893183 +86.15730540896797 +0 +120 +absolute + + + +0.01 +smooth + +8.53669655483651 +47.34986445205371 +429.9516041964438 +1.6023488207963794 +86.14726575978666 +0 +120 +absolute + + + +0.01 +smooth + +8.536697073161154 +47.349864809398724 +429.95208406831586 +1.5339330801859221 +86.13721183196479 +0 +120 +absolute + + + +0.01 +smooth + +8.536697591352329 +47.34986516704868 +429.95252020790167 +1.4653975245909772 +86.12714376840344 +0 +120 +absolute + + + +0.01 +smooth + +8.536698109405455 +47.349865525001306 +429.9529118941314 +1.396743182444578 +86.11706171200363 +0 +120 +absolute + + + +0.01 +smooth + +8.536698627315946 +47.3498658832543 +429.95325840593506 +1.3279710821797566 +86.10696580566642 +0 +120 +absolute + + + +0.01 +smooth + +8.536699145079218 +47.34986624180541 +429.9535590222431 +1.2590822522295457 +86.09685619229288 +0 +120 +absolute + + + +0.01 +smooth + +8.536699662690689 +47.34986660065233 +429.9538130219854 +1.1900777210269766 +86.08673301478402 +0 +120 +absolute + + + +0.01 +smooth + +8.536700180145768 +47.349866959792784 +429.95401968409226 +1.1209585170050822 +86.07659641604093 +0 +120 +absolute + + + +0.01 +smooth + +8.536700697439878 +47.34986731922451 +429.9541782874938 +1.051725668596895 +86.06644653896466 +0 +120 +absolute + + + +0.01 +smooth + +8.536701214568433 +47.349867678945216 +429.95428811112026 +0.9823802042354475 +86.05628352645624 +0 +120 +absolute + + + +0.01 +smooth + +8.53670173152685 +47.349868038952614 +429.9543484339019 +0.9129231523537709 +86.04610752141674 +0 +120 +absolute + + + +0.01 +smooth + +8.536702248321626 +47.34986839925122 +429.95436080104065 +0.8433519302757866 +86.03591821084856 +0 +120 +absolute + + + +0.01 +smooth + +8.536702765123065 +47.349868759945736 +429.9543604514616 +0.773610590095688 +86.02570854524485 +0 +120 +absolute + + + +0.01 +smooth + +8.536703281986878 +47.34986912107069 +429.9543596653762 +0.70368049630191 +86.01547618754236 +0 +120 +absolute + + + +0.01 +smooth + +8.536703798908396 +47.349869482623845 +429.95435844333593 +0.6335626735579882 +86.00522128298402 +0 +120 +absolute + + + +0.01 +smooth + +8.536704315882968 +47.34986984460282 +429.954356785892 +0.563258146527458 +85.99494397681264 +0 +120 +absolute + + + +0.01 +smooth + +8.53670483290594 +47.349870207005324 +429.95435469359614 +0.49276793987385403 +85.98464441427112 +0 +120 +absolute + + + +0.01 +smooth + +8.536705349972646 +47.34987056982903 +429.9543521669994 +0.42209307826071196 +85.97432274060232 +0 +120 +absolute + + + +0.01 +smooth + +8.536705867078437 +47.34987093307163 +429.95434920665343 +0.35123458635156685 +85.9639791010491 +0 +120 +absolute + + + +0.01 +smooth + +8.536706384218647 +47.349871296730775 +429.95434581310946 +0.28019348880995376 +85.95361364085437 +0 +120 +absolute + + + +0.01 +smooth + +8.53670690138863 +47.34987166080417 +429.9543419869191 +0.20897081029940817 +85.94322650526102 +0 +120 +absolute + + + +0.01 +smooth + +8.536707418583715 +47.34987202528948 +429.9543377286335 +0.1375675754834649 +85.93281783951183 +0 +120 +absolute + + + +0.01 +smooth + +8.536707935799257 +47.34987239018441 +429.95433303880424 +0.06598480902565966 +85.92238778884973 +0 +120 +absolute + + + +0.01 +smooth + +8.53670845303059 +47.349872755486594 +429.9543279179826 +-0.0057764644104726925 +85.91193649851759 +0 +120 +absolute + + + +0.01 +smooth + +8.536708970273063 +47.34987312119375 +429.95432236672013 +-0.07771522016139702 +85.90146411375831 +0 +120 +absolute + + + +0.01 +smooth + +8.536709487522012 +47.34987348730355 +429.95431638556795 +-0.1498304335635779 +85.89097077981468 +0 +120 +absolute + + + +0.01 +smooth + +8.536710004772788 +47.34987385381367 +429.95430997507793 +-0.22212107995348013 +85.88045664192965 +0 +120 +absolute + + + +0.01 +smooth + +8.536710522020721 +47.34987422072178 +429.9543031358009 +-0.2945861346675686 +85.86992184534604 +0 +120 +absolute + + + +0.01 +smooth + +8.536711039261169 +47.349874588025585 +429.9542958682887 +-0.3672245730423082 +85.85936653530676 +0 +120 +absolute + + + +0.01 +smooth + +8.536711556489461 +47.349874955722726 +429.9542881730925 +-0.4400353704141634 +85.84879085705467 +0 +120 +absolute + + + +0.01 +smooth + +8.53671207370095 +47.349875323810934 +429.9542800507638 +-0.5130175021195995 +85.83819495583263 +0 +120 +absolute + + + +0.01 +smooth + +8.53671259089097 +47.34987569228784 +429.9542715018539 +-0.5861699434950806 +85.8275789768835 +0 +120 +absolute + + + +0.01 +smooth + +8.536713108054874 +47.34987606115115 +429.9542625269145 +-0.6594916698770722 +85.81694306545022 +0 +120 +absolute + + + +0.01 +smooth + +8.536713625187996 +47.34987643039855 +429.9542531264966 +-0.7329816566020387 +85.80628736677559 +0 +120 +absolute + + + +0.01 +smooth + +8.536714142285678 +47.3498768000277 +429.95424330115173 +-0.8066388790064452 +85.79561202610246 +0 +120 +absolute + + + +0.01 +smooth + +8.536714659343266 +47.34987717003627 +429.9542330514313 +-0.8804623124267559 +85.78491718867379 +0 +120 +absolute + + + +0.01 +smooth + +8.536715176356106 +47.34987754042199 +429.9542223778869 +-0.9544509321994363 +85.77420299973238 +0 +120 +absolute + + + +0.01 +smooth + +8.536715693319534 +47.349877911182496 +429.9542112810698 +-1.0286037136609512 +85.76346960452118 +0 +120 +absolute + + + +0.01 +smooth + +8.536716210228894 +47.349878282315466 +429.9541997615312 +-1.1029196321477646 +85.75271714828294 +0 +120 +absolute + + + +0.01 +smooth + +8.536716727079531 +47.34987865381859 +429.95418781982255 +-1.1773976629963419 +85.74194577626062 +0 +120 +absolute + + + +0.01 +smooth + +8.53671724386679 +47.34987902568957 +429.95417545649565 +-1.2520367815431475 +85.73115563369709 +0 +120 +absolute + + + +0.01 +smooth + +8.536717760586008 +47.349879397926074 +429.9541626721016 +-1.326835963124647 +85.72034686583524 +0 +120 +absolute + + + +0.01 +smooth + +8.536718277232529 +47.349879770525746 +429.95414946719154 +-1.4017941830773042 +85.70951961791782 +0 +120 +absolute + + + +0.01 +smooth + +8.536718793801697 +47.349880143486295 +429.95413584231727 +-1.4769104167375846 +85.69867403518782 +0 +120 +absolute + + + +0.01 +smooth + +8.536719310288856 +47.34988051680542 +429.95412179803014 +-1.5521836394419528 +85.6878102628881 +0 +120 +absolute + + + +0.01 +smooth + +8.536719826689348 +47.349880890480776 +429.95410733488154 +-1.6276128265268737 +85.67692844626151 +0 +120 +absolute + + + +0.01 +smooth + +8.53672034299851 +47.34988126451004 +429.95409245342256 +-1.7031969533288114 +85.66602873055092 +0 +120 +absolute + + + +0.01 +smooth + +8.53672085921169 +47.3498816388909 +429.954077154205 +-1.7789349951842315 +85.65511126099918 +0 +120 +absolute + + + +0.01 +smooth + +8.53672137532423 +47.349882013621034 +429.95406143778 +-1.8548259274295988 +85.64417618284921 +0 +120 +absolute + + + +0.01 +smooth + +8.536721891331476 +47.349882388698134 +429.9540453046993 +-1.9308687254013774 +85.63322364134385 +0 +120 +absolute + + + +0.01 +smooth + +8.536722407228762 +47.349882764119855 +429.95402875551383 +-2.007062364436033 +85.62225378172596 +0 +120 +absolute + + + +0.01 +smooth + +8.536722923011435 +47.349883139883886 +429.95401179077527 +-2.0834058198700305 +85.61126674923844 +0 +120 +absolute + + + +0.01 +smooth + +8.53672343867484 +47.34988351598792 +429.9539944110349 +-2.1598980670398324 +85.60026268912415 +0 +120 +absolute + + + +0.01 +smooth + +8.53672395421432 +47.349883892429624 +429.9539766168443 +-2.2365380812819065 +85.58924174662596 +0 +120 +absolute + + + +0.01 +smooth + +8.536724469625213 +47.34988426920668 +429.95395840875466 +-2.3133248379327163 +85.57820406698677 +0 +120 +absolute + + + +0.01 +smooth + +8.536724984902863 +47.34988464631678 +429.95393978731755 +-2.3902573123287265 +85.5671497954494 +0 +120 +absolute + + + +0.01 +smooth + +8.536725500042616 +47.34988502375758 +429.9539207530843 +-2.4673344798064014 +85.55607907725675 +0 +120 +absolute + + + +0.01 +smooth + +8.536726015039811 +47.34988540152677 +429.95390130660627 +-2.5445553157022065 +85.5449920576517 +0 +120 +absolute + + + +0.01 +smooth + +8.536726529889792 +47.34988577962204 +429.9538814484348 +-2.621918795352607 +85.53388888187709 +0 +120 +absolute + + + +0.01 +smooth + +8.536727044587899 +47.34988615804106 +429.9538611791215 +-2.699423894094053 +85.52276969517582 +0 +120 +absolute + + + +0.01 +smooth + +8.536727559129481 +47.34988653678152 +429.9538404992177 +-2.777069587263038 +85.51163464279077 +0 +120 +absolute + + + +0.01 +smooth + +8.536728073509874 +47.349886915841076 +429.9538194092746 +-2.854854850196012 +85.50048386996477 +0 +120 +absolute + + + +0.01 +smooth + +8.536728587724424 +47.34988729521743 +429.95379790984384 +-2.9327786582294393 +85.48931752194073 +0 +120 +absolute + + + +0.01 +smooth + +8.536729101768474 +47.34988767490826 +429.95377600147674 +-3.0108399866997857 +85.4781357439615 +0 +120 +absolute + + + +0.01 +smooth + +8.536729615637363 +47.34988805491123 +429.9537536847246 +-3.089037810943517 +85.46693868127 +0 +120 +absolute + + + +0.01 +smooth + +8.536730129326438 +47.349888435224045 +429.95373096013896 +-3.1673711062970957 +85.45572647910902 +0 +120 +absolute + + + +0.01 +smooth + +8.536730642831039 +47.34988881584435 +429.95370782827115 +-3.245838848096988 +85.44449928272148 +0 +120 +absolute + + + +0.01 +smooth + +8.536731156146509 +47.349889196769865 +429.95368428967265 +-3.324440011679658 +85.43325723735023 +0 +120 +absolute + + + +0.01 +smooth + +8.53673166926819 +47.34988957799824 +429.95366034489473 +-3.4031735723815713 +85.42200048823818 +0 +120 +absolute + + + +0.01 +smooth + +8.536732182191427 +47.34988995952717 +429.9536359944889 +-3.482038505539192 +85.41072918062818 +0 +120 +absolute + + + +0.01 +smooth + +8.53673269491156 +47.349890341354325 +429.9536112390065 +-3.5610337864889856 +85.39944345976309 +0 +120 +absolute + + + +0.01 +smooth + +8.536733207423934 +47.34989072347739 +429.95358607899885 +-3.640158390567416 +85.38814347088578 +0 +120 +absolute + + + +0.01 +smooth + +8.536733719723891 +47.349891105894045 +429.95356051501756 +-3.719411293110949 +85.37682935923915 +0 +120 +absolute + + + +0.01 +smooth + +8.536734231806772 +47.34989148860196 +429.9535345476138 +-3.798791469456048 +85.36550127006603 +0 +120 +absolute + + + +0.01 +smooth + +8.536734743667921 +47.34989187159883 +429.95350817733924 +-3.8782978949391795 +85.35415934860934 +0 +120 +absolute + + + +0.01 +smooth + +8.536735255302679 +47.349892254882334 +429.95348140474505 +-3.9579295448968073 +85.34280374011192 +0 +120 +absolute + + + +0.01 +smooth + +8.53673576670639 +47.34989263845013 +429.9534542303826 +-4.037685394665396 +85.33143458981664 +0 +120 +absolute + + + +0.01 +smooth + +8.536736277874397 +47.34989302229992 +429.9534266548035 +-4.117564419581411 +85.3200520429664 +0 +120 +absolute + + + +0.01 +smooth + +8.536736788802042 +47.34989340642939 +429.953398678559 +-4.197565594981317 +85.30865624480403 +0 +120 +absolute + + + +0.01 +smooth + +8.536737299484667 +47.34989379083619 +429.9533703022006 +-4.277687896201577 +85.29724734057243 +0 +120 +absolute + + + +0.01 +smooth + +8.536737809917618 +47.349894175518024 +429.9533415262796 +-4.35793029857866 +85.28582547551446 +0 +120 +absolute + + + +0.01 +smooth + +8.536738320096234 +47.34989456047256 +429.9533123513474 +-4.4382917774490265 +85.27439079487299 +0 +120 +absolute + + + +0.01 +smooth + +8.536738830015857 +47.349894945697486 +429.95328277795545 +-4.518771308149144 +85.26294344389093 +0 +120 +absolute + + + +0.01 +smooth + +8.53673933967183 +47.34989533119048 +429.95325280665514 +-4.599367866015475 +85.25148356781109 +0 +120 +absolute + + + +0.01 +smooth + +8.536739849059499 +47.34989571694922 +429.95322243799785 +-4.680080426384487 +85.24001131187637 +0 +120 +absolute + + + +0.01 +smooth + +8.536740358174203 +47.349896102971385 +429.953191672535 +-4.760907964592642 +85.22852682132967 +0 +120 +absolute + + + +0.01 +smooth + +8.536740867011288 +47.349896489254654 +429.953160510818 +-4.841849455976408 +85.2170302414138 +0 +120 +absolute + + + +0.01 +smooth + +8.536741375566093 +47.34989687579671 +429.95312895339816 +-4.9229038758722465 +85.2055217173717 +0 +120 +absolute + + + +0.01 +smooth + +8.536741883833962 +47.34989726259522 +429.95309700082703 +-5.004070199616625 +85.19400139444619 +0 +120 +absolute + + + +0.01 +smooth + +8.536742391810238 +47.349897649647886 +429.95306465365593 +-5.085347402546006 +85.18246941788016 +0 +120 +absolute + + + +0.01 +smooth + +8.536742899490264 +47.34989803695238 +429.95303191243624 +-5.166734459996856 +85.17092593291646 +0 +120 +absolute + + + +0.01 +smooth + +8.536743406899447 +47.34989842452335 +429.9529941319565 +-5.2482391465654645 +85.15936996572219 +0 +120 +absolute + + + +0.01 +smooth + +8.53674391422603 +47.34989881246749 +429.9529217303289 +-5.3299169152995916 +85.14779447981766 +0 +120 +absolute + + + +0.01 +smooth + +8.536744421499549 +47.34989920080185 +429.9528100159893 +-5.411776794326136 +85.1361983446121 +0 +120 +absolute + + + +0.01 +smooth + +8.536744928715164 +47.34989958952407 +429.952659634734 +-5.493817756876063 +85.1245817084042 +0 +120 +absolute + + + +0.01 +smooth + +8.536745435868045 +47.34989997863184 +429.9524712323605 +-5.576038776180352 +85.11294471949287 +0 +120 +absolute + + + +0.01 +smooth + +8.536745942953361 +47.34990036812275 +429.95224545466516 +-5.658438825469965 +85.10128752617686 +0 +120 +absolute + + + +0.01 +smooth + +8.536746449966278 +47.3499007579945 +429.95198294744546 +-5.741016877975878 +85.08961027675505 +0 +120 +absolute + + + +0.01 +smooth + +8.536746956901961 +47.349901148244705 +429.95168435649794 +-5.823771906929059 +85.0779131195262 +0 +120 +absolute + + + +0.01 +smooth + +8.536747463755583 +47.34990153887105 +429.9513503276196 +-5.906702885560485 +85.0661962027892 +0 +120 +absolute + + + +0.01 +smooth + +8.536747970522306 +47.349901929871166 +429.9509815066074 +-5.9898087871011185 +85.05445967484276 +0 +120 +absolute + + + +0.01 +smooth + +8.536748477197298 +47.34990232124268 +429.95057853925846 +-6.073088584781938 +85.04270368398578 +0 +120 +absolute + + + +0.01 +smooth + +8.536748983775725 +47.34990271298329 +429.9501420713694 +-6.156541251833908 +85.03092837851702 +0 +120 +absolute + + + +0.01 +smooth + +8.53674949025276 +47.34990310509061 +429.9496727487372 +-6.240165761488006 +85.01913390673532 +0 +120 +absolute + + + +0.01 +smooth + +8.536749996623564 +47.3499034975623 +429.94917121715895 +-6.3239610869751965 +85.00732041693948 +0 +120 +absolute + + + +0.01 +smooth + +8.53675050288331 +47.34990389039603 +429.9486381224316 +-6.407926201526457 +84.99548805742836 +0 +120 +absolute + + + +0.01 +smooth + +8.536751009027158 +47.34990428358939 +429.94807411035185 +-6.492060078372752 +84.98363697650066 +0 +120 +absolute + + + +0.01 +smooth + +8.536751515050284 +47.34990467714011 +429.9474798267169 +-6.576361690745056 +84.97176732245536 +0 +120 +absolute + + + +0.01 +smooth + +8.536752020947844 +47.34990507104578 +429.94685591732343 +-6.660830011874338 +84.95987924359112 +0 +120 +absolute + + + +0.01 +smooth + +8.53675252671502 +47.34990546530407 +429.9462030279686 +-6.745464014991573 +84.94797288820689 +0 +120 +absolute + + + +0.01 +smooth + +8.536753032346963 +47.34990585991264 +429.945521804449 +-6.830262673327727 +84.93604840460134 +0 +120 +absolute + + + +0.01 +smooth + +8.53675353783885 +47.34990625486913 +429.9448128925619 +-6.915224960113774 +84.9241059410734 +0 +120 +absolute + + + +0.01 +smooth + +8.536754043185852 +47.34990665017119 +429.9440769381041 +-7.000349848580685 +84.91214564592183 +0 +120 +absolute + + + +0.01 +smooth + +8.536754548383126 +47.34990704581648 +429.9433145868727 +-7.08563631195943 +84.9001676674455 +0 +120 +absolute + + + +0.01 +smooth + +8.536755053425843 +47.34990744180262 +429.9425264846642 +-7.171083323480978 +84.88817215394309 +0 +120 +absolute + + + +0.01 +smooth + +8.536755558309174 +47.349907838127294 +429.9417132772759 +-7.256689856376302 +84.87615925371358 +0 +120 +absolute + + + +0.01 +smooth + +8.536756063028282 +47.34990823478812 +429.94087561050446 +-7.342454883876373 +84.86412911505568 +0 +120 +absolute + + + +0.01 +smooth + +8.536756567578335 +47.349908631782796 +429.94001413014723 +-7.428377379212165 +84.85208188626824 +0 +120 +absolute + + + +0.01 +smooth + +8.536757071954503 +47.34990902910893 +429.93912948200085 +-7.514456315614643 +84.84001771565008 +0 +120 +absolute + + + +0.01 +smooth + +8.536757576151949 +47.34990942676417 +429.93822231186203 +-7.60069066631478 +84.82793675149996 +0 +120 +absolute + + + +0.01 +smooth + +8.536758080165843 +47.34990982474619 +429.937293265528 +-7.687079404543547 +84.81583914211677 +0 +120 +absolute + + + +0.01 +smooth + +8.536758583991352 +47.34991022305264 +429.93634298879584 +-7.773621503531918 +84.80372503579929 +0 +120 +absolute + + + +0.01 +smooth + +8.536759087623645 +47.349910621681154 +429.9353721274622 +-7.860315936510861 +84.79159458084634 +0 +120 +absolute + + + +0.01 +smooth + +8.536759591057884 +47.34991102062938 +429.93438132732393 +-7.947161676711345 +84.7794479255567 +0 +120 +absolute + + + +0.01 +smooth + +8.536760094289239 +47.34991141989497 +429.93337123417814 +-8.034157697364343 +84.76728521822922 +0 +120 +absolute + + + +0.01 +smooth + +8.53676059731288 +47.34991181947561 +429.9323424938218 +-8.121302971700832 +84.75510660716272 +0 +120 +absolute + + + +0.01 +smooth + +8.536761100123972 +47.34991221936891 +429.9312957520518 +-8.208596472951772 +84.74291224065603 +0 +120 +absolute + + + +0.01 +smooth + +8.536761602717679 +47.349912619572514 +429.9302316546649 +-8.29603717434814 +84.73070226700787 +0 +120 +absolute + + + +0.01 +smooth + +8.53676210508917 +47.349913020084095 +429.92915084745823 +-8.383624049120906 +84.71847683451715 +0 +120 +absolute + + + +0.01 +smooth + +8.53676260723362 +47.3499134209013 +429.9280539762286 +-8.471356070501042 +84.70623609148267 +0 +120 +absolute + + + +0.01 +smooth + +8.536763109146188 +47.349913822021776 +429.9269416867732 +-8.55923221171952 +84.69398018620322 +0 +120 +absolute + + + +0.01 +smooth + +8.53676361082204 +47.349914223443164 +429.92581462488846 +-8.647251446007305 +84.6817092669776 +0 +120 +absolute + + + +0.01 +smooth + +8.536764112256346 +47.34991462516312 +429.92467343637173 +-8.735412746595374 +84.66942348210466 +0 +120 +absolute + + + +0.01 +smooth + +8.536764613444277 +47.34991502717931 +429.92351876701974 +-8.823715086714694 +84.6571229798832 +0 +120 +absolute + + + +0.01 +smooth + +8.536765114380994 +47.34991542948936 +429.92235126262955 +-8.912157439596239 +84.64480790861205 +0 +120 +absolute + + + +0.01 +smooth + +8.536765615061668 +47.34991583209093 +429.9211715689979 +-9.000738778470978 +84.63247841658999 +0 +120 +absolute + + + +0.01 +smooth + +8.536766115481464 +47.34991623498168 +429.91998033192203 +-9.089458076569883 +84.62013465211587 +0 +120 +absolute + + + +0.01 +smooth + +8.536766615635552 +47.34991663815923 +429.9187781971986 +-9.178314307123927 +84.60777676348845 +0 +120 +absolute + + + +0.01 +smooth + +8.536767115519098 +47.34991704162126 +429.9175658106246 +-9.267306443364074 +84.59540489900662 +0 +120 +absolute + + + +0.01 +smooth + +8.536767615127268 +47.34991744536541 +429.9163438179969 +-9.356433458521302 +84.58301920696913 +0 +120 +absolute + + + +0.01 +smooth + +8.53676811445523 +47.349917849389335 +429.91511286511263 +-9.44569432582658 +84.57061983567482 +0 +120 +absolute + + + +0.01 +smooth + +8.536768613498152 +47.34991825369067 +429.91387359776854 +-9.535088018510876 +84.55820693342253 +0 +120 +absolute + + + +0.01 +smooth + +8.536769112251202 +47.34991865826707 +429.9126266617616 +-9.624613509805165 +84.54578064851103 +0 +120 +absolute + + + +0.01 +smooth + +8.536769610709543 +47.3499190631162 +429.9113727028888 +-9.714269772940415 +84.53334112923915 +0 +120 +absolute + + + +0.01 +smooth + +8.536770108868348 +47.3499194682357 +429.9101123669469 +-9.8040557811476 +84.52088852390571 +0 +120 +absolute + + + +0.01 +smooth + +8.53677060672278 +47.349919873623215 +429.90884629973306 +-9.893970507657686 +84.50842298080951 +0 +120 +absolute + + + +0.01 +smooth + +8.536771104268007 +47.34992027927639 +429.907575147044 +-9.984012925701649 +84.49594464824939 +0 +120 +absolute + + + +0.01 +smooth + +8.536771601499197 +47.3499206851929 +429.9062995546768 +-10.074182008510459 +84.48345367452413 +0 +120 +absolute + + + +0.01 +smooth + +8.536772098411518 +47.349921091370376 +429.9050201684283 +-10.164476729315084 +84.47095020793259 +0 +120 +absolute + + + +0.01 +smooth + +8.536772595000137 +47.34992149780646 +429.9037376340955 +-10.254896061346496 +84.45843439677354 +0 +120 +absolute + + + +0.01 +smooth + +8.536773091260219 +47.34992190449883 +429.90245259747525 +-10.34543897783567 +84.44590638934581 +0 +120 +absolute + + + +0.01 +smooth + +8.536773587186934 +47.349922311445106 +429.90116570436453 +-10.43610445201357 +84.43336633394821 +0 +120 +absolute + + + +0.01 +smooth + +8.536774082775446 +47.34992271864296 +429.89987760056033 +-10.526891457111173 +84.42081437887958 +0 +120 +absolute + + + +0.01 +smooth + +8.536774578020927 +47.34992312609002 +429.89858893185936 +-10.617798966359448 +84.4082506724387 +0 +120 +absolute + + + +0.01 +smooth + +8.536775072918541 +47.349923533783965 +429.89730034405875 +-10.708825952989363 +84.3956753629244 +0 +120 +absolute + + + +0.01 +smooth + +8.536775567463454 +47.34992394172241 +429.8960124829554 +-10.799971390231892 +84.38308859863548 +0 +120 +absolute + + + +0.01 +smooth + +8.536776061650837 +47.349924349903034 +429.8947259943463 +-10.891234251318007 +84.3704905278708 +0 +120 +absolute + + + +0.01 +smooth + +8.536776555475855 +47.349924758323475 +429.89344152402816 +-10.982613509478677 +84.35788129892912 +0 +120 +absolute + + + +0.01 +smooth + +8.536777048933676 +47.34992516698139 +429.89215971779805 +-11.074108137944872 +84.34526106010927 +0 +120 +absolute + + + +0.01 +smooth + +8.536777542019465 +47.34992557587442 +429.89088122145296 +-11.165717109947565 +84.33262995971006 +0 +120 +absolute + + + +0.01 +smooth + +8.536778034728393 +47.34992598500021 +429.8896066807896 +-11.257439398717727 +84.31998814603033 +0 +120 +absolute + + + +0.01 +smooth + +8.536778527055624 +47.349926394356444 +429.8883367416052 +-11.349273977486327 +84.30733576736887 +0 +120 +absolute + + + +0.01 +smooth + +8.536779018996327 +47.349926803940726 +429.88707204969637 +-11.44121981948432 +84.2946729720245 +0 +120 +absolute + + + +0.01 +smooth + +8.536779510545667 +47.349927213750725 +429.8858132508603 +-11.533275897942712 +84.28199990829603 +0 +120 +absolute + + + +0.01 +smooth + +8.536780001698816 +47.349927623784104 +429.88456099089393 +-11.625441186092454 +84.26931672448231 +0 +120 +absolute + + + +0.01 +smooth + +8.536780492450937 +47.34992803403849 +429.8833159155939 +-11.717714657164523 +84.2566235688821 +0 +120 +absolute + + + +0.01 +smooth + +8.536780982797197 +47.34992844451155 +429.8820786707574 +-11.81009528438988 +84.24392058979424 +0 +120 +absolute + + + +0.01 +smooth + +8.536781472732766 +47.349928855200936 +429.88084990218124 +-11.902582040999507 +84.23120793551755 +0 +120 +absolute + + + +0.01 +smooth + +8.53678196225281 +47.349929266104276 +429.8796302556624 +-11.995173900224366 +84.21848575435082 +0 +120 +absolute + + + +0.01 +smooth + +8.536782451352497 +47.349929677219244 +429.8784203769977 +-12.087869835295434 +84.2057541945929 +0 +120 +absolute + + + +0.01 +smooth + +8.536782940026992 +47.349930088543466 +429.87722091198435 +-12.180668819443676 +84.19301340454258 +0 +120 +absolute + + + +0.01 +smooth + +8.536783428333653 +47.349930500105785 +429.8760265175688 +-12.273585553246814 +84.18026150519981 +0 +120 +absolute + + + +0.01 +smooth + +8.536783916469611 +47.3499309120051 +429.87481817770487 +-12.366670122839185 +84.16749205761433 +0 +120 +absolute + + + +0.01 +smooth + +8.536784404445273 +47.34993132424684 +429.873594621048 +-12.459925431224498 +84.15470470638112 +0 +120 +absolute + + + +0.01 +smooth + +8.536784892255486 +47.349931736828665 +429.87235606554276 +-12.553350449530855 +84.14189960297895 +0 +120 +absolute + + + +0.01 +smooth + +8.536785379895099 +47.34993214974815 +429.87110272913355 +-12.646944148886352 +84.12907689888634 +0 +120 +absolute + + + +0.01 +smooth + +8.536785867358958 +47.349932563002994 +429.869834829765 +-12.740705500419029 +84.116236745582 +0 +120 +absolute + + + +0.01 +smooth + +8.536786354641915 +47.34993297659079 +429.86855258538174 +-12.83463347525704 +84.10337929454461 +0 +120 +absolute + + + +0.01 +smooth + +8.536786841738826 +47.34993339050921 +429.86725621392833 +-12.928727044528411 +84.09050469725277 +0 +120 +absolute + + + +0.01 +smooth + +8.536787328644525 +47.349933804755835 +429.8659459333492 +-13.022985179361294 +84.07761310518515 +0 +120 +absolute + + + +0.01 +smooth + +8.536787815353875 +47.349934219328325 +429.8646219615891 +-13.11740685088371 +84.06470466982037 +0 +120 +absolute + + + +0.01 +smooth + +8.536788301861723 +47.34993463422433 +429.8632845165925 +-13.211991030223816 +84.05177954263714 +0 +120 +absolute + + + +0.01 +smooth + +8.536788788162912 +47.349935049441484 +429.86193381630403 +-13.306736688509636 +84.0388378751141 +0 +120 +absolute + + + +0.01 +smooth + +8.536789274252294 +47.349935464977385 +429.8605700786681 +-13.401642796869321 +84.02587981872983 +0 +120 +absolute + + + +0.01 +smooth + +8.536789760124721 +47.34993588082971 +429.8591935216295 +-13.496708326430893 +84.01290552496303 +0 +120 +absolute + + + +0.01 +smooth + +8.536790245775038 +47.349936296996056 +429.8578043631326 +-13.591932248322511 +83.99991514529236 +0 +120 +absolute + + + +0.01 +smooth + +8.536790731198101 +47.3499367134741 +429.85640282112223 +-13.687313533672198 +83.98690883119649 +0 +120 +absolute + + + +0.01 +smooth + +8.53679121638875 +47.34993713026143 +429.85498911354273 +-13.7828511536081 +83.97388673415402 +0 +120 +absolute + + + +0.01 +smooth + +8.536791701341842 +47.3499375473557 +429.8535634583385 +-13.878544079258244 +83.9608490056436 +0 +120 +absolute + + + +0.01 +smooth + +8.536792186052224 +47.34993796475457 +429.8521260734547 +-13.97439128175079 +83.94779579714394 +0 +120 +absolute + + + +0.01 +smooth + +8.536792670514743 +47.34993838245562 +429.8506771768353 +-14.070391732213755 +83.93472726013363 +0 +120 +absolute + + + +0.01 +smooth + +8.53679315472425 +47.349938800456535 +429.84921698642523 +-14.16654440177529 +83.92164354609132 +0 +120 +absolute + + + +0.01 +smooth + +8.536793638675595 +47.34993921875492 +429.84774572016875 +-14.262848261563425 +83.90854480649573 +0 +120 +absolute + + + +0.01 +smooth + +8.536794122363624 +47.349939637348406 +429.84626359601066 +-14.35930228270631 +83.8954311928254 +0 +120 +absolute + + + +0.01 +smooth + +8.536794605783195 +47.34994005623468 +429.8447708318957 +-14.455905436331975 +83.88230285655911 +0 +120 +absolute + + + +0.01 +smooth + +8.536795088929143 +47.3499404754113 +429.843267645768 +-14.552656693568562 +83.8691599491754 +0 +120 +absolute + + + +0.01 +smooth + +8.536795571796329 +47.34994089487594 +429.84175425557237 +-14.6495550255441 +83.85600262215296 +0 +120 +absolute + + + +0.01 +smooth + +8.5367960543796 +47.34994131462625 +429.8402308792535 +-14.746599403386748 +83.84283102697046 +0 +120 +absolute + + + +0.01 +smooth + +8.5367965366738 +47.34994173465981 +429.83869773475556 +-14.843788798224514 +83.82964531510652 +0 +120 +absolute + + + +0.01 +smooth + +8.536797018673784 +47.349942154974315 +429.8371550400235 +-14.941122181185575 +83.81644563803982 +0 +120 +absolute + + + +0.01 +smooth + +8.536797500374396 +47.34994257556737 +429.8356030130019 +-15.038598523397933 +83.80323214724899 +0 +120 +absolute + + + +0.01 +smooth + +8.536797981770492 +47.34994299643659 +429.834041871635 +-15.136216795989752 +83.79000499421265 +0 +120 +absolute + + + +0.01 +smooth + +8.53679846285692 +47.349943417579674 +429.8324718338677 +-15.233975970089055 +83.77676433040955 +0 +120 +absolute + + + +0.01 +smooth + +8.536798943628522 +47.34994383899417 +429.8308931176443 +-15.331875016823993 +83.76351030731823 +0 +120 +absolute + + + +0.01 +smooth + +8.536799424080154 +47.34994426067777 +429.82930594090953 +-15.429912907322588 +83.75024307641738 +0 +120 +absolute + + + +0.01 +smooth + +8.536799904206665 +47.349944682628106 +429.827710521608 +-15.528088612713004 +83.73696278918568 +0 +120 +absolute + + + +0.01 +smooth + +8.536800384002898 +47.34994510484278 +429.82610707768396 +-15.626401104123245 +83.7236695971017 +0 +120 +absolute + + + +0.01 +smooth + +8.53680086346371 +47.349945527319456 +429.8244958270825 +-15.724849352681485 +83.71036365164422 +0 +120 +absolute + + + +0.01 +smooth + +8.536801342583951 +47.34994595005577 +429.8228769877479 +-15.823432329515736 +83.69704510429179 +0 +120 +absolute + + + +0.01 +smooth + +8.53680182135846 +47.34994637304932 +429.82125077762447 +-15.92214900575415 +83.68371410652306 +0 +120 +absolute + + + +0.01 +smooth + +8.536802299782096 +47.349946796297786 +429.8196174146573 +-16.020998352524757 +83.67037080981675 +0 +120 +absolute + + + +0.01 +smooth + +8.536802777849704 +47.34994721979877 +429.81797711679064 +-16.119979340955712 +83.65701536565143 +0 +120 +absolute + + + +0.01 +smooth + +8.536803255556135 +47.349947643549925 +429.816330101969 +-16.21909094217503 +83.6436479255058 +0 +120 +absolute + + + +0.01 +smooth + +8.536803732896237 +47.349948067548866 +429.8146765881372 +-16.318332127310835 +83.6302686408585 +0 +120 +absolute + + + +0.01 +smooth + +8.536804209864862 +47.34994849179325 +429.8130167932397 +-16.41770186749125 +83.61687766318818 +0 +120 +absolute + + + +0.01 +smooth + +8.536804686456852 +47.3499489162807 +429.81135093522096 +-16.5171991338443 +83.60347514397348 +0 +120 +absolute + + + +0.01 +smooth + +8.536805162667065 +47.34994934100884 +429.8096792320257 +-16.616822897498142 +83.59006123469305 +0 +120 +absolute + + + +0.01 +smooth + +8.536805638490346 +47.349949765975325 +429.80800190159835 +-16.716572129580786 +83.57663608682559 +0 +120 +absolute + + + +0.01 +smooth + +8.536806113921545 +47.349950191177776 +429.80631916188355 +-16.8164458012204 +83.56319985184967 +0 +120 +absolute + + + +0.01 +smooth + +8.53680658895551 +47.34995061661383 +429.8046312308259 +-16.916442883544995 +83.549752681244 +0 +120 +absolute + + + +0.01 +smooth + +8.53680706358709 +47.34995104228112 +429.80293832636994 +-17.016562347682733 +83.53629472648718 +0 +120 +absolute + + + +0.01 +smooth + +8.53680753781114 +47.34995146817728 +429.80124066646033 +-17.116803164761635 +83.52282613905791 +0 +120 +absolute + + + +0.01 +smooth + +8.536808011622501 +47.34995189429995 +429.7995384690414 +-17.217164305909854 +83.50934707043483 +0 +120 +absolute + + + +0.01 +smooth + +8.536808485016026 +47.34995232064675 +429.7978319520579 +-17.317644742255414 +83.49585767209656 +0 +120 +absolute + + + +0.01 +smooth + +8.536808957986565 +47.34995274721533 +429.79612133345444 +-17.41824344492647 +83.48235809552179 +0 +120 +absolute + + + +0.01 +smooth + +8.536809430528967 +47.349953174003325 +429.7944068311755 +-17.51895938505104 +83.46884849218912 +0 +120 +absolute + + + +0.01 +smooth + +8.53680990263808 +47.34995360100835 +429.79268866316556 +-17.619791533757287 +83.45532901357727 +0 +120 +absolute + + + +0.01 +smooth + +8.536810374308754 +47.34995402822806 +429.79096704736935 +-17.720738862173224 +83.44179981116483 +0 +120 +absolute + + + +0.01 +smooth + +8.53681084553584 +47.34995445566008 +429.7892422017313 +-17.821800341427014 +83.42826103643047 +0 +120 +absolute + + + +0.01 +smooth + +8.536811316314186 +47.34995488330205 +429.7875143441962 +-17.922974942646675 +83.41471284085286 +0 +120 +absolute + + + +0.01 +smooth + +8.536811786638637 +47.34995531115159 +429.7857836927083 +-18.02426163696036 +83.4011553759106 +0 +120 +absolute + + + +0.01 +smooth + +8.53681225650405 +47.349955739206344 +429.78405046521243 +-18.125659395496093 +83.38758879308241 +0 +120 +absolute + + + +0.01 +smooth + +8.536812725905268 +47.34995616746395 +429.7823148796531 +-18.227167189382037 +83.37401324384687 +0 +120 +absolute + + + +0.01 +smooth + +8.536813194837142 +47.34995659592204 +429.78057715397483 +-18.328783989746196 +83.3604288796827 +0 +120 +absolute + + + +0.01 +smooth + +8.536813663294524 +47.34995702457824 +429.77883750612216 +-18.43050876771674 +83.34683585206847 +0 +120 +absolute + + + +0.01 +smooth + +8.536814131272259 +47.34995745343019 +429.7770961540398 +-18.53234049442169 +83.3332343124829 +0 +120 +absolute + + + +0.01 +smooth + +8.536814598765199 +47.349957882475536 +429.7753533156721 +-18.634278140989192 +83.31962441240461 +0 +120 +absolute + + + +0.01 +smooth + +8.536815065768192 +47.3499583117119 +429.7736092089639 +-18.736320678547273 +83.30600630331226 +0 +120 +absolute + + + +0.01 +smooth + +8.53681553227609 +47.34995874113691 +429.77186405185944 +-18.83846707822409 +83.29238013668447 +0 +120 +absolute + + + +0.01 +smooth + +8.536815998283739 +47.34995917074821 +429.7701180623036 +-18.940716311147664 +83.27874606399995 +0 +120 +absolute + + + +0.01 +smooth + +8.53681646378599 +47.34995960054343 +429.7683714582408 +-19.04306734844615 +83.26510423673729 +0 +120 +absolute + + + +0.01 +smooth + +8.53681692877769 +47.34996003052021 +429.7666244576156 +-19.14551916124757 +83.25145480637518 +0 +120 +absolute + + + +0.01 +smooth + +8.536817393253688 +47.34996046067618 +429.76487727837264 +-19.248070720680076 +83.23779792439225 +0 +120 +absolute + + + +0.01 +smooth + +8.53681785720884 +47.34996089100896 +429.7631301384564 +-19.35072099787169 +83.22413374226716 +0 +120 +absolute + + + +0.01 +smooth + +8.536818320637986 +47.34996132151621 +429.76138325581144 +-19.453468963950574 +83.21046241147855 +0 +120 +absolute + + + +0.01 +smooth + +8.536818783535983 +47.34996175219556 +429.75963684838246 +-19.556313590044745 +83.19678408350508 +0 +120 +absolute + + + +0.01 +smooth + +8.536819245897675 +47.349962183044624 +429.75789113411383 +-19.659253847282358 +83.18309890982539 +0 +120 +absolute + + + +0.01 +smooth + +8.536819707717912 +47.349962614061056 +429.7561463309504 +-19.76228870679143 +83.16940704191815 +0 +120 +absolute + + + +0.01 +smooth + +8.536820168991547 +47.34996304524248 +429.75440265683653 +-19.86541713970013 +83.15570863126199 +0 +120 +absolute + + + +0.01 +smooth + +8.536820629713425 +47.34996347658654 +429.7526603297168 +-19.968638117136464 +83.14200382933555 +0 +120 +absolute + + + +0.01 +smooth + +8.536821089878396 +47.349963908090864 +429.7509195675358 +-20.071950610228605 +83.12829278761754 +0 +120 +absolute + + + +0.01 +smooth + +8.536821549595786 +47.349964339801964 +429.74917695890366 +-20.175377596383065 +83.1145724908576 +0 +120 +absolute + + + +0.01 +smooth + +8.536822009058982 +47.349964771802384 +429.7474263646235 +-20.278959747542203 +83.10083759148547 +0 +120 +absolute + + + +0.01 +smooth + +8.536822468265896 +47.3499652040913 +429.74566779722505 +-20.38269678475197 +83.08708814521925 +0 +120 +absolute + + + +0.01 +smooth + +8.536822927210862 +47.34996563666632 +429.7439013819142 +-20.48658768146684 +83.07332430640568 +0 +120 +absolute + + + +0.01 +smooth + +8.536823385888216 +47.34996606952508 +429.7421272438971 +-20.590631411141096 +83.05954622939137 +0 +120 +absolute + + + +0.01 +smooth + +8.536823844292291 +47.34996650266521 +429.7403455083795 +-20.694826947229185 +83.04575406852305 +0 +120 +absolute + + + +0.01 +smooth + +8.536824302417429 +47.34996693608436 +429.7385563005679 +-20.799173263185434 +83.03194797814743 +0 +120 +absolute + + + +0.01 +smooth + +8.536824760257966 +47.349967369780146 +429.7367597456681 +-20.9036693324643 +83.0181281126112 +0 +120 +absolute + + + +0.01 +smooth + +8.536825217808238 +47.34996780375021 +429.7349559688861 +-21.008314128520073 +83.00429462626104 +0 +120 +absolute + + + +0.01 +smooth + +8.536825675062579 +47.34996823799216 +429.7331450954278 +-21.11310662480721 +82.9904476734436 +0 +120 +absolute + + + +0.01 +smooth + +8.536826132015328 +47.34996867250364 +429.73132725049965 +-21.218045794780025 +82.97658740850565 +0 +120 +absolute + + + +0.01 +smooth + +8.536826588660823 +47.34996910728231 +429.72950255930755 +-21.323130611892964 +82.96271398579387 +0 +120 +absolute + + + +0.01 +smooth + +8.536827044993398 +47.34996954232577 +429.72767114705744 +-21.428360049600347 +82.94882755965493 +0 +120 +absolute + + + +0.01 +smooth + +8.536827501007387 +47.34996997763165 +429.7258331389553 +-21.533733081356605 +82.93492828443547 +0 +120 +absolute + + + +0.01 +smooth + +8.536827956697136 +47.34997041319761 +429.72398866020734 +-21.639248680616074 +82.92101631448232 +0 +120 +absolute + + + +0.01 +smooth + +8.536828412056975 +47.34997084902127 +429.72213783601967 +-21.744905820833186 +82.90709180414204 +0 +120 +absolute + + + +0.01 +smooth + +8.536828867081239 +47.34997128510025 +429.7202807915981 +-21.850703475462257 +82.89315490776141 +0 +120 +absolute + + + +0.01 +smooth + +8.536829321764268 +47.3499717214322 +429.71841765214884 +-21.95664061795773 +82.8792057796871 +0 +120 +absolute + + + +0.01 +smooth + +8.536829776100392 +47.34997215801472 +429.7165485428777 +-22.062716221773922 +82.86524457426574 +0 +120 +absolute + + + +0.01 +smooth + +8.536830230083961 +47.34997259484546 +429.7146735889911 +-22.16892926036529 +82.85127144584415 +0 +120 +absolute + + + +0.01 +smooth + +8.536830683709299 +47.349973031922076 +429.71279291569476 +-22.27527870718613 +82.83728654876887 +0 +120 +absolute + + + +0.01 +smooth + +8.536831136970749 +47.349973469242165 +429.71090664819496 +-22.3817635356909 +82.82329003738674 +0 +120 +absolute + + + +0.01 +smooth + +8.536831589862647 +47.34997390680339 +429.70901491169764 +-22.488382719333917 +82.80928206604439 +0 +120 +absolute + + + +0.01 +smooth + +8.536832042379329 +47.34997434460335 +429.7071178314088 +-22.595135231569614 +82.7952627890885 +0 +120 +absolute + + + +0.01 +smooth + +8.53683249451513 +47.34997478263971 +429.7052155325346 +-22.702020045852322 +82.78123236086577 +0 +120 +absolute + + + +0.01 +smooth + +8.53683294626439 +47.34997522091008 +429.7033081402809 +-22.80903613563648 +82.76719093572291 +0 +120 +absolute + + + +0.01 +smooth + +8.536833397621441 +47.34997565941209 +429.7013957798539 +-22.916182474376388 +82.75313866800659 +0 +120 +absolute + + + +0.01 +smooth + +8.53683384858062 +47.34997609814338 +429.6994785764595 +-23.02345803552651 +82.73907571206348 +0 +120 +absolute + + + +0.01 +smooth + +8.536834299136268 +47.34997653710158 +429.69755665530386 +-23.130861792541154 +82.72500222224036 +0 +120 +absolute + + + +0.01 +smooth + +8.536834749282718 +47.34997697628432 +429.69563014159314 +-23.238392718874767 +82.71091835288384 +0 +120 +absolute + + + +0.01 +smooth + +8.536835199014307 +47.349977415689246 +429.6936991605331 +-23.346049787981663 +82.69682425834065 +0 +120 +absolute + + + +0.01 +smooth + +8.536835648325377 +47.34997785531398 +429.69176383733014 +-23.4538319733163 +82.68272009295751 +0 +120 +absolute + + + +0.01 +smooth + +8.536836097210259 +47.34997829515615 +429.68982429719006 +-23.561738248332972 +82.66860601108105 +0 +120 +absolute + + + +0.01 +smooth + +8.53683654566329 +47.3499787352134 +429.6878806653188 +-23.66976758648614 +82.65448216705803 +0 +120 +absolute + + + +0.01 +smooth + +8.536836993678806 +47.34997917548335 +429.68593306692264 +-23.777918961230114 +82.64034871523509 +0 +120 +absolute + + + +0.01 +smooth + +8.536837441251144 +47.34997961596362 +429.6839816272074 +-23.88619134601933 +82.62620580995893 +0 +120 +absolute + + + +0.01 +smooth + +8.536837888374642 +47.349980056651866 +429.68202647137946 +-23.994583714308114 +82.61205360557626 +0 +120 +absolute + + + +0.01 +smooth + +8.536838335043635 +47.34998049754571 +429.68006772464446 +-24.103095039550915 +82.59789225643374 +0 +120 +absolute + + + +0.01 +smooth + +8.536838781252463 +47.34998093864279 +429.67810551220873 +-24.211724295202032 +82.58372191687815 +0 +120 +absolute + + + +0.01 +smooth + +8.536839226995461 +47.34998137994074 +429.6761399592783 +-24.320470454715934 +82.56954274125611 +0 +120 +absolute + + + +0.01 +smooth + +8.536839672266964 +47.34998182143717 +429.6741711910592 +-24.42933249154692 +82.55535488391433 +0 +120 +absolute + + + +0.01 +smooth + +8.53684011706131 +47.34998226312975 +429.6721993327572 +-24.538309379149432 +82.54115849919948 +0 +120 +absolute + + + +0.01 +smooth + +8.536840561372836 +47.34998270501607 +429.6702245095787 +-24.6474000909778 +82.5269537414583 +0 +120 +absolute + + + +0.01 +smooth + +8.536841005195875 +47.34998314709379 +429.6682468467296 +-24.75660360048646 +82.51274076503745 +0 +120 +absolute + + + +0.01 +smooth + +8.536841448524768 +47.349983589360534 +429.66626646941586 +-24.865918881129726 +82.49851972428361 +0 +120 +absolute + + + +0.01 +smooth + +8.536841891353848 +47.34998403181393 +429.6642835028438 +-24.97534490636204 +82.48429077354352 +0 +120 +absolute + + + +0.01 +smooth + +8.536842333677457 +47.3499844744516 +429.6622980722191 +-25.084880649637725 +82.47005406716386 +0 +120 +absolute + + + +0.01 +smooth + +8.536842775489927 +47.349984917271215 +429.66031030274803 +-25.194525084411232 +82.45580975949127 +0 +120 +absolute + + + +0.01 +smooth + +8.536843216785595 +47.34998536027037 +429.6583203196367 +-25.30427718413686 +82.44155800487252 +0 +120 +absolute + + + +0.01 +smooth + +8.536843657558798 +47.34998580344671 +429.6563282480909 +-25.414135922269068 +82.42729895765427 +0 +120 +absolute + + + +0.01 +smooth + +8.536844097803874 +47.34998624679786 +429.6543342133169 +-25.52410027226216 +82.41303277218321 +0 +120 +absolute + + + +0.01 +smooth + +8.536844537515158 +47.34998669032146 +429.6523383405206 +-25.6341692075706 +82.39875960280602 +0 +120 +absolute + + + +0.01 +smooth + +8.53684497668699 +47.34998713401514 +429.65034075490814 +-25.744341701648676 +82.38447960386942 +0 +120 +absolute + + + +0.01 +smooth + +8.5368454153137 +47.34998757787655 +429.6483415816856 +-25.854616727950855 +82.3701929297201 +0 +120 +absolute + + + +0.01 +smooth + +8.536845853389629 +47.34998802190328 +429.6463409460588 +-25.96499325993144 +82.35589973470474 +0 +120 +absolute + + + +0.01 +smooth + +8.536846290909114 +47.349988466092995 +429.644338973234 +-26.075470271044885 +82.34160017317002 +0 +120 +absolute + + + +0.01 +smooth + +8.536846727866493 +47.349988910443315 +429.6423357884172 +-26.186046734745503 +82.32729439946267 +0 +120 +absolute + + + +0.01 +smooth + +8.536847164256097 +47.34998935495187 +429.64033151681446 +-26.296721624487738 +82.31298256792937 +0 +120 +absolute + + + +0.01 +smooth + +8.536847600072267 +47.349989799616296 +429.6383262836318 +-26.4074939137259 +82.29866483291681 +0 +120 +absolute + + + +0.01 +smooth + +8.536848035309339 +47.34999024443425 +429.6363202140752 +-26.51836257591445 +82.28434134877168 +0 +120 +absolute + + + +0.01 +smooth + +8.536848469961647 +47.34999068940331 +429.63431343335077 +-26.62932658450768 +82.27001226984066 +0 +120 +absolute + + + +0.01 +smooth + +8.53684890402353 +47.34999113452115 +429.6323060666645 +-26.740384912960057 +82.25567775047048 +0 +120 +absolute + + + +0.01 +smooth + +8.536849337489329 +47.34999157978539 +429.63029823922255 +-26.85153653472588 +82.24133794500781 +0 +120 +absolute + + + +0.01 +smooth + +8.53684977035337 +47.34999202519366 +429.6282900762309 +-26.96278042325961 +82.22699300779934 +0 +120 +absolute + + + +0.01 +smooth + +8.53685020261 +47.349992470743594 +429.62628170289554 +-27.07411555201555 +82.21264309319176 +0 +120 +absolute + + + +0.01 +smooth + +8.536850634253549 +47.349992916432825 +429.6242732444226 +-27.18554089444811 +82.19828835553179 +0 +120 +absolute + + + +0.01 +smooth + +8.536851065278356 +47.34999336225898 +429.622264826018 +-27.29705542401172 +82.1839289491661 +0 +120 +absolute + + + +0.01 +smooth + +8.536851495678757 +47.34999380821969 +429.62025657288797 +-27.408658114160676 +82.16956502844138 +0 +120 +absolute + + + +0.01 +smooth + +8.536851925449088 +47.349994254312605 +429.6182486102384 +-27.520347938349445 +82.15519674770434 +0 +120 +absolute + + + +0.01 +smooth + +8.536852354583688 +47.34999470053533 +429.6162410632754 +-27.632123870032316 +82.14082426130167 +0 +120 +absolute + + + +0.01 +smooth + +8.536852783076894 +47.34999514688553 +429.6142340572051 +-27.743984882663753 +82.12644772358006 +0 +120 +absolute + + + +0.01 +smooth + +8.536853210923038 +47.3499955933608 +429.6122277172333 +-27.855929949698066 +82.11206728888621 +0 +120 +absolute + + + +0.01 +smooth + +8.536853638116462 +47.349996039958796 +429.6102221685662 +-27.9679580445897 +82.0976831115668 +0 +120 +absolute + + + +0.01 +smooth + +8.536854064651498 +47.349996486677156 +429.60821753640994 +-28.080068140792967 +82.08329534596852 +0 +120 +absolute + + + +0.01 +smooth + +8.536854490522487 +47.34999693351348 +429.60621394597035 +-28.192259211762323 +82.06890414643809 +0 +120 +absolute + + + +0.01 +smooth + +8.53685491572376 +47.34999738046543 +429.60421152245374 +-28.304530230952075 +82.05450966732215 +0 +120 +absolute + + + +0.01 +smooth + +8.536855340249657 +47.349997827530615 +429.6022103910658 +-28.41688017181667 +82.04011206296745 +0 +120 +absolute + + + +0.01 +smooth + +8.536855764094517 +47.34999827470669 +429.6002106770129 +-28.529308007810414 +82.02571148772068 +0 +120 +absolute + + + +0.01 +smooth + +8.536856187252672 +47.349998721991284 +429.5982125055009 +-28.641812712387768 +82.01130809592851 +0 +120 +absolute + + + +0.01 +smooth + +8.536856609718669 +47.34999916938208 +429.59621599856365 +-28.754393293633896 +81.99690203720093 +0 +120 +absolute + + + +0.01 +smooth + +8.536857031685491 +47.34999961694643 +429.59421823540174 +-28.867081903129808 +81.98248892854265 +0 +120 +absolute + + + +0.01 +smooth + +8.536857453321309 +47.350000064743114 +429.59221663995805 +-28.979906647227818 +81.96806494268193 +0 +120 +absolute + + + +0.01 +smooth + +8.536857874619688 +47.35000051276978 +429.59021129781354 +-29.092866509261892 +81.95363023626275 +0 +120 +absolute + + + +0.01 +smooth + +8.536858295574172 +47.35000096102409 +429.58820229454847 +-29.205960472565817 +81.93918496592912 +0 +120 +absolute + + + +0.01 +smooth + +8.536858716178319 +47.35000140950365 +429.58618971574344 +-29.31918752047355 +81.92472928832495 +0 +120 +absolute + + + +0.01 +smooth + +8.536859136425683 +47.35000185820612 +429.5841736469789 +-29.43254663631888 +81.91026336009433 +0 +120 +absolute + + + +0.01 +smooth + +8.536859556309814 +47.35000230712912 +429.5821541738353 +-29.546036803435754 +81.89578733788115 +0 +120 +absolute + + + +0.01 +smooth + +8.53685997582426 +47.350002756270314 +429.58013138189295 +-29.659657005157968 +81.8813013783294 +0 +120 +absolute + + + +0.01 +smooth + +8.536860394962588 +47.350003205627324 +429.57810535673264 +-29.773406224819475 +81.86680563808312 +0 +120 +absolute + + + +0.01 +smooth + +8.536860813718336 +47.35000365519781 +429.5760761839345 +-29.88728344575405 +81.8523002737862 +0 +120 +absolute + + + +0.01 +smooth + +8.536861232085062 +47.35000410497937 +429.5740439490793 +-30.00128765129567 +81.83778544208266 +0 +120 +absolute + + + +0.01 +smooth + +8.536861650056323 +47.350004554969686 +429.5720087377472 +-30.1154178247781 +81.82326129961652 +0 +120 +absolute + + + +0.01 +smooth + +8.536862067625668 +47.35000500516638 +429.5699706355188 +-30.229672949535296 +81.80872800303169 +0 +120 +absolute + + + +0.01 +smooth + +8.536862484786653 +47.35000545556709 +429.56792972797473 +-30.34405200890108 +81.79418570897221 +0 +120 +absolute + + + +0.01 +smooth + +8.536862901532826 +47.350005906169464 +429.56588610069525 +-30.45855398620937 +81.77963457408201 +0 +120 +absolute + + + +0.01 +smooth + +8.536863317857742 +47.350006356971114 +429.56383983926094 +-30.573177864793962 +81.76507475500509 +0 +120 +absolute + + + +0.01 +smooth + +8.53686373375496 +47.35000680796973 +429.5617910292523 +-30.68792262798882 +81.75050640838548 +0 +120 +absolute + + + +0.01 +smooth + +8.53686414921802 +47.35000725916289 +429.55973975624966 +-30.802787259127726 +81.73592969086704 +0 +120 +absolute + + + +0.01 +smooth + +8.536864564240487 +47.350007710548276 +429.55768610583357 +-30.917770741544626 +81.72134475909385 +0 +120 +absolute + + + +0.01 +smooth + +8.53686497881591 +47.350008162123515 +429.55563016358445 +-31.03287205857333 +81.70675176970987 +0 +120 +absolute + + + +0.01 +smooth + +8.536865392937836 +47.35000861388623 +429.55357201508275 +-31.14809019354776 +81.692150879359 +0 +120 +absolute + + + +0.01 +smooth + +8.536865806599828 +47.35000906583409 +429.55151174590907 +-31.26342412980173 +81.67754224468538 +0 +120 +absolute + + + +0.01 +smooth + +8.536866219795431 +47.35000951796472 +429.5494494416438 +-31.37887285066919 +81.66292602233284 +0 +120 +absolute + + + +0.01 +smooth + +8.536866632518201 +47.35000997027574 +429.54738518786735 +-31.49443533948392 +81.64830236894542 +0 +120 +absolute + + + +0.01 +smooth + +8.536867044761694 +47.35001042276485 +429.5453190701604 +-31.61011057957989 +81.63367144116712 +0 +120 +absolute + + + +0.01 +smooth + +8.536867456519458 +47.35001087542961 +429.54325117410315 +-31.725897554290864 +81.61903339564186 +0 +120 +absolute + + + +0.01 +smooth + +8.536867867785046 +47.35001132826771 +429.54118158527615 +-31.841795246950817 +81.60438838901368 +0 +120 +absolute + + + +0.01 +smooth + +8.536868278552015 +47.35001178127679 +429.53911038926003 +-31.95780264089353 +81.58973657792653 +0 +120 +absolute + + + +0.01 +smooth + +8.536868688813911 +47.35001223445444 +429.5370376716349 +-32.07391871945294 +81.57507811902434 +0 +120 +absolute + + + +0.01 +smooth + +8.536869098564297 +47.350012687798355 +429.5349635179816 +-32.19014246596287 +81.56041316895121 +0 +120 +absolute + + + +0.01 +smooth + +8.536869507796718 +47.35001314130615 +429.53288801388055 +-32.30647286375725 +81.54574188435105 +0 +120 +absolute + + + +0.01 +smooth + +8.53686991650473 +47.35001359497546 +429.5308112449119 +-32.42290889616987 +81.53106442186778 +0 +120 +absolute + + + +0.01 +smooth + +8.536870324681885 +47.35001404880395 +429.5287332966567 +-32.539449546534705 +81.5163809381455 +0 +120 +absolute + + + +0.01 +smooth + +8.536870732321734 +47.350014502789215 +429.5266542546947 +-32.65609379818551 +81.50169158982808 +0 +120 +absolute + + + +0.01 +smooth + +8.536871139417835 +47.35001495692893 +429.5245742046068 +-32.77284063445626 +81.48699653355958 +0 +120 +absolute + + + +0.01 +smooth + +8.536871545963738 +47.350015411220745 +429.52249323197356 +-32.88968903868074 +81.47229592598394 +0 +120 +absolute + + + +0.01 +smooth + +8.53687195195299 +47.350015865662236 +429.520411422375 +-33.00663799419289 +81.4575899237451 +0 +120 +absolute + + + +0.01 +smooth + +8.536872357379155 +47.35001632025112 +429.5183288613921 +-33.123686484326534 +81.44287868348718 +0 +120 +absolute + + + +0.01 +smooth + +8.536872762235781 +47.35001677498498 +429.51624563460507 +-33.24083349241559 +81.42816236185399 +0 +120 +absolute + + + +0.01 +smooth + +8.536873166516418 +47.35001722986148 +429.5141618275944 +-33.35807800179387 +81.4134411154896 +0 +120 +absolute + + + +0.01 +smooth + +8.53687357021462 +47.35001768487827 +429.5120775259406 +-33.47541899579531 +81.39871510103798 +0 +120 +absolute + + + +0.01 +smooth + +8.536873973323946 +47.35001814003295 +429.50999281522405 +-33.5928554577537 +81.3839844751431 +0 +120 +absolute + + + +0.01 +smooth + +8.536874375837941 +47.35001859532319 +429.50790778102527 +-33.710386371003004 +81.36924939444894 +0 +120 +absolute + + + +0.01 +smooth + +8.536874777750162 +47.350019050746624 +429.5058225089247 +-33.82801071887701 +81.35451001559949 +0 +120 +absolute + + + +0.01 +smooth + +8.53687517905416 +47.350019506300896 +429.503737084503 +-33.945727484709664 +81.33976649523872 +0 +120 +absolute + + + +0.01 +smooth + +8.53687557974349 +47.350019961983634 +429.5016515933403 +-34.063535651834755 +81.32501899001059 +0 +120 +absolute + + + +0.01 +smooth + +8.536875979811706 +47.35002041779247 +429.4995661210174 +-34.18143420358625 +81.31026765655912 +0 +120 +absolute + + + +0.01 +smooth + +8.536876379252355 +47.35002087372507 +429.49748075311453 +-34.29942212329792 +81.29551265152827 +0 +120 +absolute + + + +0.01 +smooth + +8.536876778058996 +47.35002132977905 +429.49539557521217 +-34.417498394303735 +81.28075413156202 +0 +120 +absolute + + + +0.01 +smooth + +8.536877176225179 +47.35002178595206 +429.49331067289097 +-34.53566199993747 +81.26599225330432 +0 +120 +absolute + + + +0.01 +smooth + +8.536877573744457 +47.35002224224173 +429.4912261317312 +-34.65391192353308 +81.25122717339919 +0 +120 +absolute + + + +0.01 +smooth + +8.536877970610384 +47.3500226986457 +429.48914203731346 +-34.77224714842436 +81.2364590484906 +0 +120 +absolute + + + +0.01 +smooth + +8.536878366816511 +47.35002315516162 +429.48705847521825 +-34.89066665794526 +81.22168803522254 +0 +120 +absolute + + + +0.01 +smooth + +8.536878762356395 +47.35002361178714 +429.48497553102584 +-35.00916943542958 +81.20691429023896 +0 +120 +absolute + + + +0.01 +smooth + +8.536879157223584 +47.35002406851986 +429.48289329031684 +-35.12775446421125 +81.19213797018384 +0 +120 +absolute + + + +0.01 +smooth + +8.536879551411634 +47.35002452535745 +429.48081183867185 +-35.24642072762408 +81.17735923170119 +0 +120 +absolute + + + +0.01 +smooth + +8.536879944914098 +47.35002498229754 +429.478731261671 +-35.36516720900202 +81.16257823143496 +0 +120 +absolute + + + +0.01 +smooth + +8.536880337724526 +47.35002543933777 +429.476651644895 +-35.483992891678845 +81.14779512602917 +0 +120 +absolute + + + +0.01 +smooth + +8.536880729836472 +47.350025896475785 +429.4745730739243 +-35.60289675898852 +81.13301007212775 +0 +120 +absolute + + + +0.01 +smooth + +8.536881121243493 +47.350026353709204 +429.47249563433934 +-35.72187779426484 +81.1182232263747 +0 +120 +absolute + + + +0.01 +smooth + +8.536881511939137 +47.35002681103569 +429.4704194117206 +-35.840934980841745 +81.10343474541399 +0 +120 +absolute + + + +0.01 +smooth + +8.536881901916956 +47.35002726845287 +429.4683444916485 +-35.96006730205303 +81.08864478588961 +0 +120 +absolute + + + +0.01 +smooth + +8.53688229117051 +47.35002772595839 +429.4662709597035 +-36.07927374123264 +81.07385350444554 +0 +120 +absolute + + + +0.01 +smooth + +8.536882679693345 +47.35002818354988 +429.46419890146615 +-36.19855328171438 +81.05906105772578 +0 +120 +absolute + + + +0.01 +smooth + +8.536883067479016 +47.350028641224995 +429.4621284025169 +-36.3179049068322 +81.04426760237428 +0 +120 +absolute + + + +0.01 +smooth + +8.536883454521078 +47.350029098981345 +429.4600595484362 +-36.43732759991987 +81.02947329503502 +0 +120 +absolute + + + +0.01 +smooth + +8.536883840813081 +47.350029556816594 +429.4579924248044 +-36.55682034431137 +81.01467829235196 +0 +120 +absolute + + + +0.01 +smooth + +8.53688422634858 +47.35003001472838 +429.4559271172022 +-36.67638212334047 +80.99988275096914 +0 +120 +absolute + + + +0.01 +smooth + +8.536884611121124 +47.35003047271433 +429.4538637112098 +-36.79601192034113 +80.9850868275305 +0 +120 +absolute + + + +0.01 +smooth + +8.536884995124272 +47.3500309307721 +429.45180229240793 +-36.91570871864714 +80.97029067868002 +0 +120 +absolute + + + +0.01 +smooth + +8.536885378351572 +47.3500313888993 +429.44974294637694 +-37.035471501592454 +80.95549446106166 +0 +120 +absolute + + + +0.01 +smooth + +8.53688576079658 +47.35003184709361 +429.4476857586973 +-37.15529925251086 +80.94069833131945 +0 +120 +absolute + + + +0.01 +smooth + +8.536886142452847 +47.35003230535263 +429.4456308149495 +-37.2751909547363 +80.92590244609733 +0 +120 +absolute + + + +0.01 +smooth + +8.536886523313926 +47.35003276367402 +429.4435782007139 +-37.395145591602585 +80.9111069620393 +0 +120 +absolute + + + +0.01 +smooth + +8.536886903373372 +47.35003322205542 +429.4415280015711 +-37.51516214644365 +80.89631203578931 +0 +120 +absolute + + + +0.01 +smooth + +8.536887282624734 +47.35003368049446 +429.4394803031015 +-37.6352396025933 +80.88151782399137 +0 +120 +absolute + + + +0.01 +smooth + +8.536887661061568 +47.35003413898879 +429.4374351908856 +-37.75537694338547 +80.86672448328946 +0 +120 +absolute + + + +0.01 +smooth + +8.536888038677427 +47.350034597536045 +429.43539275050387 +-37.87557315215396 +80.85193217032753 +0 +120 +absolute + + + +0.01 +smooth + +8.53688841546586 +47.350035056133855 +429.4333530675368 +-37.995827212232726 +80.83714104174959 +0 +120 +absolute + + + +0.01 +smooth + +8.536888791431167 +47.35003551478286 +429.43131613324965 +-38.11613947839398 +80.82235105659201 +0 +120 +absolute + + + +0.01 +smooth + +8.536889166872976 +47.35003597356608 +429.42927933704624 +-38.236548069399454 +80.80755673365634 +0 +120 +absolute + + + +0.01 +smooth + +8.536889541924127 +47.35003643252022 +429.42724151306953 +-38.35706991212797 +80.79275564812983 +0 +120 +absolute + + + +0.01 +smooth + +8.53688991657699 +47.35003689164298 +429.4252027261337 +-38.47770400936826 +80.7779479582976 +0 +120 +absolute + + + +0.01 +smooth + +8.53689029082393 +47.35003735093203 +429.423163041053 +-38.59844936390884 +80.76313382244476 +0 +120 +absolute + + + +0.01 +smooth + +8.536890664657305 +47.350037810384954 +429.42112252264104 +-38.719304978538446 +80.74831339885635 +0 +120 +absolute + + + +0.01 +smooth + +8.53689103806948 +47.35003826999944 +429.4190812357122 +-38.84026985604558 +80.73348684581754 +0 +120 +absolute + + + +0.01 +smooth + +8.536891411052824 +47.35003872977312 +429.41703924508056 +-38.961342999218985 +80.71865432161336 +0 +120 +absolute + + + +0.01 +smooth + +8.5368917835997 +47.350039189703665 +429.41499661556026 +-39.0825234108472 +80.70381598452897 +0 +120 +absolute + + + +0.01 +smooth + +8.536892155702468 +47.350039649788705 +429.41295341196513 +-39.203810093718886 +80.68897199284943 +0 +120 +absolute + + + +0.01 +smooth + +8.536892527353496 +47.3500401100259 +429.41090969910937 +-39.32520205062269 +80.67412250485982 +0 +120 +absolute + + + +0.01 +smooth + +8.536892898545146 +47.35004057041289 +429.40886554180696 +-39.446698284347164 +80.65926767884528 +0 +120 +absolute + + + +0.01 +smooth + +8.536893269269786 +47.35004103094734 +429.4068210048724 +-39.568297797681055 +80.6444076730909 +0 +120 +absolute + + + +0.01 +smooth + +8.536893639519777 +47.35004149162688 +429.4047761531191 +-39.68999959341285 +80.62954264588174 +0 +120 +absolute + + + +0.01 +smooth + +8.536894009287481 +47.350041952449175 +429.4027310513615 +-39.81180267433128 +80.61467275550292 +0 +120 +absolute + + + +0.01 +smooth + +8.536894378565268 +47.350042413411884 +429.40068576441377 +-39.933706043224895 +80.59979816023954 +0 +120 +absolute + + + +0.01 +smooth + +8.536894747345498 +47.350042874512624 +429.39864035708973 +-40.0557087028824 +80.5849190183767 +0 +120 +absolute + + + +0.01 +smooth + +8.536895115620535 +47.35004333574905 +429.3965948942035 +-40.177809656092315 +80.57003548819947 +0 +120 +absolute + + + +0.01 +smooth + +8.536895483382745 +47.350043797118836 +429.39454944056916 +-40.300007905643355 +80.55514772799296 +0 +120 +absolute + + + +0.01 +smooth + +8.536895850624491 +47.35004425861961 +429.392504061001 +-40.42230245432409 +80.54025589604227 +0 +120 +absolute + + + +0.01 +smooth + +8.536896217338144 +47.350044720249066 +429.39045882031303 +-40.544692304923224 +80.52536015063254 +0 +120 +absolute + + + +0.01 +smooth + +8.536896583516056 +47.350045182004784 +429.3884137833189 +-40.66717646022926 +80.51046065004877 +0 +120 +absolute + + + +0.01 +smooth + +8.5368969491506 +47.35004564388444 +429.3863690148333 +-40.789753923030936 +80.49555755257614 +0 +120 +absolute + + + +0.01 +smooth + +8.536897314234139 +47.35004610588572 +429.38432457966985 +-40.91242369611679 +80.48065101649972 +0 +120 +absolute + + + +0.01 +smooth + +8.53689767875903 +47.35004656800621 +429.3822805426426 +-41.03518478227551 +80.46574120010457 +0 +120 +absolute + + + +0.01 +smooth + +8.536898042717647 +47.350047030243616 +429.3802369685661 +-41.158036184295675 +80.45082826167585 +0 +120 +absolute + + + +0.01 +smooth + +8.536898406102349 +47.35004749259555 +429.37819392225407 +-41.28097690496597 +80.43591235949863 +0 +120 +absolute + + + +0.01 +smooth + +8.536898768905502 +47.350047955059686 +429.37615146852045 +-41.40400594707493 +80.42099365185798 +0 +120 +absolute + + + +0.01 +smooth + +8.53689913111947 +47.35004841763367 +429.37410967217977 +-41.5271223134113 +80.40607229703906 +0 +120 +absolute + + + +0.01 +smooth + +8.536899492736616 +47.350048880315136 +429.3720685980455 +-41.650325006763566 +80.3911484533269 +0 +120 +absolute + + + +0.01 +smooth + +8.536899853749304 +47.35004934310174 +429.37002831093224 +-41.77361302992048 +80.37622227900661 +0 +120 +absolute + + + +0.01 +smooth + +8.536900214149904 +47.350049805991134 +429.3679888756539 +-41.896985385670575 +80.36129393236334 +0 +120 +absolute + + + +0.01 +smooth + +8.536900573930769 +47.35005026898095 +429.36595035702425 +-42.020441076802534 +80.3463635716821 +0 +120 +absolute + + + +0.01 +smooth + +8.536900933084272 +47.35005073206888 +429.36391281985794 +-42.143979106104936 +80.33143135524807 +0 +120 +absolute + + + +0.01 +smooth + +8.536901291602778 +47.35005119525255 +429.3618763289686 +-42.267598476366466 +80.3164974413463 +0 +120 +absolute + + + +0.01 +smooth + +8.536901649478642 +47.35005165852957 +429.3598409491703 +-42.39129819037566 +80.3015619882619 +0 +120 +absolute + + + +0.01 +smooth + +8.53690200670424 +47.350052121897676 +429.3578067452774 +-42.515077250921266 +80.28662515427996 +0 +120 +absolute + + + +0.01 +smooth + +8.536902363271926 +47.35005258535443 +429.3557737821038 +-42.63893466079177 +80.27168709768557 +0 +120 +absolute + + + +0.01 +smooth + +8.536902719174071 +47.35005304889754 +429.3537421244635 +-42.76286942277592 +80.25674797676385 +0 +120 +absolute + + + +0.01 +smooth + +8.536903074403039 +47.35005351252463 +429.3517118371708 +-42.886880539662236 +80.24180794979989 +0 +120 +absolute + + + +0.01 +smooth + +8.536903428951186 +47.35005397623334 +429.3496829850394 +-43.01096701423943 +80.22686717507872 +0 +120 +absolute + + + +0.01 +smooth + +8.536903782810887 +47.35005444002134 +429.34765563288374 +-43.13512784929606 +80.21192581088556 +0 +120 +absolute + + + +0.01 +smooth + +8.536904135974499 +47.35005490388628 +429.34562984551775 +-43.259362047620826 +80.19698401550542 +0 +120 +absolute + + + +0.01 +smooth + +8.53690448843439 +47.3500553678258 +429.3436056877555 +-43.38366861200226 +80.18204194722344 +0 +120 +absolute + + + +0.01 +smooth + +8.53690484018292 +47.35005583183755 +429.341583224411 +-43.50804654522908 +80.16709976432465 +0 +120 +absolute + + + +0.01 +smooth + +8.53690519121246 +47.350056295919174 +429.3395625202985 +-43.63249485008981 +80.15215762509423 +0 +120 +absolute + + + +0.01 +smooth + +8.536905541515367 +47.35005676006835 +429.3375436402319 +-43.75701252937319 +80.13721568781722 +0 +120 +absolute + + + +0.01 +smooth + +8.536905891084011 +47.350057224282686 +429.33552664902527 +-43.881598585867735 +80.12227411077875 +0 +120 +absolute + + + +0.01 +smooth + +8.536906239910751 +47.35005768855985 +429.3335116114929 +-44.00625202236217 +80.10733305226388 +0 +120 +absolute + + + +0.01 +smooth + +8.536906587987955 +47.350058152897496 +429.3314985924485 +-44.13097184164502 +80.09239267055776 +0 +120 +absolute + + + +0.01 +smooth + +8.536906935307986 +47.35005861729327 +429.3294876567065 +-44.25575704650501 +80.07745312394543 +0 +120 +absolute + + + +0.01 +smooth + +8.536907281863208 +47.35005908174483 +429.3274788690808 +-44.38060663973067 +80.06251457071201 +0 +120 +absolute + + + +0.01 +smooth + +8.536907627645986 +47.35005954624981 +429.3254722943854 +-44.50551962411072 +80.04757716914261 +0 +120 +absolute + + + +0.01 +smooth + +8.536907972648685 +47.35006001080587 +429.3234679974346 +-44.630495002433676 +80.03264107752233 +0 +120 +absolute + + + +0.01 +smooth + +8.536908316863666 +47.35006047541064 +429.3214660430422 +-44.75553177748828 +80.01770645413622 +0 +120 +absolute + + + +0.01 +smooth + +8.536908660283293 +47.3500609400618 +429.3194664960225 +-44.88062895206305 +80.00277345726943 +0 +120 +absolute + + + +0.01 +smooth + +8.536909002899936 +47.350061404756985 +429.31746942118946 +-45.0057855289467 +79.98784224520702 +0 +120 +absolute + + + +0.01 +smooth + +8.536909344705954 +47.35006186949384 +429.3154748833572 +-45.13100051092778 +79.97291297623411 +0 +120 +absolute + + + +0.01 +smooth + +8.536909685693711 +47.35006233427001 +429.3134829473397 +-45.256272900795 +79.95798580863578 +0 +120 +absolute + + + +0.01 +smooth + +8.536910025855574 +47.35006279908316 +429.31149367795115 +-45.381601701336876 +79.94306090069715 +0 +120 +absolute + + + +0.01 +smooth + +8.536910365183907 +47.350063263930934 +429.3095071400055 +-45.50698591534214 +79.92813841070328 +0 +120 +absolute + + + +0.01 +smooth + +8.536910703671072 +47.35006372881098 +429.307523398317 +-45.63242454559933 +79.9132184969393 +0 +120 +absolute + + + +0.01 +smooth + +8.536911041309434 +47.35006419372095 +429.30554251769956 +-45.757916594897154 +79.89830131769028 +0 +120 +absolute + + + +0.01 +smooth + +8.536911378091359 +47.35006465865848 +429.30356456296727 +-45.88346106602414 +79.88338703124136 +0 +120 +absolute + + + +0.01 +smooth + +8.536911714009209 +47.35006512362123 +429.30158959893424 +-46.00905696176901 +79.86847579587757 +0 +120 +absolute + + + +0.01 +smooth + +8.53691204905535 +47.35006558860685 +429.2996176904146 +-46.13470328492031 +79.85356776988408 +0 +120 +absolute + + + +0.01 +smooth + +8.536912383222145 +47.35006605361299 +429.29764890222225 +-46.26039903826674 +79.83866311154591 +0 +120 +absolute + + + +0.01 +smooth + +8.536912716501956 +47.3500665186373 +429.29568329917146 +-46.386143224596836 +79.82376197914824 +0 +120 +absolute + + + +0.01 +smooth + +8.536913048887152 +47.350066983677415 +429.2937209460762 +-46.51193484669932 +79.80886453097611 +0 +120 +absolute + + + +0.01 +smooth + +8.536913380370095 +47.35006744873101 +429.2917619077506 +-46.637772907362724 +79.79397092531462 +0 +120 +absolute + + + +0.01 +smooth + +8.536913710943148 +47.350067913795726 +429.2898062490086 +-46.763656409375756 +79.77908132044888 +0 +120 +absolute + + + +0.01 +smooth + +8.536914040598678 +47.350068378869196 +429.28785403466435 +-46.88958435552698 +79.76419587466398 +0 +120 +absolute + + + +0.01 +smooth + +8.536914369329043 +47.350068843949074 +429.28590532953206 +-47.01555574860506 +79.74931474624502 +0 +120 +absolute + + + +0.01 +smooth + +8.536914697126615 +47.35006930903303 +429.2839601984256 +-47.141569591398564 +79.73443809347711 +0 +120 +absolute + + + +0.01 +smooth + +8.536915023983756 +47.350069774118694 +429.2820187061591 +-47.26762488669622 +79.7195660746453 +0 +120 +absolute + + + +0.01 +smooth + +8.536915349892826 +47.350070239203724 +429.2800809175466 +-47.39372063728652 +79.70469884803475 +0 +120 +absolute + + + +0.01 +smooth + +8.536915674846194 +47.35007070428577 +429.2781468974023 +-47.519855845958226 +79.68983657193051 +0 +120 +absolute + + + +0.01 +smooth + +8.536915998836223 +47.350071169362465 +429.27621671054015 +-47.64602951549984 +79.67497940461772 +0 +120 +absolute + + + +0.01 +smooth + +8.536916321855275 +47.35007163443148 +429.2742904217743 +-47.77224064870009 +79.66012750438144 +0 +120 +absolute + + + +0.01 +smooth + +8.536916643895717 +47.350072099490454 +429.27236809591886 +-47.898488248347505 +79.64528102950675 +0 +120 +absolute + + + +0.01 +smooth + +8.536916964996701 +47.35007256454706 +429.27044953017264 +-48.02477569668925 +79.63043946130459 +0 +120 +absolute + + + +0.01 +smooth + +8.53691728558279 +47.350073029691686 +429.2685323100647 +-48.151142516359215 +79.6155966963963 +0 +120 +absolute + + + +0.01 +smooth + +8.536917605749867 +47.35007349494456 +429.26661588720833 +-48.27759759228505 +79.60075137087502 +0 +120 +absolute + + + +0.01 +smooth + +8.53691792548842 +47.350073960303305 +429.2647003146438 +-48.40413995742271 +79.58590364408964 +0 +120 +absolute + + + +0.01 +smooth + +8.53691824478895 +47.35007442576561 +429.2627856454121 +-48.5307686447285 +79.57105367538914 +0 +120 +absolute + + + +0.01 +smooth + +8.536918563641942 +47.35007489132913 +429.26087193255387 +-48.65748268715835 +79.55620162412244 +0 +120 +absolute + + + +0.01 +smooth + +8.536918882037893 +47.3500753569915 +429.2589592291097 +-48.784281117668485 +79.54134764963847 +0 +120 +absolute + + + +0.01 +smooth + +8.536919199967286 +47.35007582275037 +429.2570475881199 +-48.9111629692149 +79.52649191128609 +0 +120 +absolute + + + +0.01 +smooth + +8.53691951742063 +47.350076288603425 +429.25513706262575 +-49.038127274753826 +79.51163456841431 +0 +120 +absolute + + + +0.01 +smooth + +8.536919834388405 +47.3500767545483 +429.25322770566754 +-49.165173067241255 +79.496775780372 +0 +120 +absolute + + + +0.01 +smooth + +8.536920150861103 +47.35007722058265 +429.25131957028583 +-49.29229937963338 +79.48191570650812 +0 +120 +absolute + + + +0.01 +smooth + +8.536920466829224 +47.350077686704154 +429.2494127095216 +-49.4195052448862 +79.46705450617158 +0 +120 +absolute + + + +0.01 +smooth + +8.536920782283257 +47.35007815291044 +429.2475071764152 +-49.546789695955965 +79.4521923387113 +0 +120 +absolute + + + +0.01 +smooth + +8.536921097213694 +47.35007861919918 +429.2456030240075 +-49.67415176579865 +79.43732936347621 +0 +120 +absolute + + + +0.01 +smooth + +8.536921411611031 +47.350079085568034 +429.2437003053389 +-49.801590487370454 +79.42246573981525 +0 +120 +absolute + + + +0.01 +smooth + +8.536921725465756 +47.35007955201464 +429.2417990734504 +-49.9291048936274 +79.40760162707733 +0 +120 +absolute + + + +0.01 +smooth + +8.536922038768358 +47.35008001853666 +429.2398993813822 +-50.05669401752565 +79.39273718461135 +0 +120 +absolute + + + +0.01 +smooth + +8.53692235150934 +47.35008048513176 +429.23800128217533 +-50.184356892021256 +79.37787257176629 +0 +120 +absolute + + + +0.01 +smooth + +8.536922663679187 +47.350080951797594 +429.23610482887034 +-50.31209255007041 +79.36300794789103 +0 +120 +absolute + + + +0.01 +smooth + +8.536922975268391 +47.35008141853179 +429.23421007450764 +-50.43990002462911 +79.3481434723345 +0 +120 +absolute + + + +0.01 +smooth + +8.536923286267452 +47.35008188533205 +429.2323170721283 +-50.567778348653576 +79.33327930444567 +0 +120 +absolute + + + +0.01 +smooth + +8.536923596666854 +47.35008235219599 +429.23042587477283 +-50.695726555099796 +79.31841560357343 +0 +120 +absolute + + + +0.01 +smooth + +8.536923906457096 +47.35008281912131 +429.2285365354818 +-50.82374367692398 +79.3035525290667 +0 +120 +absolute + + + +0.01 +smooth + +8.536924215628664 +47.350083286105615 +429.2266491072957 +-50.951828747082146 +79.28869024027443 +0 +120 +absolute + + + +0.01 +smooth + +8.536924524172052 +47.35008375314658 +429.22476364325536 +-51.07998079853047 +79.2738288965455 +0 +120 +absolute + + + +0.01 +smooth + +8.536924832077759 +47.350084220241875 +429.22288019640155 +-51.20819886422498 +79.25896865722886 +0 +120 +absolute + + + +0.01 +smooth + +8.536925139336269 +47.35008468738913 +429.2209988197747 +-51.33648197712186 +79.24410968167345 +0 +120 +absolute + + + +0.01 +smooth + +8.536925445938081 +47.350085154586026 +429.21911956641554 +-51.46482917017716 +79.2292521292282 +0 +120 +absolute + + + +0.01 +smooth + +8.536925751873685 +47.350085621830225 +429.2172424893649 +-51.593239476347044 +79.21439615924201 +0 +120 +absolute + + + +0.01 +smooth + +8.536926057133574 +47.35008608911935 +429.2153676416633 +-51.721711928587524 +79.19954193106383 +0 +120 +absolute + + + +0.01 +smooth + +8.536926361708238 +47.350086556451075 +429.2134950763512 +-51.85024555985476 +79.18468960404256 +0 +120 +absolute + + + +0.01 +smooth + +8.536926665588172 +47.35008702382308 +429.2116248464696 +-51.978839403104914 +79.16983933752715 +0 +120 +absolute + + + +0.01 +smooth + +8.536926968763868 +47.35008749123296 +429.20975700505886 +-52.10749249129399 +79.15499129086652 +0 +120 +absolute + + + +0.01 +smooth + +8.536927271225817 +47.350087958678415 +429.20789160515966 +-52.236203857378165 +79.14014562340954 +0 +120 +absolute + + + +0.01 +smooth + +8.536927572964515 +47.3500884261571 +429.20602869981275 +-52.36497253431347 +79.1253024945052 +0 +120 +absolute + + + +0.01 +smooth + +8.536927873970448 +47.35008889366665 +429.2041683420588 +-52.493797555056105 +79.11046206350242 +0 +120 +absolute + + + +0.01 +smooth + +8.536928174234118 +47.35008936120475 +429.20231058493846 +-52.62267795256208 +79.09562448975012 +0 +120 +absolute + + + +0.01 +smooth + +8.536928473746013 +47.35008982876904 +429.2004554814923 +-52.75161275978759 +79.08078993259723 +0 +120 +absolute + + + +0.01 +smooth + +8.536928772496623 +47.35009029635717 +429.198603084761 +-52.880601009688654 +79.06595855139264 +0 +120 +absolute + + + +0.01 +smooth + +8.536929070476441 +47.35009076396682 +429.1967534477854 +-53.00964173522147 +79.05113050548533 +0 +120 +absolute + + + +0.01 +smooth + +8.536929367675961 +47.35009123159561 +429.1949066236058 +-53.13873396934202 +79.03630595422415 +0 +120 +absolute + + + +0.01 +smooth + +8.536929664085676 +47.350091699241204 +429.193062665263 +-53.26787674500655 +79.02148505695808 +0 +120 +absolute + + + +0.01 +smooth + +8.536929959696078 +47.350092166901284 +429.19122162579777 +-53.397069095171034 +79.00666797303606 +0 +120 +absolute + + + +0.01 +smooth + +8.53693025449766 +47.35009263457348 +429.1893835582506 +-53.526310052791686 +78.99185486180697 +0 +120 +absolute + + + +0.01 +smooth + +8.536930548480912 +47.350093102255464 +429.1875485156623 +-53.65559865082452 +78.97704588261978 +0 +120 +absolute + + + +0.01 +smooth + +8.536930841636332 +47.35009356994488 +429.18571655107337 +-53.78493392222573 +78.96224119482335 +0 +120 +absolute + + + +0.01 +smooth + +8.536931133954404 +47.350094037639394 +429.18388771752456 +-53.914314899951336 +78.94744095776667 +0 +120 +absolute + + + +0.01 +smooth + +8.536931425425628 +47.35009450533664 +429.1820620680565 +-54.04374061695753 +78.93264533079865 +0 +120 +absolute + + + +0.01 +smooth + +8.536931716040494 +47.3500949730343 +429.1802396557098 +-54.17321010620031 +78.91785447326819 +0 +120 +absolute + + + +0.01 +smooth + +8.536932005789495 +47.35009544073003 +429.1784205335252 +-54.30272240063587 +78.90306854452425 +0 +120 +absolute + + + +0.01 +smooth + +8.53693229466312 +47.350095908421466 +429.1766047545432 +-54.43227653322027 +78.88828770391574 +0 +120 +absolute + + + +0.01 +smooth + +8.536932582651866 +47.35009637610627 +429.17479237180464 +-54.56187153690966 +78.87351211079157 +0 +120 +absolute + + + +0.01 +smooth + +8.536932869746224 +47.35009684378211 +429.17298343834995 +-54.69150644466007 +78.85874192450068 +0 +120 +absolute + + + +0.01 +smooth + +8.536933155936687 +47.35009731144663 +429.17117800721996 +-54.821180289427694 +78.843977304392 +0 +120 +absolute + + + +0.01 +smooth + +8.536933441213746 +47.3500977790975 +429.16937613145524 +-54.95089210416855 +78.82921840981444 +0 +120 +absolute + + + +0.01 +smooth + +8.536933725567895 +47.35009824673236 +429.16757786409653 +-55.080640921838835 +78.81446540011694 +0 +120 +absolute + + + +0.01 +smooth + +8.536934008989626 +47.35009871434887 +429.16578325818443 +-55.210425775394555 +78.79971843464844 +0 +120 +absolute + + + +0.01 +smooth + +8.536934291469429 +47.35009918194468 +429.16399236675954 +-55.3402456977919 +78.7849776727578 +0 +120 +absolute + + + +0.01 +smooth + +8.536934572997799 +47.35009964951746 +429.16220524286246 +-55.47009972198691 +78.77024327379405 +0 +120 +absolute + + + +0.01 +smooth + +8.53693485356523 +47.35010011706485 +429.1604219395341 +-55.59998688093575 +78.75551539710601 +0 +120 +absolute + + + +0.01 +smooth + +8.536935133162212 +47.350100584584524 +429.15864250981485 +-55.72990620759446 +78.74079420204268 +0 +120 +absolute + + + +0.01 +smooth + +8.53693541177924 +47.35010105207412 +429.1568670067454 +-55.85985673491922 +78.72607984795293 +0 +120 +absolute + + + +0.01 +smooth + +8.536935689406802 +47.35010151953131 +429.1550954833666 +-55.989837495866055 +78.71137249418574 +0 +120 +absolute + + + +0.01 +smooth + +8.536935966035394 +47.350101986953746 +429.15332799271886 +-56.119847523391144 +78.69667230008997 +0 +120 +absolute + + + +0.01 +smooth + +8.536936241655509 +47.350102454339066 +429.151564587843 +-56.249885850450525 +78.68197942501462 +0 +120 +absolute + + + +0.01 +smooth + +8.536936516257636 +47.35010292168495 +429.14980532177947 +-56.37995151000037 +78.66729402830858 +0 +120 +absolute + + + +0.01 +smooth + +8.536936789832273 +47.35010338898904 +429.14805024756913 +-56.51004353499671 +78.65261626932075 +0 +120 +absolute + + + +0.01 +smooth + +8.536937062369908 +47.35010385624899 +429.14629941825257 +-56.64016095839574 +78.63794630740009 +0 +120 +absolute + + + +0.01 +smooth + +8.536937333861033 +47.350104323462475 +429.14455288687043 +-56.77030281315346 +78.6232843018955 +0 +120 +absolute + + + +0.01 +smooth + +8.536937604296146 +47.350104790627135 +429.14281070646325 +-56.90046813222607 +78.60863041215592 +0 +120 +absolute + + + +0.01 +smooth + +8.536937873665734 +47.350105257740616 +429.1410729300719 +-57.03065594856959 +78.59398479753028 +0 +120 +absolute + + + +0.01 +smooth + +8.53693814196029 +47.3501057248006 +429.1393396107369 +-57.16086529514021 +78.57934761736752 +0 +120 +absolute + + + +0.01 +smooth + +8.536938409170308 +47.35010619180471 +429.1376108014989 +-57.29109520489396 +78.56471903101652 +0 +120 +absolute + + + +0.01 +smooth + +8.536938675286281 +47.35010665875064 +429.13588655539854 +-57.421344710787025 +78.55009919782626 +0 +120 +absolute + + + +0.01 +smooth + +8.5369389402987 +47.350107125636015 +429.1341669254765 +-57.55161284577541 +78.53548827714562 +0 +120 +absolute + + + +0.01 +smooth + +8.53693920419806 +47.35010759245851 +429.1324519647735 +-57.68189864281532 +78.52088642832352 +0 +120 +absolute + + + +0.01 +smooth + +8.53693946697485 +47.35010805921576 +429.1307417263301 +-57.812201134862775 +78.50629381070893 +0 +120 +absolute + + + +0.01 +smooth + +8.536939728619565 +47.350108525905455 +429.12903626318695 +-57.942519354873966 +78.49171058365074 +0 +120 +absolute + + + +0.01 +smooth + +8.536939989122699 +47.35010899252521 +429.12733562838474 +-58.0728523358049 +78.47713690649792 +0 +120 +absolute + + + +0.01 +smooth + +8.536940248474739 +47.35010945907271 +429.1256398749641 +-58.20319911061177 +78.46257293859932 +0 +120 +absolute + + + +0.01 +smooth + +8.536940506800937 +47.35010992556685 +429.12394851876854 +-58.33356743672818 +78.44801736404692 +0 +120 +absolute + + + +0.01 +smooth + +8.536940764678953 +47.35011039209805 +429.1222592639739 +-58.463994467198155 +78.4334638995352 +0 +120 +absolute + + + +0.01 +smooth + +8.536941022164877 +47.35011085867481 +429.12057188317476 +-58.594483726373 +78.41891195243939 +0 +120 +absolute + + + +0.01 +smooth + +8.536941279245953 +47.350111325294776 +429.11888642285714 +-58.72503428853595 +78.404361682838 +0 +120 +absolute + + + +0.01 +smooth + +8.536941535909428 +47.3501117919556 +429.1172029295063 +-58.8556452279701 +78.38981325080951 +0 +120 +absolute + + + +0.01 +smooth + +8.536941792142551 +47.350112258654946 +429.11552144960785 +-58.98631561895869 +78.37526681643243 +0 +120 +absolute + + + +0.01 +smooth + +8.536942047932559 +47.350112725390446 +429.11384202964734 +-59.11704453578475 +78.36072253978521 +0 +120 +absolute + + + +0.01 +smooth + +8.536942303266704 +47.35011319215978 +429.1121647161102 +-59.24783105273153 +78.3461805809464 +0 +120 +absolute + + + +0.01 +smooth + +8.536942558132228 +47.350113658960574 +429.110489555482 +-59.3786742440821 +78.33164109999441 +0 +120 +absolute + + + +0.01 +smooth + +8.536942812516374 +47.3501141257905 +429.10881659424825 +-59.5095731841197 +78.31710425700783 +0 +120 +absolute + + + +0.01 +smooth + +8.536943066406398 +47.3501145926472 +429.10714587889476 +-59.64052694712741 +78.3025702120651 +0 +120 +absolute + + + +0.01 +smooth + +8.53694331978953 +47.35011505952833 +429.10547745590657 +-59.771534607388446 +78.28803912524471 +0 +120 +absolute + + + +0.01 +smooth + +8.536943572653025 +47.35011552643152 +429.1038113717695 +-59.90259523918586 +78.27351115662513 +0 +120 +absolute + + + +0.01 +smooth + +8.536943824984128 +47.35011599335448 +429.1021476729692 +-60.03370791680293 +78.25898646628495 +0 +120 +absolute + + + +0.01 +smooth + +8.536944076770077 +47.35011646029479 +429.10048640599086 +-60.164871714522675 +78.24446521430254 +0 +120 +absolute + + + +0.01 +smooth + +8.536944327998123 +47.35011692725014 +429.0988276173202 +-60.29608570662837 +78.22994756075643 +0 +120 +absolute + + + +0.01 +smooth + +8.536944578655511 +47.35011739421819 +429.09717135344266 +-60.427348967403056 +78.21543366572516 +0 +120 +absolute + + + +0.01 +smooth + +8.536944828729485 +47.35011786119657 +429.09551766084394 +-60.55866057112999 +78.20092368928715 +0 +120 +absolute + + + +0.01 +smooth + +8.536945078207292 +47.350118328182965 +429.09386658600954 +-60.690019592092234 +78.18641779152095 +0 +120 +absolute + + + +0.01 +smooth + +8.536945327076175 +47.35011879517499 +429.09221817542476 +-60.821425104573 +78.17191613250505 +0 +120 +absolute + + + +0.01 +smooth + +8.536945575323378 +47.35011926217031 +429.09057247557524 +-60.952876182855384 +78.15741887231789 +0 +120 +absolute + + + +0.01 +smooth + +8.536945822936152 +47.35011972916661 +429.0889295329468 +-61.084371901222625 +78.14292617103803 +0 +120 +absolute + + + +0.01 +smooth + +8.536946069901735 +47.35012019616147 +429.08728939402454 +-61.21591133395775 +78.12843818874389 +0 +120 +absolute + + + +0.01 +smooth + +8.536946316207375 +47.35012066315261 +429.0856521052941 +-61.34749355534404 +78.11395508551401 +0 +120 +absolute + + + +0.01 +smooth + +8.536946561840319 +47.35012113013765 +429.0840177132413 +-61.47911763966454 +78.09947702142688 +0 +120 +absolute + + + +0.01 +smooth + +8.536946806787807 +47.35012159711425 +429.08238626435116 +-61.61078266120246 +78.08500415656094 +0 +120 +absolute + + + +0.01 +smooth + +8.536947051037092 +47.35012206408007 +429.08075780510967 +-61.74248769424093 +78.07053665099475 +0 +120 +absolute + + + +0.01 +smooth + +8.536947294575414 +47.350122531032746 +429.0791323820023 +-61.87423181306314 +78.05607466480679 +0 +120 +absolute + + + +0.01 +smooth + +8.536947537390017 +47.35012299796993 +429.07751004151413 +-62.006014091952146 +78.04161835807552 +0 +120 +absolute + + + +0.01 +smooth + +8.536947779468154 +47.35012346488932 +429.07589083013147 +-62.13783360519126 +78.02716789087947 +0 +120 +absolute + + + +0.01 +smooth + +8.536948020797059 +47.35012393178849 +429.07427479433903 +-62.269689427063454 +78.01272342329709 +0 +120 +absolute + + + +0.01 +smooth + +8.536948261363985 +47.350124398665145 +429.07266198062274 +-62.40158063185201 +77.99828511540687 +0 +120 +absolute + + + +0.01 +smooth + +8.536948501156177 +47.35012486551694 +429.0710524354683 +-62.53350629384 +77.98385312728738 +0 +120 +absolute + + + +0.01 +smooth + +8.536948740160872 +47.350125332341484 +429.0694462053607 +-62.66546548731062 +77.969427619017 +0 +120 +absolute + + + +0.01 +smooth + +8.536948978365325 +47.350125799136485 +429.06784333678604 +-62.797457286547 +77.9550087506743 +0 +120 +absolute + + + +0.01 +smooth + +8.536949215756778 +47.35012626589956 +429.0662438762296 +-62.92948076583233 +77.94059668233774 +0 +120 +absolute + + + +0.01 +smooth + +8.536949452322473 +47.35012673262836 +429.06464787017677 +-63.06153499944969 +77.92619157408583 +0 +120 +absolute + + + +0.01 +smooth + +8.536949688049662 +47.350127199320575 +429.06305536511354 +-63.19361906168233 +77.91179358599707 +0 +120 +absolute + + + +0.01 +smooth + +8.536949922925583 +47.35012766597381 +429.06146640752485 +-63.325732026813256 +77.89740287814992 +0 +120 +absolute + + + +0.01 +smooth + +8.536950156937483 +47.35012813258573 +429.0598810438966 +-63.45787296912579 +77.88301961062288 +0 +120 +absolute + + + +0.01 +smooth + +8.53695039007261 +47.35012859915401 +429.0582993207141 +-63.59004096290294 +77.86864394349446 +0 +120 +absolute + + + +0.01 +smooth + +8.536950622318205 +47.35012906567628 +429.05672128446315 +-63.722235082427964 +77.85427603684313 +0 +120 +absolute + + + +0.01 +smooth + +8.53695085366152 +47.35012953215019 +429.0551469816291 +-63.85445440198392 +77.83991605074738 +0 +120 +absolute + + + +0.01 +smooth + +8.536951084089791 +47.35012999857341 +429.0535764586975 +-63.98669799585406 +77.82556414528572 +0 +120 +absolute + + + +0.01 +smooth + +8.53695131359027 +47.350130464943575 +429.05200976215383 +-64.11896493832143 +77.81122048053666 +0 +120 +absolute + + + +0.01 +smooth + +8.536951542150202 +47.35013093125835 +429.05044693848373 +-64.25125430366927 +77.79688521657864 +0 +120 +absolute + + + +0.01 +smooth + +8.53695176975683 +47.35013139751538 +429.0488880341727 +-64.38356516618067 +77.7825585134902 +0 +120 +absolute + + + +0.01 +smooth + +8.536951996397395 +47.35013186371232 +429.04733309570616 +-64.51589660013883 +77.76824053134979 +0 +120 +absolute + + + +0.01 +smooth + +8.536952222059151 +47.35013232984682 +429.04578216956975 +-64.64824767982685 +77.75393143023594 +0 +120 +absolute + + + +0.01 +smooth + +8.536952446729337 +47.35013279591655 +429.04423530224904 +-64.78061747952793 +77.7396313702271 +0 +120 +absolute + + + +0.01 +smooth + +8.536952670395202 +47.350133261919126 +429.0426925402294 +-64.91300507352518 +77.72534051140181 +0 +120 +absolute + + + +0.01 +smooth + +8.536952893043987 +47.35013372785223 +429.0411539299964 +-65.04540953610181 +77.71105901383852 +0 +120 +absolute + + + +0.01 +smooth + +8.536953114662941 +47.350134193713515 +429.03961951803575 +-65.17782994154089 +77.69678703761576 +0 +120 +absolute + + + +0.01 +smooth + +8.536953335239303 +47.35013465950062 +429.0380893508328 +-65.3102653641256 +77.68252474281199 +0 +120 +absolute + + + +0.01 +smooth + +8.536953554760327 +47.35013512521118 +429.03656347487305 +-65.44271487813916 +77.66827228950571 +0 +120 +absolute + + + +0.01 +smooth + +8.536953773213254 +47.350135590842896 +429.0350419366422 +-65.5751775578646 +77.65402983777544 +0 +120 +absolute + + + +0.01 +smooth + +8.536953990585328 +47.35013605639338 +429.03352478262565 +-65.70765247758521 +77.63979754769962 +0 +120 +absolute + + + +0.01 +smooth + +8.536954206863793 +47.35013652186029 +429.03201205930884 +-65.84013871158402 +77.62557557935678 +0 +120 +absolute + + + +0.01 +smooth + +8.536954422035901 +47.3501369872413 +429.0305038131776 +-65.97263533414426 +77.61136409282537 +0 +120 +absolute + + + +0.01 +smooth + +8.53695463608889 +47.350137452534035 +429.02900009071715 +-66.10514141954901 +77.59716324818395 +0 +120 +absolute + + + +0.01 +smooth + +8.536954849010007 +47.35013791773616 +429.02750093841325 +-66.23765604208151 +77.58297320551095 +0 +120 +absolute + + + +0.01 +smooth + +8.5369550607865 +47.35013838284534 +429.0260064027512 +-66.37017827602483 +77.5687941248849 +0 +120 +absolute + + + +0.01 +smooth + +8.53695527140561 +47.3501388478592 +429.02451653021666 +-66.5027071956622 +77.55462616638428 +0 +120 +absolute + + + +0.01 +smooth + +8.536955480854584 +47.35013931277541 +429.02303136729523 +-66.63524187527668 +77.54046949008757 +0 +120 +absolute + + + +0.01 +smooth + +8.536955689120667 +47.35013977759162 +429.0215509604723 +-66.7677813891515 +77.52632425607328 +0 +120 +absolute + + + +0.01 +smooth + +8.536955896191108 +47.35014024230548 +429.02007535623346 +-66.90032481156975 +77.51219062441989 +0 +120 +absolute + + + +0.01 +smooth + +8.536956102053146 +47.350140706914644 +429.0186046010642 +-67.03287121681464 +77.49806875520588 +0 +120 +absolute + + + +0.01 +smooth + +8.53695630669403 +47.350141171416766 +429.0171387414502 +-67.16541967916926 +77.48395880850978 +0 +120 +absolute + + + +0.01 +smooth + +8.536956510101003 +47.35014163580949 +429.01567782387684 +-67.29796927291683 +77.46986094441004 +0 +120 +absolute + + + +0.01 +smooth + +8.536956712261311 +47.35014210009048 +429.0142218948296 +-67.43051907234045 +77.45577532298519 +0 +120 +absolute + + + +0.01 +smooth + +8.5369569131622 +47.35014256425738 +429.0127710007941 +-67.56306815172329 +77.44170210431368 +0 +120 +absolute + + + +0.01 +smooth + +8.536957112790917 +47.35014302830785 +429.0113251882558 +-67.69561558534846 +77.42764144847403 +0 +120 +absolute + + + +0.01 +smooth + +8.536957311134701 +47.350143492239525 +429.00988450370045 +-67.82816044749922 +77.41359351554473 +0 +120 +absolute + + + +0.01 +smooth + +8.536957508180803 +47.35014395605007 +429.0084489936133 +-67.96070181245858 +77.39955846560427 +0 +120 +absolute + + + +0.01 +smooth + +8.536957703916466 +47.35014441973715 +429.00701870448 +-68.0932387545098 +77.38553645873114 +0 +120 +absolute + + + +0.01 +smooth + +8.536957898328936 +47.35014488329839 +429.00559368278607 +-68.22577034793598 +77.37152765500382 +0 +120 +absolute + + + +0.01 +smooth + +8.536958091405456 +47.350145346731466 +429.0041739750171 +-68.35829566702031 +77.35753221450082 +0 +120 +absolute + + + +0.01 +smooth + +8.536958283133274 +47.350145810034014 +429.0027596276586 +-68.49081378604588 +77.34355029730064 +0 +120 +absolute + + + +0.01 +smooth + +8.53695847349963 +47.35014627320369 +429.0013506871959 +-68.62332377929592 +77.32958206348172 +0 +120 +absolute + + + +0.01 +smooth + +8.536958662491779 +47.35014673623816 +428.9999472001148 +-68.75582472105347 +77.3156276731226 +0 +120 +absolute + + + +0.01 +smooth + +8.536958850445512 +47.35014719917221 +428.9985482616414 +-68.88832979391698 +77.30168462410606 +0 +120 +absolute + + + +0.01 +smooth + +8.536959038149618 +47.35014766208924 +428.9971517193659 +-69.02087068987657 +77.28774692722028 +0 +120 +absolute + + + +0.01 +smooth + +8.536959225616744 +47.35014812499038 +428.9957575288638 +-69.15344784191107 +77.27381449677411 +0 +120 +absolute + + + +0.01 +smooth + +8.536959412827184 +47.350148587873235 +428.99436573379796 +-69.28606037665494 +77.25988749367674 +0 +120 +absolute + + + +0.01 +smooth + +8.536959599761222 +47.35014905073545 +428.9929763778312 +-69.41870742074275 +77.2459660788375 +0 +120 +absolute + + + +0.01 +smooth + +8.536959786399155 +47.35014951357465 +428.99158950462606 +-69.55138810080874 +77.23205041316545 +0 +120 +absolute + + + +0.01 +smooth + +8.536959972721275 +47.350149976388465 +428.9902051578454 +-69.68410154348757 +77.21814065756988 +0 +120 +absolute + + + +0.01 +smooth + +8.536960158707874 +47.350150439174534 +428.988823381152 +-69.81684687541359 +77.20423697295999 +0 +120 +absolute + + + +0.01 +smooth + +8.536960344339244 +47.350150901930526 +428.98744421820874 +-69.94962322322135 +77.190339520245 +0 +120 +absolute + + + +0.01 +smooth + +8.536960529595675 +47.35015136465402 +428.986067712678 +-70.08242971354521 +77.17644846033409 +0 +120 +absolute + + + +0.01 +smooth + +8.53696071445746 +47.35015182734267 +428.9846939082229 +-70.21526547301974 +77.16256395413647 +0 +120 +absolute + + + +0.01 +smooth + +8.536960898904896 +47.35015228999413 +428.983322848506 +-70.34812962827932 +77.1486861625614 +0 +120 +absolute + + + +0.01 +smooth + +8.536961082918262 +47.35015275260599 +428.9819545771901 +-70.48102130595848 +77.134815246518 +0 +120 +absolute + + + +0.01 +smooth + +8.536961266477865 +47.35015321517594 +428.9805891379382 +-70.61393963269163 +77.12095136691559 +0 +120 +absolute + + + +0.01 +smooth + +8.536961449563988 +47.35015367770159 +428.9792265744127 +-70.74688373511329 +77.1070946846633 +0 +120 +absolute + + + +0.01 +smooth + +8.536961632156926 +47.35015414018054 +428.97786693027643 +-70.87985273985782 +77.09324536067035 +0 +120 +absolute + + + +0.01 +smooth + +8.536961814236973 +47.3501546026105 +428.97651024919236 +-71.01284577355986 +77.079403555846 +0 +120 +absolute + + + +0.01 +smooth + +8.536961995784415 +47.35015506498903 +428.9751565748231 +-71.14586196285364 +77.0655694310994 +0 +120 +absolute + + + +0.01 +smooth + +8.536962176779548 +47.35015552731379 +428.97380595083126 +-71.27890043437385 +77.05174314733979 +0 +120 +absolute + + + +0.01 +smooth + +8.536962357202666 +47.35015598958245 +428.97245842087995 +-71.41196031475482 +77.03792486547641 +0 +120 +absolute + + + +0.01 +smooth + +8.536962537034054 +47.350156451792564 +428.97111402863146 +-71.54504073063104 +77.02411474641836 +0 +120 +absolute + + + +0.01 +smooth + +8.536962716254013 +47.35015691394186 +428.9697728177491 +-71.678140808637 +77.01031295107498 +0 +120 +absolute + + + +0.01 +smooth + +8.53696289484283 +47.3501573760279 +428.9684348318952 +-71.81125967540714 +76.99651964035542 +0 +120 +absolute + + + +0.01 +smooth + +8.536963072780797 +47.350157838048354 +428.9671001147327 +-71.94439645757589 +76.98273497516885 +0 +120 +absolute + + + +0.01 +smooth + +8.536963250048208 +47.35015830000086 +428.9657687099245 +-72.07755028177783 +76.9689591164246 +0 +120 +absolute + + + +0.01 +smooth + +8.536963426625352 +47.35015876188303 +428.9644406611329 +-72.21072027464727 +76.95519222503174 +0 +120 +absolute + + + +0.01 +smooth + +8.53696360249252 +47.3501592236925 +428.96311601202103 +-72.34390556281879 +76.94143446189958 +0 +120 +absolute + + + +0.01 +smooth + +8.536963777630016 +47.35015968542693 +428.9617948062516 +-72.4771052729268 +76.92768598793727 +0 +120 +absolute + + + +0.01 +smooth + +8.53696395201811 +47.35016014708391 +428.96047708748716 +-72.61031853160578 +76.91394696405403 +0 +120 +absolute + + + +0.01 +smooth + +8.536964125637118 +47.35016060866113 +428.95916289939083 +-72.74354446549017 +76.90021755115913 +0 +120 +absolute + + + +0.01 +smooth + +8.536964298467314 +47.35016107015619 +428.9578522856251 +-72.8767822012145 +76.88649791016168 +0 +120 +absolute + + + +0.01 +smooth + +8.536964470488998 +47.350161531566705 +428.9565452898527 +-73.01003086541311 +76.87278820197096 +0 +120 +absolute + + + +0.01 +smooth + +8.536964641682463 +47.35016199289037 +428.9552419557367 +-73.14328958472065 +76.85908858749622 +0 +120 +absolute + + + +0.01 +smooth + +8.536964812027998 +47.35016245412476 +428.9539423269395 +-73.27655748577136 +76.84539922764654 +0 +120 +absolute + + + +0.01 +smooth + +8.536964981505895 +47.35016291526754 +428.95264644712404 +-73.40983369519991 +76.83172028333124 +0 +120 +absolute + + + +0.01 +smooth + +8.536965150096448 +47.35016337631635 +428.95135435995303 +-73.54311733964062 +76.81805191545949 +0 +120 +absolute + + + +0.01 +smooth + +8.536965317779945 +47.35016383726877 +428.9500661090891 +-73.67640754572801 +76.80439428494046 +0 +120 +absolute + + + +0.01 +smooth + +8.536965484536685 +47.35016429812251 +428.9487817381953 +-73.80970344009654 +76.79074755268347 +0 +120 +absolute + + + +0.01 +smooth + +8.536965650346955 +47.35016475887517 +428.94750129093416 +-73.9430041493807 +76.77711187959763 +0 +120 +absolute + + + +0.01 +smooth + +8.536965815191046 +47.350165219524364 +428.9462248109685 +-74.07630880021486 +76.76348742659216 +0 +120 +absolute + + + +0.01 +smooth + +8.536965979049253 +47.35016568006776 +428.94495234196114 +-74.20961651923363 +76.74987435457633 +0 +120 +absolute + + + +0.01 +smooth + +8.536966141901866 +47.35016614050297 +428.9436839275748 +-74.34292643307134 +76.73627282445929 +0 +120 +absolute + + + +0.01 +smooth + +8.53696630372918 +47.35016660082765 +428.9424196114721 +-74.47623766836254 +76.72268299715029 +0 +120 +absolute + + + +0.01 +smooth + +8.536966464511483 +47.35016706103941 +428.94115943731606 +-74.60954935174162 +76.70910503355852 +0 +120 +absolute + + + +0.01 +smooth + +8.536966624229072 +47.35016752113589 +428.93990344876914 +-74.74286060984312 +76.69553909459317 +0 +120 +absolute + + + +0.01 +smooth + +8.536966782862233 +47.350167981114744 +428.9386516894944 +-74.87617056930144 +76.68198534116348 +0 +120 +absolute + + + +0.01 +smooth + +8.536966940391263 +47.35016844097358 +428.9374042031544 +-75.0094783567511 +76.66844393417867 +0 +120 +absolute + + + +0.01 +smooth + +8.53696709679645 +47.35016890071005 +428.93616103341196 +-75.1427830988265 +76.65491503454791 +0 +120 +absolute + + + +0.01 +smooth + +8.53696725205809 +47.350169360321786 +428.9349222239298 +-75.27608392216217 +76.64139880318044 +0 +120 +absolute + + + +0.01 +smooth + +8.53696740615647 +47.35016981980641 +428.9336878183707 +-75.40937995339252 +76.62789540098547 +0 +120 +absolute + + + +0.01 +smooth + +8.53696755907189 +47.350170279161574 +428.93245786039745 +-75.54267031915205 +76.6144049888722 +0 +120 +absolute + + + +0.01 +smooth + +8.536967710784635 +47.3501707383849 +428.93123239367264 +-75.67595414607518 +76.60092772774982 +0 +120 +absolute + + + +0.01 +smooth + +8.536967861274999 +47.35017119747401 +428.93001146185935 +-75.80923056079644 +76.58746377852758 +0 +120 +absolute + + + +0.01 +smooth + +8.536968010523273 +47.35017165642657 +428.9287951086201 +-75.94249868995021 +76.57401330211466 +0 +120 +absolute + + + +0.01 +smooth + +8.536968158509751 +47.3501721152402 +428.9275833776177 +-76.07575766017106 +76.5605764594203 +0 +120 +absolute + + + +0.01 +smooth + +8.536968305214726 +47.350172573912516 +428.92637631251483 +-76.20900659809334 +76.54715341135366 +0 +120 +absolute + + + +0.01 +smooth + +8.536968450618488 +47.350173032441184 +428.9251739569744 +-76.3422446303516 +76.53374431882402 +0 +120 +absolute + + + +0.01 +smooth + +8.536968594701328 +47.35017349082382 +428.9239763546591 +-76.47547088358024 +76.52034934274052 +0 +120 +absolute + + + +0.01 +smooth + +8.536968737443539 +47.350173949058046 +428.9227835492316 +-76.6086844844138 +76.5069686440124 +0 +120 +absolute + + + +0.01 +smooth + +8.536968878825412 +47.35017440714154 +428.92159558435486 +-76.74188455948664 +76.49360238354889 +0 +120 +absolute + + + +0.01 +smooth + +8.536969018827243 +47.350174865071885 +428.92041250369147 +-76.87507023543333 +76.48025072225917 +0 +120 +absolute + + + +0.01 +smooth + +8.536969157429322 +47.35017532284674 +428.9192343509043 +-77.00824063888825 +76.46691382105246 +0 +120 +absolute + + + +0.01 +smooth + +8.536969294611938 +47.35017578046374 +428.91806116965586 +-77.14139489648593 +76.45359184083799 +0 +120 +absolute + + + +0.01 +smooth + +8.536969430355386 +47.350176237920515 +428.91689300360923 +-77.27453213486075 +76.44028494252493 +0 +120 +absolute + + + +0.01 +smooth + +8.536969564639957 +47.3501766952147 +428.915729896427 +-77.4076514806473 +76.4269932870225 +0 +120 +absolute + + + +0.01 +smooth + +8.536969697445944 +47.35017715234393 +428.91457189177197 +-77.5407520604799 +76.41371703523993 +0 +120 +absolute + + + +0.01 +smooth + +8.53696982875364 +47.350177609305845 +428.9134190333068 +-77.67383300099314 +76.40045634808642 +0 +120 +absolute + + + +0.01 +smooth + +8.536969958543333 +47.350178066098074 +428.91227136469445 +-77.80689342882135 +76.38721138647118 +0 +120 +absolute + + + +0.01 +smooth + +8.536970086795318 +47.35017852271824 +428.9111289295975 +-77.93993247059916 +76.37398231130342 +0 +120 +absolute + + + +0.01 +smooth + +8.536970213489887 +47.350178979164 +428.90999177167885 +-78.07294925296087 +76.36076928349235 +0 +120 +absolute + + + +0.01 +smooth + +8.53697033860733 +47.35017943543297 +428.9088599346011 +-78.20594290254107 +76.34757246394717 +0 +120 +absolute + + + +0.01 +smooth + +8.536970462127943 +47.350179891522785 +428.90773346202695 +-78.33891254597411 +76.33439201357712 +0 +120 +absolute + + + +0.01 +smooth + +8.536970584032016 +47.35018034743109 +428.9066123976195 +-78.47185730989459 +76.32122809329138 +0 +120 +absolute + + + +0.01 +smooth + +8.536970704299836 +47.35018080315551 +428.9054967850412 +-78.60477632093682 +76.30808086399915 +0 +120 +absolute + + + +0.01 +smooth + +8.536970822911703 +47.350181258693695 +428.90438666795495 +-78.73766870573539 +76.2949504866097 +0 +120 +absolute + + + +0.01 +smooth + +8.536970939847906 +47.35018171404326 +428.90328209002337 +-78.87053359092468 +76.28183712203216 +0 +120 +absolute + + + +0.01 +smooth + +8.536971055088737 +47.350182169201844 +428.9021830949094 +-79.0033701031392 +76.26874093117581 +0 +120 +absolute + + + +0.01 +smooth + +8.536971168614487 +47.35018262416709 +428.9010897262757 +-79.13617736901344 +76.25566207494981 +0 +120 +absolute + + + +0.01 +smooth + +8.536971280405446 +47.35018307893662 +428.9000020277851 +-79.26895451518178 +76.24260071426339 +0 +120 +absolute + + + +0.01 +smooth + +8.536971390441913 +47.35018353350807 +428.8989200431002 +-79.40170066827876 +76.22955701002576 +0 +120 +absolute + + + +0.01 +smooth + +8.536971499779089 +47.35018398793776 +428.89784223140157 +-79.53443520259609 +76.21652677201003 +0 +120 +absolute + + + +0.01 +smooth + +8.53697160968374 +47.350184442294506 +428.8967667144086 +-79.66718185089711 +76.20350488294177 +0 +120 +absolute + + + +0.01 +smooth + +8.53697172011116 +47.35018489657604 +428.8956935321878 +-79.79993985855073 +76.19049149330813 +0 +120 +absolute + + + +0.01 +smooth + +8.536971831013659 +47.350185350779995 +428.8946227291955 +-79.93270841486442 +76.17748676564989 +0 +120 +absolute + + + +0.01 +smooth + +8.536971942343545 +47.350185804903916 +428.8935543498877 +-80.06548670914559 +76.16449086250788 +0 +120 +absolute + + + +0.01 +smooth + +8.536972054053136 +47.35018625894547 +428.8924884387212 +-80.19827393070177 +76.15150394642296 +0 +120 +absolute + + + +0.01 +smooth + +8.536972166094737 +47.350186712902214 +428.891425040152 +-80.33106926884031 +76.138526179936 +0 +120 +absolute + + + +0.01 +smooth + +8.536972278420661 +47.350187166771775 +428.8903641986361 +-80.4638719128687 +76.12555772558775 +0 +120 +absolute + + + +0.01 +smooth + +8.53697239098321 +47.350187620551715 +428.88930595862985 +-80.5966810520943 +76.1125987459191 +0 +120 +absolute + + + +0.01 +smooth + +8.53697250373471 +47.35018807423968 +428.88825036458985 +-80.72949587582468 +76.09964940347085 +0 +120 +absolute + + + +0.01 +smooth + +8.53697261662746 +47.350188527833254 +428.887197460972 +-80.86231557336718 +76.08670986078384 +0 +120 +absolute + + + +0.01 +smooth + +8.536972729613774 +47.35018898133002 +428.88614729223275 +-80.9951393340293 +76.07378028039896 +0 +120 +absolute + + + +0.01 +smooth + +8.53697284264596 +47.35018943472759 +428.88509990282813 +-81.12796634711843 +76.06086082485695 +0 +120 +absolute + + + +0.01 +smooth + +8.536972955676331 +47.35018988802356 +428.88405533721453 +-81.26079580194201 +76.04795165669864 +0 +120 +absolute + + + +0.01 +smooth + +8.536973068657195 +47.35019034121553 +428.88301363984823 +-81.39362688780753 +76.03505293846497 +0 +120 +absolute + + + +0.01 +smooth + +8.536973181540867 +47.3501907943011 +428.8819748551855 +-81.52645879402243 +76.02216483269667 +0 +120 +absolute + + + +0.01 +smooth + +8.53697329427965 +47.35019124727788 +428.88093902768236 +-81.65929070989405 +76.0092875019346 +0 +120 +absolute + + + +0.01 +smooth + +8.536973406825863 +47.35019170014346 +428.87990620179534 +-81.79212182472996 +75.99642110871962 +0 +120 +absolute + + + +0.01 +smooth + +8.53697351913181 +47.35019215289545 +428.8788764219807 +-81.92495132783752 +75.98356581559253 +0 +120 +absolute + + + +0.01 +smooth + +8.536973631149806 +47.350192605531454 +428.8778497326946 +-82.05777840852424 +75.97072178509416 +0 +120 +absolute + + + +0.01 +smooth + +8.536973742832158 +47.350193058049044 +428.87682617839306 +-82.19060225609745 +75.95788917976537 +0 +120 +absolute + + + +0.01 +smooth + +8.536973854131176 +47.350193510445834 +428.8758058035326 +-82.3234220598647 +75.94506816214697 +0 +120 +absolute + + + +0.01 +smooth + +8.536973964999174 +47.35019396271943 +428.8747886525695 +-82.45623700913335 +75.93225889477979 +0 +120 +absolute + + + +0.01 +smooth + +8.536974075388457 +47.35019441486743 +428.8737747699598 +-82.5890462932109 +75.91946154020467 +0 +120 +absolute + + + +0.01 +smooth + +8.53697418525134 +47.350194866887435 +428.87276420016 +-82.72184910140476 +75.90667626096244 +0 +120 +absolute + + + +0.01 +smooth + +8.536974294540135 +47.35019531877705 +428.87175698762627 +-82.85464462302238 +75.89390321959394 +0 +120 +absolute + + + +0.01 +smooth + +8.536974403207148 +47.35019577053387 +428.87075317681484 +-82.98743204737119 +75.88114257864 +0 +120 +absolute + + + +0.01 +smooth + +8.536974511204692 +47.35019622215549 +428.8697528121819 +-83.12021056375865 +75.86839450064144 +0 +120 +absolute + + + +0.01 +smooth + +8.536974618485077 +47.350196673639516 +428.86875593818377 +-83.25297936149218 +75.8556591481391 +0 +120 +absolute + + + +0.01 +smooth + +8.536974725000611 +47.35019712498354 +428.8677625992766 +-83.38573762987923 +75.84293668367381 +0 +120 +absolute + + + +0.01 +smooth + +8.536974830703606 +47.350197576185145 +428.86677283991673 +-83.51848455822719 +75.83022726978639 +0 +120 +absolute + + + +0.01 +smooth + +8.536974935546375 +47.35019802724197 +428.86578670456043 +-83.6512193358436 +75.81753106901769 +0 +120 +absolute + + + +0.01 +smooth + +8.536975039481222 +47.3501984781516 +428.8648042376639 +-83.78394115203581 +75.80484824390854 +0 +120 +absolute + + + +0.01 +smooth + +8.536975142460465 +47.35019892891164 +428.8638254836835 +-83.91664919611132 +75.79217895699975 +0 +120 +absolute + + + +0.01 +smooth + +8.536975244436412 +47.35019937951968 +428.8628504870754 +-84.04934265737755 +75.7795233708322 +0 +120 +absolute + + + +0.01 +smooth + +8.536975345361373 +47.35019982997332 +428.86187929229584 +-84.18202072514195 +75.76688164794666 +0 +120 +absolute + + + +0.01 +smooth + +8.536975445187657 +47.35020028027017 +428.8609119438012 +-84.31468258871193 +75.75425395088402 +0 +120 +absolute + + + +0.01 +smooth + +8.536975543867575 +47.35020073040782 +428.8599484860474 +-84.44732743739496 +75.74164044218506 +0 +120 +absolute + + + +0.01 +smooth + +8.536975641353438 +47.35020118038386 +428.85898896349096 +-84.57995446049841 +75.72904128439063 +0 +120 +absolute + + + +0.01 +smooth + +8.536975737597553 +47.35020163019591 +428.8580334205882 +-84.71256284732986 +75.71645664004159 +0 +120 +absolute + + + +0.01 +smooth + +8.536975832552237 +47.35020207984157 +428.8570819017952 +-84.84515178719661 +75.70388667167876 +0 +120 +absolute + + + +0.01 +smooth + +8.536975926169799 +47.35020252931842 +428.85613445156815 +-84.97772046940621 +75.69133154184294 +0 +120 +absolute + + + +0.01 +smooth + +8.536976018402543 +47.3502029786241 +428.85519111436355 +-85.11026808326602 +75.67879141307499 +0 +120 +absolute + + + +0.01 +smooth + +8.536976109202786 +47.35020342775617 +428.8542519346375 +-85.24279381808353 +75.66626644791573 +0 +120 +absolute + + + +0.01 +smooth + +8.536976198522837 +47.35020387671223 +428.85331695684624 +-85.37529686316611 +75.653756808906 +0 +120 +absolute + + + +0.01 +smooth + +8.536976286315005 +47.350204325489905 +428.8523862254461 +-85.50777640782131 +75.64126265858661 +0 +120 +absolute + + + +0.01 +smooth + +8.536976372531601 +47.35020477408678 +428.8514597848932 +-85.64023164135646 +75.62878415949845 +0 +120 +absolute + + + +0.01 +smooth + +8.536976457124936 +47.35020522250046 +428.850537679644 +-85.7726617530791 +75.61632147418229 +0 +120 +absolute + + + +0.01 +smooth + +8.53697654004732 +47.350205670728535 +428.8496199541546 +-85.90506593229657 +75.60387476517899 +0 +120 +absolute + + + +0.01 +smooth + +8.536976621251066 +47.35020611876862 +428.84870665288116 +-86.03744336831642 +75.59144419502937 +0 +120 +absolute + + + +0.01 +smooth + +8.536976700688479 +47.35020656661831 +428.8477978202802 +-86.16979325044598 +75.57902992627427 +0 +120 +absolute + + + +0.01 +smooth + +8.536976778311873 +47.350207014275206 +428.8468935008078 +-86.30211476799278 +75.56663212145452 +0 +120 +absolute + + + +0.01 +smooth + +8.536976854073558 +47.35020746173689 +428.8459937389202 +-86.43440711026417 +75.55425094311096 +0 +120 +absolute + + + +0.01 +smooth + +8.536976927925842 +47.350207909001 +428.8450985790737 +-86.5666694665677 +75.5418865537844 +0 +120 +absolute + + + +0.01 +smooth + +8.536976999821043 +47.350208356065096 +428.8442080657245 +-86.6989010262107 +75.52953911601568 +0 +120 +absolute + + + +0.01 +smooth + +8.536977069711462 +47.3502088029268 +428.843322243329 +-86.83110097850073 +75.51720879234567 +0 +120 +absolute + + + +0.01 +smooth + +8.536977137549414 +47.350209249583706 +428.8424411563433 +-86.96326851274509 +75.50489574531514 +0 +120 +absolute + + + +0.01 +smooth + +8.536977203287211 +47.35020969603342 +428.8415648492237 +-87.09540281825136 +75.49260013746496 +0 +120 +absolute + + + +0.01 +smooth + +8.536977266877159 +47.35021014227353 +428.8406933664264 +-87.22750308432686 +75.48032213133595 +0 +120 +absolute + + + +0.01 +smooth + +8.53697732827157 +47.35021058830165 +428.8398267524078 +-87.35956850027912 +75.46806188946894 +0 +120 +absolute + + + +0.01 +smooth + +8.536977387422757 +47.35021103411537 +428.838965051624 +-87.4915982554155 +75.45581957440479 +0 +120 +absolute + + + +0.01 +smooth + +8.536977444283028 +47.350211479712286 +428.83810830853133 +-87.62359153904353 +75.44359534868428 +0 +120 +absolute + + + +0.01 +smooth + +8.536977498804696 +47.350211925090015 +428.837256567586 +-87.75554754047056 +75.43138937484828 +0 +120 +absolute + + + +0.01 +smooth + +8.536977550940065 +47.35021237024614 +428.83640987324424 +-87.88746544900413 +75.4192018154376 +0 +120 +absolute + + + +0.01 +smooth + +8.536977600641453 +47.35021281517828 +428.8355682699624 +-88.01934445395156 +75.40703283299311 +0 +120 +absolute + + + +0.01 +smooth + +8.536977647861168 +47.350213259884015 +428.83473180219664 +-88.15118374462041 +75.39488259005559 +0 +120 +absolute + + + +0.01 +smooth + +8.536977692551519 +47.35021370436095 +428.83390051440324 +-88.28298251031804 +75.3827512491659 +0 +120 +absolute + + + +0.01 +smooth + +8.536977734664816 +47.350214148606696 +428.83307445103844 +-88.41473994035194 +75.37063897286488 +0 +120 +absolute + + + +0.01 +smooth + +8.536977774153375 +47.35021459261884 +428.83225365655863 +-88.54645522402947 +75.35854592369336 +0 +120 +absolute + + + +0.01 +smooth + +8.536977810969496 +47.350215036394985 +428.83143817541986 +-88.67812755065819 +75.34647226419214 +0 +120 +absolute + + + +0.01 +smooth + +8.536977845065499 +47.35021547993273 +428.83062805207845 +-88.80975610954542 +75.3344181569021 +0 +120 +absolute + + + +0.01 +smooth + +8.53697787639369 +47.35021592322968 +428.82982333099073 +-88.9413400899987 +75.32238376436403 +0 +120 +absolute + + + +0.01 +smooth + +8.536977904906383 +47.35021636628345 +428.82902405661287 +-89.0728786813254 +75.31036924911878 +0 +120 +absolute + + + +0.01 +smooth + +8.536977930555881 +47.350216809091606 +428.8282302734011 +-89.20437107283301 +75.29837477370718 +0 +120 +absolute + + + +0.01 +smooth + +8.536977953294503 +47.35021725165177 +428.8274420258117 +-89.33581645382891 +75.28640050067006 +0 +120 +absolute + + + +0.01 +smooth + +8.536977973074555 +47.35021769396154 +428.82665935830096 +-89.46721401362063 +75.27444659254826 +0 +120 +absolute + + + +0.01 +smooth + +8.536977989848346 +47.350218136018505 +428.8258823153252 +-89.59856294151551 +75.26251321188259 +0 +120 +absolute + + + +0.01 +smooth + +8.53697800356819 +47.35021857782028 +428.8251109413405 +-89.72986242682107 +75.25060052121391 +0 +120 +absolute + + + +0.01 +smooth + +8.536978014186396 +47.35021901936446 +428.82434528080313 +-89.86111165884469 +75.23870868308306 +0 +120 +absolute + + + +0.01 +smooth + +8.536978021683035 +47.35021946064984 +428.82358534226086 +-89.99231019826827 +75.22683776709677 +0 +120 +absolute + + + +0.01 +smooth + +8.536978027943041 +47.35021990175767 +428.82282868482764 +-90.12348296741533 +75.21498150087062 +0 +120 +absolute + + + +0.01 +smooth + +8.536978034133156 +47.35022034273655 +428.82207384126554 +-90.25464490884164 +75.2031361235757 +0 +120 +absolute + + + +0.01 +smooth + +8.536978040253139 +47.35022078358402 +428.82132086225545 +-90.38579528350311 +75.19130180128894 +0 +120 +absolute + + + +0.01 +smooth + +8.536978046302755 +47.35022122429763 +428.82056979847926 +-90.51693335235608 +75.1794787000873 +0 +120 +absolute + + + +0.01 +smooth + +8.536978052281777 +47.3502216648749 +428.81982070061844 +-90.64805837635652 +75.16766698604778 +0 +120 +absolute + + + +0.01 +smooth + +8.536978058189964 +47.35022210531345 +428.81907361935464 +-90.7791696164606 +75.15586682524727 +0 +120 +absolute + + + +0.01 +smooth + +8.536978064027087 +47.35022254561077 +428.8183286053695 +-90.91026633362446 +75.14407838376285 +0 +120 +absolute + + + +0.01 +smooth + +8.536978069792907 +47.35022298576443 +428.81758570934437 +-91.04134778880422 +75.13230182767131 +0 +120 +absolute + + + +0.01 +smooth + +8.53697807548719 +47.35022342577198 +428.816844981961 +-91.1724132429559 +75.12053732304973 +0 +120 +absolute + + + +0.01 +smooth + +8.536978081109705 +47.350223865630994 +428.816106473901 +-91.30346195703581 +75.10878503597505 +0 +120 +absolute + + + +0.01 +smooth + +8.536978086660215 +47.35022430533897 +428.81537023584576 +-91.43449319199986 +75.09704513252422 +0 +120 +absolute + + + +0.01 +smooth + +8.536978092138487 +47.3502247448935 +428.814636318477 +-91.56550620880432 +75.08531777877417 +0 +120 +absolute + + + +0.01 +smooth + +8.536978097544283 +47.35022518429212 +428.8139047724761 +-91.6965002684052 +75.07360314080188 +0 +120 +absolute + + + +0.01 +smooth + +8.536978102877372 +47.350225623532374 +428.81317564852486 +-91.82747463175875 +75.06190138468435 +0 +120 +absolute + + + +0.01 +smooth + +8.536978108137522 +47.350226062611846 +428.812448997305 +-91.95842855982096 +75.05021267649849 +0 +120 +absolute + + + +0.01 +smooth + +8.536978113324492 +47.350226501528034 +428.8117248694976 +-92.08936131354807 +75.03853718232126 +0 +120 +absolute + + + +0.01 +smooth + +8.536978118438054 +47.35022694027853 +428.81100331578455 +-92.22027215389605 +75.02687506822966 +0 +120 +absolute + + + +0.01 +smooth + +8.53697812347797 +47.35022737886086 +428.81028438684746 +-92.35116034182114 +75.01522650030061 +0 +120 +absolute + + + +0.01 +smooth + +8.536978128444007 +47.35022781727259 +428.8095681333677 +-92.48202513827944 +75.00359164461108 +0 +120 +absolute + + + +0.01 +smooth + +8.536978133335928 +47.35022825551126 +428.808854606027 +-92.612865804227 +74.99197066723802 +0 +120 +absolute + + + +0.01 +smooth + +8.536978138153504 +47.35022869357442 +428.80814385550696 +-92.74368160062008 +74.98036373425842 +0 +120 +absolute + + + +0.01 +smooth + +8.536978142896494 +47.35022913145963 +428.8074359324888 +-92.87447178841461 +74.96877101174918 +0 +120 +absolute + + + +0.01 +smooth + +8.536978147564668 +47.35022956916444 +428.8067308876547 +-93.00523562856691 +74.95719266578735 +0 +120 +absolute + + + +0.01 +smooth + +8.536978152157792 +47.35023000668639 +428.80602877168576 +-93.1359723820329 +74.94562886244981 +0 +120 +absolute + + + +0.01 +smooth + +8.536978156675628 +47.350230444023026 +428.80532963526355 +-93.26668130976886 +74.93407976781354 +0 +120 +absolute + + + +0.01 +smooth + +8.536978161117947 +47.35023088117194 +428.80463352907014 +-93.39736167273085 +74.92254554795554 +0 +120 +absolute + + + +0.01 +smooth + +8.53697816548451 +47.350231318130604 +428.8039405037864 +-93.52801273187497 +74.91102636895269 +0 +120 +absolute + + + +0.01 +smooth + +8.536978169775082 +47.35023175489663 +428.80325061009444 +-93.65863374815733 +74.89952239688203 +0 +120 +absolute + + + +0.01 +smooth + +8.536978173989434 +47.350232191467576 +428.80256389867566 +-93.78922398253417 +74.88803379782048 +0 +120 +absolute + + + +0.01 +smooth + +8.536978178127328 +47.35023262784093 +428.8018804202114 +-93.91978269596137 +74.87656073784497 +0 +120 +absolute + + + +0.01 +smooth + +8.536978182188529 +47.35023306401431 +428.8012002253837 +-94.05030914939533 +74.86510338303253 +0 +120 +absolute + + + +0.01 +smooth + +8.536978186172803 +47.35023349998523 +428.8005233648738 +-94.18080260379193 +74.85366189946008 +0 +120 +absolute + + + +0.01 +smooth + +8.536978190079914 +47.35023393575124 +428.7998498893633 +-94.31126232010745 +74.84223645320456 +0 +120 +absolute + + + +0.01 +smooth + +8.536978193909638 +47.350234371309924 +428.79917984953397 +-94.44168755929795 +74.83082721034299 +0 +120 +absolute + + + +0.01 +smooth + +8.536978197661725 +47.35023480665878 +428.7985132960671 +-94.57207758231957 +74.81943433695226 +0 +120 +absolute + + + +0.01 +smooth + +8.536978201335948 +47.35023524179539 +428.7978502796445 +-94.70243165012835 +74.80805799910935 +0 +120 +absolute + + + +0.01 +smooth + +8.536978204932076 +47.3502356767173 +428.79719085094763 +-94.83274902368055 +74.79669836289126 +0 +120 +absolute + + + +0.01 +smooth + +8.536978208449868 +47.35023611142204 +428.7965350606579 +-94.96302896393212 +74.78535559437488 +0 +120 +absolute + + + +0.01 +smooth + +8.536978211889098 +47.3502365459072 +428.7958829594573 +-95.09327073183934 +74.77402985963724 +0 +120 +absolute + + + +0.01 +smooth + +8.536978215249524 +47.35023698017031 +428.79523459802704 +-95.22347358835822 +74.76272132475526 +0 +120 +absolute + + + +0.01 +smooth + +8.536978218530914 +47.35023741420891 +428.7945900270489 +-95.35363679444495 +74.7514301558059 +0 +120 +absolute + + + +0.01 +smooth + +8.536978221733033 +47.35023784802057 +428.7939492972043 +-95.48375961105559 +74.74015651886613 +0 +120 +absolute + + + +0.01 +smooth + +8.536978224855648 +47.35023828160283 +428.7933124591749 +-95.61384129914632 +74.72890058001292 +0 +120 +absolute + + + +0.01 +smooth + +8.536978227898526 +47.35023871495323 +428.79267956364225 +-95.74388111967316 +74.71766250532319 +0 +120 +absolute + + + +0.01 +smooth + +8.53697823086143 +47.35023914806934 +428.79205066128793 +-95.87387833359236 +74.70644246087393 +0 +120 +absolute + + + +0.01 +smooth + +8.536978233744126 +47.35023958094869 +428.79142580279347 +-96.00383220185994 +74.69524061274211 +0 +120 +absolute + + + +0.01 +smooth + +8.53697823654638 +47.350240013588845 +428.7908050388405 +-96.13374198543208 +74.68405712700465 +0 +120 +absolute + + + +0.01 +smooth + +8.536978239267956 +47.35024044598735 +428.79018842011067 +-96.26360694526483 +74.67289216973855 +0 +120 +absolute + + + +0.01 +smooth + +8.536978241908622 +47.350240878141776 +428.78957599728534 +-96.3934263423144 +74.66174590702073 +0 +120 +absolute + + + +0.01 +smooth + +8.536978244468143 +47.35024131004963 +428.7889678210463 +-96.52319943753683 +74.65061850492818 +0 +120 +absolute + + + +0.01 +smooth + +8.536978246946287 +47.3502417417085 +428.78836394207497 +-96.65292549188831 +74.63951012953784 +0 +120 +absolute + + + +0.01 +smooth + +8.536978249342814 +47.35024217311591 +428.78776441105293 +-96.78260376632487 +74.6284209469267 +0 +120 +absolute + + + +0.01 +smooth + +8.536978251657494 +47.35024260426943 +428.78716927866185 +-96.91223352180273 +74.61735112317167 +0 +120 +absolute + + + +0.01 +smooth + +8.53697825389009 +47.35024303516661 +428.7865785955832 +-97.04181401927792 +74.60630082434976 +0 +120 +absolute + + + +0.01 +smooth + +8.53697825604037 +47.350243465804986 +428.7859924124987 +-97.17134451970664 +74.59527021653791 +0 +120 +absolute + + + +0.01 +smooth + +8.5369782581081 +47.35024389618211 +428.78541078008976 +-97.30082428404492 +74.58425946581306 +0 +120 +absolute + + + +0.01 +smooth + +8.536978260093042 +47.35024432629555 +428.78483374903806 +-97.43025257324896 +74.5732687382522 +0 +120 +absolute + + + +0.01 +smooth + +8.536978261994964 +47.350244756142835 +428.7842613700251 +-97.55962864827482 +74.56229819993226 +0 +120 +absolute + + + +0.01 +smooth + +8.536978263813632 +47.35024518572153 +428.7836936937324 +-97.68895177007869 +74.55134801693022 +0 +120 +absolute + + + +0.01 +smooth + +8.536978265548811 +47.35024561502918 +428.7831307708417 +-97.81822119961659 +74.54041835532303 +0 +120 +absolute + + + +0.01 +smooth + +8.536978267200267 +47.350246044063326 +428.78257265203445 +-97.94743619784474 +74.52950938118767 +0 +120 +absolute + + + +0.01 +smooth + +8.536978268767765 +47.35024647282154 +428.7820193879923 +-98.07659602571917 +74.51862126060107 +0 +120 +absolute + + + +0.01 +smooth + +8.53697827025107 +47.35024690130135 +428.78147102939676 +-98.2056999441961 +74.50775415964019 +0 +120 +absolute + + + +0.01 +smooth + +8.53697827164995 +47.35024732950032 +428.7809276269294 +-98.33474721423154 +74.49690824438201 +0 +120 +absolute + + + +0.01 +smooth + +8.536978272964168 +47.35024775741599 +428.7803892312719 +-98.4637370967817 +74.48608368090348 +0 +120 +absolute + + + +0.01 +smooth + +8.536978274193492 +47.35024818504593 +428.7798558931057 +-98.59266885280263 +74.47528063528155 +0 +120 +absolute + + + +0.01 +smooth + +8.536978275337686 +47.35024861238767 +428.77932766311244 +-98.72154174325053 +74.4644992735932 +0 +120 +absolute + + + +0.01 +smooth + +8.536978276396516 +47.35024903943876 +428.77880459197365 +-98.85035502908141 +74.45373976191539 +0 +120 +absolute + + + +0.01 +smooth + +8.536978277369748 +47.35024946619676 +428.77828673037095 +-98.9791079712515 +74.44300226632504 +0 +120 +absolute + + + +0.01 +smooth + +8.536978278257147 +47.35024989265922 +428.7777741289859 +-99.10779983071683 +74.43228695289915 +0 +120 +absolute + + + +0.01 +smooth + +8.536978279058477 +47.35025031882368 +428.7772668385 +-99.23642986843359 +74.42159398771467 +0 +120 +absolute + + + +0.01 +smooth + +8.53697827977351 +47.35025074468771 +428.776764909595 +-99.3649973453578 +74.41092353684854 +0 +120 +absolute + + + +0.01 +smooth + +8.536978280402003 +47.35025117024885 +428.7762683929522 +-99.49350152244574 +74.40027576637775 +0 +120 +absolute + + + +0.01 +smooth + +8.536978280943728 +47.350251595504645 +428.77577733925347 +-99.62194166065338 +74.38965084237924 +0 +120 +absolute + + + +0.01 +smooth + +8.536978281398447 +47.350252020452636 +428.7752917991802 +-99.75031702093693 +74.37904893092997 +0 +120 +absolute + + + +0.01 +smooth + +8.53697828176593 +47.350252445090405 +428.774811823414 +-99.87862686425242 +74.3684701981069 +0 +120 +absolute + + + +0.01 +smooth + +8.536978282045936 +47.35025286941546 +428.7743374626365 +-100.0068704515561 +74.357914809987 +0 +120 +absolute + + + +0.01 +smooth + +8.536978282238238 +47.350253293425396 +428.77386876752917 +-100.13504704380395 +74.3473829326472 +0 +120 +absolute + + + +0.01 +smooth + +8.536978282342593 +47.35025371711774 +428.77340578877363 +-100.26315590195217 +74.3368747321645 +0 +120 +absolute + + + +0.01 +smooth + +8.536978282199776 +47.35025414049724 +428.77294831606645 +-100.39119822818523 +74.32638979506376 +0 +120 +absolute + + + +0.01 +smooth + +8.536978279551882 +47.35025456366455 +428.77249267719867 +-100.51920104257351 +74.31592000881383 +0 +120 +absolute + + + +0.01 +smooth + +8.536978273703326 +47.35025498665072 +428.77203772699346 +-100.6471727177795 +74.30546284745144 +0 +120 +absolute + + + +0.01 +smooth + +8.536978264702729 +47.35025540945324 +428.7715835371921 +-100.77511259322348 +74.2950184842645 +0 +120 +absolute + + + +0.01 +smooth + +8.536978252598693 +47.3502558320696 +428.7711301795359 +-100.90302000832568 +74.28458709254086 +0 +120 +absolute + + + +0.01 +smooth + +8.536978237439827 +47.35025625449732 +428.77067772576635 +-101.03089430250641 +74.27416884556844 +0 +120 +absolute + + + +0.01 +smooth + +8.536978219274733 +47.35025667673382 +428.77022624762424 +-101.15873481518574 +74.26376391663503 +0 +120 +absolute + + + +0.01 +smooth + +8.536978198152024 +47.35025709877663 +428.76977581685105 +-101.28654088578408 +74.25337247902851 +0 +120 +absolute + + + +0.01 +smooth + +8.536978174120302 +47.350257520623224 +428.7693265051882 +-101.4143118537215 +74.24299470603678 +0 +120 +absolute + + + +0.01 +smooth + +8.536978147228183 +47.35025794227111 +428.76887838437676 +-101.5420470584184 +74.23263077094772 +0 +120 +absolute + + + +0.01 +smooth + +8.536978117524262 +47.35025836371774 +428.768431526158 +-101.66974583929488 +74.22228084704915 +0 +120 +absolute + + + +0.01 +smooth + +8.536978085057155 +47.35025878496062 +428.7679860022731 +-101.79740753577123 +74.21194510762894 +0 +120 +absolute + + + +0.01 +smooth + +8.536978049875463 +47.35025920599723 +428.7675418844634 +-101.92503148726763 +74.20162372597497 +0 +120 +absolute + + + +0.01 +smooth + +8.5369780120278 +47.35025962682507 +428.7670992444702 +-102.05261703320448 +74.19131687537515 +0 +120 +absolute + + + +0.01 +smooth + +8.53697797156277 +47.3502600474416 +428.76665815403464 +-102.18016351300174 +74.18102472911728 +0 +120 +absolute + + + +0.01 +smooth + +8.536977928528978 +47.35026046784432 +428.76621868489815 +-102.30767026607994 +74.17074746048927 +0 +120 +absolute + + + +0.01 +smooth + +8.536977882975034 +47.35026088803074 +428.76578090880184 +-102.43513663185907 +74.16048524277898 +0 +120 +absolute + + + +0.01 +smooth + +8.536977834949539 +47.350261307998295 +428.76534489748667 +-102.56256194975947 +74.15023824927421 +0 +120 +absolute + + + +0.01 +smooth + +8.53697778450111 +47.35026172774451 +428.7649107226947 +-102.6899455592014 +74.14000665326293 +0 +120 +absolute + + + +0.01 +smooth + +8.536977731678348 +47.35026214726687 +428.7644784561664 +-102.81728679960506 +74.12979062803298 +0 +120 +absolute + + + +0.01 +smooth + +8.53697767652986 +47.350262566562826 +428.7640481696433 +-102.94458501039063 +74.11959034687217 +0 +120 +absolute + + + +0.01 +smooth + +8.536977619104258 +47.35026298562993 +428.76361993486677 +-103.07183953097848 +74.10940598306846 +0 +120 +absolute + + + +0.01 +smooth + +8.536977559450143 +47.3502634044656 +428.76319382357786 +-103.19904970078866 +74.09923770990962 +0 +120 +absolute + + + +0.01 +smooth + +8.536977497616126 +47.35026382306736 +428.76276990751796 +-103.32621485924159 +74.08908570068355 +0 +120 +absolute + + + +0.01 +smooth + +8.536977433650813 +47.3502642414327 +428.76234825842846 +-103.45333434575738 +74.07895012867816 +0 +120 +absolute + + + +0.01 +smooth + +8.536977367602807 +47.35026465955904 +428.76192894805007 +-103.58040749975628 +74.06883116718124 +0 +120 +absolute + + + +0.01 +smooth + +8.536977299520725 +47.350265077443964 +428.76151204812464 +-103.70743366065855 +74.05872898948076 +0 +120 +absolute + + + +0.01 +smooth + +8.536977229453164 +47.350265495084905 +428.7610976303931 +-103.83441216788445 +74.0486437688645 +0 +120 +absolute + + + +0.01 +smooth + +8.536977157448737 +47.35026591247935 +428.7606857665968 +-103.9613423608541 +74.03857567862035 +0 +120 +absolute + + + +0.01 +smooth + +8.536977083556051 +47.350266329624816 +428.76027652847705 +-104.08822357898792 +74.0285248920362 +0 +120 +absolute + + + +0.01 +smooth + +8.536977007823708 +47.35026674651874 +428.75986998777495 +-104.21505516170598 +74.01849158239988 +0 +120 +absolute + + + +0.01 +smooth + +8.536976930300321 +47.35026716315864 +428.75946621623183 +-104.34183644842857 +74.00847592299928 +0 +120 +absolute + + + +0.01 +smooth + +8.536976851034497 +47.350267579542 +428.7590652855891 +-104.46856677857592 +73.99847808712228 +0 +120 +absolute + + + +0.01 +smooth + +8.536976770074837 +47.35026799566629 +428.7586672675876 +-104.59524549156825 +73.98849824805669 +0 +120 +absolute + + + +0.01 +smooth + +8.536976687469954 +47.35026841152902 +428.7582722339691 +-104.72187192682583 +73.97853657909046 +0 +120 +absolute + + + +0.01 +smooth + +8.536976603268453 +47.350268827127664 +428.7578802564743 +-104.8484454237689 +73.9685932535114 +0 +120 +absolute + + + +0.01 +smooth + +8.53697651751894 +47.35026924245971 +428.7574914068449 +-104.97496532181758 +73.95866844460737 +0 +120 +absolute + + + +0.01 +smooth + +8.536976430270029 +47.350269657522645 +428.75710575682217 +-105.1014309603923 +73.94876232566631 +0 +120 +absolute + + + +0.01 +smooth + +8.536976341570316 +47.35027007231395 +428.756723378147 +-105.22784167891311 +73.93887506997598 +0 +120 +absolute + + + +0.01 +smooth + +8.536976251468417 +47.350270486831114 +428.75634434256085 +-105.35419681680034 +73.92900685082432 +0 +120 +absolute + + + +0.01 +smooth + +8.536976160012934 +47.35027090107162 +428.75596872180495 +-105.48049571347417 +73.91915784149919 +0 +120 +absolute + + + +0.01 +smooth + +8.536976067252477 +47.35027131503296 +428.75559658762063 +-105.60673770835487 +73.90932821528844 +0 +120 +absolute + + + +0.01 +smooth + +8.536975973235652 +47.35027172871262 +428.755228011749 +-105.73292214086271 +73.89951814547993 +0 +120 +absolute + + + +0.01 +smooth + +8.536975878011066 +47.35027214210808 +428.75486306593143 +-105.85904835041784 +73.88972780536157 +0 +120 +absolute + + + +0.01 +smooth + +8.536975781627328 +47.35027255521684 +428.75450182190906 +-105.98511567644054 +73.87995736822116 +0 +120 +absolute + + + +0.01 +smooth + +8.536975684133042 +47.35027296803637 +428.7541443514233 +-106.11112345835103 +73.87020700734664 +0 +120 +absolute + + + +0.01 +smooth + +8.536975585576817 +47.35027338056416 +428.75379072621524 +-106.23707103556961 +73.8604768960258 +0 +120 +absolute + + + +0.01 +smooth + +8.536975486007263 +47.350273792797694 +428.7534410180262 +-106.36295774751636 +73.85076720754658 +0 +120 +absolute + + + +0.01 +smooth + +8.536975385472982 +47.350274204734475 +428.7530952985973 +-106.48878293361167 +73.8410781151968 +0 +120 +absolute + + + +0.01 +smooth + +8.536975284022581 +47.350274616371976 +428.7527536396701 +-106.61454593327569 +73.83140979226435 +0 +120 +absolute + + + +0.01 +smooth + +8.536975181704669 +47.35027502770768 +428.75241611298577 +-106.74024608592869 +73.82176241203709 +0 +120 +absolute + + + +0.01 +smooth + +8.536975078567856 +47.35027543873909 +428.7520827902853 +-106.86588273099086 +73.81213614780287 +0 +120 +absolute + + + +0.01 +smooth + +8.536974974660746 +47.350275849463664 +428.7517537433101 +-106.99145520788248 +73.80253117284958 +0 +120 +absolute + + + +0.01 +smooth + +8.536974870031946 +47.3502762598789 +428.7514290438015 +-107.11696285602375 +73.7929476604651 +0 +120 +absolute + + + +0.01 +smooth + +8.536974764730067 +47.35027666998231 +428.7511087635007 +-107.24240501483493 +73.78338578393725 +0 +120 +absolute + + + +0.01 +smooth + +8.53697465880371 +47.35027707977134 +428.7507929741489 +-107.3677810237362 +73.77384571655394 +0 +120 +absolute + + + +0.01 +smooth + +8.536974552301483 +47.350277489243496 +428.75048174748736 +-107.49309022214791 +73.764327631603 +0 +120 +absolute + + + +0.01 +smooth + +8.536974445271998 +47.35027789839627 +428.75017515525747 +-107.61833194949016 +73.75483170237233 +0 +120 +absolute + + + +0.01 +smooth + +8.536974337763859 +47.35027830722713 +428.7498732692003 +-107.74350554518325 +73.74535810214978 +0 +120 +absolute + + + +0.01 +smooth + +8.536974229825674 +47.350278715733594 +428.74957616105723 +-107.8686103486474 +73.73590700422322 +0 +120 +absolute + + + +0.01 +smooth + +8.536974121506049 +47.35027912391311 +428.74928390256935 +-107.99364569930287 +73.72647858188054 +0 +120 +absolute + + + +0.01 +smooth + +8.536974012853591 +47.35027953176319 +428.7489965654781 +-108.11861093656984 +73.71707300840956 +0 +120 +absolute + + + +0.01 +smooth + +8.536973903916909 +47.35027993928131 +428.74871422152466 +-108.24350539986861 +73.70769045709818 +0 +120 +absolute + + + +0.01 +smooth + +8.53697379474461 +47.350280346464956 +428.7484369424502 +-108.36832842861932 +73.69833110123426 +0 +120 +absolute + + + +0.01 +smooth + +8.536973685385298 +47.35028075331162 +428.7481647999962 +-108.49307936224233 +73.68899511410567 +0 +120 +absolute + + + +0.01 +smooth + +8.536973575887583 +47.35028115981878 +428.74789786590355 +-108.61775754015774 +73.67968266900027 +0 +120 +absolute + + + +0.01 +smooth + +8.536973466300072 +47.35028156598392 +428.7476362119139 +-108.7423623017859 +73.67039393920592 +0 +120 +absolute + + + +0.01 +smooth + +8.53697335667137 +47.35028197180455 +428.74737990976826 +-108.86689298654696 +73.66112909801052 +0 +120 +absolute + + + +0.01 +smooth + +8.536973247050087 +47.35028237727812 +428.7471290312079 +-108.9913489338612 +73.6518883187019 +0 +120 +absolute + + + +0.01 +smooth + +8.536973137484829 +47.35028278240215 +428.7468836479741 +-109.11572948314883 +73.64267177456793 +0 +120 +absolute + + + +0.01 +smooth + +8.536973028024203 +47.3502831871741 +428.7466438318081 +-109.24003397383011 +73.63347963889649 +0 +120 +absolute + + + +0.01 +smooth + +8.536972918716813 +47.35028359159148 +428.74640965445127 +-109.3642617453252 +73.62431208497547 +0 +120 +absolute + + + +0.01 +smooth + +8.536972809611273 +47.35028399565175 +428.74618118764477 +-109.48841213705445 +73.61516928609268 +0 +120 +absolute + + + +0.01 +smooth + +8.536972700756184 +47.35028439935242 +428.74595850312977 +-109.61248448843797 +73.60605141553604 +0 +120 +absolute + + + +0.01 +smooth + +8.536972592200158 +47.350284802690965 +428.7457416726476 +-109.73647813889612 +73.5969586465934 +0 +120 +absolute + + + +0.01 +smooth + +8.536972483991796 +47.35028520566487 +428.7455307679395 +-109.860392427849 +73.5878911525526 +0 +120 +absolute + + + +0.01 +smooth + +8.536972376179712 +47.35028560827161 +428.74532586074685 +-109.98422669471697 +73.57884910670155 +0 +120 +absolute + + + +0.01 +smooth + +8.536972268812509 +47.35028601050871 +428.7451270228107 +-110.10798027892018 +73.56983268232808 +0 +120 +absolute + + + +0.01 +smooth + +8.536972161938793 +47.35028641237361 +428.74493432587246 +-110.2316525198789 +73.56084205272009 +0 +120 +absolute + + + +0.01 +smooth + +8.536972055607174 +47.35028681386383 +428.74474784167325 +-110.35524275701331 +73.55187739116542 +0 +120 +absolute + + + +0.01 +smooth + +8.536971949543195 +47.35028721499611 +428.7445668472214 +-110.47875478364703 +73.54293723533561 +0 +120 +absolute + + + +0.01 +smooth + +8.536971841846968 +47.35028761588348 +428.7443866405017 +-110.60221469343446 +73.53401195001653 +0 +120 +absolute + + + +0.01 +smooth + +8.536971732218174 +47.35028801654261 +428.7442064848292 +-110.72562635844737 +73.52510008615866 +0 +120 +absolute + + + +0.01 +smooth + +8.536971620678449 +47.35028841697092 +428.7440264376566 +-110.8489892002781 +73.51620183090616 +0 +120 +absolute + + + +0.01 +smooth + +8.536971507249419 +47.35028881716582 +428.74384655643644 +-110.97230264051899 +73.50731737140322 +0 +120 +absolute + + + +0.01 +smooth + +8.536971391952711 +47.35028921712469 +428.7436668986215 +-111.09556610076221 +73.49844689479393 +0 +120 +absolute + + + +0.01 +smooth + +8.53697127480995 +47.35028961684494 +428.7434875216643 +-111.21877900260023 +73.48959058822248 +0 +120 +absolute + + + +0.01 +smooth + +8.536971155842771 +47.350290016323996 +428.7433084830175 +-111.34194076762525 +73.48074863883306 +0 +120 +absolute + + + +0.01 +smooth + +8.5369710350728 +47.35029041555925 +428.743129840134 +-111.46505081742966 +73.4719212337698 +0 +120 +absolute + + + +0.01 +smooth + +8.536970912521664 +47.35029081454809 +428.742951650466 +-111.58810857360571 +73.46310856017689 +0 +120 +absolute + + + +0.01 +smooth + +8.536970788210992 +47.35029121328795 +428.74277397146665 +-111.71111345774577 +73.45431080519847 +0 +120 +absolute + + + +0.01 +smooth + +8.536970662162409 +47.3502916117762 +428.74259686058804 +-111.834064891442 +73.44552815597868 +0 +120 +absolute + + + +0.01 +smooth + +8.536970534397549 +47.35029201001027 +428.7424203752835 +-111.95696229628693 +73.43676079966171 +0 +120 +absolute + + + +0.01 +smooth + +8.536970404938037 +47.350292407987574 +428.74224457300517 +-112.07980509387268 +73.42800892339172 +0 +120 +absolute + + + +0.01 +smooth + +8.536970273805498 +47.35029280570548 +428.74206951120567 +-112.20259270579163 +73.41927271431284 +0 +120 +absolute + + + +0.01 +smooth + +8.536970141021568 +47.35029320316142 +428.74189524733805 +-112.32532455363612 +73.41055235956927 +0 +120 +absolute + + + +0.01 +smooth + +8.53697000660787 +47.3502936003528 +428.7417218388547 +-112.44800005899845 +73.40184804630515 +0 +120 +absolute + + + +0.01 +smooth + +8.536969870586033 +47.35029399727702 +428.74154934320836 +-112.57061864347088 +73.39315996166462 +0 +120 +absolute + + + +0.01 +smooth + +8.536969732977687 +47.35029439393148 +428.74137781785157 +-112.69317972864576 +73.38448829279189 +0 +120 +absolute + + + +0.01 +smooth + +8.536969593804455 +47.35029479031357 +428.7412073202369 +-112.81568273611535 +73.37583322683105 +0 +120 +absolute + + + +0.01 +smooth + +8.53696945308797 +47.35029518642072 +428.7410379078174 +-112.93812708747204 +73.36719495092635 +0 +120 +absolute + + + +0.01 +smooth + +8.53696931084986 +47.350295582250325 +428.7408696380453 +-113.06051220430807 +73.35857365222188 +0 +120 +absolute + + + +0.01 +smooth + +8.536969167111751 +47.35029597779978 +428.7407025683733 +-113.18283750821578 +73.34996951786181 +0 +120 +absolute + + + +0.01 +smooth + +8.536969021895274 +47.350296373066506 +428.74053675625436 +-113.30510242078745 +73.34138273499032 +0 +120 +absolute + + + +0.01 +smooth + +8.536968875222058 +47.35029676804792 +428.74037225914094 +-113.42730636361546 +73.33281349075158 +0 +120 +absolute + + + +0.01 +smooth + +8.536968727113727 +47.350297162741384 +428.74020913448567 +-113.54944875829203 +73.32426197228972 +0 +120 +absolute + + + +0.01 +smooth + +8.536968577591912 +47.350297557144344 +428.74004743974126 +-113.67152902640956 +73.31572836674893 +0 +120 +absolute + + + +0.01 +smooth + +8.53696842667824 +47.35029795125417 +428.7398872323603 +-113.79354658956025 +73.30721286127336 +0 +120 +absolute + + + +0.01 +smooth + +8.536968274394338 +47.35029834506829 +428.7397285697953 +-113.91550086933646 +73.29871564300713 +0 +120 +absolute + + + +0.01 +smooth + +8.536968120761838 +47.35029873858409 +428.7395715094992 +-114.03739128733052 +73.29023689909444 +0 +120 +absolute + + + +0.01 +smooth + +8.536967965802363 +47.35029913179899 +428.7394161089244 +-114.15921726513471 +73.28177681667943 +0 +120 +absolute + + + +0.01 +smooth + +8.536967809537545 +47.350299524710394 +428.73926242552386 +-114.28097822434134 +73.2733355829063 +0 +120 +absolute + + + +0.01 +smooth + +8.536967651989016 +47.3502999173157 +428.73911051675 +-114.4026735865428 +73.26491338491918 +0 +120 +absolute + + + +0.01 +smooth + +8.536967493178397 +47.35030030961233 +428.7389604400554 +-114.52430277333127 +73.25651040986224 +0 +120 +absolute + + + +0.01 +smooth + +8.536967333127322 +47.35030070159767 +428.73881225289307 +-114.64586520629919 +73.24812684487964 +0 +120 +absolute + + + +0.01 +smooth + +8.536967171857412 +47.35030109326912 +428.7386660127152 +-114.7673603070387 +73.23976287711551 +0 +120 +absolute + + + +0.01 +smooth + +8.5369670093903 +47.35030148462408 +428.7385217769747 +-114.88878749714225 +73.23141869371405 +0 +120 +absolute + + + +0.01 +smooth + +8.536966845747616 +47.35030187565999 +428.73837960312414 +-115.0101461982021 +73.22309448181939 +0 +120 +absolute + + + +0.01 +smooth + +8.536966680950984 +47.350302266374214 +428.7382395486162 +-115.13143583181056 +73.21479042857571 +0 +120 +absolute + + + +0.01 +smooth + +8.536966515022035 +47.35030265676419 +428.7381016709036 +-115.25265581955992 +73.20650672112717 +0 +120 +absolute + + + +0.01 +smooth + +8.536966347982396 +47.35030304682731 +428.73796602743903 +-115.37380558304257 +73.19824354661796 +0 +120 +absolute + + + +0.01 +smooth + +8.536966179853698 +47.35030343656096 +428.737832675675 +-115.4948845438507 +73.19000109219216 +0 +120 +absolute + + + +0.01 +smooth + +8.536966010657565 +47.35030382596257 +428.7377016730642 +-115.61589212357676 +73.181779544994 +0 +120 +absolute + + + +0.01 +smooth + +8.536965840415627 +47.35030421502954 +428.73757307705915 +-115.73682774381287 +73.1735790921676 +0 +120 +absolute + + + +0.01 +smooth + +8.536965669149513 +47.35030460375926 +428.73744694511277 +-115.85769082615153 +73.16539992085714 +0 +120 +absolute + + + +0.01 +smooth + +8.53696549688085 +47.35030499214915 +428.73732333467746 +-115.97848079218491 +73.15724221820679 +0 +120 +absolute + + + +0.01 +smooth + +8.536965323631268 +47.3503053801966 +428.7372023032061 +-116.09919706350541 +73.14910617136069 +0 +120 +absolute + + + +0.01 +smooth + +8.536965149422393 +47.35030576789903 +428.7370839081512 +-116.21983906170527 +73.14099196746301 +0 +120 +absolute + + + +0.01 +smooth + +8.536964974275854 +47.35030615525384 +428.73696820696546 +-116.34040620837686 +73.1328997936579 +0 +120 +absolute + + + +0.01 +smooth + +8.53696479821328 +47.35030654225842 +428.7368552571014 +-116.46089792511243 +73.12482983708954 +0 +120 +absolute + + + +0.01 +smooth + +8.536964621256299 +47.3503069289102 +428.7367451160119 +-116.58131363350437 +73.11678228490206 +0 +120 +absolute + + + +0.01 +smooth + +8.53696444342654 +47.350307315206564 +428.73663784114945 +-116.70165275514486 +73.10875732423965 +0 +120 +absolute + + + +0.01 +smooth + +8.536964264745627 +47.35030770114493 +428.7365334899668 +-116.82191471162636 +73.10075514224646 +0 +120 +absolute + + + +0.01 +smooth + +8.536964085235194 +47.3503080867227 +428.73643211991646 +-116.94209892454103 +73.09277592606664 +0 +120 +absolute + + + +0.01 +smooth + +8.536963904916863 +47.35030847193726 +428.7363337884512 +-117.06220481548135 +73.08481986284436 +0 +120 +absolute + + + +0.01 +smooth + +8.53696372381227 +47.350308856786036 +428.7362385530236 +-117.18223180603943 +73.07688713972378 +0 +120 +absolute + + + +0.01 +smooth + +8.536963541943038 +47.35030924126643 +428.7361464710864 +-117.30217931780777 +73.06897794384906 +0 +120 +absolute + + + +0.01 +smooth + +8.536963359330796 +47.35030962537584 +428.7360576000922 +-117.42204677237854 +73.06109246236436 +0 +120 +absolute + + + +0.01 +smooth + +8.536963175997172 +47.350310009111666 +428.7359719974936 +-117.5418335913441 +73.05323088241383 +0 +120 +absolute + + + +0.01 +smooth + +8.536962991963795 +47.35031039247133 +428.73588972074333 +-117.66153919629676 +73.04539339114166 +0 +120 +absolute + + + +0.01 +smooth + +8.536962807252294 +47.35031077545222 +428.735810827294 +-117.78116300882886 +73.03758017569197 +0 +120 +absolute + + + +0.01 +smooth + +8.536962621884296 +47.35031115805175 +428.7357353745983 +-117.90070445053261 +73.02979142320895 +0 +120 +absolute + + + +0.01 +smooth + +8.536962435881428 +47.35031154026731 +428.73566342010884 +-118.02016294300044 +73.02202732083676 +0 +120 +absolute + + + +0.01 +smooth + +8.53696224926532 +47.35031192209633 +428.7355950212782 +-118.13953790782458 +73.01428805571953 +0 +120 +absolute + + + +0.01 +smooth + +8.5369620620576 +47.3503123035362 +428.7355302355592 +-118.25882876659733 +73.00657381500145 +0 +120 +absolute + + + +0.01 +smooth + +8.536961874279898 +47.350312684584324 +428.73546912040445 +-118.37803494091109 +72.99888478582668 +0 +120 +absolute + + + +0.01 +smooth + +8.53696168595384 +47.350313065238105 +428.73541173326646 +-118.49715585235805 +72.99122115533935 +0 +120 +absolute + + + +0.01 +smooth + +8.536961497101052 +47.35031344549494 +428.73535813159805 +-118.61619092253063 +72.98358311068364 +0 +120 +absolute + + + +0.01 +smooth + +8.536961307743166 +47.35031382535225 +428.7353083728517 +-118.73513957302104 +72.97597083900374 +0 +120 +absolute + + + +0.01 +smooth + +8.53696111790181 +47.35031420480744 +428.73526251448027 +-118.85400122542168 +72.96838452744376 +0 +120 +absolute + + + +0.01 +smooth + +8.53696092759861 +47.35031458385791 +428.7352206139363 +-118.97277530132479 +72.96082436314788 +0 +120 +absolute + + + +0.01 +smooth + +8.536960736855196 +47.35031496250105 +428.7351827286724 +-119.09146122232272 +72.95329053326027 +0 +120 +absolute + + + +0.01 +smooth + +8.536960545693196 +47.35031534073429 +428.7351489161412 +-119.21005841000773 +72.9457832249251 +0 +120 +absolute + + + +0.01 +smooth + +8.536960354134237 +47.35031571855502 +428.73511923379556 +-119.32856628597222 +72.93830262528647 +0 +120 +absolute + + + +0.01 +smooth + +8.53696016219995 +47.35031609596062 +428.7350937390878 +-119.44698427180836 +72.9308489214886 +0 +120 +absolute + + + +0.01 +smooth + +8.536959969911958 +47.35031647294855 +428.73507248947095 +-119.56531178910859 +72.92342230067564 +0 +120 +absolute + + + +0.01 +smooth + +8.536959777291896 +47.35031684951617 +428.7350555423973 +-119.68354825946514 +72.91602294999176 +0 +120 +absolute + + + +0.01 +smooth + +8.536959584361387 +47.35031722566091 +428.7350429553198 +-119.80169310447036 +72.90865105658105 +0 +120 +absolute + + + +0.01 +smooth + +8.536959391142064 +47.35031760138015 +428.73503478569086 +-119.91974574571654 +72.90130680758777 +0 +120 +absolute + + + +0.01 +smooth + +8.53695919765555 +47.35031797667131 +428.7350310909633 +-120.03770560479603 +72.89399039015603 +0 +120 +absolute + + + +0.01 +smooth + +8.536959003604597 +47.35031835157079 +428.7350314485234 +-120.15557970088828 +72.88669841814088 +0 +120 +absolute + + + +0.01 +smooth + +8.536958808028883 +47.350318726195525 +428.73503440093066 +-120.27339080685306 +72.87942012664726 +0 +120 +absolute + + + +0.01 +smooth + +8.536958610874246 +47.35031910055123 +428.73503981540324 +-120.39114005655121 +72.87215496101754 +0 +120 +absolute + + + +0.01 +smooth + +8.536958412154872 +47.35031947463516 +428.7350476607737 +-120.50882695360906 +72.86490313440372 +0 +120 +absolute + + + +0.01 +smooth + +8.536958211884961 +47.35031984844461 +428.73505790587495 +-120.62645100165288 +72.8576648599578 +0 +120 +absolute + + + +0.01 +smooth + +8.536958010078704 +47.3503202219769 +428.7350705195398 +-120.7440117043091 +72.85044035083182 +0 +120 +absolute + + + +0.01 +smooth + +8.536957806750303 +47.35032059522933 +428.735085470601 +-120.86150856520398 +72.84322982017783 +0 +120 +absolute + + + +0.01 +smooth + +8.536957601913938 +47.35032096819913 +428.7351027278912 +-120.97894108796388 +72.83603348114777 +0 +120 +absolute + + + +0.01 +smooth + +8.53695739558381 +47.35032134088367 +428.7351222602432 +-121.09630877621504 +72.82885154689369 +0 +120 +absolute + + + +0.01 +smooth + +8.536957187774114 +47.35032171328021 +428.73514403649 +-121.21361113358392 +72.82168423056761 +0 +120 +absolute + + + +0.01 +smooth + +8.53695697849904 +47.35032208538604 +428.73516802546396 +-121.33084766369673 +72.81453174532157 +0 +120 +absolute + + + +0.01 +smooth + +8.536956767772784 +47.35032245719848 +428.73519419599825 +-121.44801787017991 +72.80739430430758 +0 +120 +absolute + + + +0.01 +smooth + +8.536956555609539 +47.3503228287148 +428.73522251692526 +-121.56512125665965 +72.80027212067762 +0 +120 +absolute + + + +0.01 +smooth + +8.536956342023498 +47.350323199932305 +428.735252957078 +-121.68215732676236 +72.79316540758373 +0 +120 +absolute + + + +0.01 +smooth + +8.536956127028855 +47.3503235708483 +428.7352854852893 +-121.79912558411438 +72.78607437817794 +0 +120 +absolute + + + +0.01 +smooth + +8.536955910639803 +47.350323941460054 +428.7353200703917 +-121.916025532342 +72.77899924561224 +0 +120 +absolute + + + +0.01 +smooth + +8.536955692870535 +47.350324311764865 +428.73535668121804 +-122.0328566750715 +72.77194022303865 +0 +120 +absolute + + + +0.01 +smooth + +8.536955473735246 +47.35032468176005 +428.7353952866011 +-122.14961851592929 +72.76489752360919 +0 +120 +absolute + + + +0.01 +smooth + +8.53695525324813 +47.35032505144288 +428.7354358553737 +-122.26631055854165 +72.7578713604759 +0 +120 +absolute + + + +0.01 +smooth + +8.536955031423384 +47.350325420810684 +428.7354783563687 +-122.38293230653497 +72.7508619467908 +0 +120 +absolute + + + +0.01 +smooth + +8.536954808275192 +47.350325789860705 +428.7355227584184 +-122.49948326353547 +72.74386949570587 +0 +120 +absolute + + + +0.01 +smooth + +8.536954583817755 +47.35032615859028 +428.7355690303561 +-122.61596293316954 +72.73689422037313 +0 +120 +absolute + + + +0.01 +smooth + +8.53695435806527 +47.35032652699669 +428.7356171410145 +-122.7323708190635 +72.72993633394465 +0 +120 +absolute + + + +0.01 +smooth + +8.53695413103192 +47.35032689507722 +428.73566705922593 +-122.84870642484367 +72.72299604957237 +0 +120 +absolute + + + +0.01 +smooth + +8.536953902731904 +47.350327262829175 +428.7357187538237 +-122.96496925413635 +72.71607358040835 +0 +120 +absolute + + + +0.01 +smooth + +8.536953673179417 +47.35032763024986 +428.7357721936403 +-123.08115881056796 +72.70916913960464 +0 +120 +absolute + + + +0.01 +smooth + +8.536953442388649 +47.35032799733652 +428.7358273475083 +-123.19727459776463 +72.70228294031315 +0 +120 +absolute + + + +0.01 +smooth + +8.536953210373799 +47.350328364086515 +428.7358841842609 +-123.31331611935295 +72.695415195686 +0 +120 +absolute + + + +0.01 +smooth + +8.536952977149058 +47.350328730497104 +428.7359426727305 +-123.42928287895903 +72.68856611887517 +0 +120 +absolute + + + +0.01 +smooth + +8.536952742728616 +47.350329096565595 +428.7360027817502 +-123.5451743802093 +72.68173592303268 +0 +120 +absolute + + + +0.01 +smooth + +8.536952507126676 +47.35032946228929 +428.7360644801526 +-123.66099012673007 +72.67492482131057 +0 +120 +absolute + + + +0.01 +smooth + +8.536952270357421 +47.35032982766543 +428.7361277367702 +-123.77672962214766 +72.66813302686077 +0 +120 +absolute + + + +0.01 +smooth + +8.536952032435048 +47.350330192691374 +428.7361925204362 +-123.89239237008832 +72.6613607528354 +0 +120 +absolute + + + +0.01 +smooth + +8.536951793373756 +47.350330557364394 +428.7362587999832 +-124.00797787417855 +72.65460821238645 +0 +120 +absolute + + + +0.01 +smooth + +8.536951553187729 +47.350330921681774 +428.7363265442438 +-124.12348563804444 +72.64787561866586 +0 +120 +absolute + + + +0.01 +smooth + +8.536951311891169 +47.35033128564081 +428.7363957220511 +-124.2389151653126 +72.64116318482577 +0 +120 +absolute + + + +0.01 +smooth + +8.536951069498267 +47.35033164923881 +428.73646630223755 +-124.3542659596091 +72.63447112401812 +0 +120 +absolute + + + +0.01 +smooth + +8.536950826023215 +47.35033201247306 +428.73653825363607 +-124.46953752456042 +72.62779964939492 +0 +120 +absolute + + + +0.01 +smooth + +8.536950581480212 +47.35033237534087 +428.73661154507954 +-124.58472936379282 +72.62114897410825 +0 +120 +absolute + + + +0.01 +smooth + +8.536950335883441 +47.3503327378395 +428.7366861454004 +-124.69984098093263 +72.61451931131005 +0 +120 +absolute + + + +0.01 +smooth + +8.536950089247107 +47.35033309996627 +428.73676202343165 +-124.81487187960617 +72.60791087415238 +0 +120 +absolute + + + +0.01 +smooth + +8.536949841585395 +47.35033346171848 +428.736839148006 +-124.92982156343982 +72.60132387578727 +0 +120 +absolute + + + +0.01 +smooth + +8.536949592912503 +47.35033382309341 +428.73691748795625 +-125.04468953605983 +72.59475852936669 +0 +120 +absolute + + + +0.01 +smooth + +8.536949343242625 +47.350334184088354 +428.7369970121152 +-125.15947530109261 +72.5882150480427 +0 +120 +absolute + + + +0.01 +smooth + +8.536949092589955 +47.35033454470061 +428.73707768931547 +-125.27417836216439 +72.58169364496729 +0 +120 +absolute + + + +0.01 +smooth + +8.536948840968684 +47.35033490492747 +428.7371594883899 +-125.3887982229016 +72.57519453329249 +0 +120 +absolute + + + +0.01 +smooth + +8.536948588393006 +47.350335264766244 +428.7372423781713 +-125.50333438693045 +72.56871792617032 +0 +120 +absolute + + + +0.01 +smooth + +8.536948334877117 +47.35033562421421 +428.7373263274924 +-125.61778635787736 +72.56226403675278 +0 +120 +absolute + + + +0.01 +smooth + +8.536948080435208 +47.350335983268664 +428.73741130518596 +-125.73215363936862 +72.5558330781919 +0 +120 +absolute + + + +0.01 +smooth + +8.536947825081473 +47.35033634192691 +428.73749728008477 +-125.84643573503057 +72.5494252636397 +0 +120 +absolute + + + +0.01 +smooth + +8.536947568830106 +47.35033670018623 +428.73758422102156 +-125.96063214848947 +72.54304080624819 +0 +120 +absolute + + + +0.01 +smooth + +8.536947311695304 +47.35033705804392 +428.73767209682916 +-126.07474238337176 +72.53667991916937 +0 +120 +absolute + + + +0.01 +smooth + +8.536947053691254 +47.35033741549729 +428.7377608763402 +-126.18876594330365 +72.5303428155553 +0 +120 +absolute + + + +0.01 +smooth + +8.536946794832154 +47.350337772543625 +428.7378505283876 +-126.30270233191158 +72.52402970855796 +0 +120 +absolute + + + +0.01 +smooth + +8.536946535132198 +47.35033812918021 +428.737941021804 +-126.41655105282173 +72.51774081132938 +0 +120 +absolute + + + +0.01 +smooth + +8.536946274605578 +47.35033848540435 +428.7380323254223 +-126.53031160966057 +72.51147633702156 +0 +120 +absolute + + + +0.01 +smooth + +8.536946013266487 +47.35033884121334 +428.73812440807524 +-126.64398350605435 +72.50523649878654 +0 +120 +absolute + + + +0.01 +smooth + +8.536945751129121 +47.350339196604466 +428.73821723859544 +-126.75756624562945 +72.49902150977634 +0 +120 +absolute + + + +0.01 +smooth + +8.536945488207671 +47.35033955157503 +428.73831078581577 +-126.87105933201211 +72.49283158314296 +0 +120 +absolute + + + +0.01 +smooth + +8.536945224516332 +47.350339906122336 +428.738405018569 +-126.98446226882874 +72.48666693203842 +0 +120 +absolute + + + +0.01 +smooth + +8.536944960069297 +47.350340260243655 +428.73849990568783 +-127.09777455970557 +72.48052776961472 +0 +120 +absolute + + + +0.01 +smooth + +8.536944694880761 +47.3503406139363 +428.7385954160052 +-127.21099570826904 +72.47441430902393 +0 +120 +absolute + + + +0.01 +smooth + +8.536944428964919 +47.35034096719756 +428.7386915183537 +-127.32412521814538 +72.468326763418 +0 +120 +absolute + + + +0.01 +smooth + +8.53694416233596 +47.350341320024725 +428.73878818156606 +-127.43716259296102 +72.46226534594899 +0 +120 +absolute + + + +0.01 +smooth + +8.53694389500808 +47.35034167241509 +428.7388853744752 +-127.55010733634215 +72.45623026976892 +0 +120 +absolute + + + +0.01 +smooth + +8.536943626995471 +47.35034202436596 +428.7389830659139 +-127.66295895191523 +72.45022174802978 +0 +120 +absolute + + + +0.01 +smooth + +8.53694335831233 +47.35034237587462 +428.7390812247148 +-127.77571694330646 +72.4442399938836 +0 +120 +absolute + + + +0.01 +smooth + +8.536943088972848 +47.350342726938365 +428.73917981971067 +-127.88838081414228 +72.4382852204824 +0 +120 +absolute + + + +0.01 +smooth + +8.53694281899122 +47.3503430775545 +428.7392788197344 +-128.00095006804892 +72.43235764097818 +0 +120 +absolute + + + +0.01 +smooth + +8.536942548381639 +47.350343427720304 +428.7393781936187 +-128.11342420865282 +72.42645746852298 +0 +120 +absolute + + + +0.01 +smooth + +8.5369422771583 +47.350343777433075 +428.7394779101962 +-128.22580273958016 +72.42058491626881 +0 +120 +absolute + + + +0.01 +smooth + +8.536942005335394 +47.35034412669012 +428.73957793829976 +-128.3380851644574 +72.41474019736768 +0 +120 +absolute + + + +0.01 +smooth + +8.536941732927115 +47.35034447548872 +428.73967824676225 +-128.45027098691074 +72.40892352497161 +0 +120 +absolute + + + +0.01 +smooth + +8.53694145994766 +47.35034482382618 +428.73977880441635 +-128.56235971056662 +72.40313511223262 +0 +120 +absolute + + + +0.01 +smooth + +8.536941186411218 +47.35034517169977 +428.7398795800947 +-128.6743508390513 +72.39737517230272 +0 +120 +absolute + + + +0.01 +smooth + +8.536940912331985 +47.350345519106824 +428.7399805426303 +-128.78624387599115 +72.39164391833391 +0 +120 +absolute + + + +0.01 +smooth + +8.536940637724156 +47.350345866044606 +428.74008166085576 +-128.89803832501244 +72.38594156347826 +0 +120 +absolute + + + +0.01 +smooth + +8.536940362601921 +47.350346212510416 +428.74018290360397 +-129.00973368974155 +72.38026832088775 +0 +120 +absolute + + + +0.01 +smooth + +8.536940086979476 +47.35034655850156 +428.74028423970753 +-129.12132947380476 +72.37462440371439 +0 +120 +absolute + + + +0.01 +smooth + +8.536939810871017 +47.350346904015325 +428.7403856379993 +-129.23282518082846 +72.3690100251102 +0 +120 +absolute + + + +0.01 +smooth + +8.536939533937463 +47.350347249117846 +428.7404886696179 +-129.34423139981294 +72.36341832183685 +0 +120 +absolute + + + +0.01 +smooth + +8.536939255612024 +47.350347593919196 +428.7405959111153 +-129.45556584910358 +72.35783793783678 +0 +120 +absolute + + + +0.01 +smooth + +8.536938975897144 +47.35034793841812 +428.7407073374089 +-129.5668283723036 +72.3522689691988 +0 +120 +absolute + + + +0.01 +smooth + +8.536938694803622 +47.350348282611755 +428.74082288539694 +-129.67801855087163 +72.34671167965018 +0 +120 +absolute + + + +0.01 +smooth + +8.536938412342264 +47.35034862649725 +428.7409424919777 +-129.78913596626586 +72.34116633291814 +0 +120 +absolute + + + +0.01 +smooth + +8.536938128523877 +47.35034897007174 +428.7410660940498 +-129.90018019994483 +72.33563319272989 +0 +120 +absolute + + + +0.01 +smooth + +8.536937843359258 +47.35034931333239 +428.7411936285117 +-130.01115083336688 +72.3301125228127 +0 +120 +absolute + + + +0.01 +smooth + +8.536937556859204 +47.35034965627628 +428.74132503226156 +-130.12204744799038 +72.32460458689374 +0 +120 +absolute + + + +0.01 +smooth + +8.536937269034523 +47.35034999890058 +428.7414602421979 +-130.23286962527376 +72.31910964870028 +0 +120 +absolute + + + +0.01 +smooth + +8.536936979896018 +47.35035034120245 +428.7415991952191 +-130.3436169466754 +72.31362797195955 +0 +120 +absolute + + + +0.01 +smooth + +8.536936689454484 +47.350350683178995 +428.74174182822344 +-130.4542889936537 +72.30815982039871 +0 +120 +absolute + + + +0.01 +smooth + +8.536936397720725 +47.35035102482735 +428.7418880781093 +-130.564885347667 +72.30270545774505 +0 +120 +absolute + + + +0.01 +smooth + +8.536936104705548 +47.350351366144686 +428.74203788177505 +-130.67540559017382 +72.29726514772581 +0 +120 +absolute + + + +0.01 +smooth + +8.536935810419754 +47.35035170712813 +428.74219117611926 +-130.78584930263239 +72.2918391540682 +0 +120 +absolute + + + +0.01 +smooth + +8.53693551487414 +47.3503520477748 +428.74234789804007 +-130.89621606650127 +72.28642774049945 +0 +120 +absolute + + + +0.01 +smooth + +8.536935218079508 +47.35035238808184 +428.74250798443603 +-131.00650546323868 +72.28103117074676 +0 +120 +absolute + + + +0.01 +smooth + +8.536934920046665 +47.35035272804641 +428.74267137220545 +-131.11671707430312 +72.27564970853737 +0 +120 +absolute + + + +0.01 +smooth + +8.53693462078641 +47.35035306766564 +428.74283799824684 +-131.22685048115304 +72.27028361759855 +0 +120 +absolute + + + +0.01 +smooth + +8.536934320309543 +47.35035340693664 +428.7430077994584 +-131.3369052652467 +72.26493316165748 +0 +120 +absolute + + + +0.01 +smooth + +8.536934018626866 +47.35035374585657 +428.7431807127384 +-131.4468810080425 +72.2595986044414 +0 +120 +absolute + + + +0.01 +smooth + +8.536933715749187 +47.350354084422605 +428.7433566749857 +-131.556777290999 +72.25428020967755 +0 +120 +absolute + + + +0.01 +smooth + +8.536933411687297 +47.35035442263179 +428.7435356230981 +-131.6665936955743 +72.24897824109313 +0 +120 +absolute + + + +0.01 +smooth + +8.53693310645201 +47.35035476048137 +428.74371749397454 +-131.77632980322713 +72.24369296241541 +0 +120 +absolute + + + +0.01 +smooth + +8.536932800054117 +47.35035509796842 +428.7439022245131 +-131.88598519541563 +72.2384246373716 +0 +120 +absolute + + + +0.01 +smooth + +8.536932492504429 +47.35035543509007 +428.744089751612 +-131.99555945359833 +72.23317352968888 +0 +120 +absolute + + + +0.01 +smooth + +8.536932183813743 +47.35035577184351 +428.74428001217007 +-132.10505215923357 +72.2279399030946 +0 +120 +absolute + + + +0.01 +smooth + +8.536931873992858 +47.35035610822584 +428.74447294308527 +-132.21446289377974 +72.22272402131584 +0 +120 +absolute + + + +0.01 +smooth + +8.536931563052581 +47.35035644423419 +428.7446684812561 +-132.32379123869524 +72.21752614807993 +0 +120 +absolute + + + +0.01 +smooth + +8.536931251003715 +47.350356779865734 +428.7448665635812 +-132.4330367754385 +72.21234654711408 +0 +120 +absolute + + + +0.01 +smooth + +8.536930937857052 +47.35035711511756 +428.7450671269585 +-132.5421990854678 +72.20718548214545 +0 +120 +absolute + + + +0.01 +smooth + +8.536930623623407 +47.35035744998686 +428.74527010828683 +-132.6512777502417 +72.20204321690133 +0 +120 +absolute + + + +0.01 +smooth + +8.536930308313572 +47.35035778447075 +428.74547544446426 +-132.76027235121842 +72.19692001510899 +0 +120 +absolute + + + +0.01 +smooth + +8.536929991938354 +47.350358118566355 +428.7456830723892 +-132.86918246985647 +72.19181614049556 +0 +120 +absolute + + + +0.01 +smooth + +8.536929674508556 +47.35035845227084 +428.7458929289604 +-132.97800768761425 +72.18673185678837 +0 +120 +absolute + + + +0.01 +smooth + +8.536929356034971 +47.350358785581314 +428.7461049510757 +-133.08674758595006 +72.18166742771454 +0 +120 +absolute + + + +0.01 +smooth + +8.53692903652841 +47.350359118494936 +428.74631907563383 +-133.19540174632237 +72.17662311700137 +0 +120 +absolute + + + +0.01 +smooth + +8.536928715999673 +47.35035945100885 +428.74653523953316 +-133.3039697501896 +72.17159918837609 +0 +120 +absolute + + + +0.01 +smooth + +8.536928394459558 +47.350359783120155 +428.7467533796717 +-133.41245117900996 +72.16659590556586 +0 +120 +absolute + + + +0.01 +smooth + +8.536928071918872 +47.35036011482603 +428.7469734329484 +-133.5208456142421 +72.16161353229799 +0 +120 +absolute + + + +0.01 +smooth + +8.536927748388411 +47.3503604461236 +428.7471953362613 +-133.6291526373442 +72.15665233229967 +0 +120 +absolute + + + +0.01 +smooth + +8.536927423878982 +47.35036077701001 +428.7474190265088 +-133.73737182977482 +72.15171256929814 +0 +120 +absolute + + + +0.01 +smooth + +8.536927098401385 +47.35036110748238 +428.7476444405893 +-133.8455027729922 +72.1467945070206 +0 +120 +absolute + + + +0.01 +smooth + +8.536926771966423 +47.350361437537856 +428.74787151540124 +-133.95354504845486 +72.14189840919431 +0 +120 +absolute + + + +0.01 +smooth + +8.536926444584893 +47.35036176717359 +428.7481001878431 +-134.0614982376211 +72.13702453954649 +0 +120 +absolute + + + +0.01 +smooth + +8.536926116267601 +47.350362096386704 +428.748330394813 +-134.16936192194936 +72.13217316180436 +0 +120 +absolute + + + +0.01 +smooth + +8.536925787025352 +47.35036242517434 +428.7485620732095 +-134.27713568289803 +72.12734453969514 +0 +120 +absolute + + + +0.01 +smooth + +8.536925456868941 +47.35036275353363 +428.7487951599309 +-134.38481910192553 +72.12253893694607 +0 +120 +absolute + + + +0.01 +smooth + +8.536925125809173 +47.35036308146174 +428.7490295918756 +-134.49241176049017 +72.11775661728439 +0 +120 +absolute + + + +0.01 +smooth + +8.536924793856851 +47.35036340895577 +428.7492653059421 +-134.59991324005045 +72.11299784443732 +0 +120 +absolute + + + +0.01 +smooth + +8.536924461022775 +47.35036373601288 +428.74950223902863 +-134.70732312206465 +72.10826288213207 +0 +120 +absolute + + + +0.01 +smooth + +8.536924127317748 +47.35036406263021 +428.7497403280336 +-134.81464098799125 +72.10355199409588 +0 +120 +absolute + + + +0.01 +smooth + +8.53692379275257 +47.35036438880489 +428.7499795098554 +-134.92186641928862 +72.098865444056 +0 +120 +absolute + + + +0.01 +smooth + +8.536923457338045 +47.35036471453406 +428.75021972139257 +-135.02899899741516 +72.0942034957396 +0 +120 +absolute + + + +0.01 +smooth + +8.536923121084971 +47.35036503981486 +428.7504608995432 +-135.13603830382917 +72.08956641287398 +0 +120 +absolute + + + +0.01 +smooth + +8.536922784004156 +47.350365364644425 +428.7507029812059 +-135.2429839199892 +72.08495445918632 +0 +120 +absolute + + + +0.01 +smooth + +8.536922446106399 +47.350365689019895 +428.750945903279 +-135.34983542735353 +72.08036789840388 +0 +120 +absolute + + + +0.01 +smooth + +8.536922107402498 +47.35036601293841 +428.75118960266076 +-135.4565924073806 +72.07580699425385 +0 +120 +absolute + + + +0.01 +smooth + +8.53692176790326 +47.350366336397116 +428.75143401624973 +-135.56325444152878 +72.07127201046349 +0 +120 +absolute + + + +0.01 +smooth + +8.536921427619486 +47.35036665939313 +428.7516790809442 +-135.66982111125648 +72.06676321075999 +0 +120 +absolute + + + +0.01 +smooth + +8.536921086561978 +47.35036698192361 +428.75192473364257 +-135.7762919980221 +72.06228085887062 +0 +120 +absolute + + + +0.01 +smooth + +8.536920744741535 +47.35036730398568 +428.7521709112433 +-135.88266668328401 +72.0578252185226 +0 +120 +absolute + + + +0.01 +smooth + +8.53692040216896 +47.35036762557648 +428.7524175506446 +-135.98894474850056 +72.05339655344315 +0 +120 +absolute + + + +0.01 +smooth + +8.536920058855056 +47.35036794669316 +428.752664588745 +-136.09512577513027 +72.04899512735949 +0 +120 +absolute + + + +0.01 +smooth + +8.536919714810626 +47.350368267332854 +428.7529119624428 +-136.20120934463142 +72.04462120399884 +0 +120 +absolute + + + +0.01 +smooth + +8.536919370046467 +47.350368587492696 +428.75315960863645 +-136.30719503846248 +72.04027504708847 +0 +120 +absolute + + + +0.01 +smooth + +8.536919024573386 +47.35036890716982 +428.7534074642243 +-136.41308243808174 +72.03595692035557 +0 +120 +absolute + + + +0.01 +smooth + +8.53691867840218 +47.35036922636137 +428.7536554661047 +-136.51887112494774 +72.03166708752737 +0 +120 +absolute + + + +0.01 +smooth + +8.536918331543657 +47.35036954506449 +428.7539035511761 +-136.6245606805187 +72.02740581233112 +0 +120 +absolute + + + +0.01 +smooth + +8.536917984008614 +47.350369863276306 +428.7541516563368 +-136.73015068625315 +72.02317335849403 +0 +120 +absolute + + + +0.01 +smooth + +8.536917635807855 +47.35037018099396 +428.7543997184852 +-136.83564072360943 +72.01896998974334 +0 +120 +absolute + + + +0.01 +smooth + +8.536917286952182 +47.3503704982146 +428.75464767451973 +-136.94103037404597 +72.01479596980627 +0 +120 +absolute + + + +0.01 +smooth + +8.536916937452393 +47.35037081493535 +428.7548954613388 +-137.0463192190211 +72.01065156241005 +0 +120 +absolute + + + +0.01 +smooth + +8.536916587319293 +47.35037113115336 +428.7551430158407 +-137.15150683999323 +72.00653703128191 +0 +120 +absolute + + + +0.01 +smooth + +8.536916236563686 +47.350371446865765 +428.75539027492385 +-137.25659281842076 +72.00245264014906 +0 +120 +absolute + + + +0.01 +smooth + +8.53691588519637 +47.3503717620697 +428.7556371754866 +-137.36157673576216 +71.99839865273876 +0 +120 +absolute + + + +0.01 +smooth + +8.536915533228148 +47.3503720767623 +428.7558836544274 +-137.46645817347567 +71.99437533277822 +0 +120 +absolute + + + +0.01 +smooth + +8.536915180669823 +47.35037239094071 +428.7561296486446 +-137.57123671301983 +71.99038294399466 +0 +120 +absolute + + + +0.01 +smooth + +8.536914827532195 +47.350372704602066 +428.75637509503656 +-137.67591193585292 +71.98642175011531 +0 +120 +absolute + + + +0.01 +smooth + +8.53691447382607 +47.3503730177435 +428.7566199305017 +-137.7804834234334 +71.98249201486745 +0 +120 +absolute + + + +0.01 +smooth + +8.536914119561349 +47.350373330362416 +428.75686409554464 +-137.88495079051765 +71.97859397006326 +0 +120 +absolute + + + +0.01 +smooth + +8.536913764356536 +47.35037364256789 +428.7571091127855 +-137.98932821594633 +71.97471392167373 +0 +120 +absolute + + + +0.01 +smooth + +8.536913407897732 +47.35037395444917 +428.7573562495971 +-138.09362736115017 +71.97084070920187 +0 +120 +absolute + + + +0.01 +smooth + +8.53691305019378 +47.35037426600314 +428.75760547656944 +-138.1978478774835 +71.96697471063807 +0 +120 +absolute + + + +0.01 +smooth + +8.536912691253512 +47.35037457722673 +428.7578567642923 +-138.30198941630027 +71.96311630397264 +0 +120 +absolute + + + +0.01 +smooth + +8.536912331085782 +47.35037488811688 +428.7581100833558 +-138.4060516289549 +71.95926586719605 +0 +120 +absolute + + + +0.01 +smooth + +8.53691196969942 +47.35037519867048 +428.7583654043498 +-138.51003416680138 +71.95542377829864 +0 +120 +absolute + + + +0.01 +smooth + +8.536911607103272 +47.35037550888445 +428.7586226978641 +-138.613936681194 +71.95159041527077 +0 +120 +absolute + + + +0.01 +smooth + +8.53691124330618 +47.35037581875568 +428.7588819344886 +-138.71775882348675 +71.94776615610282 +0 +120 +absolute + + + +0.01 +smooth + +8.536910878316979 +47.350376128281106 +428.7591430848132 +-138.82150024503392 +71.94395137878514 +0 +120 +absolute + + + +0.01 +smooth + +8.536910512144518 +47.35037643745764 +428.759406119428 +-138.92516059718972 +71.94014646130819 +0 +120 +absolute + + + +0.01 +smooth + +8.53691014479763 +47.350376746282194 +428.7596710089227 +-139.02873953130825 +71.93635178166231 +0 +120 +absolute + + + +0.01 +smooth + +8.536909776285162 +47.35037705475167 +428.7599377238871 +-139.13223669874358 +71.93256771783784 +0 +120 +absolute + + + +0.01 +smooth + +8.536909406615955 +47.35037736286301 +428.76020623491155 +-139.23565175085008 +71.92879464782519 +0 +120 +absolute + + + +0.01 +smooth + +8.536909035798846 +47.3503776706131 +428.76047651258557 +-139.3389843389818 +71.92503294961476 +0 +120 +absolute + + + +0.01 +smooth + +8.536908663842679 +47.35037797799888 +428.7607485274992 +-139.44223411449292 +71.92128300119688 +0 +120 +absolute + + + +0.01 +smooth + +8.536908290756292 +47.350378285017236 +428.7610222502424 +-139.54540072873758 +71.91754518056194 +0 +120 +absolute + + + +0.01 +smooth + +8.536907916548527 +47.35037859166508 +428.7612976514048 +-139.64848383306997 +71.91381986570032 +0 +120 +absolute + + + +0.01 +smooth + +8.53690754122823 +47.35037889793935 +428.76157470157654 +-139.75148307884427 +71.91010743460241 +0 +120 +absolute + + + +0.01 +smooth + +8.536907164804234 +47.35037920383696 +428.7618533713477 +-139.8543981174147 +71.90640826525859 +0 +120 +absolute + + + +0.01 +smooth + +8.536906787285384 +47.35037950935478 +428.7621336313077 +-139.95722860013527 +71.90272273565921 +0 +120 +absolute + + + +0.01 +smooth + +8.536906408680522 +47.350379814489784 +428.7624154520469 +-140.05997417836033 +71.89905122379469 +0 +120 +absolute + + + +0.01 +smooth + +8.536906028998485 +47.35038011923885 +428.7626988041549 +-140.16263450344388 +71.89539410765536 +0 +120 +absolute + + + +0.01 +smooth + +8.536905648248123 +47.35038042359891 +428.762983658222 +-140.26520922674027 +71.89175176523162 +0 +120 +absolute + + + +0.01 +smooth + +8.536905266438266 +47.350380727566844 +428.7632699848377 +-140.36769799960345 +71.88812457451385 +0 +120 +absolute + + + +0.01 +smooth + +8.53690488357776 +47.35038103113959 +428.7635577545919 +-140.4701004733877 +71.88451291349242 +0 +120 +absolute + + + +0.01 +smooth + +8.536904499675444 +47.35038133431407 +428.7638469380747 +-140.57241629944724 +71.88091716015771 +0 +120 +absolute + + + +0.01 +smooth + +8.536904114740162 +47.35038163708719 +428.764137505876 +-140.6746451291362 +71.87733769250009 +0 +120 +absolute + + + +0.01 +smooth + +8.536903728780752 +47.35038193945585 +428.76442942858563 +-140.7767866138086 +71.87377488850996 +0 +120 +absolute + + + +0.01 +smooth + +8.536903341806058 +47.35038224141698 +428.76472267679355 +-140.87884040481882 +71.87022912617768 +0 +120 +absolute + + + +0.01 +smooth + +8.53690295382492 +47.350382542967495 +428.76501722108975 +-140.98080615352097 +71.86670078349364 +0 +120 +absolute + + + +0.01 +smooth + +8.536902564846178 +47.3503828441043 +428.76531303206394 +-141.08268351126918 +71.8631902384482 +0 +120 +absolute + + + +0.01 +smooth + +8.536902174878675 +47.35038314482431 +428.7656100803061 +-141.1844721294176 +71.85969786903173 +0 +120 +absolute + + + +0.01 +smooth + +8.536901783931247 +47.35038344512444 +428.76590833640626 +-141.2861716593204 +71.85622405323463 +0 +120 +absolute + + + +0.01 +smooth + +8.53690139201274 +47.35038374500159 +428.76620777095394 +-141.38778175233176 +71.85276916904726 +0 +120 +absolute + + + +0.01 +smooth + +8.536900999131994 +47.35038404445268 +428.7665083545395 +-141.48930205980588 +71.84933359446005 +0 +120 +absolute + + + +0.01 +smooth + +8.536900605297847 +47.350384343474644 +428.76681005775254 +-141.59073223309687 +71.84591770746327 +0 +120 +absolute + + + +0.01 +smooth + +8.536900210519143 +47.350384642064384 +428.7671128511832 +-141.69207192355893 +71.8425218860474 +0 +120 +absolute + + + +0.01 +smooth + +8.536899814804725 +47.35038494021882 +428.7674167054214 +-141.7933207825463 +71.83914650820277 +0 +120 +absolute + + + +0.01 +smooth + +8.53689941816343 +47.35038523793484 +428.7677215910569 +-141.89447846141297 +71.83579195191979 +0 +120 +absolute + + + +0.01 +smooth + +8.536899020604096 +47.35038553520937 +428.7680274786794 +-141.99554461151328 +71.83245859518878 +0 +120 +absolute + + + +0.01 +smooth + +8.536898622135574 +47.35038583203934 +428.76833433887924 +-142.09651888420123 +71.82914681600018 +0 +120 +absolute + + + +0.01 +smooth + +8.536898222766697 +47.35038612842164 +428.768642142246 +-142.19740093083118 +71.82585699234433 +0 +120 +absolute + + + +0.01 +smooth + +8.536897822506306 +47.3503864243532 +428.7689508593697 +-142.29819040275711 +71.8225895022116 +0 +120 +absolute + + + +0.01 +smooth + +8.536897421363244 +47.350386719830944 +428.7692604608403 +-142.3988869513333 +71.8193447235924 +0 +120 +absolute + + + +0.01 +smooth + +8.536897019346355 +47.35038701485175 +428.76957091724773 +-142.4994902279139 +71.81612303447706 +0 +120 +absolute + + + +0.01 +smooth + +8.536896616464475 +47.35038730941256 +428.76988219918167 +-142.59999988385306 +71.81292481285601 +0 +120 +absolute + + + +0.01 +smooth + +8.536896212726448 +47.35038760351028 +428.7701942772323 +-142.70041557050496 +71.80975043671961 +0 +120 +absolute + + + +0.01 +smooth + +8.536895808141113 +47.35038789714183 +428.77050712198934 +-142.80073693922375 +71.80660028405822 +0 +120 +absolute + + + +0.01 +smooth + +8.536895402717311 +47.3503881903041 +428.77082070404276 +-142.90096364136357 +71.80347473286223 +0 +120 +absolute + + + +0.01 +smooth + +8.536894996463886 +47.35038848299403 +428.7711349939825 +-143.00109532827867 +71.80037416112202 +0 +120 +absolute + + + +0.01 +smooth + +8.536894589389677 +47.35038877520852 +428.7714499623983 +-143.10113165132313 +71.79729894682798 +0 +120 +absolute + + + +0.01 +smooth + +8.536894181503522 +47.35038906694449 +428.77176557988037 +-143.20107226185118 +71.79424946797046 +0 +120 +absolute + + + +0.01 +smooth + +8.536893772814267 +47.35038935819885 +428.7720818170184 +-143.30091681121695 +71.79122610253984 +0 +120 +absolute + + + +0.01 +smooth + +8.53689336333075 +47.350389648968516 +428.7723986444023 +-143.4006649507746 +71.78822922852652 +0 +120 +absolute + + + +0.01 +smooth + +8.536892953061813 +47.350389939250405 +428.77271603262204 +-143.5003163318783 +71.78525922392085 +0 +120 +absolute + + + +0.01 +smooth + +8.536892542016295 +47.35039022904142 +428.7730339522674 +-143.5998706058823 +71.78231646671323 +0 +120 +absolute + + + +0.01 +smooth + +8.536892130203041 +47.35039051833848 +428.7733523739285 +-143.69932742414062 +71.77940133489402 +0 +120 +absolute + + + +0.01 +smooth + +8.536891717630889 +47.3503908071385 +428.77367126819513 +-143.79868643800756 +71.77651420645361 +0 +120 +absolute + + + +0.01 +smooth + +8.53689130430868 +47.3503910954384 +428.7739906056571 +-143.89794729883715 +71.77365545938238 +0 +120 +absolute + + + +0.01 +smooth + +8.536890890245257 +47.35039138323508 +428.7743103569045 +-143.9971096579837 +71.77082547167069 +0 +120 +absolute + + + +0.01 +smooth + +8.536890475449457 +47.35039167052545 +428.7746304925271 +-144.0961731668013 +71.76802462130894 +0 +120 +absolute + + + +0.01 +smooth + +8.536890059930126 +47.35039195730646 +428.7749509831149 +-144.19513747664413 +71.76525328628748 +0 +120 +absolute + + + +0.01 +smooth + +8.536889643696101 +47.350392243574966 +428.77527179925767 +-144.2940022388663 +71.7625118445967 +0 +120 +absolute + + + +0.01 +smooth + +8.536889226756225 +47.35039252932793 +428.77559291154546 +-144.39276710482213 +71.759800674227 +0 +120 +absolute + + + +0.01 +smooth + +8.53688880911934 +47.35039281456224 +428.7759142905681 +-144.4914317258656 +71.75712015316871 +0 +120 +absolute + + + +0.01 +smooth + +8.536888390794282 +47.35039309927483 +428.7762359069155 +-144.58999575335105 +71.75447065941225 +0 +120 +absolute + + + +0.01 +smooth + +8.536887971789897 +47.350393383462595 +428.7765577311776 +-144.68845883863247 +71.75185257094799 +0 +120 +absolute + + + +0.01 +smooth + +8.536887552115024 +47.35039366712246 +428.77687973394427 +-144.78682063306417 +71.74926626576628 +0 +120 +absolute + + + +0.01 +smooth + +8.536887131778506 +47.35039395025134 +428.7772018858054 +-144.88508078800027 +71.74671212185753 +0 +120 +absolute + + + +0.01 +smooth + +8.53688671078918 +47.35039423284613 +428.7775241573511 +-144.9832389547949 +71.7441905172121 +0 +120 +absolute + + + +0.01 +smooth + +8.53688628915589 +47.350394514903755 +428.7778465191709 +-145.08129478480225 +71.74170182982037 +0 +120 +absolute + + + +0.01 +smooth + +8.536885866887477 +47.350394796421135 +428.77816894185503 +-145.17924792937654 +71.7392464376727 +0 +120 +absolute + + + +0.01 +smooth + +8.53688544399278 +47.35039507739518 +428.77849139599317 +-145.27709803987185 +71.73682471875952 +0 +120 +absolute + + + +0.01 +smooth + +8.536885020480641 +47.3503953578228 +428.77881385217535 +-145.3748447676424 +71.73443705107115 +0 +120 +absolute + + + +0.01 +smooth + +8.536884596359904 +47.350395637700906 +428.77913628099157 +-145.47248776404234 +71.732083812598 +0 +120 +absolute + + + +0.01 +smooth + +8.536884171639404 +47.35039591702642 +428.7794586530315 +-145.57002668042585 +71.72976538133044 +0 +120 +absolute + + + +0.01 +smooth + +8.536883746327986 +47.35039619579625 +428.7797809388852 +-145.66746116814707 +71.72748213525884 +0 +120 +absolute + + + +0.01 +smooth + +8.53688332043449 +47.35039647400731 +428.7801031091425 +-145.76479087856018 +71.72523445237358 +0 +120 +absolute + + + +0.01 +smooth + +8.536882893967757 +47.350396751656525 +428.78042513439345 +-145.86201546301936 +71.72302271066503 +0 +120 +absolute + + + +0.01 +smooth + +8.536882466920996 +47.35039702874712 +428.7807470226773 +-145.959135228311 +71.72084606298701 +0 +120 +absolute + + + +0.01 +smooth + +8.53688203891285 +47.35039730543357 +428.78106968128776 +-146.05616618639934 +71.71867444630308 +0 +120 +absolute + + + +0.01 +smooth + +8.53688160978223 +47.35039758178074 +428.78139349493443 +-146.15311511776744 +71.71649541198437 +0 +120 +absolute + + + +0.01 +smooth + +8.536881179536694 +47.35039785778527 +428.78171844509086 +-146.24998173267613 +71.71430978130175 +0 +120 +absolute + + + +0.01 +smooth + +8.536880748183801 +47.35039813344369 +428.7820445132307 +-146.34676574138663 +71.71211837552599 +0 +120 +absolute + + + +0.01 +smooth + +8.536880315731104 +47.35039840875263 +428.7823716808278 +-146.44346685415988 +71.70992201592793 +0 +120 +absolute + + + +0.01 +smooth + +8.536879882186168 +47.35039868370871 +428.782699929356 +-146.54008478125704 +71.70772152377845 +0 +120 +absolute + + + +0.01 +smooth + +8.536879447556545 +47.350398958308475 +428.78302924028895 +-146.63661923293913 +71.70551772034837 +0 +120 +absolute + + + +0.01 +smooth + +8.536879011849802 +47.35039923254856 +428.7833595951005 +-146.73306991946723 +71.70331142690853 +0 +120 +absolute + + + +0.01 +smooth + +8.536878575073489 +47.350399506425525 +428.78369097526416 +-146.82943655110233 +71.70110346472977 +0 +120 +absolute + + + +0.01 +smooth + +8.536878137235163 +47.35039977993597 +428.7840233622539 +-146.9257188381056 +71.6988946550829 +0 +120 +absolute + + + +0.01 +smooth + +8.536877698342389 +47.35040005307653 +428.7843567375436 +-147.02191649073808 +71.69668581923878 +0 +120 +absolute + + + +0.01 +smooth + +8.53687725840272 +47.350400325843744 +428.7846910826067 +-147.11802921926076 +71.69447777846827 +0 +120 +absolute + + + +0.01 +smooth + +8.536876817423714 +47.35040059823424 +428.7850263789171 +-147.21405673393468 +71.69227135404216 +0 +120 +absolute + + + +0.01 +smooth + +8.53687637541293 +47.3504008702446 +428.78536260794834 +-147.30999874502103 +71.69006736723132 +0 +120 +absolute + + + +0.01 +smooth + +8.536875932377926 +47.35040114187142 +428.7856997511746 +-147.4058549627808 +71.6878666393066 +0 +120 +absolute + + + +0.01 +smooth + +8.536875488326261 +47.35040141311133 +428.7860377900694 +-147.5016250974751 +71.68566999153882 +0 +120 +absolute + + + +0.01 +smooth + +8.536875043265493 +47.350401683960875 +428.7863767061064 +-147.59730885936492 +71.6834782451988 +0 +120 +absolute + + + +0.01 +smooth + +8.536874597203179 +47.35040195441666 +428.7867164807594 +-147.69290595871132 +71.6812922215574 +0 +120 +absolute + + + +0.01 +smooth + +8.53687415014688 +47.35040222447532 +428.78705709550235 +-147.78841610577547 +71.67911274188546 +0 +120 +absolute + + + +0.01 +smooth + +8.536873702104147 +47.35040249413338 +428.7873985318087 +-147.8838390108183 +71.67694062745379 +0 +120 +absolute + + + +0.01 +smooth + +8.536873253082542 +47.35040276338748 +428.78774077115247 +-147.97917438410093 +71.67477669953325 +0 +120 +absolute + + + +0.01 +smooth + +8.536872803089627 +47.35040303223422 +428.7880837950073 +-148.0744219358845 +71.67262177939467 +0 +120 +absolute + + + +0.01 +smooth + +8.536872352132953 +47.35040330067016 +428.7884275848467 +-148.16958137642985 +71.67047668830891 +0 +120 +absolute + + + +0.01 +smooth + +8.536871900220083 +47.35040356869194 +428.7887721221449 +-148.26465241599828 +71.66834224754679 +0 +120 +absolute + + + +0.01 +smooth + +8.536871447358573 +47.350403836296124 +428.78911738837536 +-148.3596347648507 +71.66621927837915 +0 +120 +absolute + + + +0.01 +smooth + +8.53687099355598 +47.350404103479306 +428.7894633650118 +-148.45452813324832 +71.66410860207681 +0 +120 +absolute + + + +0.01 +smooth + +8.536870538819867 +47.3504043702381 +428.7898100335282 +-148.54933223145207 +71.66201103991065 +0 +120 +absolute + + + +0.01 +smooth + +8.536870083157787 +47.35040463656908 +428.79015737539805 +-148.64404676972305 +71.65992741315146 +0 +120 +absolute + + + +0.01 +smooth + +8.536869626577298 +47.35040490246885 +428.7905053720952 +-148.73867145832227 +71.65785854307009 +0 +120 +absolute + + + +0.01 +smooth + +8.536869169085962 +47.350405167934014 +428.79085400509354 +-148.83320600751094 +71.65580525093743 +0 +120 +absolute + + + +0.01 +smooth + +8.53686871069133 +47.350405432961146 +428.7912032558664 +-148.92765012754992 +71.65376835802422 +0 +120 +absolute + + + +0.01 +smooth + +8.536868251400968 +47.350405697546854 +428.7915531058881 +-149.02200352870048 +71.65174868560139 +0 +120 +absolute + + + +0.01 +smooth + +8.536867791222429 +47.350405961687734 +428.7919035366321 +-149.11626592122354 +71.64974705493972 +0 +120 +absolute + + + +0.01 +smooth + +8.536867330163272 +47.350406225380375 +428.792254529572 +-149.2104370153802 +71.64776428731007 +0 +120 +absolute + + + +0.01 +smooth + +8.53686686823106 +47.35040648862139 +428.792606066182 +-149.3045165214316 +71.64580120398331 +0 +120 +absolute + + + +0.01 +smooth + +8.536866405433342 +47.350406751407334 +428.7929581279354 +-149.39850414963868 +71.64385862623018 +0 +120 +absolute + + + +0.01 +smooth + +8.536865941777684 +47.35040701373483 +428.7933106963061 +-149.4923996102625 +71.64193737532163 +0 +120 +absolute + + + +0.01 +smooth + +8.536865477271641 +47.35040727560049 +428.79366375276805 +-149.58620261356427 +71.64003827252846 +0 +120 +absolute + + + +0.01 +smooth + +8.536865011922764 +47.35040753700085 +428.7940172787945 +-149.67991286980478 +71.63816213912145 +0 +120 +absolute + + + +0.01 +smooth + +8.536864545738625 +47.35040779793257 +428.7943712558598 +-149.77353008924544 +71.6363097963715 +0 +120 +absolute + + + +0.01 +smooth + +8.536864078726772 +47.350408058392205 +428.79472566543745 +-149.86705398214707 +71.63448206554945 +0 +120 +absolute + + + +0.01 +smooth + +8.536863610894766 +47.35040831837637 +428.795080489001 +-149.96048425877083 +71.6326797679261 +0 +120 +absolute + + + +0.01 +smooth + +8.536863142250166 +47.35040857788164 +428.79543570802457 +-150.0538206293777 +71.63090372477232 +0 +120 +absolute + + + +0.01 +smooth + +8.536862672800526 +47.35040883690463 +428.7957913039817 +-150.14706280422885 +71.62915475735895 +0 +120 +absolute + + + +0.01 +smooth + +8.536862202553408 +47.35040909544191 +428.7961472583461 +-150.24021049358527 +71.62743368695678 +0 +120 +absolute + + + +0.01 +smooth + +8.536861731516371 +47.3504093534901 +428.7965035525916 +-150.33326340770805 +71.62574133483669 +0 +120 +absolute + + + +0.01 +smooth + +8.536861259696968 +47.35040961104578 +428.79686016819204 +-150.42622125685818 +71.62407852226953 +0 +120 +absolute + + + +0.01 +smooth + +8.53686078710276 +47.35040986810556 +428.797217086621 +-150.51908375129685 +71.6224460705261 +0 +120 +absolute + + + +0.01 +smooth + +8.536860313741307 +47.35041012466601 +428.7975742893523 +-150.61185060128497 +71.62084480087725 +0 +120 +absolute + + + +0.01 +smooth + +8.536859839620163 +47.35041038072374 +428.79793175785977 +-150.70452151708378 +71.61927553459383 +0 +120 +absolute + + + +0.01 +smooth + +8.536859364746888 +47.350410636275356 +428.79828947361705 +-150.79709620895423 +71.61773909294666 +0 +120 +absolute + + + +0.01 +smooth + +8.536858889129041 +47.35041089131742 +428.79864741809797 +-150.88957438715732 +71.6162362972066 +0 +120 +absolute + + + +0.01 +smooth + +8.536858412774178 +47.350411145846564 +428.7990055727762 +-150.98195576195428 +71.61476796864447 +0 +120 +absolute + + + +0.01 +smooth + +8.53685793568986 +47.35041139985936 +428.79936391912554 +-151.07424004360604 +71.6133349285311 +0 +120 +absolute + + + +0.01 +smooth + +8.536857457883642 +47.35041165335241 +428.7997224386197 +-151.16642694237373 +71.61193799813736 +0 +120 +absolute + + + +0.01 +smooth + +8.53685697936308 +47.3504119063223 +428.8000811127325 +-151.25851616851836 +71.61057799873406 +0 +120 +absolute + + + +0.01 +smooth + +8.536856500135737 +47.350412158765636 +428.80043992293776 +-151.35050743230104 +71.60925575159204 +0 +120 +absolute + + + +0.01 +smooth + +8.536856020209171 +47.35041241067901 +428.8007988507091 +-151.44240044398282 +71.60797207798215 +0 +120 +absolute + + + +0.01 +smooth + +8.536855539590936 +47.350412662059 +428.80115787752027 +-151.53419491382476 +71.60672779917522 +0 +120 +absolute + + + +0.01 +smooth + +8.536855058288593 +47.35041291290223 +428.8015169848451 +-151.62589055208787 +71.6055237364421 +0 +120 +absolute + + + +0.01 +smooth + +8.5368545763097 +47.350413163205275 +428.8018761541572 +-151.71748706903327 +71.6043607110536 +0 +120 +absolute + + + +0.01 +smooth + +8.536854093661812 +47.350413412964734 +428.8022353669305 +-151.80898417492205 +71.60323954428058 +0 +120 +absolute + + + +0.01 +smooth + +8.536853610352491 +47.3504136621772 +428.8025946046387 +-151.90038158001522 +71.60216105739387 +0 +120 +absolute + + + +0.01 +smooth + +8.536853126389293 +47.35041391083928 +428.80295384875546 +-151.9916789945738 +71.60112607166431 +0 +120 +absolute + + + +0.01 +smooth + +8.536852641779774 +47.35041415894756 +428.8033130807546 +-152.08287612885897 +71.60013540836275 +0 +120 +absolute + + + +0.01 +smooth + +8.536852156531497 +47.35041440649863 +428.8036722821099 +-152.17397269313165 +71.59918988876001 +0 +120 +absolute + + + +0.01 +smooth + +8.536851670652016 +47.35041465348908 +428.80403143429515 +-152.26496839765306 +71.59829033412692 +0 +120 +absolute + + + +0.01 +smooth + +8.53685118414889 +47.350414899915506 +428.804390518784 +-152.3558629526841 +71.59743756573435 +0 +120 +absolute + + + +0.01 +smooth + +8.536850697029678 +47.35041514577453 +428.80474951705025 +-152.446656068486 +71.59663240485311 +0 +120 +absolute + + + +0.01 +smooth + +8.536850209301937 +47.35041539106272 +428.8051084105676 +-152.53734745531966 +71.59587567275403 +0 +120 +absolute + + + +0.01 +smooth + +8.536849720973224 +47.35041563577667 +428.80546718080984 +-152.62793682344625 +71.595168190708 +0 +120 +absolute + + + +0.01 +smooth + +8.536849232051102 +47.35041587991299 +428.8058258092507 +-152.7184238831268 +71.5945107799858 +0 +120 +absolute + + + +0.01 +smooth + +8.536848742543123 +47.35041612346826 +428.80618427736397 +-152.80880834462243 +71.59390426185828 +0 +120 +absolute + + + +0.01 +smooth + +8.536848252456847 +47.350416366439084 +428.8065425666233 +-152.89908991819405 +71.5933494575963 +0 +120 +absolute + + + +0.01 +smooth + +8.536847761799832 +47.35041660882205 +428.8069006585027 +-152.98926831410284 +71.5928471884707 +0 +120 +absolute + + + +0.01 +smooth + +8.536847270579637 +47.35041685061377 +428.80725853447564 +-153.07934324260987 +71.59239827575227 +0 +120 +absolute + + + +0.01 +smooth + +8.53684677880382 +47.350417091810804 +428.80761617601604 +-153.16931441397614 +71.5920035407119 +0 +120 +absolute + + + +0.01 +smooth + +8.536846286479939 +47.35041733240978 +428.80797356459755 +-153.25918153846274 +71.59166380462042 +0 +120 +absolute + + + +0.01 +smooth + +8.53684579361555 +47.350417572407274 +428.80833068169403 +-153.3489443263307 +71.59137988874865 +0 +120 +absolute + + + +0.01 +smooth + +8.536845300176896 +47.35041781182324 +428.80868758308236 +-153.4386043916289 +71.59114783510961 +0 +120 +absolute + + + +0.01 +smooth + +8.536844805817559 +47.350418050853975 +428.8090448880222 +-153.52817775633406 +71.59092728495615 +0 +120 +absolute + + + +0.01 +smooth + +8.536844310463271 +47.35041828954145 +428.80940272855617 +-153.61766790525704 +71.59070893200487 +0 +120 +absolute + + + +0.01 +smooth + +8.536843814120681 +47.350418527881764 +428.80976109138925 +-153.70707459437753 +71.59049279161172 +0 +120 +absolute + + + +0.01 +smooth + +8.536843316796455 +47.35041876587107 +428.8101199632263 +-153.7963975796752 +71.59027887913288 +0 +120 +absolute + + + +0.01 +smooth + +8.536842818497247 +47.350419003505515 +428.81047933077264 +-153.8856366171299 +71.59006720992433 +0 +120 +absolute + + + +0.01 +smooth + +8.536842319229713 +47.350419240781264 +428.81083918073284 +-153.97479146272124 +71.58985779934216 +0 +120 +absolute + + + +0.01 +smooth + +8.536841819000513 +47.350419477694416 +428.811199499812 +-154.063861872429 +71.58965066274243 +0 +120 +absolute + + + +0.01 +smooth + +8.536841317816304 +47.35041971424116 +428.8115602747151 +-154.15284760223273 +71.58944581548116 +0 +120 +absolute + + + +0.01 +smooth + +8.53684081568374 +47.3504199504176 +428.8119214921471 +-154.24174840811233 +71.58924327291443 +0 +120 +absolute + + + +0.01 +smooth + +8.536840312609483 +47.3504201862199 +428.812283138813 +-154.33056404604739 +71.58904305039829 +0 +120 +absolute + + + +0.01 +smooth + +8.536839808600194 +47.35042042164421 +428.8126452014177 +-154.41929427201777 +71.58884516328885 +0 +120 +absolute + + + +0.01 +smooth + +8.53683930366252 +47.35042065668665 +428.81300766666607 +-154.50793884200297 +71.58864962694209 +0 +120 +absolute + + + +0.01 +smooth + +8.536838797803126 +47.35042089134338 +428.8133705212634 +-154.59649751198282 +71.58845645671408 +0 +120 +absolute + + + +0.01 +smooth + +8.536838291028669 +47.350421125610566 +428.8137337519145 +-154.6849700379371 +71.58826566796097 +0 +120 +absolute + + + +0.01 +smooth + +8.536837783345804 +47.350421359484294 +428.81409734532406 +-154.77335617584535 +71.58807727603867 +0 +120 +absolute + + + +0.01 +smooth + +8.53683727476119 +47.350421592960735 +428.8144612881972 +-154.86165568168735 +71.58789129630333 +0 +120 +absolute + + + +0.01 +smooth + +8.536836765281485 +47.35042182603605 +428.81482556723915 +-154.94986831144288 +71.58770774411101 +0 +120 +absolute + + + +0.01 +smooth + +8.536836254913348 +47.350422058706364 +428.8151901691546 +-155.03799382109165 +71.58752663481776 +0 +120 +absolute + + + +0.01 +smooth + +8.536835743663433 +47.35042229096783 +428.81555508064866 +-155.12603196661325 +71.58734798377961 +0 +120 +absolute + + + +0.01 +smooth + +8.536835231538397 +47.350422522816565 +428.815920288426 +-155.21398250398744 +71.58717180635261 +0 +120 +absolute + + + +0.01 +smooth + +8.536834718544904 +47.35042275424873 +428.81628577919184 +-155.301845189194 +71.58699811789285 +0 +120 +absolute + + + +0.01 +smooth + +8.536834204689606 +47.3504229852605 +428.8166515396514 +-155.38961977821265 +71.58682693375641 +0 +120 +absolute + + + +0.01 +smooth + +8.53683368997916 +47.35042321584797 +428.817017556509 +-155.47730602702296 +71.58665826929926 +0 +120 +absolute + + + +0.01 +smooth + +8.536833174420227 +47.350423446007284 +428.8173838164701 +-155.56490369160477 +71.58649213987756 +0 +120 +absolute + + + +0.01 +smooth + +8.536832658019465 +47.350423675734625 +428.8177503062395 +-155.65241252793777 +71.58632856084732 +0 +120 +absolute + + + +0.01 +smooth + +8.536832140783524 +47.35042390502609 +428.81811701252207 +-155.73983229200152 +71.58616754756456 +0 +120 +absolute + + + +0.01 +smooth + +8.53683162271907 +47.35042413387787 +428.818483922023 +-155.82716273977596 +71.5860091153854 +0 +120 +absolute + + + +0.01 +smooth + +8.536831103832757 +47.35042436228608 +428.818851021447 +-155.91440362724072 +71.58585327966586 +0 +120 +absolute + + + +0.01 +smooth + +8.536830584131243 +47.350424590246845 +428.8192182974993 +-156.00155471037544 +71.58570005576199 +0 +120 +absolute + + + +0.01 +smooth + +8.536830063621188 +47.35042481775636 +428.8195857368848 +-156.08861574515993 +71.58554945902992 +0 +120 +absolute + + + +0.01 +smooth + +8.536829542309246 +47.35042504481071 +428.8199533263081 +-156.1755864875738 +71.5854015048256 +0 +120 +absolute + + + +0.01 +smooth + +8.536829020202076 +47.35042527140609 +428.82032105247464 +-156.26246669359682 +71.58525620850517 +0 +120 +absolute + + + +0.01 +smooth + +8.536828497306336 +47.3504254975386 +428.8206889020892 +-156.34925611920877 +71.58511358542465 +0 +120 +absolute + + + +0.01 +smooth + +8.536827973628679 +47.350425723204395 +428.8210568618566 +-156.43595452038917 +71.58497365094009 +0 +120 +absolute + + + +0.01 +smooth + +8.536827449175771 +47.35042594839965 +428.82142491848214 +-156.52256165311795 +71.58483642040758 +0 +120 +absolute + + + +0.01 +smooth + +8.536826923954262 +47.35042617312047 +428.82179305867044 +-156.60907727337462 +71.58470190918315 +0 +120 +absolute + + + +0.01 +smooth + +8.536826397970813 +47.350426397363 +428.8221612691266 +-156.69550113713905 +71.58457013262287 +0 +120 +absolute + + + +0.01 +smooth + +8.536825871232086 +47.35042662112344 +428.8225295365558 +-156.78183300039092 +71.58444110608282 +0 +120 +absolute + + + +0.01 +smooth + +8.536825343744727 +47.35042684439784 +428.8228978476626 +-156.86807261910985 +71.584314844919 +0 +120 +absolute + + + +0.01 +smooth + +8.536824815515404 +47.35042706718241 +428.82326618915215 +-156.9542197492756 +71.58419136448751 +0 +120 +absolute + + + +0.01 +smooth + +8.536824286550768 +47.35042728947327 +428.8236345477295 +-157.04027414686792 +71.58407068014441 +0 +120 +absolute + + + +0.01 +smooth + +8.536823756857482 +47.35042751126656 +428.8240029100996 +-157.1262355678665 +71.58395280724571 +0 +120 +absolute + + + +0.01 +smooth + +8.536823226442198 +47.35042773255844 +428.82437126296725 +-157.21210376825104 +71.58383776114754 +0 +120 +absolute + + + +0.01 +smooth + +8.536822695311578 +47.35042795334505 +428.8247395930374 +-157.29787850400123 +71.5837255572059 +0 +120 +absolute + + + +0.01 +smooth + +8.536822163472278 +47.35042817362251 +428.8251078870153 +-157.3835595310968 +71.58361621077685 +0 +120 +absolute + + + +0.01 +smooth + +8.536821630930957 +47.35042839338699 +428.8254761316057 +-157.46914660551752 +71.58350973721649 +0 +120 +absolute + + + +0.01 +smooth + +8.536821097694268 +47.35042861263462 +428.8258443135136 +-157.55463948324302 +71.58340615188085 +0 +120 +absolute + + + +0.01 +smooth + +8.536820563768874 +47.350428831361555 +428.82621241944395 +-157.640037920253 +71.58330547012598 +0 +120 +absolute + + + +0.01 +smooth + +8.53682002916143 +47.350429049563914 +428.82658043610166 +-157.7253416725273 +71.58320770730793 +0 +120 +absolute + + + +0.01 +smooth + +8.536819493878593 +47.350429267237864 +428.8269483501918 +-157.81055049604544 +71.5831128787828 +0 +120 +absolute + + + +0.01 +smooth + +8.536818957927018 +47.35042948437953 +428.82731614841936 +-157.89566414678728 +71.58302099990661 +0 +120 +absolute + + + +0.01 +smooth + +8.53681842131337 +47.350429700985075 +428.8276838174892 +-157.98068238073245 +71.58293208603543 +0 +120 +absolute + + + +0.01 +smooth + +8.536817884044302 +47.35042991705063 +428.82805134410626 +-158.0656049538607 +71.5828461525253 +0 +120 +absolute + + + +0.01 +smooth + +8.536817346126472 +47.35043013257234 +428.82841871497567 +-158.15043162215176 +71.58276321473231 +0 +120 +absolute + + + +0.01 +smooth + +8.536816807566534 +47.35043034754634 +428.8287859168022 +-158.23516214158533 +71.58268328801249 +0 +120 +absolute + + + +0.01 +smooth + +8.536816268371153 +47.35043056196879 +428.82915293629094 +-158.31979626814103 +71.58260638772192 +0 +120 +absolute + + + +0.01 +smooth + +8.53681572854698 +47.35043077583582 +428.8295197601468 +-158.40433375779872 +71.58253252921662 +0 +120 +absolute + + + +0.01 +smooth + +8.536815188100675 +47.350430989143575 +428.8298863750747 +-158.488774366538 +71.5824617278527 +0 +120 +absolute + + + +0.01 +smooth + +8.536814647038899 +47.35043120188821 +428.8302527677797 +-158.57311785033863 +71.58239399898618 +0 +120 +absolute + + + +0.01 +smooth + +8.536814105368304 +47.35043141406585 +428.83061892496676 +-158.6573639651803 +71.58232935797312 +0 +120 +absolute + + + +0.01 +smooth + +8.53681356309555 +47.350431625672655 +428.8309848333408 +-158.7415124670427 +71.58226782016959 +0 +120 +absolute + + + +0.01 +smooth + +8.536813020227292 +47.35043183670476 +428.8313504796068 +-158.82556311190558 +71.58220940093165 +0 +120 +absolute + + + +0.01 +smooth + +8.536812476770193 +47.35043204715829 +428.83171585046966 +-158.9095156557487 +71.58215411561532 +0 +120 +absolute + + + +0.01 +smooth + +8.536811932730906 +47.350432257029425 +428.83208093263437 +-158.99336985455164 +71.58210197957672 +0 +120 +absolute + + + +0.01 +smooth + +8.536811388116089 +47.350432466314274 +428.832445712806 +-159.07712546429423 +71.58205300817184 +0 +120 +absolute + + + +0.01 +smooth + +8.536810842932402 +47.35043267500902 +428.83281017768945 +-159.1607822409561 +71.5820072167568 +0 +120 +absolute + + + +0.01 +smooth + +8.5368102971865 +47.350432883109754 +428.8331743139895 +-159.24433994051702 +71.58196462068761 +0 +120 +absolute + + + +0.01 +smooth + +8.536809750885041 +47.35043309061266 +428.8335381084115 +-159.32779831895667 +71.58192523532036 +0 +120 +absolute + + + +0.01 +smooth + +8.536809204034686 +47.35043329751387 +428.83390154766005 +-159.41115713225474 +71.58188907601108 +0 +120 +absolute + + + +0.01 +smooth + +8.536808656642087 +47.35043350380951 +428.83426461844033 +-159.49441613639098 +71.58185615811584 +0 +120 +absolute + + + +0.01 +smooth + +8.536808108713906 +47.35043370949575 +428.83462730745714 +-159.57757508734508 +71.5818264969907 +0 +120 +absolute + + + +0.01 +smooth + +8.536807560256797 +47.350433914568725 +428.8349896014156 +-159.6606337410968 +71.58180010799171 +0 +120 +absolute + + + +0.01 +smooth + +8.53680701127742 +47.35043411902457 +428.8353514870206 +-159.7435918536258 +71.58177700647495 +0 +120 +absolute + + + +0.01 +smooth + +8.536806461782431 +47.350434322859435 +428.8357129509771 +-159.82644918091174 +71.58175720779644 +0 +120 +absolute + + + +0.01 +smooth + +8.53680591177849 +47.35043452606946 +428.83607397999003 +-159.9092054789344 +71.58174072731227 +0 +120 +absolute + + + +0.01 +smooth + +8.536805361272252 +47.35043472865078 +428.8364345607645 +-159.99186050367354 +71.58172758037848 +0 +120 +absolute + + + +0.01 +smooth + +8.536804810270375 +47.350434930599555 +428.8367946800052 +-160.0744140111088 +71.58171778235112 +0 +120 +absolute + + + +0.01 +smooth + +8.53680425877952 +47.35043513191192 +428.8371543244174 +-160.15686575721986 +71.58171134858628 +0 +120 +absolute + + + +0.01 +smooth + +8.536803706806339 +47.35043533258402 +428.8375134807059 +-160.23921549798655 +71.58170829443998 +0 +120 +absolute + + + +0.01 +smooth + +8.536803154284708 +47.35043553266946 +428.83787224988646 +-160.32146664605511 +71.58171768539626 +0 +120 +absolute + + + +0.01 +smooth + +8.536802600921781 +47.350435732400356 +428.83823108985905 +-160.40363400372394 +71.58177639157137 +0 +120 +absolute + + + +0.01 +smooth + +8.536802046691237 +47.35043593179778 +428.8385900409875 +-160.48571898262603 +71.58188764914878 +0 +120 +absolute + + + +0.01 +smooth + +8.536801491599071 +47.350436130857204 +428.83894909290876 +-160.56772137004373 +71.58205065007525 +0 +120 +absolute + + + +0.01 +smooth + +8.536800935651286 +47.35043632957411 +428.83930823525975 +-160.64964095325954 +71.58226458629744 +0 +120 +absolute + + + +0.01 +smooth + +8.536800378853885 +47.35043652794399 +428.8396674576776 +-160.7314775195558 +71.58252864976214 +0 +120 +absolute + + + +0.01 +smooth + +8.53679982121287 +47.3504367259623 +428.8400267497991 +-160.81323085621497 +71.58284203241607 +0 +120 +absolute + + + +0.01 +smooth + +8.536799262734242 +47.35043692362458 +428.84038610126146 +-160.89490075051953 +71.58320392620598 +0 +120 +absolute + + + +0.01 +smooth + +8.536798703424006 +47.35043712092628 +428.84074550170163 +-160.97648698975198 +71.58361352307861 +0 +120 +absolute + + + +0.01 +smooth + +8.536798143288163 +47.35043731786289 +428.84110494075657 +-161.0579893611945 +71.58407001498068 +0 +120 +absolute + + + +0.01 +smooth + +8.536797582332717 +47.350437514429906 +428.8414644080635 +-161.13940765212988 +71.58457259385897 +0 +120 +absolute + + + +0.01 +smooth + +8.536797020563665 +47.35043771062281 +428.8418238932592 +-161.22074164984022 +71.58512045166019 +0 +120 +absolute + + + +0.01 +smooth + +8.536796457987014 +47.350437906437094 +428.8421833859807 +-161.3019911416082 +71.58571278033106 +0 +120 +absolute + + + +0.01 +smooth + +8.536795894608765 +47.350438101868235 +428.84254287586504 +-161.3831559147161 +71.58634877181838 +0 +120 +absolute + + + +0.01 +smooth + +8.53679533043492 +47.35043829691171 +428.8429023525491 +-161.4642357564464 +71.5870276180688 +0 +120 +absolute + + + +0.01 +smooth + +8.53679476547148 +47.35043849156301 +428.8432618056703 +-161.5452304540816 +71.58774851102918 +0 +120 +absolute + + + +0.01 +smooth + +8.53679419972445 +47.35043868581765 +428.84362122486516 +-161.62613979490402 +71.58851064264614 +0 +120 +absolute + + + +0.01 +smooth + +8.536793633199828 +47.35043887967107 +428.84398059977093 +-161.70696356619618 +71.58931320486649 +0 +120 +absolute + + + +0.01 +smooth + +8.536793065903622 +47.35043907311879 +428.8443399200247 +-161.7877015552405 +71.59015538963696 +0 +120 +absolute + + + +0.01 +smooth + +8.536792497841828 +47.35043926615629 +428.8446991752634 +-161.86835354931938 +71.59103638890427 +0 +120 +absolute + + + +0.01 +smooth + +8.536791929020456 +47.35043945877905 +428.84505835512385 +-161.94891933571535 +71.59195539461518 +0 +120 +absolute + + + +0.01 +smooth + +8.536791359445502 +47.350439650982565 +428.84541744924326 +-162.02939870171073 +71.59291159871641 +0 +120 +absolute + + + +0.01 +smooth + +8.536790789122966 +47.350439842762306 +428.84577644725863 +-162.109791434588 +71.5939041931547 +0 +120 +absolute + + + +0.01 +smooth + +8.536790218058854 +47.35044003411375 +428.8461353388068 +-162.1900973216295 +71.59493236987682 +0 +120 +absolute + + + +0.01 +smooth + +8.53678964625917 +47.350440225032415 +428.8464941135249 +-162.27031615011788 +71.59599532082947 +0 +120 +absolute + + + +0.01 +smooth + +8.536789073729912 +47.35044041551377 +428.84685276104995 +-162.35044770733535 +71.5970922379594 +0 +120 +absolute + + + +0.01 +smooth + +8.536788500477087 +47.35044060555332 +428.84721127101903 +-162.43049178056452 +71.59822231321338 +0 +120 +absolute + + + +0.01 +smooth + +8.536787926506694 +47.350440795146525 +428.8475696330691 +-162.51044815708775 +71.59938473853812 +0 +120 +absolute + + + +0.01 +smooth + +8.536787351824737 +47.35044098428887 +428.84792783683713 +-162.5903166241875 +71.60057870588037 +0 +120 +absolute + + + +0.01 +smooth + +8.536786776437218 +47.35044117297587 +428.8482858719601 +-162.6700969691461 +71.60180340718686 +0 +120 +absolute + + + +0.01 +smooth + +8.536786200350136 +47.35044136120298 +428.84864372807516 +-162.74978897924615 +71.60305803440434 +0 +120 +absolute + + + +0.01 +smooth + +8.536785623569495 +47.3504415489657 +428.8490013948189 +-162.82939244176987 +71.60434177947953 +0 +120 +absolute + + + +0.01 +smooth + +8.536785046101299 +47.35044173625952 +428.8493588618289 +-162.90890714399995 +71.60565383435919 +0 +120 +absolute + + + +0.01 +smooth + +8.536784467951549 +47.3504419230799 +428.8497161187417 +-162.98833287321864 +71.60699339099006 +0 +120 +absolute + + + +0.01 +smooth + +8.536783889126244 +47.35044210942237 +428.8500731551946 +-163.0676694167084 +71.60835964131884 +0 +120 +absolute + + + +0.01 +smooth + +8.536783309631394 +47.35044229528239 +428.85042996082456 +-163.14691656175177 +71.60975177729233 +0 +120 +absolute + + + +0.01 +smooth + +8.536782729472995 +47.35044248065545 +428.8507865252685 +-163.2260740956311 +71.61116899085725 +0 +120 +absolute + + + +0.01 +smooth + +8.53678214865705 +47.35044266553704 +428.85114283816364 +-163.30514180562884 +71.61261047396033 +0 +120 +absolute + + + +0.01 +smooth + +8.536781567189562 +47.35044284992263 +428.8514988891466 +-163.3841194790274 +71.61407541854832 +0 +120 +absolute + + + +0.01 +smooth + +8.536780985076533 +47.35044303380772 +428.85185466785464 +-163.4630069031092 +71.6155630165679 +0 +120 +absolute + + + +0.01 +smooth + +8.536780402323966 +47.35044321718779 +428.85221016392484 +-163.54180386515677 +71.6170724599659 +0 +120 +absolute + + + +0.01 +smooth + +8.536779818937863 +47.35044340005834 +428.85256536699393 +-163.62051015245243 +71.61860294068902 +0 +120 +absolute + + + +0.01 +smooth + +8.536779234924225 +47.35044358241485 +428.85292026669924 +-163.6991255522787 +71.62015365068397 +0 +120 +absolute + + + +0.01 +smooth + +8.536778650289055 +47.35044376425279 +428.8532748526776 +-163.77764985191797 +71.62172378189753 +0 +120 +absolute + + + +0.01 +smooth + +8.536778065038357 +47.350443945567655 +428.853629114566 +-163.85608283865272 +71.62331252627644 +0 +120 +absolute + + + +0.01 +smooth + +8.53677747917813 +47.350444126354944 +428.8539830420015 +-163.93442429976534 +71.62491907576741 +0 +120 +absolute + + + +0.01 +smooth + +8.536776892714379 +47.350444306610136 +428.85433662462117 +-164.01267402253825 +71.6265426223172 +0 +120 +absolute + + + +0.01 +smooth + +8.536776305653103 +47.35044448632871 +428.8546898520619 +-164.09083179425394 +71.62818235787256 +0 +120 +absolute + + + +0.01 +smooth + +8.536775718000307 +47.350444665506146 +428.85504271396076 +-164.16889740219483 +71.6298374743802 +0 +120 +absolute + + + +0.01 +smooth + +8.536775129761992 +47.350444844137954 +428.85539519995467 +-164.24687063364328 +71.63150716378686 +0 +120 +absolute + + + +0.01 +smooth + +8.53677454094416 +47.35044502221961 +428.8557472996808 +-164.32475127588185 +71.63319061803932 +0 +120 +absolute + + + +0.01 +smooth + +8.536773951552814 +47.35044519974659 +428.856099002776 +-164.40253911619288 +71.6348870290843 +0 +120 +absolute + + + +0.01 +smooth + +8.536773361593958 +47.35044537671438 +428.8564502988774 +-164.48023394185887 +71.6365955888685 +0 +120 +absolute + + + +0.01 +smooth + +8.53677277107359 +47.35044555311849 +428.856801177622 +-164.55783554016216 +71.63831548933871 +0 +120 +absolute + + + +0.01 +smooth + +8.536772179997714 +47.35044572895438 +428.8571516286467 +-164.63534369838527 +71.64004592244164 +0 +120 +absolute + + + +0.01 +smooth + +8.536771588372334 +47.35044590421754 +428.85750164158856 +-164.7127582038106 +71.64178608012406 +0 +120 +absolute + + + +0.01 +smooth + +8.536770996203451 +47.350446078903474 +428.85785120608455 +-164.79007884372064 +71.64353515433268 +0 +120 +absolute + + + +0.01 +smooth + +8.536770403497066 +47.35044625300765 +428.85820031177184 +-164.86730540539773 +71.64529233701424 +0 +120 +absolute + + + +0.01 +smooth + +8.536769810259182 +47.35044642652555 +428.85854894828725 +-164.94443767612438 +71.6470568201155 +0 +120 +absolute + + + +0.01 +smooth + +8.536769216495802 +47.35044659945268 +428.8588971052679 +-165.02147544318296 +71.6488277955832 +0 +120 +absolute + + + +0.01 +smooth + +8.536768622212927 +47.35044677178452 +428.8592447723508 +-165.09841849385597 +71.65060445536406 +0 +120 +absolute + + + +0.01 +smooth + +8.53676802741656 +47.350446943516545 +428.8595919391728 +-165.1752666154258 +71.65238599140481 +0 +120 +absolute + + + +0.01 +smooth + +8.536767432112704 +47.35044711464425 +428.8599385953711 +-165.25201959517494 +71.65417159565223 +0 +120 +absolute + + + +0.01 +smooth + +8.536766836307358 +47.35044728516311 +428.86028473058263 +-165.3286772203857 +71.65596046005302 +0 +120 +absolute + + + +0.01 +smooth + +8.536766240006529 +47.35044745506863 +428.86063033444435 +-165.40523927834073 +71.65775177655394 +0 +120 +absolute + + + +0.01 +smooth + +8.536765643216215 +47.35044762435629 +428.8609753965934 +-165.4817055563222 +71.65954473710174 +0 +120 +absolute + + + +0.01 +smooth + +8.536765045942422 +47.350447793021566 +428.8613199066666 +-165.55807584161278 +71.66133853364315 +0 +120 +absolute + + + +0.01 +smooth + +8.536764448191148 +47.350447961059956 +428.8616638543011 +-165.63434992149473 +71.66313235812487 +0 +120 +absolute + + + +0.01 +smooth + +8.536763849968398 +47.35044812846694 +428.86200722913395 +-165.7105275832506 +71.6649254024937 +0 +120 +absolute + + + +0.01 +smooth + +8.536763251280172 +47.350448295237996 +428.86235002080195 +-165.78660861416276 +71.66671685869633 +0 +120 +absolute + + + +0.01 +smooth + +8.536762652132477 +47.350448461368615 +428.86269221894236 +-165.8625928015137 +71.66850591867956 +0 +120 +absolute + + + +0.01 +smooth + +8.53676205253131 +47.3504486268543 +428.8630338131919 +-165.93847993258578 +71.67029177439007 +0 +120 +absolute + + + +0.01 +smooth + +8.536761452482676 +47.350448791690525 +428.86337479318786 +-166.01426979466152 +71.67207361777461 +0 +120 +absolute + + + +0.01 +smooth + +8.536760851992575 +47.35044895587277 +428.8637151485671 +-166.0899621750233 +71.67385064077995 +0 +120 +absolute + + + +0.01 +smooth + +8.53676025106701 +47.35044911939652 +428.8640548689668 +-166.16555686095353 +71.6756220353528 +0 +120 +absolute + + + +0.01 +smooth + +8.536759649711986 +47.35044928225729 +428.8643939440236 +-166.2410536397347 +71.67738699343991 +0 +120 +absolute + + + +0.01 +smooth + +8.536759047933502 +47.35044944445052 +428.86473236337486 +-166.31645229864924 +71.67914470698803 +0 +120 +absolute + + + +0.01 +smooth + +8.536758445737563 +47.35044960597173 +428.86507011665736 +-166.39175262497957 +71.68089436794386 +0 +120 +absolute + + + +0.01 +smooth + +8.536757843130165 +47.35044976681639 +428.8654071935083 +-166.4669544060081 +71.68263516825421 +0 +120 +absolute + + + +0.01 +smooth + +8.536757240117318 +47.35044992697999 +428.86574358356455 +-166.54205742901732 +71.68436629986576 +0 +120 +absolute + + + +0.01 +smooth + +8.536756636597298 +47.3504500865784 +428.86607944338573 +-166.6170674060564 +71.68609989844278 +0 +120 +absolute + + + +0.01 +smooth + +8.536756032340712 +47.35045024586925 +428.8664151279095 +-166.6919970663959 +71.68786364710931 +0 +120 +absolute + + + +0.01 +smooth + +8.53675542734484 +47.35045040485625 +428.8667506412804 +-166.7668466672247 +71.68965817075028 +0 +120 +absolute + + + +0.01 +smooth + +8.536754821615201 +47.35045056353381 +428.8670859748857 +-166.84161601258742 +71.69148310747964 +0 +120 +absolute + + + +0.01 +smooth + +8.536754215157314 +47.350450721896465 +428.8674211201131 +-166.91630490652858 +71.69333809541136 +0 +120 +absolute + + + +0.01 +smooth + +8.5367536079767 +47.3504508799386 +428.8677560683499 +-166.99091315309252 +71.69522277265938 +0 +120 +absolute + + + +0.01 +smooth + +8.536753000078873 +47.35045103765471 +428.8680908109835 +-167.06544055632398 +71.69713677733768 +0 +120 +absolute + + + +0.01 +smooth + +8.536752391469356 +47.35045119503924 +428.8684253394019 +-167.13988692026746 +71.69907974756022 +0 +120 +absolute + + + +0.01 +smooth + +8.536751782153669 +47.350451352086644 +428.8687596449919 +-167.2142520489674 +71.70105132144096 +0 +120 +absolute + + + +0.01 +smooth + +8.536751172137327 +47.35045150879138 +428.8690937191414 +-167.28853574646843 +71.70305113709384 +0 +120 +absolute + + + +0.01 +smooth + +8.536750561425851 +47.35045166514791 +428.8694275532378 +-167.36273781681507 +71.70507883263288 +0 +120 +absolute + + + +0.01 +smooth + +8.536749950024758 +47.35045182115068 +428.86976113866865 +-167.43685806405173 +71.70713404617199 +0 +120 +absolute + + + +0.01 +smooth + +8.536749337939574 +47.350451976794176 +428.87009446682146 +-167.51089629222324 +71.70921641582521 +0 +120 +absolute + + + +0.01 +smooth + +8.53674872517581 +47.35045213207282 +428.8704275290836 +-167.58485230537374 +71.71132557970641 +0 +120 +absolute + + + +0.01 +smooth + +8.536748111738985 +47.35045228698109 +428.8707603168425 +-167.65872590754802 +71.71346117592958 +0 +120 +absolute + + + +0.01 +smooth + +8.536747497634629 +47.350452441513426 +428.87109282148595 +-167.7325169027906 +71.71562284260875 +0 +120 +absolute + + + +0.01 +smooth + +8.536746882868247 +47.350452595664315 +428.8714250344011 +-167.8062250951459 +71.71781021785779 +0 +120 +absolute + + + +0.01 +smooth + +8.536746267445361 +47.35045274942818 +428.87175694697555 +-167.8798502886585 +71.72002293979072 +0 +120 +absolute + + + +0.01 +smooth + +8.536745651371497 +47.35045290279949 +428.87208855059686 +-167.95339228737305 +71.72226064652148 +0 +120 +absolute + + + +0.01 +smooth + +8.536745034652169 +47.35045305577269 +428.8724198366524 +-168.0268508953339 +71.72452297616405 +0 +120 +absolute + + + +0.01 +smooth + +8.536744417292898 +47.35045320834229 +428.87275079652994 +-168.10022591658569 +71.7268095668324 +0 +120 +absolute + + + +0.01 +smooth + +8.5367437992992 +47.350453360502684 +428.8730814216166 +-168.17351715517296 +71.72912005664047 +0 +120 +absolute + + + +0.01 +smooth + +8.536743180676595 +47.35045351224835 +428.87341170330006 +-168.24672441514016 +71.73145408370223 +0 +120 +absolute + + + +0.01 +smooth + +8.536742561430609 +47.350453663573774 +428.87374163296795 +-168.31984750053195 +71.7338112861317 +0 +120 +absolute + + + +0.01 +smooth + +8.536741941566746 +47.35045381447337 +428.87407120200737 +-168.39288621539274 +71.73619130204273 +0 +120 +absolute + + + +0.01 +smooth + +8.536741321090538 +47.3504539649416 +428.87440040180616 +-168.46584036376714 +71.73859376954935 +0 +120 +absolute + + + +0.01 +smooth + +8.5367407000075 +47.35045411497296 +428.8747292237516 +-168.53870974969965 +71.74101832676554 +0 +120 +absolute + + + +0.01 +smooth + +8.536740078323147 +47.35045426456185 +428.8750576592313 +-168.61149417723473 +71.74346461180522 +0 +120 +absolute + + + +0.01 +smooth + +8.536739456043007 +47.35045441370279 +428.87538569963266 +-168.6841934504171 +71.74593226278239 +0 +120 +absolute + + + +0.01 +smooth + +8.53673883317259 +47.350454562390176 +428.8757133363433 +-168.75680737329117 +71.74842091781102 +0 +120 +absolute + + + +0.01 +smooth + +8.536738209717416 +47.3504547106185 +428.8760405607505 +-168.8293357499014 +71.75093021500501 +0 +120 +absolute + + + +0.01 +smooth + +8.536737585683014 +47.35045485838223 +428.8763673642422 +-168.90177838429258 +71.75345979247844 +0 +120 +absolute + + + +0.01 +smooth + +8.53673696107489 +47.35045500567579 +428.8766937382052 +-168.9741350805089 +71.75600928834513 +0 +120 +absolute + + + +0.01 +smooth + +8.536736335898569 +47.35045515249365 +428.87701967402757 +-169.04640564259515 +71.75857834071914 +0 +120 +absolute + + + +0.01 +smooth + +8.53673571015957 +47.35045529883028 +428.8773451630965 +-169.11858987459578 +71.7611665877144 +0 +120 +absolute + + + +0.01 +smooth + +8.53673508386341 +47.35045544468011 +428.8776701967994 +-169.19068758055525 +71.76377366744488 +0 +120 +absolute + + + +0.01 +smooth + +8.536734457015612 +47.350455590037626 +428.8779947665241 +-169.26269856451825 +71.76639921802457 +0 +120 +absolute + + + +0.01 +smooth + +8.536733829621692 +47.35045573489727 +428.87831886365785 +-169.33462263052925 +71.76904287756739 +0 +120 +absolute + + + +0.01 +smooth + +8.536733201687166 +47.3504558792535 +428.87864247958817 +-169.40645958263266 +71.77170428418732 +0 +120 +absolute + + + +0.01 +smooth + +8.536732573217561 +47.35045602310078 +428.87896560570283 +-169.47820922487324 +71.77438307599837 +0 +120 +absolute + + + +0.01 +smooth + +8.536731944218388 +47.350456166433545 +428.87928823338876 +-169.54987136129532 +71.7770788911144 +0 +120 +absolute + + + +0.01 +smooth + +8.53673131469517 +47.35045630924629 +428.8796103540339 +-169.62144579594352 +71.77979136764947 +0 +120 +absolute + + + +0.01 +smooth + +8.536730684653426 +47.35045645153344 +428.87993195902555 +-169.69293233286237 +71.7825201437175 +0 +120 +absolute + + + +0.01 +smooth + +8.536730054098674 +47.35045659328945 +428.8802530397512 +-169.76433077609641 +71.78526485743245 +0 +120 +absolute + + + +0.01 +smooth + +8.536729423036434 +47.35045673450881 +428.8805735875985 +-169.83564092969013 +71.78802514690831 +0 +120 +absolute + + + +0.01 +smooth + +8.536728791472223 +47.35045687518594 +428.88089359395474 +-169.90686259768816 +71.79080065025903 +0 +120 +absolute + + + +0.01 +smooth + +8.536728159411561 +47.350457015315314 +428.88121305020746 +-169.97799558413487 +71.79359100559856 +0 +120 +absolute + + + +0.01 +smooth + +8.536727526859968 +47.35045715489139 +428.8815319477441 +-170.04903969307497 +71.79639585104088 +0 +120 +absolute + + + +0.01 +smooth + +8.536726893822962 +47.350457293908626 +428.88185027795237 +-170.11999472855288 +71.79921482469994 +0 +120 +absolute + + + +0.01 +smooth + +8.536726260306063 +47.35045743236148 +428.8821680322196 +-170.1908604946132 +71.80204756468973 +0 +120 +absolute + + + +0.01 +smooth + +8.536725626314787 +47.3504575702444 +428.8824852019333 +-170.26163679530035 +71.8048937091242 +0 +120 +absolute + + + +0.01 +smooth + +8.536724991854655 +47.35045770755184 +428.88280177848094 +-170.33232343465903 +71.8077528961173 +0 +120 +absolute + + + +0.01 +smooth + +8.536724356931186 +47.35045784427828 +428.88311775324996 +-170.40292021673363 +71.81062476378301 +0 +120 +absolute + + + +0.01 +smooth + +8.536723721549903 +47.35045798041815 +428.883433117628 +-170.47342694556878 +71.81350895023527 +0 +120 +absolute + + + +0.01 +smooth + +8.536723085716316 +47.35045811596593 +428.8837478630024 +-170.54384342520893 +71.81640509358809 +0 +120 +absolute + + + +0.01 +smooth + +8.53672244943595 +47.35045825091605 +428.88406198076063 +-170.61416945969867 +71.81931283195539 +0 +120 +absolute + + + +0.01 +smooth + +8.536721812714326 +47.35045838526299 +428.88437546229034 +-170.68440485308253 +71.82223180345116 +0 +120 +absolute + + + +0.01 +smooth + +8.536721175556957 +47.3504585190012 +428.884688298979 +-170.75454940940503 +71.82516164618934 +0 +120 +absolute + + + +0.01 +smooth + +8.536720537969366 +47.35045865212514 +428.8850004822139 +-170.82460293271072 +71.82810199828391 +0 +120 +absolute + + + +0.01 +smooth + +8.53671989995707 +47.35045878462926 +428.88531200338275 +-170.8945652270441 +71.83105249784882 +0 +120 +absolute + + + +0.01 +smooth + +8.53671926152559 +47.35045891650802 +428.885622853873 +-170.96443609644967 +71.83401278299806 +0 +120 +absolute + + + +0.01 +smooth + +8.536718622680443 +47.35045904775588 +428.88593302507195 +-171.0342153449721 +71.83698249184557 +0 +120 +absolute + + + +0.01 +smooth + +8.536717983427149 +47.350459178367295 +428.88624250836733 +-171.1039027766558 +71.83996126250533 +0 +120 +absolute + + + +0.01 +smooth + +8.536717343771228 +47.350459308336724 +428.88655129514643 +-171.17349819554533 +71.84294873309128 +0 +120 +absolute + + + +0.01 +smooth + +8.536716703718195 +47.350459437658614 +428.8868593767969 +-171.24300140568522 +71.84594454171742 +0 +120 +absolute + + + +0.01 +smooth + +8.536716063273573 +47.35045956632743 +428.8871667447062 +-171.31241221112003 +71.84894832649766 +0 +120 +absolute + + + +0.01 +smooth + +8.536715422442882 +47.35045969433764 +428.8874733902618 +-171.38173041589428 +71.85195972554601 +0 +120 +absolute + + + +0.01 +smooth + +8.536714781231636 +47.350459821683685 +428.8877793048511 +-171.45095582405253 +71.85497837697642 +0 +120 +absolute + + + +0.01 +smooth + +8.536714139645357 +47.35045994836001 +428.88808447986173 +-171.52008823963925 +71.85800391890288 +0 +120 +absolute + + + +0.01 +smooth + +8.536713497689565 +47.35046007436111 +428.88838890668103 +-171.589127466699 +71.8610359894393 +0 +120 +absolute + + + +0.01 +smooth + +8.536712855369776 +47.350460199681415 +428.8886925766966 +-171.65807330927635 +71.86407422669966 +0 +120 +absolute + + + +0.01 +smooth + +8.536712212691512 +47.350460324315385 +428.8889954812959 +-171.7269255714158 +71.86711826879795 +0 +120 +absolute + + + +0.01 +smooth + +8.53671156966029 +47.35046044825747 +428.8892976118665 +-171.7956840571619 +71.87016775384811 +0 +120 +absolute + + + +0.01 +smooth + +8.53671092628163 +47.35046057150215 +428.88959895979565 +-171.86434857055914 +71.8732223199641 +0 +120 +absolute + + + +0.01 +smooth + +8.53671028256105 +47.35046069404387 +428.8898995164711 +-171.93291891565207 +71.87628160525992 +0 +120 +absolute + + + +0.01 +smooth + +8.53670963850407 +47.35046081587708 +428.8901992732802 +-172.00139489648527 +71.8793452478495 +0 +120 +absolute + + + +0.01 +smooth + +8.536708994116207 +47.350460936996235 +428.8904982216104 +-172.06977631710322 +71.88241288584682 +0 +120 +absolute + + + +0.01 +smooth + +8.536708349402984 +47.350461057395805 +428.8907963528494 +-172.13806298155052 +71.88548415736581 +0 +120 +absolute + + + +0.01 +smooth + +8.536707704369915 +47.350461177070244 +428.8910936583845 +-172.20625469387159 +71.88855870052049 +0 +120 +absolute + + + +0.01 +smooth + +8.536707059022524 +47.350461296014 +428.89139012960317 +-172.27435125811104 +71.89163615342477 +0 +120 +absolute + + + +0.01 +smooth + +8.536706413220783 +47.35046141446038 +428.8916860001252 +-172.3423613366347 +71.89472601141709 +0 +120 +absolute + + + +0.01 +smooth + +8.536705766804204 +47.35046153267473 +428.89198153793325 +-172.41029482629614 +71.897839233424 +0 +120 +absolute + + + +0.01 +smooth + +8.536705119777778 +47.35046165064988 +428.8922767357321 +-172.47815154495743 +71.90097561235969 +0 +120 +absolute + + + +0.01 +smooth + +8.536704472146656 +47.350461768378445 +428.892571585939 +-172.5459312999478 +71.90413492944383 +0 +120 +absolute + + + +0.01 +smooth + +8.536703823916012 +47.35046188585301 +428.89286608097075 +-172.6136338985966 +71.90731696589619 +0 +120 +absolute + + + +0.01 +smooth + +8.536703175091008 +47.35046200306618 +428.8931602132447 +-172.6812591482332 +71.91052150293659 +0 +120 +absolute + + + +0.01 +smooth + +8.536702525676803 +47.35046212001055 +428.89345397517786 +-172.7488068561871 +71.91374832178474 +0 +120 +absolute + + + +0.01 +smooth + +8.536701875678563 +47.350462236678695 +428.8937473591873 +-172.8162768297875 +71.91699720366036 +0 +120 +absolute + + + +0.01 +smooth + +8.536701225101451 +47.35046235306319 +428.89404035768985 +-172.88366887636383 +71.92026792978325 +0 +120 +absolute + + + +0.01 +smooth + +8.536700573950627 +47.35046246915666 +428.8943329631028 +-172.95098280324552 +71.92356028137317 +0 +120 +absolute + + + +0.01 +smooth + +8.53669992223126 +47.3504625849517 +428.89462516784334 +-173.01821841776186 +71.92687403964989 +0 +120 +absolute + + + +0.01 +smooth + +8.536699269948508 +47.35046270044088 +428.89491696432833 +-173.08537552724226 +71.93020898583313 +0 +120 +absolute + + + +0.01 +smooth + +8.536698617107534 +47.35046281561678 +428.8952083449748 +-173.15245393901597 +71.93356490114263 +0 +120 +absolute + + + +0.01 +smooth + +8.536697963713506 +47.35046293047202 +428.89549930219994 +-173.21945346041252 +71.93694156679823 +0 +120 +absolute + + + +0.01 +smooth + +8.536697309771583 +47.350463044999174 +428.8957898284207 +-173.28637389876118 +71.9403387640196 +0 +120 +absolute + + + +0.01 +smooth + +8.53669665528693 +47.35046315919085 +428.89607991605453 +-173.35321506139144 +71.94375627402654 +0 +120 +absolute + + + +0.01 +smooth + +8.53669600026471 +47.35046327303962 +428.8963695575179 +-173.41997675563243 +71.94719387803879 +0 +120 +absolute + + + +0.01 +smooth + +8.536695344710083 +47.35046338653808 +428.8966587452283 +-173.48665878881368 +71.95065135727609 +0 +120 +absolute + + + +0.01 +smooth + +8.536694688628218 +47.35046349967885 +428.8969474716028 +-173.55326096826462 +71.95412849295829 +0 +120 +absolute + + + +0.01 +smooth + +8.53669403202427 +47.35046361245446 +428.89723572905814 +-173.61978310131443 +71.95762506630501 +0 +120 +absolute + + + +0.01 +smooth + +8.536693374903411 +47.350463724857555 +428.8975235100117 +-173.6862249952926 +71.96114085853607 +0 +120 +absolute + + + +0.01 +smooth + +8.536692717270801 +47.35046383688072 +428.89781080688044 +-173.75258645752848 +71.96467565087129 +0 +120 +absolute + + + +0.01 +smooth + +8.536692059131598 +47.35046394851651 +428.89809761208136 +-173.81886729535142 +71.96822922453028 +0 +120 +absolute + + + +0.01 +smooth + +8.536691400490973 +47.35046405975758 +428.8983839180317 +-173.8850673160908 +71.97180136073295 +0 +120 +absolute + + + +0.01 +smooth + +8.536690741354082 +47.35046417059645 +428.8986697171484 +-173.95118632707596 +71.97539184069895 +0 +120 +absolute + + + +0.01 +smooth + +8.536690081726094 +47.35046428102575 +428.8989550018485 +-174.01722413563633 +71.97900044564807 +0 +120 +absolute + + + +0.01 +smooth + +8.536689421612172 +47.350464391038095 +428.8992397645493 +-174.08318054910123 +71.98262695680012 +0 +120 +absolute + + + +0.01 +smooth + +8.536688761017473 +47.35046450062601 +428.89952399766753 +-174.1490553748 +71.98627115537475 +0 +120 +absolute + + + +0.01 +smooth + +8.536688099947165 +47.350464609782144 +428.89980769362046 +-174.21484842006197 +71.9899328225918 +0 +120 +absolute + + + +0.01 +smooth + +8.536687438406412 +47.350464718499076 +428.9000908448252 +-174.2805594922167 +71.993611739671 +0 +120 +absolute + + + +0.01 +smooth + +8.536686776400373 +47.35046482676936 +428.9003734436985 +-174.34618839859328 +71.99730768783206 +0 +120 +absolute + + + +0.01 +smooth + +8.536686113934215 +47.35046493458565 +428.9006554826579 +-174.41173494652134 +72.00102044829484 +0 +120 +absolute + + + +0.01 +smooth + +8.5366854510131 +47.35046504194049 +428.90093695412014 +-174.4771989433301 +72.00474980227901 +0 +120 +absolute + + + +0.01 +smooth + +8.536684787642187 +47.35046514882647 +428.90121785050235 +-174.54258019634895 +72.00849553100436 +0 +120 +absolute + + + +0.01 +smooth + +8.536684123826648 +47.35046525523623 +428.90149816422183 +-174.6078785129073 +72.01225741569066 +0 +120 +absolute + + + +0.01 +smooth + +8.536683459571636 +47.350465361162314 +428.9017778876953 +-174.67309370033442 +72.0160352375576 +0 +120 +absolute + + + +0.01 +smooth + +8.536682794882323 +47.35046546659732 +428.90205701334 +-174.73822556595974 +72.01982877782503 +0 +120 +absolute + + + +0.01 +smooth + +8.536682129763866 +47.35046557153387 +428.90233553357297 +-174.80327391711268 +72.02363781771265 +0 +120 +absolute + + + +0.01 +smooth + +8.536681464221429 +47.3504656759645 +428.90261344081114 +-174.86823856112244 +72.0274621384402 +0 +120 +absolute + + + +0.01 +smooth + +8.536680798260178 +47.35046577988186 +428.90289072747197 +-174.93311930531863 +72.03130152122749 +0 +120 +absolute + + + +0.01 +smooth + +8.536680131885275 +47.35046588327852 +428.90316738597215 +-174.99791595703036 +72.03515574729424 +0 +120 +absolute + + + +0.01 +smooth + +8.536679465101884 +47.35046598614704 +428.9034434087289 +-175.06262832358718 +72.03902459786022 +0 +120 +absolute + + + +0.01 +smooth + +8.536678797915165 +47.35046608848006 +428.9037187881593 +-175.1272562123184 +72.04290785414517 +0 +120 +absolute + + + +0.01 +smooth + +8.536678130330284 +47.35046619027015 +428.90399351668043 +-175.19179943055335 +72.04680529736888 +0 +120 +absolute + + + +0.01 +smooth + +8.536677462352403 +47.350466291509896 +428.90426758670924 +-175.25625778562144 +72.05071670875107 +0 +120 +absolute + + + +0.01 +smooth + +8.536676793986684 +47.350466392191905 +428.9045409906629 +-175.32063108485204 +72.0546418695115 +0 +120 +absolute + + + +0.01 +smooth + +8.536676125238294 +47.35046649230874 +428.9048137209584 +-175.38491913557445 +72.05858056086996 +0 +120 +absolute + + + +0.01 +smooth + +8.536675456112391 +47.350466591853014 +428.90508577001276 +-175.4491217451181 +72.06253256404618 +0 +120 +absolute + + + +0.01 +smooth + +8.53667478661414 +47.35046669081732 +428.9053571302434 +-175.5132387208124 +72.06649766025991 +0 +120 +absolute + + + +0.01 +smooth + +8.536674116748708 +47.35046678919424 +428.90562779406696 +-175.5772698699866 +72.07047563073091 +0 +120 +absolute + + + +0.01 +smooth + +8.536673446521254 +47.35046688697638 +428.9058977539007 +-175.6412149999702 +72.07446625667897 +0 +120 +absolute + + + +0.01 +smooth + +8.536672775936939 +47.35046698415632 +428.90616700216174 +-175.70507391809238 +72.0784693193238 +0 +120 +absolute + + + +0.01 +smooth + +8.536672105000932 +47.350467080726645 +428.906435531267 +-175.76884643168268 +72.08248459988518 +0 +120 +absolute + + + +0.01 +smooth + +8.536671433718393 +47.350467176679956 +428.9067033336337 +-175.8325323480704 +72.08651187958286 +0 +120 +absolute + + + +0.01 +smooth + +8.536670762094484 +47.35046727200885 +428.9069704016788 +-175.8961314745849 +72.09055093963661 +0 +120 +absolute + + + +0.01 +smooth + +8.536670090134372 +47.3504673667059 +428.9072367278194 +-175.95964361855556 +72.09460156126616 +0 +120 +absolute + + + +0.01 +smooth + +8.536669417843218 +47.35046746076371 +428.9075023044726 +-176.02306858731174 +72.0986635256913 +0 +120 +absolute + + + +0.01 +smooth + +8.536668745226182 +47.35046755417488 +428.90776712405534 +-176.08640618818282 +72.10273661413174 +0 +120 +absolute + + + +0.01 +smooth + +8.536668072288432 +47.350467646931975 +428.9080311789849 +-176.14965622849817 +72.1068206078073 +0 +120 +absolute + + + +0.01 +smooth + +8.536667399035128 +47.35046773902761 +428.9082944616783 +-176.21281851558712 +72.11091528793767 +0 +120 +absolute + + + +0.01 +smooth + +8.536666725471434 +47.35046783045437 +428.9085569645524 +-176.27589285677908 +72.11502043574265 +0 +120 +absolute + + + +0.01 +smooth + +8.536666051602515 +47.350467921204846 +428.9088186800244 +-176.33887905940335 +72.11913583244197 +0 +120 +absolute + + + +0.01 +smooth + +8.536665377433529 +47.35046801127163 +428.9090796005115 +-176.40177693078937 +72.12326125925541 +0 +120 +absolute + + + +0.01 +smooth + +8.536664702969647 +47.350468100647305 +428.90933971843066 +-176.46458627826647 +72.12739649740271 +0 +120 +absolute + + + +0.01 +smooth + +8.536664028216025 +47.350468189324474 +428.90959902619886 +-176.52730690916405 +72.13154132810365 +0 +120 +absolute + + + +0.01 +smooth + +8.536663353177829 +47.35046827729572 +428.9098575162332 +-176.58993863081145 +72.13569553257796 +0 +120 +absolute + + + +0.01 +smooth + +8.536662677860225 +47.35046836455364 +428.91011518095087 +-176.65248125053802 +72.1398588920454 +0 +120 +absolute + + + +0.01 +smooth + +8.53666200226837 +47.35046845109082 +428.9103720127688 +-176.7149345756731 +72.14403118772574 +0 +120 +absolute + + + +0.01 +smooth + +8.536661326407431 +47.350468536899854 +428.91062800410424 +-176.77729841354616 +72.14821220083873 +0 +120 +absolute + + + +0.01 +smooth + +8.53666065028257 +47.35046862197335 +428.9108831473741 +-176.83957257148649 +72.15240171260412 +0 +120 +absolute + + + +0.01 +smooth + +8.536659973898953 +47.350468706303865 +428.9111374349954 +-176.90175685682345 +72.15659950424165 +0 +120 +absolute + + + +0.01 +smooth + +8.536659297261737 +47.35046878988402 +428.9113908593854 +-176.96385107688647 +72.16080535697114 +0 +120 +absolute + + + +0.01 +smooth + +8.536658620376091 +47.35046887270639 +428.91164341296104 +-177.02585503900485 +72.16501905201227 +0 +120 +absolute + + + +0.01 +smooth + +8.536657943247176 +47.35046895476357 +428.9118950881394 +-177.08776855050797 +72.16924037058483 +0 +120 +absolute + + + +0.01 +smooth + +8.536657265880155 +47.35046903604815 +428.91214587733754 +-177.14959141872524 +72.1734690939086 +0 +120 +absolute + + + +0.01 +smooth + +8.53665658828019 +47.350469116552745 +428.9123957729725 +-177.211323450986 +72.1777050032033 +0 +120 +absolute + + + +0.01 +smooth + +8.536655910452447 +47.350469196269906 +428.91264476746153 +-177.27296445461957 +72.1819478796887 +0 +120 +absolute + + + +0.01 +smooth + +8.536655232402087 +47.350469275192246 +428.9128928532215 +-177.33451423695536 +72.18619750458456 +0 +120 +absolute + + + +0.01 +smooth + +8.536654554134273 +47.35046935331236 +428.91314002266955 +-177.39597260532278 +72.19045365911063 +0 +120 +absolute + + + +0.01 +smooth + +8.536653875650991 +47.350469430631364 +428.91338627418054 +-177.45733958354342 +72.1947162746921 +0 +120 +absolute + + + +0.01 +smooth + +8.53665319678011 +47.35046950761682 +428.91363193260173 +-177.51862705264713 +72.1989935250329 +0 +120 +absolute + + + +0.01 +smooth + +8.536652517424526 +47.350469584531254 +428.9138771821043 +-177.57984176474827 +72.20329007191 +0 +120 +absolute + + + +0.01 +smooth + +8.53665183758914 +47.350469661362666 +428.91412201560394 +-177.64098351919054 +72.20760576167964 +0 +120 +absolute + + + +0.01 +smooth + +8.53665115727886 +47.35046973809903 +428.914366426017 +-177.7020521153178 +72.21194044069816 +0 +120 +absolute + + + +0.01 +smooth + +8.536650476498586 +47.35046981472832 +428.9146104062589 +-177.76304735247385 +72.21629395532177 +0 +120 +absolute + + + +0.01 +smooth + +8.536649795253226 +47.35046989123852 +428.91485394924547 +-177.82396903000242 +72.22066615190673 +0 +120 +absolute + + + +0.01 +smooth + +8.536649113547677 +47.35046996761758 +428.91509704789263 +-177.8848169472473 +72.22505687680926 +0 +120 +absolute + + + +0.01 +smooth + +8.536648431386848 +47.350470043853505 +428.91533969511624 +-177.94559090355222 +72.22946597638567 +0 +120 +absolute + + + +0.01 +smooth + +8.536647748775637 +47.35047011993427 +428.91558188383215 +-178.00629069826113 +72.23389329699222 +0 +120 +absolute + + + +0.01 +smooth + +8.536647065718952 +47.35047019584786 +428.91582360695617 +-178.06691613071763 +72.23833868498514 +0 +120 +absolute + + + +0.01 +smooth + +8.536646382221697 +47.35047027158224 +428.91606485740397 +-178.12746700026565 +72.24280198672069 +0 +120 +absolute + + + +0.01 +smooth + +8.536645698288766 +47.35047034712537 +428.9163056280915 +-178.18794310624878 +72.24728304855513 +0 +120 +absolute + + + +0.01 +smooth + +8.536645013925074 +47.35047042246526 +428.9165459119347 +-178.24834424801102 +72.25178171684472 +0 +120 +absolute + + + +0.01 +smooth + +8.536644329135518 +47.35047049758987 +428.9167857018493 +-178.30867022489608 +72.25629783794574 +0 +120 +absolute + + + +0.01 +smooth + +8.536643643925004 +47.35047057248716 +428.9170249907509 +-178.3689208362476 +72.26083125821438 +0 +120 +absolute + + + +0.01 +smooth + +8.536642958298433 +47.35047064714516 +428.9172637715559 +-178.42909588140955 +72.26538182400697 +0 +120 +absolute + + + +0.01 +smooth + +8.536642272260709 +47.35047072155181 +428.91750203717964 +-178.48919515972568 +72.26994938167977 +0 +120 +absolute + + + +0.01 +smooth + +8.536641585816737 +47.35047079569509 +428.91773978053817 +-178.5492184705397 +72.27453377758897 +0 +120 +absolute + + + +0.01 +smooth + +8.536640898971417 +47.35047086956299 +428.91797699454713 +-178.60916561319542 +72.27913485809088 +0 +120 +absolute + + + +0.01 +smooth + +8.536640211729656 +47.350470943143456 +428.9182136721225 +-178.66903638703664 +72.28375246954174 +0 +120 +absolute + + + +0.01 +smooth + +8.536639524096355 +47.35047101642449 +428.91844980618004 +-178.72883059140713 +72.28838645829778 +0 +120 +absolute + + + +0.01 +smooth + +8.536638836076417 +47.35047108939407 +428.91868538963564 +-178.78854802565064 +72.2930366707153 +0 +120 +absolute + + + +0.01 +smooth + +8.536638147674745 +47.35047116204017 +428.91892041540507 +-178.84818848911104 +72.29770295315055 +0 +120 +absolute + + + +0.01 +smooth + +8.536637458896246 +47.350471234350785 +428.91915487640426 +-178.90775178113208 +72.30238515195978 +0 +120 +absolute + + + +0.01 +smooth + +8.53663676974582 +47.35047130631387 +428.91938876554906 +-178.9672377010575 +72.30708311349926 +0 +120 +absolute + + + +0.01 +smooth + +8.536636080228373 +47.35047137791741 +428.91962207575506 +-179.02664604823113 +72.31179668412524 +0 +120 +absolute + + + +0.01 +smooth + +8.536635390348806 +47.350471449149374 +428.91985479993843 +-179.08597662199676 +72.31652571019397 +0 +120 +absolute + + + +0.01 +smooth + +8.536634700112023 +47.350471519997754 +428.92008693101474 +-179.1452292216981 +72.3212700380617 +0 +120 +absolute + + + +0.01 +smooth + +8.536634009522924 +47.35047159045049 +428.92031846189974 +-179.20440364667897 +72.3260295140847 +0 +120 +absolute + + + +0.01 +smooth + +8.536633318586418 +47.350471660495614 +428.9205493855096 +-179.26349969628313 +72.33080398461922 +0 +120 +absolute + + + +0.01 +smooth + +8.536632627307405 +47.35047173012107 +428.9207796947598 +-179.32251716985442 +72.3355932960215 +0 +120 +absolute + + + +0.01 +smooth + +8.536631935690789 +47.350471799314846 +428.9210093825664 +-179.3814558667366 +72.34039729464786 +0 +120 +absolute + + + +0.01 +smooth + +8.536631243741475 +47.35047186806494 +428.92123844184533 +-179.44031558627347 +72.34521582685451 +0 +120 +absolute + + + +0.01 +smooth + +8.536630551464363 +47.350471936359284 +428.9214668655122 +-179.49909612780877 +72.35004873899771 +0 +120 +absolute + + + +0.01 +smooth + +8.536629858864362 +47.350472004185896 +428.92169464648293 +-179.55779729068632 +72.35489587743373 +0 +120 +absolute + + + +0.01 +smooth + +8.53662916594637 +47.35047207153272 +428.9219217776732 +-179.61641887424986 +72.35975708851883 +0 +120 +absolute + + + +0.01 +smooth + +8.536628472715288 +47.35047213838776 +428.9221482519989 +-179.67496067784322 +72.36463221860923 +0 +120 +absolute + + + +0.01 +smooth + +8.536627779176024 +47.35047220473897 +428.922374062376 +-179.7334225008101 +72.36952111406123 +0 +120 +absolute + + + +0.01 +smooth + +8.53662708533348 +47.35047227057433 +428.9225992017202 +-179.7918041424944 +72.37442362123105 +0 +120 +absolute + + + +0.01 +smooth + +8.536626391192565 +47.35047233588186 +428.9228236629475 +-179.85010540223988 +72.379339586475 +0 +120 +absolute + + + +0.01 +smooth + +8.536625696758174 +47.35047240064949 +428.92304743897347 +-179.90832607939024 +72.38426885614928 +0 +120 +absolute + + + +0.01 +smooth + +8.536625002035212 +47.350472464865206 +428.92327052271423 +-179.9664659732893 +72.38921127661018 +0 +120 +absolute + + + +0.01 +smooth + +8.536624307028584 +47.35047252851701 +428.9234929070854 +-180.0245248832809 +72.39416669421396 +0 +120 +absolute + + + +0.01 +smooth + +8.536623611743194 +47.350472591592855 +428.92371458500276 +-180.08250260870875 +72.39913495531687 +0 +120 +absolute + + + +0.01 +smooth + +8.536622916183944 +47.35047265408073 +428.92393554938235 +-180.14039894891667 +72.40411590627517 +0 +120 +absolute + + + +0.01 +smooth + +8.536622220355737 +47.35047271596859 +428.9241557931398 +-180.19821370324843 +72.40910939344509 +0 +120 +absolute + + + +0.01 +smooth + +8.536621524263477 +47.35047277724445 +428.92437530919113 +-180.25594667104778 +72.41411526318292 +0 +120 +absolute + + + +0.01 +smooth + +8.536620827912067 +47.350472837896255 +428.92459409045205 +-180.31359765165857 +72.41913336184493 +0 +120 +absolute + + + +0.01 +smooth + +8.536620131306412 +47.35047289791201 +428.9248121298385 +-180.37116644442455 +72.42416353578732 +0 +120 +absolute + + + +0.01 +smooth + +8.536619434451415 +47.35047295727966 +428.9250294202661 +-180.42865284868952 +72.4292056313664 +0 +120 +absolute + + + +0.01 +smooth + +8.536618737351976 +47.350473015987205 +428.9252459546508 +-180.48605666379726 +72.4342594949384 +0 +120 +absolute + + + +0.01 +smooth + +8.536618040013 +47.35047307402264 +428.9254617259086 +-180.54337768909147 +72.4393249728596 +0 +120 +absolute + + + +0.01 +smooth + +8.536617342439392 +47.350473131373896 +428.925676726955 +-180.60061572391606 +72.44440191148624 +0 +120 +absolute + + + +0.01 +smooth + +8.536616644636055 +47.35047318802898 +428.92589095070605 +-180.65777056761473 +72.4494901571746 +0 +120 +absolute + + + +0.01 +smooth + +8.536615946607892 +47.35047324397587 +428.9261043900775 +-180.71484201953132 +72.4545895562809 +0 +120 +absolute + + + +0.01 +smooth + +8.536615248359805 +47.350473299202534 +428.9263170379853 +-180.77182987900954 +72.45969995516141 +0 +120 +absolute + + + +0.01 +smooth + +8.536614549896697 +47.350473353696955 +428.92652888734506 +-180.82873394539322 +72.4648212001724 +0 +120 +absolute + + + +0.01 +smooth + +8.536613851223473 +47.35047340744711 +428.9267399310728 +-180.88555401802614 +72.46995313767012 +0 +120 +absolute + + + +0.01 +smooth + +8.536613152345035 +47.35047346044097 +428.9269501620843 +-180.94228989625213 +72.47509561401084 +0 +120 +absolute + + + +0.01 +smooth + +8.536612453266287 +47.350473512666525 +428.9271595732954 +-180.99894137941482 +72.48024847555081 +0 +120 +absolute + + + +0.01 +smooth + +8.536611753992135 +47.350473564111745 +428.92736815762186 +-181.05550826685817 +72.48541156864627 +0 +120 +absolute + + + +0.01 +smooth + +8.53661105452748 +47.3504736147646 +428.92757590797953 +-181.11199035792586 +72.49058473965349 +0 +120 +absolute + + + +0.01 +smooth + +8.536610354877222 +47.350473664613084 +428.92778281728437 +-181.16838745196168 +72.49576783492873 +0 +120 +absolute + + + +0.01 +smooth + +8.53660965504627 +47.35047371364516 +428.92798887845197 +-181.22469934830946 +72.50096070082824 +0 +120 +absolute + + + +0.01 +smooth + +8.536608955039522 +47.35047376184882 +428.92819408439834 +-181.28092584631298 +72.50616318370828 +0 +120 +absolute + + + +0.01 +smooth + +8.536608254861887 +47.35047380921202 +428.9283984280393 +-181.33706674531595 +72.51137512992514 +0 +120 +absolute + + + +0.01 +smooth + +8.536607554518264 +47.350473855722754 +428.92860190229067 +-181.3931218446622 +72.51659638583502 +0 +120 +absolute + + + +0.01 +smooth + +8.53660685401356 +47.350473901369 +428.92880450006817 +-181.44909094369552 +72.52182679779422 +0 +120 +absolute + + + +0.01 +smooth + +8.536606153352672 +47.350473946138735 +428.9290062142877 +-181.50497384175972 +72.52706621215897 +0 +120 +absolute + + + +0.01 +smooth + +8.53660545254051 +47.35047399001993 +428.92920703786535 +-181.56077033819852 +72.53231447528555 +0 +120 +absolute + + + +0.01 +smooth + +8.536604751581972 +47.35047403300056 +428.9294069637164 +-181.61648023235574 +72.5375714335302 +0 +120 +absolute + + + +0.01 +smooth + +8.536604050481968 +47.35047407506862 +428.92960598475713 +-181.67210332357516 +72.54283693324919 +0 +120 +absolute + + + +0.01 +smooth + +8.536603349245395 +47.35047411621206 +428.92980409390316 +-181.72763941120053 +72.54811082079877 +0 +120 +absolute + + + +0.01 +smooth + +8.536602647877158 +47.35047415641888 +428.9300012840705 +-181.7830882945757 +72.5533929425352 +0 +120 +absolute + + + +0.01 +smooth + +8.536601946382163 +47.35047419567705 +428.93019754817476 +-181.83844977304435 +72.55868314481474 +0 +120 +absolute + + + +0.01 +smooth + +8.53660124476531 +47.350474233974545 +428.9303928791319 +-181.89372364595036 +72.56398127399363 +0 +120 +absolute + + + +0.01 +smooth + +8.536600543031504 +47.350474271299355 +428.9305872698577 +-181.94890971263746 +72.56928717642816 +0 +120 +absolute + + + +0.01 +smooth + +8.536599841185648 +47.35047430763944 +428.9307807132681 +-182.00400777244948 +72.57460069847454 +0 +120 +absolute + + + +0.01 +smooth + +8.536599139232646 +47.350474342982785 +428.93097320227884 +-182.0590176247302 +72.57992168648907 +0 +120 +absolute + + + +0.01 +smooth + +8.536598437162835 +47.35047437737721 +428.9311647613486 +-182.1139401845148 +72.58525051413928 +0 +120 +absolute + + + +0.01 +smooth + +8.53659773479178 +47.35047441158873 +428.9313557934489 +-182.16878975035434 +72.59059389384132 +0 +120 +absolute + + + +0.01 +smooth + +8.53659703206596 +47.350474445844476 +428.93154641765597 +-182.22357056941362 +72.595953815613 +0 +120 +absolute + + + +0.01 +smooth + +8.536596328990088 +47.35047448013224 +428.93173662687303 +-182.27828242489568 +72.60133016298037 +0 +120 +absolute + + + +0.01 +smooth + +8.536595625568891 +47.350474514439775 +428.9319264140039 +-182.33292510000396 +72.6067228194695 +0 +120 +absolute + + + +0.01 +smooth + +8.536594921807074 +47.35047454875481 +428.9321157719516 +-182.38749837794143 +72.61213166860635 +0 +120 +absolute + + + +0.01 +smooth + +8.536594217709359 +47.35047458306512 +428.9323046936198 +-182.44200204191137 +72.61755659391702 +0 +120 +absolute + + + +0.01 +smooth + +8.536593513280463 +47.350474617358465 +428.93249317191186 +-182.49643587511693 +72.62299747892752 +0 +120 +absolute + + + +0.01 +smooth + +8.536592808525098 +47.3504746516226 +428.9326811997313 +-182.55079966076136 +72.62845420716388 +0 +120 +absolute + + + +0.01 +smooth + +8.536592103447985 +47.35047468584528 +428.93286876998155 +-182.6050931820479 +72.6339266621522 +0 +120 +absolute + + + +0.01 +smooth + +8.536591398053838 +47.350474720014255 +428.9330558755659 +-182.65931622217954 +72.63941472741844 +0 +120 +absolute + + + +0.01 +smooth + +8.536590692347371 +47.35047475411727 +428.9332425093879 +-182.71346856435966 +72.64491828648865 +0 +120 +absolute + + + +0.01 +smooth + +8.536589986333304 +47.35047478814213 +428.93342866435097 +-182.76754999179138 +72.65043722288891 +0 +120 +absolute + + + +0.01 +smooth + +8.536589280016353 +47.35047482207654 +428.9336143333584 +-182.82156028767787 +72.65597142014519 +0 +120 +absolute + + + +0.01 +smooth + +8.536588573401227 +47.35047485590827 +428.9337995093138 +-182.8754992352223 +72.66152076178356 +0 +120 +absolute + + + +0.01 +smooth + +8.536587866492653 +47.35047488962508 +428.9339841851205 +-182.92936661762792 +72.66708513133008 +0 +120 +absolute + + + +0.01 +smooth + +8.536587159295339 +47.350474923214726 +428.93416835368197 +-182.9831622180979 +72.67266441231077 +0 +120 +absolute + + + +0.01 +smooth + +8.536586451814006 +47.35047495666499 +428.93435200790174 +-183.03688581983553 +72.67825848825166 +0 +120 +absolute + + + +0.01 +smooth + +8.536585744053369 +47.35047498996357 +428.934535140683 +-183.09053720604376 +72.68386724267879 +0 +120 +absolute + + + +0.01 +smooth + +8.536585036018144 +47.35047502309828 +428.93471774492934 +-183.14411615992594 +72.68949055911817 +0 +120 +absolute + + + +0.01 +smooth + +8.536584327713047 +47.35047505605684 +428.9348998135443 +-183.19762246468537 +72.6951283210959 +0 +120 +absolute + + + +0.01 +smooth + +8.536583619142789 +47.350475088827004 +428.9350813394309 +-183.25105590352496 +72.70078041213792 +0 +120 +absolute + + + +0.01 +smooth + +8.536582910312099 +47.350475121396556 +428.93526231549305 +-183.3044162596481 +72.70644671577037 +0 +120 +absolute + + + +0.01 +smooth + +8.536582201225686 +47.35047515375326 +428.93544273463397 +-183.35770331625795 +72.71212711551922 +0 +120 +absolute + + + +0.01 +smooth + +8.536581491888255 +47.35047518588481 +428.9356225897569 +-183.41091685655755 +72.71782149491054 +0 +120 +absolute + + + +0.01 +smooth + +8.536580782304544 +47.35047521777904 +428.9358018737657 +-183.4640566637504 +72.72352973747034 +0 +120 +absolute + + + +0.01 +smooth + +8.536580072479254 +47.35047524942365 +428.93598057956353 +-183.5171225210394 +72.72925172672468 +0 +120 +absolute + + + +0.01 +smooth + +8.536579362417104 +47.350475280806414 +428.9361587000538 +-183.5701142116278 +72.73498734619956 +0 +120 +absolute + + + +0.01 +smooth + +8.536578652122817 +47.35047531191511 +428.9363362281402 +-183.623031518719 +72.74073647942107 +0 +120 +absolute + + + +0.01 +smooth + +8.536577941601099 +47.35047534273745 +428.9365131567257 +-183.67587422551588 +72.74649900991521 +0 +120 +absolute + + + +0.01 +smooth + +8.536577230856674 +47.35047537326122 +428.9366894787141 +-183.72864211522182 +72.75227482120802 +0 +120 +absolute + + + +0.01 +smooth + +8.536576519894252 +47.350475403474185 +428.93686518700866 +-183.78133497104 +72.75806379682555 +0 +120 +absolute + + + +0.01 +smooth + +8.536575808718553 +47.35047543336406 +428.9370402745128 +-183.8339525761735 +72.7638658202938 +0 +120 +absolute + + + +0.01 +smooth + +8.536575097334296 +47.35047546291865 +428.9372147341303 +-183.88649471382567 +72.76968077513887 +0 +120 +absolute + + + +0.01 +smooth + +8.53657438574619 +47.35047549212568 +428.9373885587641 +-183.93896116719952 +72.77550854488673 +0 +120 +absolute + + + +0.01 +smooth + +8.536573673958955 +47.35047552097292 +428.93756174131784 +-183.99135171949837 +72.78134901306345 +0 +120 +absolute + + + +0.01 +smooth + +8.536572961977313 +47.350475549448134 +428.9377342746952 +-184.04366615392541 +72.7872020631951 +0 +120 +absolute + + + +0.01 +smooth + +8.53657224980597 +47.350475577539044 +428.93790615179904 +-184.09590425368376 +72.79306757880764 +0 +120 +absolute + + + +0.01 +smooth + +8.536571537449648 +47.35047560523344 +428.9380773655332 +-184.14806580197663 +72.79894544342714 +0 +120 +absolute + + + +0.01 +smooth + +8.536570824913062 +47.350475632519064 +428.93824790880126 +-184.20015058200727 +72.80483554057969 +0 +120 +absolute + + + +0.01 +smooth + +8.536570112200925 +47.35047565938367 +428.93841777450615 +-184.2521583769788 +72.81073775379123 +0 +120 +absolute + + + +0.01 +smooth + +8.53656939931796 +47.35047568581503 +428.9385869555516 +-184.30408897009445 +72.81665196658786 +0 +120 +absolute + + + +0.01 +smooth + +8.536568686268879 +47.350475711800875 +428.9387554448411 +-184.35594214455733 +72.8225780624956 +0 +120 +absolute + + + +0.01 +smooth + +8.5365679730584 +47.350475737328985 +428.9389232352779 +-184.40771768357075 +72.82851592504048 +0 +120 +absolute + + + +0.01 +smooth + +8.536567259691235 +47.35047576238711 +428.9390903197656 +-184.45941537033778 +72.83446543774856 +0 +120 +absolute + + + +0.01 +smooth + +8.536566546172104 +47.350475786962996 +428.93925669120756 +-184.51103498806174 +72.84042648414585 +0 +120 +absolute + + + +0.01 +smooth + +8.536565832505724 +47.35047581104441 +428.93942234250716 +-184.5625763199457 +72.84639894775839 +0 +120 +absolute + + + +0.01 +smooth + +8.536565118696808 +47.3504758346191 +428.93958726656786 +-184.61403914919293 +72.85238271211225 +0 +120 +absolute + + + +0.01 +smooth + +8.536564404750075 +47.35047585767482 +428.93975145629315 +-184.66542325900662 +72.85837766073342 +0 +120 +absolute + + + +0.01 +smooth + +8.53656369067024 +47.350475880199355 +428.9399149045864 +-184.7167284325899 +72.86438367714794 +0 +120 +absolute + + + +0.01 +smooth + +8.53656297646202 +47.35047590218042 +428.940077604351 +-184.76795445314593 +72.8704006448819 +0 +120 +absolute + + + +0.01 +smooth + +8.53656226213013 +47.3504759236058 +428.94023954849047 +-184.819101103878 +72.87642844746127 +0 +120 +absolute + + + +0.01 +smooth + +8.536561547679284 +47.35047594446324 +428.9404007299082 +-184.8701681679893 +72.88246696841212 +0 +120 +absolute + + + +0.01 +smooth + +8.536560833114205 +47.3504759647405 +428.94056114150766 +-184.92115542868297 +72.88851609126048 +0 +120 +absolute + + + +0.01 +smooth + +8.536560118439603 +47.35047598442533 +428.9407207761923 +-184.97206266916214 +72.8945756995324 +0 +120 +absolute + + + +0.01 +smooth + +8.536559403660195 +47.35047600350549 +428.94087962686535 +-185.02288967263013 +72.90064567675388 +0 +120 +absolute + + + +0.01 +smooth + +8.536558688780701 +47.350476021968745 +428.9410376864304 +-185.07363622229005 +72.90672590645102 +0 +120 +absolute + + + +0.01 +smooth + +8.536557973805833 +47.350476039802835 +428.9411949477909 +-185.1243021013451 +72.91281627214977 +0 +120 +absolute + + + +0.01 +smooth + +8.53655725874031 +47.35047605699553 +428.94135140385026 +-185.17488709299846 +72.91891665737623 +0 +120 +absolute + + + +0.01 +smooth + +8.536556543588848 +47.35047607353458 +428.941507047512 +-185.2253909804534 +72.92502694565644 +0 +120 +absolute + + + +0.01 +smooth + +8.53655582835616 +47.35047608940774 +428.94166187167934 +-185.275813546913 +72.93114702051639 +0 +120 +absolute + + + +0.01 +smooth + +8.536555113046965 +47.35047610460277 +428.9418158692557 +-185.32615457558052 +72.93727676548215 +0 +120 +absolute + + + +0.01 +smooth + +8.53655439766598 +47.35047611910742 +428.94196903314486 +-185.37641384965906 +72.94341606407974 +0 +120 +absolute + + + +0.01 +smooth + +8.53655368221792 +47.35047613290945 +428.9421213562499 +-185.42659115235196 +72.94956479983523 +0 +120 +absolute + + + +0.01 +smooth + +8.5365529667075 +47.35047614599662 +428.9422728314744 +-185.47668626686226 +72.9557228562746 +0 +120 +absolute + + + +0.01 +smooth + +8.53655225113944 +47.350476158356685 +428.94242345172177 +-185.52669897639328 +72.96189011692394 +0 +120 +absolute + + + +0.01 +smooth + +8.536551535518452 +47.3504761699774 +428.9425732098954 +-185.57662906414808 +72.96806646530926 +0 +120 +absolute + + + +0.01 +smooth + +8.536550819849253 +47.35047618084651 +428.9427220988988 +-185.62647631332993 +72.9742517849566 +0 +120 +absolute + + + +0.01 +smooth + +8.53655010413656 +47.350476190951795 +428.94287011163533 +-185.67624050714204 +72.980445959392 +0 +120 +absolute + + + +0.01 +smooth + +8.53654938838509 +47.350476200280994 +428.9430172410084 +-185.72592142878756 +72.9866488721415 +0 +120 +absolute + + + +0.01 +smooth + +8.536548672599558 +47.35047620882187 +428.9431634799216 +-185.7755188614697 +72.99286040673111 +0 +120 +absolute + + + +0.01 +smooth + +8.536547956784682 +47.35047621656217 +428.94330882127815 +-185.8250325883916 +72.99908044668689 +0 +120 +absolute + + + +0.01 +smooth + +8.536547240945175 +47.350476223489665 +428.94345325798156 +-185.87446239275647 +73.00530887553488 +0 +120 +absolute + + + +0.01 +smooth + +8.536546525085758 +47.35047622959209 +428.94359678293534 +-185.92380805776753 +73.01154557680111 +0 +120 +absolute + + + +0.01 +smooth + +8.536545809211141 +47.350476234857226 +428.9437393890428 +-185.97306936662793 +73.0177904340116 +0 +120 +absolute + + + +0.01 +smooth + +8.536545093326046 +47.350476239272815 +428.9438810692075 +-186.02224610254092 +73.02404333069242 +0 +120 +absolute + + + +0.01 +smooth + +8.536544377435185 +47.35047624282661 +428.9440218163328 +-186.0713380487096 +73.03030415036959 +0 +120 +absolute + + + +0.01 +smooth + +8.536543661543275 +47.35047624550638 +428.9441616233221 +-186.12034498833728 +73.03657277656913 +0 +120 +absolute + + + +0.01 +smooth + +8.536542945655038 +47.35047624729987 +428.94430048307885 +-186.16926670462703 +73.04284909281708 +0 +120 +absolute + + + +0.01 +smooth + +8.536542229775183 +47.350476248194845 +428.9444383885064 +-186.2181029807821 +73.04913298263952 +0 +120 +absolute + + + +0.01 +smooth + +8.536541513875209 +47.35047624824111 +428.9445754177601 +-186.26685644916597 +73.05542529139633 +0 +120 +absolute + + + +0.01 +smooth + +8.536540797773204 +47.35047624778163 +428.9447120423253 +-186.31554288896507 +73.06173131407303 +0 +120 +absolute + + + +0.01 +smooth + +8.536540081444686 +47.35047624687518 +428.94484832900537 +-186.3641645568723 +73.068051797924 +0 +120 +absolute + + + +0.01 +smooth + +8.536539364894248 +47.35047624552695 +428.94498426996864 +-186.4127212153891 +73.07438664936517 +0 +120 +absolute + + + +0.01 +smooth + +8.53653864812647 +47.35047624374208 +428.94511985738365 +-186.4612126270165 +73.08073577481245 +0 +120 +absolute + + + +0.01 +smooth + +8.536537931145936 +47.350476241525705 +428.94525508341826 +-186.50963855425562 +73.08709908068161 +0 +120 +absolute + + + +0.01 +smooth + +8.536537213957235 +47.35047623888299 +428.9453899402413 +-186.55799875960767 +73.09347647338862 +0 +120 +absolute + + + +0.01 +smooth + +8.536536496564953 +47.3504762358191 +428.94552442002106 +-186.60629300557386 +73.09986785934935 +0 +120 +absolute + + + +0.01 +smooth + +8.536535778973668 +47.35047623233919 +428.9456585149254 +-186.65452105465533 +73.1062731449796 +0 +120 +absolute + + + +0.01 +smooth + +8.536535061187973 +47.3504762284484 +428.94579221712314 +-186.7026826693531 +73.11269223669532 +0 +120 +absolute + + + +0.01 +smooth + +8.536534343212452 +47.35047622415191 +428.94592551878253 +-186.75077761216858 +73.11912504091238 +0 +120 +absolute + + + +0.01 +smooth + +8.536533625051689 +47.35047621945486 +428.9460584120717 +-186.79880564560278 +73.12557146404664 +0 +120 +absolute + + + +0.01 +smooth + +8.536532906710272 +47.35047621436241 +428.94619088915937 +-186.846766532157 +73.13203141251401 +0 +120 +absolute + + + +0.01 +smooth + +8.536532188192783 +47.35047620887971 +428.9463229422134 +-186.89466003433225 +73.13850479273032 +0 +120 +absolute + + + +0.01 +smooth + +8.536531469503812 +47.35047620301193 +428.94645456340254 +-186.94248591462974 +73.14499151111147 +0 +120 +absolute + + + +0.01 +smooth + +8.536530750647943 +47.350476196764234 +428.94658574489506 +-186.9902439355508 +73.15149147407337 +0 +120 +absolute + + + +0.01 +smooth + +8.536530031629757 +47.350476190141734 +428.946716478859 +-187.03793385959636 +73.15800458803184 +0 +120 +absolute + + + +0.01 +smooth + +8.53652931245384 +47.35047618314961 +428.946846757463 +-187.08555544926767 +73.1645307594028 +0 +120 +absolute + + + +0.01 +smooth + +8.536528593124785 +47.350476175793034 +428.94697657287526 +-187.13310846706597 +73.17106989460208 +0 +120 +absolute + + + +0.01 +smooth + +8.53652787364717 +47.350476168077144 +428.9471059172642 +-187.18059267549233 +73.17762190004562 +0 +120 +absolute + + + +0.01 +smooth + +8.536527154025588 +47.35047616000709 +428.9472347827982 +-187.22800783704812 +73.1841866821493 +0 +120 +absolute + + + +0.01 +smooth + +8.536526434264617 +47.350476151588055 +428.9473631616456 +-187.2753537142342 +73.19076414732893 +0 +120 +absolute + + + +0.01 +smooth + +8.536525714368844 +47.35047614282516 +428.94749104597446 +-187.32263006955188 +73.19735420200044 +0 +120 +absolute + + + +0.01 +smooth + +8.53652499434286 +47.350476133723596 +428.94761842795356 +-187.36983666550245 +73.20395675257971 +0 +120 +absolute + + + +0.01 +smooth + +8.536524274191242 +47.350476124288484 +428.9477452997509 +-187.4169732645869 +73.21057170548256 +0 +120 +absolute + + + +0.01 +smooth + +8.536523553918583 +47.350476114524994 +428.9478716535349 +-187.4640396293064 +73.21719896712494 +0 +120 +absolute + + + +0.01 +smooth + +8.536522833529464 +47.35047610443831 +428.9479974814741 +-187.51103552216233 +73.22383844392272 +0 +120 +absolute + + + +0.01 +smooth + +8.53652211302847 +47.35047609403352 +428.9481227757364 +-187.55796070565552 +73.23049004229169 +0 +120 +absolute + + + +0.01 +smooth + +8.536521392420191 +47.35047608331585 +428.94824752849075 +-187.60481494228748 +73.23715366864785 +0 +120 +absolute + + + +0.01 +smooth + +8.536520671709209 +47.35047607229043 +428.9483717319049 +-187.6515979945591 +73.243829229407 +0 +120 +absolute + + + +0.01 +smooth + +8.536519950900109 +47.350476060962386 +428.94849537814747 +-187.6983096249717 +73.25051663098503 +0 +120 +absolute + + + +0.01 +smooth + +8.53651922999748 +47.35047604933693 +428.948618459387 +-187.74494959602654 +73.25721577979789 +0 +120 +absolute + + + +0.01 +smooth + +8.536518509005903 +47.35047603741917 +428.9487409677913 +-187.79151767022455 +73.26392658226133 +0 +120 +absolute + + + +0.01 +smooth + +8.536517787929967 +47.350476025214284 +428.9488628955292 +-187.83801361006698 +73.27064894479132 +0 +120 +absolute + + + +0.01 +smooth + +8.536517066774255 +47.35047601272744 +428.94898423476894 +-187.88443717805512 +73.27738277380372 +0 +120 +absolute + + + +0.01 +smooth + +8.536516345543355 +47.35047599996374 +428.94910497767853 +-187.93078813668993 +73.28412797571436 +0 +120 +absolute + + + +0.01 +smooth + +8.53651562424185 +47.35047598692841 +428.9492251164268 +-187.9770662484728 +73.2908844569392 +0 +120 +absolute + + + +0.01 +smooth + +8.536514902874327 +47.35047597362656 +428.94934464318175 +-188.0232712759047 +73.29765212389405 +0 +120 +absolute + + + +0.01 +smooth + +8.536514181445371 +47.350475960063356 +428.9494635501118 +-188.06940298148692 +73.30443088299482 +0 +120 +absolute + + + +0.01 +smooth + +8.536513459959572 +47.35047594624398 +428.94958182938535 +-188.11546112772066 +73.31122064065742 +0 +120 +absolute + + + +0.01 +smooth + +8.536512738421505 +47.35047593217354 +428.94969947317054 +-188.16144547710695 +73.31802130329764 +0 +120 +absolute + + + +0.01 +smooth + +8.536512016835765 +47.350475917857224 +428.949816473636 +-188.20735579214704 +73.32483277733144 +0 +120 +absolute + + + +0.01 +smooth + +8.536511295206934 +47.35047590330017 +428.94993282295 +-188.25319183534208 +73.33165496917465 +0 +120 +absolute + + + +0.01 +smooth + +8.536510573539596 +47.35047588850756 +428.9500485132808 +-188.2989533691933 +73.33848778524317 +0 +120 +absolute + + + +0.01 +smooth + +8.53650985183834 +47.35047587348451 +428.9501635367967 +-188.34464015620173 +73.34533113195288 +0 +120 +absolute + + + +0.01 +smooth + +8.53650913010775 +47.35047585823622 +428.95027788566614 +-188.39025195886865 +73.35218491571963 +0 +120 +absolute + + + +0.01 +smooth + +8.536508408352411 +47.35047584276783 +428.95039155205745 +-188.43578853969524 +73.35904904295934 +0 +120 +absolute + + + +0.01 +smooth + +8.536507686576906 +47.35047582708447 +428.9505045281389 +-188.48124966118257 +73.36592342008785 +0 +120 +absolute + + + +0.01 +smooth + +8.536506964785824 +47.35047581119132 +428.9506168060788 +-188.52663508583188 +73.37280795352108 +0 +120 +absolute + + + +0.01 +smooth + +8.536506242983751 +47.350475795093544 +428.95072837804565 +-188.5719445761443 +73.37970254967483 +0 +120 +absolute + + + +0.01 +smooth + +8.53650552117527 +47.35047577879628 +428.9508392362077 +-188.61717789462102 +73.38660711496507 +0 +120 +absolute + + + +0.01 +smooth + +8.53650479936497 +47.35047576230468 +428.95094937273325 +-188.6623348037632 +73.39352155580764 +0 +120 +absolute + + + +0.01 +smooth + +8.536504077557431 +47.350475745623925 +428.95105877979074 +-188.70741506607203 +73.4004457786184 +0 +120 +absolute + + + +0.01 +smooth + +8.536503355757244 +47.35047572875914 +428.9511674495484 +-188.7524184440486 +73.40737968981325 +0 +120 +absolute + + + +0.01 +smooth + +8.53650263396899 +47.350475711715504 +428.9512753741746 +-188.79734470019417 +73.41432319580807 +0 +120 +absolute + + + +0.01 +smooth + +8.536501912197258 +47.350475694498165 +428.95138254583776 +-188.84219359700987 +73.42127620301875 +0 +120 +absolute + + + +0.01 +smooth + +8.536501190446632 +47.35047567711228 +428.95148895670616 +-188.88696489699691 +73.42823861786111 +0 +120 +absolute + + + +0.01 +smooth + +8.536500468721698 +47.350475659562996 +428.95159459894813 +-188.93165836265635 +73.43521034675108 +0 +120 +absolute + + + +0.01 +smooth + +8.53649974702704 +47.350475641855475 +428.951699464732 +-188.97627375648946 +73.44219129610453 +0 +120 +absolute + + + +0.01 +smooth + +8.536499025367243 +47.35047562399488 +428.9518035462262 +-189.02081084099734 +73.44918137233732 +0 +120 +absolute + + + +0.01 +smooth + +8.536498303746898 +47.35047560598635 +428.95190683559895 +-189.06526937868125 +73.45618048186535 +0 +120 +absolute + + + +0.01 +smooth + +8.536497582170583 +47.350475587835064 +428.9520093250187 +-189.10964913204222 +73.46318853110448 +0 +120 +absolute + + + +0.01 +smooth + +8.536496860642888 +47.35047556954615 +428.9521110066537 +-189.15394986358152 +73.4702054264706 +0 +120 +absolute + + + +0.01 +smooth + +8.536496139168397 +47.35047555112478 +428.9522118726723 +-189.1981713358003 +73.47723107437957 +0 +120 +absolute + + + +0.01 +smooth + +8.536495417751699 +47.35047553257611 +428.9523119152429 +-189.24231331119972 +73.48426538124733 +0 +120 +absolute + + + +0.01 +smooth + +8.536494696397373 +47.3504755139053 +428.9524111265338 +-189.28637555228096 +73.49130825348966 +0 +120 +absolute + + + +0.01 +smooth + +8.53649397511001 +47.35047549511751 +428.9525094987133 +-189.33035782154514 +73.49835959752251 +0 +120 +absolute + + + +0.01 +smooth + +8.536493253894193 +47.35047547621786 +428.9526070239498 +-189.37425988149346 +73.50541931976173 +0 +120 +absolute + + + +0.01 +smooth + +8.536492532754508 +47.350475457211544 +428.9527036944117 +-189.41808149462707 +73.51248732662322 +0 +120 +absolute + + + +0.01 +smooth + +8.536491811695539 +47.35047543810371 +428.9527995022672 +-189.4618224234472 +73.51956352452282 +0 +120 +absolute + + + +0.01 +smooth + +8.536491090721874 +47.35047541889949 +428.9528944396847 +-189.50548243045495 +73.52664781987643 +0 +120 +absolute + + + +0.01 +smooth + +8.536490369838099 +47.35047539960408 +428.9529884988326 +-189.5490612781515 +73.53374011909995 +0 +120 +absolute + + + +0.01 +smooth + +8.536489649048796 +47.35047538022259 +428.9530816718792 +-189.59255872903805 +73.54084032860922 +0 +120 +absolute + + + +0.01 +smooth + +8.536488928358553 +47.350475360760214 +428.9531739509928 +-189.6359745456157 +73.54794835482012 +0 +120 +absolute + + + +0.01 +smooth + +8.536488207771955 +47.350475341222094 +428.9532653283417 +-189.67930849038567 +73.55506410414857 +0 +120 +absolute + + + +0.01 +smooth + +8.536487487293588 +47.35047532161339 +428.9533557960944 +-189.72256032584914 +73.56218748301042 +0 +120 +absolute + + + +0.01 +smooth + +8.536486766928036 +47.35047530193924 +428.95344534641913 +-189.76572981450727 +73.56931839782153 +0 +120 +absolute + + + +0.01 +smooth + +8.536486046679885 +47.350475282204826 +428.95353397148415 +-189.80881671886118 +73.57645675499782 +0 +120 +absolute + + + +0.01 +smooth + +8.536485326553723 +47.35047526241528 +428.953621663458 +-189.85182080141206 +73.5836024609551 +0 +120 +absolute + + + +0.01 +smooth + +8.536484606554131 +47.35047524257577 +428.95370841450887 +-189.89474182466114 +73.59075542210932 +0 +120 +absolute + + + +0.01 +smooth + +8.53648388662646 +47.350475222450505 +428.9537944089335 +-189.93758515681608 +73.59791695965376 +0 +120 +absolute + + + +0.01 +smooth + +8.536483166603583 +47.35047520135066 +428.95388019450394 +-189.98036679501226 +73.60509108657907 +0 +120 +absolute + + + +0.01 +smooth + +8.536482446479123 +47.35047517924592 +428.95396579627334 +-190.02308750994973 +73.61227798267079 +0 +120 +absolute + + + +0.01 +smooth + +8.536481726257584 +47.3504751561503 +428.9540512039688 +-190.06574704238264 +73.61947756806303 +0 +120 +absolute + + + +0.01 +smooth + +8.536481005943461 +47.350475132077854 +428.95413640731755 +-190.10834513306528 +73.62668976289002 +0 +120 +absolute + + + +0.01 +smooth + +8.536480285541257 +47.350475107042634 +428.954221396047 +-190.15088152275186 +73.63391448728594 +0 +120 +absolute + + + +0.01 +smooth + +8.53647956505548 +47.35047508105869 +428.95430615988465 +-190.19335595219664 +73.64115166138495 +0 +120 +absolute + + + +0.01 +smooth + +8.536478844490622 +47.350475054140034 +428.95439068855745 +-190.23576816215385 +73.64840120532125 +0 +120 +absolute + + + +0.01 +smooth + +8.536478123851191 +47.35047502630074 +428.954474971793 +-190.2781178933777 +73.655663039229 +0 +120 +absolute + + + +0.01 +smooth + +8.536477403141685 +47.35047499755485 +428.95455899931835 +-190.32040488662236 +73.66293708324237 +0 +120 +absolute + + + +0.01 +smooth + +8.536476682366605 +47.35047496791641 +428.9546427608612 +-190.36262888264227 +73.67022325749558 +0 +120 +absolute + + + +0.01 +smooth + +8.536475961530451 +47.350474937399454 +428.95472624614837 +-190.40478962219146 +73.67752148212277 +0 +120 +absolute + + + +0.01 +smooth + +8.536475240637726 +47.35047490601803 +428.9548094449074 +-190.44688684602428 +73.68483167725812 +0 +120 +absolute + + + +0.01 +smooth + +8.536474519692934 +47.3504748737862 +428.95489234686585 +-190.48892029489494 +73.69215376303583 +0 +120 +absolute + + + +0.01 +smooth + +8.536473798700571 +47.35047484071796 +428.9549749417506 +-190.53088970955764 +73.69948765959009 +0 +120 +absolute + + + +0.01 +smooth + +8.536473077665143 +47.35047480682741 +428.9550572192892 +-190.57279483076664 +73.70683328705505 +0 +120 +absolute + + + +0.01 +smooth + +8.536472356591146 +47.35047477212856 +428.95513916920873 +-190.61463539927615 +73.71419056556489 +0 +120 +absolute + + + +0.01 +smooth + +8.536471635483084 +47.35047473663546 +428.95522078123685 +-190.6564111558404 +73.7215594152538 +0 +120 +absolute + + + +0.01 +smooth + +8.53647091434546 +47.3504747003622 +428.9553020451007 +-190.69812184121375 +73.72893975625597 +0 +120 +absolute + + + +0.01 +smooth + +8.536470193182772 +47.35047466332275 +428.95538295052756 +-190.73976719615027 +73.73633150870558 +0 +120 +absolute + + + +0.01 +smooth + +8.536469471999522 +47.350474625531206 +428.9554634872447 +-190.78134696140424 +73.74373459273676 +0 +120 +absolute + + + +0.01 +smooth + +8.536468750800214 +47.35047458700161 +428.95554364497957 +-190.82286087772997 +73.75114892848374 +0 +120 +absolute + + + +0.01 +smooth + +8.536468029589342 +47.350474547747964 +428.95562341345925 +-190.86430868588158 +73.75857443608068 +0 +120 +absolute + + + +0.01 +smooth + +8.536467308371416 +47.35047450778436 +428.95570278241127 +-190.90569012661342 +73.76601103566178 +0 +120 +absolute + + + +0.01 +smooth + +8.536466587150931 +47.35047446712484 +428.95578174156293 +-190.94700494067965 +73.7734586473612 +0 +120 +absolute + + + +0.01 +smooth + +8.53646586593239 +47.35047442578342 +428.95586028064133 +-190.98825286883448 +73.78091719131311 +0 +120 +absolute + + + +0.01 +smooth + +8.5364651447203 +47.35047438377417 +428.9559383893742 +-191.0294336518323 +73.78838658765174 +0 +120 +absolute + + + +0.01 +smooth + +8.536464423519151 +47.35047434111111 +428.9560160574882 +-191.07054703042715 +73.7958667565112 +0 +120 +absolute + + + +0.01 +smooth + +8.53646370233345 +47.3504742978083 +428.9560932747112 +-191.1115927453733 +73.8033576180257 +0 +120 +absolute + + + +0.01 +smooth + +8.536462981167704 +47.35047425387981 +428.9561700307704 +-191.15257053742513 +73.81085909232945 +0 +120 +absolute + + + +0.01 +smooth + +8.536462260026402 +47.350474209339616 +428.9562463153928 +-191.1934801473367 +73.81837109955656 +0 +120 +absolute + + + +0.01 +smooth + +8.536461538914054 +47.350474164201835 +428.956322118306 +-191.23432131586242 +73.82589355984128 +0 +120 +absolute + + + +0.01 +smooth + +8.536460817835163 +47.350474118480484 +428.9563974292373 +-191.27509378375635 +73.83342639331777 +0 +120 +absolute + + + +0.01 +smooth + +8.536460096794215 +47.350474072189584 +428.9564722379138 +-191.31579729177275 +73.84096952012014 +0 +120 +absolute + + + +0.01 +smooth + +8.536459375795733 +47.35047402534323 +428.95654653406325 +-191.35643158066603 +73.84852286038269 +0 +120 +absolute + + + +0.01 +smooth + +8.536458654844202 +47.35047397795541 +428.9566203074123 +-191.3969963911902 +73.85608633423948 +0 +120 +absolute + + + +0.01 +smooth + +8.53645793394413 +47.350473930040216 +428.9566935476888 +-191.43749146409962 +73.86365986182476 +0 +120 +absolute + + + +0.01 +smooth + +8.536457213100018 +47.35047388161168 +428.9567662446201 +-191.47791654014853 +73.87124336327274 +0 +120 +absolute + + + +0.01 +smooth + +8.53645649231636 +47.350473832683804 +428.9568383879329 +-191.51827136009112 +73.8788367587175 +0 +120 +absolute + + + +0.01 +smooth + +8.53645577159767 +47.35047378327071 +428.95690996735516 +-191.5585556646816 +73.8864399682933 +0 +120 +absolute + + + +0.01 +smooth + +8.53645505094844 +47.35047373338638 +428.95698097261385 +-191.5987691946743 +73.89405291213428 +0 +120 +absolute + + + +0.01 +smooth + +8.536454330373171 +47.350473683044896 +428.95705139343636 +-191.63891169082336 +73.90167551037464 +0 +120 +absolute + + + +0.01 +smooth + +8.53645360987637 +47.35047363226027 +428.9571212195499 +-191.67898289388307 +73.90930768314857 +0 +120 +absolute + + + +0.01 +smooth + +8.536452889462533 +47.35047358104658 +428.957190440682 +-191.71898254460766 +73.9169493505902 +0 +120 +absolute + + + +0.01 +smooth + +8.536452169136162 +47.35047352941784 +428.95725904655967 +-191.7589103837513 +73.92460043283374 +0 +120 +absolute + + + +0.01 +smooth + +8.536451448901762 +47.350473477388114 +428.9573270269106 +-191.7987661520683 +73.93226085001338 +0 +120 +absolute + + + +0.01 +smooth + +8.53645072876383 +47.35047342497145 +428.95739437146176 +-191.83854959031294 +73.9399305222633 +0 +120 +absolute + + + +0.01 +smooth + +8.536450008726868 +47.350473372181874 +428.9574610699406 +-191.87826043923926 +73.94760936971765 +0 +120 +absolute + + + +0.01 +smooth + +8.53644928879538 +47.35047331903345 +428.95752711207444 +-191.9178984396017 +73.95529731251062 +0 +120 +absolute + + + +0.01 +smooth + +8.536448568973862 +47.3504732655402 +428.95759248759055 +-191.9574633321544 +73.9629942707764 +0 +120 +absolute + + + +0.01 +smooth + +8.53644784926682 +47.350473211716206 +428.95765718621624 +-191.99695485765162 +73.97070016464917 +0 +120 +absolute + + + +0.01 +smooth + +8.536447129678752 +47.35047315757548 +428.95772119767884 +-192.03637275684756 +73.97841491426313 +0 +120 +absolute + + + +0.01 +smooth + +8.536446410214163 +47.350473103132074 +428.95778451170565 +-192.07571677049648 +73.9861384397524 +0 +120 +absolute + + + +0.01 +smooth + +8.53644569087755 +47.35047304840003 +428.957847118024 +-192.11498663935262 +73.9938706612512 +0 +120 +absolute + + + +0.01 +smooth + +8.536444971673415 +47.35047299339341 +428.95790900636115 +-192.15418210417022 +74.00161149889371 +0 +120 +absolute + + + +0.01 +smooth + +8.536444252606262 +47.35047293812624 +428.9579701664444 +-192.1933029057035 +74.00936087281409 +0 +120 +absolute + + + +0.01 +smooth + +8.53644353368059 +47.35047288261257 +428.9580305880011 +-192.23234878470666 +74.01711870314654 +0 +120 +absolute + + + +0.01 +smooth + +8.5364428149009 +47.35047282686645 +428.9580902607586 +-192.271319481934 +74.02488491002522 +0 +120 +absolute + + + +0.01 +smooth + +8.536442096271694 +47.350472770901916 +428.9581491744441 +-192.31021473813973 +74.03265941358433 +0 +120 +absolute + + + +0.01 +smooth + +8.536441377797473 +47.35047271473302 +428.95820731878507 +-192.34903429407808 +74.04044213395802 +0 +120 +absolute + + + +0.01 +smooth + +8.536440659482738 +47.35047265837381 +428.95826468350856 +-192.38777789050323 +74.04823299128051 +0 +120 +absolute + + + +0.01 +smooth + +8.53643994133199 +47.35047260183832 +428.95832125834215 +-192.42644526816954 +74.05603190568594 +0 +120 +absolute + + + +0.01 +smooth + +8.536439223349731 +47.3504725451406 +428.95837703301294 +-192.4650361678312 +74.06383879730852 +0 +120 +absolute + + + +0.01 +smooth + +8.53643850554046 +47.3504724882947 +428.95843199724845 +-192.50355033024238 +74.07165358628241 +0 +120 +absolute + + + +0.01 +smooth + +8.536437787908682 +47.35047243131465 +428.9584861407758 +-192.54198749615733 +74.0794761927418 +0 +120 +absolute + + + +0.01 +smooth + +8.536437070458895 +47.350472374214505 +428.9585394533224 +-192.5803474063303 +74.08730653682085 +0 +120 +absolute + + + +0.01 +smooth + +8.536436353195601 +47.35047231700831 +428.95859192461546 +-192.61862980151557 +74.09514453865376 +0 +120 +absolute + + + +0.01 +smooth + +8.5364356361233 +47.350472259710116 +428.95864354438237 +-192.65683442246734 +74.10299011837472 +0 +120 +absolute + + + +0.01 +smooth + +8.536434919246497 +47.35047220233395 +428.9586943023504 +-192.6949610099398 +74.11084319611787 +0 +120 +absolute + + + +0.01 +smooth + +8.53643420256969 +47.35047214489387 +428.95874418824695 +-192.73300930468727 +74.11870369201742 +0 +120 +absolute + + + +0.01 +smooth + +8.536433486097383 +47.350472087403915 +428.95879319179926 +-192.77097904746392 +74.12657152620754 +0 +120 +absolute + + + +0.01 +smooth + +8.536432769834072 +47.35047202987814 +428.95884130273464 +-192.80886997902405 +74.13444661882241 +0 +120 +absolute + + + +0.01 +smooth + +8.536432053784264 +47.35047197233058 +428.9588885107804 +-192.84668184012182 +74.14232888999621 +0 +120 +absolute + + + +0.01 +smooth + +8.536431337952456 +47.350471914775284 +428.9589348056637 +-192.88441437151147 +74.15021825986311 +0 +120 +absolute + + + +0.01 +smooth + +8.53643062234315 +47.35047185722628 +428.9589801771122 +-192.9220673139473 +74.15811464855732 +0 +120 +absolute + + + +0.01 +smooth + +8.53642990696085 +47.350471799697644 +428.95902461485286 +-192.95964040818347 +74.16601797621297 +0 +120 +absolute + + + +0.01 +smooth + +8.536429191810054 +47.350471742203396 +428.9590681086133 +-192.99713339497424 +74.17392816296426 +0 +120 +absolute + + + +0.01 +smooth + +8.536428476895264 +47.35047168475759 +428.9591106481205 +-193.0345460150739 +74.18184512894541 +0 +120 +absolute + + + +0.01 +smooth + +8.536427762220981 +47.35047162737427 +428.95915222310197 +-193.07187800923663 +74.18976879429054 +0 +120 +absolute + + + +0.01 +smooth + +8.536427047791706 +47.350471570067484 +428.959192823285 +-193.10912911821669 +74.19769907913387 +0 +120 +absolute + + + +0.01 +smooth + +8.536426333518223 +47.350471512559636 +428.9592328691409 +-193.14630865205987 +74.20563781313881 +0 +120 +absolute + + + +0.01 +smooth + +8.536425619260136 +47.35047145440997 +428.9592730131005 +-193.18343113146116 +74.21358787214707 +0 +120 +absolute + + + +0.01 +smooth + +8.536424905020263 +47.35047139562052 +428.95931324714263 +-193.2204964442655 +74.22154921645576 +0 +120 +absolute + + + +0.01 +smooth + +8.536424190803064 +47.350471336198424 +428.9593535557209 +-193.25750431134736 +74.2295217730679 +0 +120 +absolute + + + +0.01 +smooth + +8.536423476612997 +47.35047127615083 +428.95939392328853 +-193.2944544535808 +74.23750546898653 +0 +120 +absolute + + + +0.01 +smooth + +8.53642276245452 +47.35047121548492 +428.9594343342992 +-193.3313465918402 +74.24550023121475 +0 +120 +absolute + + + +0.01 +smooth + +8.536422048332092 +47.35047115420779 +428.95947477320584 +-193.36818044699953 +74.25350598675546 +0 +120 +absolute + + + +0.01 +smooth + +8.536421334250166 +47.350471092326586 +428.95951522446205 +-193.4049557399332 +74.2615226626118 +0 +120 +absolute + + + +0.01 +smooth + +8.536420620213194 +47.35047102984846 +428.95955567252116 +-193.44167219151527 +74.26955018578677 +0 +120 +absolute + + + +0.01 +smooth + +8.53641990622565 +47.35047096678057 +428.9595961018368 +-193.47832952262016 +74.27758848328344 +0 +120 +absolute + + + +0.01 +smooth + +8.536419192291977 +47.35047090313004 +428.95963649686195 +-193.51492745412176 +74.2856374821048 +0 +120 +absolute + + + +0.01 +smooth + +8.536418478416635 +47.350470838903995 +428.95967684205016 +-193.5514657068945 +74.29369710925387 +0 +120 +absolute + + + +0.01 +smooth + +8.536417764604082 +47.35047077410962 +428.9597171218548 +-193.5879440018125 +74.30176729173373 +0 +120 +absolute + + + +0.01 +smooth + +8.536417050858773 +47.35047070875402 +428.9597573207292 +-193.62436205975 +74.30984795654739 +0 +120 +absolute + + + +0.01 +smooth + +8.536416337185171 +47.35047064284435 +428.9597974231267 +-193.66071960158126 +74.31793903069789 +0 +120 +absolute + + + +0.01 +smooth + +8.53641562358773 +47.35047057638776 +428.95983741350074 +-193.69701634818034 +74.32604044118823 +0 +120 +absolute + + + +0.01 +smooth + +8.536414910070906 +47.35047050939137 +428.95987727630467 +-193.73325202042147 +74.33415211502148 +0 +120 +absolute + + + +0.01 +smooth + +8.536414196639159 +47.35047044186236 +428.959916995992 +-193.76942633917906 +74.34227397920071 +0 +120 +absolute + + + +0.01 +smooth + +8.536413483296942 +47.35047037380784 +428.9599565570159 +-193.8055390253271 +74.35040596072885 +0 +120 +absolute + + + +0.01 +smooth + +8.536412770048715 +47.350470305234964 +428.95999594382977 +-193.84158979973984 +74.35854798660904 +0 +120 +absolute + + + +0.01 +smooth + +8.53641205689894 +47.35047023615088 +428.9600351408871 +-193.87757838329148 +74.36669998384424 +0 +120 +absolute + + + +0.01 +smooth + +8.536411343852063 +47.350470166562715 +428.9600741326412 +-193.9135044968563 +74.37486187943753 +0 +120 +absolute + + + +0.01 +smooth + +8.536410630912549 +47.35047009647761 +428.96011290354517 +-193.94936786130836 +74.3830336003919 +0 +120 +absolute + + + +0.01 +smooth + +8.536409918084852 +47.35047002590272 +428.9601514380529 +-193.98516819752206 +74.39121507371043 +0 +120 +absolute + + + +0.01 +smooth + +8.536409205373428 +47.35046995484519 +428.96018972061734 +-194.0209052263714 +74.3994062263961 +0 +120 +absolute + + + +0.01 +smooth + +8.53640849278274 +47.350469883312144 +428.96022773569206 +-194.0565786687307 +74.407606985452 +0 +120 +absolute + + + +0.01 +smooth + +8.536407780317244 +47.35046981131075 +428.96026546773055 +-194.0921882454742 +74.41581727788115 +0 +120 +absolute + + + +0.01 +smooth + +8.536407067981395 +47.35046973884813 +428.96030290118586 +-194.12773367747607 +74.42403703068655 +0 +120 +absolute + + + +0.01 +smooth + +8.536406355779649 +47.350469665931435 +428.9603400205116 +-194.16321468561046 +74.43226617087126 +0 +120 +absolute + + + +0.01 +smooth + +8.536405643716462 +47.350469592567784 +428.960376810161 +-194.1986309907516 +74.4405046254383 +0 +120 +absolute + + + +0.01 +smooth + +8.536404931796296 +47.35046951876436 +428.9604132545874 +-194.23398231377377 +74.44875232139074 +0 +120 +absolute + + + +0.01 +smooth + +8.536404220023606 +47.35046944452829 +428.9604493382444 +-194.26926837555104 +74.45700918573156 +0 +120 +absolute + + + +0.01 +smooth + +8.536403508402845 +47.35046936986669 +428.96048504558513 +-194.30448889695768 +74.4652751454638 +0 +120 +absolute + + + +0.01 +smooth + +8.536402796938482 +47.350469294786734 +428.96052036106323 +-194.33964359886798 +74.47355012759057 +0 +120 +absolute + + + +0.01 +smooth + +8.536402085634961 +47.35046921929555 +428.9605552691319 +-194.374732202156 +74.48183405911482 +0 +120 +absolute + + + +0.01 +smooth + +8.536401374496746 +47.35046914340029 +428.9605897542443 +-194.40975442769607 +74.4901268670396 +0 +120 +absolute + + + +0.01 +smooth + +8.536400663528292 +47.35046906710809 +428.9606238008543 +-194.4447099963623 +74.49842847836798 +0 +120 +absolute + + + +0.01 +smooth + +8.536399952734056 +47.35046899042607 +428.96065739341475 +-194.47959862902889 +74.50673882010294 +0 +120 +absolute + + + +0.01 +smooth + +8.536399242118499 +47.35046891336141 +428.9606905163793 +-194.5144200465701 +74.51505781924755 +0 +120 +absolute + + + +0.01 +smooth + +8.536398531686075 +47.35046883592124 +428.9607231542014 +-194.54917396986014 +74.52338540280483 +0 +120 +absolute + + + +0.01 +smooth + +8.53639782144124 +47.3504687581127 +428.9607552913343 +-194.58386011977325 +74.53172149777782 +0 +120 +absolute + + + +0.01 +smooth + +8.536397111388453 +47.350468679942914 +428.9607869122313 +-194.6184782171835 +74.54006603116956 +0 +120 +absolute + + + +0.01 +smooth + +8.53639640153217 +47.35046860141905 +428.96081800134584 +-194.6530279829652 +74.54841892998306 +0 +120 +absolute + + + +0.01 +smooth + +8.53639569187685 +47.35046852254825 +428.9608485431313 +-194.68750913799255 +74.5567801212214 +0 +120 +absolute + + + +0.01 +smooth + +8.536394982426948 +47.35046844333763 +428.9608785220411 +-194.72192140313967 +74.56514953188754 +0 +120 +absolute + + + +0.01 +smooth + +8.536394273186925 +47.35046836379436 +428.9609079225285 +-194.7562644992809 +74.57352708898458 +0 +120 +absolute + + + +0.01 +smooth + +8.536393564161234 +47.350468283925565 +428.9609367290469 +-194.79053814729033 +74.58191271951553 +0 +120 +absolute + + + +0.01 +smooth + +8.536392855354334 +47.3504682037384 +428.9609649260499 +-194.8247420680422 +74.59030635048342 +0 +120 +absolute + + + +0.01 +smooth + +8.536392146770684 +47.35046812324 +428.96099249799045 +-194.85887598241072 +74.59870790889127 +0 +120 +absolute + + + +0.01 +smooth + +8.536391438414736 +47.350468042437505 +428.9610194293223 +-194.89293961127015 +74.60711732174215 +0 +120 +absolute + + + +0.01 +smooth + +8.536390730290954 +47.35046796133806 +428.96104570449853 +-194.9269326754946 +74.61553451603906 +0 +120 +absolute + + + +0.01 +smooth + +8.536390022403788 +47.35046787994881 +428.96107130797276 +-194.9608548959583 +74.62395941878506 +0 +120 +absolute + + + +0.01 +smooth + +8.536389314757699 +47.35046779827689 +428.9610962241982 +-194.9947059935355 +74.63239195698316 +0 +120 +absolute + + + +0.01 +smooth + +8.536388607357145 +47.35046771632944 +428.9611204376282 +-195.02848568910036 +74.6408320576364 +0 +120 +absolute + + + +0.01 +smooth + +8.536387900206583 +47.35046763411362 +428.96114393271637 +-195.06219370352713 +74.64927964774785 +0 +120 +absolute + + + +0.01 +smooth + +8.536387193310468 +47.35046755163656 +428.96116669391574 +-195.09582975768996 +74.65773465432048 +0 +120 +absolute + + + +0.01 +smooth + +8.536386486673258 +47.3504674689054 +428.96118870567994 +-195.12939357246307 +74.66619700435736 +0 +120 +absolute + + + +0.01 +smooth + +8.536385780299412 +47.35046738592729 +428.9612099524622 +-195.1628848687207 +74.67466662486152 +0 +120 +absolute + + + +0.01 +smooth + +8.536385074193385 +47.35046730270936 +428.961230418716 +-195.196303367337 +74.683143442836 +0 +120 +absolute + + + +0.01 +smooth + +8.536384368359634 +47.35046721925876 +428.96125008889464 +-195.22964878918617 +74.69162738528381 +0 +120 +absolute + + + +0.01 +smooth + +8.53638366280262 +47.35046713558264 +428.9612689474515 +-195.2629208551425 +74.700118379208 +0 +120 +absolute + + + +0.01 +smooth + +8.536382957526797 +47.35046705168813 +428.96128697883995 +-195.29611928608017 +74.70861635161161 +0 +120 +absolute + + + +0.01 +smooth + +8.53638225253662 +47.35046696758238 +428.9613041675134 +-195.32924380287335 +74.71712122949768 +0 +120 +absolute + + + +0.01 +smooth + +8.536381547836552 +47.350466883272524 +428.96132049792516 +-195.3622941263962 +74.7256329398692 +0 +120 +absolute + + + +0.01 +smooth + +8.536380843431044 +47.35046679876571 +428.96133595452864 +-195.39526997752296 +74.73415140972925 +0 +120 +absolute + + + +0.01 +smooth + +8.536380139324557 +47.35046671406907 +428.96135052177715 +-195.4281710771279 +74.74267656608086 +0 +120 +absolute + + + +0.01 +smooth + +8.53637943552155 +47.35046662918978 +428.96136418412414 +-195.46099714608516 +74.75120833592703 +0 +120 +absolute + + + +0.01 +smooth + +8.536378732026474 +47.35046654413493 +428.961376926023 +-195.49374790526898 +74.75974664627083 +0 +120 +absolute + + + +0.01 +smooth + +8.536378028843792 +47.350466458911704 +428.96138873192706 +-195.5264230755535 +74.76829142411526 +0 +120 +absolute + + + +0.01 +smooth + +8.536377325977957 +47.35046637352722 +428.9613995862896 +-195.559022377813 +74.77684259646338 +0 +120 +absolute + + + +0.01 +smooth + +8.53637662343343 +47.35046628798864 +428.9614094735641 +-195.59154553292169 +74.78540009031822 +0 +120 +absolute + + + +0.01 +smooth + +8.536375921214665 +47.350466202303096 +428.9614183782039 +-195.62399226175364 +74.79396383268279 +0 +120 +absolute + + + +0.01 +smooth + +8.53637521932612 +47.350466116477726 +428.9614262846624 +-195.65636228518323 +74.80253375056016 +0 +120 +absolute + + + +0.01 +smooth + +8.536374517772254 +47.35046603051967 +428.961433177393 +-195.6886553240846 +74.81110977095334 +0 +120 +absolute + + + +0.01 +smooth + +8.536373816557523 +47.35046594443608 +428.96143904084903 +-195.7208710993319 +74.81969182086537 +0 +120 +absolute + + + +0.01 +smooth + +8.536373115686384 +47.3504658582341 +428.9614438594838 +-195.75300933179943 +74.82827982729927 +0 +120 +absolute + + + +0.01 +smooth + +8.536372415163294 +47.35046577192087 +428.96144761775076 +-195.78506974236126 +74.83687371725809 +0 +120 +absolute + + + +0.01 +smooth + +8.53637171499271 +47.35046568550352 +428.96145030010325 +-195.81705205189175 +74.84547341774488 +0 +120 +absolute + + + +0.01 +smooth + +8.536371015179089 +47.35046559898922 +428.9614518909946 +-195.848955981265 +74.85407885576264 +0 +120 +absolute + + + +0.01 +smooth + +8.536370315726348 +47.35046551238416 +428.9614523770931 +-195.88078130948588 +74.86268996812547 +0 +120 +absolute + + + +0.01 +smooth + +8.53636961650191 +47.35046542546372 +428.9614523063243 +-195.91254246142938 +74.87130916428438 +0 +120 +absolute + + + +0.01 +smooth + +8.536368917404065 +47.35046533805388 +428.9614521113355 +-195.94425053785983 +74.87993829534723 +0 +120 +absolute + + + +0.01 +smooth + +8.536368218437259 +47.350465250159516 +428.9614517930653 +-195.9759052436157 +74.88857728964996 +0 +120 +absolute + + + +0.01 +smooth + +8.536367519605951 +47.35046516178548 +428.96145135245257 +-196.00750628353546 +74.89722607552844 +0 +120 +absolute + + + +0.01 +smooth + +8.53636682091458 +47.35046507293664 +428.9614507904355 +-196.03905336245754 +74.90588458131857 +0 +120 +absolute + + + +0.01 +smooth + +8.5363661223676 +47.350464983617876 +428.9614501079528 +-196.07054618522045 +74.91455273535624 +0 +120 +absolute + + + +0.01 +smooth + +8.53636542396946 +47.35046489383405 +428.9614493059432 +-196.10198445666273 +74.92323046597734 +0 +120 +absolute + + + +0.01 +smooth + +8.536364725724614 +47.35046480359005 +428.9614483853452 +-196.13336788162283 +74.9319177015178 +0 +120 +absolute + + + +0.01 +smooth + +8.5363640276375 +47.35046471289072 +428.9614473470973 +-196.16469616493916 +74.9406143703135 +0 +120 +absolute + + + +0.01 +smooth + +8.536363329712575 +47.35046462174093 +428.96144619213834 +-196.1959690114503 +74.94932040070032 +0 +120 +absolute + + + +0.01 +smooth + +8.536362631954287 +47.35046453014557 +428.96144492140655 +-196.22718612599468 +74.95803572101418 +0 +120 +absolute + + + +0.01 +smooth + +8.536361934367084 +47.350464438109505 +428.9614435358409 +-196.25834721341087 +74.96676025959097 +0 +120 +absolute + + + +0.01 +smooth + +8.536361236955418 +47.350464345637576 +428.9614420363797 +-196.28945197853727 +74.97549394476657 +0 +120 +absolute + + + +0.01 +smooth + +8.536360539723738 +47.35046425273468 +428.9614404239616 +-196.32050012621238 +74.9842367048769 +0 +120 +absolute + + + +0.01 +smooth + +8.53635984267649 +47.350464159405675 +428.96143869952533 +-196.3514913612747 +74.99298846825786 +0 +120 +absolute + + + +0.01 +smooth + +8.536359145818126 +47.350464065655444 +428.9614368640093 +-196.38242538856267 +75.00174916324534 +0 +120 +absolute + + + +0.01 +smooth + +8.536358449153093 +47.35046397148883 +428.9614349183521 +-196.41330191291482 +75.01051871817522 +0 +120 +absolute + + + +0.01 +smooth + +8.53635775268584 +47.35046387691072 +428.96143286349246 +-196.4441206391696 +75.01929706138343 +0 +120 +absolute + + + +0.01 +smooth + +8.53635705642082 +47.35046378192598 +428.9614307003689 +-196.47488127216553 +75.02808412120582 +0 +120 +absolute + + + +0.01 +smooth + +8.536356360362483 +47.35046368653949 +428.96142842992015 +-196.50558351674113 +75.03687982597835 +0 +120 +absolute + + + +0.01 +smooth + +8.536355664515272 +47.3504635907561 +428.96142605308444 +-196.53622707773474 +75.04568410403687 +0 +120 +absolute + + + +0.01 +smooth + +8.536354968883641 +47.350463494580694 +428.96142357080066 +-196.56681165998498 +75.05449688371728 +0 +120 +absolute + + + +0.01 +smooth + +8.536354273472037 +47.35046339801813 +428.9614209840075 +-196.59733696833035 +75.06331809335552 +0 +120 +absolute + + + +0.01 +smooth + +8.536353578284906 +47.35046330107327 +428.96141829364296 +-196.6278027076091 +75.0721476612874 +0 +120 +absolute + + + +0.01 +smooth + +8.536352883326709 +47.35046320375102 +428.9614155006464 +-196.65820858266008 +75.08098551584892 +0 +120 +absolute + + + +0.01 +smooth + +8.536352188601885 +47.3504631060562 +428.9614126059559 +-196.68855429832146 +75.08983158537593 +0 +120 +absolute + + + +0.01 +smooth + +8.536351494114882 +47.3504630079937 +428.96140961051015 +-196.71883955943187 +75.09868579820429 +0 +120 +absolute + + + +0.01 +smooth + +8.53635079987016 +47.35046290956843 +428.9614065152479 +-196.74906407082977 +75.10754808266996 +0 +120 +absolute + + + +0.01 +smooth + +8.536350105872156 +47.35046281078519 +428.96140332110764 +-196.77922753735368 +75.11641836710882 +0 +120 +absolute + + + +0.01 +smooth + +8.536349412125329 +47.35046271164887 +428.9614000290278 +-196.80932966384202 +75.12529657985675 +0 +120 +absolute + + + +0.01 +smooth + +8.536348718634123 +47.35046261216438 +428.96139663994734 +-196.83937015513334 +75.13418264924967 +0 +120 +absolute + + + +0.01 +smooth + +8.536348025402985 +47.350462512336534 +428.96139315480445 +-196.869348716066 +75.14307650362342 +0 +120 +absolute + + + +0.01 +smooth + +8.536347332436371 +47.350462412170245 +428.9613895745379 +-196.8992650514786 +75.15197807131398 +0 +120 +absolute + + + +0.01 +smooth + +8.536346639738724 +47.35046231167034 +428.9613859000863 +-196.92911886620962 +75.16088728065719 +0 +120 +absolute + + + +0.01 +smooth + +8.536345947314496 +47.35046221084171 +428.9613821323882 +-196.9589098650975 +75.16980405998895 +0 +120 +absolute + + + +0.01 +smooth + +8.53634525516814 +47.35046210968925 +428.96137827238226 +-196.98863775298074 +75.1787283376452 +0 +120 +absolute + + + +0.01 +smooth + +8.5363445633041 +47.35046200821779 +428.961374321007 +-197.0183022346978 +75.18766004196179 +0 +120 +absolute + + + +0.01 +smooth + +8.536343871726825 +47.350461906432216 +428.96137027920105 +-197.04790301508726 +75.19659910127466 +0 +120 +absolute + + + +0.01 +smooth + +8.536343180440769 +47.350461804337385 +428.961366147903 +-197.07743979898748 +75.20554544391966 +0 +120 +absolute + + + +0.01 +smooth + +8.536342489450375 +47.35046170193818 +428.96136192805125 +-197.10691229123697 +75.2144989982327 +0 +120 +absolute + + + +0.01 +smooth + +8.536341798760098 +47.35046159923946 +428.96135762058464 +-197.1363201966743 +75.22345969254971 +0 +120 +absolute + + + +0.01 +smooth + +8.536341108374382 +47.350461496246105 +428.9613532264416 +-197.16566322013784 +75.23242745520656 +0 +120 +absolute + + + +0.01 +smooth + +8.53634041829768 +47.35046139296297 +428.96134874656093 +-197.19494106646613 +75.24140221453915 +0 +120 +absolute + + + +0.01 +smooth + +8.536339728534442 +47.35046128939494 +428.961344181881 +-197.22415344049764 +75.25038389888338 +0 +120 +absolute + + + +0.01 +smooth + +8.536339039089116 +47.35046118554687 +428.9613395333405 +-197.25330004707092 +75.25937243657515 +0 +120 +absolute + + + +0.01 +smooth + +8.53633834996615 +47.35046108142364 +428.9613348018779 +-197.28238059102438 +75.26836775595035 +0 +120 +absolute + + + +0.01 +smooth + +8.536337661169993 +47.35046097703011 +428.961329988432 +-197.31139477719648 +75.27736978534489 +0 +120 +absolute + + + +0.01 +smooth + +8.536336972705097 +47.35046087237116 +428.96132509394124 +-197.3403423104258 +75.28637845309464 +0 +120 +absolute + + + +0.01 +smooth + +8.536336284575908 +47.350460767451644 +428.96132011934424 +-197.3692228955507 +75.29539368753552 +0 +120 +absolute + + + +0.01 +smooth + +8.53633559678688 +47.35046066227645 +428.96131506557964 +-197.39803623740983 +75.30441541700343 +0 +120 +absolute + + + +0.01 +smooth + +8.536334909342457 +47.35046055685042 +428.961309933586 +-197.42678204084152 +75.31344356983425 +0 +120 +absolute + + + +0.01 +smooth + +8.53633422224709 +47.35046045117845 +428.9613047243018 +-197.4554600106843 +75.32247807436389 +0 +120 +absolute + + + +0.01 +smooth + +8.536333535505229 +47.3504603452654 +428.9612994386657 +-197.4840698517767 +75.33151885892826 +0 +120 +absolute + + + +0.01 +smooth + +8.536332849121322 +47.35046023911613 +428.96129407761646 +-197.51261126895716 +75.34056585186323 +0 +120 +absolute + + + +0.01 +smooth + +8.536332163099821 +47.35046013273553 +428.9612886420924 +-197.54108396706414 +75.3496189815047 +0 +120 +absolute + + + +0.01 +smooth + +8.536331477445174 +47.350460026128445 +428.96128313303234 +-197.5694876509362 +75.35867817618858 +0 +120 +absolute + + + +0.01 +smooth + +8.536330792161829 +47.35045991929976 +428.9612775513747 +-197.59782202541174 +75.36774336425077 +0 +120 +absolute + + + +0.01 +smooth + +8.536330107254235 +47.35045981225433 +428.96127189805816 +-197.62608679532934 +75.37681447402714 +0 +120 +absolute + + + +0.01 +smooth + +8.536329422726844 +47.35045970499704 +428.96126617402115 +-197.65428166552738 +75.38589143385363 +0 +120 +absolute + + + +0.01 +smooth + +8.536328738584103 +47.35045959753276 +428.9612603802026 +-197.6824063408444 +75.3949741720661 +0 +120 +absolute + + + +0.01 +smooth + +8.53632805483046 +47.35045948986633 +428.96125451754074 +-197.71046052611888 +75.40406261700046 +0 +120 +absolute + + + +0.01 +smooth + +8.536327371470371 +47.350459382002654 +428.9612485869744 +-197.73844392618935 +75.41315669699262 +0 +120 +absolute + + + +0.01 +smooth + +8.536326688508275 +47.35045927394659 +428.961242589442 +-197.7663562458942 +75.42225634037847 +0 +120 +absolute + + + +0.01 +smooth + +8.536326005948627 +47.350459165703 +428.9612365258822 +-197.79419719007194 +75.43136147549387 +0 +120 +absolute + + + +0.01 +smooth + +8.536325323795877 +47.35045905727675 +428.96123039723363 +-197.82196646356107 +75.44047203067478 +0 +120 +absolute + + + +0.01 +smooth + +8.536324642054474 +47.350458948672724 +428.96122420443487 +-197.84966377120014 +75.44958793425707 +0 +120 +absolute + + + +0.01 +smooth + +8.536323960728865 +47.35045883989578 +428.9612179484245 +-197.8772888178275 +75.45870911457664 +0 +120 +absolute + + + +0.01 +smooth + +8.5363232798235 +47.35045873095079 +428.9612116301411 +-197.90484130828173 +75.46783549996935 +0 +120 +absolute + + + +0.01 +smooth + +8.536322599342832 +47.350458621842634 +428.9612052505232 +-197.9323209474013 +75.47696701877115 +0 +120 +absolute + + + +0.01 +smooth + +8.536321919291305 +47.35045851257617 +428.96119881050953 +-197.95972744002464 +75.48610359931793 +0 +120 +absolute + + + +0.01 +smooth + +8.53632123967337 +47.35045840315626 +428.96119231103853 +-197.9870604909903 +75.49524516994555 +0 +120 +absolute + + + +0.01 +smooth + +8.536320560493477 +47.35045829358778 +428.9611857530489 +-198.01431980513675 +75.50439165898993 +0 +120 +absolute + + + +0.01 +smooth + +8.536319881756075 +47.3504581838756 +428.9611791374791 +-198.04150508730243 +75.51354299478699 +0 +120 +absolute + + + +0.01 +smooth + +8.536319203465613 +47.350458074024594 +428.96117246526785 +-198.06861604232586 +75.52269910567259 +0 +120 +absolute + + + +0.01 +smooth + +8.536318525626541 +47.35045796403962 +428.9611657373537 +-198.09565237504557 +75.53185991998264 +0 +120 +absolute + + + +0.01 +smooth + +8.536317848243307 +47.350457853925555 +428.9611589546753 +-198.12261379029994 +75.54102536605303 +0 +120 +absolute + + + +0.01 +smooth + +8.536317171320363 +47.350457743687265 +428.961152118171 +-198.14949999292753 +75.55019537221969 +0 +120 +absolute + + + +0.01 +smooth + +8.536316494862154 +47.350457633329626 +428.9611452287798 +-198.17631068776683 +75.55936986681846 +0 +120 +absolute + + + +0.01 +smooth + +8.536315818873133 +47.350457522857496 +428.96113828743984 +-198.20304557965622 +75.5685487781853 +0 +120 +absolute + + + +0.01 +smooth + +8.53631514334987 +47.35045741226706 +428.9611312685972 +-198.22970523780893 +75.57773216753668 +0 +120 +absolute + + + +0.01 +smooth + +8.536314468123594 +47.350457301371875 +428.96112359372586 +-198.25630838035948 +75.58692288573724 +0 +120 +absolute + + + +0.01 +smooth + +8.536313793127903 +47.350457190097636 +428.9611150370826 +-198.28286248127148 +75.59612205410988 +0 +120 +absolute + + + +0.01 +smooth + +8.536313118367275 +47.3504570784481 +428.9611056125754 +-198.30936723407737 +75.60532959774804 +0 +120 +absolute + + + +0.01 +smooth + +8.536312443846178 +47.35045696642704 +428.96109533411186 +-198.33582233230953 +75.61454544174522 +0 +120 +absolute + + + +0.01 +smooth + +8.536311769569087 +47.35045685403818 +428.9610842156 +-198.3622274695004 +75.62376951119487 +0 +120 +absolute + + + +0.01 +smooth + +8.53631109554048 +47.35045674128531 +428.9610722709475 +-198.3885823391825 +75.63300173119052 +0 +120 +absolute + + + +0.01 +smooth + +8.53631042176483 +47.35045662817221 +428.9610595140627 +-198.4148866348882 +75.64224202682561 +0 +120 +absolute + + + +0.01 +smooth + +8.536309748246603 +47.35045651470261 +428.961045958853 +-198.44114005014995 +75.65149032319366 +0 +120 +absolute + + + +0.01 +smooth + +8.536309074990283 +47.35045640088026 +428.9610316192263 +-198.46734227850018 +75.66074654538811 +0 +120 +absolute + + + +0.01 +smooth + +8.536308402000337 +47.35045628670895 +428.9610165090908 +-198.49349301347146 +75.67001061850249 +0 +120 +absolute + + + +0.01 +smooth + +8.536307729281242 +47.35045617219241 +428.9610006423539 +-198.519591948596 +75.67928246763023 +0 +120 +absolute + + + +0.01 +smooth + +8.536307056837469 +47.35045605733441 +428.9609840329239 +-198.5456387774064 +75.68856201786483 +0 +120 +absolute + + + +0.01 +smooth + +8.536306384673491 +47.350455942138716 +428.9609666947083 +-198.57163319343508 +75.69784919429979 +0 +120 +absolute + + + +0.01 +smooth + +8.536305712793785 +47.350455826609085 +428.96094864161523 +-198.5975748902144 +75.70714392202858 +0 +120 +absolute + + + +0.01 +smooth + +8.536305041202825 +47.35045571074929 +428.96092988755265 +-198.623463561277 +75.71644612614469 +0 +120 +absolute + + + +0.01 +smooth + +8.536304369905082 +47.35045559456305 +428.96091044642804 +-198.64929890015506 +75.72575573174157 +0 +120 +absolute + + + +0.01 +smooth + +8.53630369890503 +47.35045547805416 +428.96089033214946 +-198.6750806003812 +75.73507266391272 +0 +120 +absolute + + + +0.01 +smooth + +8.536303028207143 +47.35045536122639 +428.96086955862495 +-198.7008083554878 +75.74439684775166 +0 +120 +absolute + + + +0.01 +smooth + +8.536302357815897 +47.350455244083456 +428.96084813976216 +-198.7264818590073 +75.7537282083518 +0 +120 +absolute + + + +0.01 +smooth + +8.536301687735756 +47.35045512662914 +428.96082608946887 +-198.7521008044721 +75.76306667080668 +0 +120 +absolute + + + +0.01 +smooth + +8.536301017971208 +47.350455008867215 +428.9608034216533 +-198.7776648854147 +75.77241216020975 +0 +120 +absolute + + + +0.01 +smooth + +8.536300348526717 +47.35045489080141 +428.96078015022283 +-198.80317379536748 +75.78176460165449 +0 +120 +absolute + + + +0.01 +smooth + +8.536299679406765 +47.350454772435526 +428.9607562890859 +-198.82862722786302 +75.79112392023441 +0 +120 +absolute + + + +0.01 +smooth + +8.536299010615814 +47.350454653773284 +428.9607318521499 +-198.8540248764336 +75.80049004104299 +0 +120 +absolute + + + +0.01 +smooth + +8.536298342158346 +47.35045453481846 +428.96070685332296 +-198.8793664346118 +75.80986288917367 +0 +120 +absolute + + + +0.01 +smooth + +8.536297674038835 +47.35045441557483 +428.9606813065128 +-198.90465159592992 +75.81924238972 +0 +120 +absolute + + + +0.01 +smooth + +8.536297006261748 +47.35045429604611 +428.9606552256273 +-198.92988005392047 +75.82862846777537 +0 +120 +absolute + + + +0.01 +smooth + +8.536296338831562 +47.350454176236106 +428.96062862457444 +-198.9550515021159 +75.83802104843335 +0 +120 +absolute + + + +0.01 +smooth + +8.536295671752754 +47.350454056148536 +428.960601517262 +-198.98016563404863 +75.84742005678734 +0 +120 +absolute + + + +0.01 +smooth + +8.536295005029794 +47.35045393578719 +428.96057391759774 +-199.0052221432511 +75.85682541793089 +0 +120 +absolute + + + +0.01 +smooth + +8.536294338667158 +47.35045381515583 +428.9605458394898 +-199.03022072325575 +75.86623705695746 +0 +120 +absolute + + + +0.01 +smooth + +8.536293672669318 +47.350453694258185 +428.96051729684586 +-199.05516106759507 +75.87565489896052 +0 +120 +absolute + + + +0.01 +smooth + +8.536293007040749 +47.35045357309804 +428.9604883035738 +-199.08004286980142 +75.88507886903358 +0 +120 +absolute + + + +0.01 +smooth + +8.536292341785924 +47.35045345167916 +428.9604588735817 +-199.10486582340732 +75.89450889227011 +0 +120 +absolute + + + +0.01 +smooth + +8.536291676909313 +47.350453330005266 +428.9604290207768 +-199.12962962194507 +75.90394489376354 +0 +120 +absolute + + + +0.01 +smooth + +8.536291012415395 +47.350453208080154 +428.96039875906774 +-199.15433395894726 +75.91338679860742 +0 +120 +absolute + + + +0.01 +smooth + +8.536290348308643 +47.35045308590758 +428.96036810236194 +-199.1789785279463 +75.9228345318952 +0 +120 +absolute + + + +0.01 +smooth + +8.536289684593527 +47.350452963491286 +428.9603370645673 +-199.20356302247455 +75.93228801872036 +0 +120 +absolute + + + +0.01 +smooth + +8.536289021274525 +47.350452840835054 +428.9603056595918 +-199.22808713606457 +75.94174718417639 +0 +120 +absolute + + + +0.01 +smooth + +8.536288358356108 +47.350452717942616 +428.96027390134327 +-199.2525505622487 +75.95121195335678 +0 +120 +absolute + + + +0.01 +smooth + +8.53628769584275 +47.35045259481775 +428.96024180372956 +-199.27695299455945 +75.96068225135501 +0 +120 +absolute + + + +0.01 +smooth + +8.536287033738924 +47.35045247146422 +428.96020938065857 +-199.30129412652923 +75.97015800326454 +0 +120 +absolute + + + +0.01 +smooth + +8.536286372049107 +47.35045234788577 +428.9601766460381 +-199.32557365169043 +75.97963913417887 +0 +120 +absolute + + + +0.01 +smooth + +8.53628571077777 +47.3504522240862 +428.9601436137761 +-199.34979126357558 +75.98912556919149 +0 +120 +absolute + + + +0.01 +smooth + +8.536285049929386 +47.3504521000692 +428.9601102977804 +-199.37394665571705 +75.99861723339586 +0 +120 +absolute + + + +0.01 +smooth + +8.536284389508431 +47.350451975838574 +428.9600767119587 +-199.39803952164732 +76.00811405188546 +0 +120 +absolute + + + +0.01 +smooth + +8.536283729519377 +47.350451851398084 +428.9600428702191 +-199.4220695548988 +76.0176159497538 +0 +120 +absolute + + + +0.01 +smooth + +8.536283069966697 +47.350451726751466 +428.96000878646953 +-199.44603644900397 +76.02712285209434 +0 +120 +absolute + + + +0.01 +smooth + +8.536282410854866 +47.350451601902506 +428.9599744746176 +-199.4699398974953 +76.03663468400056 +0 +120 +absolute + + + +0.01 +smooth + +8.536281752188357 +47.35045147685494 +428.95993994857133 +-199.49377959390515 +76.04615137056595 +0 +120 +absolute + + + +0.01 +smooth + +8.536281093971644 +47.35045135161254 +428.95990522223843 +-199.5175552317659 +76.05567283688399 +0 +120 +absolute + + + +0.01 +smooth + +8.536280436209202 +47.35045122617907 +428.959870309527 +-199.54126650461018 +76.06519900804817 +0 +120 +absolute + + + +0.01 +smooth + +8.5362797789055 +47.35045110055828 +428.9598352243447 +-199.56491310597028 +76.07472980915195 +0 +120 +absolute + + + +0.01 +smooth + +8.536279122065018 +47.35045097475393 +428.95979998059954 +-199.58849472937874 +76.08426516528883 +0 +120 +absolute + + + +0.01 +smooth + +8.536278465692227 +47.35045084876978 +428.9597645921993 +-199.6120110683679 +76.09380500155228 +0 +120 +absolute + + + +0.01 +smooth + +8.5362778097916 +47.3504507226096 +428.9597290730519 +-199.63546181647027 +76.10334924303578 +0 +120 +absolute + + + +0.01 +smooth + +8.536277154367609 +47.35045059627714 +428.9596934370652 +-199.6588466672183 +76.11289781483283 +0 +120 +absolute + + + +0.01 +smooth + +8.53627649942473 +47.350450469776156 +428.959657698147 +-199.68216531414436 +76.12245064203691 +0 +120 +absolute + + + +0.01 +smooth + +8.536275844967436 +47.35045034311042 +428.9596218702052 +-199.70541745078094 +76.13200764974148 +0 +120 +absolute + + + +0.01 +smooth + +8.536275191000204 +47.35045021628368 +428.95958596714775 +-199.7286027706605 +76.14156876304003 +0 +120 +absolute + + + +0.01 +smooth + +8.5362745375275 +47.3504500892997 +428.95955000288234 +-199.75172096731546 +76.15113390702606 +0 +120 +absolute + + + +0.01 +smooth + +8.536273884553806 +47.35044996216223 +428.959513991317 +-199.7747717342782 +76.16070300679303 +0 +120 +absolute + + + +0.01 +smooth + +8.536273232083591 +47.35044983487505 +428.9594779463596 +-199.7977547650812 +76.17027598743442 +0 +120 +absolute + + + +0.01 +smooth + +8.536272580121327 +47.3504497074419 +428.9594418819179 +-199.820669753257 +76.17985277404372 +0 +120 +absolute + + + +0.01 +smooth + +8.536271928671495 +47.35044957986655 +428.95940581189967 +-199.8435163923379 +76.18943329171442 +0 +120 +absolute + + + +0.01 +smooth + +8.53627127773856 +47.35044945215276 +428.959369750213 +-199.8662943758564 +76.19901746554 +0 +120 +absolute + + + +0.01 +smooth + +8.536270627327001 +47.35044932430428 +428.9593337107658 +-199.8890033973449 +76.20860522061392 +0 +120 +absolute + + + +0.01 +smooth + +8.536269977441288 +47.35044919632489 +428.9592977074657 +-199.91164315033592 +76.21819648202968 +0 +120 +absolute + + + +0.01 +smooth + +8.5362693280859 +47.350449068218325 +428.9592617542206 +-199.93421332836186 +76.22779117488078 +0 +120 +absolute + + + +0.01 +smooth + +8.536268679265305 +47.350448939988354 +428.9592258649386 +-199.95671362495509 +76.23738922426065 +0 +120 +absolute + + + +0.01 +smooth + +8.536268030983981 +47.35044881163874 +428.9591900535272 +-199.97914373364813 +76.24699055526281 +0 +120 +absolute + + + +0.01 +smooth + +8.5362673832464 +47.350448683173234 +428.9591543338947 +-200.00150334797343 +76.25659509298075 +0 +120 +absolute + + + +0.01 +smooth + +8.536266736057033 +47.35044855459561 +428.95911871994855 +-200.0237921614634 +76.26620276250792 +0 +120 +absolute + + + +0.01 +smooth + +8.536266089420359 +47.35044842590962 +428.9590832255968 +-200.04600986765053 +76.27581348893783 +0 +120 +absolute + + + +0.01 +smooth + +8.536265443340847 +47.35044829711902 +428.9590478647475 +-200.06815616006713 +76.28542719736393 +0 +120 +absolute + + + +0.01 +smooth + +8.536264797822975 +47.350448168227565 +428.95901265130817 +-200.0902307322458 +76.29504381287973 +0 +120 +absolute + + + +0.01 +smooth + +8.536264152871212 +47.35044803923903 +428.95897759918694 +-200.11223327771887 +76.30466326057869 +0 +120 +absolute + + + +0.01 +smooth + +8.536263508490032 +47.350447910157165 +428.9589427222915 +-200.1341634900188 +76.31428546555433 +0 +120 +absolute + + + +0.01 +smooth + +8.536262864683914 +47.35044778098573 +428.95890803452977 +-200.1560210626781 +76.32391035290007 +0 +120 +absolute + + + +0.01 +smooth + +8.53626222143248 +47.35044765170903 +428.95887349271 +-200.1778084102756 +76.33353825601914 +0 +120 +absolute + + + +0.01 +smooth + +8.536261578542936 +47.350447522176246 +428.95883865441425 +-200.19954683136262 +76.34317233994112 +0 +120 +absolute + + + +0.01 +smooth + +8.536260935977321 +47.350447392357275 +428.9588034278696 +-200.2212406661419 +76.35281322141158 +0 +120 +absolute + + + +0.01 +smooth + +8.536260293740154 +47.35044726225524 +428.95876781849233 +-200.2428896012992 +76.36246081857003 +0 +120 +absolute + + + +0.01 +smooth + +8.536259651835966 +47.35044713187332 +428.958731831699 +-200.26449332352038 +76.37211504955614 +0 +120 +absolute + + + +0.01 +smooth + +8.536259010269285 +47.350447001214604 +428.9586954729062 +-200.28605151949114 +76.38177583250953 +0 +120 +absolute + + + +0.01 +smooth + +8.53625836904464 +47.35044687028227 +428.95865874753025 +-200.3075638758975 +76.39144308556985 +0 +120 +absolute + + + +0.01 +smooth + +8.536257728166554 +47.35044673907942 +428.95862166098755 +-200.32903007942497 +76.4011167268766 +0 +120 +absolute + + + +0.01 +smooth + +8.536257087639557 +47.35044660760921 +428.95858421869445 +-200.35044981675955 +76.41079667456948 +0 +120 +absolute + + + +0.01 +smooth + +8.536256447468173 +47.350446475874776 +428.9585464260677 +-200.37182277458695 +76.42048284678809 +0 +120 +absolute + + + +0.01 +smooth + +8.536255807656936 +47.350446343879284 +428.95850828852366 +-200.39314863959305 +76.43017516167204 +0 +120 +absolute + + + +0.01 +smooth + +8.536255168210362 +47.35044621162583 +428.9584698114785 +-200.41442709846353 +76.43987353736094 +0 +120 +absolute + + + +0.01 +smooth + +8.536254529132986 +47.35044607911754 +428.958431000349 +-200.43565783788432 +76.44957789199438 +0 +120 +absolute + + + +0.01 +smooth + +8.536253890429336 +47.35044594635762 +428.95839186055144 +-200.45684054454117 +76.45928814371202 +0 +120 +absolute + + + +0.01 +smooth + +8.536253252103933 +47.35044581334914 +428.95835239750227 +-200.4779749051198 +76.46900421065341 +0 +120 +absolute + + + +0.01 +smooth + +8.536252614161308 +47.35044568009527 +428.95831261661795 +-200.4990606063061 +76.47872601095821 +0 +120 +absolute + + + +0.01 +smooth + +8.536251976605985 +47.350445546599126 +428.9582725233148 +-200.52009733478587 +76.48845346276602 +0 +120 +absolute + + + +0.01 +smooth + +8.536251339442497 +47.35044541286386 +428.9582321230095 +-200.5410847772449 +76.49818648421643 +0 +120 +absolute + + + +0.01 +smooth + +8.53625070267537 +47.350445278892636 +428.95819142111856 +-200.56202262036905 +76.50792499344912 +0 +120 +absolute + + + +0.01 +smooth + +8.536250066309123 +47.35044514468854 +428.9581504230581 +-200.58291055084396 +76.51766890860362 +0 +120 +absolute + + + +0.01 +smooth + +8.53624943034829 +47.35044501025473 +428.95810913424464 +-200.60374825535553 +76.5274181478196 +0 +120 +absolute + + + +0.01 +smooth + +8.5362487947974 +47.35044487559438 +428.95806756009495 +-200.62453542058967 +76.53717262923666 +0 +120 +absolute + + + +0.01 +smooth + +8.536248159660971 +47.35044474071057 +428.958025706025 +-200.64527173323197 +76.54693227099438 +0 +120 +absolute + + + +0.01 +smooth + +8.536247524943539 +47.350444605606455 +428.95798357745156 +-200.66595687996838 +76.55669699123241 +0 +120 +absolute + + + +0.01 +smooth + +8.536246890649629 +47.350444470285204 +428.957941179791 +-200.6865905474846 +76.56646670809037 +0 +120 +absolute + + + +0.01 +smooth + +8.536246256783762 +47.350444334749895 +428.9578985184597 +-200.70717242246644 +76.57624133970782 +0 +120 +absolute + + + +0.01 +smooth + +8.536245623350474 +47.350444199003725 +428.9578555988742 +-200.72770219159986 +76.58602080422443 +0 +120 +absolute + + + +0.01 +smooth + +8.53624499035429 +47.350444063049814 +428.95781242645086 +-200.7481795415705 +76.59580501977979 +0 +120 +absolute + + + +0.01 +smooth + +8.536244357799731 +47.350443926891266 +428.9577690066062 +-200.76860415906415 +76.60559390451348 +0 +120 +absolute + + + +0.01 +smooth + +8.53624372569133 +47.35044379053128 +428.9577253447567 +-200.78897573076677 +76.6153873765652 +0 +120 +absolute + + + +0.01 +smooth + +8.53624309403361 +47.35044365397293 +428.9576814463186 +-200.80929394336397 +76.62518535407446 +0 +120 +absolute + + + +0.01 +smooth + +8.536242462831101 +47.35044351721939 +428.95763731670854 +-200.82955848354163 +76.63498775518094 +0 +120 +absolute + + + +0.01 +smooth + +8.536241832088331 +47.3504433802738 +428.957592961343 +-200.8497690379856 +76.64479449802423 +0 +120 +absolute + + + +0.01 +smooth + +8.536241201809824 +47.35044324313926 +428.95754838563806 +-200.86992529338158 +76.65460550074393 +0 +120 +absolute + + + +0.01 +smooth + +8.536240572000109 +47.35044310581897 +428.9575035950106 +-200.89002693641547 +76.6644206814797 +0 +120 +absolute + + + +0.01 +smooth + +8.536239942663713 +47.35044296831601 +428.9574585948769 +-200.91007365377305 +76.67423995837107 +0 +120 +absolute + + + +0.01 +smooth + +8.53623931380516 +47.35044283063354 +428.9574133906534 +-200.93006513214002 +76.68406324955772 +0 +120 +absolute + + + +0.01 +smooth + +8.536238685428984 +47.35044269277472 +428.95736798775664 +-200.95000105820242 +76.6938904731793 +0 +120 +absolute + + + +0.01 +smooth + +8.536238057539704 +47.350442554742635 +428.9573223916028 +-200.9698811186457 +76.70372154737531 +0 +120 +absolute + + + +0.01 +smooth + +8.53623743014185 +47.35044241654046 +428.9572766076086 +-200.98970500015596 +76.71355639028543 +0 +120 +absolute + + + +0.01 +smooth + +8.536236803239953 +47.350442278171336 +428.95723064119045 +-201.00947238941882 +76.72339492004927 +0 +120 +absolute + + + +0.01 +smooth + +8.536236176838534 +47.350442139638375 +428.9571844977646 +-201.02918297312021 +76.73323705480645 +0 +120 +absolute + + + +0.01 +smooth + +8.536235550942123 +47.35044200094473 +428.95713818274766 +-201.04883643794582 +76.74308271269653 +0 +120 +absolute + + + +0.01 +smooth + +8.536234925555249 +47.35044186209355 +428.95709170155607 +-201.06843247058157 +76.7529318118592 +0 +120 +absolute + + + +0.01 +smooth + +8.536234300682434 +47.35044172308794 +428.95704505960623 +-201.08797075771312 +76.76278427043403 +0 +120 +absolute + + + +0.01 +smooth + +8.53623367632821 +47.35044158393107 +428.95699826231464 +-201.10745098602644 +76.77264000656062 +0 +120 +absolute + + + +0.01 +smooth + +8.536233052497103 +47.35044144462607 +428.95695131509774 +-201.12687284220715 +76.78249893837861 +0 +120 +absolute + + + +0.01 +smooth + +8.536232429193639 +47.350441305176055 +428.95690422337185 +-201.14623601294116 +76.79236098402761 +0 +120 +absolute + + + +0.01 +smooth + +8.536231806422343 +47.350441165584186 +428.9568569925535 +-201.16554018491428 +76.8022260616472 +0 +120 +absolute + + + +0.01 +smooth + +8.536231184187745 +47.3504410258536 +428.95680962805915 +-201.18478504481226 +76.81209408937704 +0 +120 +absolute + + + +0.01 +smooth + +8.536230562494373 +47.350440885987425 +428.9567621353053 +-201.2039702793209 +76.82196498535671 +0 +120 +absolute + + + +0.01 +smooth + +8.53622994134675 +47.3504407459888 +428.9567145197082 +-201.22309557512605 +76.83183866772583 +0 +120 +absolute + + + +0.01 +smooth + +8.536229320749406 +47.35044060586087 +428.95666678668454 +-201.24216061891346 +76.84171505462402 +0 +120 +absolute + + + +0.01 +smooth + +8.53622870070687 +47.35044046560676 +428.95661894165073 +-201.26116509736892 +76.85159406419089 +0 +120 +absolute + + + +0.01 +smooth + +8.536228081223662 +47.35044032522962 +428.95657099002307 +-201.28010869717826 +76.86147561456605 +0 +120 +absolute + + + +0.01 +smooth + +8.536227462304318 +47.350440184732584 +428.956522937218 +-201.29899110502734 +76.87135962388912 +0 +120 +absolute + + + +0.01 +smooth + +8.536226843953358 +47.35044004411877 +428.9564747886521 +-201.31781200760187 +76.88124601029969 +0 +120 +absolute + + + +0.01 +smooth + +8.536226226175312 +47.350439903391354 +428.9564265497417 +-201.3365710915877 +76.8911346919374 +0 +120 +absolute + + + +0.01 +smooth + +8.536225608974707 +47.35043976255345 +428.95637822590334 +-201.3552680436706 +76.90102558694184 +0 +120 +absolute + + + +0.01 +smooth + +8.536224992356072 +47.35043962160819 +428.95632982255347 +-201.3739025505364 +76.91091861345264 +0 +120 +absolute + + + +0.01 +smooth + +8.53622437632393 +47.35043948055872 +428.95628134510844 +-201.39247429887087 +76.92081368960942 +0 +120 +absolute + + + +0.01 +smooth + +8.53622376088281 +47.35043933940817 +428.95623279898473 +-201.41098297535984 +76.93071073355173 +0 +120 +absolute + + + +0.01 +smooth + +8.53622314603724 +47.35043919815969 +428.95618418959884 +-201.42942826668906 +76.94060966341928 +0 +120 +absolute + + + +0.01 +smooth + +8.536222531791744 +47.35043905681643 +428.95613552236716 +-201.4478098595444 +76.95051039735162 +0 +120 +absolute + + + +0.01 +smooth + +8.536221918150853 +47.35043891538148 +428.95608680270607 +-201.46612744061161 +76.96041285348839 +0 +120 +absolute + + + +0.01 +smooth + +8.53622130511909 +47.350438773858016 +428.95603803603217 +-201.48438069657652 +76.97031694996917 +0 +120 +absolute + + + +0.01 +smooth + +8.536220692700986 +47.35043863224918 +428.95598922776185 +-201.5025693141249 +76.9802226049336 +0 +120 +absolute + + + +0.01 +smooth + +8.536220080901066 +47.350438490558076 +428.9559403833115 +-201.52069297994257 +76.9901297365213 +0 +120 +absolute + + + +0.01 +smooth + +8.536219469723857 +47.35043834878788 +428.9558915080976 +-201.53875138071538 +77.00003826287187 +0 +120 +absolute + + + +0.01 +smooth + +8.536218859173887 +47.350438206941696 +428.9558426075366 +-201.55674420312903 +77.0099481021249 +0 +120 +absolute + + + +0.01 +smooth + +8.536218249255683 +47.350438065022686 +428.95579368704495 +-201.5746711338694 +77.01985917242001 +0 +120 +absolute + + + +0.01 +smooth + +8.536217639973769 +47.35043792303398 +428.9557447520391 +-201.59253185962228 +77.02977139189684 +0 +120 +absolute + + + +0.01 +smooth + +8.536217031332678 +47.3504377809787 +428.9556958079355 +-201.6103260670734 +77.03968467869501 +0 +120 +absolute + + + +0.01 +smooth + +8.536216423336931 +47.35043763886001 +428.9556468601505 +-201.62805344290862 +77.0495989509541 +0 +120 +absolute + + + +0.01 +smooth + +8.536215815991058 +47.350437496681025 +428.95559791410074 +-201.64571367381376 +77.05951412681372 +0 +120 +absolute + + + +0.01 +smooth + +8.536215209299586 +47.3504373544449 +428.9555489752025 +-201.6633064464746 +77.0694301244135 +0 +120 +absolute + + + +0.01 +smooth + +8.536214603267045 +47.350437212154745 +428.9555000488721 +-201.68083144757694 +77.07934686189306 +0 +120 +absolute + + + +0.01 +smooth + +8.536213997897956 +47.35043706981374 +428.95545114052635 +-201.69828836380657 +77.08926425739199 +0 +120 +absolute + + + +0.01 +smooth + +8.536213393196846 +47.35043692742498 +428.9554022555814 +-201.71567688184925 +77.09918222904993 +0 +120 +absolute + + + +0.01 +smooth + +8.53621278916825 +47.350436784991636 +428.9553533994539 +-201.7329966883909 +77.10910069500646 +0 +120 +absolute + + + +0.01 +smooth + +8.536212185763185 +47.35043664248514 +428.955304529451 +-201.75025319666176 +77.11902046115148 +0 +120 +absolute + + + +0.01 +smooth + +8.536211582779012 +47.35043649978583 +428.95525546370675 +-201.76746827005465 +77.12894487951472 +0 +120 +absolute + + + +0.01 +smooth + +8.536210980199657 +47.35043635688421 +428.9552061868945 +-201.78464380442531 +77.13887420169392 +0 +120 +absolute + + + +0.01 +smooth + +8.536210378029725 +47.35043621378307 +428.9551567022245 +-201.80177948272456 +77.14880833600795 +0 +120 +absolute + + + +0.01 +smooth + +8.536209776273827 +47.350436070485195 +428.9551070129066 +-201.81887498790283 +77.1587471907754 +0 +120 +absolute + + + +0.01 +smooth + +8.53620917493657 +47.35043592699338 +428.9550571221507 +-201.8359300029109 +77.16869067431513 +0 +120 +absolute + + + +0.01 +smooth + +8.536208574022554 +47.35043578331032 +428.95500703316645 +-201.85294421069923 +77.17863869494579 +0 +120 +absolute + + + +0.01 +smooth + +8.536207973536394 +47.35043563943887 +428.95495674916396 +-201.86991729421854 +77.1885911609861 +0 +120 +absolute + + + +0.01 +smooth + +8.536207373482691 +47.35043549538178 +428.954906273353 +-201.88684893641954 +77.19854798075485 +0 +120 +absolute + + + +0.01 +smooth + +8.53620677386605 +47.350435351141826 +428.95485560894343 +-201.9037388202526 +77.2085090625707 +0 +120 +absolute + + + +0.01 +smooth + +8.536206174691083 +47.350435206721755 +428.95480475914513 +-201.92058662866853 +77.21847431475237 +0 +120 +absolute + + + +0.01 +smooth + +8.53620557596239 +47.350435062124376 +428.95475372716794 +-201.93739204461787 +77.22844364561865 +0 +120 +absolute + + + +0.01 +smooth + +8.536204977684582 +47.35043491735245 +428.9547025162218 +-201.95415475105128 +77.2384169634882 +0 +120 +absolute + + + +0.01 +smooth + +8.536204379862268 +47.35043477240879 +428.95465112951666 +-201.97087443091942 +77.24839417667984 +0 +120 +absolute + + + +0.01 +smooth + +8.536203782500046 +47.3504346272961 +428.9545995702622 +-201.98755076717276 +77.2583751935122 +0 +120 +absolute + + + +0.01 +smooth + +8.53620318560253 +47.3504344820172 +428.9545478416684 +-202.00418344276207 +77.26835992230401 +0 +120 +absolute + + + +0.01 +smooth + +8.536202589174325 +47.350434336574885 +428.95449594694514 +-202.02077214063794 +77.27834827137411 +0 +120 +absolute + + + +0.01 +smooth + +8.53620199322003 +47.35043419097187 +428.95444388930224 +-202.03731654375085 +77.28834014904108 +0 +120 +absolute + + + +0.01 +smooth + +8.536201397744263 +47.35043404521096 +428.9543916719495 +-202.05381633505164 +77.29833546362372 +0 +120 +absolute + + + +0.01 +smooth + +8.536200802751624 +47.35043389929494 +428.9543392980969 +-202.07027119749077 +77.30833412344073 +0 +120 +absolute + + + +0.01 +smooth + +8.536200208246717 +47.350433753226575 +428.95428677095435 +-202.0866808140189 +77.31833603681089 +0 +120 +absolute + + + +0.01 +smooth + +8.536199614234159 +47.35043360700867 +428.9542340937318 +-202.10304486758673 +77.32834111205288 +0 +120 +absolute + + + +0.01 +smooth + +8.536199020718543 +47.35043346064395 +428.95418126963875 +-202.1193630411447 +77.33834925748539 +0 +120 +absolute + + + +0.01 +smooth + +8.536198427704482 +47.3504333141352 +428.9541283018854 +-202.13563501764358 +77.34836038142724 +0 +120 +absolute + + + +0.01 +smooth + +8.536197835196587 +47.350433167485235 +428.9540751936817 +-202.15186048003403 +77.35837439219712 +0 +120 +absolute + + + +0.01 +smooth + +8.536197243199457 +47.35043302069678 +428.9540219482372 +-202.1680391112665 +77.36839119811373 +0 +120 +absolute + + + +0.01 +smooth + +8.5361966517177 +47.35043287377264 +428.95396856876204 +-202.1841705942917 +77.37841070749577 +0 +120 +absolute + + + +0.01 +smooth + +8.536196060755927 +47.35043272671559 +428.9539150584659 +-202.20025461206026 +77.38843282866208 +0 +120 +absolute + + + +0.01 +smooth + +8.536195470318734 +47.35043257952836 +428.9538614205586 +-202.21629084752269 +77.39845746993123 +0 +120 +absolute + + + +0.01 +smooth + +8.536194880410743 +47.35043243221381 +428.95380765825035 +-202.2322789836298 +77.40848453962208 +0 +120 +absolute + + + +0.01 +smooth + +8.536194291036546 +47.350432284774634 +428.9537537747507 +-202.24821870333207 +77.41851394605328 +0 +120 +absolute + + + +0.01 +smooth + +8.536193702200755 +47.350432137213645 +428.95369977326965 +-202.26410968958018 +77.42854559754359 +0 +120 +absolute + + + +0.01 +smooth + +8.536193113907984 +47.35043198953365 +428.9536456570172 +-202.27995162532477 +77.43857940241176 +0 +120 +absolute + + + +0.01 +smooth + +8.536192526162825 +47.35043184173734 +428.9535914292028 +-202.29574419351636 +77.44861526897648 +0 +120 +absolute + + + +0.01 +smooth + +8.536191938969896 +47.35043169382756 +428.9535370930368 +-202.31148707710565 +77.45865310555644 +0 +120 +absolute + + + +0.01 +smooth + +8.536191352333798 +47.35043154580706 +428.9534826517289 +-202.32717995904326 +77.46869282047044 +0 +120 +absolute + + + +0.01 +smooth + +8.536190766259136 +47.350431397678605 +428.95342810848877 +-202.34282252227968 +77.47873432203713 +0 +120 +absolute + + + +0.01 +smooth + +8.536190180750523 +47.350431249444995 +428.95337346652667 +-202.35841444976572 +77.48877751857533 +0 +120 +absolute + + + +0.01 +smooth + +8.536189595812559 +47.35043110110899 +428.9533187290521 +-202.37395542445194 +77.4988223184037 +0 +120 +absolute + + + +0.01 +smooth + +8.536189011449853 +47.35043095267335 +428.95326389927516 +-202.38944512928884 +77.50886862984096 +0 +120 +absolute + + + +0.01 +smooth + +8.536188427667014 +47.35043080414089 +428.95320898040563 +-202.40488324722725 +77.5189163612059 +0 +120 +absolute + + + +0.01 +smooth + +8.536187844468644 +47.35043065551435 +428.95315397565344 +-202.42026946121757 +77.52896542081717 +0 +120 +absolute + + + +0.01 +smooth + +8.53618726185935 +47.35043050679652 +428.95309888822834 +-202.43560345421054 +77.53901571699355 +0 +120 +absolute + + + +0.01 +smooth + +8.536186679843743 +47.35043035799018 +428.95304372134035 +-202.45088490915674 +77.54906715805373 +0 +120 +absolute + + + +0.01 +smooth + +8.536186098426423 +47.35043020909808 +428.95298847819936 +-202.46611350900687 +77.55911965231648 +0 +120 +absolute + + + +0.01 +smooth + +8.536185517612003 +47.350430060123024 +428.952933162015 +-202.48128893671148 +77.56917310810047 +0 +120 +absolute + + + +0.01 +smooth + +8.536184937405082 +47.35042991106777 +428.9528777759973 +-202.4964108752212 +77.57922743372448 +0 +120 +absolute + + + +0.01 +smooth + +8.536184357810273 +47.350429761935104 +428.9528223233564 +-202.51147900748663 +77.5892825375072 +0 +120 +absolute + + + +0.01 +smooth + +8.536183778832182 +47.350429612727794 +428.9527668073016 +-202.52649301645837 +77.59933832776737 +0 +120 +absolute + + + +0.01 +smooth + +8.53618320047541 +47.3504294634486 +428.95271123104317 +-202.5414525850871 +77.6093947128237 +0 +120 +absolute + + + +0.01 +smooth + +8.536182622744569 +47.350429314100325 +428.95265559779085 +-202.55635739632342 +77.61945160099496 +0 +120 +absolute + + + +0.01 +smooth + +8.536182045644262 +47.350429164685735 +428.95259991075466 +-202.57120713311792 +77.62950890059983 +0 +120 +absolute + + + +0.01 +smooth + +8.536181469179096 +47.350429015207595 +428.9525441731443 +-202.58600147842122 +77.63956651995706 +0 +120 +absolute + + + +0.01 +smooth + +8.53618089335368 +47.35042886566869 +428.95248838816974 +-202.60074011518404 +77.64962436738537 +0 +120 +absolute + + + +0.01 +smooth + +8.536180318172619 +47.35042871607179 +428.95243255904074 +-202.61542272635688 +77.65968235120347 +0 +120 +absolute + + + +0.01 +smooth + +8.536179743640519 +47.35042856641968 +428.9523766889673 +-202.6300489948904 +77.66974037973014 +0 +120 +absolute + + + +0.01 +smooth + +8.536179169761985 +47.35042841671512 +428.9523207811592 +-202.64461860373518 +77.67979836128404 +0 +120 +absolute + + + +0.01 +smooth + +8.536178596541625 +47.35042826696088 +428.95226483882647 +-202.65913123584193 +77.68985620418391 +0 +120 +absolute + + + +0.01 +smooth + +8.536178023984048 +47.350428117159765 +428.9522088651787 +-202.67358657416116 +77.69991381674853 +0 +120 +absolute + + + +0.01 +smooth + +8.536177452093856 +47.35042796731452 +428.952152863426 +-202.6879843016436 +77.70997110729655 +0 +120 +absolute + + + +0.01 +smooth + +8.536176880875658 +47.35042781742794 +428.9520968367782 +-202.70232410123987 +77.72002798414678 +0 +120 +absolute + + + +0.01 +smooth + +8.53617631033406 +47.350427667502785 +428.95204078844506 +-202.7166056559004 +77.73008435561786 +0 +120 +absolute + + + +0.01 +smooth + +8.536175740473668 +47.35042751754184 +428.95198472163656 +-202.730828648576 +77.74014013002858 +0 +120 +absolute + + + +0.01 +smooth + +8.536175171299089 +47.35042736754787 +428.95192863956254 +-202.74499276221724 +77.75019521569763 +0 +120 +absolute + + + +0.01 +smooth + +8.536174602814928 +47.35042721752366 +428.95187254543293 +-202.75909767977475 +77.76024952094374 +0 +120 +absolute + + + +0.01 +smooth + +8.536174035025795 +47.35042706747199 +428.95181644245747 +-202.7731430841991 +77.77030295408565 +0 +120 +absolute + + + +0.01 +smooth + +8.536173467936292 +47.350426917395616 +428.9517603338461 +-202.7871286584409 +77.7803554234421 +0 +120 +absolute + + + +0.01 +smooth + +8.536172901551028 +47.350426767297336 +428.95170422280876 +-202.8010540854509 +77.7904068373318 +0 +120 +absolute + + + +0.01 +smooth + +8.53617233587461 +47.3504266171799 +428.9516481125552 +-202.8149190481796 +77.80045710407347 +0 +120 +absolute + + + +0.01 +smooth + +8.536171770911643 +47.3504264670461 +428.95159200629536 +-202.8287232295776 +77.81050613198582 +0 +120 +absolute + + + +0.01 +smooth + +8.536171206666735 +47.350426316898705 +428.95153590723913 +-202.8424663125956 +77.82055382938759 +0 +120 +absolute + + + +0.01 +smooth + +8.536170643144489 +47.35042616674049 +428.95147981859634 +-202.8561479801842 +77.83060010459755 +0 +120 +absolute + + + +0.01 +smooth + +8.536170080349514 +47.35042601657423 +428.95142374357687 +-202.86976791529395 +77.84064486593437 +0 +120 +absolute + + + +0.01 +smooth + +8.536169518286417 +47.35042586640271 +428.95136768539055 +-202.88332580087558 +77.85068802171679 +0 +120 +absolute + + + +0.01 +smooth + +8.536168956959804 +47.3504257162287 +428.9513116472474 +-202.89682131987962 +77.86072948026354 +0 +120 +absolute + + + +0.01 +smooth + +8.536168396374281 +47.35042556605495 +428.9512556323572 +-202.91025415525672 +77.87076914989338 +0 +120 +absolute + + + +0.01 +smooth + +8.536167836534453 +47.350425415884274 +428.9511996439297 +-202.92362398995755 +77.88080693892498 +0 +120 +absolute + + + +0.01 +smooth + +8.536167277444932 +47.35042526571942 +428.9511436851749 +-202.93693050693264 +77.89084275567708 +0 +120 +absolute + + + +0.01 +smooth + +8.536166719110316 +47.350425115563176 +428.9510877593027 +-202.95017338913266 +77.90087650846843 +0 +120 +absolute + + + +0.01 +smooth + +8.536166161535219 +47.35042496541831 +428.9510318695229 +-202.96335231950818 +77.91090810561776 +0 +120 +absolute + + + +0.01 +smooth + +8.536165604627605 +47.35042481524145 +428.95097597191824 +-202.97647694152244 +77.92093911656177 +0 +120 +absolute + + + +0.01 +smooth + +8.536165048192817 +47.35042466494006 +428.95091997195146 +-202.98956747998523 +77.93097286927252 +0 +120 +absolute + + + +0.01 +smooth + +8.53616449222953 +47.35042451451378 +428.9508638688805 +-203.00262423725604 +77.94100936411101 +0 +120 +absolute + + + +0.01 +smooth + +8.536163936742453 +47.35042436396527 +428.9508076649024 +-203.01564689314137 +77.95104849753935 +0 +120 +absolute + + + +0.01 +smooth + +8.536163381736287 +47.35042421329703 +428.95075136221357 +-203.0286351274475 +77.96109016601952 +0 +120 +absolute + + + +0.01 +smooth + +8.536162827215753 +47.35042406251166 +428.9506949630107 +-203.04158861998093 +77.97113426601358 +0 +120 +absolute + + + +0.01 +smooth + +8.536162273185553 +47.35042391161173 +428.95063846949057 +-203.05450705054812 +77.98118069398365 +0 +120 +absolute + + + +0.01 +smooth + +8.536161719650401 +47.35042376059982 +428.95058188385 +-203.06739009895563 +77.99122934639178 +0 +120 +absolute + + + +0.01 +smooth + +8.536161166615006 +47.3504236094785 +428.9505252082858 +-203.0802374450098 +78.00128011970007 +0 +120 +absolute + + + +0.01 +smooth + +8.536160614084077 +47.35042345825031 +428.95046844499427 +-203.09304876851698 +78.01133291037048 +0 +120 +absolute + + + +0.01 +smooth + +8.536160062062324 +47.35042330691787 +428.9504115961724 +-203.1058237492838 +78.02138761486519 +0 +120 +absolute + + + +0.01 +smooth + +8.536159510554459 +47.35042315548373 +428.95035466401697 +-203.11856206711659 +78.03144412964622 +0 +120 +absolute + + + +0.01 +smooth + +8.536158959565185 +47.350423003950475 +428.95029765072434 +-203.13126340182174 +78.04150235117561 +0 +120 +absolute + + + +0.01 +smooth + +8.536158409099215 +47.350422852320634 +428.95024055849154 +-203.14392743320573 +78.05156217591544 +0 +120 +absolute + + + +0.01 +smooth + +8.536157859161264 +47.35042270059685 +428.9501833895152 +-203.15655384107515 +78.06162350032781 +0 +120 +absolute + + + +0.01 +smooth + +8.536157309756033 +47.350422548781644 +428.950126145992 +-203.16914230523625 +78.07168622087474 +0 +120 +absolute + + + +0.01 +smooth + +8.536156760888241 +47.350422396877605 +428.9500688301187 +-203.18169250549562 +78.08175023401833 +0 +120 +absolute + + + +0.01 +smooth + +8.536156212562588 +47.3504222448873 +428.95001144409184 +-203.19420412165957 +78.0918154362206 +0 +120 +absolute + + + +0.01 +smooth + +8.536155664783792 +47.350422092813304 +428.9499539901083 +-203.20667683353463 +78.10188172394365 +0 +120 +absolute + + + +0.01 +smooth + +8.536155117556559 +47.35042194065821 +428.949896470365 +-203.21911032092729 +78.11194899364958 +0 +120 +absolute + + + +0.01 +smooth + +8.536154570885598 +47.35042178842456 +428.9498388870581 +-203.23150426364379 +78.12201714180033 +0 +120 +absolute + + + +0.01 +smooth + +8.53615402477562 +47.35042163611493 +428.94978124238463 +-203.24385834149075 +78.1320860648581 +0 +120 +absolute + + + +0.01 +smooth + +8.536153479231338 +47.350421483731914 +428.9497235385414 +-203.25617223427463 +78.1421556592849 +0 +120 +absolute + + + +0.01 +smooth + +8.536152934257451 +47.35042133127804 +428.94966577772476 +-203.26844562180165 +78.15222582154276 +0 +120 +absolute + + + +0.01 +smooth + +8.536152389858682 +47.35042117875595 +428.94960796213195 +-203.28067818387856 +78.16229644809381 +0 +120 +absolute + + + +0.01 +smooth + +8.536151846039731 +47.350421026168156 +428.94955009395926 +-203.29286960031158 +78.17236743540008 +0 +120 +absolute + + + +0.01 +smooth + +8.536151302805312 +47.35042087351726 +428.94949217540335 +-203.30501955090728 +78.18243867992364 +0 +120 +absolute + + + +0.01 +smooth + +8.536150760160139 +47.35042072080584 +428.9494342086615 +-203.31712771547205 +78.19251007812659 +0 +120 +absolute + + + +0.01 +smooth + +8.536150218108912 +47.350420568036434 +428.9493761959296 +-203.32919377381228 +78.20258152647092 +0 +120 +absolute + + + +0.01 +smooth + +8.536149676656343 +47.35042041521165 +428.9493181394049 +-203.34121740573448 +78.21265292141874 +0 +120 +absolute + + + +0.01 +smooth + +8.53614913580715 +47.35042026233404 +428.9492600412841 +-203.35319829104512 +78.22272415943213 +0 +120 +absolute + + + +0.01 +smooth + +8.536148595566035 +47.350420109406166 +428.94920190376354 +-203.3651361095505 +78.23279513697311 +0 +120 +absolute + + + +0.01 +smooth + +8.53614805593771 +47.35041995643065 +428.94914372904043 +-203.37703054105728 +78.2428657505038 +0 +120 +absolute + + + +0.01 +smooth + +8.536147516926885 +47.35041980341002 +428.94908551931115 +-203.38888126537168 +78.25293589648622 +0 +120 +absolute + + + +0.01 +smooth + +8.536146978538266 +47.35041965034684 +428.94902727677237 +-203.40068796230028 +78.26300547138243 +0 +120 +absolute + + + +0.01 +smooth + +8.536146440776571 +47.35041949724375 +428.9489690036212 +-203.41245031164956 +78.27307437165456 +0 +120 +absolute + + + +0.01 +smooth + +8.536145903646501 +47.350419344103244 +428.94891070205387 +-203.42416799322584 +78.2831424937646 +0 +120 +absolute + + + +0.01 +smooth + +8.53614536715277 +47.35041919092792 +428.9488523742673 +-203.43584068683558 +78.29320973417464 +0 +120 +absolute + + + +0.01 +smooth + +8.53614483130009 +47.35041903772038 +428.94879402245823 +-203.44746807228535 +78.30327598934677 +0 +120 +absolute + + + +0.01 +smooth + +8.536144296093163 +47.35041888448314 +428.9487356488232 +-203.4590498293814 +78.31334115574302 +0 +120 +absolute + + + +0.01 +smooth + +8.536143761536705 +47.35041873121884 +428.9486772555592 +-203.47058563793036 +78.32340512982549 +0 +120 +absolute + + + +0.01 +smooth + +8.536143227635428 +47.350418577930014 +428.94861884486266 +-203.48207517773852 +78.3334678080562 +0 +120 +absolute + + + +0.01 +smooth + +8.536142694394034 +47.350418424619214 +428.94856041893047 +-203.4935181286124 +78.34352908689726 +0 +120 +absolute + + + +0.01 +smooth + +8.536142161817239 +47.35041827128906 +428.9485019799593 +-203.50491417035846 +78.35358886281071 +0 +120 +absolute + + + +0.01 +smooth + +8.536141629909748 +47.35041811794209 +428.9484435301457 +-203.51626298278308 +78.36364703225861 +0 +120 +absolute + + + +0.01 +smooth + +8.536141098676275 +47.3504179645809 +428.94838507168674 +-203.52756424569273 +78.37370349170305 +0 +120 +absolute + + + +0.01 +smooth + +8.536140568121526 +47.35041781120805 +428.94832660677866 +-203.53881763889393 +78.38375813760608 +0 +120 +absolute + + + +0.01 +smooth + +8.536140038250217 +47.3504176578261 +428.9482681376186 +-203.55002284219296 +78.39381086642975 +0 +120 +absolute + + + +0.01 +smooth + +8.53613950906705 +47.350417504437644 +428.948209666403 +-203.5611795353964 +78.40386157463615 +0 +120 +absolute + + + +0.01 +smooth + +8.53613898057674 +47.35041735104525 +428.94815119532876 +-203.57228739831066 +78.41391015868732 +0 +120 +absolute + + + +0.01 +smooth + +8.536138452783991 +47.35041719765149 +428.94809272659234 +-203.58334611074216 +78.42395651504536 +0 +120 +absolute + + + +0.01 +smooth + +8.53613792569352 +47.35041704425893 +428.9480342623907 +-203.5943553524973 +78.43400054017229 +0 +120 +absolute + + + +0.01 +smooth + +8.536137399310032 +47.35041689087015 +428.9479758049203 +-203.60531480338267 +78.44404213053024 +0 +120 +absolute + + + +0.01 +smooth + +8.536136873638238 +47.350416737487706 +428.9479173563782 +-203.61622414320456 +78.45408118258119 +0 +120 +absolute + + + +0.01 +smooth + +8.536136348682849 +47.35041658411419 +428.9478589189607 +-203.6270830517695 +78.46411759278728 +0 +120 +absolute + + + +0.01 +smooth + +8.536135824448571 +47.350416430752176 +428.94780049486474 +-203.63789120888384 +78.47415125761053 +0 +120 +absolute + + + +0.01 +smooth + +8.53613530094012 +47.35041627740422 +428.94774208628706 +-203.64864829435413 +78.48418207351303 +0 +120 +absolute + + + +0.01 +smooth + +8.5361347781622 +47.35041612407291 +428.9476836954242 +-203.65935398798678 +78.49420993695682 +0 +120 +absolute + + + +0.01 +smooth + +8.536134256119523 +47.35041597076081 +428.94762532447317 +-203.6700079695882 +78.50423474440399 +0 +120 +absolute + + + +0.01 +smooth + +8.536133734816797 +47.350415817470484 +428.94756697563025 +-203.68060991896488 +78.51425639231658 +0 +120 +absolute + + + +0.01 +smooth + +8.536133214258735 +47.35041566420452 +428.94750865109256 +-203.6911595159232 +78.52427477715668 +0 +120 +absolute + + + +0.01 +smooth + +8.536132694450043 +47.35041551096548 +428.9474503530565 +-203.70165644026963 +78.53428979538634 +0 +120 +absolute + + + +0.01 +smooth + +8.536132175395434 +47.35041535775595 +428.94739208371897 +-203.71210037181066 +78.54430134346762 +0 +120 +absolute + + + +0.01 +smooth + +8.536131657099613 +47.350415204578496 +428.9473338452766 +-203.7224909903527 +78.55430931786262 +0 +120 +absolute + + + +0.01 +smooth + +8.536131139567296 +47.35041505143568 +428.94727563992615 +-203.73282797570215 +78.56431361503336 +0 +120 +absolute + + + +0.01 +smooth + +8.536130622803189 +47.3504148983301 +428.9472174698642 +-203.7431110076655 +78.57431413144192 +0 +120 +absolute + + + +0.01 +smooth + +8.536130106812003 +47.35041474526429 +428.94715933728764 +-203.7533397660492 +78.58431076355038 +0 +120 +absolute + + + +0.01 +smooth + +8.536129591598446 +47.35041459224085 +428.947101244393 +-203.76351393065966 +78.59430340782077 +0 +120 +absolute + + + +0.01 +smooth + +8.53612907716723 +47.35041443926235 +428.9470431933772 +-203.77363318130335 +78.60429196071522 +0 +120 +absolute + + + +0.01 +smooth + +8.536128563523063 +47.350414286331365 +428.9469851864368 +-203.7836971977867 +78.61427631869572 +0 +120 +absolute + + + +0.01 +smooth + +8.536128050670655 +47.35041413345046 +428.9469272257685 +-203.7937056599161 +78.62425637822439 +0 +120 +absolute + + + +0.01 +smooth + +8.536127538614718 +47.35041398062219 +428.94686931356904 +-203.8036582474981 +78.63423203576325 +0 +120 +absolute + + + +0.01 +smooth + +8.536127027359958 +47.350413827849174 +428.94681145203515 +-203.81355464033908 +78.6442031877744 +0 +120 +absolute + + + +0.01 +smooth + +8.536126516911086 +47.35041367513394 +428.94675364336354 +-203.8233945182455 +78.65416973071987 +0 +120 +absolute + + + +0.01 +smooth + +8.536126007272815 +47.35041352247909 +428.9466958897509 +-203.83317756102377 +78.6641315610618 +0 +120 +absolute + + + +0.01 +smooth + +8.536125498449849 +47.35041336988718 +428.9466381933939 +-203.84290344848037 +78.67408857526216 +0 +120 +absolute + + + +0.01 +smooth + +8.536124990446902 +47.350413217360774 +428.9465805564894 +-203.85257186042168 +78.68404066978306 +0 +120 +absolute + + + +0.01 +smooth + +8.536124483268683 +47.350413064902476 +428.94652298123384 +-203.86218247665425 +78.69398774108659 +0 +120 +absolute + + + +0.01 +smooth + +8.5361239769199 +47.35041291251483 +428.94646546982426 +-203.87173497698444 +78.70392968563478 +0 +120 +absolute + + + +0.01 +smooth + +8.536123471405263 +47.35041276020042 +428.9464080244571 +-203.88122904121875 +78.71386639988968 +0 +120 +absolute + + + +0.01 +smooth + +8.53612296657175 +47.350412607896814 +428.94635059807405 +-203.89067990524836 +78.72380063588483 +0 +120 +absolute + + + +0.01 +smooth + +8.536122462255676 +47.350412455537096 +428.9462931398854 +-203.90010385948378 +78.7337353314752 +0 +120 +absolute + + + +0.01 +smooth + +8.536121958461836 +47.35041230312373 +428.94623565149766 +-203.9095005811848 +78.74367037083078 +0 +120 +absolute + + + +0.01 +smooth + +8.536121455195062 +47.3504121506592 +428.94617813453084 +-203.91886974314204 +78.75360563730051 +0 +120 +absolute + + + +0.01 +smooth + +8.53612095246019 +47.350411998145965 +428.9461205906055 +-203.92821101814602 +78.76354101423341 +0 +120 +absolute + + + +0.01 +smooth + +8.536120450262061 +47.350411845586514 +428.94606302134207 +-203.9375240789876 +78.77347638497857 +0 +120 +absolute + + + +0.01 +smooth + +8.536119948605506 +47.35041169298335 +428.9460054283612 +-203.94680859845732 +78.78341163288493 +0 +120 +absolute + + + +0.01 +smooth + +8.536119447495366 +47.35041154033889 +428.9459478132828 +-203.9560642493458 +78.79334664130155 +0 +120 +absolute + + + +0.01 +smooth + +8.536118946936472 +47.35041138765567 +428.9458901777275 +-203.96529070444365 +78.80328129357738 +0 +120 +absolute + + + +0.01 +smooth + +8.536118446933664 +47.350411234936146 +428.9458325233159 +-203.97448763654168 +78.81321547306153 +0 +120 +absolute + + + +0.01 +smooth + +8.536117947491775 +47.3504110821828 +428.9457748516682 +-203.98365471843027 +78.82314906310295 +0 +120 +absolute + + + +0.01 +smooth + +8.536117448615643 +47.350410929398116 +428.9457171644047 +-203.99279162290028 +78.83308194705062 +0 +120 +absolute + + + +0.01 +smooth + +8.536116950310106 +47.35041077658455 +428.9456594631459 +-204.00189802274224 +78.84301400825362 +0 +120 +absolute + + + +0.01 +smooth + +8.536116452579993 +47.35041062374461 +428.9456017495123 +-204.0109735907468 +78.85294513006092 +0 +120 +absolute + + + +0.01 +smooth + +8.536115955430152 +47.350410470880774 +428.9455440251243 +-204.0200179997047 +78.86287519582162 +0 +120 +absolute + + + +0.01 +smooth + +8.536115458865408 +47.3504103179955 +428.9454862916022 +-204.02903092240643 +78.87280408888459 +0 +120 +absolute + + + +0.01 +smooth + +8.536114962890602 +47.35041016509126 +428.9454285505664 +-204.0380120316427 +78.88273169259895 +0 +120 +absolute + + + +0.01 +smooth + +8.536114467510574 +47.35041001217058 +428.94537080363745 +-204.04696100020422 +78.89265789031374 +0 +120 +absolute + + + +0.01 +smooth + +8.53611397273015 +47.35040985923588 +428.94531305243555 +-204.05587750088154 +78.90258256537788 +0 +120 +absolute + + + +0.01 +smooth + +8.536113478554173 +47.35040970628966 +428.94525529858123 +-204.06476120646522 +78.91250560114041 +0 +120 +absolute + + + +0.01 +smooth + +8.536112984987478 +47.350409553334416 +428.9451975436947 +-204.07361178974608 +78.92242688095034 +0 +120 +absolute + + + +0.01 +smooth + +8.5361124920349 +47.35040940037263 +428.9451397893966 +-204.08242892351467 +78.93234628815675 +0 +120 +absolute + + + +0.01 +smooth + +8.53611199970128 +47.35040924740674 +428.9450820373074 +-204.09121228056165 +78.94226370610858 +0 +120 +absolute + + + +0.01 +smooth + +8.536111507991452 +47.35040909443926 +428.9450242890473 +-204.09996153367769 +78.9521790181549 +0 +120 +absolute + + + +0.01 +smooth + +8.536111016910246 +47.35040894147267 +428.94496654623686 +-204.1086763556534 +78.96209210764468 +0 +120 +absolute + + + +0.01 +smooth + +8.536110526462505 +47.35040878850942 +428.94490881049626 +-204.1173564192794 +78.97200285792694 +0 +120 +absolute + + + +0.01 +smooth + +8.536110036653062 +47.350408635552 +428.94485108344605 +-204.12600139734624 +78.98191115235068 +0 +120 +absolute + + + +0.01 +smooth + +8.536109547486753 +47.3504084826029 +428.9447933667065 +-204.13461096264473 +78.99181687426498 +0 +120 +absolute + + + +0.01 +smooth + +8.536109058968412 +47.350408329664596 +428.9447356618982 +-204.14318478796542 +79.00171990701875 +0 +120 +absolute + + + +0.01 +smooth + +8.536108571102885 +47.35040817673957 +428.9446779706415 +-204.151722546099 +79.01162013396109 +0 +120 +absolute + + + +0.01 +smooth + +8.536108083895 +47.3504080238303 +428.9446202945567 +-204.1602239098361 +79.02151743844101 +0 +120 +absolute + + + +0.01 +smooth + +8.536107597349593 +47.350407870939236 +428.94456263526445 +-204.16868855196736 +79.03141170380749 +0 +120 +absolute + + + +0.01 +smooth + +8.536107111471503 +47.3504077180689 +428.94450499438494 +-204.17711614528343 +79.04130281340956 +0 +120 +absolute + + + +0.01 +smooth + +8.536106626265566 +47.350407565221744 +428.94444737353854 +-204.18550636257484 +79.05119065059621 +0 +120 +absolute + + + +0.01 +smooth + +8.536106141736614 +47.350407412400244 +428.9443897743457 +-204.1938588766323 +79.06107509871646 +0 +120 +absolute + + + +0.01 +smooth + +8.536105657889488 +47.35040725960688 +428.9443321984269 +-204.20217336024652 +79.07095604111937 +0 +120 +absolute + + + +0.01 +smooth + +8.536105174729018 +47.35040710684415 +428.9442746474024 +-204.2104494862081 +79.08083336115388 +0 +120 +absolute + + + +0.01 +smooth + +8.536104692260048 +47.35040695411452 +428.94421712289284 +-204.21868692730763 +79.09070694216906 +0 +120 +absolute + + + +0.01 +smooth + +8.536104210487412 +47.35040680142047 +428.9441596265184 +-204.22688535633586 +79.10057666751393 +0 +120 +absolute + + + +0.01 +smooth + +8.536103729415943 +47.35040664876448 +428.94410215989956 +-204.2350444460833 +79.11044242053747 +0 +120 +absolute + + + +0.01 +smooth + +8.536103249050479 +47.35040649614903 +428.9440447246568 +-204.2431638693406 +79.1203040845887 +0 +120 +absolute + + + +0.01 +smooth + +8.536102769395857 +47.35040634357658 +428.94398732241035 +-204.25124329889852 +79.13016154301663 +0 +120 +absolute + + + +0.01 +smooth + +8.53610229045691 +47.35040619104963 +428.94392995478086 +-204.2592824075476 +79.14001467917029 +0 +120 +absolute + + + +0.01 +smooth + +8.536101812238478 +47.350406038570654 +428.9438726233884 +-204.2672808680785 +79.1498633763987 +0 +120 +absolute + + + +0.01 +smooth + +8.536101334745394 +47.35040588614213 +428.94381532985363 +-204.27523835328188 +79.15970751805082 +0 +120 +absolute + + + +0.01 +smooth + +8.536100857982497 +47.35040573376653 +428.94375807579684 +-204.28315453594837 +79.16954698747574 +0 +120 +absolute + + + +0.01 +smooth + +8.53610038195462 +47.35040558144633 +428.9437008628385 +-204.29102908886858 +79.17938166802243 +0 +120 +absolute + + + +0.01 +smooth + +8.536099906666601 +47.35040542918403 +428.943643692599 +-204.29886168483324 +79.18921144303991 +0 +120 +absolute + + + +0.01 +smooth + +8.536099432123278 +47.35040527698209 +428.94358656669874 +-204.3066519966329 +79.19903619587718 +0 +120 +absolute + + + +0.01 +smooth + +8.536098958329484 +47.35040512484299 +428.94352948675805 +-204.3143996970582 +79.20885580988329 +0 +120 +absolute + + + +0.01 +smooth + +8.536098485290054 +47.35040497276922 +428.94347245439747 +-204.32210445889984 +79.21867016840723 +0 +120 +absolute + + + +0.01 +smooth + +8.53609801300983 +47.35040482076325 +428.94341547123724 +-204.3297659549484 +79.22847915479801 +0 +120 +absolute + + + +0.01 +smooth + +8.536097541493643 +47.35040466882755 +428.9433585388978 +-204.3373838579946 +79.23828265240465 +0 +120 +absolute + + + +0.01 +smooth + +8.53609707074633 +47.350404516964616 +428.94330165899976 +-204.34495784082898 +79.24808054457617 +0 +120 +absolute + + + +0.01 +smooth + +8.536096600772728 +47.35040436517692 +428.94324483316325 +-204.3524875762423 +79.25787271466157 +0 +120 +absolute + + + +0.01 +smooth + +8.536096131577672 +47.35040421346694 +428.9431880630088 +-204.35997273702506 +79.2676590460099 +0 +120 +absolute + + + +0.01 +smooth + +8.536095663166002 +47.350404061837146 +428.94313135015676 +-204.36741299596804 +79.2774394219701 +0 +120 +absolute + + + +0.01 +smooth + +8.536095195542547 +47.350403910290034 +428.94307469622765 +-204.37480802586174 +79.28721372589126 +0 +120 +absolute + + + +0.01 +smooth + +8.53609472871215 +47.350403758828065 +428.94301810284173 +-204.38215749949688 +79.29698184112236 +0 +120 +absolute + + + +0.01 +smooth + +8.536094262679644 +47.35040360745373 +428.94296157161955 +-204.3894610896641 +79.30674365101243 +0 +120 +absolute + + + +0.01 +smooth + +8.536093797449865 +47.3504034561695 +428.94290510418136 +-204.39671846915405 +79.31649903891044 +0 +120 +absolute + + + +0.01 +smooth + +8.536093333027653 +47.35040330497786 +428.94284870214756 +-204.40392931075735 +79.32624788816545 +0 +120 +absolute + + + +0.01 +smooth + +8.536092869417837 +47.35040315388128 +428.94279236713874 +-204.41109328726463 +79.33599008212647 +0 +120 +absolute + + + +0.01 +smooth + +8.536092406625258 +47.35040300288225 +428.94273610077505 +-204.41821007146658 +79.3457255041425 +0 +120 +absolute + + + +0.01 +smooth + +8.536091944654753 +47.35040285198325 +428.9426799046772 +-204.42527933615378 +79.35545403756254 +0 +120 +absolute + + + +0.01 +smooth + +8.536091483511155 +47.35040270118674 +428.9426237804654 +-204.43230075411688 +79.36517556573563 +0 +120 +absolute + + + +0.01 +smooth + +8.536091023199301 +47.35040255049521 +428.94256772975996 +-204.43927399814652 +79.37488997201078 +0 +120 +absolute + + + +0.01 +smooth + +8.536090563724027 +47.35040239991115 +428.9425117541814 +-204.4461987410334 +79.38459713973698 +0 +120 +absolute + + + +0.01 +smooth + +8.536090105090171 +47.35040224943701 +428.9424558553502 +-204.45307465556812 +79.39429695226328 +0 +120 +absolute + + + +0.01 +smooth + +8.536089647302568 +47.350402099075296 +428.94240003488665 +-204.45990141454126 +79.40398929293866 +0 +120 +absolute + + + +0.01 +smooth + +8.536089190366052 +47.35040194882848 +428.94234429441116 +-204.46667869074358 +79.41367404511217 +0 +120 +absolute + + + +0.01 +smooth + +8.536088734285464 +47.350401798699025 +428.9422886355442 +-204.4734061569656 +79.4233510921328 +0 +120 +absolute + + + +0.01 +smooth + +8.536088279065636 +47.350401648689434 +428.9422330599061 +-204.48008348599802 +79.43302031734956 +0 +120 +absolute + + + +0.01 +smooth + +8.536087824711405 +47.35040149880217 +428.94217756911723 +-204.48671035063148 +79.44268160411147 +0 +120 +absolute + + + +0.01 +smooth + +8.536087371227609 +47.350401349039714 +428.9421221647981 +-204.49328642365663 +79.45233483576754 +0 +120 +absolute + + + +0.01 +smooth + +8.53608691861908 +47.35040119940454 +428.94206684856914 +-204.4998113778641 +79.4619798956668 +0 +120 +absolute + + + +0.01 +smooth + +8.536086466890659 +47.35040104989914 +428.9420116220506 +-204.5062848860445 +79.47161666715826 +0 +120 +absolute + + + +0.01 +smooth + +8.536086016047179 +47.350400900525976 +428.941956486863 +-204.51270662098852 +79.4812450335909 +0 +120 +absolute + + + +0.01 +smooth + +8.536085566093478 +47.35040075128754 +428.9419014446266 +-204.51907625548677 +79.49086487831376 +0 +120 +absolute + + + +0.01 +smooth + +8.536085117029474 +47.35040060218443 +428.94184649584935 +-204.5253939304182 +79.50047617945299 +0 +120 +absolute + + + +0.01 +smooth + +8.53608466863383 +47.350400453133396 +428.94179159088543 +-204.53168084597874 +79.51008317698461 +0 +120 +absolute + + + +0.01 +smooth + +8.536084220788576 +47.35040030409022 +428.94173670321 +-204.53794835901323 +79.51968811152526 +0 +120 +absolute + + + +0.01 +smooth + +8.536083773498701 +47.35040015505741 +428.9416818340713 +-204.5441961217827 +79.52929085267235 +0 +120 +absolute + + + +0.01 +smooth + +8.536083326769186 +47.35040000603742 +428.94162698471786 +-204.55042378654827 +79.53889127002334 +0 +120 +absolute + + + +0.01 +smooth + +8.536082880605022 +47.35039985703273 +428.94157215639825 +-204.556631005571 +79.54848923317572 +0 +120 +absolute + + + +0.01 +smooth + +8.536082435011192 +47.35039970804576 +428.9415173503605 +-204.5628174311118 +79.55808461172687 +0 +120 +absolute + + + +0.01 +smooth + +8.536081989992685 +47.350399559079 +428.94146256785314 +-204.56898271543182 +79.56767727527428 +0 +120 +absolute + + + +0.01 +smooth + +8.536081545554483 +47.350399410134905 +428.94140781012453 +-204.57512651079193 +79.57726709341539 +0 +120 +absolute + + + +0.01 +smooth + +8.536081101701578 +47.35039926121597 +428.9413530784231 +-204.58124846945336 +79.58685393574764 +0 +120 +absolute + + + +0.01 +smooth + +8.536080658438948 +47.350399112324624 +428.94129837399714 +-204.58734824367698 +79.59643767186846 +0 +120 +absolute + + + +0.01 +smooth + +8.536080215771584 +47.35039896346332 +428.94124369809487 +-204.59342548572386 +79.60601817137533 +0 +120 +absolute + + + +0.01 +smooth + +8.53607977370447 +47.35039881463455 +428.94118905196495 +-204.59947984785504 +79.61559530386565 +0 +120 +absolute + + + +0.01 +smooth + +8.536079332242599 +47.35039866584078 +428.9411344368558 +-204.60551098233162 +79.62516893893697 +0 +120 +absolute + + + +0.01 +smooth + +8.53607889139095 +47.35039851708446 +428.9410798540156 +-204.61151854141457 +79.63473894618663 +0 +120 +absolute + + + +0.01 +smooth + +8.53607845115451 +47.35039836836804 +428.94102530469263 +-204.6175021773649 +79.6443051952121 +0 +120 +absolute + + + +0.01 +smooth + +8.536078011538265 +47.35039821969401 +428.9409707901355 +-204.6234615424437 +79.65386755561089 +0 +120 +absolute + + + +0.01 +smooth + +8.5360775725472 +47.3503980710648 +428.94091631159245 +-204.62939628891186 +79.66342589698037 +0 +120 +absolute + + + +0.01 +smooth + +8.536077134186304 +47.35039792248291 +428.94086187031183 +-204.6353060690306 +79.67298008891802 +0 +120 +absolute + + + +0.01 +smooth + +8.536076696460562 +47.350397773950775 +428.9408074675422 +-204.64119053506084 +79.68253000102128 +0 +120 +absolute + + + +0.01 +smooth + +8.53607625937496 +47.35039762547087 +428.9407531045316 +-204.6470493392636 +79.69207550288759 +0 +120 +absolute + + + +0.01 +smooth + +8.536075822934485 +47.35039747704568 +428.94069878252895 +-204.65288213390002 +79.70161646411447 +0 +120 +absolute + + + +0.01 +smooth + +8.53607538714412 +47.35039732867762 +428.94064450278194 +-204.65868857123095 +79.71115275429926 +0 +120 +absolute + + + +0.01 +smooth + +8.536074952008853 +47.35039718036918 +428.94059026653946 +-204.6644683035176 +79.72068424303947 +0 +120 +absolute + + + +0.01 +smooth + +8.536074517533672 +47.350397032122835 +428.94053607504986 +-204.67022098302098 +79.73021079993254 +0 +120 +absolute + + + +0.01 +smooth + +8.536074083723557 +47.350396883941016 +428.9404819295609 +-204.67594626200187 +79.73973229457589 +0 +120 +absolute + + + +0.01 +smooth + +8.536073650583504 +47.35039673582624 +428.94042783132187 +-204.68164379272167 +79.74924859656701 +0 +120 +absolute + + + +0.01 +smooth + +8.536073218118492 +47.35039658778091 +428.9403737815806 +-204.68731322744117 +79.75875957550332 +0 +120 +absolute + + + +0.01 +smooth + +8.536072786333504 +47.35039643980751 +428.9403197815854 +-204.69295421842145 +79.76826510098223 +0 +120 +absolute + + + +0.01 +smooth + +8.536072355233538 +47.35039629190853 +428.9402658325851 +-204.69856641792364 +79.77776504260132 +0 +120 +absolute + + + +0.01 +smooth + +8.536071924823567 +47.3503961440864 +428.94021193582745 +-204.70414947820862 +79.78725926995787 +0 +120 +absolute + + + +0.01 +smooth + +8.536071495108583 +47.350395996343586 +428.9401580925614 +-204.7097030515375 +79.79674765264946 +0 +120 +absolute + + + +0.01 +smooth + +8.536071066093573 +47.35039584868257 +428.940104304035 +-204.71522679017133 +79.80623006027345 +0 +120 +absolute + + + +0.01 +smooth + +8.536070637783519 +47.35039570110578 +428.9400505714965 +-204.72072034637105 +79.81570636242729 +0 +120 +absolute + + + +0.01 +smooth + +8.53607021018341 +47.350395553615726 +428.9399968961947 +-204.72618337239783 +79.82517642870852 +0 +120 +absolute + + + +0.01 +smooth + +8.536069783298235 +47.35039540621485 +428.9399432793777 +-204.7316155205125 +79.8346401287145 +0 +120 +absolute + + + +0.01 +smooth + +8.536069357132972 +47.3503952589056 +428.9398897222938 +-204.73701644297626 +79.84409733204267 +0 +120 +absolute + + + +0.01 +smooth + +8.536068931692617 +47.35039511169048 +428.93983622619174 +-204.7423857920502 +79.85354790829057 +0 +120 +absolute + + + +0.01 +smooth + +8.536068506982147 +47.3503949645719 +428.9397827923195 +-204.7477232199951 +79.86299172705553 +0 +120 +absolute + + + +0.01 +smooth + +8.536068083006555 +47.35039481755236 +428.93972942192556 +-204.7530283790722 +79.87242865793509 +0 +120 +absolute + + + +0.01 +smooth + +8.536067659770822 +47.35039467063431 +428.9396761162584 +-204.75830092154243 +79.88185857052665 +0 +120 +absolute + + + +0.01 +smooth + +8.536067237279937 +47.35039452382022 +428.9396228765663 +-204.76354049966687 +79.89128133442767 +0 +120 +absolute + + + +0.01 +smooth + +8.536066815538884 +47.350394377112536 +428.9395697040977 +-204.7687467657065 +79.90069681923559 +0 +120 +absolute + + + +0.01 +smooth + +8.53606639455265 +47.35039423051375 +428.939516600101 +-204.77391937192243 +79.91010489454786 +0 +120 +absolute + + + +0.01 +smooth + +8.536065974326224 +47.35039408402629 +428.9394635658245 +-204.7790579705756 +79.91950542996194 +0 +120 +absolute + + + +0.01 +smooth + +8.536065554864585 +47.350393937652655 +428.93941060251643 +-204.78416221392712 +79.92889829507527 +0 +120 +absolute + + + +0.01 +smooth + +8.536065136172727 +47.35039379139529 +428.9393577114255 +-204.78923175423796 +79.9382833594853 +0 +120 +absolute + + + +0.01 +smooth + +8.53606471825563 +47.35039364525666 +428.9393048937998 +-204.79426624376916 +79.94766049278947 +0 +120 +absolute + + + +0.01 +smooth + +8.536064301118286 +47.35039349923922 +428.93925215088785 +-204.7992653347818 +79.95702956458523 +0 +120 +absolute + + + +0.01 +smooth + +8.536063884765674 +47.350393353345446 +428.939199483938 +-204.8042286795369 +79.96639044447002 +0 +120 +absolute + + + +0.01 +smooth + +8.536063469202784 +47.350393207577795 +428.93914689419864 +-204.8091559302954 +79.97574300204131 +0 +120 +absolute + + + +0.01 +smooth + +8.536063054434601 +47.35039306193873 +428.9390943829181 +-204.81404673931843 +79.98508710689651 +0 +120 +absolute + + + +0.01 +smooth + +8.536062640466113 +47.350392916430714 +428.9390419513447 +-204.81890075886696 +79.99442262863312 +0 +120 +absolute + + + +0.01 +smooth + +8.536062227302306 +47.350392771056214 +428.93898960072687 +-204.8237176412021 +80.00374943684854 +0 +120 +absolute + + + +0.01 +smooth + +8.536061814948162 +47.35039262581769 +428.938937332313 +-204.82849703858477 +80.01306740114023 +0 +120 +absolute + + + +0.01 +smooth + +8.536061403408674 +47.350392480717616 +428.9388851473516 +-204.83323860327607 +80.02237639110567 +0 +120 +absolute + + + +0.01 +smooth + +8.53606099268882 +47.35039233575843 +428.9388330470907 +-204.83794198753705 +80.03167627634225 +0 +120 +absolute + + + +0.01 +smooth + +8.53606058279359 +47.350392190942614 +428.93878103277905 +-204.8426068436287 +80.04096692644745 +0 +120 +absolute + + + +0.01 +smooth + +8.536060173727972 +47.35039204627263 +428.9387291056647 +-204.84723282381202 +80.05024821101874 +0 +120 +absolute + + + +0.01 +smooth + +8.53605976549695 +47.35039190175094 +428.93867726699636 +-204.85181958034812 +80.05951999965353 +0 +120 +absolute + + + +0.01 +smooth + +8.53605935810551 +47.35039175738001 +428.93862551802204 +-204.85636676549797 +80.06878216194926 +0 +120 +absolute + + + +0.01 +smooth + +8.536058951558637 +47.35039161316229 +428.9385738599904 +-204.86087403152266 +80.07803456750341 +0 +120 +absolute + + + +0.01 +smooth + +8.536058545861318 +47.350391469100245 +428.9385222941496 +-204.86534103068314 +80.08727708591343 +0 +120 +absolute + + + +0.01 +smooth + +8.53605814101854 +47.35039132519637 +428.9384708217483 +-204.8697674152405 +80.09650958677673 +0 +120 +absolute + + + +0.01 +smooth + +8.53605773703529 +47.35039118145308 +428.9384194440346 +-204.8741528374557 +80.1057319396908 +0 +120 +absolute + + + +0.01 +smooth + +8.536057333916549 +47.35039103787287 +428.93836816225695 +-204.87849694958987 +80.11494401425306 +0 +120 +absolute + + + +0.01 +smooth + +8.536056931667307 +47.350390894458194 +428.9383169776637 +-204.88279940390402 +80.12414568006093 +0 +120 +absolute + + + +0.01 +smooth + +8.536056530292552 +47.35039075121151 +428.9382658915034 +-204.8870598526591 +80.13333680671195 +0 +120 +absolute + + + +0.01 +smooth + +8.536056129797267 +47.3503906081353 +428.93821490502427 +-204.89127794811623 +80.14251726380347 +0 +120 +absolute + + + +0.01 +smooth + +8.536055730186439 +47.350390465232 +428.9381640194746 +-204.89545334253634 +80.15168692093299 +0 +120 +absolute + + + +0.01 +smooth + +8.536055331465052 +47.3503903225041 +428.9381132361029 +-204.8995856881806 +80.16084564769794 +0 +120 +absolute + + + +0.01 +smooth + +8.536054933638095 +47.35039017995405 +428.9380625561576 +-204.90367463730993 +80.16999331369576 +0 +120 +absolute + + + +0.01 +smooth + +8.53605453671055 +47.350390037584305 +428.9380119808869 +-204.9077198421854 +80.17912978852392 +0 +120 +absolute + + + +0.01 +smooth + +8.536054140687408 +47.35038989539733 +428.93796151153924 +-204.911720955068 +80.18825494177986 +0 +120 +absolute + + + +0.01 +smooth + +8.536053745573653 +47.3503897533956 +428.9379111493631 +-204.91567762821884 +80.19736864306103 +0 +120 +absolute + + + +0.01 +smooth + +8.536053351374271 +47.35038961158158 +428.9378608956068 +-204.91958951389893 +80.20647076196485 +0 +120 +absolute + + + +0.01 +smooth + +8.536052958094249 +47.35038946995773 +428.93781075151855 +-204.92345626436924 +80.2155611680888 +0 +120 +absolute + + + +0.01 +smooth + +8.53605256573857 +47.350389328526504 +428.937760718347 +-204.92727753189084 +80.22463973103031 +0 +120 +absolute + + + +0.01 +smooth + +8.536052174312223 +47.35038918729037 +428.93771079734023 +-204.9310529687247 +80.23370632038686 +0 +120 +absolute + + + +0.01 +smooth + +8.536051783820193 +47.35038904625179 +428.9376609897469 +-204.93478222713202 +80.24276080575582 +0 +120 +absolute + + + +0.01 +smooth + +8.536051394243875 +47.350388905404536 +428.9376112925843 +-204.93846722901122 +80.25180354376697 +0 +120 +absolute + + + +0.01 +smooth + +8.536051005308046 +47.350388764647796 +428.93756165676837 +-204.94213456462842 +80.26084018451007 +0 +120 +absolute + + + +0.01 +smooth + +8.536050616936478 +47.350388623954046 +428.9375120687111 +-204.94579165379446 +80.26987226431545 +0 +120 +absolute + + + +0.01 +smooth + +8.536050229134334 +47.350388483325844 +428.93746252939843 +-204.9494380838125 +80.27889963876194 +0 +120 +absolute + + + +0.01 +smooth + +8.536049841906776 +47.35038834276567 +428.9374130398162 +-204.95307344198568 +80.28792216342848 +0 +120 +absolute + + + +0.01 +smooth + +8.536049455258958 +47.35038820227604 +428.93736360095 +-204.95669731561708 +80.2969396938938 +0 +120 +absolute + + + +0.01 +smooth + +8.536049069196043 +47.35038806185944 +428.9373142137859 +-204.96030929200978 +80.30595208573688 +0 +120 +absolute + + + +0.01 +smooth + +8.536048683723191 +47.3503879215184 +428.93726487930957 +-204.96390895846696 +80.31495919453651 +0 +120 +absolute + + + +0.01 +smooth + +8.536048298845564 +47.350387781255435 +428.93721559850707 +-204.96749590229177 +80.3239608758716 +0 +120 +absolute + + + +0.01 +smooth + +8.53604791456832 +47.35038764107302 +428.93716637236395 +-204.97106971078728 +80.33295698532098 +0 +120 +absolute + + + +0.01 +smooth + +8.53604753089662 +47.35038750097369 +428.9371172018662 +-204.97462997125663 +80.3419473784635 +0 +120 +absolute + + + +0.01 +smooth + +8.536047147835623 +47.350387360959935 +428.93706808799965 +-204.97817627100292 +80.35093191087805 +0 +120 +absolute + + + +0.01 +smooth + +8.536046765390493 +47.35038722103428 +428.9370190317502 +-204.9817081973293 +80.35991043814347 +0 +120 +absolute + + + +0.01 +smooth + +8.536046383566386 +47.35038708119921 +428.93697003410347 +-204.98522533753885 +80.36888281583863 +0 +120 +absolute + + + +0.01 +smooth + +8.536046002368462 +47.35038694145725 +428.9369210960453 +-204.9887272789347 +80.37784889954237 +0 +120 +absolute + + + +0.01 +smooth + +8.536045621801884 +47.350386801810906 +428.9368722185618 +-204.99221360882007 +80.3868085448336 +0 +120 +absolute + + + +0.01 +smooth + +8.536045241871811 +47.350386662262686 +428.9368234026386 +-204.99568391449793 +80.39576160729113 +0 +120 +absolute + + + +0.01 +smooth + +8.536044862583402 +47.350386522815086 +428.9367746492615 +-204.9991377832715 +80.40470794249383 +0 +120 +absolute + + + +0.01 +smooth + +8.53604448394182 +47.35038638347061 +428.9367259594164 +-205.0025748024438 +80.41364740602057 +0 +120 +absolute + + + +0.01 +smooth + +8.536044105952222 +47.350386244231785 +428.93667733408904 +-205.00599455931808 +80.42257985345023 +0 +120 +absolute + + + +0.01 +smooth + +8.53604372861977 +47.350386105101116 +428.9366287742654 +-205.00939664119738 +80.43150514036162 +0 +120 +absolute + + + +0.01 +smooth + +8.536043351949626 +47.3503859660811 +428.9365802809313 +-205.01278063538484 +80.44042312233368 +0 +120 +absolute + + + +0.01 +smooth + +8.536042975946948 +47.350385827174236 +428.9365318550724 +-205.01614612918362 +80.44933365494518 +0 +120 +absolute + + + +0.01 +smooth + +8.536042600616891 +47.350385688383035 +428.93648349767454 +-205.0194927098967 +80.45823659377501 +0 +120 +absolute + + + +0.01 +smooth + +8.536042225964628 +47.35038554971005 +428.9364352097239 +-205.02281996482745 +80.46713179440209 +0 +120 +absolute + + + +0.01 +smooth + +8.53604185199531 +47.35038541115772 +428.93638699220594 +-205.02612748127873 +80.47601911240518 +0 +120 +absolute + + + +0.01 +smooth + +8.536041478714097 +47.35038527272858 +428.9363388461065 +-205.02941484655378 +80.48489840336323 +0 +120 +absolute + + + +0.01 +smooth + +8.536041106126152 +47.35038513442515 +428.9362907724116 +-205.0326816479558 +80.49376952285508 +0 +120 +absolute + + + +0.01 +smooth + +8.536040734236634 +47.350384996249915 +428.93624277210694 +-205.0359274727877 +80.50263232645952 +0 +120 +absolute + + + +0.01 +smooth + +8.536040363050702 +47.35038485820541 +428.93619484617835 +-205.03915190835284 +80.5114866697555 +0 +120 +absolute + + + +0.01 +smooth + +8.536039992573519 +47.350384720294116 +428.9361469956118 +-205.04235454195415 +80.52033240832183 +0 +120 +absolute + + + +0.01 +smooth + +8.536039622810243 +47.35038458251855 +428.9360992213929 +-205.0455349608948 +80.52916939773736 +0 +120 +absolute + + + +0.01 +smooth + +8.536039253766036 +47.35038444488122 +428.93605152450783 +-205.04869275247805 +80.53799749358102 +0 +120 +absolute + + + +0.01 +smooth + +8.536038885446057 +47.35038430738465 +428.9360039059419 +-205.0518275040068 +80.54681655143162 +0 +120 +absolute + + + +0.01 +smooth + +8.536038517855467 +47.35038417003132 +428.93595636668147 +-205.05493880278436 +80.555626426868 +0 +120 +absolute + + + +0.01 +smooth + +8.536038150999426 +47.35038403282374 +428.93590890771213 +-205.05802623611376 +80.56442697546908 +0 +120 +absolute + + + +0.01 +smooth + +8.536037784883092 +47.35038389576443 +428.93586153001945 +-205.06108939129808 +80.57321805281366 +0 +120 +absolute + + + +0.01 +smooth + +8.53603741951163 +47.3503837588559 +428.9358142345898 +-205.0641278556405 +80.58199951448063 +0 +120 +absolute + + + +0.01 +smooth + +8.536037054890194 +47.350383622100644 +428.9357670224086 +-205.06714121644416 +80.59077121604888 +0 +120 +absolute + + + +0.01 +smooth + +8.536036691023947 +47.35038348550117 +428.9357198944617 +-205.0701290610121 +80.59953301309719 +0 +120 +absolute + + + +0.01 +smooth + +8.536036327918053 +47.350383349059996 +428.93567285173526 +-205.07309097664753 +80.6082847612045 +0 +120 +absolute + + + +0.01 +smooth + +8.536035965577666 +47.35038321277962 +428.9356258952148 +-205.07602655065355 +80.61702631594963 +0 +120 +absolute + + + +0.01 +smooth + +8.53603560400795 +47.35038307666257 +428.9355790258862 +-205.07893537033326 +80.62575753291145 +0 +120 +absolute + + + +0.01 +smooth + +8.536035243214064 +47.35038294071131 +428.9355322447354 +-205.08181702298978 +80.63447826766883 +0 +120 +absolute + + + +0.01 +smooth + +8.536034883201168 +47.35038280492839 +428.93548555274816 +-205.08467109592624 +80.64318837580062 +0 +120 +absolute + + + +0.01 +smooth + +8.536034523974426 +47.35038266931629 +428.9354389509102 +-205.08749717644574 +80.65188771288567 +0 +120 +absolute + + + +0.01 +smooth + +8.53603416553899 +47.35038253387755 +428.9353924402076 +-205.0902948518514 +80.66057613450286 +0 +120 +absolute + + + +0.01 +smooth + +8.536033807900026 +47.35038239861463 +428.935346021626 +-205.0930637094464 +80.66925349623105 +0 +120 +absolute + + + +0.01 +smooth + +8.536033451062695 +47.35038226353008 +428.9352996961512 +-205.09580333653378 +80.67791965364907 +0 +120 +absolute + + + +0.01 +smooth + +8.536033095032153 +47.350382128626386 +428.93525346476923 +-205.09851332041674 +80.68657446233581 +0 +120 +absolute + + + +0.01 +smooth + +8.536032739813564 +47.350381993906055 +428.9352073284657 +-205.10119324839832 +80.69521777787013 +0 +120 +absolute + + + +0.01 +smooth + +8.536032385412087 +47.3503818593716 +428.9351612882266 +-205.10384270778167 +80.70384945583088 +0 +120 +absolute + + + +0.01 +smooth + +8.53603203183288 +47.35038172502553 +428.93511534503773 +-205.10646128586998 +80.71246935179693 +0 +120 +absolute + + + +0.01 +smooth + +8.536031679081109 +47.35038159087035 +428.9350694998848 +-205.1090485699663 +80.72107732134714 +0 +120 +absolute + + + +0.01 +smooth + +8.536031327161927 +47.350381456908565 +428.93502375375374 +-205.11160414737373 +80.72967322006033 +0 +120 +absolute + + + +0.01 +smooth + +8.536030976080497 +47.350381323142685 +428.93497810763046 +-205.11412760539542 +80.73825690351543 +0 +120 +absolute + + + +0.01 +smooth + +8.536030625841981 +47.35038118957521 +428.93493256250065 +-205.11661853133452 +80.74682822729126 +0 +120 +absolute + + + +0.01 +smooth + +8.536030276451537 +47.35038105620866 +428.93488711935015 +-205.11907651249413 +80.75538704696669 +0 +120 +absolute + + + +0.01 +smooth + +8.536029927914328 +47.350380923045535 +428.9348417791648 +-205.12150113617733 +80.76393321812057 +0 +120 +absolute + + + +0.01 +smooth + +8.53602958023551 +47.35038079008834 +428.9347965429306 +-205.1238919896873 +80.77246659633177 +0 +120 +absolute + + + +0.01 +smooth + +8.536029233420246 +47.350380657339585 +428.9347514116331 +-205.12624866032712 +80.78098703717914 +0 +120 +absolute + + + +0.01 +smooth + +8.536028887473696 +47.350380524801785 +428.93470638625837 +-205.12857073539993 +80.78949439624157 +0 +120 +absolute + + + +0.01 +smooth + +8.536028542401018 +47.35038039247743 +428.93466146779207 +-205.13085780220888 +80.79798852909788 +0 +120 +absolute + + + +0.01 +smooth + +8.536028198207376 +47.35038026036904 +428.9346166572201 +-205.13310944805704 +80.80646929132695 +0 +120 +absolute + + + +0.01 +smooth + +8.53602785489793 +47.35038012847913 +428.9345719555283 +-205.13532526024753 +80.81493653850765 +0 +120 +absolute + + + +0.01 +smooth + +8.536027512477835 +47.35037999681019 +428.93452736370256 +-205.1375048260835 +80.82339012621881 +0 +120 +absolute + + + +0.01 +smooth + +8.536027170952256 +47.35037986536473 +428.9344828827285 +-205.13964773286807 +80.83182991003935 +0 +120 +absolute + + + +0.01 +smooth + +8.536026830326351 +47.350379734145264 +428.9344385135922 +-205.14175356790435 +80.84025574554803 +0 +120 +absolute + + + +0.01 +smooth + +8.536026490605282 +47.3503796031543 +428.9343942572794 +-205.14382191849543 +80.84866748832383 +0 +120 +absolute + + + +0.01 +smooth + +8.536026151794207 +47.350379472394344 +428.9343501147758 +-205.1458523719445 +80.85706499394553 +0 +120 +absolute + + + +0.01 +smooth + +8.536025813898288 +47.35037934186789 +428.93430608706734 +-205.14784451555462 +80.865448117992 +0 +120 +absolute + + + +0.01 +smooth + +8.536025476922685 +47.35037921157747 +428.93426217513996 +-205.14979793662894 +80.87381671604211 +0 +120 +absolute + + + +0.01 +smooth + +8.536025140872558 +47.350379081525574 +428.93421837997926 +-205.1517122224706 +80.88217064367474 +0 +120 +absolute + + + +0.01 +smooth + +8.536024805753065 +47.35037895171471 +428.9341747025713 +-205.15358696038265 +80.89050975646875 +0 +120 +absolute + + + +0.01 +smooth + +8.53602447156937 +47.3503788221474 +428.93413114390177 +-205.1554217376683 +80.89883391000298 +0 +120 +absolute + + + +0.01 +smooth + +8.53602413832663 +47.350378692826126 +428.9340877049564 +-205.1572161416306 +80.90714295985624 +0 +120 +absolute + + + +0.01 +smooth + +8.536023806030006 +47.35037856375342 +428.93404438672127 +-205.1589697595727 +80.9154367616075 +0 +120 +absolute + + + +0.01 +smooth + +8.536023474684661 +47.35037843493177 +428.9340011901822 +-205.1606821787977 +80.92371517083554 +0 +120 +absolute + + + +0.01 +smooth + +8.536023144295752 +47.350378306363694 +428.9339581163247 +-205.16235298660877 +80.93197804311924 +0 +120 +absolute + + + +0.01 +smooth + +8.536022814868439 +47.35037817805169 +428.93391516613485 +-205.16398177030902 +80.94022523403751 +0 +120 +absolute + + + +0.01 +smooth + +8.536022486348195 +47.35037804997602 +428.9338723316903 +-205.16557462250955 +80.94845792470548 +0 +120 +absolute + + + +0.01 +smooth + +8.53602215842595 +47.350377922021956 +428.93382956699236 +-205.1671653205841 +80.95668294492499 +0 +120 +absolute + + + +0.01 +smooth + +8.53602183106136 +47.35037779417504 +428.9337868660167 +-205.16875827397595 +80.96490115147814 +0 +120 +absolute + + + +0.01 +smooth + +8.536021504259784 +47.35037766643789 +428.9337442295521 +-205.17035290553272 +80.97311238576891 +0 +120 +absolute + + + +0.01 +smooth + +8.536021178026578 +47.3503775388131 +428.9337016583871 +-205.1719486381021 +80.98131648920116 +0 +120 +absolute + + + +0.01 +smooth + +8.536020852367097 +47.350377411303256 +428.93365915331066 +-205.17354489453166 +80.98951330317881 +0 +120 +absolute + + + +0.01 +smooth + +8.536020527286707 +47.35037728391097 +428.9336167151114 +-205.17514109766907 +80.99770266910578 +0 +120 +absolute + + + +0.01 +smooth + +8.536020202790763 +47.35037715663885 +428.9335743445783 +-205.17673667036206 +81.00588442838594 +0 +120 +absolute + + + +0.01 +smooth + +8.536019878884623 +47.350377029489465 +428.9335320424998 +-205.17833103545823 +81.0140584224232 +0 +120 +absolute + + + +0.01 +smooth + +8.536019555573644 +47.35037690246543 +428.9334898096648 +-205.1799236158052 +81.02222449262149 +0 +120 +absolute + + + +0.01 +smooth + +8.536019232863184 +47.350376775569345 +428.93344764686196 +-205.18151383425064 +81.0303824803847 +0 +120 +absolute + + + +0.01 +smooth + +8.536018910758612 +47.35037664880382 +428.9334055548803 +-205.1831011136423 +81.03853222711673 +0 +120 +absolute + + + +0.01 +smooth + +8.536018589265273 +47.35037652217142 +428.9333635345082 +-205.18468487682762 +81.0466735742215 +0 +120 +absolute + + + +0.01 +smooth + +8.536018268388531 +47.35037639567477 +428.9333215865347 +-205.1862645466544 +81.05480636310288 +0 +120 +absolute + + + +0.01 +smooth + +8.536017948133747 +47.35037626931648 +428.9332797117484 +-205.18783954597038 +81.06293043516484 +0 +120 +absolute + + + +0.01 +smooth + +8.536017628506274 +47.350376143099126 +428.9332379109381 +-205.189409297623 +81.07104563181122 +0 +120 +absolute + + + +0.01 +smooth + +8.536017309511474 +47.3503760170253 +428.93319618489244 +-205.19097322445992 +81.07915179444592 +0 +120 +absolute + + + +0.01 +smooth + +8.536016991154701 +47.350375891097606 +428.93315453440016 +-205.19253074932902 +81.0872487644729 +0 +120 +absolute + + + +0.01 +smooth + +8.53601667344132 +47.35037576531866 +428.9331129602503 +-205.19408129507772 +81.09533638329604 +0 +120 +absolute + + + +0.01 +smooth + +8.536016356376692 +47.35037563969108 +428.9330714632315 +-205.19562428455384 +81.10341449231925 +0 +120 +absolute + + + +0.01 +smooth + +8.536016039966166 +47.35037551421741 +428.93303004413224 +-205.1971591406049 +81.1114829329464 +0 +120 +absolute + + + +0.01 +smooth + +8.536015724215103 +47.35037538890028 +428.93298870374156 +-205.1986852860786 +81.11954154658146 +0 +120 +absolute + + + +0.01 +smooth + +8.536015409128867 +47.35037526374229 +428.9329474428481 +-205.20020214382262 +81.1275901746283 +0 +120 +absolute + + + +0.01 +smooth + +8.536015094712807 +47.35037513874603 +428.9329062622405 +-205.20170913668454 +81.13562865849075 +0 +120 +absolute + + + +0.01 +smooth + +8.536014780972293 +47.35037501391409 +428.9328651627078 +-205.20320568751205 +81.14365683957286 +0 +120 +absolute + + + +0.01 +smooth + +8.536014467912675 +47.35037488924909 +428.9328241450384 +-205.20469121915286 +81.15167455927842 +0 +120 +absolute + + + +0.01 +smooth + +8.536014155539313 +47.3503747647536 +428.93278321002134 +-205.20616515445448 +81.15968165901135 +0 +120 +absolute + + + +0.01 +smooth + +8.53601384385757 +47.35037464043027 +428.9327423584452 +-205.2076269162647 +81.16767798017564 +0 +120 +absolute + + + +0.01 +smooth + +8.5360135328728 +47.35037451628165 +428.93270159109886 +-205.20907592743112 +81.17566336417511 +0 +120 +absolute + + + +0.01 +smooth + +8.536013222590363 +47.35037439231035 +428.9326609087709 +-205.21051161080138 +81.18363765241371 +0 +120 +absolute + + + +0.01 +smooth + +8.536012913015616 +47.35037426851899 +428.9326203122502 +-205.21193338922316 +81.19160068629532 +0 +120 +absolute + + + +0.01 +smooth + +8.536012604153917 +47.350374144910134 +428.93257980232545 +-205.21334068554404 +81.1995523072238 +0 +120 +absolute + + + +0.01 +smooth + +8.53601229601063 +47.35037402148641 +428.93253937978545 +-205.21473292261172 +81.20749235660314 +0 +120 +absolute + + + +0.01 +smooth + +8.536011988591108 +47.35037389825041 +428.932499045419 +-205.21610952327393 +81.21542067583721 +0 +120 +absolute + + + +0.01 +smooth + +8.53601168190071 +47.350373775204716 +428.93245880001444 +-205.21746991037816 +81.2233371063299 +0 +120 +absolute + + + +0.01 +smooth + +8.536011375944797 +47.350373652351955 +428.9324186443612 +-205.21881350677216 +81.23124148948513 +0 +120 +absolute + + + +0.01 +smooth + +8.536011070728726 +47.3503735296947 +428.9323785792476 +-205.2201397353036 +81.2391336667068 +0 +120 +absolute + + + +0.01 +smooth + +8.536010766257855 +47.35037340723555 +428.9323386054623 +-205.22144801882004 +81.2470134793988 +0 +120 +absolute + + + +0.01 +smooth + +8.536010462537545 +47.350373284977145 +428.9322987237945 +-205.22273778016927 +81.2548807689651 +0 +120 +absolute + + + +0.01 +smooth + +8.53601015957315 +47.35037316292203 +428.9322589350324 +-205.22400844219877 +81.26273537680952 +0 +120 +absolute + + + +0.01 +smooth + +8.536009857370031 +47.350373041072835 +428.93221923996515 +-205.22525942775633 +81.270577144336 +0 +120 +absolute + + + +0.01 +smooth + +8.53600955593355 +47.35037291943215 +428.9321796393813 +-205.2264901596895 +81.27840591294846 +0 +120 +absolute + + + +0.01 +smooth + +8.53600925526906 +47.350372798002574 +428.93214013406964 +-205.22770006084602 +81.28622152405079 +0 +120 +absolute + + + +0.01 +smooth + +8.53600895538192 +47.3503726767867 +428.932100724819 +-205.22888855407345 +81.29402381904687 +0 +120 +absolute + + + +0.01 +smooth + +8.53600865627749 +47.35037255578713 +428.9320614124181 +-205.23005506221955 +81.30181263934067 +0 +120 +absolute + + + +0.01 +smooth + +8.536008357961132 +47.35037243500648 +428.9320221976556 +-205.2311990081319 +81.30958782633601 +0 +120 +absolute + + + +0.01 +smooth + +8.5360080604382 +47.35037231444733 +428.93198308132037 +-205.23231981465813 +81.31734922143687 +0 +120 +absolute + + + +0.01 +smooth + +8.536007763714052 +47.35037219411227 +428.93194406420105 +-205.23341690464596 +81.3250966660471 +0 +120 +absolute + + + +0.01 +smooth + +8.536007467794049 +47.35037207400393 +428.9319051470864 +-205.23448970094296 +81.33283000157063 +0 +120 +absolute + + + +0.01 +smooth + +8.536007172683547 +47.35037195412488 +428.9318663307653 +-205.23553762639688 +81.3405490694114 +0 +120 +absolute + + + +0.01 +smooth + +8.536006878387907 +47.350371834477734 +428.9318276160263 +-205.23656010385528 +81.34825371097324 +0 +120 +absolute + + + +0.01 +smooth + +8.536006584912487 +47.35037171506508 +428.9317890036583 +-205.23755655616588 +81.35594376766008 +0 +120 +absolute + + + +0.01 +smooth + +8.536006292262643 +47.350371595889534 +428.93175049445006 +-205.23852640617628 +81.36361908087586 +0 +120 +absolute + + + +0.01 +smooth + +8.536006000443736 +47.35037147695367 +428.9317120891903 +-205.23946907673414 +81.37127949202446 +0 +120 +absolute + + + +0.01 +smooth + +8.536005709461126 +47.35037135826011 +428.9316737886677 +-205.24038399068712 +81.37892484250978 +0 +120 +absolute + + + +0.01 +smooth + +8.536005419320169 +47.350371239811444 +428.93163559367093 +-205.24127057088288 +81.38655497373574 +0 +120 +absolute + + + +0.01 +smooth + +8.536005130026224 +47.350371121610266 +428.931597504989 +-205.24212824016905 +81.39416972710623 +0 +120 +absolute + + + +0.01 +smooth + +8.536004841584647 +47.35037100365918 +428.93155952341044 +-205.24295642139327 +81.40176894402516 +0 +120 +absolute + + + +0.01 +smooth + +8.536004554000801 +47.350370885960785 +428.9315216497241 +-205.24375453740328 +81.40935246589643 +0 +120 +absolute + + + +0.01 +smooth + +8.536004267280042 +47.35037076851768 +428.9314838847188 +-205.24452201104663 +81.41692013412396 +0 +120 +absolute + + + +0.01 +smooth + +8.53600398142773 +47.350370651332454 +428.9314462291831 +-205.245258265171 +81.42447179011162 +0 +120 +absolute + + + +0.01 +smooth + +8.536003696449221 +47.35037053440772 +428.9314086839059 +-205.24596272262403 +81.43200727526337 +0 +120 +absolute + + + +0.01 +smooth + +8.536003412349874 +47.35037041774608 +428.93137124967586 +-205.24663480625344 +81.43952643098308 +0 +120 +absolute + + + +0.01 +smooth + +8.53600312913505 +47.35037030135011 +428.9313339272818 +-205.2472739389068 +81.44702909867463 +0 +120 +absolute + + + +0.01 +smooth + +8.536002846810106 +47.350370185222424 +428.9312967175124 +-205.2478795434318 +81.45451511974198 +0 +120 +absolute + + + +0.01 +smooth + +8.5360025653804 +47.350370069365624 +428.93125962115647 +-205.24845104267604 +81.461984335589 +0 +120 +absolute + + + +0.01 +smooth + +8.53600228485129 +47.350369953782305 +428.9312226390027 +-205.24898785948722 +81.46943658761958 +0 +120 +absolute + + + +0.01 +smooth + +8.536002005228138 +47.35036983847505 +428.93118577184 +-205.249489416713 +81.47687171723769 +0 +120 +absolute + + + +0.01 +smooth + +8.536001726516297 +47.35036972344649 +428.9311490204568 +-205.24995513720103 +81.48428956584715 +0 +120 +absolute + + + +0.01 +smooth + +8.53600144872113 +47.3503696086992 +428.93111238564217 +-205.2503844437989 +81.49168997485194 +0 +120 +absolute + + + +0.01 +smooth + +8.536001171847992 +47.350369494235785 +428.93107586818473 +-205.25077675935435 +81.4990727856559 +0 +120 +absolute + + + +0.01 +smooth + +8.536000895902246 +47.35036938005884 +428.9310394688732 +-205.25113150671496 +81.506437839663 +0 +120 +absolute + + + +0.01 +smooth + +8.536000620889245 +47.35036926617096 +428.9310031884964 +-205.25144810872843 +81.51378497827707 +0 +120 +absolute + + + +0.01 +smooth + +8.536000346814353 +47.350369152574764 +428.93096702784305 +-205.25172598824236 +81.52111404290207 +0 +120 +absolute + + + +0.01 +smooth + +8.536000073682922 +47.350369039272834 +428.9309309877018 +-205.25196456810443 +81.5284248749419 +0 +120 +absolute + + + +0.01 +smooth + +8.535999801500317 +47.35036892626777 +428.93089506886156 +-205.25216327116232 +81.53571731580043 +0 +120 +absolute + + + +0.01 +smooth + +8.535999530271894 +47.350368813562184 +428.930859272111 +-205.2523215202636 +81.54299120688162 +0 +120 +absolute + + + +0.01 +smooth + +8.535999260003011 +47.35036870115865 +428.9308235982388 +-205.252438738256 +81.55024638958932 +0 +120 +absolute + + + +0.01 +smooth + +8.535998990699026 +47.350368589059784 +428.9307880480339 +-205.25251434798713 +81.55748270532747 +0 +120 +absolute + + + +0.01 +smooth + +8.5359987223653 +47.3503684772682 +428.93075262228484 +-205.25254777230464 +81.56469999549996 +0 +120 +absolute + + + +0.01 +smooth + +8.535998454889752 +47.35036836574093 +428.93071730690656 +-205.25254874098013 +81.57190091584805 +0 +120 +absolute + + + +0.01 +smooth + +8.535998187956343 +47.35036825435601 +428.9306820618929 +-205.25254518727246 +81.57909300550945 +0 +120 +absolute + + + +0.01 +smooth + +8.535997921552303 +47.35036814310908 +428.9306468855581 +-205.2525387339519 +81.58627653157606 +0 +120 +absolute + + + +0.01 +smooth + +8.535997655683198 +47.35036803200282 +428.93061177853855 +-205.25252940079557 +81.59345132106426 +0 +120 +absolute + + + +0.01 +smooth + +8.535997390354613 +47.35036792103999 +428.9305767414715 +-205.25251720758092 +81.60061720099058 +0 +120 +absolute + + + +0.01 +smooth + +8.535997125572129 +47.350367810223304 +428.93054177499357 +-205.25250217408524 +81.60777399837146 +0 +120 +absolute + + + +0.01 +smooth + +8.53599686134132 +47.350367699555505 +428.93050687974187 +-205.252484320086 +81.61492154022334 +0 +120 +absolute + + + +0.01 +smooth + +8.535996597667772 +47.350367589039315 +428.93047205635304 +-205.2524636653603 +81.62205965356266 +0 +120 +absolute + + + +0.01 +smooth + +8.535996334557053 +47.35036747867746 +428.9304373054639 +-205.25244022968565 +81.62918816540594 +0 +120 +absolute + + + +0.01 +smooth + +8.535996072014756 +47.35036736847268 +428.93040262771154 +-205.2524140328394 +81.63630690276963 +0 +120 +absolute + + + +0.01 +smooth + +8.535995810046446 +47.35036725842769 +428.93036802373257 +-205.25238509459876 +81.64341569267015 +0 +120 +absolute + + + +0.01 +smooth + +8.535995548657707 +47.350367148545224 +428.93033349416373 +-205.2523534347411 +81.65051436212396 +0 +120 +absolute + + + +0.01 +smooth + +8.535995287854124 +47.35036703882801 +428.9302990396421 +-205.25231907304382 +81.65760273814755 +0 +120 +absolute + + + +0.01 +smooth + +8.535995027641267 +47.35036692927878 +428.9302646608045 +-205.25228202928426 +81.66468064775735 +0 +120 +absolute + + + +0.01 +smooth + +8.535994768024722 +47.35036681990027 +428.9302303582878 +-205.25224232323973 +81.67174791796991 +0 +120 +absolute + + + +0.01 +smooth + +8.535994509010063 +47.35036671069519 +428.93019613272867 +-205.2521999746875 +81.67880437580153 +0 +120 +absolute + + + +0.01 +smooth + +8.535994250602867 +47.35036660166628 +428.9301619847641 +-205.25215500340494 +81.68584984826877 +0 +120 +absolute + + + +0.01 +smooth + +8.535993992808722 +47.3503664928163 +428.93012791503105 +-205.2521074291695 +81.69288416238811 +0 +120 +absolute + + + +0.01 +smooth + +8.535993735633197 +47.35036638414792 +428.93009392416604 +-205.25205727175833 +81.69990714517593 +0 +120 +absolute + + + +0.01 +smooth + +8.535993479081874 +47.35036627566389 +428.930060012806 +-205.25200455094887 +81.70691862364876 +0 +120 +absolute + + + +0.01 +smooth + +8.53599322316034 +47.350366167366964 +428.9300261815881 +-205.25194928651848 +81.71391842482305 +0 +120 +absolute + + + +0.01 +smooth + +8.535992967874158 +47.350366059259834 +428.9299924311488 +-205.25189149824436 +81.72090637571519 +0 +120 +absolute + + + +0.01 +smooth + +8.53599271322892 +47.35036595134526 +428.9299587621251 +-205.25183120590404 +81.7278823033417 +0 +120 +absolute + + + +0.01 +smooth + +8.5359924592302 +47.35036584362597 +428.9299251751539 +-205.25176842927476 +81.73484603471906 +0 +120 +absolute + + + +0.01 +smooth + +8.535992205883577 +47.350365736104656 +428.9298916708719 +-205.25170318813383 +81.74179739686366 +0 +120 +absolute + + + +0.01 +smooth + +8.535991953194634 +47.35036562878412 +428.92985824991626 +-205.25163550225867 +81.74873621679204 +0 +120 +absolute + + + +0.01 +smooth + +8.535991701168943 +47.350365521667 +428.9298249129233 +-205.25156539142645 +81.75566232152057 +0 +120 +absolute + + + +0.01 +smooth + +8.535991449812085 +47.35036541475609 +428.9297916605304 +-205.25149287541467 +81.76257553806579 +0 +120 +absolute + + + +0.01 +smooth + +8.535991199129644 +47.3503653080541 +428.92975849337415 +-205.2514179740006 +81.76947569344412 +0 +120 +absolute + + + +0.01 +smooth + +8.535990949127187 +47.35036520156373 +428.92972541209116 +-205.2513407069615 +81.776362614672 +0 +120 +absolute + + + +0.01 +smooth + +8.53599069981031 +47.35036509528776 +428.9296924173188 +-205.25126109407492 +81.78323612876594 +0 +120 +absolute + + + +0.01 +smooth + +8.535990451184578 +47.3503649892289 +428.92965950969364 +-205.25117915511802 +81.79009606274238 +0 +120 +absolute + + + +0.01 +smooth + +8.535990203255574 +47.35036488338986 +428.9296266898524 +-205.25109490986813 +81.79694224361774 +0 +120 +absolute + + + +0.01 +smooth + +8.535989956028882 +47.3503647777734 +428.9295939584323 +-205.2510083781027 +81.80377449840853 +0 +120 +absolute + + + +0.01 +smooth + +8.535989709510071 +47.35036467238221 +428.9295613160697 +-205.25091957959896 +81.8105926541312 +0 +120 +absolute + + + +0.01 +smooth + +8.535989463704727 +47.35036456721907 +428.9295287634017 +-205.25082853413429 +81.81739653780218 +0 +120 +absolute + + + +0.01 +smooth + +8.535989218618429 +47.35036446228667 +428.92949630106534 +-205.250735261486 +81.82418597643795 +0 +120 +absolute + + + +0.01 +smooth + +8.535988974256748 +47.350364357587736 +428.92946392969696 +-205.25063978143146 +81.83096079705496 +0 +120 +absolute + + + +0.01 +smooth + +8.535988730625274 +47.35036425312503 +428.929431649934 +-205.25054211374803 +81.83772082666971 +0 +120 +absolute + + + +0.01 +smooth + +8.53598848772958 +47.35036414890125 +428.9293994624129 +-205.250442278213 +81.84446589229859 +0 +120 +absolute + + + +0.01 +smooth + +8.535988245575247 +47.35036404491913 +428.9293673677706 +-205.25034029460366 +81.85119582095813 +0 +120 +absolute + + + +0.01 +smooth + +8.535988004167852 +47.35036394118142 +428.92933536664395 +-205.25023618269742 +81.8579104396647 +0 +120 +absolute + + + +0.01 +smooth + +8.535987763512972 +47.35036383769082 +428.9293034596699 +-205.25012996227164 +81.86460957543488 +0 +120 +absolute + + + +0.01 +smooth + +8.535987523616189 +47.35036373445009 +428.92927164748517 +-205.25002165310354 +81.87129305528502 +0 +120 +absolute + + + +0.01 +smooth + +8.53598728448308 +47.350363631461946 +428.9292399307266 +-205.24991127497057 +81.87796070623163 +0 +120 +absolute + + + +0.01 +smooth + +8.535987046119226 +47.35036352872909 +428.929208310031 +-205.24979884765003 +81.88461235529115 +0 +120 +absolute + + + +0.01 +smooth + +8.535986808530208 +47.350363426254304 +428.9291767860355 +-205.2496843909192 +81.89124782948008 +0 +120 +absolute + + + +0.01 +smooth + +8.535986571721597 +47.350363324040266 +428.92914535937655 +-205.24956792455552 +81.89786695581485 +0 +120 +absolute + + + +0.01 +smooth + +8.535986335698981 +47.35036322208974 +428.92911403069127 +-205.24944946833625 +81.90446956131191 +0 +120 +absolute + + + +0.01 +smooth + +8.535986100467932 +47.35036312040543 +428.92908280061647 +-205.2493290420387 +81.91105547298773 +0 +120 +absolute + + + +0.01 +smooth + +8.53598586603403 +47.35036301899008 +428.92905166978886 +-205.24920666544028 +81.91762451785874 +0 +120 +absolute + + + +0.01 +smooth + +8.53598563240286 +47.350362917846425 +428.92902063884543 +-205.24908235831833 +81.92417652294147 +0 +120 +absolute + + + +0.01 +smooth + +8.535985399579992 +47.35036281697718 +428.92898970842293 +-205.24895614045013 +81.93071131525231 +0 +120 +absolute + + + +0.01 +smooth + +8.53598516757101 +47.35036271638508 +428.9289588791583 +-205.24882803161302 +81.93722872180774 +0 +120 +absolute + + + +0.01 +smooth + +8.535984936381492 +47.35036261607286 +428.9289281516883 +-205.24869805158434 +81.94372856962424 +0 +120 +absolute + + + +0.01 +smooth + +8.535984706017018 +47.35036251604322 +428.92889752664973 +-205.24856622014144 +81.95021068571825 +0 +120 +absolute + + + +0.01 +smooth + +8.535984476483165 +47.35036241629892 +428.92886700467955 +-205.24843255706168 +81.95667489710624 +0 +120 +absolute + + + +0.01 +smooth + +8.535984247785514 +47.35036231684269 +428.9288365864146 +-205.24829708212235 +81.96312103080464 +0 +120 +absolute + + + +0.01 +smooth + +8.53598401992964 +47.350362217677244 +428.92880627249167 +-205.2481598151008 +81.96954891382995 +0 +120 +absolute + + + +0.01 +smooth + +8.535983792921124 +47.35036211880532 +428.9287760635476 +-205.24802077577436 +81.97595837319861 +0 +120 +absolute + + + +0.01 +smooth + +8.535983566765548 +47.35036202022964 +428.9287459602194 +-205.24787998392043 +81.98234923592707 +0 +120 +absolute + + + +0.01 +smooth + +8.535983341468487 +47.35036192195294 +428.92871596314365 +-205.24773745931623 +81.98872132903182 +0 +120 +absolute + + + +0.01 +smooth + +8.53598311703552 +47.350361823977934 +428.92868607295725 +-205.24759322173918 +81.99507447952928 +0 +120 +absolute + + + +0.01 +smooth + +8.535982893472228 +47.35036172630737 +428.9286562902972 +-205.2474472909666 +82.00140851443592 +0 +120 +absolute + + + +0.01 +smooth + +8.535982670784188 +47.35036162894397 +428.92862661580034 +-205.24729968677576 +82.00772326076822 +0 +120 +absolute + + + +0.01 +smooth + +8.53598244897698 +47.35036153189047 +428.92859705010335 +-205.2471504289441 +82.01401854554263 +0 +120 +absolute + + + +0.01 +smooth + +8.535982228056183 +47.35036143514958 +428.92856759384324 +-205.24699953724894 +82.02029419577559 +0 +120 +absolute + + + +0.01 +smooth + +8.535982008027377 +47.35036133872404 +428.9285382476567 +-205.24684703146755 +82.02655003848358 +0 +120 +absolute + + + +0.01 +smooth + +8.535981788896137 +47.350361242616586 +428.92850901218077 +-205.2466929313773 +82.03278590068308 +0 +120 +absolute + + + +0.01 +smooth + +8.535981570668046 +47.35036114682993 +428.92847988805204 +-205.24653725675557 +82.03900160939048 +0 +120 +absolute + + + +0.01 +smooth + +8.53598135334868 +47.35036105136682 +428.9284508759076 +-205.24638002737956 +82.0451969916223 +0 +120 +absolute + + + +0.01 +smooth + +8.535981136943617 +47.35036095622998 +428.92842197638413 +-205.24622126302677 +82.05137187439497 +0 +120 +absolute + + + +0.01 +smooth + +8.535980921458439 +47.350360861422125 +428.9283931901186 +-205.24606098347442 +82.057526084725 +0 +120 +absolute + + + +0.01 +smooth + +8.535980706898725 +47.350360766946 +428.9283645177478 +-205.2458992084999 +82.06365944962877 +0 +120 +absolute + + + +0.01 +smooth + +8.535980493270053 +47.35036067280433 +428.9283359599085 +-205.24573595788053 +82.0697717961228 +0 +120 +absolute + + + +0.01 +smooth + +8.535980280578 +47.35036057899983 +428.92830751723767 +-205.24557125139364 +82.07586295122351 +0 +120 +absolute + + + +0.01 +smooth + +8.535980068828147 +47.35036048553527 +428.9282791903721 +-205.2454051088166 +82.0819327419474 +0 +120 +absolute + + + +0.01 +smooth + +8.535979858026073 +47.35036039241333 +428.92825097994853 +-205.2452375499267 +82.08798099531089 +0 +120 +absolute + + + +0.01 +smooth + +8.535979648177355 +47.350360299636755 +428.9282228866041 +-205.24506859450133 +82.09400753833046 +0 +120 +absolute + + + +0.01 +smooth + +8.535979439287575 +47.35036020720828 +428.9281949109753 +-205.24489826231778 +82.10001219802255 +0 +120 +absolute + + + +0.01 +smooth + +8.535979231160736 +47.3503601150482 +428.92816703193176 +-205.24471585508334 +82.10600002155562 +0 +120 +absolute + + + +0.01 +smooth + +8.535979023508927 +47.35036002303925 +428.9281392183318 +-205.24450605217103 +82.1119784317841 +0 +120 +absolute + + + +0.01 +smooth + +8.535978816335463 +47.35035993118326 +428.9281114704309 +-205.24426919497236 +82.11794730552288 +0 +120 +absolute + + + +0.01 +smooth + +8.535978609646165 +47.350359839483176 +428.92808378875304 +-205.24400575795855 +82.12390645511607 +0 +120 +absolute + + + +0.01 +smooth + +8.535978403446846 +47.35035974794185 +428.92805617382254 +-205.2437162156009 +82.12985569290787 +0 +120 +absolute + + + +0.01 +smooth + +8.535978197743317 +47.35035965656219 +428.9280286261632 +-205.2434010423705 +82.13579483124232 +0 +120 +absolute + + + +0.01 +smooth + +8.535977992541401 +47.35035956534707 +428.928001146299 +-205.2430607127387 +82.1417236824636 +0 +120 +absolute + + + +0.01 +smooth + +8.535977787846909 +47.3503594742994 +428.9279737347542 +-205.2426957011766 +82.14764205891586 +0 +120 +absolute + + + +0.01 +smooth + +8.535977583665655 +47.35035938342206 +428.9279463920528 +-205.24230648215556 +82.1535497729432 +0 +120 +absolute + + + +0.01 +smooth + +8.535977380003459 +47.350359292717954 +428.92791911871893 +-205.24189353014683 +82.1594466368898 +0 +120 +absolute + + + +0.01 +smooth + +8.535977176866131 +47.35035920218996 +428.92789191527635 +-205.2414573196215 +82.16533246309972 +0 +120 +absolute + + + +0.01 +smooth + +8.535976974259485 +47.350359111840966 +428.9278647822494 +-205.2409983250509 +82.17120706391712 +0 +120 +absolute + + + +0.01 +smooth + +8.535976772189343 +47.35035902167387 +428.92783772016213 +-205.24051702090622 +82.17707025168619 +0 +120 +absolute + + + +0.01 +smooth + +8.535976570661512 +47.350358931691545 +428.92781072953835 +-205.24001388165863 +82.18292183875094 +0 +120 +absolute + + + +0.01 +smooth + +8.535976369681812 +47.35035884189691 +428.92778381090216 +-205.23948938177946 +82.18876163745557 +0 +120 +absolute + + + +0.01 +smooth + +8.535976169256056 +47.35035875229284 +428.92775696477787 +-205.23894399573982 +82.19458946014424 +0 +120 +absolute + + + +0.01 +smooth + +8.535975969390059 +47.35035866288222 +428.9277301916893 +-205.23837819801108 +82.20040511916105 +0 +120 +absolute + + + +0.01 +smooth + +8.535975770089639 +47.35035857366796 +428.9277034921607 +-205.23779246306444 +82.20620842685014 +0 +120 +absolute + + + +0.01 +smooth + +8.53597557136061 +47.35035848465295 +428.92767686671596 +-205.23718726537103 +82.2119991955556 +0 +120 +absolute + + + +0.01 +smooth + +8.53597537320878 +47.35035839584004 +428.9276503158791 +-205.23656307940215 +82.21777723762163 +0 +120 +absolute + + + +0.01 +smooth + +8.535975175639976 +47.35035830723218 +428.92762384017436 +-205.23592037962902 +82.22354236539235 +0 +120 +absolute + + + +0.01 +smooth + +8.535974978660002 +47.35035821883221 +428.9275974401255 +-205.2352596405228 +82.2292943912118 +0 +120 +absolute + + + +0.01 +smooth + +8.53597478227468 +47.350358130643045 +428.92757111625684 +-205.2345813365548 +82.23503312742419 +0 +120 +absolute + + + +0.01 +smooth + +8.535974586489825 +47.35035804266758 +428.92754486909234 +-205.23388594219625 +82.24075838637366 +0 +120 +absolute + + + +0.01 +smooth + +8.535974391311244 +47.35035795490868 +428.9275186991558 +-205.23317393191826 +82.2464699804043 +0 +120 +absolute + + + +0.01 +smooth + +8.535974196744764 +47.35035786736927 +428.92749260697184 +-205.23244578019225 +82.25216772186029 +0 +120 +absolute + + + +0.01 +smooth + +8.535974002796191 +47.35035778005222 +428.9274665930641 +-205.23170196148936 +82.25785142308571 +0 +120 +absolute + + + +0.01 +smooth + +8.535973809471344 +47.350357692960415 +428.92744065795654 +-205.23094295028068 +82.26352089642472 +0 +120 +absolute + + + +0.01 +smooth + +8.535973616776038 +47.35035760609678 +428.9274148021737 +-205.2301692210377 +82.26917595422147 +0 +120 +absolute + + + +0.01 +smooth + +8.535973424716087 +47.350357519464154 +428.9273890262391 +-205.22938124823142 +82.27481640882003 +0 +120 +absolute + + + +0.01 +smooth + +8.535973233297304 +47.350357433065454 +428.9273633306771 +-205.22857950633315 +82.28044207256458 +0 +120 +absolute + + + +0.01 +smooth + +8.535973042525509 +47.350357346903586 +428.9273377160117 +-205.22776446981416 +82.28605275779925 +0 +120 +absolute + + + +0.01 +smooth + +8.53597285240651 +47.350357260981404 +428.9273121827667 +-205.2269366131456 +82.29164827686814 +0 +120 +absolute + + + +0.01 +smooth + +8.535972662946131 +47.350357175301845 +428.92728673146655 +-205.22609641079876 +82.29722844211541 +0 +120 +absolute + + + +0.01 +smooth + +8.535972474150181 +47.35035708986776 +428.9272613626351 +-205.22524433724487 +82.3027930658852 +0 +120 +absolute + + + +0.01 +smooth + +8.535972286024474 +47.350357004682046 +428.92723607679636 +-205.22438086695507 +82.30834196052159 +0 +120 +absolute + + + +0.01 +smooth + +8.535972098574833 +47.350356919747625 +428.9272108744746 +-205.22350647440075 +82.31387493836877 +0 +120 +absolute + + + +0.01 +smooth + +8.53597191180706 +47.350356835067345 +428.9271857561936 +-205.2226216340529 +82.31939181177083 +0 +120 +absolute + + + +0.01 +smooth + +8.535971725726982 +47.350356750644124 +428.9271607224774 +-205.22172682038294 +82.32489239307192 +0 +120 +absolute + + + +0.01 +smooth + +8.53597154034041 +47.350356666480856 +428.92713577385035 +-205.2208225078621 +82.33037649461619 +0 +120 +absolute + + + +0.01 +smooth + +8.535971355653155 +47.350356582580396 +428.9271109108363 +-205.21990917096147 +82.3358439287477 +0 +120 +absolute + + + +0.01 +smooth + +8.535971171671038 +47.35035649894567 +428.9270861339593 +-205.21898728415238 +82.34129450781069 +0 +120 +absolute + + + +0.01 +smooth + +8.535970988399873 +47.350356415579554 +428.9270614437434 +-205.218057321906 +82.3467280441492 +0 +120 +absolute + + + +0.01 +smooth + +8.535970805845471 +47.35035633248494 +428.92703684071273 +-205.21711975869363 +82.3521443501074 +0 +120 +absolute + + + +0.01 +smooth + +8.53597062401365 +47.35035624966472 +428.9270123253913 +-205.21617506898647 +82.35754323802938 +0 +120 +absolute + + + +0.01 +smooth + +8.535970442910227 +47.35035616712179 +428.9269878983031 +-205.2152237272557 +82.36292452025933 +0 +120 +absolute + + + +0.01 +smooth + +8.535970262541012 +47.350356084859044 +428.92696355997225 +-205.21426620797263 +82.36828800914137 +0 +120 +absolute + + + +0.01 +smooth + +8.535970082911824 +47.35035600287935 +428.9269393109229 +-205.21330298560838 +82.37363351701961 +0 +120 +absolute + + + +0.01 +smooth + +8.535969904028477 +47.35035592118562 +428.92691515167894 +-205.21233453463427 +82.37896085623818 +0 +120 +absolute + + + +0.01 +smooth + +8.535969725896786 +47.35035583978074 +428.9268910827644 +-205.21136132952148 +82.38426983914121 +0 +120 +absolute + + + +0.01 +smooth + +8.535969548522566 +47.35035575866759 +428.92686710470343 +-205.21038384474127 +82.38956027807288 +0 +120 +absolute + + + +0.01 +smooth + +8.53596937191163 +47.350355677849066 +428.92684321802005 +-205.20940255476484 +82.39483198537725 +0 +120 +absolute + + + +0.01 +smooth + +8.535969196069797 +47.35035559732807 +428.9268194232384 +-205.2084179340634 +82.4000847733985 +0 +120 +absolute + + + +0.01 +smooth + +8.53596902100288 +47.35035551710748 +428.92679572088235 +-205.20743045710827 +82.40531845448072 +0 +120 +absolute + + + +0.01 +smooth + +8.535968846716692 +47.35035543719019 +428.92677211147605 +-205.20644059837053 +82.41053284096809 +0 +120 +absolute + + + +0.01 +smooth + +8.535968673217052 +47.35035535757909 +428.9267485955436 +-205.20544883232154 +82.4157277452047 +0 +120 +absolute + + + +0.01 +smooth + +8.535968500509773 +47.35035527827708 +428.926725173609 +-205.20445563343247 +82.4209029795347 +0 +120 +absolute + + + +0.01 +smooth + +8.535968328600669 +47.35035519928702 +428.9267018461963 +-205.20346147617457 +82.42605835630224 +0 +120 +absolute + + + +0.01 +smooth + +8.535968157495557 +47.35035512061185 +428.92667861382955 +-205.20246683501898 +82.43119368785142 +0 +120 +absolute + + + +0.01 +smooth + +8.53596798720025 +47.35035504225442 +428.9266554770328 +-205.20147218443708 +82.43630878652638 +0 +120 +absolute + + + +0.01 +smooth + +8.535967817720564 +47.35035496421764 +428.9266324363301 +-205.20047799889994 +82.44140346467125 +0 +120 +absolute + + + +0.01 +smooth + +8.535967649062318 +47.35035488650439 +428.9266094922455 +-205.19948475287893 +82.44647753463016 +0 +120 +absolute + + + +0.01 +smooth + +8.53596748123132 +47.35035480911756 +428.92658664530313 +-205.1984929208452 +82.45153080874725 +0 +120 +absolute + + + +0.01 +smooth + +8.535967314233389 +47.35035473206004 +428.9265638960269 +-205.19750297726998 +82.45656309936666 +0 +120 +absolute + + + +0.01 +smooth + +8.535967148074342 +47.35035465533475 +428.92654124494095 +-205.19651539662448 +82.46157421883248 +0 +120 +absolute + + + +0.01 +smooth + +8.535966982759987 +47.35035457894453 +428.9265186925694 +-205.19553065338 +82.46656397948887 +0 +120 +absolute + + + +0.01 +smooth + +8.535966818296146 +47.35035450289232 +428.9264962394362 +-205.19454922200768 +82.47153219367999 +0 +120 +absolute + + + +0.01 +smooth + +8.53596665468863 +47.350354427180974 +428.9264738860653 +-205.1935715769788 +82.47647867374991 +0 +120 +absolute + + + +0.01 +smooth + +8.535966491943256 +47.350354351813394 +428.9264516329809 +-205.1925981927646 +82.48140323204281 +0 +120 +absolute + + + +0.01 +smooth + +8.53596633006584 +47.35035427679249 +428.9264294807071 +-205.19162954383623 +82.4863056809028 +0 +120 +absolute + + + +0.01 +smooth + +8.535966169062194 +47.350354202121125 +428.9264074297679 +-205.190666104665 +82.491185832674 +0 +120 +absolute + + + +0.01 +smooth + +8.535966008938136 +47.3503541278022 +428.9263854806872 +-205.1897083497221 +82.49604349970056 +0 +120 +absolute + + + +0.01 +smooth + +8.53596584969948 +47.350354053838615 +428.92636363398924 +-205.18875675347877 +82.50087849432663 +0 +120 +absolute + + + +0.01 +smooth + +8.535965691352038 +47.350353980233244 +428.92634189019805 +-205.18781179040622 +82.50569062889629 +0 +120 +absolute + + + +0.01 +smooth + +8.535965533901631 +47.350353906988985 +428.9263202498376 +-205.18687393497572 +82.51047971575372 +0 +120 +absolute + + + +0.01 +smooth + +8.535965377354067 +47.350353834108724 +428.926298713432 +-205.18594366165843 +82.51524556724303 +0 +120 +absolute + + + +0.01 +smooth + +8.535965221715168 +47.350353761595365 +428.92627728150524 +-205.18502144492564 +82.51998799570833 +0 +120 +absolute + + + +0.01 +smooth + +8.535965066990745 +47.35035368945179 +428.92625595458145 +-205.18410775924852 +82.52470681349378 +0 +120 +absolute + + + +0.01 +smooth + +8.535964913186612 +47.35035361768089 +428.92623473318463 +-205.1832030790984 +82.52940183294353 +0 +120 +absolute + + + +0.01 +smooth + +8.535964760306713 +47.35035354628473 +428.9262136176649 +-205.18230781581792 +82.53407291888011 +0 +120 +absolute + + + +0.01 +smooth + +8.535964608045544 +47.35035347513097 +428.9261925796454 +-205.18141190615557 +82.53872859217866 +0 +120 +absolute + + + +0.01 +smooth + +8.535964456182164 +47.350353404124036 +428.9261715985352 +-205.1805079293268 +82.54337500236849 +0 +120 +absolute + + + +0.01 +smooth + +8.535964304722627 +47.350353333266995 +428.92615067479034 +-205.17959606129193 +82.54801194701834 +0 +120 +absolute + + + +0.01 +smooth + +8.535964153672984 +47.35035326256296 +428.926129808867 +-205.17867647801128 +82.55263922369701 +0 +120 +absolute + + + +0.01 +smooth + +8.535964003039279 +47.35035319201496 +428.92610900122094 +-205.17774935544486 +82.5572566299732 +0 +120 +absolute + + + +0.01 +smooth + +8.535963852827571 +47.35035312162606 +428.92608825230815 +-205.17681486955303 +82.5618639634157 +0 +120 +absolute + + + +0.01 +smooth + +8.53596370304391 +47.350353051399395 +428.9260675625848 +-205.17587319629615 +82.56646102159337 +0 +120 +absolute + + + +0.01 +smooth + +8.535963553694339 +47.35035298133796 +428.9260469325066 +-205.17492451163432 +82.57104760207484 +0 +120 +absolute + + + +0.01 +smooth + +8.535963404784916 +47.35035291144489 +428.92602636252985 +-205.17396899152783 +82.57562350242891 +0 +120 +absolute + + + +0.01 +smooth + +8.535963256321686 +47.350352841723215 +428.9260058531103 +-205.1730068119369 +82.58018852022437 +0 +120 +absolute + + + +0.01 +smooth + +8.535963108310707 +47.35035277217603 +428.9259854047043 +-205.17203814882183 +82.58474245302997 +0 +120 +absolute + + + +0.01 +smooth + +8.535962960758031 +47.350352702806425 +428.9259650177677 +-205.171063178143 +82.58928509841452 +0 +120 +absolute + + + +0.01 +smooth + +8.535962813669697 +47.35035263361745 +428.9259446927563 +-205.1700820758604 +82.5938162539467 +0 +120 +absolute + + + +0.01 +smooth + +8.535962667051763 +47.35035256461216 +428.9259244301261 +-205.1690950179344 +82.59833571719531 +0 +120 +absolute + + + +0.01 +smooth + +8.535962520910283 +47.35035249579367 +428.9259042303335 +-205.16810218032532 +82.60284328572918 +0 +120 +absolute + + + +0.01 +smooth + +8.535962375251302 +47.350352427165035 +428.925884093834 +-205.16710373899326 +82.60733875711698 +0 +120 +absolute + + + +0.01 +smooth + +8.535962230080871 +47.35035235872931 +428.92586402108395 +-205.1660998698986 +82.6118219289275 +0 +120 +absolute + + + +0.01 +smooth + +8.535962085405043 +47.350352290489596 +428.92584401253913 +-205.16509074900145 +82.61629259872952 +0 +120 +absolute + + + +0.01 +smooth + +8.535961941229868 +47.35035222244894 +428.92582406865574 +-205.16407655226223 +82.6207505640918 +0 +120 +absolute + + + +0.01 +smooth + +8.535961797561399 +47.350352154610455 +428.9258041898898 +-205.1630574556411 +82.62519562258312 +0 +120 +absolute + + + +0.01 +smooth + +8.535961654405684 +47.35035208697717 +428.925784376697 +-205.16203363509834 +82.62962757177222 +0 +120 +absolute + + + +0.01 +smooth + +8.535961511768773 +47.3503520195522 +428.92576462953366 +-205.16100526659417 +82.63404620922788 +0 +120 +absolute + + + +0.01 +smooth + +8.53596136965672 +47.35035195233856 +428.9257449488557 +-205.15997252608886 +82.63845133251885 +0 +120 +absolute + + + +0.01 +smooth + +8.535961228075571 +47.35035188533937 +428.92572533511884 +-205.15893558954258 +82.64284273921388 +0 +120 +absolute + + + +0.01 +smooth + +8.535961087031382 +47.350351818557705 +428.9257057887794 +-205.15789463291568 +82.64722022688177 +0 +120 +absolute + + + +0.01 +smooth + +8.535960946530196 +47.3503517519966 +428.92568631029326 +-205.15684983216835 +82.65158359309127 +0 +120 +absolute + + + +0.01 +smooth + +8.535960806578071 +47.35035168565917 +428.9256669001165 +-205.15580136326088 +82.65593263541115 +0 +120 +absolute + + + +0.01 +smooth + +8.53596066718106 +47.35035161954847 +428.9256475587052 +-205.15474940215358 +82.66026715141018 +0 +120 +absolute + + + +0.01 +smooth + +8.535960528345207 +47.35035155366757 +428.92562828651506 +-205.15369412480658 +82.66458693865708 +0 +120 +absolute + + + +0.01 +smooth + +8.535960390076568 +47.35035148801955 +428.9256090840024 +-205.15263570718017 +82.6688917947207 +0 +120 +absolute + + + +0.01 +smooth + +8.535960252381185 +47.350351422607474 +428.92558995162295 +-205.1515743252346 +82.67318151716971 +0 +120 +absolute + + + +0.01 +smooth + +8.535960115265116 +47.35035135743442 +428.92557088983284 +-205.1505101549301 +82.67745590357293 +0 +120 +absolute + + + +0.01 +smooth + +8.535959978734411 +47.350351292503476 +428.92555189908796 +-205.14944337222695 +82.68171475149909 +0 +120 +absolute + + + +0.01 +smooth + +8.535959842795117 +47.350351227817676 +428.92553297984455 +-205.14837415308537 +82.68595785851699 +0 +120 +absolute + + + +0.01 +smooth + +8.535959707453292 +47.35035116338014 +428.9255141325585 +-205.14730267346565 +82.69018502219537 +0 +120 +absolute + + + +0.01 +smooth + +8.535959572714983 +47.350351099193915 +428.92549535768563 +-205.1462291093281 +82.69439604010303 +0 +120 +absolute + + + +0.01 +smooth + +8.53595943858624 +47.35035103526209 +428.92547665568225 +-205.14515363663284 +82.6985907098087 +0 +120 +absolute + + + +0.01 +smooth + +8.53595930507311 +47.3503509715877 +428.92545802700414 +-205.14407643134018 +82.70276882888113 +0 +120 +absolute + + + +0.01 +smooth + +8.53595917218165 +47.35035090817386 +428.9254394721073 +-205.14299766941036 +82.70693019488911 +0 +120 +absolute + + + +0.01 +smooth + +8.535959039917907 +47.35035084502361 +428.92542099144777 +-205.1419175268036 +82.71107460540141 +0 +120 +absolute + + + +0.01 +smooth + +8.535958908287933 +47.350350782140055 +428.9254025854816 +-205.14083617948017 +82.71520185798678 +0 +120 +absolute + + + +0.01 +smooth + +8.535958777297779 +47.350350719526254 +428.9253842546647 +-205.13975380340037 +82.71931175021399 +0 +120 +absolute + + + +0.01 +smooth + +8.535958646953496 +47.35035065718529 +428.92536599945316 +-205.13867057452438 +82.72340407965183 +0 +120 +absolute + + + +0.01 +smooth + +8.535958517261134 +47.350350595120204 +428.925347820303 +-205.1375866688125 +82.72747864386899 +0 +120 +absolute + + + +0.01 +smooth + +8.535958388226744 +47.35035053333411 +428.92532971767014 +-205.13650226222498 +82.73153524043431 +0 +120 +absolute + + + +0.01 +smooth + +8.535958259856375 +47.350350471830055 +428.92531169201055 +-205.13541753072204 +82.73557366691655 +0 +120 +absolute + + + +0.01 +smooth + +8.53595813215608 +47.35035041061113 +428.92529374378034 +-205.13433265026393 +82.73959372088441 +0 +120 +absolute + + + +0.01 +smooth + +8.535958005131912 +47.35035034968038 +428.9252758734354 +-205.1332477968109 +82.74359519990671 +0 +120 +absolute + + + +0.01 +smooth + +8.535957878789915 +47.350350289040904 +428.92525808143176 +-205.13216314632322 +82.74757790155222 +0 +120 +absolute + + + +0.01 +smooth + +8.535957753136145 +47.35035022869577 +428.9252403682255 +-205.13107887476113 +82.75154162338966 +0 +120 +absolute + + + +0.01 +smooth + +8.53595762817665 +47.35035016864804 +428.9252227342726 +-205.12999515808485 +82.75548616298782 +0 +120 +absolute + + + +0.01 +smooth + +8.535957503917484 +47.350350108900805 +428.9252051800289 +-205.12891217225467 +82.75941131791548 +0 +120 +absolute + + + +0.01 +smooth + +8.535957380364694 +47.35035004945712 +428.9251877059506 +-205.12783009323084 +82.76331688574136 +0 +120 +absolute + + + +0.01 +smooth + +8.53595725752433 +47.35034999032007 +428.92517031249355 +-205.12674909697358 +82.76720266403427 +0 +120 +absolute + + + +0.01 +smooth + +8.535957135402448 +47.35034993149273 +428.9251530001138 +-205.12566935944318 +82.77106845036295 +0 +120 +absolute + + + +0.01 +smooth + +8.535957014005097 +47.35034987297816 +428.9251357692675 +-205.12459105659985 +82.77491404229617 +0 +120 +absolute + + + +0.01 +smooth + +8.535956893338325 +47.350349814779435 +428.92511862041044 +-205.12351436440383 +82.7787392374027 +0 +120 +absolute + + + +0.01 +smooth + +8.535956773408184 +47.35034975689964 +428.92510155399873 +-205.12243945881545 +82.78254383325131 +0 +120 +absolute + + + +0.01 +smooth + +8.535956654220724 +47.35034969934185 +428.92508457048825 +-205.12136651579488 +82.78632762741073 +0 +120 +absolute + + + +0.01 +smooth + +8.535956535781999 +47.35034964210912 +428.9250676703352 +-205.1202957113024 +82.79009041744976 +0 +120 +absolute + + + +0.01 +smooth + +8.535956418098056 +47.35034958520453 +428.9250508539954 +-205.11922722129822 +82.79383200093713 +0 +120 +absolute + + + +0.01 +smooth + +8.535956301174945 +47.35034952863117 +428.92503412192485 +-205.11816122174267 +82.79755217544167 +0 +120 +absolute + + + +0.01 +smooth + +8.535956185018723 +47.3503494723921 +428.9250174745797 +-205.1170978885959 +82.80125073853206 +0 +120 +absolute + + + +0.01 +smooth + +8.535956069635434 +47.350349416490374 +428.92500091241584 +-205.11603739781825 +82.80492748777712 +0 +120 +absolute + + + +0.01 +smooth + +8.535955955031133 +47.350349360929094 +428.9249844358893 +-205.1149799253699 +82.8085822207456 +0 +120 +absolute + + + +0.01 +smooth + +8.535955841211866 +47.35034930571132 +428.9249680454561 +-205.1139256472112 +82.81221473500628 +0 +120 +absolute + + + +0.01 +smooth + +8.535955728183689 +47.350349250840125 +428.92495174157216 +-205.11287473930227 +82.81582482812789 +0 +120 +absolute + + + +0.01 +smooth + +8.53595561595265 +47.3503491963186 +428.9249355246935 +-205.11182737760345 +82.81941229767921 +0 +120 +absolute + + + +0.01 +smooth + +8.5359555045248 +47.35034914214978 +428.9249193952762 +-205.11078373807493 +82.822976941229 +0 +120 +absolute + + + +0.01 +smooth + +8.535955393906189 +47.350349088336785 +428.92490335377624 +-205.109743996677 +82.82651855634604 +0 +120 +absolute + + + +0.01 +smooth + +8.535955284102869 +47.35034903488265 +428.9248874006496 +-205.1087083293699 +82.83003694059909 +0 +120 +absolute + + + +0.01 +smooth + +8.535955175120893 +47.35034898179046 +428.92487153635227 +-205.10767691211393 +82.8335318915569 +0 +120 +absolute + + + +0.01 +smooth + +8.535955066966306 +47.3503489290633 +428.92485576134015 +-205.10664992086924 +82.83700320678825 +0 +120 +absolute + + + +0.01 +smooth + +8.535954959645162 +47.35034887670423 +428.9248400760694 +-205.10562753159616 +82.8404506838619 +0 +120 +absolute + + + +0.01 +smooth + +8.535954853163512 +47.35034882471633 +428.924824480996 +-205.10460992025486 +82.84387412034663 +0 +120 +absolute + + + +0.01 +smooth + +8.535954747527406 +47.35034877310267 +428.92480897657583 +-205.1035972628057 +82.84727331381116 +0 +120 +absolute + + + +0.01 +smooth + +8.535954642742894 +47.35034872186631 +428.924793563265 +-205.10258973520885 +82.85064806182429 +0 +120 +absolute + + + +0.01 +smooth + +8.535954538816029 +47.350348671010345 +428.92477824151945 +-205.1015875134245 +82.85399816195479 +0 +120 +absolute + + + +0.01 +smooth + +8.53595443575286 +47.35034862053784 +428.9247630117952 +-205.10059077341305 +82.8573234117714 +0 +120 +absolute + + + +0.01 +smooth + +8.535954333538726 +47.350348570442286 +428.9247478728316 +-205.0995994022992 +82.8606242332412 +0 +120 +absolute + + + +0.01 +smooth + +8.535954231774596 +47.35034852053954 +428.9247327915 +-205.09860791228573 +82.86391263507265 +0 +120 +absolute + + + +0.01 +smooth + +8.535954130310076 +47.35034847076045 +428.924717755271 +-205.09761424935323 +82.86719312441451 +0 +120 +absolute + + + +0.01 +smooth + +8.535954029151402 +47.35034842110824 +428.92470276459693 +-205.09661853930484 +82.87046548517935 +0 +120 +absolute + + + +0.01 +smooth + +8.535953928304815 +47.35034837158617 +428.9246878199311 +-205.0956209079441 +82.87372950127983 +0 +120 +absolute + + + +0.01 +smooth + +8.535953827776554 +47.3503483221975 +428.92467292172597 +-205.09462148107443 +82.87698495662855 +0 +120 +absolute + + + +0.01 +smooth + +8.535953727572863 +47.35034827294549 +428.9246580704348 +-205.09362038449933 +82.88023163513816 +0 +120 +absolute + + + +0.01 +smooth + +8.53595362769998 +47.35034822383336 +428.9246432665101 +-205.09261774402214 +82.88346932072128 +0 +120 +absolute + + + +0.01 +smooth + +8.535953528164145 +47.350348174864386 +428.9246285104048 +-205.09161368544622 +82.8866977972905 +0 +120 +absolute + + + +0.01 +smooth + +8.535953428971595 +47.35034812604181 +428.9246138025717 +-205.0906083345751 +82.8899168487585 +0 +120 +absolute + + + +0.01 +smooth + +8.535953330128574 +47.3503480773689 +428.9245991434636 +-205.08960181721218 +82.89312625903787 +0 +120 +absolute + + + +0.01 +smooth + +8.535953231641328 +47.3503480288489 +428.92458453353356 +-205.08859425916089 +82.8963258120413 +0 +120 +absolute + + + +0.01 +smooth + +8.535953133516083 +47.35034798048504 +428.9245699732342 +-205.0875857862246 +82.89951529168133 +0 +120 +absolute + + + +0.01 +smooth + +8.535953035759084 +47.3503479322806 +428.9245554630183 +-205.0865765242067 +82.9026944818706 +0 +120 +absolute + + + +0.01 +smooth + +8.53595293837658 +47.350347884238836 +428.92454100333913 +-205.0855665989108 +82.90586316652183 +0 +120 +absolute + + + +0.01 +smooth + +8.535952841374803 +47.35034783636296 +428.9245265946488 +-205.08455613614015 +82.90902112954753 +0 +120 +absolute + + + +0.01 +smooth + +8.535952744759992 +47.35034778865626 +428.9245122374007 +-205.08354526169816 +82.91216815486037 +0 +120 +absolute + + + +0.01 +smooth + +8.535952648538391 +47.35034774112197 +428.9244979320476 +-205.08253410138838 +82.91530402637301 +0 +120 +absolute + + + +0.01 +smooth + +8.535952552716237 +47.35034769376334 +428.92448367904194 +-205.08152278101414 +82.91842852799799 +0 +120 +absolute + + + +0.01 +smooth + +8.535952457299773 +47.35034764658366 +428.9244694788372 +-205.08051142637893 +82.92154144364805 +0 +120 +absolute + + + +0.01 +smooth + +8.53595236229524 +47.35034759958613 +428.9244553318856 +-205.0795001632861 +82.92464255723574 +0 +120 +absolute + + + +0.01 +smooth + +8.535952267708872 +47.35034755277401 +428.9244412386403 +-205.07848911753902 +82.92773165267371 +0 +120 +absolute + + + +0.01 +smooth + +8.535952173546917 +47.3503475061506 +428.9244271995543 +-205.0774784149414 +82.93080851387461 +0 +120 +absolute + + + +0.01 +smooth + +8.535952079815607 +47.35034745971909 +428.92441321508 +-205.07646818129624 +82.933872924751 +0 +120 +absolute + + + +0.01 +smooth + +8.535951986521189 +47.35034741348276 +428.92439928567046 +-205.0754585424073 +82.93692466921557 +0 +120 +absolute + + + +0.01 +smooth + +8.5359518936699 +47.35034736744487 +428.9243854117786 +-205.07444962407791 +82.93996353118092 +0 +120 +absolute + + + +0.01 +smooth + +8.535951801267977 +47.35034732160864 +428.9243715938569 +-205.07344155211135 +82.94298929455965 +0 +120 +absolute + + + +0.01 +smooth + +8.535951709321667 +47.35034727597736 +428.9243578323587 +-205.07243445231126 +82.94600174326445 +0 +120 +absolute + + + +0.01 +smooth + +8.535951617837206 +47.35034723055426 +428.92434412773656 +-205.0714284504809 +82.94900066120792 +0 +120 +absolute + + + +0.01 +smooth + +8.535951526820831 +47.35034718534259 +428.92433048044325 +-205.07042367242374 +82.95198583230264 +0 +120 +absolute + + + +0.01 +smooth + +8.535951436278792 +47.350347140345626 +428.9243168909318 +-205.06942024394334 +82.95495704046132 +0 +120 +absolute + + + +0.01 +smooth + +8.535951346217319 +47.35034709556658 +428.92430335965474 +-205.06841829084286 +82.95791406959651 +0 +120 +absolute + + + +0.01 +smooth + +8.535951256642656 +47.35034705100874 +428.9242898870652 +-205.06741793892593 +82.96085670362088 +0 +120 +absolute + + + +0.01 +smooth + +8.535951167561043 +47.35034700667535 +428.924276473616 +-205.0664193139959 +82.96378472644705 +0 +120 +absolute + + + +0.01 +smooth + +8.535951078978716 +47.350346962569624 +428.92426311975976 +-205.06542254185612 +82.96669792198762 +0 +120 +absolute + + + +0.01 +smooth + +8.535950990901924 +47.35034691869487 +428.9242498259495 +-205.06442774831018 +82.96959607415526 +0 +120 +absolute + + + +0.01 +smooth + +8.535950903336902 +47.350346875054306 +428.92423659263807 +-205.0634350591614 +82.97247896686258 +0 +120 +absolute + + + +0.01 +smooth + +8.535950816289887 +47.35034683165118 +428.924223420278 +-205.06244460021313 +82.97534638402217 +0 +120 +absolute + + + +0.01 +smooth + +8.535950729767126 +47.350346788488785 +428.92421030932263 +-205.06145649726898 +82.97819810954674 +0 +120 +absolute + + + +0.01 +smooth + +8.53595064377485 +47.350346745570306 +428.9241972602244 +-205.0604708761322 +82.98103392734883 +0 +120 +absolute + + + +0.01 +smooth + +8.535950558319309 +47.35034670289905 +428.92418427343625 +-205.0594878626063 +82.9838536213411 +0 +120 +absolute + + + +0.01 +smooth + +8.535950473406736 +47.35034666047825 +428.924171349411 +-205.05850758249468 +82.9866569754362 +0 +120 +absolute + + + +0.01 +smooth + +8.535950389043375 +47.35034661831116 +428.92415848860156 +-205.05753016160077 +82.98944377354671 +0 +120 +absolute + + + +0.01 +smooth + +8.535950305235463 +47.35034657640102 +428.92414569146064 +-205.05655572572797 +82.9922137995853 +0 +120 +absolute + + + +0.01 +smooth + +8.535950221989243 +47.3503465347511 +428.92413295844125 +-205.05558440067975 +82.99496683746457 +0 +120 +absolute + + + +0.01 +smooth + +8.535950139310952 +47.35034649336464 +428.9241202899961 +-205.0546163122595 +82.99770267109717 +0 +120 +absolute + + + +0.01 +smooth + +8.535950057206833 +47.350346452244885 +428.924107686578 +-205.05365158627063 +83.00042108439568 +0 +120 +absolute + + + +0.01 +smooth + +8.535949975683126 +47.350346411395115 +428.9240951486398 +-205.05269034851656 +83.00312186127276 +0 +120 +absolute + + + +0.01 +smooth + +8.53594989474607 +47.35034637081855 +428.92408267663444 +-205.05173272480076 +83.00580478564106 +0 +120 +absolute + + + +0.01 +smooth + +8.535949814401903 +47.35034633051845 +428.92407027101467 +-205.05077884092663 +83.00846964141317 +0 +120 +absolute + + + +0.01 +smooth + +8.535949734656867 +47.35034629049808 +428.92405793223344 +-205.04982882269755 +83.01111621250172 +0 +120 +absolute + + + +0.01 +smooth + +8.535949655517204 +47.35034625076068 +428.92404566074333 +-205.048882795917 +83.01374428281935 +0 +120 +absolute + + + +0.01 +smooth + +8.535949576989152 +47.35034621130951 +428.92403345699734 +-205.04794088638835 +83.01635363627867 +0 +120 +absolute + + + +0.01 +smooth + +8.53594949907895 +47.3503461721478 +428.9240213214483 +-205.0470032199151 +83.01894405679232 +0 +120 +absolute + + + +0.01 +smooth + +8.535949421792841 +47.35034613327883 +428.9240092545491 +-205.0460699223006 +83.02151532827293 +0 +120 +absolute + + + +0.01 +smooth + +8.535949345137062 +47.35034609470584 +428.9239972567524 +-205.0451411193483 +83.02406723463312 +0 +120 +absolute + + + +0.01 +smooth + +8.535949269117856 +47.35034605643207 +428.9239853285112 +-205.04421693686157 +83.02659955978551 +0 +120 +absolute + + + +0.01 +smooth + +8.53594919374146 +47.3503460184608 +428.92397347027827 +-205.04329750064397 +83.02911208764273 +0 +120 +absolute + + + +0.01 +smooth + +8.535949119014116 +47.35034598079525 +428.9239616825065 +-205.04238293649877 +83.03160460211743 +0 +120 +absolute + + + +0.01 +smooth + +8.535949044942065 +47.35034594343869 +428.9239499656486 +-205.04147337022948 +83.03407688712218 +0 +120 +absolute + + + +0.01 +smooth + +8.535948971531544 +47.35034590639437 +428.9239383201575 +-205.0405689276395 +83.03652872656968 +0 +120 +absolute + + + +0.01 +smooth + +8.535948898788797 +47.35034586966553 +428.923926746486 +-205.03966973453225 +83.03895990437249 +0 +120 +absolute + + + +0.01 +smooth + +8.53594882672006 +47.350345833255446 +428.923915245087 +-205.03877591671113 +83.0413702044433 +0 +120 +absolute + + + +0.01 +smooth + +8.535948755331578 +47.35034579716734 +428.9239038164132 +-205.03788759997963 +83.04375941069466 +0 +120 +absolute + + + +0.01 +smooth + +8.535948684629586 +47.35034576140448 +428.92389246091756 +-205.0370049101411 +83.04612730703926 +0 +120 +absolute + + + +0.01 +smooth + +8.535948614620327 +47.35034572597013 +428.92388117905284 +-205.036127972999 +83.04847367738972 +0 +120 +absolute + + + +0.01 +smooth + +8.535948545310038 +47.35034569086751 +428.923869971272 +-205.03525691435675 +83.05079830565862 +0 +120 +absolute + + + +0.01 +smooth + +8.535948476704965 +47.350345656099904 +428.9238588380277 +-205.03439186001776 +83.05310097575864 +0 +120 +absolute + + + +0.01 +smooth + +8.535948408811343 +47.35034562167054 +428.92384777977287 +-205.03353293578544 +83.05538147160237 +0 +120 +absolute + + + +0.01 +smooth + +8.535948341635413 +47.35034558758268 +428.92383679696025 +-205.03268026746326 +83.05763957710246 +0 +120 +absolute + + + +0.01 +smooth + +8.535948275183415 +47.350345553839574 +428.92382589004285 +-205.0318339808546 +83.05987507617155 +0 +120 +absolute + + + +0.01 +smooth + +8.53594820946159 +47.35034552044447 +428.9238150594734 +-205.0309942017629 +83.0620877527222 +0 +120 +absolute + + + +0.01 +smooth + +8.535948144476182 +47.35034548740063 +428.9238043057047 +-205.03016105599158 +83.06427739066712 +0 +120 +absolute + + + +0.01 +smooth + +8.535948080233423 +47.3503454547113 +428.92379362918956 +-205.02933466934402 +83.06644377391889 +0 +120 +absolute + + + +0.01 +smooth + +8.535948016739557 +47.35034542237973 +428.92378303038106 +-205.0285151676237 +83.06858668639012 +0 +120 +absolute + + + +0.01 +smooth + +8.535947954000823 +47.35034539040916 +428.92377250973175 +-205.02770267663408 +83.07070591199349 +0 +120 +absolute + + + +0.01 +smooth + +8.535947892023463 +47.35034535880287 +428.9237620676945 +-205.02689732217848 +83.07280123464159 +0 +120 +absolute + + + +0.01 +smooth + +8.535947830813718 +47.35034532756409 +428.92375170472224 +-205.0260992300604 +83.07487243824704 +0 +120 +absolute + + + +0.01 +smooth + +8.535947770377826 +47.350345296696084 +428.92374142126783 +-205.02530852608322 +83.07691930672249 +0 +120 +absolute + + + +0.01 +smooth + +8.535947710722024 +47.35034526620209 +428.92373121778405 +-205.0245253360504 +83.07894162398057 +0 +120 +absolute + + + +0.01 +smooth + +8.53594765179006 +47.35034523605467 +428.9237210895391 +-205.02374899445337 +83.0809411959811 +0 +120 +absolute + + + +0.01 +smooth + +8.535947593126775 +47.35034520603069 +428.9237109987499 +-205.0229737820107 +83.08293273248987 +0 +120 +absolute + + + +0.01 +smooth + +8.535947534645018 +47.35034517608754 +428.92370093823223 +-205.02219863416587 +83.08491903164715 +0 +120 +absolute + + + +0.01 +smooth + +8.535947476351003 +47.35034514622862 +428.92369090855277 +-205.02142366800646 +83.08689987066651 +0 +120 +absolute + + + +0.01 +smooth + +8.53594741825095 +47.35034511645725 +428.923680910278 +-205.0206490006199 +83.08887502676147 +0 +120 +absolute + + + +0.01 +smooth + +8.535947360351074 +47.35034508677679 +428.9236709439747 +-205.01987474909382 +83.09084427714552 +0 +120 +absolute + + + +0.01 +smooth + +8.53594730265758 +47.350345057190516 +428.92366101020923 +-205.0191010305154 +83.09280739903218 +0 +120 +absolute + + + +0.01 +smooth + +8.535947245176686 +47.3503450277018 +428.9236511095483 +-205.01832796197226 +83.09476416963497 +0 +120 +absolute + + + +0.01 +smooth + +8.535947187914607 +47.35034499831397 +428.9236412425583 +-205.01755566055184 +83.0967143661674 +0 +120 +absolute + + + +0.01 +smooth + +8.535947130877558 +47.35034496903039 +428.92363140980615 +-205.0167842433417 +83.098657765843 +0 +120 +absolute + + + +0.01 +smooth + +8.535947074071748 +47.35034493985432 +428.923621611858 +-205.01601382742916 +83.10059414587526 +0 +120 +absolute + + + +0.01 +smooth + +8.535947017503396 +47.350344910789154 +428.92361184928063 +-205.01524452990176 +83.10252328347774 +0 +120 +absolute + + + +0.01 +smooth + +8.535946961178713 +47.35034488183821 +428.92360212264066 +-205.014476467847 +83.10444495586393 +0 +120 +absolute + + + +0.01 +smooth + +8.535946905103913 +47.35034485300481 +428.92359243250445 +-205.01370975835223 +83.10635894024729 +0 +120 +absolute + + + +0.01 +smooth + +8.535946849285208 +47.35034482429231 +428.9235827794387 +-205.012944518505 +83.10826501384145 +0 +120 +absolute + + + +0.01 +smooth + +8.535946793728817 +47.350344795704004 +428.92357316401007 +-205.0121808653928 +83.11016295385984 +0 +120 +absolute + + + +0.01 +smooth + +8.53594673844095 +47.35034476724326 +428.9235635867849 +-205.01141891610294 +83.11205253751598 +0 +120 +absolute + + + +0.01 +smooth + +8.535946683427824 +47.35034473891343 +428.9235540483302 +-205.01065878772314 +83.11393354202346 +0 +120 +absolute + + + +0.01 +smooth + +8.535946628695648 +47.3503447107178 +428.92354454921195 +-205.00990059734067 +83.11580574459572 +0 +120 +absolute + + + +0.01 +smooth + +8.535946574250637 +47.35034468265972 +428.92353508999713 +-205.00914446204308 +83.1176689224463 +0 +120 +absolute + + + +0.01 +smooth + +8.535946520099012 +47.350344654742536 +428.92352567125226 +-205.00839049891783 +83.11952285278872 +0 +120 +absolute + + + +0.01 +smooth + +8.535946466246974 +47.35034462696956 +428.92351629354357 +-205.00763882505223 +83.12136731283648 +0 +120 +absolute + + + +0.01 +smooth + +8.53594641270075 +47.350344599344155 +428.92350695743824 +-205.00688955753398 +83.12320207980311 +0 +120 +absolute + + + +0.01 +smooth + +8.535946359466546 +47.35034457186963 +428.9234976635023 +-205.0061428134504 +83.12502693090214 +0 +120 +absolute + + + +0.01 +smooth + +8.535946306550574 +47.350344544549316 +428.9234884123025 +-205.00539870988902 +83.12684164334702 +0 +120 +absolute + + + +0.01 +smooth + +8.535946253959056 +47.35034451738659 +428.9234792044057 +-205.00465736393738 +83.12864599435139 +0 +120 +absolute + + + +0.01 +smooth + +8.535946201698199 +47.35034449038472 +428.92347004037794 +-205.0039188926827 +83.13043976112864 +0 +120 +absolute + + + +0.01 +smooth + +8.53594614977422 +47.350344463547074 +428.92346092078606 +-205.00318341321264 +83.13222272089236 +0 +120 +absolute + + + +0.01 +smooth + +8.535946098193333 +47.350344436876995 +428.9234518461967 +-205.0024510426147 +83.13399465085604 +0 +120 +absolute + + + +0.01 +smooth + +8.535946046961747 +47.350344410377794 +428.9234428171762 +-205.00172189797607 +83.13575532823317 +0 +120 +absolute + + + +0.01 +smooth + +8.535945996085685 +47.350344384052825 +428.9234338342915 +-205.00099609638457 +83.13750453023734 +0 +120 +absolute + + + +0.01 +smooth + +8.535945945571353 +47.35034435790541 +428.92342489810886 +-205.0002737549275 +83.139242034082 +0 +120 +absolute + + + +0.01 +smooth + +8.535945895424964 +47.35034433193888 +428.9234160091948 +-204.99955499069225 +83.14096761698069 +0 +120 +absolute + + + +0.01 +smooth + +8.535945845652742 +47.350344306156586 +428.9234071681162 +-204.99883992076644 +83.14268105614694 +0 +120 +absolute + + + +0.01 +smooth + +8.535945796260888 +47.35034428056183 +428.9233983754394 +-204.99812866223743 +83.1443821287942 +0 +120 +absolute + + + +0.01 +smooth + +8.535945747255624 +47.350344255157985 +428.92338963173097 +-204.99742133219272 +83.14607061213607 +0 +120 +absolute + + + +0.01 +smooth + +8.535945698643165 +47.350344229948355 +428.9233809375577 +-204.9967180477198 +83.14774628338606 +0 +120 +absolute + + + +0.01 +smooth + +8.535945650429715 +47.350344204936256 +428.9233722934857 +-204.99601892590596 +83.14940891975758 +0 +120 +absolute + + + +0.01 +smooth + +8.5359456026215 +47.35034418012508 +428.92336370008206 +-204.995324083839 +83.15105829846428 +0 +120 +absolute + + + +0.01 +smooth + +8.535945555224725 +47.350344155518115 +428.9233551579131 +-204.99463363860613 +83.1526941967196 +0 +120 +absolute + + + +0.01 +smooth + +8.535945508245607 +47.3503441311187 +428.9233466675453 +-204.99394770729486 +83.15431639173707 +0 +120 +absolute + + + +0.01 +smooth + +8.53594546169036 +47.350344106930194 +428.9233382295455 +-204.99326640699272 +83.15592466073022 +0 +120 +absolute + + + +0.01 +smooth + +8.5359454155652 +47.350344082955914 +428.92332984447995 +-204.9925898547871 +83.15751878091257 +0 +120 +absolute + + + +0.01 +smooth + +8.535945369876336 +47.350344059199166 +428.92332151291544 +-204.9919181677655 +83.15909852949758 +0 +120 +absolute + + + +0.01 +smooth + +8.535945324629985 +47.35034403566333 +428.9233132354185 +-204.99125146301537 +83.16066368369883 +0 +120 +absolute + + + +0.01 +smooth + +8.53594527983236 +47.35034401235172 +428.9233050125557 +-204.99058985762423 +83.16221402072982 +0 +120 +absolute + + + +0.01 +smooth + +8.535945235489674 +47.35034398926767 +428.9232968448935 +-204.98993346867945 +83.16374931780405 +0 +120 +absolute + + + +0.01 +smooth + +8.535945191608144 +47.3503439664145 +428.9232887329987 +-204.98928241326857 +83.16526935213507 +0 +120 +absolute + + + +0.01 +smooth + +8.535945148193981 +47.35034394379556 +428.9232806774377 +-204.98863680847907 +83.16677390093635 +0 +120 +absolute + + + +0.01 +smooth + +8.5359451052534 +47.35034392141418 +428.92327267877704 +-204.98799677139837 +83.16826274142142 +0 +120 +absolute + + + +0.01 +smooth + +8.535945062792614 +47.350343899273696 +428.92326473758334 +-204.98736241911394 +83.16973565080382 +0 +120 +absolute + + + +0.01 +smooth + +8.535945020817836 +47.350343877377426 +428.9232568544232 +-204.98673386871323 +83.17119240629704 +0 +120 +absolute + + + +0.01 +smooth + +8.535944979335282 +47.350343855728724 +428.92324902986314 +-204.98611123728375 +83.1726327851146 +0 +120 +absolute + + + +0.01 +smooth + +8.535944938351165 +47.350343834330914 +428.92324126446977 +-204.9854946419129 +83.17405656447002 +0 +120 +absolute + + + +0.01 +smooth + +8.5359448978717 +47.35034381318732 +428.92323355880967 +-204.98488419968822 +83.17546352157683 +0 +120 +absolute + + + +0.01 +smooth + +8.535944857903095 +47.35034379230131 +428.9232259134494 +-204.98428002769714 +83.17685343364852 +0 +120 +absolute + + + +0.01 +smooth + +8.535944818451572 +47.35034377167618 +428.9232183289555 +-204.98368224302715 +83.17822607789864 +0 +120 +absolute + + + +0.01 +smooth + +8.53594477952334 +47.35034375131527 +428.92321080589454 +-204.98309096276566 +83.17958123154067 +0 +120 +absolute + + + +0.01 +smooth + +8.535944741124617 +47.35034373122194 +428.92320334483315 +-204.98250630400017 +83.18091867178813 +0 +120 +absolute + + + +0.01 +smooth + +8.53594470326161 +47.35034371139949 +428.9231959463377 +-204.98192838381814 +83.18223817585456 +0 +120 +absolute + + + +0.01 +smooth + +8.535944665940537 +47.350343691851265 +428.9231886109751 +-204.98135731930705 +83.18353952095346 +0 +120 +absolute + + + +0.01 +smooth + +8.535944629167613 +47.35034367258061 +428.92318133931167 +-204.98079322755433 +83.18482248429834 +0 +120 +absolute + + + +0.01 +smooth + +8.53594459294905 +47.35034365359085 +428.92317413191404 +-204.9802362256475 +83.18608684310274 +0 +120 +absolute + + + +0.01 +smooth + +8.535944557291064 +47.350343634885306 +428.9231669893487 +-204.979686430674 +83.18733237458017 +0 +120 +absolute + + + +0.01 +smooth + +8.535944522199866 +47.350343616467335 +428.9231599121824 +-204.97914395972126 +83.1885588559441 +0 +120 +absolute + + + +0.01 +smooth + +8.535944487681668 +47.35034359834025 +428.92315290098156 +-204.9786089298768 +83.1897660644081 +0 +120 +absolute + + + +0.01 +smooth + +8.53594445374269 +47.3503435805074 +428.9231459563129 +-204.97808145822802 +83.19095377718567 +0 +120 +absolute + + + +0.01 +smooth + +8.535944420389143 +47.350343562972114 +428.9231390787428 +-204.97756166186247 +83.19212177149032 +0 +120 +absolute + + + +0.01 +smooth + +8.535944387627238 +47.350343545737715 +428.9231322688379 +-204.97704965786755 +83.19326982453558 +0 +120 +absolute + + + +0.01 +smooth + +8.53594435546319 +47.35034352880755 +428.92312552716487 +-204.97654556333075 +83.19439771353494 +0 +120 +absolute + + + +0.01 +smooth + +8.535944323903218 +47.35034351218495 +428.9231188542901 +-204.97604949533957 +83.19550521570194 +0 +120 +absolute + + + +0.01 +smooth + +8.53594429295353 +47.35034349587324 +428.9231122507803 +-204.97556157098137 +83.19659210825007 +0 +120 +absolute + + + +0.01 +smooth + +8.53594426262034 +47.350343479875775 +428.9231057172021 +-204.97508190734368 +83.19765816839289 +0 +120 +absolute + + + +0.01 +smooth + +8.535944232909866 +47.35034346419586 +428.92309925412184 +-204.97461062151405 +83.19870317334389 +0 +120 +absolute + + + +0.01 +smooth + +8.53594420382832 +47.35034344883684 +428.9230928621063 +-204.9741478305798 +83.19972690031656 +0 +120 +absolute + + + +0.01 +smooth + +8.535944175381914 +47.35034343380205 +428.92308654172183 +-204.97369365162845 +83.20072912652446 +0 +120 +absolute + + + +0.01 +smooth + +8.535944147576863 +47.35034341909483 +428.9230802935353 +-204.97324820174748 +83.20170962918108 +0 +120 +absolute + + + +0.01 +smooth + +8.535944120419382 +47.3503434047185 +428.92307411811305 +-204.97281159802438 +83.20266818549993 +0 +120 +absolute + + + +0.01 +smooth + +8.535944093915681 +47.3503433906764 +428.92306801602166 +-204.97238395754655 +83.20360457269457 +0 +120 +absolute + + + +0.01 +smooth + +8.53594406807198 +47.35034337697188 +428.92306198782785 +-204.9719653974015 +83.20451856797847 +0 +120 +absolute + + + +0.01 +smooth + +8.535944042772764 +47.35034336354519 +428.92305602041347 +-204.9715542078868 +83.2054141398536 +0 +120 +absolute + + + +0.01 +smooth + +8.535944017579274 +47.35034335016921 +428.9230500645788 +-204.97114382894082 +83.20630638478339 +0 +120 +absolute + + + +0.01 +smooth + +8.53594399245573 +47.35034333682557 +428.9230441167348 +-204.97073374864866 +83.20719652215884 +0 +120 +absolute + + + +0.01 +smooth + +8.535943967407102 +47.35034332351701 +428.92303817788917 +-204.97032406701632 +83.20808436739061 +0 +120 +absolute + + + +0.01 +smooth + +8.53594394243838 +47.35034331024631 +428.9230322490497 +-204.96991488404976 +83.20896973588935 +0 +120 +absolute + + + +0.01 +smooth + +8.535943917554533 +47.350343297016174 +428.9230263312236 +-204.96950629975493 +83.20985244306559 +0 +120 +absolute + + + +0.01 +smooth + +8.535943892760551 +47.3503432838294 +428.9230204254189 +-204.96909841413773 +83.21073230433 +0 +120 +absolute + + + +0.01 +smooth + +8.535943868061413 +47.35034327068871 +428.9230145326429 +-204.96869132720417 +83.2116091350932 +0 +120 +absolute + + + +0.01 +smooth + +8.535943843462096 +47.35034325759685 +428.9230086539035 +-204.96828513896017 +83.21248275076577 +0 +120 +absolute + + + +0.01 +smooth + +8.53594381896758 +47.3503432445566 +428.9230027902081 +-204.96787994941172 +83.21335296675838 +0 +120 +absolute + + + +0.01 +smooth + +8.535943794582849 +47.35034323157067 +428.92299694256457 +-204.9674758585647 +83.21421959848163 +0 +120 +absolute + + + +0.01 +smooth + +8.535943770312878 +47.35034321864185 +428.9229911119802 +-204.96707296642506 +83.21508246134614 +0 +120 +absolute + + + +0.01 +smooth + +8.535943746162658 +47.35034320577289 +428.922985299463 +-204.9666713729989 +83.21594137076255 +0 +120 +absolute + + + +0.01 +smooth + +8.535943722137159 +47.3503431929665 +428.9229795060204 +-204.966271178292 +83.21679614214143 +0 +120 +absolute + + + +0.01 +smooth + +8.535943698241365 +47.35034318022546 +428.92297373265995 +-204.96587248231037 +83.21764659089344 +0 +120 +absolute + + + +0.01 +smooth + +8.53594367448026 +47.35034316755254 +428.9229679803895 +-204.96547538506007 +83.21849253242922 +0 +120 +absolute + + + +0.01 +smooth + +8.535943650858815 +47.350343154950444 +428.9229622502163 +-204.96507998654687 +83.21933378215934 +0 +120 +absolute + + + +0.01 +smooth + +8.53594362738202 +47.35034314242195 +428.92295654314836 +-204.9646863867768 +83.22017015549444 +0 +120 +absolute + + + +0.01 +smooth + +8.53594360405485 +47.3503431299698 +428.9229508601931 +-204.96429468575582 +83.22100146784511 +0 +120 +absolute + + + +0.01 +smooth + +8.535943580882288 +47.35034311759675 +428.9229452023582 +-204.96390498348987 +83.22182753462202 +0 +120 +absolute + + + +0.01 +smooth + +8.535943557869318 +47.35034310530558 +428.9229395706516 +-204.963517379985 +83.22264817123582 +0 +120 +absolute + + + +0.01 +smooth + +8.53594353502091 +47.350343093098985 +428.9229339660802 +-204.96313197524697 +83.223463193097 +0 +120 +absolute + + + +0.01 +smooth + +8.535943512342055 +47.35034308097975 +428.9229283896523 +-204.96274886928185 +83.22427241561631 +0 +120 +absolute + + + +0.01 +smooth + +8.535943489837729 +47.350343068950615 +428.9229228423752 +-204.96236816209563 +83.22507565420433 +0 +120 +absolute + + + +0.01 +smooth + +8.535943467512908 +47.35034305701433 +428.9229173252565 +-204.96198995369411 +83.22587272427162 +0 +120 +absolute + + + +0.01 +smooth + +8.53594344537258 +47.35034304517364 +428.92291183930405 +-204.96161434408336 +83.22666344122888 +0 +120 +absolute + + + +0.01 +smooth + +8.535943423421722 +47.35034303343133 +428.92290638552527 +-204.96124143326932 +83.22744762048669 +0 +120 +absolute + + + +0.01 +smooth + +8.535943401665314 +47.35034302179009 +428.92290096492786 +-204.9608713212579 +83.22822507745568 +0 +120 +absolute + + + +0.01 +smooth + +8.535943380108339 +47.350343010252736 +428.92289557851944 +-204.96050410805515 +83.22899562754647 +0 +120 +absolute + + + +0.01 +smooth + +8.535943358755773 +47.35034299882198 +428.9228902273078 +-204.9601398936669 +83.22975908616966 +0 +120 +absolute + + + +0.01 +smooth + +8.535943337612602 +47.35034298750058 +428.92288491230033 +-204.95977877809918 +83.23051526873591 +0 +120 +absolute + + + +0.01 +smooth + +8.535943316683802 +47.3503429762913 +428.9228796345048 +-204.95942086135793 +83.23126399065583 +0 +120 +absolute + + + +0.01 +smooth + +8.535943295974354 +47.350342965196866 +428.92287439492856 +-204.95906624344903 +83.23200506734 +0 +120 +absolute + + + +0.01 +smooth + +8.53594327548924 +47.35034295422004 +428.9228691945796 +-204.95871502437853 +83.23273831419908 +0 +120 +absolute + + + +0.01 +smooth + +8.53594325523344 +47.35034294336357 +428.9228640344654 +-204.9583673041523 +83.23346354664368 +0 +120 +absolute + + + +0.01 +smooth + +8.535943235211933 +47.35034293263022 +428.9228589155935 +-204.95802318277634 +83.23418058008438 +0 +120 +absolute + + + +0.01 +smooth + +8.535943215429704 +47.35034292202273 +428.9228538389717 +-204.95768276025663 +83.2348892299319 +0 +120 +absolute + + + +0.01 +smooth + +8.535943195891727 +47.35034291154386 +428.92284880560754 +-204.95734613659909 +83.23558931159677 +0 +120 +absolute + + + +0.01 +smooth + +8.535943176602988 +47.35034290119635 +428.92284381650865 +-204.9570134118096 +83.23628064048961 +0 +120 +absolute + + + +0.01 +smooth + +8.535943157568465 +47.35034289098296 +428.92283887268275 +-204.95668468589426 +83.23696303202111 +0 +120 +absolute + + + +0.01 +smooth + +8.535943138793135 +47.35034288090642 +428.92283397513717 +-204.95636005885888 +83.23763630160181 +0 +120 +absolute + + + +0.01 +smooth + +8.535943120281983 +47.3503428709695 +428.92282912487974 +-204.95603963070945 +83.23830026464238 +0 +120 +absolute + + + +0.01 +smooth + +8.53594310203999 +47.35034286117495 +428.92282432291813 +-204.95572350145198 +83.23895473655342 +0 +120 +absolute + + + +0.01 +smooth + +8.535943084072134 +47.35034285152552 +428.92281957025995 +-204.95541177109237 +83.23959953274554 +0 +120 +absolute + + + +0.01 +smooth + +8.535943066383396 +47.35034284202395 +428.92281486791273 +-204.95510453963658 +83.24023446862941 +0 +120 +absolute + + + +0.01 +smooth + +8.535943048978755 +47.350342832673 +428.92281021688416 +-204.9548019070906 +83.24085935961561 +0 +120 +absolute + + + +0.01 +smooth + +8.535943031863194 +47.35034282347542 +428.92280561818194 +-204.9545039734603 +83.24147402111475 +0 +120 +absolute + + + +0.01 +smooth + +8.535943015041694 +47.35034281443396 +428.9228010728136 +-204.95421083875172 +83.24207826853748 +0 +120 +absolute + + + +0.01 +smooth + +8.535942998519232 +47.35034280555137 +428.9227965817867 +-204.95392260297072 +83.24267191729439 +0 +120 +absolute + + + +0.01 +smooth + +8.535942982300792 +47.3503427968304 +428.92279214610903 +-204.95363936612338 +83.24325478279613 +0 +120 +absolute + + + +0.01 +smooth + +8.53594296639135 +47.35034278827381 +428.92278776678813 +-204.9533612282155 +83.24382668045328 +0 +120 +absolute + + + +0.01 +smooth + +8.535942950795892 +47.35034277988433 +428.92278344483157 +-204.95308828925312 +83.2443874256765 +0 +120 +absolute + + + +0.01 +smooth + +8.535942935519396 +47.35034277166473 +428.92277918124705 +-204.9528206492422 +83.24493683387638 +0 +120 +absolute + + + +0.01 +smooth + +8.53594292056684 +47.350342763617746 +428.9227749770422 +-204.95255840818868 +83.24547472046359 +0 +120 +absolute + + + +0.01 +smooth + +8.535942905943207 +47.35034275574615 +428.9227708332247 +-204.95230166609844 +83.24600090084868 +0 +120 +absolute + + + +0.01 +smooth + +8.535942891653477 +47.350342748052675 +428.9227667508021 +-204.95205052297752 +83.24651519044232 +0 +120 +absolute + + + +0.01 +smooth + +8.53594287770263 +47.35034274054007 +428.9227627307819 +-204.95180507883185 +83.24701740465511 +0 +120 +absolute + + + +0.01 +smooth + +8.535942864095647 +47.35034273321109 +428.92275877417194 +-204.95156543366738 +83.24750735889766 +0 +120 +absolute + + + +0.01 +smooth + +8.535942850837507 +47.3503427260685 +428.9227548819798 +-204.95133168749004 +83.24798486858063 +0 +120 +absolute + + + +0.01 +smooth + +8.535942837933193 +47.35034271911503 +428.9227510552131 +-204.9511039403058 +83.24844974911458 +0 +120 +absolute + + + +0.01 +smooth + +8.535942825387686 +47.35034271235344 +428.92274729487934 +-204.9508822921206 +83.24890181591019 +0 +120 +absolute + + + +0.01 +smooth + +8.535942813205962 +47.350342705786474 +428.92274360198627 +-204.95066684294045 +83.24934088437803 +0 +120 +absolute + + + +0.01 +smooth + +8.535942801393002 +47.3503426994169 +428.9227399775415 +-204.95045769277118 +83.24976676992875 +0 +120 +absolute + + + +0.01 +smooth + +8.535942789953793 +47.350342693247455 +428.92273642255265 +-204.95025494161882 +83.25017928797297 +0 +120 +absolute + + + +0.01 +smooth + +8.535942778893308 +47.350342687280886 +428.92273293802737 +-204.95005868948934 +83.2505782539213 +0 +120 +absolute + + + +0.01 +smooth + +8.53594276821653 +47.35034268151995 +428.9227295249732 +-204.9498690363887 +83.25096348318435 +0 +120 +absolute + + + +0.01 +smooth + +8.535942757928442 +47.3503426759674 +428.9227261843979 +-204.94968608232278 +83.25133479117275 +0 +120 +absolute + + + +0.01 +smooth + +8.53594274803402 +47.35034267062598 +428.9227229173089 +-204.94950992729758 +83.25169199329713 +0 +120 +absolute + + + +0.01 +smooth + +8.535942738538246 +47.35034266549845 +428.92271972471406 +-204.94934067131902 +83.25203490496811 +0 +120 +absolute + + + +0.01 +smooth + +8.535942729446102 +47.35034266058755 +428.9227166076208 +-204.9491784143931 +83.2523633415963 +0 +120 +absolute + + + +0.01 +smooth + +8.535942720762568 +47.350342655896036 +428.9227135670369 +-204.94902325652572 +83.2526771185923 +0 +120 +absolute + + + +0.01 +smooth + +8.535942712492623 +47.35034265142667 +428.9227106039699 +-204.94887529772285 +83.25297605136677 +0 +120 +absolute + + + +0.01 +smooth + +8.53594270464125 +47.350342647182174 +428.9227077194275 +-204.94873463799047 +83.25325995533031 +0 +120 +absolute + + + +0.01 +smooth + +8.535942697213425 +47.350342643165334 +428.9227049144173 +-204.9486013773345 +83.25352864589352 +0 +120 +absolute + + + +0.01 +smooth + +8.535942690214132 +47.35034263937887 +428.92270218994685 +-204.9484756157609 +83.25378193846707 +0 +120 +absolute + + + +0.01 +smooth + +8.53594268364835 +47.350342635825555 +428.92269954702374 +-204.94835745327563 +83.25401964846154 +0 +120 +absolute + + + +0.01 +smooth + +8.535942677521062 +47.350342632508124 +428.9226969866558 +-204.94824698988464 +83.25424159128754 +0 +120 +absolute + + + +0.01 +smooth + +8.535942671837246 +47.350342629429335 +428.92269450985054 +-204.94814432559383 +83.25444758235572 +0 +120 +absolute + + + +0.01 +smooth + +8.535942666601882 +47.35034262659194 +428.92269211761555 +-204.94804956040923 +83.2546374370767 +0 +120 +absolute + + + +0.01 +smooth + +8.53594266181995 +47.350342623998685 +428.92268981095856 +-204.94796279433677 +83.25481097086109 +0 +120 +absolute + + + +0.01 +smooth + +8.535942657353347 +47.35034262157522 +428.9226875623096 +-204.94788159179896 +83.25497315393753 +0 +120 +absolute + + + +0.01 +smooth + +8.53594265292585 +47.35034261917275 +428.92268531681515 +-204.94780106419472 +83.25513393415241 +0 +120 +absolute + + + +0.01 +smooth + +8.535942648530902 +47.350342616787756 +428.9226830737135 +-204.94772109626456 +83.25529354763299 +0 +120 +absolute + + + +0.01 +smooth + +8.53594264416911 +47.350342614420555 +428.92268083368066 +-204.94764170003828 +83.25545197163252 +0 +120 +absolute + + + +0.01 +smooth + +8.53594263984109 +47.3503426120715 +428.9226785973935 +-204.94756288754593 +83.25560918340437 +0 +120 +absolute + + + +0.01 +smooth + +8.535942635547457 +47.35034260974091 +428.9226763655285 +-204.9474846708175 +83.25576516020185 +0 +120 +absolute + + + +0.01 +smooth + +8.535942631288833 +47.35034260742915 +428.92267413876175 +-204.94740706188293 +83.25591987927832 +0 +120 +absolute + + + +0.01 +smooth + +8.535942627065833 +47.35034260513656 +428.9226719177702 +-204.94733007277236 +83.25607331788716 +0 +120 +absolute + + + +0.01 +smooth + +8.535942622879064 +47.350342602863456 +428.9226697032298 +-204.94725371551556 +83.2562254532816 +0 +120 +absolute + + + +0.01 +smooth + +8.535942618729148 +47.35034260061018 +428.9226674958174 +-204.94717800214264 +83.25637626271504 +0 +120 +absolute + + + +0.01 +smooth + +8.535942614616705 +47.350342598377104 +428.92266529620923 +-204.9471029446836 +83.25652572344083 +0 +120 +absolute + + + +0.01 +smooth + +8.53594261054234 +47.35034259616452 +428.9226631050818 +-204.94702855516823 +83.25667381271222 +0 +120 +absolute + + + +0.01 +smooth + +8.535942606506675 +47.350342593972805 +428.9226609231117 +-204.94695484562672 +83.25682050778262 +0 +120 +absolute + + + +0.01 +smooth + +8.535942602510326 +47.350342591802274 +428.9226587509751 +-204.94688182808892 +83.25696578590534 +0 +120 +absolute + + + +0.01 +smooth + +8.53594259855391 +47.35034258965328 +428.9226565893487 +-204.9468095145849 +83.25710962433368 +0 +120 +absolute + + + +0.01 +smooth + +8.535942594638042 +47.350342587526164 +428.92265443890915 +-204.94673791714467 +83.25725200032109 +0 +120 +absolute + + + +0.01 +smooth + +8.535942590763332 +47.35034258542125 +428.9226523003324 +-204.94666704779806 +83.25739289112074 +0 +120 +absolute + + + +0.01 +smooth + +8.535942586930402 +47.350342583338886 +428.9226501742952 +-204.9465969185752 +83.25753227398607 +0 +120 +absolute + + + +0.01 +smooth + +8.535942583139867 +47.350342581279435 +428.92264806147404 +-204.94652754150601 +83.25767012617041 +0 +120 +absolute + + + +0.01 +smooth + +8.53594257939234 +47.35034257924318 +428.9226459625453 +-204.94645892862047 +83.25780642492704 +0 +120 +absolute + + + +0.01 +smooth + +8.535942575688438 +47.3503425772305 +428.92264387818534 +-204.94639109194856 +83.25794114750931 +0 +120 +absolute + + + +0.01 +smooth + +8.535942572028778 +47.35034257524174 +428.92264180907074 +-204.94632404352024 +83.25807427117061 +0 +120 +absolute + + + +0.01 +smooth + +8.535942568413974 +47.35034257327721 +428.9226397558779 +-204.94625779536548 +83.25820577316418 +0 +120 +absolute + + + +0.01 +smooth + +8.535942564844643 +47.35034257133728 +428.92263771928356 +-204.94619235951438 +83.25833563074345 +0 +120 +absolute + + + +0.01 +smooth + +8.535942561321402 +47.35034256942227 +428.9226356999637 +-204.9461277479968 +83.25846382116167 +0 +120 +absolute + + + +0.01 +smooth + +8.535942557844862 +47.350342567532515 +428.9226336985952 +-204.94606397284272 +83.25859032167224 +0 +120 +absolute + + + +0.01 +smooth + +8.535942554415643 +47.35034256566838 +428.9226317158542 +-204.94600104608224 +83.25871510952847 +0 +120 +absolute + + + +0.01 +smooth + +8.535942551034358 +47.35034256383017 +428.9226297524172 +-204.94593897974522 +83.25883816198366 +0 +120 +absolute + + + +0.01 +smooth + +8.535942547701627 +47.35034256201824 +428.92262780896095 +-204.94587778586168 +83.25895945629118 +0 +120 +absolute + + + +0.01 +smooth + +8.53594254441806 +47.35034256023293 +428.9226258861616 +-204.94581747646157 +83.25907896970438 +0 +120 +absolute + + + +0.01 +smooth + +8.535942541184273 +47.35034255847458 +428.92262398469563 +-204.94575806357489 +83.2591966794765 +0 +120 +absolute + + + +0.01 +smooth + +8.53594253800089 +47.350342556743534 +428.92262210523984 +-204.9456995592317 +83.25931256286101 +0 +120 +absolute + + + +0.01 +smooth + +8.53594253486852 +47.35034255504013 +428.9226202484702 +-204.9456419754619 +83.25942659711116 +0 +120 +absolute + + + +0.01 +smooth + +8.535942531787775 +47.35034255336468 +428.9226184150634 +-204.94558532429545 +83.25953875948028 +0 +120 +absolute + + + +0.01 +smooth + +8.535942528759282 +47.35034255171759 +428.92261660569613 +-204.94552961776247 +83.25964902722177 +0 +120 +absolute + + + +0.01 +smooth + +8.535942525783646 +47.350342550099114 +428.92261482104436 +-204.94547486789276 +83.25975737758885 +0 +120 +absolute + + + +0.01 +smooth + +8.535942522861488 +47.350342548509644 +428.9226130617849 +-204.94542108671632 +83.25986378783495 +0 +120 +absolute + + + +0.01 +smooth + +8.535942519993423 +47.35034254694952 +428.92261132859414 +-204.9453682862633 +83.25996823521338 +0 +120 +absolute + + + +0.01 +smooth + +8.535942517180063 +47.35034254541904 +428.92260962214834 +-204.94531647856346 +83.26007069697741 +0 +120 +absolute + + + +0.01 +smooth + +8.53594251442203 +47.350342543918586 +428.92260794312426 +-204.94526567564697 +83.26017115038051 +0 +120 +absolute + + + +0.01 +smooth + +8.535942511719936 +47.35034254244849 +428.9226062921982 +-204.9452158895437 +83.26026957267588 +0 +120 +absolute + + + +0.01 +smooth + +8.535942509074397 +47.35034254100907 +428.92260467004667 +-204.94516713228367 +83.26036594111694 +0 +120 +absolute + + + +0.01 +smooth + +8.535942506486032 +47.350342539600696 +428.9226030773461 +-204.9451194158969 +83.26046023295697 +0 +120 +absolute + + + +0.01 +smooth + +8.53594250395545 +47.35034253822368 +428.92260151477285 +-204.9450727524133 +83.26055242544933 +0 +120 +absolute + + + +0.01 +smooth + +8.535942501483271 +47.350342536878365 +428.9225999830035 +-204.9450271538628 +83.26064249584734 +0 +120 +absolute + + + +0.01 +smooth + +8.535942499070114 +47.3503425355651 +428.9225984827146 +-204.94498263227558 +83.26073042140433 +0 +120 +absolute + + + +0.01 +smooth + +8.535942496716588 +47.35034253428422 +428.9225970145823 +-204.94493919968141 +83.26081617937366 +0 +120 +absolute + + + +0.01 +smooth + +8.535942494423313 +47.35034253303607 +428.9225955792833 +-204.9448968681104 +83.26089974700865 +0 +120 +absolute + + + +0.01 +smooth + +8.535942492190902 +47.350342531820985 +428.9225941774941 +-204.94485564959245 +83.2609811015626 +0 +120 +absolute + + + +0.01 +smooth + +8.535942490019973 +47.350342530639296 +428.922592809891 +-204.94481555615766 +83.2610602202889 +0 +120 +absolute + + + +0.01 +smooth + +8.535942487911141 +47.35034252949136 +428.92259147715055 +-204.94477659983588 +83.26113708044085 +0 +120 +absolute + + + +0.01 +smooth + +8.535942485865021 +47.35034252837748 +428.9225901799491 +-204.94473879265715 +83.2612116592718 +0 +120 +absolute + + + +0.01 +smooth + +8.53594248388223 +47.35034252729804 +428.92258891896324 +-204.94470214665142 +83.26128393403506 +0 +120 +absolute + + + +0.01 +smooth + +8.535942481963385 +47.35034252625336 +428.9225876948693 +-204.9446666738487 +83.26135388198398 +0 +120 +absolute + + + +0.01 +smooth + +8.535942480109098 +47.350342525243775 +428.9225865083439 +-204.944632386279 +83.26142148037191 +0 +120 +absolute + + + +0.01 +smooth + +8.535942478319987 +47.35034252426962 +428.9225853600634 +-204.94459929597224 +83.26148670645215 +0 +120 +absolute + + + +0.01 +smooth + +8.535942476596666 +47.35034252333125 +428.9225842507042 +-204.94456741495844 +83.26154953747803 +0 +120 +absolute + + + +0.01 +smooth + +8.535942474939754 +47.350342522429 +428.9225831809429 +-204.94453675526756 +83.26160995070293 +0 +120 +absolute + + + +0.01 +smooth + +8.535942473349863 +47.350342521563206 +428.9225821514558 +-204.9445073289296 +83.26166792338013 +0 +120 +absolute + + + +0.01 +smooth + +8.53594247182761 +47.35034252073419 +428.9225811629195 +-204.9444791479745 +83.261723432763 +0 +120 +absolute + + + +0.01 +smooth + +8.535942470373612 +47.35034251994232 +428.9225802160104 +-204.94445222443233 +83.26177645610487 +0 +120 +absolute + + + +0.01 +smooth + +8.535942468988484 +47.35034251918792 +428.9225793114049 +-204.944426570333 +83.26182697065906 +0 +120 +absolute + + + +0.01 +smooth + +8.535942467672843 +47.35034251847133 +428.92257844977956 +-204.94440219770644 +83.26187495367891 +0 +120 +absolute + + + +0.01 +smooth + +8.5359424664273 +47.350342517792896 +428.9225776318108 +-204.94437911858276 +83.26192038241774 +0 +120 +absolute + + + +0.01 +smooth + +8.535942465252479 +47.350342517152946 +428.92257685817503 +-204.9443573449919 +83.26196323412891 +0 +120 +absolute + + + +0.01 +smooth + +8.535942464148988 +47.350342516551834 +428.9225761295487 +-204.9443368889637 +83.26200348606572 +0 +120 +absolute + + + +0.01 +smooth + +8.535942463117443 +47.35034251598988 +428.9225754466084 +-204.94431776252836 +83.26204111548155 +0 +120 +absolute + + + +0.01 +smooth + +8.535942462158467 +47.35034251546743 +428.92257481003037 +-204.94429997771573 +83.2620760996297 +0 +120 +absolute + + + +0.01 +smooth + +8.535942461272667 +47.35034251498484 +428.92257422049136 +-204.94428354655582 +83.26210841576348 +0 +120 +absolute + + + +0.01 +smooth + +8.535942460460664 +47.350342514542426 +428.9225736786676 +-204.9442684810786 +83.26213804113627 +0 +120 +absolute + + + +0.01 +smooth + +8.535942459723072 +47.350342514140536 +428.9225731852356 +-204.94425479331406 +83.26216495300139 +0 +120 +absolute + + + +0.01 +smooth + +8.535942459060507 +47.350342513779516 +428.92257274087183 +-204.9442424952922 +83.26218912861216 +0 +120 +absolute + + + +0.01 +smooth + +8.535942458473587 +47.350342513459694 +428.92257234625276 +-204.944231599043 +83.26221054522193 +0 +120 +absolute + + + +0.01 +smooth + +8.535942457962923 +47.350342513181424 +428.92257200205484 +-204.9442221165964 +83.26222918008405 +0 +120 +absolute + + + +0.01 +smooth + +8.535942457529133 +47.35034251294502 +428.9225717089545 +-204.94421405998241 +83.26224501045179 +0 +120 +absolute + + + +0.01 +smooth + +8.535942457172835 +47.350342512750856 +428.92257146762825 +-204.94420744123101 +83.26225801357855 +0 +120 +absolute + + + +0.01 +smooth + +8.535942456894642 +47.35034251259924 +428.9225712787525 +-204.94420227237217 +83.26226816671762 +0 +120 +absolute + + + +0.01 +smooth + +8.535942456695171 +47.35034251249053 +428.9225711430037 +-204.9441985654359 +83.26227544712236 +0 +120 +absolute + + + +0.01 +smooth + +8.535942456575036 +47.35034251242504 +428.92257106105836 +-204.94419633245212 +83.26227983204609 +0 +120 +absolute + + + +0.01 +smooth + +8.535942456534855 +47.35034251240314 +428.922571033593 +-204.94419558545087 +83.26228129874215 +0 +120 +absolute + + + + + + diff --git a/parameter-learning_nd_disc/kmls/saffa_new.kml b/parameter-learning_nd_disc/kmls/saffa_new.kml new file mode 100644 index 0000000..ee3dc89 --- /dev/null +++ b/parameter-learning_nd_disc/kmls/saffa_new.kml @@ -0,0 +1,40038 @@ + + + + + +Tour + + +0.01 +smooth + +8.536348154452593 +47.34969652396877 +412.35755233845094 +14.0290626583571 +88.46603184312883 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154644218 +47.349696524038556 +412.3601765427659 +14.029075796691085 +88.46603410892959 +0 +120 +absolute + + + +0.01 +smooth + +8.536348155215755 +47.349696524246696 +412.36368214555733 +14.029114983040516 +88.4660408668032 +0 +120 +absolute + + + +0.01 +smooth + +8.536348156162187 +47.349696524591344 +412.368051158549 +14.029179874426607 +88.46605205745655 +0 +120 +absolute + + + +0.01 +smooth + +8.536348157478503 +47.34969652507066 +412.37326559346485 +14.029270127870566 +88.46606762159665 +0 +120 +absolute + + + +0.01 +smooth + +8.536348159159694 +47.34969652568281 +412.3793074620286 +14.029385400393602 +88.46608749993041 +0 +120 +absolute + + + +0.01 +smooth + +8.536348161200747 +47.34969652642594 +412.3861587759641 +14.029525349016938 +88.4661116331648 +0 +120 +absolute + + + +0.01 +smooth + +8.536348163596644 +47.3496965272982 +412.393801546995 +14.029689630761773 +88.46613996200678 +0 +120 +absolute + + + +0.01 +smooth + +8.536348166342377 +47.34969652829778 +412.4022177868453 +14.029877902649325 +88.46617242716329 +0 +120 +absolute + + + +0.01 +smooth + +8.536348169432934 +47.34969652942282 +412.41138950723877 +14.0300898217008 +88.46620896934125 +0 +120 +absolute + + + +0.01 +smooth + +8.536348172863299 +47.34969653067146 +412.42129871989914 +14.030325044937419 +88.46624952924763 +0 +120 +absolute + + + +0.01 +smooth + +8.536348176628463 +47.34969653204189 +412.4319274365502 +14.030583229380387 +88.46629404758941 +0 +120 +absolute + + + +0.01 +smooth + +8.536348180723412 +47.34969653353225 +412.4432576689158 +14.030864032050912 +88.4663424650735 +0 +120 +absolute + + + +0.01 +smooth + +8.536348185143135 +47.34969653514071 +412.45527142871975 +14.031167109970214 +88.46639472240686 +0 +120 +absolute + + + +0.01 +smooth + +8.536348189882618 +47.34969653686542 +412.4679507276858 +14.031492120159497 +88.46645076029645 +0 +120 +absolute + + + +0.01 +smooth + +8.53634819493685 +47.34969653870453 +412.48127757753775 +14.031838719639977 +88.4665105194492 +0 +120 +absolute + + + +0.01 +smooth + +8.536348200300818 +47.349696540656225 +412.4952339899996 +14.03220656543287 +88.46657394057212 +0 +120 +absolute + + + +0.01 +smooth + +8.536348205969508 +47.349696542718625 +412.50980197679496 +14.032595314559382 +88.46664096437206 +0 +120 +absolute + + + +0.01 +smooth + +8.536348211937911 +47.34969654488994 +412.5249635496477 +14.033004624040723 +88.46671153155606 +0 +120 +absolute + + + +0.01 +smooth + +8.53634821820101 +47.34969654716828 +412.54070072028145 +14.033434150898103 +88.46678558283102 +0 +120 +absolute + + + +0.01 +smooth + +8.536348224753796 +47.34969654955182 +412.55699550042027 +14.03388355215274 +88.46686305890388 +0 +120 +absolute + + + +0.01 +smooth + +8.536348231591255 +47.349696552038715 +412.57382990178775 +14.034352484825838 +88.46694390048162 +0 +120 +absolute + + + +0.01 +smooth + +8.536348238708378 +47.34969655462716 +412.59118593610805 +14.034840605938623 +88.46702804827123 +0 +120 +absolute + + + +0.01 +smooth + +8.536348246100147 +47.34969655731524 +412.6090456151045 +14.03534757251229 +88.46711544297956 +0 +120 +absolute + + + +0.01 +smooth + +8.536348253761552 +47.34969656010117 +412.6273909505012 +14.035873041568056 +88.46720602531363 +0 +120 +absolute + + + +0.01 +smooth + +8.536348261687584 +47.349696562983105 +412.64620395402187 +14.036416670127135 +88.46729973598038 +0 +120 +absolute + + + +0.01 +smooth + +8.536348269873224 +47.34969656595919 +412.6654666373903 +14.036978115210738 +88.46739651568673 +0 +120 +absolute + + + +0.01 +smooth + +8.536348278313465 +47.349696569027586 +412.68516101233035 +14.037557033840077 +88.46749630513966 +0 +120 +absolute + + + +0.01 +smooth + +8.536348287003293 +47.34969657218646 +412.7052690905659 +14.038153083036361 +88.46759904504613 +0 +120 +absolute + + + +0.01 +smooth + +8.536348295937694 +47.34969657543394 +412.72577288382047 +14.038765919820804 +88.46770467611304 +0 +120 +absolute + + + +0.01 +smooth + +8.536348305111657 +47.34969657876822 +412.74665440381807 +14.039395201214617 +88.4678131390474 +0 +120 +absolute + + + +0.01 +smooth + +8.536348314520168 +47.349696582187434 +412.76789566228257 +14.040040584239009 +88.4679243745561 +0 +120 +absolute + + + +0.01 +smooth + +8.536348324158219 +47.34969658568976 +412.7894786709376 +14.040701725915195 +88.46803832334614 +0 +120 +absolute + + + +0.01 +smooth + +8.536348334020794 +47.34969658927334 +412.811385441507 +14.041378283264384 +88.46815492612444 +0 +120 +absolute + + + +0.01 +smooth + +8.53634834410288 +47.34969659293634 +412.83359798571473 +14.04206991330779 +88.46827412359798 +0 +120 +absolute + + + +0.01 +smooth + +8.536348354399465 +47.34969659667693 +412.85609831528444 +14.042776273066623 +88.46839585647365 +0 +120 +absolute + + + +0.01 +smooth + +8.536348364905539 +47.349696600493246 +412.8788684419399 +14.043497019562095 +88.46852006545849 +0 +120 +absolute + + + +0.01 +smooth + +8.536348375616088 +47.34969660438345 +412.90189037740515 +14.044231809815418 +88.46864669125937 +0 +120 +absolute + + + +0.01 +smooth + +8.536348386526097 +47.349696608345724 +412.9251461334037 +14.0449803008478 +88.46877567458328 +0 +120 +absolute + + + +0.01 +smooth + +8.536348397630558 +47.349696612378196 +412.94861772165945 +14.04574214968046 +88.46890695613715 +0 +120 +absolute + + + +0.01 +smooth + +8.536348408924455 +47.34969661647905 +412.97228715389633 +14.046517013334602 +88.46904047662794 +0 +120 +absolute + + + +0.01 +smooth + +8.536348420402778 +47.34969662064643 +412.996136441838 +14.047304548831441 +88.4691761767626 +0 +120 +absolute + + + +0.01 +smooth + +8.536348432060514 +47.34969662487848 +413.0201475972083 +14.048104413192188 +88.46931399724807 +0 +120 +absolute + + + +0.01 +smooth + +8.53634844389265 +47.349696629173394 +413.04430263173106 +14.048916263438056 +88.46945387879131 +0 +120 +absolute + + + +0.01 +smooth + +8.536348455894172 +47.349696633529305 +413.0685835571301 +14.049739756590254 +88.46959576209927 +0 +120 +absolute + + + +0.01 +smooth + +8.53634846806007 +47.34969663794438 +413.0929723851292 +14.050574549669996 +88.46973958787892 +0 +120 +absolute + + + +0.01 +smooth + +8.536348480385334 +47.34969664241677 +413.11745112745217 +14.051420299698492 +88.46988529683715 +0 +120 +absolute + + + +0.01 +smooth + +8.536348492864946 +47.34969664694465 +413.14200179582275 +14.052276663696956 +88.47003282968097 +0 +120 +absolute + + + +0.01 +smooth + +8.536348505628453 +47.34969665157461 +413.16670252622504 +14.053152556997494 +88.47018371951604 +0 +120 +absolute + + + +0.01 +smooth + +8.536348520125422 +47.349696656828584 +413.1925766896085 +14.054147720555992 +88.47035512040313 +0 +120 +absolute + + + +0.01 +smooth + +8.536348536719016 +47.34969666283712 +413.21987605445474 +14.05528714673943 +88.47055132839374 +0 +120 +absolute + + + +0.01 +smooth + +8.536348555368562 +47.34969666958531 +413.2485643854466 +14.056568042200341 +88.47077186032757 +0 +120 +absolute + + + +0.01 +smooth + +8.536348576033392 +47.34969667705828 +413.2786054472675 +14.057987613591257 +88.4710162330442 +0 +120 +absolute + + + +0.01 +smooth + +8.536348598672834 +47.34969668524112 +413.30996300460004 +14.059543067564693 +88.47128396338323 +0 +120 +absolute + + + +0.01 +smooth + +8.536348623246218 +47.34969669411891 +413.3426008221276 +14.061231610773186 +88.47157456818431 +0 +120 +absolute + + + +0.01 +smooth + +8.53634864971287 +47.34969670367677 +413.3764826645333 +14.06305044986926 +88.47188756428703 +0 +120 +absolute + + + +0.01 +smooth + +8.536348678032125 +47.34969671389982 +413.4115722965001 +14.064996791505454 +88.47222246853106 +0 +120 +absolute + + + +0.01 +smooth + +8.53634870816331 +47.349696724773146 +413.4478334827112 +14.06706784233429 +88.472578797756 +0 +120 +absolute + + + +0.01 +smooth + +8.536348740065751 +47.34969673628184 +413.4852299878494 +14.069260809008284 +88.47295606880148 +0 +120 +absolute + + + +0.01 +smooth + +8.536348773698784 +47.349696748411056 +413.52372557659817 +14.071572898179982 +88.47335379850715 +0 +120 +absolute + + + +0.01 +smooth + +8.53634880902173 +47.34969676114583 +413.56328401364027 +14.074001316501905 +88.47377150371257 +0 +120 +absolute + + + +0.01 +smooth + +8.536348845993928 +47.3496967744713 +413.60386906365886 +14.07654327062658 +88.4742087012574 +0 +120 +absolute + + + +0.01 +smooth + +8.536348884574698 +47.34969678837256 +413.6454444913372 +14.079195967206543 +88.47466490798128 +0 +120 +absolute + + + +0.01 +smooth + +8.536348924723372 +47.34969680283472 +413.68797406135803 +14.08195661289431 +88.47513964072377 +0 +120 +absolute + + + +0.01 +smooth + +8.536348966399288 +47.3496968178429 +413.731421538405 +14.084822414342419 +88.4756324163246 +0 +120 +absolute + + + +0.01 +smooth + +8.53634900956176 +47.34969683338215 +413.7757506871605 +14.08779057820339 +88.47614275162327 +0 +120 +absolute + + + +0.01 +smooth + +8.536349054170135 +47.349696849437635 +413.82092527230816 +14.090858311129763 +88.47667016345953 +0 +120 +absolute + + + +0.01 +smooth + +8.536349100183728 +47.34969686599442 +413.8669090585307 +14.094022819774056 +88.47721416867289 +0 +120 +absolute + + + +0.01 +smooth + +8.536349147561875 +47.349696883037616 +413.9136658105115 +14.097281310788803 +88.47777428410303 +0 +120 +absolute + + + +0.01 +smooth + +8.5363491962639 +47.349696900552324 +413.96115929293336 +14.100630990826529 +88.47835002658955 +0 +120 +absolute + + + +0.01 +smooth + +8.53634924624914 +47.34969691852365 +414.0093532704795 +14.104069066539761 +88.47894091297209 +0 +120 +absolute + + + +0.01 +smooth + +8.536349297476923 +47.34969693693672 +414.0582115078331 +14.107592744581035 +88.4795464600903 +0 +120 +absolute + + + +0.01 +smooth + +8.536349349906573 +47.34969695577658 +414.10769776967715 +14.11119923160287 +88.48016618478374 +0 +120 +absolute + + + +0.01 +smooth + +8.53634940349742 +47.34969697502839 +414.1577758206946 +14.1148857342578 +88.4807996038921 +0 +120 +absolute + + + +0.01 +smooth + +8.536349458208798 +47.349696994677224 +414.2084094255687 +14.118649459198352 +88.48144623425492 +0 +120 +absolute + + + +0.01 +smooth + +8.536349514000033 +47.3496970147082 +414.2595623489825 +14.12248761307705 +88.4821055927119 +0 +120 +absolute + + + +0.01 +smooth + +8.536349570830458 +47.349697035106395 +414.31119835561907 +14.12639740254643 +88.48277719610266 +0 +120 +absolute + + + +0.01 +smooth + +8.536349628659398 +47.34969705585694 +414.3632812101614 +14.130376034259015 +88.48346056126675 +0 +120 +absolute + + + +0.01 +smooth + +8.536349687446185 +47.349697076944935 +414.4157746772927 +14.134420714867337 +88.48415520504388 +0 +120 +absolute + + + +0.01 +smooth + +8.536349747150147 +47.34969709835548 +414.46864252169604 +14.138528651023922 +88.48486064427362 +0 +120 +absolute + + + +0.01 +smooth + +8.536349807730616 +47.34969712007366 +414.5218485080544 +14.142697049381297 +88.48557639579562 +0 +120 +absolute + + + +0.01 +smooth + +8.536349869146916 +47.349697142084594 +414.57535640105107 +14.146923116591994 +88.48630197644948 +0 +120 +absolute + + + +0.01 +smooth + +8.536349931358384 +47.34969716437339 +414.62912996536886 +14.151204059308537 +88.48703690307484 +0 +120 +absolute + + + +0.01 +smooth + +8.53634999432434 +47.34969718692514 +414.683132965691 +14.155537084183454 +88.48778069251131 +0 +120 +absolute + + + +0.01 +smooth + +8.536350058004121 +47.34969720972495 +414.73732916670065 +14.159919397869281 +88.48853286159853 +0 +120 +absolute + + + +0.01 +smooth + +8.536350122357053 +47.349697232757926 +414.7916823330807 +14.164348207018538 +88.48929292717611 +0 +120 +absolute + + + +0.01 +smooth + +8.536350187342467 +47.349697256009165 +414.84615622951435 +14.168820718283758 +88.49006040608367 +0 +120 +absolute + + + +0.01 +smooth + +8.536350252919691 +47.34969727946378 +414.90071462068465 +14.173334138317465 +88.49083481516087 +0 +120 +absolute + + + +0.01 +smooth + +8.536350319048054 +47.349697303106865 +414.9553212712748 +14.17788567377219 +88.49161567124727 +0 +120 +absolute + + + +0.01 +smooth + +8.53635038568689 +47.34969732692353 +415.00993994596763 +14.182472531300462 +88.49240249118256 +0 +120 +absolute + + + +0.01 +smooth + +8.536350452795519 +47.34969735089888 +415.0645344094464 +14.187091917554808 +88.4931947918063 +0 +120 +absolute + + + +0.01 +smooth + +8.536350520333281 +47.349697375018 +415.1190684263942 +14.191741039187756 +88.49399208995817 +0 +120 +absolute + + + +0.01 +smooth + +8.536350588259497 +47.34969739926602 +415.173505761494 +14.196417102851836 +88.49479390247775 +0 +120 +absolute + + + +0.01 +smooth + +8.5363506565335 +47.349697423628015 +415.227810179429 +14.201117315199577 +88.4955997462047 +0 +120 +absolute + + + +0.01 +smooth + +8.536350725114621 +47.34969744808911 +415.2819454448823 +14.205838882883505 +88.49640913797862 +0 +120 +absolute + + + +0.01 +smooth + +8.536350793962185 +47.34969747263439 +415.3358753225368 +14.210579012556146 +88.49722159463913 +0 +120 +absolute + + + +0.01 +smooth + +8.536350863751965 +47.34969749749729 +415.3898456179858 +14.215384788498186 +88.49804513432726 +0 +120 +absolute + + + +0.01 +smooth + +8.5363509362929 +47.34969752330438 +415.4445571138232 +14.220382134635122 +88.49890121432553 +0 +120 +absolute + + + +0.01 +smooth + +8.53635101163185 +47.349697550071994 +415.5000255532859 +14.2255742510875 +88.4997903759042 +0 +120 +absolute + + + +0.01 +smooth + +8.53635108972086 +47.34969757778359 +415.55622956106447 +14.230957735367584 +88.50071203499866 +0 +120 +absolute + + + +0.01 +smooth + +8.53635117051196 +47.34969760642259 +415.61314776184844 +14.236529184987628 +88.50166560754418 +0 +120 +absolute + + + +0.01 +smooth + +8.536351253957193 +47.34969763597245 +415.67075878032813 +14.242285197459891 +88.50265050947617 +0 +120 +absolute + + + +0.01 +smooth + +8.536351340008592 +47.349697666416624 +415.72904124119356 +14.248222370296638 +88.50366615672996 +0 +120 +absolute + + + +0.01 +smooth + +8.536351428618199 +47.34969769773857 +415.7879737691349 +14.254337301010128 +88.5047119652409 +0 +120 +absolute + + + +0.01 +smooth + +8.536351519738052 +47.34969772992176 +415.84753498884214 +14.260626587112618 +88.50578735094432 +0 +120 +absolute + + + +0.01 +smooth + +8.536351613320187 +47.34969776294961 +415.90770352500533 +14.267086826116373 +88.50689172977556 +0 +120 +absolute + + + +0.01 +smooth + +8.536351709316651 +47.34969779680561 +415.96845800231466 +14.273714615533653 +88.50802451767005 +0 +120 +absolute + + + +0.01 +smooth + +8.536351807679464 +47.34969783147316 +416.0297770454598 +14.280506552876709 +88.50918513056303 +0 +120 +absolute + + + +0.01 +smooth + +8.536351908360684 +47.34969786693578 +416.0916392791315 +14.287459235657813 +88.51037298438995 +0 +120 +absolute + + + +0.01 +smooth + +8.536352011312335 +47.34969790317687 +416.1540233280191 +14.294569261389215 +88.51158749508605 +0 +120 +absolute + + + +0.01 +smooth + +8.53635211648646 +47.34969794017987 +416.2169078168131 +14.301833227583181 +88.51282807858674 +0 +120 +absolute + + + +0.01 +smooth + +8.536352223835097 +47.349697977928294 +416.2802713702035 +14.309247731751968 +88.51409415082736 +0 +120 +absolute + + + +0.01 +smooth + +8.536352333310285 +47.349698016405554 +416.3440926128803 +14.31680937140784 +88.51538512774324 +0 +120 +absolute + + + +0.01 +smooth + +8.536352444864061 +47.349698055595105 +416.40835016953355 +14.324514744063054 +88.51670042526978 +0 +120 +absolute + + + +0.01 +smooth + +8.53635255844846 +47.349698095480385 +416.47302266485326 +14.332360447229867 +88.51803945934223 +0 +120 +absolute + + + +0.01 +smooth + +8.536352674015527 +47.3496981360449 +416.5380887235298 +14.340343078420549 +88.51940164589605 +0 +120 +absolute + + + +0.01 +smooth + +8.536352791517292 +47.349698177272025 +416.60352697025274 +14.348459235147343 +88.52078640086648 +0 +120 +absolute + + + +0.01 +smooth + +8.536352910905803 +47.34969821914528 +416.6693160297128 +14.356705514922531 +88.522193140189 +0 +120 +absolute + + + +0.01 +smooth + +8.536353032133087 +47.349698261648086 +416.7354345265994 +14.365078515258356 +88.52362127979882 +0 +120 +absolute + + + +0.01 +smooth + +8.536353155151192 +47.3496983047639 +416.80186108560287 +14.373574833667083 +88.52507023563138 +0 +120 +absolute + + + +0.01 +smooth + +8.536353279912147 +47.34969834847616 +416.86857433141336 +14.38219106766097 +88.52653942362197 +0 +120 +absolute + + + +0.01 +smooth + +8.536353406367997 +47.34969839276834 +416.93555288872096 +14.390923814752286 +88.52802825970598 +0 +120 +absolute + + + +0.01 +smooth + +8.536353534470777 +47.34969843762388 +417.0027753822154 +14.39976967245328 +88.52953615981875 +0 +120 +absolute + + + +0.01 +smooth + +8.536353664172527 +47.34969848302624 +417.0702204365872 +14.408725238276219 +88.53106253989559 +0 +120 +absolute + + + +0.01 +smooth + +8.536353795425281 +47.349698528958854 +417.13786667652613 +14.417787109733357 +88.53260681587189 +0 +120 +absolute + + + +0.01 +smooth + +8.536353928181082 +47.3496985754052 +417.20569272672225 +14.426951884336958 +88.534168403683 +0 +120 +absolute + + + +0.01 +smooth + +8.536354062391966 +47.349698622348726 +417.27367721186573 +14.436216159599283 +88.53574671926422 +0 +120 +absolute + + + +0.01 +smooth + +8.536354198009969 +47.34969866977286 +417.3417987566466 +14.445576533032591 +88.53734117855095 +0 +120 +absolute + + + +0.01 +smooth + +8.536354334987132 +47.34969871766107 +417.4100359857549 +14.455029602149141 +88.5389511974785 +0 +120 +absolute + + + +0.01 +smooth + +8.536354473275495 +47.34969876599682 +417.4783675238809 +14.464571964461191 +88.54057619198224 +0 +120 +absolute + + + +0.01 +smooth + +8.536354612827088 +47.34969881476354 +417.5467719957144 +14.474200217481005 +88.54221557799752 +0 +120 +absolute + + + +0.01 +smooth + +8.536354753593956 +47.34969886394469 +417.61522802594556 +14.483910958720845 +88.54386877145967 +0 +120 +absolute + + + +0.01 +smooth + +8.536354895528136 +47.34969891352374 +417.68371423926436 +14.493700785692962 +88.54553518830406 +0 +120 +absolute + + + +0.01 +smooth + +8.536355038581664 +47.349698963484116 +417.752209260361 +14.503566295909627 +88.547214244466 +0 +120 +absolute + + + +0.01 +smooth + +8.536355182706583 +47.34969901380927 +417.8206917139255 +14.513504086883092 +88.54890535588086 +0 +120 +absolute + + + +0.01 +smooth + +8.536355327854924 +47.34969906448267 +417.8891402246479 +14.523510756125619 +88.550607938484 +0 +120 +absolute + + + +0.01 +smooth + +8.536355473978729 +47.34969911548777 +417.9575334172183 +14.533582901149467 +88.55232140821079 +0 +120 +absolute + + + +0.01 +smooth + +8.536355621030037 +47.34969916680801 +418.0258499163268 +14.5437171194669 +88.5540451809965 +0 +120 +absolute + + + +0.01 +smooth + +8.536355768960883 +47.349699218426856 +418.09406834666333 +14.553910008590176 +88.55577867277654 +0 +120 +absolute + + + +0.01 +smooth + +8.536355917723307 +47.34969927032775 +418.1621673329181 +14.564158166031552 +88.55752129948624 +0 +120 +absolute + + + +0.01 +smooth + +8.536356067269347 +47.34969932249413 +418.2301254997811 +14.574458189303295 +88.55927247706092 +0 +120 +absolute + + + +0.01 +smooth + +8.536356217551042 +47.34969937490947 +418.29792147194235 +14.584806675917655 +88.56103162143597 +0 +120 +absolute + + + +0.01 +smooth + +8.536356368520428 +47.349699427557226 +418.365533874092 +14.5952002233869 +88.56279814854673 +0 +120 +absolute + + + +0.01 +smooth + +8.536356520141966 +47.34969948042495 +418.4329443134178 +14.605636306803074 +88.56457162218462 +0 +120 +absolute + + + +0.01 +smooth + +8.536356673834034 +47.34969953398218 +418.50048452680096 +14.616215080547505 +88.5663689065218 +0 +120 +absolute + + + +0.01 +smooth + +8.536356830557368 +47.34969958854764 +418.5683797716909 +14.627004236622655 +88.56820139906283 +0 +120 +absolute + + + +0.01 +smooth + +8.536356990266949 +47.349699644106906 +418.6366145114447 +14.6380003847114 +88.57006852178485 +0 +120 +absolute + + + +0.01 +smooth + +8.53635715291777 +47.34969970064565 +418.7051732094198 +14.649200134496636 +88.571969696665 +0 +120 +absolute + + + +0.01 +smooth + +8.536357318464809 +47.34969975814943 +418.7740403289727 +14.660600095661229 +88.57390434568033 +0 +120 +absolute + + + +0.01 +smooth + +8.536357486863054 +47.34969981660388 +418.84320033346074 +14.67219687788807 +88.57587189080803 +0 +120 +absolute + + + +0.01 +smooth + +8.536357658067484 +47.349699875994624 +418.91263768624117 +14.683987090860038 +88.57787175402515 +0 +120 +absolute + + + +0.01 +smooth + +8.53635783203309 +47.34969993630726 +418.9823368506709 +14.695967344260021 +88.57990335730884 +0 +120 +absolute + + + +0.01 +smooth + +8.536358008714858 +47.34969999752744 +419.05228229010726 +14.708134247770904 +88.58196612263623 +0 +120 +absolute + + + +0.01 +smooth + +8.536358188067767 +47.34970005964071 +419.122458467907 +14.72048441107556 +88.58405947198439 +0 +120 +absolute + + + +0.01 +smooth + +8.536358370046804 +47.34970012263274 +419.1928498474274 +14.73301444385688 +88.58618282733045 +0 +120 +absolute + + + +0.01 +smooth + +8.536358554606952 +47.34970018648913 +419.26344089202547 +14.745720955797744 +88.58833561065157 +0 +120 +absolute + + + +0.01 +smooth + +8.536358741703198 +47.34970025119548 +419.33421606505834 +14.758600556581031 +88.5905172439248 +0 +120 +absolute + + + +0.01 +smooth + +8.53635893129053 +47.34970031673744 +419.4051598298833 +14.771649855889635 +88.59272714912733 +0 +120 +absolute + + + +0.01 +smooth + +8.536359123323926 +47.34970038310058 +419.47625664985713 +14.784865463406424 +88.59496474823617 +0 +120 +absolute + + + +0.01 +smooth + +8.536359317758373 +47.34970045027055 +419.54749098833713 +14.798243988814296 +88.59722946322854 +0 +120 +absolute + + + +0.01 +smooth + +8.53635951454886 +47.34970051823295 +419.61884730868024 +14.81178204179612 +88.59952071608153 +0 +120 +absolute + + + +0.01 +smooth + +8.536359713650365 +47.34970058697339 +419.6903100742436 +14.825476232034788 +88.6018379287722 +0 +120 +absolute + + + +0.01 +smooth + +8.53635991501788 +47.349700656477495 +419.7618637483845 +14.839323169213177 +88.60418052327775 +0 +120 +absolute + + + +0.01 +smooth + +8.536360118606378 +47.34970072673085 +419.8334927944596 +14.853319463014172 +88.60654792157519 +0 +120 +absolute + + + +0.01 +smooth + +8.53636032437086 +47.34970079771912 +419.9051816758265 +14.86746172312066 +88.60893954564173 +0 +120 +absolute + + + +0.01 +smooth + +8.536360532266297 +47.34970086942788 +419.97691485584187 +14.881746559215518 +88.61135481745444 +0 +120 +absolute + + + +0.01 +smooth + +8.536360742247679 +47.349700941842755 +420.04867679786304 +14.896170580981632 +88.61379315899046 +0 +120 +absolute + + + +0.01 +smooth + +8.536360954269991 +47.34970101494937 +420.12045196524707 +14.910730398101881 +88.61625399222689 +0 +120 +absolute + + + +0.01 +smooth + +8.53636116828822 +47.349701088733326 +420.1922248213509 +14.925422620259152 +88.61873673914086 +0 +120 +absolute + + + +0.01 +smooth + +8.536361384257345 +47.349701163180235 +420.2639798295319 +14.94024385713633 +88.62124082170945 +0 +120 +absolute + + + +0.01 +smooth + +8.536361602132356 +47.34970123827573 +420.3357014531469 +14.955190718416288 +88.62376566190981 +0 +120 +absolute + + + +0.01 +smooth + +8.536361821868235 +47.3497013140054 +420.40737415555304 +14.970259813781919 +88.62631068171905 +0 +120 +absolute + + + +0.01 +smooth + +8.536362043419967 +47.34970139035487 +420.47898240010755 +14.985447752916102 +88.62887530311427 +0 +120 +absolute + + + +0.01 +smooth + +8.536362266742536 +47.34970146730977 +420.55051065016744 +15.000751145501713 +88.6314589480726 +0 +120 +absolute + + + +0.01 +smooth + +8.536362491790928 +47.349701544855705 +420.6219433690898 +15.016166601221649 +88.63406103857116 +0 +120 +absolute + + + +0.01 +smooth + +8.536362718520127 +47.34970162297827 +420.6932650202317 +15.031690729758783 +88.63668099658705 +0 +120 +absolute + + + +0.01 +smooth + +8.53636294688512 +47.349701701663115 +420.76446006695016 +15.047320140796 +88.63931824409741 +0 +120 +absolute + + + +0.01 +smooth + +8.53636317684089 +47.34970178089582 +420.8355129726025 +15.063051444016182 +88.6419722030793 +0 +120 +absolute + + + +0.01 +smooth + +8.536363408342421 +47.34970186066202 +420.9064082005456 +15.078881249102214 +88.64464229550991 +0 +120 +absolute + + + +0.01 +smooth + +8.536363641344696 +47.34970194094733 +420.97713021413665 +15.094806165736975 +88.64732794336629 +0 +120 +absolute + + + +0.01 +smooth + +8.536363875802705 +47.34970202173734 +421.04766347673274 +15.110822803603352 +88.6500285686256 +0 +120 +absolute + + + +0.01 +smooth + +8.536364111671428 +47.349702103017705 +421.11799245169084 +15.126927772384224 +88.65274359326494 +0 +120 +absolute + + + +0.01 +smooth + +8.536364348905852 +47.349702184774 +421.1881016023683 +15.143117681762476 +88.65547243926143 +0 +120 +absolute + + + +0.01 +smooth + +8.536364587460962 +47.34970226699187 +421.2579753921219 +15.159389141420993 +88.65821452859218 +0 +120 +absolute + + + +0.01 +smooth + +8.536364827291742 +47.34970234965691 +421.3275982843089 +15.175738761042652 +88.66096928323431 +0 +120 +absolute + + + +0.01 +smooth + +8.536365068353177 +47.34970243275473 +421.39695474228654 +15.192163150310343 +88.66373612516495 +0 +120 +absolute + + + +0.01 +smooth + +8.53636531060025 +47.349702516270966 +421.46602922941145 +15.208658918906943 +88.66651447636116 +0 +120 +absolute + + + +0.01 +smooth + +8.536365553987949 +47.349702600191215 +421.5348062090412 +15.225222676515337 +88.66930375880011 +0 +120 +absolute + + + +0.01 +smooth + +8.536365798471255 +47.3497026845011 +421.60327014453276 +15.241851032818408 +88.6721033944589 +0 +120 +absolute + + + +0.01 +smooth + +8.536366044005156 +47.34970276918623 +421.671405499243 +15.258540597499037 +88.67491280531465 +0 +120 +absolute + + + +0.01 +smooth + +8.536366290544636 +47.34970285423223 +421.7391967365293 +15.275287980240108 +88.67773141334446 +0 +120 +absolute + + + +0.01 +smooth + +8.536366538276756 +47.34970293969944 +421.80667723456816 +15.292106490333472 +88.68056142490329 +0 +120 +absolute + + + +0.01 +smooth + +8.536366788754188 +47.34970302608835 +421.8741690959859 +15.30910759674172 +88.68342141370066 +0 +120 +absolute + + + +0.01 +smooth + +8.536367042239116 +47.349703113484146 +421.94172392800834 +15.326309739127748 +88.68631444385029 +0 +120 +absolute + + + +0.01 +smooth + +8.536367298690795 +47.349703201874576 +422.0093296111148 +15.343709546328334 +88.68923994299628 +0 +120 +absolute + + + +0.01 +smooth + +8.536367558068497 +47.34970329124732 +422.07697402578435 +15.361303647180256 +88.69219733878262 +0 +120 +absolute + + + +0.01 +smooth + +8.536367820331476 +47.34970338159009 +422.14464505249583 +15.379088670520282 +88.69518605885332 +0 +120 +absolute + + + +0.01 +smooth + +8.536368085439005 +47.349703472890596 +422.2123305717285 +15.397061245185201 +88.6982055308525 +0 +120 +absolute + + + +0.01 +smooth + +8.53636835335033 +47.34970356513651 +422.28001846396114 +15.415218000011766 +88.70125518242409 +0 +120 +absolute + + + +0.01 +smooth + +8.536368624024725 +47.34970365831556 +422.347696609673 +15.433555563836766 +88.70433444121217 +0 +120 +absolute + + + +0.01 +smooth + +8.536368897421449 +47.349703752415444 +422.4153528893429 +15.452070565496975 +88.70744273486078 +0 +120 +absolute + + + +0.01 +smooth + +8.53636917349976 +47.349703847423854 +422.48297518345015 +15.470759633829168 +88.7105794910139 +0 +120 +absolute + + + +0.01 +smooth + +8.536369452218928 +47.34970394332851 +422.55055137247354 +15.489619397670117 +88.71374413731562 +0 +120 +absolute + + + +0.01 +smooth + +8.536369733538207 +47.34970404011711 +422.6180693368924 +15.508646485856598 +88.71693610140991 +0 +120 +absolute + + + +0.01 +smooth + +8.536370017416866 +47.349704137777344 +422.6855169571855 +15.527837527225394 +88.72015481094085 +0 +120 +absolute + + + +0.01 +smooth + +8.53637030381416 +47.34970423629694 +422.7528821138319 +15.547189150613265 +88.72339969355247 +0 +120 +absolute + + + +0.01 +smooth + +8.536370592689359 +47.34970433566359 +422.82015268731107 +15.566697984857003 +88.72667017688882 +0 +120 +absolute + + + +0.01 +smooth + +8.536370884001716 +47.34970443586496 +422.88731655810136 +15.586360658793362 +88.72996568859382 +0 +120 +absolute + + + +0.01 +smooth + +8.536371177710503 +47.34970453688882 +422.9543616066824 +15.60617380125914 +88.73328565631164 +0 +120 +absolute + + + +0.01 +smooth + +8.536371473774972 +47.3497046387228 +423.02127571353276 +15.626134041091095 +88.7366295076862 +0 +120 +absolute + + + +0.01 +smooth + +8.536371772154395 +47.349704741354685 +423.08804675913194 +15.646238007126017 +88.73999667036165 +0 +120 +absolute + + + +0.01 +smooth + +8.536372072808025 +47.349704844772106 +423.1546626239586 +15.666482328200663 +88.7433865719819 +0 +120 +absolute + + + +0.01 +smooth + +8.536372375695128 +47.34970494896281 +423.221111188492 +15.686863633151821 +88.74679864019102 +0 +120 +absolute + + + +0.01 +smooth + +8.536372680774969 +47.34970505391446 +423.2873803332111 +15.707378550816266 +88.75023230263308 +0 +120 +absolute + + + +0.01 +smooth + +8.536372988006805 +47.3497051596148 +423.35345793859494 +15.728023710030765 +88.75368698695206 +0 +120 +absolute + + + +0.01 +smooth + +8.5363732973499 +47.349705266051515 +423.4193318851226 +15.748795739632099 +88.75716212079206 +0 +120 +absolute + + + +0.01 +smooth + +8.536373608763515 +47.3497053732123 +423.48499005327307 +15.769691268457045 +88.76065713179703 +0 +120 +absolute + + + +0.01 +smooth + +8.536373922206916 +47.34970548108487 +423.55042032352543 +15.79070692534237 +88.76417144761103 +0 +120 +absolute + + + +0.01 +smooth + +8.536374237639361 +47.34970558965692 +423.6156105763587 +15.811839339124857 +88.76770449587812 +0 +120 +absolute + + + +0.01 +smooth + +8.536374555020114 +47.34970569891617 +423.680548692252 +15.833085138641277 +88.7712557042423 +0 +120 +absolute + + + +0.01 +smooth + +8.536374874308436 +47.34970580885029 +423.7452225516842 +15.854440952728407 +88.77482450034759 +0 +120 +absolute + + + +0.01 +smooth + +8.536375195463588 +47.34970591944701 +423.80962003513457 +15.875903410223021 +88.77841031183809 +0 +120 +absolute + + + +0.01 +smooth + +8.536375518444835 +47.34970603069402 +423.8737290230819 +15.897469139961892 +88.78201256635774 +0 +120 +absolute + + + +0.01 +smooth + +8.536375843211438 +47.34970614257904 +423.93753739600544 +15.919134770781803 +88.78563069155061 +0 +120 +absolute + + + +0.01 +smooth + +8.536376169722656 +47.34970625508975 +424.00103303438414 +15.940896931519518 +88.78926411506073 +0 +120 +absolute + + + +0.01 +smooth + +8.536376497937756 +47.34970636821386 +424.064203818697 +15.962752251011818 +88.79291226453215 +0 +120 +absolute + + + +0.01 +smooth + +8.536376827815996 +47.34970648193908 +424.12703762942306 +15.984697358095477 +88.79657456760887 +0 +120 +absolute + + + +0.01 +smooth + +8.53637715931664 +47.349706596253114 +424.1895223470415 +16.006728881607273 +88.80025045193494 +0 +120 +absolute + + + +0.01 +smooth + +8.536377492398948 +47.349706711143654 +424.2516458520312 +16.028843450383974 +88.80393934515439 +0 +120 +absolute + + + +0.01 +smooth + +8.536377827022186 +47.34970682659841 +424.3133960248713 +16.051037693262366 +88.80764067491123 +0 +120 +absolute + + + +0.01 +smooth + +8.536378163145613 +47.34970694260508 +424.3747607460408 +16.073308239079214 +88.81135386884952 +0 +120 +absolute + + + +0.01 +smooth + +8.536378500728492 +47.34970705915137 +424.4357278960188 +16.095651716671295 +88.81507835461328 +0 +120 +absolute + + + +0.01 +smooth + +8.536378839730084 +47.349707176224996 +424.4962853552843 +16.11806475487539 +88.81881355984653 +0 +120 +absolute + + + +0.01 +smooth + +8.536379180109654 +47.34970729381363 +424.5564210043163 +16.140543982528264 +88.8225589121933 +0 +120 +absolute + + + +0.01 +smooth + +8.53637952182646 +47.349707411905 +424.6161227235939 +16.163086028466704 +88.82631383929765 +0 +120 +absolute + + + +0.01 +smooth + +8.536379864839766 +47.3497075304868 +424.675378393596 +16.185687521527473 +88.83007776880359 +0 +120 +absolute + + + +0.01 +smooth + +8.536380209108833 +47.34970764954673 +424.73417589480187 +16.208345090547358 +88.83385012835515 +0 +120 +absolute + + + +0.01 +smooth + +8.536380554592927 +47.34970776907251 +424.7925031076904 +16.231055364363126 +88.83763034559635 +0 +120 +absolute + + + +0.01 +smooth + +8.536380901251302 +47.34970788905182 +424.8503479127407 +16.253814971811554 +88.84141784817125 +0 +120 +absolute + + + +0.01 +smooth + +8.536381249665828 +47.3497080096719 +424.90784169388274 +16.276667395539103 +88.84521983830797 +0 +120 +absolute + + + +0.01 +smooth + +8.536381600943876 +47.34970813128855 +424.9652375542044 +16.29969539997933 +88.84905003611883 +0 +120 +absolute + + + +0.01 +smooth + +8.53638195507411 +47.34970825389938 +425.0225312043699 +16.32289735412299 +88.85290815754693 +0 +120 +absolute + + + +0.01 +smooth + +8.536382312020297 +47.349708377493855 +425.07971262462644 +16.34626975218521 +88.85679360744652 +0 +120 +absolute + + + +0.01 +smooth + +8.536382671746225 +47.34970850206158 +425.13677179522153 +16.369809088381103 +88.86070579067182 +0 +120 +absolute + + + +0.01 +smooth + +8.536383034215659 +47.34970862759207 +425.19369869640207 +16.39351185692579 +88.86464411207702 +0 +120 +absolute + + + +0.01 +smooth + +8.536383399392381 +47.34970875407489 +425.2504833084154 +16.41737455203439 +88.86860797651639 +0 +120 +absolute + + + +0.01 +smooth + +8.536383767240165 +47.34970888149957 +425.3071156115089 +16.44139366792203 +88.87259678884413 +0 +120 +absolute + + + +0.01 +smooth + +8.536384137722786 +47.349709009855694 +425.36358558592985 +16.46556569880382 +88.8766099539145 +0 +120 +absolute + + + +0.01 +smooth + +8.536384510804028 +47.349709139132806 +425.4198832119255 +16.489887138894908 +88.88064687658172 +0 +120 +absolute + + + +0.01 +smooth + +8.536384886447658 +47.34970926932041 +425.47599846974293 +16.51435448241038 +88.88470696170002 +0 +120 +absolute + + + +0.01 +smooth + +8.536385264617454 +47.349709400408095 +425.5319213396295 +16.538964223565372 +88.8887896141236 +0 +120 +absolute + + + +0.01 +smooth + +8.536385645277196 +47.349709532385404 +425.5876418018325 +16.563712856575012 +88.89289423870673 +0 +120 +absolute + + + +0.01 +smooth + +8.536386028390657 +47.34970966524188 +425.6431498365991 +16.58859687565441 +88.8970202403036 +0 +120 +absolute + + + +0.01 +smooth + +8.536386413921615 +47.34970979896709 +425.69843542417686 +16.6136127750187 +88.90116702376852 +0 +120 +absolute + + + +0.01 +smooth + +8.536386801833844 +47.34970993355055 +425.7534885448125 +16.638757048882976 +88.90533399395558 +0 +120 +absolute + + + +0.01 +smooth + +8.53638719209112 +47.349710068981835 +425.80829917875394 +16.66402619146239 +88.90952055571915 +0 +120 +absolute + + + +0.01 +smooth + +8.536387584657222 +47.34971020525049 +425.86285730624786 +16.689416696972053 +88.91372611391338 +0 +120 +absolute + + + +0.01 +smooth + +8.536387979495924 +47.34971034234606 +425.91715290754183 +16.714925059627078 +88.91795007339252 +0 +120 +absolute + + + +0.01 +smooth + +8.536388376571004 +47.3497104802581 +425.97117596288314 +16.74054777364259 +88.92219183901082 +0 +120 +absolute + + + +0.01 +smooth + +8.53638877584623 +47.34971061897613 +426.02491645251865 +16.766281333233703 +88.92645081562242 +0 +120 +absolute + + + +0.01 +smooth + +8.536389177285395 +47.34971075848975 +426.0783643566963 +16.792122232615558 +88.93072640808168 +0 +120 +absolute + + + +0.01 +smooth + +8.536389580852259 +47.34971089878847 +426.1315096556626 +16.818066966003258 +88.93501802124271 +0 +120 +absolute + + + +0.01 +smooth + +8.536389986510605 +47.349711039861866 +426.18434232966536 +16.844112027611924 +88.93932505995984 +0 +120 +absolute + + + +0.01 +smooth + +8.53639039422421 +47.34971118169945 +426.2368523589516 +16.870253911656686 +88.94364692908721 +0 +120 +absolute + + + +0.01 +smooth + +8.536390803956843 +47.349711324290816 +426.2890297237687 +16.89648911235266 +88.94798303347912 +0 +120 +absolute + + + +0.01 +smooth + +8.53639121567229 +47.34971146762548 +426.34086440436374 +16.922814123914968 +88.95233277798975 +0 +120 +absolute + + + +0.01 +smooth + +8.536391629334322 +47.34971161169301 +426.3923463809841 +16.94922544055873 +88.95669556747337 +0 +120 +absolute + + + +0.01 +smooth + +8.536392044906716 +47.34971175648294 +426.4434656338771 +16.975719556499065 +88.96107080678418 +0 +120 +absolute + + + +0.01 +smooth + +8.536392462353248 +47.349711901984826 +426.4942121432899 +17.0022929659511 +88.9654579007764 +0 +120 +absolute + + + +0.01 +smooth + +8.536392881637694 +47.34971204818822 +426.54457588946974 +17.02894216312995 +88.96985625430429 +0 +120 +absolute + + + +0.01 +smooth + +8.53639330272383 +47.349712195082674 +426.594546852664 +17.055663642250735 +88.97426527222207 +0 +120 +absolute + + + +0.01 +smooth + +8.536393725575433 +47.349712342657725 +426.64411501311974 +17.08245389752858 +88.97868435938395 +0 +120 +absolute + + + +0.01 +smooth + +8.536394150156276 +47.34971249090293 +426.6932703510845 +17.10930942317861 +88.98311292064419 +0 +120 +absolute + + + +0.01 +smooth + +8.53639457643014 +47.34971263980785 +426.74200284680535 +17.136226713415933 +88.987550360857 +0 +120 +absolute + + + +0.01 +smooth + +8.536395004360799 +47.349712789362 +426.7903024805295 +17.16320226245568 +88.9919960848766 +0 +120 +absolute + + + +0.01 +smooth + +8.536395433912029 +47.34971293955496 +426.8381592325044 +17.190232564512968 +88.99644949755724 +0 +120 +absolute + + + +0.01 +smooth + +8.536395865047604 +47.349713090376284 +426.8855630829771 +17.21731411380292 +89.00091000375312 +0 +120 +absolute + + + +0.01 +smooth + +8.536396297731303 +47.34971324181549 +426.932504012195 +17.244443404540654 +89.00537700831852 +0 +120 +absolute + + + +0.01 +smooth + +8.536396731926903 +47.349713393862146 +426.97897200040535 +17.271616930941295 +89.00984991610763 +0 +120 +absolute + + + +0.01 +smooth + +8.536397167598176 +47.349713546505804 +427.0249570278554 +17.29883118721996 +89.01432813197468 +0 +120 +absolute + + + +0.01 +smooth + +8.536397604708903 +47.34971369973601 +427.07044907479224 +17.32608266759177 +89.0188110607739 +0 +120 +absolute + + + +0.01 +smooth + +8.536398043222857 +47.3497138535423 +427.1154381214635 +17.35336786627185 +89.02329810735952 +0 +120 +absolute + + + +0.01 +smooth + +8.536398483103813 +47.349714007914244 +427.15991414811606 +17.380683277475317 +89.02778867658579 +0 +120 +absolute + + + +0.01 +smooth + +8.53639892431555 +47.34971416284139 +427.2038671349974 +17.40802539541729 +89.03228217330691 +0 +120 +absolute + + + +0.01 +smooth + +8.536399366821843 +47.34971431831327 +427.2472870623547 +17.4353907143129 +89.03677800237715 +0 +120 +absolute + + + +0.01 +smooth + +8.53639981058647 +47.34971447431944 +427.29016391043524 +17.46277572837725 +89.04127556865066 +0 +120 +absolute + + + +0.01 +smooth + +8.536400255603127 +47.349714630859104 +427.3324962433024 +17.490179486405513 +89.0457747041725 +0 +120 +absolute + + + +0.01 +smooth + +8.536400702824048 +47.34971478824044 +427.3745575282828 +17.517682677743593 +89.05028889216177 +0 +120 +absolute + + + +0.01 +smooth + +8.536401152695541 +47.34971494660886 +427.41647590984536 +17.545322275293007 +89.05482430206635 +0 +120 +absolute + + + +0.01 +smooth + +8.536401605185596 +47.34971510595569 +427.4582422896901 +17.573094331558977 +89.05938025986951 +0 +120 +absolute + + + +0.01 +smooth + +8.53640206026219 +47.34971526627221 +427.4998475695164 +17.600994899046725 +89.06395609155453 +0 +120 +absolute + + + +0.01 +smooth + +8.536402517893327 +47.34971542754973 +427.54128265102423 +17.629020030261486 +89.06855112310468 +0 +120 +absolute + + + +0.01 +smooth + +8.536402978046992 +47.34971558977956 +427.5825384359136 +17.65716577770848 +89.07316468050327 +0 +120 +absolute + + + +0.01 +smooth + +8.53640344069117 +47.34971575295299 +427.6236058258839 +17.68542819389294 +89.07779608973357 +0 +120 +absolute + + + +0.01 +smooth + +8.536403905793858 +47.349715917061346 +427.6644757226353 +17.713803331320086 +89.08244467677888 +0 +120 +absolute + + + +0.01 +smooth + +8.53640437332304 +47.349716082095924 +427.7051390278674 +17.742287242495145 +89.08710976762247 +0 +120 +absolute + + + +0.01 +smooth + +8.53640484324671 +47.34971624804804 +427.7455866432801 +17.77087597992335 +89.09179068824768 +0 +120 +absolute + + + +0.01 +smooth + +8.536405315532855 +47.34971641490897 +427.7858094705731 +17.799565596109915 +89.09648676463773 +0 +120 +absolute + + + +0.01 +smooth + +8.536405790149466 +47.34971658267003 +427.82579841144604 +17.82835214356007 +89.10119732277592 +0 +120 +absolute + + + +0.01 +smooth + +8.53640626706453 +47.34971675132253 +427.865544367599 +17.85723167477905 +89.10592168864554 +0 +120 +absolute + + + +0.01 +smooth + +8.536406746246039 +47.34971692085777 +427.90503824073164 +17.88620024227207 +89.1106591882299 +0 +120 +absolute + + + +0.01 +smooth + +8.536407227661984 +47.34971709126708 +427.9442709325439 +17.91525389854437 +89.11540914751231 +0 +120 +absolute + + + +0.01 +smooth + +8.53640771128035 +47.349717262541716 +427.9832333447353 +17.94438869610116 +89.12017089247594 +0 +120 +absolute + + + +0.01 +smooth + +8.536408197069132 +47.34971743467302 +428.0219163790058 +17.97360068744768 +89.12494374910419 +0 +120 +absolute + + + +0.01 +smooth + +8.536408684996315 +47.34971760765229 +428.06031093705514 +18.00288592508914 +89.1297270433803 +0 +120 +absolute + + + +0.01 +smooth + +8.536409175029892 +47.3497177814708 +428.0984079205831 +18.03224046153078 +89.13452010128753 +0 +120 +absolute + + + +0.01 +smooth + +8.536409667137852 +47.34971795611991 +428.13619823128977 +18.061660349277822 +89.13932224880926 +0 +120 +absolute + + + +0.01 +smooth + +8.536410161288181 +47.34971813159087 +428.1736727708744 +18.091141640835485 +89.14413281192866 +0 +120 +absolute + + + +0.01 +smooth + +8.536410657448874 +47.34971830787502 +428.2108224410372 +18.120680388709015 +89.14895111662912 +0 +120 +absolute + + + +0.01 +smooth + +8.536411155587919 +47.349718484963645 +428.24763814347773 +18.15027264540362 +89.15377648889385 +0 +120 +absolute + + + +0.01 +smooth + +8.536411655673303 +47.34971866284807 +428.28411077989597 +18.17991446342453 +89.15860825470617 +0 +120 +absolute + + + +0.01 +smooth + +8.536412157673018 +47.349718841519575 +428.32023125199163 +18.209601895276972 +89.16344574004935 +0 +120 +absolute + + + +0.01 +smooth + +8.536412661555053 +47.34971902096948 +428.35599046146444 +18.239330993466176 +89.16828827090671 +0 +120 +absolute + + + +0.01 +smooth + +8.536413167287398 +47.34971920118909 +428.3913793100144 +18.269097810497364 +89.1731351732615 +0 +120 +absolute + + + +0.01 +smooth + +8.536413674838043 +47.349719382169695 +428.426388699341 +18.298898398875764 +89.17798577309702 +0 +120 +absolute + + + +0.01 +smooth + +8.536414184174976 +47.34971956390261 +428.46100953114416 +18.3287288111066 +89.18283939639656 +0 +120 +absolute + + + +0.01 +smooth + +8.536414695266188 +47.34971974637914 +428.49523270712376 +18.358585099695098 +89.18769536914338 +0 +120 +absolute + + + +0.01 +smooth + +8.53641520807967 +47.34971992959059 +428.5290491289795 +18.388463317146485 +89.19255301732082 +0 +120 +absolute + + + +0.01 +smooth + +8.536415722583408 +47.349720113528264 +428.5624496984112 +18.418359515965985 +89.19741166691212 +0 +120 +absolute + + + +0.01 +smooth + +8.536416238745394 +47.349720298183456 +428.5954253171187 +18.448269748658834 +89.20227064390058 +0 +120 +absolute + + + +0.01 +smooth + +8.536416756533619 +47.3497204835475 +428.6279668868018 +18.478190067730246 +89.20712927426949 +0 +120 +absolute + + + +0.01 +smooth + +8.536417275916069 +47.349720669611656 +428.66006530916013 +18.50811652568546 +89.2119868840021 +0 +120 +absolute + + + +0.01 +smooth + +8.536417796860736 +47.34972085636726 +428.6917114858937 +18.538045175029687 +89.21684279908177 +0 +120 +absolute + + + +0.01 +smooth + +8.53641831933561 +47.349721043805616 +428.7228963187021 +18.567972068268162 +89.22169634549174 +0 +120 +absolute + + + +0.01 +smooth + +8.536418843308681 +47.34972123191801 +428.7536107092852 +18.597893257906108 +89.22654684921528 +0 +120 +absolute + + + +0.01 +smooth + +8.536419368747934 +47.349721420695765 +428.7838455593429 +18.627804796448757 +89.23139363623571 +0 +120 +absolute + + + +0.01 +smooth + +8.536419895621364 +47.349721610130175 +428.8135917705749 +18.657702736401326 +89.23623603253631 +0 +120 +absolute + + + +0.01 +smooth + +8.53642042389696 +47.34972180021255 +428.84284024468093 +18.687583130269047 +89.24107336410036 +0 +120 +absolute + + + +0.01 +smooth + +8.53642095354271 +47.349721990934185 +428.8715818833609 +18.717442030557145 +89.24590495691112 +0 +120 +absolute + + + +0.01 +smooth + +8.536421484526603 +47.3497221822864 +428.8998075883145 +18.74727548977085 +89.25073013695192 +0 +120 +absolute + + + +0.01 +smooth + +8.53642201681663 +47.349722374260494 +428.92750826124154 +18.77707956041538 +89.25554823020603 +0 +120 +absolute + + + +0.01 +smooth + +8.53642255038078 +47.34972256684775 +428.9546748038419 +18.806850294995968 +89.26035856265673 +0 +120 +absolute + + + +0.01 +smooth + +8.536423085187044 +47.3497227600395 +428.98129811781536 +18.836583746017844 +89.26516046028733 +0 +120 +absolute + + + +0.01 +smooth + +8.536423621203408 +47.34972295382705 +429.00736910486165 +18.866275965986222 +89.26995324908107 +0 +120 +absolute + + + +0.01 +smooth + +8.536424158599502 +47.34972314826682 +429.0329568639997 +18.89594581487961 +89.27474016950575 +0 +120 +absolute + + + +0.01 +smooth + +8.536424698280994 +47.34972334365332 +429.0584150737489 +18.925694829266988 +89.27953864731673 +0 +120 +absolute + + + +0.01 +smooth + +8.536425240336982 +47.34972354001751 +429.083779558179 +18.955531393218614 +89.28435011401398 +0 +120 +absolute + + + +0.01 +smooth + +8.536425784738773 +47.34972373735233 +429.10904038749294 +18.985450521071776 +89.2891737060735 +0 +120 +absolute + + + +0.01 +smooth + +8.536426331457658 +47.349723935650644 +429.13418763189355 +19.015447227163733 +89.2940085599713 +0 +120 +absolute + + + +0.01 +smooth + +8.536426880464935 +47.349724134905415 +429.1592113615839 +19.045516525831783 +89.29885381218341 +0 +120 +absolute + + + +0.01 +smooth + +8.536427431731903 +47.34972433510954 +429.184101646767 +19.0756534314132 +89.30370859918592 +0 +120 +absolute + + + +0.01 +smooth + +8.536427985229857 +47.34972453625595 +429.20884855764564 +19.10585295824528 +89.3085720574548 +0 +120 +absolute + + + +0.01 +smooth + +8.536428540930102 +47.34972473833757 +429.233442164423 +19.13611012066529 +89.31344332346615 +0 +120 +absolute + + + +0.01 +smooth + +8.536429098803927 +47.3497249413473 +429.25787253730164 +19.166419933010513 +89.3183215336959 +0 +120 +absolute + + + +0.01 +smooth + +8.536429658822632 +47.349725145278065 +429.2821297464847 +19.19677740961824 +89.32320582462017 +0 +120 +absolute + + + +0.01 +smooth + +8.536430220957516 +47.34972535012279 +429.3062038621752 +19.227177564825737 +89.32809533271495 +0 +120 +absolute + + + +0.01 +smooth + +8.536430785179876 +47.34972555587439 +429.33008495457597 +19.257615412970303 +89.33298919445632 +0 +120 +absolute + + + +0.01 +smooth + +8.536431351461014 +47.349725762525786 +429.35376309389017 +19.288085968389215 +89.33788654632023 +0 +120 +absolute + + + +0.01 +smooth + +8.536431919772214 +47.34972597006988 +429.3772283503203 +19.318584245419746 +89.34278652478278 +0 +120 +absolute + + + +0.01 +smooth + +8.536432490084792 +47.34972617849962 +429.4004707940699 +19.34910525839919 +89.34768826632 +0 +120 +absolute + + + +0.01 +smooth + +8.536433062370032 +47.349726387807905 +429.4234804953414 +19.379644021664824 +89.35259090740787 +0 +120 +absolute + + + +0.01 +smooth + +8.536433636599233 +47.34972659798766 +429.446247524338 +19.410195549553922 +89.35749358452247 +0 +120 +absolute + + + +0.01 +smooth + +8.536434212743698 +47.34972680903179 +429.4687619512626 +19.440754856403775 +89.36239543413981 +0 +120 +absolute + + + +0.01 +smooth + +8.53643479077472 +47.34972702093323 +429.49101384631797 +19.471316956551664 +89.36729559273591 +0 +120 +absolute + + + +0.01 +smooth + +8.536435370663604 +47.34972723368491 +429.51299327970753 +19.501876864334875 +89.37219319678688 +0 +120 +absolute + + + +0.01 +smooth + +8.536435952381636 +47.34972744727972 +429.5346903216337 +19.532429594090672 +89.37708738276864 +0 +120 +absolute + + + +0.01 +smooth + +8.536436535900119 +47.34972766171059 +429.5560950422996 +19.562970160156354 +89.38197728715728 +0 +120 +absolute + + + +0.01 +smooth + +8.536437121190353 +47.34972787697044 +429.5771975119083 +19.593493576869193 +89.38686204642886 +0 +120 +absolute + + + +0.01 +smooth + +8.536437708223634 +47.349728093052185 +429.5979878006625 +19.62399485856648 +89.39174079705936 +0 +120 +absolute + + + +0.01 +smooth + +8.536438296971259 +47.349728309948745 +429.6184559787655 +19.654469019585495 +89.3966126755248 +0 +120 +absolute + + + +0.01 +smooth + +8.536438887404524 +47.34972852765305 +429.6385921164199 +19.68491107426351 +89.40147681830129 +0 +120 +absolute + + + +0.01 +smooth + +8.536439479494728 +47.349728746158 +429.6583862838288 +19.715316036937814 +89.4063323618648 +0 +120 +absolute + + + +0.01 +smooth + +8.536440073213168 +47.34972896545653 +429.67782855119515 +19.745678921945693 +89.41117844269137 +0 +120 +absolute + + + +0.01 +smooth + +8.536440668531144 +47.34972918554154 +429.69690898872176 +19.775994743624416 +89.41601419725704 +0 +120 +absolute + + + +0.01 +smooth + +8.536441265419953 +47.34972940640596 +429.7156176666118 +19.806258516311278 +89.42083876203783 +0 +120 +absolute + + + +0.01 +smooth + +8.536441863850888 +47.349729628042724 +429.73394465506794 +19.83646525434355 +89.4256512735098 +0 +120 +absolute + + + +0.01 +smooth + +8.536442463795249 +47.349729850444724 +429.7518800242934 +19.866609972058527 +89.43045086814895 +0 +120 +absolute + + + +0.01 +smooth + +8.536443065224336 +47.34973007360489 +429.769413844491 +19.89668768379348 +89.43523668243134 +0 +120 +absolute + + + +0.01 +smooth + +8.536443668109445 +47.349730297516146 +429.7865361858637 +19.926693403885693 +89.44000785283296 +0 +120 +absolute + + + +0.01 +smooth + +8.536444272421873 +47.3497305221714 +429.80323711861433 +19.956622146672448 +89.44476351582992 +0 +120 +absolute + + + +0.01 +smooth + +8.536444878132919 +47.34973074756357 +429.819506712946 +19.98646892649103 +89.44950280789816 +0 +120 +absolute + + + +0.01 +smooth + +8.536445485213877 +47.34973097368558 +429.83533503906153 +20.016228757678714 +89.45422486551377 +0 +120 +absolute + + + +0.01 +smooth + +8.536446093636048 +47.34973120053036 +429.85071216716403 +20.045896654572786 +89.45892882515278 +0 +120 +absolute + + + +0.01 +smooth + +8.536446703370729 +47.349731428090806 +429.8656281674562 +20.075467631510527 +89.46361382329118 +0 +120 +absolute + + + +0.01 +smooth + +8.536447314389216 +47.349731656359864 +429.88007311014115 +20.104936702829225 +89.46827899640505 +0 +120 +absolute + + + +0.01 +smooth + +8.536447926662808 +47.34973188533042 +429.89403706542186 +20.134298882866155 +89.4729234809704 +0 +120 +absolute + + + +0.01 +smooth + +8.536448540162802 +47.34973211499541 +429.9075101035012 +20.163549185958594 +89.47754641346324 +0 +120 +absolute + + + +0.01 +smooth + +8.536449154860495 +47.34973234534776 +429.92048229458203 +20.192682626443833 +89.48214693035965 +0 +120 +absolute + + + +0.01 +smooth + +8.536449770727188 +47.349732576380376 +429.93294370886736 +20.221694218659145 +89.48672416813565 +0 +120 +absolute + + + +0.01 +smooth + +8.536450387734174 +47.34973280808619 +429.9448844165601 +20.250578976941828 +89.49127726326724 +0 +120 +absolute + + + +0.01 +smooth + +8.53645100585275 +47.3497330404581 +429.9562944878635 +20.279331915629143 +89.49580535223048 +0 +120 +absolute + + + +0.01 +smooth + +8.53645162505422 +47.349733273489036 +429.96716399298003 +20.307948049058382 +89.5003075715014 +0 +120 +absolute + + + +0.01 +smooth + +8.536452245778149 +47.34973350732178 +429.97773086945443 +20.33651043131202 +89.50479881808111 +0 +120 +absolute + + + +0.01 +smooth + +8.536452868601659 +47.34973374214354 +429.98830505635533 +20.365126206276216 +89.50929828551271 +0 +120 +absolute + + + +0.01 +smooth + +8.536453493500611 +47.34973397794942 +429.99887775642975 +20.39378840960492 +89.5138047305215 +0 +120 +absolute + + + +0.01 +smooth + +8.536454120448504 +47.34973421473377 +430.0094389076978 +20.42248962596998 +89.5183168290809 +0 +120 +absolute + + + +0.01 +smooth + +8.536454749418803 +47.34973445249087 +430.0199784481789 +20.451222440043217 +89.52283325716421 +0 +120 +absolute + + + +0.01 +smooth + +8.536455380385005 +47.34973469121507 +430.03048631589303 +20.479979436496457 +89.5273526907449 +0 +120 +absolute + + + +0.01 +smooth + +8.536456013320587 +47.349734930900695 +430.04095244885997 +20.50875320000154 +89.53187380579631 +0 +120 +absolute + + + +0.01 +smooth + +8.53645664819903 +47.349735171542065 +430.0513667850994 +20.537536315230287 +89.53639527829179 +0 +120 +absolute + + + +0.01 +smooth + +8.536457284993825 +47.349735413133516 +430.06171926263147 +20.566321366854552 +89.54091578420483 +0 +120 +absolute + + + +0.01 +smooth + +8.536457923678443 +47.34973565566936 +430.07199981947554 +20.595100939546143 +89.54543399950867 +0 +120 +absolute + + + +0.01 +smooth + +8.536458564226374 +47.349735899143944 +430.08219839365154 +20.62386761797689 +89.54994860017678 +0 +120 +absolute + + + +0.01 +smooth + +8.5364592066111 +47.34973614355158 +430.0923049231794 +20.65261398681864 +89.55445826218248 +0 +120 +absolute + + + +0.01 +smooth + +8.536459850806105 +47.34973638888658 +430.1023093460787 +20.681332630743217 +89.55896166149921 +0 +120 +absolute + + + +0.01 +smooth + +8.536460496784875 +47.34973663514332 +430.11220160036964 +20.710016134422464 +89.56345747410035 +0 +120 +absolute + + + +0.01 +smooth + +8.536461144520882 +47.34973688231605 +430.1219716240714 +20.738657082528178 +89.56794437595921 +0 +120 +absolute + + + +0.01 +smooth + +8.53646179398762 +47.34973713039917 +430.1316093552043 +20.76724805973223 +89.57242104304925 +0 +120 +absolute + + + +0.01 +smooth + +8.53646244515857 +47.349737379386966 +430.14110473178795 +20.79578165070643 +89.57688615134381 +0 +120 +absolute + + + +0.01 +smooth + +8.536463098007207 +47.34973762927377 +430.15044769184215 +20.824250440122608 +89.58133837681625 +0 +120 +absolute + + + +0.01 +smooth + +8.536463752507025 +47.34973788005393 +430.15962817338664 +20.852647012652604 +89.58577639544 +0 +120 +absolute + + + +0.01 +smooth + +8.536464408631497 +47.34973813172172 +430.1686361144413 +20.880963952968244 +89.5901988831884 +0 +120 +absolute + + + +0.01 +smooth + +8.536465066354113 +47.349738384271525 +430.1774614530259 +20.909193845741367 +89.59460451603489 +0 +120 +absolute + + + +0.01 +smooth + +8.536465725648354 +47.34973863769764 +430.18609412716023 +20.937329275643787 +89.59899196995275 +0 +120 +absolute + + + +0.01 +smooth + +8.536466386487701 +47.34973889199438 +430.19452407486403 +20.965362827347352 +89.60335992091544 +0 +120 +absolute + + + +0.01 +smooth + +8.536467048845637 +47.34973914715609 +430.2027412341572 +20.99328708552389 +89.6077070448963 +0 +120 +absolute + + + +0.01 +smooth + +8.53646771269565 +47.34973940317711 +430.21073554305946 +21.021094634845227 +89.61203201786876 +0 +120 +absolute + + + +0.01 +smooth + +8.536468378011218 +47.34973966005173 +430.2184969395906 +21.048778059983192 +89.61633351580613 +0 +120 +absolute + + + +0.01 +smooth + +8.536469044765823 +47.34973991777431 +430.2260153617705 +21.076329945609633 +89.62061021468186 +0 +120 +absolute + + + +0.01 +smooth + +8.536469712932954 +47.34974017633916 +430.2332807476189 +21.103742876396357 +89.62486079046927 +0 +120 +absolute + + + +0.01 +smooth + +8.536470382486087 +47.349740435740614 +430.2402830351555 +21.131009437015212 +89.6290839191418 +0 +120 +absolute + + + +0.01 +smooth + +8.53647105339871 +47.34974069597298 +430.2470121624003 +21.158122212138025 +89.63327827667277 +0 +120 +absolute + + + +0.01 +smooth + +8.536471725644303 +47.349740957030605 +430.253458067373 +21.185073786436625 +89.63744253903559 +0 +120 +absolute + + + +0.01 +smooth + +8.536472399196349 +47.3497412189078 +430.2596106880934 +21.211856744582846 +89.64157538220365 +0 +120 +absolute + + + +0.01 +smooth + +8.536473074028333 +47.3497414815989 +430.2654599625812 +21.238463671248514 +89.64567548215032 +0 +120 +absolute + + + +0.01 +smooth + +8.536473750113736 +47.349741745098235 +430.2709958288563 +21.26488715110547 +89.64974151484897 +0 +120 +absolute + + + +0.01 +smooth + +8.536474427426043 +47.34974200940012 +430.2762082249386 +21.29111976882553 +89.65377215627299 +0 +120 +absolute + + + +0.01 +smooth + +8.536475105938734 +47.34974227449888 +430.2810870888476 +21.317154109080548 +89.65776608239577 +0 +120 +absolute + + + +0.01 +smooth + +8.536475785625294 +47.349742540388846 +430.2856223586033 +21.342982756542334 +89.66172196919067 +0 +120 +absolute + + + +0.01 +smooth + +8.536476466459206 +47.34974280706436 +430.2898039722255 +21.368598295882727 +89.66563849263106 +0 +120 +absolute + + + +0.01 +smooth + +8.536477148413953 +47.349743074519715 +430.2936218677339 +21.393993311773556 +89.66951432869035 +0 +120 +absolute + + + +0.01 +smooth + +8.536477831463015 +47.349743342749264 +430.2970659831485 +21.41916038888666 +89.67334815334193 +0 +120 +absolute + + + +0.01 +smooth + +8.53647851557988 +47.34974361174733 +430.3001262564888 +21.44409211189386 +89.67713864255916 +0 +120 +absolute + + + +0.01 +smooth + +8.536479200738027 +47.34974388150822 +430.3027926257748 +21.468781065466995 +89.68088447231538 +0 +120 +absolute + + + +0.01 +smooth + +8.53647988691094 +47.349744152026275 +430.3050550290263 +21.493219834277888 +89.68458431858406 +0 +120 +absolute + + + +0.01 +smooth + +8.536480574072103 +47.34974442329583 +430.3069034042629 +21.517401002998383 +89.6882368573385 +0 +120 +absolute + + + +0.01 +smooth + +8.536481262194998 +47.34974469531121 +430.30832768950455 +21.541317156300295 +89.69184076455213 +0 +120 +absolute + + + +0.01 +smooth + +8.536481951253107 +47.34974496806671 +430.3093178227711 +21.564960878855466 +89.6953947161983 +0 +120 +absolute + + + +0.01 +smooth + +8.536482641219914 +47.34974524155668 +430.30986374208226 +21.58832475533573 +89.6988973882504 +0 +120 +absolute + + + +0.01 +smooth + +8.53648333211152 +47.34974551578881 +430.3099719133944 +21.611419404136402 +89.70235095110607 +0 +120 +absolute + + + +0.01 +smooth + +8.536484024574138 +47.349745790968456 +430.30989636529966 +21.634519819778948 +89.70580875945865 +0 +120 +absolute + + + +0.01 +smooth + +8.536484718814437 +47.349746067163714 +430.309727834091 +21.657709851310457 +89.70928702929159 +0 +120 +absolute + + + +0.01 +smooth + +8.53648541480715 +47.34974634437001 +430.30946803220644 +21.68097454885051 +89.71278281931274 +0 +120 +absolute + + + +0.01 +smooth + +8.536486112527022 +47.3497466225828 +430.309118672084 +21.70429896251874 +89.71629318823017 +0 +120 +absolute + + + +0.01 +smooth + +8.536486811948794 +47.349746901797516 +430.30868146616143 +21.727668142434737 +89.71981519475166 +0 +120 +absolute + + + +0.01 +smooth + +8.53648751304721 +47.34974718200963 +430.3081581268769 +21.751067138718113 +89.72334589758528 +0 +120 +absolute + + + +0.01 +smooth + +8.536488215797005 +47.349747463214555 +430.30755036666807 +21.774481001488457 +89.72688235543889 +0 +120 +absolute + + + +0.01 +smooth + +8.536488920172927 +47.34974774540776 +430.30685989797325 +21.797894780865406 +89.73042162702043 +0 +120 +absolute + + + +0.01 +smooth + +8.536489626149711 +47.34974802858467 +430.30608843322995 +21.82129352696853 +89.73396077103786 +0 +120 +absolute + + + +0.01 +smooth + +8.53649033370211 +47.34974831274076 +430.3052376848764 +21.844662289917466 +89.7374968461991 +0 +120 +absolute + + + +0.01 +smooth + +8.536491042804853 +47.34974859787144 +430.3043093653504 +21.867986119831794 +89.74102691121203 +0 +120 +absolute + + + +0.01 +smooth + +8.53649175343269 +47.34974888397219 +430.30330518709 +21.891250066831144 +89.7445480247847 +0 +120 +absolute + + + +0.01 +smooth + +8.536492465560356 +47.34974917103843 +430.30222686253296 +21.9144391810351 +89.74805724562495 +0 +120 +absolute + + + +0.01 +smooth + +8.536493179162598 +47.34974945906561 +430.3010761041175 +21.937538512563286 +89.75155163244078 +0 +120 +absolute + + + +0.01 +smooth + +8.536493894214155 +47.3497497480492 +430.2998546242811 +21.960533111535298 +89.75502824394005 +0 +120 +absolute + + + +0.01 +smooth + +8.53649461068977 +47.34975003798461 +430.2985641354623 +21.98340802807074 +89.75848413883075 +0 +120 +absolute + + + +0.01 +smooth + +8.53649532856418 +47.3497503288673 +430.2972063500985 +22.00614831228922 +89.76191637582077 +0 +120 +absolute + + + +0.01 +smooth + +8.536496047812134 +47.34975062069273 +430.2957829806281 +22.02873901431035 +89.7653220136181 +0 +120 +absolute + + + +0.01 +smooth + +8.536496768408368 +47.34975091345631 +430.2942957394885 +22.051165184253726 +89.7686981109306 +0 +120 +absolute + + + +0.01 +smooth + +8.536497490327626 +47.34975120715353 +430.29274633911814 +22.073411872238967 +89.77204172646628 +0 +120 +absolute + + + +0.01 +smooth + +8.536498213544647 +47.3497515017798 +430.29113649195455 +22.095464128385654 +89.77534991893302 +0 +120 +absolute + + + +0.01 +smooth + +8.536498938034176 +47.34975179733058 +430.2894679104361 +22.117307002813426 +89.77861974703882 +0 +120 +absolute + + + +0.01 +smooth + +8.53649966377095 +47.349752093801314 +430.28774230700026 +22.13892554564186 +89.78184826949149 +0 +120 +absolute + + + +0.01 +smooth + +8.536500390729717 +47.34975239118746 +430.2859613940854 +22.16030480699058 +89.78503254499911 +0 +120 +absolute + + + +0.01 +smooth + +8.536501118885214 +47.34975268948444 +430.2841268841292 +22.18142983697918 +89.78816963226953 +0 +120 +absolute + + + +0.01 +smooth + +8.536501848212183 +47.34975298868771 +430.28224048956963 +22.20228568572728 +89.79125659001066 +0 +120 +absolute + + + +0.01 +smooth + +8.536502578685365 +47.34975328879272 +430.28030392284455 +22.222857403354467 +89.7942904769305 +0 +120 +absolute + + + +0.01 +smooth + +8.536503310279501 +47.349753589794915 +430.2783188963921 +22.24313003998036 +89.79726835173697 +0 +120 +absolute + + + +0.01 +smooth + +8.536504042969337 +47.34975389168972 +430.27628712265005 +22.26308864572456 +89.800187273138 +0 +120 +absolute + + + +0.01 +smooth + +8.536504776729611 +47.34975419447261 +430.2742103140564 +22.282718270706678 +89.80304429984147 +0 +120 +absolute + + + +0.01 +smooth + +8.536505511535063 +47.34975449813902 +430.27209018304904 +22.302003965046314 +89.8058364905554 +0 +120 +absolute + + + +0.01 +smooth + +8.536506247360439 +47.34975480268439 +430.26992844206603 +22.320930778863076 +89.80856090398763 +0 +120 +absolute + + + +0.01 +smooth + +8.536506984180477 +47.34975510810417 +430.2677268035452 +22.339483762276572 +89.81121459884619 +0 +120 +absolute + + + +0.01 +smooth + +8.536507721969919 +47.3497554143938 +430.2654869799245 +22.357647965406397 +89.81379463383897 +0 +120 +absolute + + + +0.01 +smooth + +8.536508460703509 +47.34975572154873 +430.26321068364194 +22.375408438372173 +89.81629806767387 +0 +120 +absolute + + + +0.01 +smooth + +8.536509200355985 +47.34975602956441 +430.26089962713536 +22.39275023129349 +89.81872195905888 +0 +120 +absolute + + + +0.01 +smooth + +8.536509940902091 +47.34975633843628 +430.2585555228427 +22.40965839428997 +89.8210633667019 +0 +120 +absolute + + + +0.01 +smooth + +8.53651068231657 +47.34975664815978 +430.2561800832019 +22.426117977481205 +89.82331934931088 +0 +120 +absolute + + + +0.01 +smooth + +8.536511424574156 +47.34975695873037 +430.253775020651 +22.442114030986808 +89.82548696559377 +0 +120 +absolute + + + +0.01 +smooth + +8.536512167649601 +47.349757270143485 +430.2513420476278 +22.45763160492638 +89.82756327425844 +0 +120 +absolute + + + +0.01 +smooth + +8.536512911517638 +47.34975758239457 +430.24888287657035 +22.472655749419534 +89.8295453340129 +0 +120 +absolute + + + +0.01 +smooth + +8.536513656153016 +47.34975789547907 +430.2463992199165 +22.487171514585867 +89.83143020356505 +0 +120 +absolute + + + +0.01 +smooth + +8.53651440153047 +47.34975820939244 +430.2438927901043 +22.501163950544992 +89.8332149416228 +0 +120 +absolute + + + +0.01 +smooth + +8.536515147624744 +47.349758524130124 +430.24136529957156 +22.514618107416513 +89.83489660689412 +0 +120 +absolute + + + +0.01 +smooth + +8.53651589441058 +47.34975883968755 +430.2388184607562 +22.527519035320033 +89.83647225808694 +0 +120 +absolute + + + +0.01 +smooth + +8.536516641862718 +47.34975915606019 +430.2362539860963 +22.539851784375163 +89.83793895390919 +0 +120 +absolute + + + +0.01 +smooth + +8.536517389955904 +47.34975947324346 +430.2336735880297 +22.5516014047015 +89.83929375306877 +0 +120 +absolute + + + +0.01 +smooth + +8.536518138855833 +47.34975979129216 +430.23101642264686 +22.562896435306094 +89.84055855305755 +0 +120 +absolute + + + +0.01 +smooth + +8.536518889158227 +47.34976011039487 +430.228083984465 +22.574189779566918 +89.84181207371434 +0 +120 +absolute + + + +0.01 +smooth + +8.536519640886313 +47.349760430562526 +430.22486889807755 +22.585505570298658 +89.84305956581944 +0 +120 +absolute + + + +0.01 +smooth + +8.53652039401559 +47.3497607517912 +430.2213795507729 +22.596832128669114 +89.84430010786058 +0 +120 +absolute + + + +0.01 +smooth + +8.536521148521567 +47.349761074077044 +430.21762432983985 +22.608157775846077 +89.84553277832545 +0 +120 +absolute + + + +0.01 +smooth + +8.536521904379741 +47.3497613974161 +430.21361162256665 +22.619470832997347 +89.84675665570175 +0 +120 +absolute + + + +0.01 +smooth + +8.536522661565618 +47.34976172180452 +430.2093498162421 +22.630759621290732 +89.84797081847718 +0 +120 +absolute + + + +0.01 +smooth + +8.536523420054694 +47.34976204723836 +430.2048472981543 +22.64201246189401 +89.8491743451394 +0 +120 +absolute + + + +0.01 +smooth + +8.53652417982248 +47.34976237371377 +430.2001124555923 +22.653217675975007 +89.85036631417617 +0 +120 +absolute + + + +0.01 +smooth + +8.536524940844478 +47.349762701226844 +430.19515367584455 +22.664363584701505 +89.85154580407517 +0 +120 +absolute + + + +0.01 +smooth + +8.536525703096187 +47.349763029773676 +430.18997934619944 +22.67543850924131 +89.8527118933241 +0 +120 +absolute + + + +0.01 +smooth + +8.536526466553108 +47.34976335935036 +430.1845978539457 +22.686430770762218 +89.85386366041061 +0 +120 +absolute + + + +0.01 +smooth + +8.536527231190748 +47.349763689953015 +430.17901758637163 +22.69732869043202 +89.8550001838225 +0 +120 +absolute + + + +0.01 +smooth + +8.536527996984603 +47.34976402157772 +430.17324693076586 +22.708120589418513 +89.85612054204734 +0 +120 +absolute + + + +0.01 +smooth + +8.536528763910187 +47.3497643542206 +430.1672942744172 +22.718794788889507 +89.85722381357293 +0 +120 +absolute + + + +0.01 +smooth + +8.536529531942994 +47.34976468787777 +430.16116800461396 +22.729339610012804 +89.85830907688694 +0 +120 +absolute + + + +0.01 +smooth + +8.536530301058528 +47.349765022545306 +430.1548765086447 +22.739743373956195 +89.85937541047706 +0 +120 +absolute + + + +0.01 +smooth + +8.536531071232293 +47.349765358219315 +430.1484281737979 +22.749994401887474 +89.86042189283098 +0 +120 +absolute + + + +0.01 +smooth + +8.536531842439793 +47.349765694895915 +430.1418313873624 +22.760081014974446 +89.86144760243644 +0 +120 +absolute + + + +0.01 +smooth + +8.53653261465652 +47.34976603257118 +430.13509453662635 +22.7699915343849 +89.86245161778105 +0 +120 +absolute + + + +0.01 +smooth + +8.536533387857991 +47.34976637124125 +430.1282260088786 +22.77971428128665 +89.86343301735259 +0 +120 +absolute + + + +0.01 +smooth + +8.536534162019706 +47.34976671090223 +430.1212341914078 +22.78923757684749 +89.86439087963876 +0 +120 +absolute + + + +0.01 +smooth + +8.536534937117159 +47.349767051550174 +430.11412747150194 +22.79854974223521 +89.86532428312722 +0 +120 +absolute + + + +0.01 +smooth + +8.536535713125858 +47.34976739318121 +430.1069142364501 +22.807639098617614 +89.86623230630569 +0 +120 +absolute + + + +0.01 +smooth + +8.536536490021305 +47.34976773579146 +430.09960287354056 +22.8164939671625 +89.86711402766186 +0 +120 +absolute + + + +0.01 +smooth + +8.536537267779003 +47.34976807937702 +430.092201770062 +22.825102669037665 +89.86796852568342 +0 +120 +absolute + + + +0.01 +smooth + +8.536538046374455 +47.34976842393398 +430.08471931330297 +22.833453525410913 +89.86879487885805 +0 +120 +absolute + + + +0.01 +smooth + +8.536538825783165 +47.349768769458436 +430.07716389055196 +22.84153485745004 +89.86959216567351 +0 +120 +absolute + + + +0.01 +smooth + +8.536539605980632 +47.349769115946515 +430.06954388909753 +22.84933498632284 +89.87035946461747 +0 +120 +absolute + + + +0.01 +smooth + +8.53654038694236 +47.34976946339431 +430.0618676962282 +22.856842233197117 +89.87109585417761 +0 +120 +absolute + + + +0.01 +smooth + +8.53654116864385 +47.34976981179792 +430.05414369923255 +22.864044919240662 +89.87180041284165 +0 +120 +absolute + + + +0.01 +smooth + +8.53654195106061 +47.349770161153444 +430.0463802853992 +22.87093136562128 +89.87247221909729 +0 +120 +absolute + + + +0.01 +smooth + +8.536542734168137 +47.349770511456995 +430.03858584201646 +22.877489893506777 +89.8731103514322 +0 +120 +absolute + + + +0.01 +smooth + +8.536543517941936 +47.34977086270467 +430.0307687563733 +22.883708824064936 +89.87371388833412 +0 +120 +absolute + + + +0.01 +smooth + +8.53654430235751 +47.349771214892584 +430.02293741575784 +22.889576478463567 +89.8742819082907 +0 +120 +absolute + + + +0.01 +smooth + +8.53654508739036 +47.34977156801682 +430.0151002074588 +22.89508117787046 +89.87481348978969 +0 +120 +absolute + + + +0.01 +smooth + +8.536545873015989 +47.3497719220735 +430.00726551876477 +22.900211243453416 +89.87530771131873 +0 +120 +absolute + + + +0.01 +smooth + +8.5365466592099 +47.34977227705872 +429.9994417369643 +22.90495499638024 +89.87576365136559 +0 +120 +absolute + + + +0.01 +smooth + +8.536547445947598 +47.34977263296857 +429.9916372493458 +22.909300757818727 +89.87618038841791 +0 +120 +absolute + + + +0.01 +smooth + +8.53654823320458 +47.34977298979918 +429.9838604431979 +22.913236848936666 +89.8765570009634 +0 +120 +absolute + + + +0.01 +smooth + +8.536549020956354 +47.34977334754662 +429.9761197058092 +22.916751590901868 +89.87689256748979 +0 +120 +absolute + + + +0.01 +smooth + +8.536549809178421 +47.34977370620702 +429.9684234244682 +22.91983330488213 +89.87718616648476 +0 +120 +absolute + + + +0.01 +smooth + +8.536550597846281 +47.34977406577648 +429.9607799864635 +22.92247031204524 +89.87743687643597 +0 +120 +absolute + + + +0.01 +smooth + +8.536551386935438 +47.34977442625109 +429.95319777908355 +22.924650933559008 +89.87764377583119 +0 +120 +absolute + + + +0.01 +smooth + +8.536552176421395 +47.349774787626956 +429.94568518961694 +22.926363490591235 +89.87780594315805 +0 +120 +absolute + + + +0.01 +smooth + +8.536552966279658 +47.34977514990018 +429.93825060535227 +22.92759630430971 +89.8779224569043 +0 +120 +absolute + + + +0.01 +smooth + +8.536553756485723 +47.34977551306689 +429.9309024135781 +22.92833769588223 +89.87799239555761 +0 +120 +absolute + + + +0.01 +smooth + +8.53655454701554 +47.3497758771233 +429.92364889485384 +22.928575949879882 +89.87801478896559 +0 +120 +absolute + + + +0.01 +smooth + +8.53655533826776 +47.34977624220315 +429.91639527248935 +22.928268450433507 +89.87794281287304 +0 +120 +absolute + + + +0.01 +smooth + +8.536556130589924 +47.34977660842338 +429.9090558216175 +22.92739229865945 +89.87773793412006 +0 +120 +absolute + + + +0.01 +smooth + +8.536556923958356 +47.34977697578004 +429.9016337734566 +22.925958981348774 +89.87740313366356 +0 +120 +absolute + + + +0.01 +smooth + +8.536557718349364 +47.34977734426912 +429.894132359224 +22.92397998529254 +89.8769413924605 +0 +120 +absolute + + + +0.01 +smooth + +8.536558513739271 +47.34977771388671 +429.886554810138 +22.921466797281813 +89.8763556914678 +0 +120 +absolute + + + +0.01 +smooth + +8.536559310104392 +47.34977808462884 +429.87890435741633 +22.918430904107648 +89.87564901164234 +0 +120 +absolute + + + +0.01 +smooth + +8.53656010742105 +47.34977845649155 +429.87118423227713 +22.914883792561128 +89.87482433394116 +0 +120 +absolute + + + +0.01 +smooth + +8.536560905665551 +47.349778829470885 +429.863397665938 +22.91083694943329 +89.8738846393211 +0 +120 +absolute + + + +0.01 +smooth + +8.536561704814225 +47.34977920356291 +429.8555478896171 +22.906301861515214 +89.87283290873914 +0 +120 +absolute + + + +0.01 +smooth + +8.536562504843381 +47.349779578763645 +429.84763813453225 +22.90129001559796 +89.87167212315218 +0 +120 +absolute + + + +0.01 +smooth + +8.536563305729345 +47.34977995506914 +429.8396716319015 +22.89581289847259 +89.8704052635172 +0 +120 +absolute + + + +0.01 +smooth + +8.536564107448427 +47.34978033247543 +429.83165161294255 +22.88988199693017 +89.86903531079108 +0 +120 +absolute + + + +0.01 +smooth + +8.53656490997695 +47.349780710978585 +429.82358130887366 +22.883508797761763 +89.86756524593082 +0 +120 +absolute + + + +0.01 +smooth + +8.536565713291225 +47.34978109057462 +429.8154639509123 +22.876704787758428 +89.86599804989326 +0 +120 +absolute + + + +0.01 +smooth + +8.536566517367577 +47.349781471259625 +429.80730277027675 +22.86948145371123 +89.86433670363544 +0 +120 +absolute + + + +0.01 +smooth + +8.536567322182318 +47.349781853029576 +429.7991009981847 +22.861850282411233 +89.8625841881142 +0 +120 +absolute + + + +0.01 +smooth + +8.53656812771177 +47.34978223588058 +429.79086186585425 +22.853822760649507 +89.86074348428657 +0 +120 +absolute + + + +0.01 +smooth + +8.536568933932248 +47.349782619808636 +429.7825886045032 +22.845410375217092 +89.85881757310935 +0 +120 +absolute + + + +0.01 +smooth + +8.536569740820072 +47.34978300480982 +429.7742844453497 +22.83662461290508 +89.85680943553962 +0 +120 +absolute + + + +0.01 +smooth + +8.536570548351555 +47.34978339088016 +429.76595261961114 +22.827476960504512 +89.85472205253417 +0 +120 +absolute + + + +0.01 +smooth + +8.536571356503021 +47.34978377801571 +429.7575963585061 +22.81797890480647 +89.85255840505008 +0 +120 +absolute + + + +0.01 +smooth + +8.536572165250778 +47.3497841662125 +429.749218893252 +22.808141932602002 +89.85032147404416 +0 +120 +absolute + + + +0.01 +smooth + +8.536572974571158 +47.3497845554666 +429.7408234550671 +22.797977530682182 +89.84801424047345 +0 +120 +absolute + + + +0.01 +smooth + +8.536573784440465 +47.34978494577402 +429.7324132751691 +22.787497185838063 +89.84563968529476 +0 +120 +absolute + + + +0.01 +smooth + +8.536574594835024 +47.349785337130825 +429.72399158477594 +22.776712384860712 +89.84320078946512 +0 +120 +absolute + + + +0.01 +smooth + +8.53657540573115 +47.34978572953306 +429.7155616151055 +22.765634614541195 +89.84070053394143 +0 +120 +absolute + + + +0.01 +smooth + +8.53657621710516 +47.34978612297675 +429.70712659737603 +22.75427536167058 +89.83814189968062 +0 +120 +absolute + + + +0.01 +smooth + +8.536577028933376 +47.34978651745797 +429.6986897628051 +22.742646113039918 +89.83552786763963 +0 +120 +absolute + + + +0.01 +smooth + +8.536577841192111 +47.34978691297276 +429.6902543426106 +22.730758355440276 +89.8328614187754 +0 +120 +absolute + + + +0.01 +smooth + +8.536578653857683 +47.34978730951713 +429.6818235680107 +22.718623575662726 +89.83014553404487 +0 +120 +absolute + + + +0.01 +smooth + +8.536579466906412 +47.34978770708716 +429.67340067022326 +22.706253260498315 +89.82738319440492 +0 +120 +absolute + + + +0.01 +smooth + +8.536580280314615 +47.34978810567888 +429.664988880466 +22.693658896738118 +89.82457738081254 +0 +120 +absolute + + + +0.01 +smooth + +8.53658109405861 +47.34978850528834 +429.6565914299571 +22.680851971173198 +89.82173107422466 +0 +120 +absolute + + + +0.01 +smooth + +8.53658190811471 +47.349788905911566 +429.64821154991427 +22.667843970594618 +89.81884725559817 +0 +120 +absolute + + + +0.01 +smooth + +8.536582722459238 +47.349789307544626 +429.63985247155557 +22.654646381793434 +89.81592890589006 +0 +120 +absolute + + + +0.01 +smooth + +8.536583537068513 +47.34978971018356 +429.63151742609887 +22.64127069156072 +89.81297900605723 +0 +120 +absolute + + + +0.01 +smooth + +8.536584351918844 +47.3497901138244 +429.62320964476214 +22.62772838668753 +89.81000053705662 +0 +120 +absolute + + + +0.01 +smooth + +8.536585166986558 +47.349790518463195 +429.61493235876316 +22.61403095396493 +89.80699647984515 +0 +120 +absolute + + + +0.01 +smooth + +8.536585982247969 +47.349790924096 +429.60668879932 +22.600189880183986 +89.80396981537977 +0 +120 +absolute + + + +0.01 +smooth + +8.536586797679394 +47.349791330718844 +429.5984821976506 +22.586216652135754 +89.80092352461742 +0 +120 +absolute + + + +0.01 +smooth + +8.536587613257149 +47.349791738327795 +429.5903157849727 +22.572122756611307 +89.79786058851501 +0 +120 +absolute + + + +0.01 +smooth + +8.536588428957558 +47.34979214691886 +429.58219279250443 +22.5579196804017 +89.79478398802948 +0 +120 +absolute + + + +0.01 +smooth + +8.536589244756929 +47.349792556488104 +429.5741164514634 +22.543618910298004 +89.7916967041178 +0 +120 +absolute + + + +0.01 +smooth + +8.536590060631589 +47.349792967031576 +429.5660899930679 +22.529231933091275 +89.78860171773684 +0 +120 +absolute + + + +0.01 +smooth + +8.53659087655785 +47.349793378545314 +429.55811664853564 +22.514770235572577 +89.78550200984355 +0 +120 +absolute + + + +0.01 +smooth + +8.536591692512031 +47.34979379102538 +429.5501996490846 +22.50024530453298 +89.78240056139491 +0 +120 +absolute + + + +0.01 +smooth + +8.536592508470452 +47.34979420446778 +429.5423422259327 +22.485668626763538 +89.77930035334781 +0 +120 +absolute + + + +0.01 +smooth + +8.536593324468308 +47.34979461889069 +429.5345408845687 +22.470970182185894 +89.77619103706051 +0 +120 +absolute + + + +0.01 +smooth + +8.53659414102704 +47.34979503449427 +429.52673623741236 +22.455410498802955 +89.77295229075129 +0 +120 +absolute + + + +0.01 +smooth + +8.536594958256826 +47.349795451323345 +429.5189152150722 +22.438826247343698 +89.7695570924115 +0 +120 +absolute + + + +0.01 +smooth + +8.536595776135433 +47.349795869372976 +429.5110798065122 +22.42123803629504 +89.76600841090388 +0 +120 +absolute + + + +0.01 +smooth + +8.536596594640658 +47.34979628863823 +429.5032320006966 +22.40266647414393 +89.7623092150912 +0 +120 +absolute + + + +0.01 +smooth + +8.536597413750274 +47.34979670911416 +429.4953737865894 +22.383132169377298 +89.75846247383622 +0 +120 +absolute + + + +0.01 +smooth + +8.536598233442056 +47.34979713079581 +429.48750715315464 +22.36265573048207 +89.75447115600169 +0 +120 +absolute + + + +0.01 +smooth + +8.536599053693791 +47.349797553678265 +429.4796340893562 +22.34125776594518 +89.75033823045034 +0 +120 +absolute + + + +0.01 +smooth + +8.536599874483253 +47.349797977756566 +429.4717565841582 +22.318958884253554 +89.74606666604497 +0 +120 +absolute + + + +0.01 +smooth + +8.536600695788223 +47.34979840302575 +429.4638766265245 +22.29577969389413 +89.74165943164824 +0 +120 +absolute + + + +0.01 +smooth + +8.536601517586487 +47.34979882948093 +429.4559962054196 +22.271740803353836 +89.73711949612304 +0 +120 +absolute + + + +0.01 +smooth + +8.536602339855817 +47.34979925711709 +429.4481173098069 +22.246862821119603 +89.73244982833198 +0 +120 +absolute + + + +0.01 +smooth + +8.536603162573996 +47.349799685929355 +429.4402419286508 +22.22116635567837 +89.72765339713794 +0 +120 +absolute + + + +0.01 +smooth + +8.536603985718806 +47.34980011591274 +429.4323720509153 +22.194672015517053 +89.72273317140359 +0 +120 +absolute + + + +0.01 +smooth + +8.536604809268024 +47.34980054706231 +429.4245096655644 +22.167400409122596 +89.71769211999168 +0 +120 +absolute + + + +0.01 +smooth + +8.536605633199429 +47.34980097937313 +429.4166567615621 +22.139372144981927 +89.71253321176502 +0 +120 +absolute + + + +0.01 +smooth + +8.536606457490803 +47.349801412840264 +429.4088153278726 +22.110607831581984 +89.70725941558634 +0 +120 +absolute + + + +0.01 +smooth + +8.536607282119926 +47.34980184745875 +429.40098735345975 +22.08112807740969 +89.70187370031836 +0 +120 +absolute + + + +0.01 +smooth + +8.536608107064573 +47.34980228322363 +429.39317482728734 +22.050953490951965 +89.69637903482383 +0 +120 +absolute + + + +0.01 +smooth + +8.536608932302533 +47.34980272013002 +429.38537973831984 +22.02010468069577 +89.6907783879656 +0 +120 +absolute + + + +0.01 +smooth + +8.53660975781158 +47.34980315817293 +429.37760407552116 +21.988602255128015 +89.6850747286063 +0 +120 +absolute + + + +0.01 +smooth + +8.53661058356949 +47.34980359734741 +429.3698498278552 +21.956466822735635 +89.67927102560874 +0 +120 +absolute + + + +0.01 +smooth + +8.536611409554054 +47.34980403764858 +429.36211898428616 +21.92371899200557 +89.67337024783572 +0 +120 +absolute + + + +0.01 +smooth + +8.536612235743041 +47.34980447907142 +429.354413533778 +21.890379371424743 +89.66737536414988 +0 +120 +absolute + + + +0.01 +smooth + +8.536613062114236 +47.34980492161102 +429.34673546529456 +21.856468569480082 +89.66128934341407 +0 +120 +absolute + + + +0.01 +smooth + +8.536613888645418 +47.34980536526245 +429.33908676780004 +21.822007194658525 +89.65511515449097 +0 +120 +absolute + + + +0.01 +smooth + +8.536614715314368 +47.34980581002074 +429.3314694302585 +21.787015855447002 +89.6488557662434 +0 +120 +absolute + + + +0.01 +smooth + +8.536615542098863 +47.34980625588097 +429.32388544163405 +21.75151516033245 +89.64251414753407 +0 +120 +absolute + + + +0.01 +smooth + +8.536616368976684 +47.349806702838194 +429.3163367908905 +21.715525717801782 +89.63609326722576 +0 +120 +absolute + + + +0.01 +smooth + +8.536617195925613 +47.34980715088745 +429.30882546699195 +21.679068136341954 +89.6295960941812 +0 +120 +absolute + + + +0.01 +smooth + +8.536618022923427 +47.349807600023816 +429.3013534589024 +21.642163024439885 +89.62302559726315 +0 +120 +absolute + + + +0.01 +smooth + +8.536618849947908 +47.349808050242345 +429.2939227555861 +21.604830990582506 +89.61638474533436 +0 +120 +absolute + + + +0.01 +smooth + +8.536619676976835 +47.34980850153809 +429.2865353460068 +21.56709264325675 +89.6096765072576 +0 +120 +absolute + + + +0.01 +smooth + +8.536620503987987 +47.34980895390611 +429.2791932191287 +21.52896859094955 +89.60290385189559 +0 +120 +absolute + + + +0.01 +smooth + +8.536621330959147 +47.34980940734147 +429.27189836391574 +21.490479442147826 +89.59606974811112 +0 +120 +absolute + + + +0.01 +smooth + +8.536622157868088 +47.349809861839205 +429.264652769332 +21.45164580533853 +89.58917716476692 +0 +120 +absolute + + + +0.01 +smooth + +8.536622984692597 +47.349810317394386 +429.2574584243414 +21.412488289008575 +89.58222907072575 +0 +120 +absolute + + + +0.01 +smooth + +8.53662381141045 +47.349810774002066 +429.2503173179082 +21.373027501644906 +89.57522843485036 +0 +120 +absolute + + + +0.01 +smooth + +8.536624637999429 +47.34981123165732 +429.24323143899613 +21.333284051734445 +89.56817822600351 +0 +120 +absolute + + + +0.01 +smooth + +8.536625464437313 +47.34981169035518 +429.2362027765695 +21.293278547764128 +89.56108141304793 +0 +120 +absolute + + + +0.01 +smooth + +8.53662629070188 +47.34981215009072 +429.2292333195921 +21.253031598220886 +89.55394096484639 +0 +120 +absolute + + + +0.01 +smooth + +8.536627116770912 +47.34981261085899 +429.2223250570282 +21.21256381159165 +89.54675985026167 +0 +120 +absolute + + + +0.01 +smooth + +8.53662794262219 +47.349813072655046 +429.21547997784165 +21.171895796363348 +89.53954103815647 +0 +120 +absolute + + + +0.01 +smooth + +8.536628768233491 +47.34981353547395 +429.2087000709965 +21.131048161022917 +89.53228749739357 +0 +120 +absolute + + + +0.01 +smooth + +8.536629593582596 +47.34981399931075 +429.2019873254568 +21.090041514057287 +89.52500219683574 +0 +120 +absolute + + + +0.01 +smooth + +8.536630418647286 +47.34981446416051 +429.19534373018666 +21.048896463953383 +89.51768810534571 +0 +120 +absolute + + + +0.01 +smooth + +8.53663124340534 +47.34981493001829 +429.18877127415 +21.007633619198153 +89.5103481917862 +0 +120 +absolute + + + +0.01 +smooth + +8.536632067834534 +47.34981539687915 +429.1822719463108 +20.966273588278504 +89.50298542502006 +0 +120 +absolute + + + +0.01 +smooth + +8.536632892108459 +47.34981586483199 +429.1758279521303 +20.9245747105703 +89.49556414112106 +0 +120 +absolute + + + +0.01 +smooth + +8.536633716658503 +47.34981633408768 +429.1693953591198 +20.881948407247254 +89.48799765001321 +0 +120 +absolute + + + +0.01 +smooth + +8.536634541483089 +47.349816804648064 +429.162973902397 +20.838384629560505 +89.4802845487504 +0 +120 +absolute + + + +0.01 +smooth + +8.536635366562507 +47.349817276506265 +429.1565651457184 +20.79389756384417 +89.47242700558405 +0 +120 +absolute + + + +0.01 +smooth + +8.536636191877065 +47.34981774965544 +429.15017065284167 +20.748501396432417 +89.46442718876573 +0 +120 +absolute + + + +0.01 +smooth + +8.536637017407058 +47.34981822408869 +429.1437919875235 +20.70221031365937 +89.4562872665469 +0 +120 +absolute + + + +0.01 +smooth + +8.536637843132791 +47.34981869979917 +429.13743071352127 +20.65503850185919 +89.448009407179 +0 +120 +absolute + + + +0.01 +smooth + +8.536638669034557 +47.34981917678002 +429.13108839459215 +20.607000147366012 +89.43959577891364 +0 +120 +absolute + + + +0.01 +smooth + +8.536639495092661 +47.349819655024326 +429.12476659449317 +20.55810943651397 +89.43104855000226 +0 +120 +absolute + + + +0.01 +smooth + +8.536640321287402 +47.349820134525274 +429.11846687698153 +20.508380555637224 +89.42236988869638 +0 +120 +absolute + + + +0.01 +smooth + +8.536641147599077 +47.349820615275945 +429.1121908058142 +20.45782769106991 +89.41356196324745 +0 +120 +absolute + + + +0.01 +smooth + +8.536641974007992 +47.34982109726953 +429.10593994474857 +20.406465029146165 +89.40462694190703 +0 +120 +absolute + + + +0.01 +smooth + +8.53664280049444 +47.34982158049911 +429.09971585754147 +20.354306756200142 +89.39556699292656 +0 +120 +absolute + + + +0.01 +smooth + +8.536643627038725 +47.34982206495784 +429.09352010795044 +20.301367058565976 +89.38638428455761 +0 +120 +absolute + + + +0.01 +smooth + +8.536644453621141 +47.34982255063885 +429.0873542597321 +20.247660122577813 +89.37708098505158 +0 +120 +absolute + + + +0.01 +smooth + +8.536645280221999 +47.34982303753529 +429.08121987664407 +20.193200134569803 +89.36765926266007 +0 +120 +absolute + + + +0.01 +smooth + +8.536646106821586 +47.34982352564024 +429.07511852244306 +20.13800128087608 +89.3581212856345 +0 +120 +absolute + + + +0.01 +smooth + +8.53664693340021 +47.34982401494689 +429.0690517608866 +20.082077747830787 +89.34846922222641 +0 +120 +absolute + + + +0.01 +smooth + +8.536647759938166 +47.349824505448325 +429.0630211557316 +20.025443721768074 +89.33870524068729 +0 +120 +absolute + + + +0.01 +smooth + +8.536648586415762 +47.34982499713771 +429.0570282707353 +19.96811338902208 +89.32883150926865 +0 +120 +absolute + + + +0.01 +smooth + +8.536649412813288 +47.34982549000815 +429.05107466965467 +19.910100935926945 +89.31885019622196 +0 +120 +absolute + + + +0.01 +smooth + +8.53665023911105 +47.34982598405281 +429.04516191624697 +19.851420548816826 +89.30876346979875 +0 +120 +absolute + + + +0.01 +smooth + +8.536651065289343 +47.3498264792648 +429.0392915742692 +19.79208641402585 +89.29857349825046 +0 +120 +absolute + + + +0.01 +smooth + +8.536651891328475 +47.34982697563726 +429.03346520747874 +19.732112717888164 +89.28828244982869 +0 +120 +absolute + + + +0.01 +smooth + +8.536652717208737 +47.349827473163316 +429.02768437963255 +19.67151364673792 +89.27789249278483 +0 +120 +absolute + + + +0.01 +smooth + +8.536653542910434 +47.34982797183609 +429.02195065448774 +19.61030338690925 +89.26740579537045 +0 +120 +absolute + + + +0.01 +smooth + +8.536654368413863 +47.34982847164874 +429.01626559580154 +19.548496124736307 +89.256824525837 +0 +120 +absolute + + + +0.01 +smooth + +8.536655193699325 +47.34982897259439 +429.010630767331 +19.48610604655322 +89.24615085243602 +0 +120 +absolute + + + +0.01 +smooth + +8.53665601874712 +47.349829474666166 +429.0050477328333 +19.42314733869415 +89.235386943419 +0 +120 +absolute + + + +0.01 +smooth + +8.536656843537548 +47.34982997785719 +428.9995180560656 +19.359634187493228 +89.22453496703739 +0 +120 +absolute + + + +0.01 +smooth + +8.536657668050909 +47.34983048216061 +428.99404330078494 +19.295580779284606 +89.21359709154277 +0 +120 +absolute + + + +0.01 +smooth + +8.5366584922675 +47.34983098756955 +428.98862503074855 +19.23100130040241 +89.20257548518656 +0 +120 +absolute + + + +0.01 +smooth + +8.536659316167627 +47.349831494077144 +428.98326480971355 +19.16590993718081 +89.19147231622031 +0 +120 +absolute + + + +0.01 +smooth + +8.536660139731584 +47.34983200167653 +428.977964201437 +19.100320875953926 +89.1802897528955 +0 +120 +absolute + + + +0.01 +smooth + +8.536660962939674 +47.34983251036083 +428.9727247696761 +19.03424830305591 +89.16902996346363 +0 +120 +absolute + + + +0.01 +smooth + +8.536661785772194 +47.349833020123185 +428.9675480781881 +18.967706404820905 +89.1576951161762 +0 +120 +absolute + + + +0.01 +smooth + +8.536662608209447 +47.349833530956715 +428.96243569072976 +18.900709367583058 +89.14628737928471 +0 +120 +absolute + + + +0.01 +smooth + +8.53666343023173 +47.34983404285457 +428.95738917105865 +18.833271377676503 +89.13480892104064 +0 +120 +absolute + + + +0.01 +smooth + +8.536664251819346 +47.34983455580986 +428.9524100829316 +18.765406621435393 +89.12326190969553 +0 +120 +absolute + + + +0.01 +smooth + +8.53666507295259 +47.34983506981574 +428.94749999010594 +18.69712928519386 +89.11164851350082 +0 +120 +absolute + + + +0.01 +smooth + +8.536665893611767 +47.34983558486533 +428.9426604563387 +18.62845355528606 +89.09997090070806 +0 +120 +absolute + + + +0.01 +smooth + +8.536666713777175 +47.34983610095176 +428.937893045387 +18.559393618046126 +89.08823123956873 +0 +120 +absolute + + + +0.01 +smooth + +8.536667533429114 +47.34983661806817 +428.9331993210079 +18.48996365980821 +89.07643169833429 +0 +120 +absolute + + + +0.01 +smooth + +8.536668352547881 +47.34983713620768 +428.92858084695877 +18.420177866906446 +89.06457444525631 +0 +120 +absolute + + + +0.01 +smooth + +8.536669171113779 +47.34983765536344 +428.9240391869966 +18.350050425674983 +89.05266164858624 +0 +120 +absolute + + + +0.01 +smooth + +8.536669989107107 +47.34983817552857 +428.91957590487846 +18.27959552244796 +89.04069547657559 +0 +120 +absolute + + + +0.01 +smooth + +8.536670806508164 +47.34983869669618 +428.9151925643616 +18.20882734355952 +89.02867809747586 +0 +120 +absolute + + + +0.01 +smooth + +8.536671623302372 +47.34983921886283 +428.9108900831026 +18.137753984080902 +89.01661076116508 +0 +120 +absolute + + + +0.01 +smooth + +8.53667243982522 +47.34983974225576 +428.90662528548955 +18.065967375350116 +89.00443198155097 +0 +120 +absolute + + + +0.01 +smooth + +8.53667325627633 +47.349840267009 +428.90237245018085 +17.99322257005353 +88.99210489275123 +0 +120 +absolute + + + +0.01 +smooth + +8.536674072639507 +47.34984079311311 +428.89813315539396 +17.919531722335687 +88.9796313968411 +0 +120 +absolute + + + +0.01 +smooth + +8.536674888898554 +47.34984132055865 +428.89390897934624 +17.84490698634119 +88.96701339589578 +0 +120 +absolute + + + +0.01 +smooth + +8.536675705037275 +47.34984184933617 +428.8897015002551 +17.76936051621458 +88.95425279199044 +0 +120 +absolute + + + +0.01 +smooth + +8.536676521039482 +47.349842379436204 +428.8855122963381 +17.692904466100444 +88.94135148720031 +0 +120 +absolute + + + +0.01 +smooth + +8.536677336888973 +47.34984291084932 +428.8813429458126 +17.615550990143333 +88.92831138360053 +0 +120 +absolute + + + +0.01 +smooth + +8.536678152569559 +47.34984344356609 +428.87719502689623 +17.53731224248785 +88.91513438326646 +0 +120 +absolute + + + +0.01 +smooth + +8.536678968065042 +47.34984397757705 +428.8730701178064 +17.45820037727854 +88.90182238827316 +0 +120 +absolute + + + +0.01 +smooth + +8.53667978335923 +47.34984451287275 +428.8689697967605 +17.37822754865998 +88.88837730069592 +0 +120 +absolute + + + +0.01 +smooth + +8.536680598435925 +47.34984504944375 +428.8648956419759 +17.29740591077673 +88.87480102260989 +0 +120 +absolute + + + +0.01 +smooth + +8.536681413278934 +47.34984558728059 +428.8608492316703 +17.215747617773378 +88.8610954560903 +0 +120 +absolute + + + +0.01 +smooth + +8.53668222787206 +47.34984612637382 +428.8568321440608 +17.13326482379447 +88.84726250321233 +0 +120 +absolute + + + +0.01 +smooth + +8.536683042199114 +47.34984666671403 +428.8528459573653 +17.049969682984607 +88.83330406605123 +0 +120 +absolute + + + +0.01 +smooth + +8.536683856243899 +47.34984720829175 +428.848892249801 +16.965874349488335 +88.81922204668219 +0 +120 +absolute + + + +0.01 +smooth + +8.536684669990217 +47.34984775109751 +428.8449725995854 +16.880990977450235 +88.80501834718042 +0 +120 +absolute + + + +0.01 +smooth + +8.536685483421879 +47.3498482951219 +428.84108858493596 +16.795331721014872 +88.7906948696211 +0 +120 +absolute + + + +0.01 +smooth + +8.536686296522687 +47.34984884035547 +428.8372417840702 +16.70890873432682 +88.77625351607949 +0 +120 +absolute + + + +0.01 +smooth + +8.536687109276441 +47.349849386788726 +428.8334337752053 +16.621734171530633 +88.7616961886307 +0 +120 +absolute + + + +0.01 +smooth + +8.536687921666957 +47.349849934412276 +428.8296661365591 +16.53382018677091 +88.74702478935002 +0 +120 +absolute + + + +0.01 +smooth + +8.536688733678039 +47.34985048321667 +428.8259404463491 +16.4451789341922 +88.73224122031266 +0 +120 +absolute + + + +0.01 +smooth + +8.536689545293484 +47.34985103319242 +428.82225828279223 +16.35582256793908 +88.71734738359376 +0 +120 +absolute + + + +0.01 +smooth + +8.536690356497102 +47.34985158433012 +428.81862122410644 +16.265763242156112 +88.70234518126857 +0 +120 +absolute + + + +0.01 +smooth + +8.5366911672727 +47.3498521366203 +428.81503084850897 +16.17501311098788 +88.68723651541231 +0 +120 +absolute + + + +0.01 +smooth + +8.536691977604082 +47.34985269005352 +428.8114887342174 +16.083584328578937 +88.67202328810014 +0 +120 +absolute + + + +0.01 +smooth + +8.536692787475053 +47.34985324462033 +428.80799645944904 +15.991489049073873 +88.65670740140729 +0 +120 +absolute + + + +0.01 +smooth + +8.536693596869418 +47.349853800311294 +428.8045556024215 +15.898739426617238 +88.64129075740897 +0 +120 +absolute + + + +0.01 +smooth + +8.536694405770984 +47.34985435711696 +428.80116774135206 +15.805347615353618 +88.62577525818037 +0 +120 +absolute + + + +0.01 +smooth + +8.536695214163554 +47.34985491502787 +428.79783445445844 +15.711325769427573 +88.6101628057967 +0 +120 +absolute + + + +0.01 +smooth + +8.536696022030936 +47.34985547403458 +428.7945573199579 +15.616686042983678 +88.59445530233319 +0 +120 +absolute + + + +0.01 +smooth + +8.536696829356934 +47.349856034127654 +428.79133791606796 +15.521440590166494 +88.57865464986503 +0 +120 +absolute + + + +0.01 +smooth + +8.536697636125355 +47.34985659529765 +428.788177821006 +15.425601565120608 +88.56276275046741 +0 +120 +absolute + + + +0.01 +smooth + +8.536698442320002 +47.349857157535105 +428.78507861298965 +15.329181121990572 +88.54678150621555 +0 +120 +absolute + + + +0.01 +smooth + +8.536699247924682 +47.34985772083057 +428.7820418702362 +15.232191414920969 +88.53071281918466 +0 +120 +absolute + + + +0.01 +smooth + +8.536700052923198 +47.34985828517462 +428.7790691709632 +15.134644598056358 +88.51455859144994 +0 +120 +absolute + + + +0.01 +smooth + +8.536700857299358 +47.34985885055779 +428.77616209338817 +15.036552825541321 +88.4983207250866 +0 +120 +absolute + + + +0.01 +smooth + +8.536701661036965 +47.34985941697063 +428.7733222157283 +14.937928251520415 +88.48200112216983 +0 +120 +absolute + + + +0.01 +smooth + +8.536702464119827 +47.34985998440371 +428.77055111620143 +14.838783030138227 +88.46560168477485 +0 +120 +absolute + + + +0.01 +smooth + +8.536703266531749 +47.34986055284757 +428.76785037302466 +14.739129315539305 +88.44912431497687 +0 +120 +absolute + + + +0.01 +smooth + +8.536704068256535 +47.349861122292765 +428.76522156441575 +14.638979261868242 +88.43257091485107 +0 +120 +absolute + + + +0.01 +smooth + +8.53670486927799 +47.34986169272985 +428.762666268592 +14.538345023269585 +88.41594338647269 +0 +120 +absolute + + + +0.01 +smooth + +8.536705669579923 +47.34986226414938 +428.7601860637708 +14.437238753887929 +88.39924363191692 +0 +120 +absolute + + + +0.01 +smooth + +8.536706469146134 +47.34986283654191 +428.75778252816974 +14.335672607867817 +88.38247355325896 +0 +120 +absolute + + + +0.01 +smooth + +8.536707267960432 +47.349863409897985 +428.7554572400063 +14.233658739353846 +88.36563505257404 +0 +120 +absolute + + + +0.01 +smooth + +8.536708066006621 +47.34986398420817 +428.75321177749777 +14.13120930249056 +88.34873003193732 +0 +120 +absolute + + + +0.01 +smooth + +8.536708863268506 +47.34986455946299 +428.75104771886174 +14.028336451422554 +88.33176039342405 +0 +120 +absolute + + + +0.01 +smooth + +8.536709659729896 +47.34986513565304 +428.74896664231574 +13.925052340294373 +88.3147280391094 +0 +120 +absolute + + + +0.01 +smooth + +8.536710455433424 +47.349865712824645 +428.74695826286523 +13.821295387310958 +88.29762372747778 +0 +120 +absolute + + + +0.01 +smooth + +8.536711250717357 +47.349866291302156 +428.74495319960596 +13.716635045533714 +88.28038246491354 +0 +120 +absolute + + + +0.01 +smooth + +8.536712045628134 +47.349866871129336 +428.74294173014545 +13.611009003696346 +88.26299492263948 +0 +120 +absolute + + + +0.01 +smooth + +8.536712840153527 +47.34986745229401 +428.740926019765 +13.504428654756094 +88.24546291167529 +0 +120 +absolute + + + +0.01 +smooth + +8.5367136342813 +47.34986803478405 +428.7389082337449 +13.39690539167015 +88.22778824304066 +0 +120 +absolute + + + +0.01 +smooth + +8.536714427999229 +47.3498686185873 +428.73689053736615 +13.288450607395765 +88.20997272775524 +0 +120 +absolute + + + +0.01 +smooth + +8.536715221295077 +47.349869203691576 +428.7348750959091 +13.179075694890129 +88.19201817683867 +0 +120 +absolute + + + +0.01 +smooth + +8.536716014156625 +47.349869790084746 +428.73286407465497 +13.068792047110486 +88.17392640131074 +0 +120 +absolute + + + +0.01 +smooth + +8.53671680657163 +47.34987037775463 +428.73085963888406 +12.957611057014034 +88.15569921219098 +0 +120 +absolute + + + +0.01 +smooth + +8.53671759852787 +47.34987096668911 +428.72886395387746 +12.845544117558015 +88.1373384204992 +0 +120 +absolute + + + +0.01 +smooth + +8.536718390013112 +47.349871556876 +428.7268791849155 +12.732602621699622 +88.11884583725498 +0 +120 +absolute + + + +0.01 +smooth + +8.536719181015128 +47.34987214830316 +428.7249074972793 +12.618797962396105 +88.10022327347805 +0 +120 +absolute + + + +0.01 +smooth + +8.536719971521688 +47.34987274095843 +428.7229510562493 +12.50414153260466 +88.08147254018803 +0 +120 +absolute + + + +0.01 +smooth + +8.536720761520554 +47.34987333482963 +428.72101202710627 +12.388644725282518 +88.06259544840462 +0 +120 +absolute + + + +0.01 +smooth + +8.53672155099951 +47.34987392990466 +428.71909257513124 +12.272318933386895 +88.04359380914754 +0 +120 +absolute + + + +0.01 +smooth + +8.536722339946314 +47.3498745261713 +428.7171948656044 +12.155175549875013 +88.02446943343635 +0 +120 +absolute + + + +0.01 +smooth + +8.536723128348745 +47.349875123617466 +428.71532106380715 +12.03722596770409 +88.00522413229088 +0 +120 +absolute + + + +0.01 +smooth + +8.53672391619456 +47.34987572223093 +428.71347333501944 +11.91848157983135 +87.98585971673064 +0 +120 +absolute + + + +0.01 +smooth + +8.536724703471547 +47.349876321999595 +428.71165384452274 +11.798953779214006 +87.96637799777545 +0 +120 +absolute + + + +0.01 +smooth + +8.536725490167457 +47.34987692291125 +428.70986475759713 +11.678653958809281 +87.94678078644488 +0 +120 +absolute + + + +0.01 +smooth + +8.536726276270077 +47.3498775249538 +428.70810823952394 +11.557593511574396 +87.92706989375867 +0 +120 +absolute + + + +0.01 +smooth + +8.536727061767165 +47.34987812811502 +428.7063864555833 +11.43578383046657 +87.90724713073644 +0 +120 +absolute + + + +0.01 +smooth + +8.536727846646498 +47.34987873238284 +428.70470157105655 +11.31323630844302 +87.88731430839796 +0 +120 +absolute + + + +0.01 +smooth + +8.536728630895837 +47.34987933774501 +428.70305575122376 +11.18996233846097 +87.86727323776276 +0 +120 +absolute + + + +0.01 +smooth + +8.536729414502963 +47.34987994418945 +428.7014511613662 +11.065973313477635 +87.84712572985063 +0 +120 +absolute + + + +0.01 +smooth + +8.53673019745564 +47.349880551703976 +428.69988996676443 +10.941280626450244 +87.82687359568119 +0 +120 +absolute + + + +0.01 +smooth + +8.536730979741638 +47.34988116027642 +428.698374332699 +10.815895670336 +87.80651864627413 +0 +120 +absolute + + + +0.01 +smooth + +8.536731761348726 +47.349881769894644 +428.69690642445096 +10.689829838092146 +87.78606269264915 +0 +120 +absolute + + + +0.01 +smooth + +8.536732542264676 +47.34988238054649 +428.69548840730073 +10.563094522675875 +87.76550754582588 +0 +120 +absolute + + + +0.01 +smooth + +8.536733322477259 +47.3498829922198 +428.6941224465291 +10.435701117044433 +87.744855016824 +0 +120 +absolute + + + +0.01 +smooth + +8.536734101974242 +47.349883604902416 +428.692810707417 +10.307661014155014 +87.72410691666323 +0 +120 +absolute + + + +0.01 +smooth + +8.536734880743397 +47.34988421858219 +428.69155535524493 +10.178985606964867 +87.70326505636321 +0 +120 +absolute + + + +0.01 +smooth + +8.536735658772493 +47.349884833246946 +428.69035855529376 +10.049686288431182 +87.6823312469436 +0 +120 +absolute + + + +0.01 +smooth + +8.5367364360493 +47.349885448884564 +428.6892224728441 +9.919774451511204 +87.6613072994241 +0 +120 +absolute + + + +0.01 +smooth + +8.536737212561587 +47.34988606548285 +428.6881492731768 +9.78926148916213 +87.64019502482438 +0 +120 +absolute + + + +0.01 +smooth + +8.536737988297126 +47.34988668302968 +428.68714112157244 +9.658158794341203 +87.6189962341641 +0 +120 +absolute + + + +0.01 +smooth + +8.536738763243687 +47.34988730151288 +428.68620018331194 +9.526477760005617 +87.59771273846295 +0 +120 +absolute + + + +0.01 +smooth + +8.536739537389037 +47.349887920920295 +428.68532862367573 +9.39422977911262 +87.5763463487406 +0 +120 +absolute + + + +0.01 +smooth + +8.536740310720948 +47.34988854123978 +428.6845286079449 +9.261426244619404 +87.55489887601672 +0 +120 +absolute + + + +0.01 +smooth + +8.536741083227191 +47.349889162459164 +428.68380230139985 +9.128078549483217 +87.53337213131098 +0 +120 +absolute + + + +0.01 +smooth + +8.536741854895533 +47.3498897845663 +428.6831518693216 +8.99419808666125 +87.51176792564308 +0 +120 +absolute + + + +0.01 +smooth + +8.536742625713746 +47.34989040754904 +428.68257947699067 +8.859796249110747 +87.49008807003267 +0 +120 +absolute + + + +0.01 +smooth + +8.5367433956696 +47.349891031395224 +428.68208728968784 +8.724884429788908 +87.46833437549944 +0 +120 +absolute + + + +0.01 +smooth + +8.536744164750864 +47.34989165609269 +428.6816774726939 +8.589474021652974 +87.44650865306303 +0 +120 +absolute + + + +0.01 +smooth + +8.536744932945307 +47.34989228162928 +428.6813521912894 +8.45357641766014 +87.42461271374316 +0 +120 +absolute + + + +0.01 +smooth + +8.5367457002407 +47.349892907992846 +428.6811136107553 +8.317203010767651 +87.4026483685595 +0 +120 +absolute + + + +0.01 +smooth + +8.536746466624818 +47.34989353517123 +428.68096389637213 +8.180365193932701 +87.38061742853166 +0 +120 +absolute + + + +0.01 +smooth + +8.536747232085423 +47.34989416315228 +428.68090521342083 +8.043074360112538 +87.3585217046794 +0 +120 +absolute + + + +0.01 +smooth + +8.536747996747826 +47.34989479211176 +428.68090640533643 +7.905143619070323 +87.3363330712791 +0 +120 +absolute + + + +0.01 +smooth + +8.536748760827276 +47.34989542234418 +428.68091373196256 +7.766259221169728 +87.31400426316372 +0 +120 +absolute + + + +0.01 +smooth + +8.536749524318324 +47.3498960538396 +428.68092635662487 +7.626427615824022 +87.29153636859262 +0 +120 +absolute + + + +0.01 +smooth + +8.536750287212266 +47.34989668658358 +428.6809442247534 +7.485659944795586 +87.2689311843447 +0 +120 +absolute + + + +0.01 +smooth + +8.5367510495004 +47.34989732056169 +428.6809672817786 +7.343967349846751 +87.24619050719897 +0 +120 +absolute + + + +0.01 +smooth + +8.53675181117403 +47.34989795575949 +428.68099547313096 +7.201360972739887 +87.22331613393443 +0 +120 +absolute + + + +0.01 +smooth + +8.536752572224449 +47.349898592162575 +428.681028744241 +7.057851955237365 +87.20030986133013 +0 +120 +absolute + + + +0.01 +smooth + +8.536753332642965 +47.3498992297565 +428.681067040539 +6.913451439101514 +87.17717348616496 +0 +120 +absolute + + + +0.01 +smooth + +8.536754092420862 +47.349899868526826 +428.6811103074556 +6.7681705660947165 +87.153908805218 +0 +120 +absolute + + + +0.01 +smooth + +8.536754851549462 +47.34990050845917 +428.6811584904212 +6.622020477979309 +87.13051761526822 +0 +120 +absolute + + + +0.01 +smooth + +8.536755610020045 +47.34990114953906 +428.68121153486607 +6.475012316517668 +87.10700171309462 +0 +120 +absolute + + + +0.01 +smooth + +8.53675636782392 +47.34990179175209 +428.68126938622083 +6.32715722347213 +87.08336289547618 +0 +120 +absolute + + + +0.01 +smooth + +8.536757124952388 +47.34990243508383 +428.6813319899159 +6.178466340605077 +87.05960295919195 +0 +120 +absolute + + + +0.01 +smooth + +8.53675788139674 +47.34990307951985 +428.6813992913817 +6.028950809678838 +87.03572370102088 +0 +120 +absolute + + + +0.01 +smooth + +8.536758637148283 +47.34990372504571 +428.6814712360486 +5.878621772455796 +87.01172691774195 +0 +120 +absolute + + + +0.01 +smooth + +8.536759392198315 +47.34990437164702 +428.6815477693474 +5.727490370698285 +86.98761440613424 +0 +120 +absolute + + + +0.01 +smooth + +8.536760146538134 +47.349905019309304 +428.681628836708 +5.575567746168687 +86.96338796297667 +0 +120 +absolute + + + +0.01 +smooth + +8.536760900159036 +47.349905668018145 +428.6817143835611 +5.42286504062933 +86.93904938504821 +0 +120 +absolute + + + +0.01 +smooth + +8.536761653052329 +47.34990631775916 +428.6818043553373 +5.269393395842603 +86.91460046912796 +0 +120 +absolute + + + +0.01 +smooth + +8.536762405209306 +47.34990696851788 +428.68189869746686 +5.115163953570833 +86.89004301199483 +0 +120 +absolute + + + +0.01 +smooth + +8.536763156621268 +47.34990762027987 +428.68199735538013 +4.960187855576403 +86.86537881042783 +0 +120 +absolute + + + +0.01 +smooth + +8.53676390727952 +47.34990827303075 +428.682100274508 +4.804476243621648 +86.84060966120603 +0 +120 +absolute + + + +0.01 +smooth + +8.53676465717535 +47.34990892675603 +428.6822074002804 +4.648040259468947 +86.81573736110833 +0 +120 +absolute + + + +0.01 +smooth + +8.536765406300066 +47.3499095814413 +428.6823186781279 +4.49089104488063 +86.79076370691378 +0 +120 +absolute + + + +0.01 +smooth + +8.536766154644967 +47.34991023707217 +428.68243405348113 +4.3330397416190864 +86.76569049540133 +0 +120 +absolute + + + +0.01 +smooth + +8.53676690220135 +47.34991089363419 +428.6825534717704 +4.174497491446642 +86.74051952335006 +0 +120 +absolute + + + +0.01 +smooth + +8.536767648960517 +47.34991155111292 +428.68267687842626 +4.015275436125682 +86.7152525875389 +0 +120 +absolute + + + +0.01 +smooth + +8.536768394913762 +47.349912209493944 +428.68280421887897 +3.8553847174185365 +86.68989148474685 +0 +120 +absolute + + + +0.01 +smooth + +8.536769140052392 +47.34991286876283 +428.6829354385592 +3.694836477087591 +86.66443801175294 +0 +120 +absolute + + + +0.01 +smooth + +8.536769884367704 +47.349913528905155 +428.68307048289716 +3.5336418568951733 +86.63889396533612 +0 +120 +absolute + + + +0.01 +smooth + +8.536770627850995 +47.34991418990649 +428.68320929732346 +3.3718119986036688 +86.61326114227543 +0 +120 +absolute + + + +0.01 +smooth + +8.536771370493565 +47.349914851752395 +428.68335182726855 +3.2093580439754077 +86.58754133934984 +0 +120 +absolute + + + +0.01 +smooth + +8.536772112286714 +47.34991551442847 +428.6834980181627 +3.0462911347727744 +86.56173635333838 +0 +120 +absolute + + + +0.01 +smooth + +8.536772853221745 +47.34991617792026 +428.68364781543664 +2.882622412758098 +86.53584798102 +0 +120 +absolute + + + +0.01 +smooth + +8.536773593289952 +47.34991684221335 +428.68380116452056 +2.7183630196937636 +86.50987801917373 +0 +120 +absolute + + + +0.01 +smooth + +8.536774332482638 +47.34991750729331 +428.683958010845 +2.5535240973421005 +86.48382826457855 +0 +120 +absolute + + + +0.01 +smooth + +8.536775070791101 +47.34991817314571 +428.6841182998404 +2.3881167874654934 +86.45770051401347 +0 +120 +absolute + + + +0.01 +smooth + +8.536775808206642 +47.34991883975613 +428.6842819769372 +2.2221522318262723 +86.43149656425749 +0 +120 +absolute + + + +0.01 +smooth + +8.53677654472056 +47.34991950711013 +428.68444898756593 +2.0556415721868078 +86.40521821208958 +0 +120 +absolute + + + +0.01 +smooth + +8.536777280324152 +47.34992017519329 +428.6846192771569 +1.8885959503094873 +86.37886725428875 +0 +120 +absolute + + + +0.01 +smooth + +8.536778015008721 +47.349920843991185 +428.6847927911406 +1.7210265079566076 +86.35244548763401 +0 +120 +absolute + + + +0.01 +smooth + +8.536778748765563 +47.349921513489384 +428.6849694749474 +1.552944386890556 +86.32595470890433 +0 +120 +absolute + + + +0.01 +smooth + +8.536779481585981 +47.349922183673456 +428.6851492740079 +1.3843607288736894 +86.29939671487875 +0 +120 +absolute + + + +0.01 +smooth + +8.536780213461274 +47.349922854528984 +428.6853321337525 +1.215286675668395 +86.27277330233622 +0 +120 +absolute + + + +0.01 +smooth + +8.536780944382738 +47.34992352604153 +428.68551799961165 +1.0457333690369708 +86.24608626805576 +0 +120 +absolute + + + +0.01 +smooth + +8.536781674341675 +47.34992419819666 +428.6857068170157 +0.8757119507418032 +86.21933740881637 +0 +120 +absolute + + + +0.01 +smooth + +8.536782403329388 +47.34992487097997 +428.6858985313952 +0.7052335625452495 +86.19252852139705 +0 +120 +absolute + + + +0.01 +smooth + +8.536783131345022 +47.34992554439151 +428.68609471856405 +0.5342962890415038 +86.16565942615007 +0 +120 +absolute + + + +0.01 +smooth + +8.536783858576113 +47.349926218778165 +428.68633554857803 +0.3625856278583941 +86.13868263541363 +0 +120 +absolute + + + +0.01 +smooth + +8.536784585100564 +47.349926894280806 +428.6866370200904 +0.18997170558483414 +86.11157862720245 +0 +120 +absolute + + + +0.01 +smooth + +8.53678531091173 +47.349927570883544 +428.68699736212267 +0.01646560738733495 +86.08434921889005 +0 +120 +absolute + + + +0.01 +smooth + +8.536786036002985 +47.34992824857056 +428.6874148036972 +-0.157921581567561 +86.05699622785005 +0 +120 +absolute + + + +0.01 +smooth + +8.536786760367683 +47.34992892732596 +428.6878875738349 +-0.3331787761134048 +86.02952147145592 +0 +120 +absolute + + + +0.01 +smooth + +8.536787483999197 +47.34992960713391 +428.6884139015585 +-0.5092948910836542 +86.00192676708127 +0 +120 +absolute + + + +0.01 +smooth + +8.536788206890888 +47.34993028797854 +428.6889920158892 +-0.6862588413117982 +85.97421393209966 +0 +120 +absolute + + + +0.01 +smooth + +8.53678892903612 +47.34993096984399 +428.68962014584906 +-0.8640595416312945 +85.94638478388461 +0 +120 +absolute + + + +0.01 +smooth + +8.53678965042826 +47.34993165271439 +428.6902965204598 +-1.0426859068756942 +85.91844113980967 +0 +120 +absolute + + + +0.01 +smooth + +8.536790371060675 +47.349932336573914 +428.6910193687434 +-1.2221268518784554 +85.89038481724845 +0 +120 +absolute + + + +0.01 +smooth + +8.536791090926727 +47.349933021406684 +428.6917869197216 +-1.4023712914730668 +85.86221763357447 +0 +120 +absolute + + + +0.01 +smooth + +8.53679181001978 +47.34993370719684 +428.69259740241597 +-1.5834081404930171 +85.83394140616126 +0 +120 +absolute + + + +0.01 +smooth + +8.536792528333198 +47.34993439392853 +428.6934490458487 +-1.7652263137717634 +85.80555795238242 +0 +120 +absolute + + + +0.01 +smooth + +8.536793245860348 +47.349935081585905 +428.6943400790414 +-1.947814726142858 +85.77706908961147 +0 +120 +absolute + + + +0.01 +smooth + +8.5367939625946 +47.34993577015309 +428.695268731016 +-2.1311622924397593 +85.74847663522203 +0 +120 +absolute + + + +0.01 +smooth + +8.536794678529306 +47.34993645961421 +428.6962332307941 +-2.3152579274959546 +85.71978240658757 +0 +120 +absolute + + + +0.01 +smooth + +8.536795393657844 +47.34993714995346 +428.69723180739766 +-2.5000905461449006 +85.6909882210817 +0 +120 +absolute + + + +0.01 +smooth + +8.53679610797357 +47.34993784115494 +428.69826268984855 +-2.6856490632201515 +85.66209589607794 +0 +120 +absolute + + + +0.01 +smooth + +8.536796821469855 +47.34993853320282 +428.69932410716865 +-2.8719223935551645 +85.63310724894988 +0 +120 +absolute + + + +0.01 +smooth + +8.536797534140055 +47.349939226081204 +428.7004142883793 +-3.058899451983427 +85.60402409707105 +0 +120 +absolute + + + +0.01 +smooth + +8.536798245977545 +47.34993991977427 +428.7015314625029 +-3.246569153338396 +85.57484825781502 +0 +120 +absolute + + + +0.01 +smooth + +8.536798956975684 +47.34994061426614 +428.70267385856096 +-3.4349204124536246 +85.54558154855533 +0 +120 +absolute + + + +0.01 +smooth + +8.53679966712784 +47.34994130954097 +428.7038397055755 +-3.6239421441625717 +85.51622578666557 +0 +120 +absolute + + + +0.01 +smooth + +8.53680037642737 +47.349942005582875 +428.705027232568 +-3.813623263298724 +85.48678278951924 +0 +120 +absolute + + + +0.01 +smooth + +8.53680108486765 +47.34994270237601 +428.7062346685605 +-4.003952684695536 +85.45725437448993 +0 +120 +absolute + + + +0.01 +smooth + +8.536801792442038 +47.34994339990454 +428.70746024257477 +-4.194919323186566 +85.42764235895119 +0 +120 +absolute + + + +0.01 +smooth + +8.536802499143901 +47.349944098152584 +428.7087021836326 +-4.386512093605269 +85.39794856027657 +0 +120 +absolute + + + +0.01 +smooth + +8.536803204966603 +47.349944797104285 +428.7099587207559 +-4.578719910785132 +85.36817479583966 +0 +120 +absolute + + + +0.01 +smooth + +8.53680390990351 +47.34994549674381 +428.7112280829664 +-4.771531689559612 +85.33832288301396 +0 +120 +absolute + + + +0.01 +smooth + +8.536804613947984 +47.34994619705525 +428.7125084992859 +-4.964936344762265 +85.30839463917306 +0 +120 +absolute + + + +0.01 +smooth + +8.536805317093393 +47.34994689802279 +428.71379819873624 +-5.158922791226545 +85.27839188169051 +0 +120 +absolute + + + +0.01 +smooth + +8.536806019333099 +47.34994759963056 +428.71509541033925 +-5.353479943785942 +85.24831642793986 +0 +120 +absolute + + + +0.01 +smooth + +8.53680672066047 +47.349948301862696 +428.7163983631168 +-5.548596717273911 +85.21817009529467 +0 +120 +absolute + + + +0.01 +smooth + +8.536807421068868 +47.34994900470335 +428.71770528609056 +-5.744262026524009 +85.18795470112848 +0 +120 +absolute + + + +0.01 +smooth + +8.53680812055166 +47.34994970813664 +428.7190144082824 +-5.940464786369691 +85.15767206281485 +0 +120 +absolute + + + +0.01 +smooth + +8.53680881910221 +47.34995041214674 +428.7203239587142 +-6.137193911644443 +85.12732399772736 +0 +120 +absolute + + + +0.01 +smooth + +8.53680951671388 +47.349951116717776 +428.72163216640774 +-6.334438317181723 +85.09691232323955 +0 +120 +absolute + + + +0.01 +smooth + +8.536810213380042 +47.3499518218339 +428.7229372603848 +-6.532186917815087 +85.06643885672496 +0 +120 +absolute + + + +0.01 +smooth + +8.536810909094054 +47.349952527479225 +428.7242374696672 +-6.730428628377991 +85.03590541555717 +0 +120 +absolute + + + +0.01 +smooth + +8.536811603849282 +47.34995323363793 +428.72553102327674 +-6.929152363703923 +85.00531381710971 +0 +120 +absolute + + + +0.01 +smooth + +8.536812297639093 +47.34995394029412 +428.72681615023527 +-7.128347038626336 +84.97466587875616 +0 +120 +absolute + + + +0.01 +smooth + +8.53681299045685 +47.34995464743198 +428.7280910795647 +-7.32800156797879 +84.94396341787005 +0 +120 +absolute + + + +0.01 +smooth + +8.53681368229592 +47.34995535503562 +428.72935404028664 +-7.528104866594738 +84.91320825182495 +0 +120 +absolute + + + +0.01 +smooth + +8.536814373149666 +47.34995606308918 +428.7306032614231 +-7.728645849307671 +84.88240219799444 +0 +120 +absolute + + + +0.01 +smooth + +8.536815063011453 +47.34995677157683 +428.7318369719956 +-7.929613430951039 +84.85154707375202 +0 +120 +absolute + + + +0.01 +smooth + +8.536815751874645 +47.34995748048268 +428.73305340102627 +-8.130996526358405 +84.82064469647128 +0 +120 +absolute + + + +0.01 +smooth + +8.536816439732608 +47.3499581897909 +428.7342507775368 +-8.332784050363221 +84.78969688352576 +0 +120 +absolute + + + +0.01 +smooth + +8.53681712662694 +47.34995889958251 +428.73543460702984 +-8.535043814469304 +84.75869336697318 +0 +120 +absolute + + + +0.01 +smooth + +8.536817812749204 +47.34995961023988 +428.73663352833785 +-8.738089098721645 +84.72758629467319 +0 +120 +absolute + + + +0.01 +smooth + +8.536818498113991 +47.349960321789816 +428.7378501345816 +-8.941943911048288 +84.69637214596865 +0 +120 +absolute + + + +0.01 +smooth + +8.536819182714456 +47.349961034216 +428.73908381585227 +-9.146597194954957 +84.66505277236409 +0 +120 +absolute + + + +0.01 +smooth + +8.53681986654375 +47.349961747502135 +428.74033396224075 +-9.352037893947411 +84.63363002536398 +0 +120 +absolute + + + +0.01 +smooth + +8.536820549595022 +47.349962461631954 +428.7415999638386 +-9.55825495153137 +84.60210575647287 +0 +120 +absolute + + + +0.01 +smooth + +8.536821231861433 +47.34996317658915 +428.74288121073675 +-9.76523731121267 +84.57048181719526 +0 +120 +absolute + + + +0.01 +smooth + +8.536821913336126 +47.34996389235744 +428.7441770930264 +-9.972973916497033 +84.53876005903567 +0 +120 +absolute + + + +0.01 +smooth + +8.536822594012255 +47.349964608920516 +428.74548700079845 +-10.181453710890212 +84.50694233349856 +0 +120 +absolute + + + +0.01 +smooth + +8.536823273882973 +47.34996532626211 +428.74681032414435 +-10.390665637897932 +84.4750304920885 +0 +120 +absolute + + + +0.01 +smooth + +8.536823952941434 +47.34996604436592 +428.74814645315513 +-10.60059864102603 +84.44302638630997 +0 +120 +absolute + + + +0.01 +smooth + +8.536824631180787 +47.349966763215654 +428.74949477792205 +-10.811241663780221 +84.41093186766747 +0 +120 +absolute + + + +0.01 +smooth + +8.536825308594183 +47.349967482795 +428.7508546885359 +-11.022583649666267 +84.37874878766553 +0 +120 +absolute + + + +0.01 +smooth + +8.536825985174774 +47.3499682030877 +428.7522255750882 +-11.234613542189924 +84.34647899780863 +0 +120 +absolute + + + +0.01 +smooth + +8.536826660915718 +47.34996892407745 +428.7536068276701 +-11.44732028485692 +84.31412434960134 +0 +120 +absolute + + + +0.01 +smooth + +8.53682733581016 +47.34996964574796 +428.7549978363726 +-11.660692821173082 +84.28168669454814 +0 +120 +absolute + + + +0.01 +smooth + +8.536828009851256 +47.34997036808293 +428.75639799128663 +-11.874720094644129 +84.2491678841535 +0 +120 +absolute + + + +0.01 +smooth + +8.536828683032152 +47.34997109106606 +428.7578066825036 +-12.089391048775827 +84.21656976992196 +0 +120 +absolute + + + +0.01 +smooth + +8.536829355346011 +47.34997181468109 +428.7592233001148 +-12.304694627073896 +84.18389420335807 +0 +120 +absolute + + + +0.01 +smooth + +8.536830026785974 +47.349972538911715 +428.76064723421115 +-12.520619773044166 +84.15114303596629 +0 +120 +absolute + + + +0.01 +smooth + +8.536830697345197 +47.34997326374162 +428.76207787488363 +-12.737155430192358 +84.11831811925111 +0 +120 +absolute + + + +0.01 +smooth + +8.536831367016834 +47.34997398915453 +428.7635146122237 +-12.954290542024234 +84.08542130471707 +0 +120 +absolute + + + +0.01 +smooth + +8.536832035794035 +47.349974715134174 +428.7649568363224 +-13.172014052045512 +84.05245444386871 +0 +120 +absolute + + + +0.01 +smooth + +8.536832703669953 +47.34997544166424 +428.766403937271 +-13.39031490376203 +84.01941938821052 +0 +120 +absolute + + + +0.01 +smooth + +8.536833370637737 +47.34997616872842 +428.7678553051603 +-13.609182040679503 +83.98631798924698 +0 +120 +absolute + + + +0.01 +smooth + +8.536834036690541 +47.34997689631045 +428.76931033008174 +-13.828604406303697 +83.9531520984826 +0 +120 +absolute + + + +0.01 +smooth + +8.536834701821519 +47.34997762439403 +428.77076840212635 +-14.048570944140323 +83.91992356742195 +0 +120 +absolute + + + +0.01 +smooth + +8.536835366023817 +47.349978352962864 +428.77222891138535 +-14.269070597695228 +83.88663424756948 +0 +120 +absolute + + + +0.01 +smooth + +8.536836029290594 +47.34997908200067 +428.7736912479497 +-14.490092310474123 +83.85328599042971 +0 +120 +absolute + + + +0.01 +smooth + +8.536836691615 +47.34997981149115 +428.77515480191084 +-14.711625025982768 +83.81988064750716 +0 +120 +absolute + + + +0.01 +smooth + +8.536837352990183 +47.349980541418006 +428.77661896335974 +-14.933657687726887 +83.78642007030635 +0 +120 +absolute + + + +0.01 +smooth + +8.536838013409298 +47.34998127176495 +428.77808312238744 +-15.156179239212316 +83.75290611033178 +0 +120 +absolute + + + +0.01 +smooth + +8.536838672865498 +47.3499820025157 +428.77954666908533 +-15.379178623944771 +83.71934061908794 +0 +120 +absolute + + + +0.01 +smooth + +8.536839331351933 +47.34998273365396 +428.78100899354445 +-15.602644785430009 +83.68572544807937 +0 +120 +absolute + + + +0.01 +smooth + +8.536839988861754 +47.349983465163426 +428.78246948585576 +-15.826566667173756 +83.65206244881058 +0 +120 +absolute + + + +0.01 +smooth + +8.536840645388118 +47.34998419702782 +428.7839275361107 +-16.050933212681848 +83.61835347278604 +0 +120 +absolute + + + +0.01 +smooth + +8.536841300924172 +47.34998492923085 +428.7853825344002 +-16.27573336546 +83.5846003715103 +0 +120 +absolute + + + +0.01 +smooth + +8.536841955463068 +47.34998566175622 +428.7868338708156 +-16.500956069013974 +83.55080499648786 +0 +120 +absolute + + + +0.01 +smooth + +8.53684260899796 +47.34998639458763 +428.7882809354478 +-16.726590266849488 +83.51696919922321 +0 +120 +absolute + + + +0.01 +smooth + +8.536843261521998 +47.3499871277088 +428.7897231183881 +-16.95262490247238 +83.4830948312209 +0 +120 +absolute + + + +0.01 +smooth + +8.536843913028338 +47.34998786110346 +428.7911598097276 +-17.179048919388368 +83.44918374398539 +0 +120 +absolute + + + +0.01 +smooth + +8.536844563510128 +47.349988594755274 +428.7925903995575 +-17.40585126110322 +83.41523778902123 +0 +120 +absolute + + + +0.01 +smooth + +8.536845212960522 +47.349989328647965 +428.79401427796887 +-17.63302087112264 +83.38125881783293 +0 +120 +absolute + + + +0.01 +smooth + +8.536845861372669 +47.34999006276526 +428.79543083505297 +-17.860546692952468 +83.34724868192495 +0 +120 +absolute + + + +0.01 +smooth + +8.536846508739725 +47.34999079709084 +428.7968394609008 +-18.088417670098437 +83.31320923280185 +0 +120 +absolute + + + +0.01 +smooth + +8.536847155054836 +47.349991531608445 +428.79823954560356 +-18.316622746066294 +83.27914232196812 +0 +120 +absolute + + + +0.01 +smooth + +8.536847800311163 +47.349992266301754 +428.7996304792524 +-18.545150864361755 +83.24504980092829 +0 +120 +absolute + + + +0.01 +smooth + +8.53684844450185 +47.34999300115449 +428.80101165193855 +-18.77399096849067 +83.21093352118685 +0 +120 +absolute + + + +0.01 +smooth + +8.536849087772579 +47.34999373639343 +428.8023897045998 +-19.003319822502416 +83.1767657441353 +0 +120 +absolute + + + +0.01 +smooth + +8.536849730288386 +47.34999447227949 +428.8037724471154 +-19.23334037993802 +83.14251463900071 +0 +120 +absolute + + + +0.01 +smooth + +8.536850372039728 +47.34999520879716 +428.8051595266705 +-19.464041900506118 +83.1081820599703 +0 +120 +absolute + + + +0.01 +smooth + +8.536851013016877 +47.34999594593067 +428.80655058187466 +-19.69541342060262 +83.07376989642286 +0 +120 +absolute + + + +0.01 +smooth + +8.536851653210102 +47.3499966836642 +428.8079452513376 +-19.927443976623337 +83.03928003773703 +0 +120 +absolute + + + +0.01 +smooth + +8.536852292609684 +47.349997421981996 +428.8093431736691 +-20.160122604964133 +83.00471437329159 +0 +120 +absolute + + + +0.01 +smooth + +8.536852931205884 +47.349998160868246 +428.8107439874785 +-20.393438342020797 +82.97007479246524 +0 +120 +absolute + + + +0.01 +smooth + +8.536853568988983 +47.34999890030718 +428.81214733137585 +-20.627380224189267 +82.93536318463674 +0 +120 +absolute + + + +0.01 +smooth + +8.53685420594925 +47.349999640282995 +428.8135528439703 +-20.861937287865338 +82.90058143918473 +0 +120 +absolute + + + +0.01 +smooth + +8.536854842076957 +47.35000038077991 +428.814960163872 +-21.097098569444874 +82.86573144548802 +0 +120 +absolute + + + +0.01 +smooth + +8.536855477362378 +47.350001121782114 +428.81636892969027 +-21.332853105323665 +82.83081509292526 +0 +120 +absolute + + + +0.01 +smooth + +8.536856111795785 +47.35000186327386 +428.8177787800349 +-21.56918993189766 +82.79583427087525 +0 +120 +absolute + + + +0.01 +smooth + +8.536856745367448 +47.35000260523932 +428.8191893535154 +-21.80609808556265 +82.76079086871663 +0 +120 +absolute + + + +0.01 +smooth + +8.536857378067639 +47.35000334766272 +428.8206002887415 +-22.04356660271448 +82.72568677582817 +0 +120 +absolute + + + +0.01 +smooth + +8.536858009886638 +47.35000409052829 +428.8220112243229 +-22.281584519748975 +82.6905238815886 +0 +120 +absolute + + + +0.01 +smooth + +8.536858640814707 +47.35000483382023 +428.8234217988693 +-22.520140873062047 +82.65530407537663 +0 +120 +absolute + + + +0.01 +smooth + +8.536859270842125 +47.350005577522715 +428.82483165099006 +-22.75922469904951 +82.62002924657094 +0 +120 +absolute + + + +0.01 +smooth + +8.536859899959163 +47.35000632162 +428.826240419295 +-22.998825034107213 +82.5847012845503 +0 +120 +absolute + + + +0.01 +smooth + +8.536860528156094 +47.350007066096296 +428.82764774239394 +-23.238930914631 +82.54932207869346 +0 +120 +absolute + + + +0.01 +smooth + +8.536861155423187 +47.35000781093579 +428.82905325889624 +-23.479531377016677 +82.51389351837908 +0 +120 +absolute + + + +0.01 +smooth + +8.536861781750716 +47.35000855612272 +428.8304566074115 +-23.72061545766017 +82.4784174929859 +0 +120 +absolute + + + +0.01 +smooth + +8.536862407128952 +47.35000930164125 +428.8318574265496 +-23.96217219295729 +82.44289589189263 +0 +120 +absolute + + + +0.01 +smooth + +8.536863031548176 +47.35001004747566 +428.83325535492037 +-24.2041906193039 +82.40733060447806 +0 +120 +absolute + + + +0.01 +smooth + +8.53686365499865 +47.35001079361011 +428.8346500311329 +-24.446659773095778 +82.37172352012084 +0 +120 +absolute + + + +0.01 +smooth + +8.536864277470649 +47.35001154002883 +428.83604109379723 +-24.68956869072887 +82.33607652819971 +0 +120 +absolute + + + +0.01 +smooth + +8.536864898954445 +47.35001228671602 +428.8374281815228 +-24.932906408598985 +82.3003915180934 +0 +120 +absolute + + + +0.01 +smooth + +8.536865519440315 +47.350013033655905 +428.8388109329195 +-25.176661963101957 +82.26467037918064 +0 +120 +absolute + + + +0.01 +smooth + +8.536866138918526 +47.350013780832676 +428.8401889865968 +-25.420824390633605 +82.22891500084015 +0 +120 +absolute + + + +0.01 +smooth + +8.536866757379354 +47.35001452823059 +428.8415619811642 +-25.665382727589858 +82.19312727245061 +0 +120 +absolute + + + +0.01 +smooth + +8.536867374813069 +47.3500152758338 +428.84292955523176 +-25.91032601036651 +82.1573090833908 +0 +120 +absolute + + + +0.01 +smooth + +8.536867991209943 +47.35001602362655 +428.84429134740867 +-26.155643275359424 +82.12146232303942 +0 +120 +absolute + + + +0.01 +smooth + +8.536868606560251 +47.35001677159305 +428.84564699630494 +-26.401323558964393 +82.0855888807752 +0 +120 +absolute + + + +0.01 +smooth + +8.536869220854264 +47.35001751971751 +428.84699614053 +-26.647355897577363 +82.04969064597685 +0 +120 +absolute + + + +0.01 +smooth + +8.536869834082253 +47.35001826798413 +428.84833841869363 +-26.893729327594123 +82.01376950802309 +0 +120 +absolute + + + +0.01 +smooth + +8.536870446234492 +47.35001901637713 +428.8496734694054 +-27.140432885410533 +81.97782735629264 +0 +120 +absolute + + + +0.01 +smooth + +8.536871057301251 +47.350019764880734 +428.8510009312748 +-27.387455607422392 +81.94186608016423 +0 +120 +absolute + + + +0.01 +smooth + +8.536871667272807 +47.35002051347913 +428.8523204429118 +-27.634786530025636 +81.90588756901661 +0 +120 +absolute + + + +0.01 +smooth + +8.53687227613943 +47.350021262156545 +428.85363164292585 +-27.882414689616066 +81.86989371222843 +0 +120 +absolute + + + +0.01 +smooth + +8.536872883891387 +47.35002201089718 +428.8549341699266 +-28.130329122589536 +81.83388639917848 +0 +120 +absolute + + + +0.01 +smooth + +8.53687349051896 +47.35002275968525 +428.8562276625237 +-28.37851886534184 +81.79786751924547 +0 +120 +absolute + + + +0.01 +smooth + +8.536874096012415 +47.350023508504975 +428.8575117593269 +-28.62697295426892 +81.76183896180811 +0 +120 +absolute + + + +0.01 +smooth + +8.536874700362027 +47.35002425734055 +428.8587860989456 +-28.875680425766575 +81.72580261624512 +0 +120 +absolute + + + +0.01 +smooth + +8.536875303558066 +47.3500250061762 +428.8600503199897 +-29.124630316230665 +81.68976037193521 +0 +120 +absolute + + + +0.01 +smooth + +8.536875905590804 +47.35002575499614 +428.8613040610688 +-29.373811662056976 +81.65371411825714 +0 +120 +absolute + + + +0.01 +smooth + +8.536876506450518 +47.35002650378456 +428.8625469607924 +-29.623213499641455 +81.61766574458959 +0 +120 +absolute + + + +0.01 +smooth + +8.536877106127477 +47.35002725252569 +428.86377865777024 +-29.872824865379904 +81.58161714031134 +0 +120 +absolute + + + +0.01 +smooth + +8.536877704611953 +47.35002800120374 +428.864998790612 +-30.122634795668166 +81.54557019480103 +0 +120 +absolute + + + +0.01 +smooth + +8.536878301920824 +47.35002874982978 +428.8662076283983 +-30.372652915970214 +81.50952338118469 +0 +120 +absolute + + + +0.01 +smooth + +8.536878898388556 +47.35002949873754 +428.86741303271964 +-30.62313598085947 +81.47343418933252 +0 +120 +absolute + + + +0.01 +smooth + +8.536879494106662 +47.35003024801983 +428.8686172480008 +-30.874155571414985 +81.43729088041695 +0 +120 +absolute + + + +0.01 +smooth + +8.536880089059826 +47.35003099766212 +428.869820003497 +-31.125700927516057 +81.40109538356585 +0 +120 +absolute + + + +0.01 +smooth + +8.536880683232718 +47.35003174764983 +428.8710210284633 +-31.377761289041917 +81.36484962790705 +0 +120 +absolute + + + +0.01 +smooth + +8.536881276610025 +47.35003249796842 +428.872220052155 +-31.630325895871945 +81.32855554256841 +0 +120 +absolute + + + +0.01 +smooth + +8.536881869176419 +47.35003324860337 +428.8734168038272 +-31.883383987885374 +81.29221505667779 +0 +120 +absolute + + + +0.01 +smooth + +8.536882460916589 +47.350033999540116 +428.87461101273516 +-32.1369248049615 +81.25583009936308 +0 +120 +absolute + + + +0.01 +smooth + +8.53688305181521 +47.350034750764124 +428.8758024081342 +-32.39093758697959 +81.21940259975216 +0 +120 +absolute + + + +0.01 +smooth + +8.53688364185696 +47.35003550226082 +428.8769907192794 +-32.645411573818976 +81.18293448697281 +0 +120 +absolute + + + +0.01 +smooth + +8.53688423102652 +47.35003625401568 +428.8781756754258 +-32.900336005358916 +81.14642769015292 +0 +120 +absolute + + + +0.01 +smooth + +8.536884819308566 +47.35003700601415 +428.87935700582864 +-33.155700121478716 +81.10988413842037 +0 +120 +absolute + + + +0.01 +smooth + +8.536885406687784 +47.3500377582417 +428.8805344397434 +-33.4114931620576 +81.07330576090305 +0 +120 +absolute + + + +0.01 +smooth + +8.536885993148854 +47.35003851068375 +428.8817077064252 +-33.66770436697495 +81.03669448672876 +0 +120 +absolute + + + +0.01 +smooth + +8.536886578676445 +47.35003926332579 +428.8828765351288 +-33.92432297611002 +81.00005224502536 +0 +120 +absolute + + + +0.01 +smooth + +8.536887163255248 +47.35004001615326 +428.88404065510986 +-34.18133822934207 +80.96338096492076 +0 +120 +absolute + + + +0.01 +smooth + +8.536887746869937 +47.350040769151605 +428.8851997956235 +-34.438739366550365 +80.92668257554276 +0 +120 +absolute + + + +0.01 +smooth + +8.53688832950519 +47.350041522306284 +428.88635368592463 +-34.696515627614275 +80.88995900601927 +0 +120 +absolute + + + +0.01 +smooth + +8.536888911145693 +47.350042275602775 +428.887502055269 +-34.95465625241305 +80.85321218547814 +0 +120 +absolute + + + +0.01 +smooth + +8.53688949177612 +47.35004302902648 +428.88864463291117 +-35.21315048082596 +80.8164440430472 +0 +120 +absolute + + + +0.01 +smooth + +8.536890071381151 +47.350043782562885 +428.8897811481065 +-35.4719875527323 +80.77965650785433 +0 +120 +absolute + + + +0.01 +smooth + +8.53689064994547 +47.35004453619746 +428.8909113301106 +-35.73115670801133 +80.74285150902739 +0 +120 +absolute + + + +0.01 +smooth + +8.536891227453749 +47.35004528991564 +428.8920349081783 +-35.990647186542404 +80.70603097569425 +0 +120 +absolute + + + +0.01 +smooth + +8.536891803890676 +47.350046043702875 +428.89315161156486 +-36.25044822820479 +80.66919683698274 +0 +120 +absolute + + + +0.01 +smooth + +8.536892379240921 +47.35004679754462 +428.89426116952546 +-36.51054907287774 +80.63235102202076 +0 +120 +absolute + + + +0.01 +smooth + +8.536892953489172 +47.35004755142633 +428.8953633113153 +-36.77093896044052 +80.59549545993615 +0 +120 +absolute + + + +0.01 +smooth + +8.536893526620105 +47.350048305333466 +428.89645776618966 +-37.03160713077251 +80.55863207985676 +0 +120 +absolute + + + +0.01 +smooth + +8.536894098618399 +47.350049059251475 +428.8975442634036 +-37.29254282375293 +80.52176281091045 +0 +120 +absolute + + + +0.01 +smooth + +8.536894669468735 +47.35004981316581 +428.89862253221236 +-37.5537352792611 +80.48488958222508 +0 +120 +absolute + + + +0.01 +smooth + +8.536895239155792 +47.35005056706193 +428.89969230187114 +-37.81517373717623 +80.44801432292854 +0 +120 +absolute + + + +0.01 +smooth + +8.536895807664248 +47.350051320925274 +428.9007533016352 +-38.07684743737772 +80.41113896214866 +0 +120 +absolute + + + +0.01 +smooth + +8.536896374978785 +47.35005207474132 +428.9018052607596 +-38.3387456197448 +80.3742654290133 +0 +120 +absolute + + + +0.01 +smooth + +8.53689694108408 +47.350052828495514 +428.9028479084996 +-38.600857524156766 +80.33739565265034 +0 +120 +absolute + + + +0.01 +smooth + +8.536897505964816 +47.3500535821733 +428.9038809741105 +-38.86317239049285 +80.30053156218762 +0 +120 +absolute + + + +0.01 +smooth + +8.536898069605668 +47.350054335760134 +428.9049041868474 +-39.12567945863245 +80.26367508675301 +0 +120 +absolute + + + +0.01 +smooth + +8.536898631991319 +47.35005508924148 +428.9059172759654 +-39.38836796845477 +80.22682815547435 +0 +120 +absolute + + + +0.01 +smooth + +8.53689919310645 +47.35005584260278 +428.90691997071985 +-39.651227159839145 +80.18999269747954 +0 +120 +absolute + + + +0.01 +smooth + +8.536899752935735 +47.3500565958295 +428.90791200036585 +-39.91424627266478 +80.1531706418964 +0 +120 +absolute + + + +0.01 +smooth + +8.536900311463857 +47.35005734890707 +428.90889309415866 +-40.17741454681108 +80.11636391785281 +0 +120 +absolute + + + +0.01 +smooth + +8.536900868675495 +47.35005810182097 +428.9098629813534 +-40.44072122215726 +80.07957445447661 +0 +120 +absolute + + + +0.01 +smooth + +8.536901424555328 +47.35005885455665 +428.91082139120533 +-40.704155538582626 +80.0428041808957 +0 +120 +absolute + + + +0.01 +smooth + +8.536901979088036 +47.35005960709955 +428.9117680529696 +-40.96770673596641 +80.00605502623792 +0 +120 +absolute + + + +0.01 +smooth + +8.5369025322583 +47.35006035943513 +428.91270269590154 +-41.231364054188006 +79.96932891963111 +0 +120 +absolute + + + +0.01 +smooth + +8.536903084050797 +47.350061111548854 +428.91362504925604 +-41.495116733126636 +79.93262779020313 +0 +120 +absolute + + + +0.01 +smooth + +8.536903634450209 +47.35006186342616 +428.91453484228856 +-41.7589540126616 +79.89595356708186 +0 +120 +absolute + + + +0.01 +smooth + +8.536904183441212 +47.350062615052515 +428.91543180425424 +-42.02286513267214 +79.85930817939519 +0 +120 +absolute + + + +0.01 +smooth + +8.53690473100849 +47.35006336641337 +428.9163156644083 +-42.28683933303762 +79.8226935562709 +0 +120 +absolute + + + +0.01 +smooth + +8.53690527713672 +47.35006411749417 +428.9171861520057 +-42.550865853637305 +79.78611162683693 +0 +120 +absolute + + + +0.01 +smooth + +8.536905821990283 +47.35006486838699 +428.91804581671636 +-42.81501836634279 +79.74954913316208 +0 +120 +absolute + + + +0.01 +smooth + +8.536906366070621 +47.350065619386996 +428.918902571085 +-43.07953095393226 +79.71296401446129 +0 +120 +absolute + + + +0.01 +smooth + +8.536906909387223 +47.35006637050095 +428.91975668253303 +-43.3444086963717 +79.67635545450094 +0 +120 +absolute + + + +0.01 +smooth + +8.536907451916452 +47.350067121716066 +428.9206079007531 +-43.609641170768334 +79.63972542717882 +0 +120 +absolute + + + +0.01 +smooth + +8.536907993634655 +47.3500678730195 +428.92145597543777 +-43.87521795422941 +79.60307590639265 +0 +120 +absolute + + + +0.01 +smooth + +8.536908534518199 +47.35006862439843 +428.92230065627945 +-44.1411286238622 +79.56640886604022 +0 +120 +absolute + + + +0.01 +smooth + +8.53690907454343 +47.35006937584007 +428.9231416929708 +-44.40736275677407 +79.52972628001925 +0 +120 +absolute + + + +0.01 +smooth + +8.53690961368672 +47.350070127331605 +428.92397883520454 +-44.673909930072284 +79.49303012222752 +0 +120 +absolute + + + +0.01 +smooth + +8.536910151924415 +47.35007087886021 +428.9248118326733 +-44.9407597208641 +79.45632236656282 +0 +120 +absolute + + + +0.01 +smooth + +8.536910689232878 +47.350071630413076 +428.92564043506934 +-45.20790170625677 +79.41960498692285 +0 +120 +absolute + + + +0.01 +smooth + +8.53691122558846 +47.35007238197738 +428.92646439208534 +-45.47532546335766 +79.38287995720538 +0 +120 +absolute + + + +0.01 +smooth + +8.536911760967527 +47.35007313354033 +428.9272834534143 +-45.74302056927404 +79.3461492513082 +0 +120 +absolute + + + +0.01 +smooth + +8.536912295346431 +47.3500738850891 +428.9280973687484 +-46.01097660111317 +79.30941484312908 +0 +120 +absolute + + + +0.01 +smooth + +8.536912828701528 +47.35007463661087 +428.9289058877802 +-46.27918313598228 +79.27267870656569 +0 +120 +absolute + + + +0.01 +smooth + +8.536913361009177 +47.35007538809285 +428.92970876020235 +-46.54762975098877 +79.23594281551586 +0 +120 +absolute + + + +0.01 +smooth + +8.536913892245739 +47.350076139522216 +428.93050573570775 +-46.816306023239896 +79.19920914387734 +0 +120 +absolute + + + +0.01 +smooth + +8.536914422387568 +47.350076890886164 +428.9312965639886 +-47.08520152984293 +79.16247966554792 +0 +120 +absolute + + + +0.01 +smooth + +8.536914951411019 +47.350077642171854 +428.9320809947376 +-47.35430584790507 +79.12575635442525 +0 +120 +absolute + + + +0.01 +smooth + +8.536915479292452 +47.35007839336647 +428.93285877764725 +-47.62360855453375 +79.08904118440718 +0 +120 +absolute + + + +0.01 +smooth + +8.536916006008225 +47.350079144457254 +428.93362966241034 +-47.89309922683619 +79.05233612939146 +0 +120 +absolute + + + +0.01 +smooth + +8.536916531534697 +47.35007989543136 +428.9343933987194 +-48.162767441919705 +79.01564316327584 +0 +120 +absolute + + + +0.01 +smooth + +8.536917055848217 +47.35008064627596 +428.9351497362668 +-48.43260277689146 +78.97896425995805 +0 +120 +absolute + + + +0.01 +smooth + +8.536917578925149 +47.35008139697824 +428.93589842474535 +-48.702594808858905 +78.94230139333584 +0 +120 +absolute + + + +0.01 +smooth + +8.536918100741852 +47.350082147525434 +428.9366392138477 +-48.97273311492927 +78.90565653730705 +0 +120 +absolute + + + +0.01 +smooth + +8.53691862127468 +47.350082897904684 +428.93737185326614 +-49.243007272209795 +78.86903166576936 +0 +120 +absolute + + + +0.01 +smooth + +8.53691914049999 +47.35008364810319 +428.9380960926935 +-49.51340685780782 +78.83242875262054 +0 +120 +absolute + + + +0.01 +smooth + +8.53691965839414 +47.350084398108145 +428.93881168182224 +-49.78392144883057 +78.79584977175838 +0 +120 +absolute + + + +0.01 +smooth + +8.536920174933488 +47.350085147906725 +428.939518370345 +-50.0545406223854 +78.75929669708061 +0 +120 +absolute + + + +0.01 +smooth + +8.53692069009439 +47.35008589748612 +428.9402159079544 +-50.32525395557958 +78.72277150248499 +0 +120 +absolute + + + +0.01 +smooth + +8.536921203853206 +47.350086646833525 +428.940904044343 +-50.59605102552038 +78.68627616186927 +0 +120 +absolute + + + +0.01 +smooth + +8.53692171618629 +47.35008739593613 +428.9415825292033 +-50.866921409315054 +78.64981264913126 +0 +120 +absolute + + + +0.01 +smooth + +8.53692222707 +47.35008814478111 +428.942251112228 +-51.13785468407095 +78.61338293816866 +0 +120 +absolute + + + +0.01 +smooth + +8.536922736480697 +47.35008889335565 +428.9429095431096 +-51.40884042689534 +78.57698900287924 +0 +120 +absolute + + + +0.01 +smooth + +8.536923244394734 +47.35008964164695 +428.9435575715407 +-51.679868214895514 +78.54063281716076 +0 +120 +absolute + + + +0.01 +smooth + +8.53692375078847 +47.35009038964219 +428.9441949472139 +-51.95092762517868 +78.504316354911 +0 +120 +absolute + + + +0.01 +smooth + +8.53692425563826 +47.35009113732856 +428.9448214198219 +-52.22200823485224 +78.46804159002768 +0 +120 +absolute + + + +0.01 +smooth + +8.536924758920463 +47.350091884693256 +428.9454367390571 +-52.49309962102342 +78.43181049640859 +0 +120 +absolute + + + +0.01 +smooth + +8.53692526061144 +47.35009263172344 +428.9460406546121 +-52.76419136079952 +78.39562504795146 +0 +120 +absolute + + + +0.01 +smooth + +8.536925760687541 +47.35009337840633 +428.9466329161796 +-53.03527303128778 +78.35948721855408 +0 +120 +absolute + + + +0.01 +smooth + +8.536926259125131 +47.35009412472908 +428.94721327345223 +-53.30633420959556 +78.32339898211418 +0 +120 +absolute + + + +0.01 +smooth + +8.536926755900563 +47.35009487067891 +428.9477814761224 +-53.577364472830126 +78.28736231252955 +0 +120 +absolute + + + +0.01 +smooth + +8.536927250990193 +47.350095616242996 +428.94833727388277 +-53.84835339809875 +78.2513791836979 +0 +120 +absolute + + + +0.01 +smooth + +8.53692774437038 +47.35009636140851 +428.94888041642594 +-54.11929056250867 +78.21545156951704 +0 +120 +absolute + + + +0.01 +smooth + +8.536928236017484 +47.35009710616266 +428.9494106534444 +-54.39016554316727 +78.17958144388469 +0 +120 +absolute + + + +0.01 +smooth + +8.536928725907858 +47.35009785049262 +428.94992773463093 +-54.66096791718179 +78.14377078069862 +0 +120 +absolute + + + +0.01 +smooth + +8.536929214017864 +47.35009859438557 +428.95043140967795 +-54.93168726165951 +78.10802155385659 +0 +120 +absolute + + + +0.01 +smooth + +8.536929700323851 +47.35009933782872 +428.9509214282781 +-55.202313153707685 +78.07233573725637 +0 +120 +absolute + + + +0.01 +smooth + +8.536930184804676 +47.35010008081009 +428.9513975719444 +-55.47283588966643 +78.0367151598955 +0 +120 +absolute + + + +0.01 +smooth + +8.536930668064617 +47.3501008235307 +428.9518676264684 +-55.74342710591988 +78.00112514642679 +0 +120 +absolute + + + +0.01 +smooth + +8.536931150558308 +47.35010156614483 +428.95233751303334 +-56.014217770175655 +77.96553931766583 +0 +120 +absolute + + + +0.01 +smooth + +8.53693163225057 +47.35010230864166 +428.9528069049053 +-56.28519795202157 +77.92995970291065 +0 +120 +absolute + + + +0.01 +smooth + +8.536932113106213 +47.350103051010414 +428.9532754753499 +-56.55635772104551 +77.89438833145917 +0 +120 +absolute + + + +0.01 +smooth + +8.536932593090047 +47.35010379324028 +428.95374289763316 +-56.827687146835245 +77.85882723260941 +0 +120 +absolute + + + +0.01 +smooth + +8.536933072166883 +47.35010453532041 +428.9542088450207 +-57.099176298978556 +77.82327843565932 +0 +120 +absolute + + + +0.01 +smooth + +8.536933550301542 +47.35010527724006 +428.9546729907783 +-57.370815247063256 +77.7877439699069 +0 +120 +absolute + + + +0.01 +smooth + +8.536934027458834 +47.35010601898839 +428.9551350081721 +-57.64259406067724 +77.75222586465013 +0 +120 +absolute + + + +0.01 +smooth + +8.536934503603568 +47.35010676055461 +428.95559457046755 +-57.914502809408276 +77.71672614918698 +0 +120 +absolute + + + +0.01 +smooth + +8.53693497870056 +47.35010750192791 +428.9560513509304 +-58.18653156284416 +77.6812468528154 +0 +120 +absolute + + + +0.01 +smooth + +8.53693545271462 +47.350108243097466 +428.95650502282683 +-58.458670390572664 +77.6457900048334 +0 +120 +absolute + + + +0.01 +smooth + +8.536935925610564 +47.350108984052525 +428.9569552594225 +-58.730909362181734 +77.61035763453899 +0 +120 +absolute + + + +0.01 +smooth + +8.536936397353207 +47.350109724782236 +428.95740173398315 +-59.003238547259095 +77.5749517712301 +0 +120 +absolute + + + +0.01 +smooth + +8.536936867907356 +47.3501104652758 +428.95784411977445 +-59.27564801539254 +77.53957444420472 +0 +120 +absolute + + + +0.01 +smooth + +8.536937337237822 +47.350111205522424 +428.95828209006237 +-59.54812783616988 +77.50422768276081 +0 +120 +absolute + + + +0.01 +smooth + +8.53693780530943 +47.350111945511316 +428.95871531811287 +-59.820668079179036 +77.4689135161964 +0 +120 +absolute + + + +0.01 +smooth + +8.536938272086983 +47.35011268523165 +428.9591434771915 +-60.09325881400774 +77.43363397380945 +0 +120 +absolute + + + +0.01 +smooth + +8.536938737535293 +47.350113424672614 +428.959566240564 +-60.36589011024379 +77.39839108489787 +0 +120 +absolute + + + +0.01 +smooth + +8.536939201619179 +47.350114163823434 +428.9599832814964 +-60.63855203747499 +77.36318687875975 +0 +120 +absolute + + + +0.01 +smooth + +8.536939664303452 +47.35011490267329 +428.96039427325456 +-60.911234665289264 +77.32802338469303 +0 +120 +absolute + + + +0.01 +smooth + +8.536940125552922 +47.35011564121138 +428.96079888910424 +-61.18392806327434 +77.29290263199564 +0 +120 +absolute + + + +0.01 +smooth + +8.536940585332403 +47.35011637942687 +428.9611968023109 +-61.456622301018015 +77.2578266499656 +0 +120 +absolute + + + +0.01 +smooth + +8.536941043606706 +47.350117117309004 +428.9615876861407 +-61.7293074481081 +77.2227974679009 +0 +120 +absolute + + + +0.01 +smooth + +8.53694150034065 +47.35011785484697 +428.96197121385944 +-62.0019735741325 +77.18781711509949 +0 +120 +absolute + + + +0.01 +smooth + +8.536941955499044 +47.350118592029915 +428.96234705873286 +-62.27461074867896 +77.15288762085937 +0 +120 +absolute + + + +0.01 +smooth + +8.5369424090467 +47.35011932884709 +428.9627148940267 +-62.5472090413353 +77.1180110144785 +0 +120 +absolute + + + +0.01 +smooth + +8.536942860948432 +47.35012006528766 +428.96307439300676 +-62.81975852168929 +77.08318932525489 +0 +120 +absolute + + + +0.01 +smooth + +8.536943311169052 +47.35012080134084 +428.963425228939 +-63.09224925932883 +77.04842458248646 +0 +120 +absolute + + + +0.01 +smooth + +8.536943759673374 +47.350121536995815 +428.9637670750891 +-63.364671323841705 +77.01371881547126 +0 +120 +absolute + + + +0.01 +smooth + +8.536944206426211 +47.35012227224177 +428.96409960472283 +-63.63701478481572 +76.97907405350722 +0 +120 +absolute + + + +0.01 +smooth + +8.536944651392375 +47.350123007067914 +428.9644224911062 +-63.909269711838675 +76.94449232589234 +0 +120 +absolute + + + +0.01 +smooth + +8.536945094536678 +47.35012374146345 +428.9647354075048 +-64.18142617449834 +76.9099756619246 +0 +120 +absolute + + + +0.01 +smooth + +8.536945535823936 +47.35012447541755 +428.9650380271845 +-64.45347424238265 +76.87552609090197 +0 +120 +absolute + + + +0.01 +smooth + +8.536945975218957 +47.35012520891943 +428.9653300234112 +-64.72540398507935 +76.84114564212243 +0 +120 +absolute + + + +0.01 +smooth + +8.536946412686557 +47.35012594195828 +428.96561106945046 +-64.99720547217626 +76.80683634488396 +0 +120 +absolute + + + +0.01 +smooth + +8.536946848191551 +47.35012667452328 +428.9658808385684 +-65.26886877326113 +76.77260022848455 +0 +120 +absolute + + + +0.01 +smooth + +8.536947281698748 +47.35012740660366 +428.96613900403065 +-65.5403839579219 +76.73843932222215 +0 +120 +absolute + + + +0.01 +smooth + +8.536947713172964 +47.35012813818857 +428.96638523910303 +-65.8117410957463 +76.70435565539476 +0 +120 +absolute + + + +0.01 +smooth + +8.536948142579007 +47.35012886926725 +428.9666192170514 +-66.08293025632219 +76.67035125730038 +0 +120 +absolute + + + +0.01 +smooth + +8.536948569881694 +47.350129599828875 +428.9668406111414 +-66.35394150923727 +76.63642815723694 +0 +120 +absolute + + + +0.01 +smooth + +8.536948995045838 +47.35013032986264 +428.96704909463904 +-66.6247649240795 +76.60258838450245 +0 +120 +absolute + + + +0.01 +smooth + +8.53694941803625 +47.350131059357736 +428.9672443408101 +-66.89539057043666 +76.5688339683949 +0 +120 +absolute + + + +0.01 +smooth + +8.536949838817744 +47.35013178830336 +428.9674260229203 +-67.16580851789652 +76.53516693821223 +0 +120 +absolute + + + +0.01 +smooth + +8.536950257355132 +47.35013251668872 +428.96759381423556 +-67.43600883604685 +76.50158932325245 +0 +120 +absolute + + + +0.01 +smooth + +8.536950673613227 +47.350133244503006 +428.96774738802145 +-67.7059815944756 +76.46810315281353 +0 +120 +absolute + + + +0.01 +smooth + +8.536951087556842 +47.3501339717354 +428.96788641754404 +-67.9757168627705 +76.43471045619344 +0 +120 +absolute + + + +0.01 +smooth + +8.53695149915079 +47.35013469837512 +428.968010576069 +-68.24520471051936 +76.40141326269017 +0 +120 +absolute + + + +0.01 +smooth + +8.536951908520551 +47.350135424441646 +428.968120888183 +-68.51446400987392 +76.3682068949055 +0 +120 +absolute + + + +0.01 +smooth + +8.536952316900948 +47.3501361501655 +428.9682278518592 +-68.78371377513308 +76.33504015161546 +0 +120 +absolute + + + +0.01 +smooth + +8.536952724515466 +47.3501368755896 +428.96833371131277 +-69.05299396157325 +76.30190366569732 +0 +120 +absolute + + + +0.01 +smooth + +8.536953131311936 +47.35013760070529 +428.9684384146284 +-69.32229530609591 +76.26879954297104 +0 +120 +absolute + + + +0.01 +smooth + +8.53695353723819 +47.35013832550379 +428.9685419098907 +-69.59160854560243 +76.2357298892566 +0 +120 +absolute + + + +0.01 +smooth + +8.536953942242054 +47.35013904997638 +428.96864414518427 +-69.86092441699442 +76.20269681037395 +0 +120 +absolute + + + +0.01 +smooth + +8.536954346271356 +47.350139774114325 +428.9687450685937 +-70.13023365717328 +76.16970241214305 +0 +120 +absolute + + + +0.01 +smooth + +8.53695474927393 +47.350140497908924 +428.9688446282037 +-70.39952700304045 +76.13674880038386 +0 +120 +absolute + + + +0.01 +smooth + +8.536955151197603 +47.350141221351414 +428.9689427720989 +-70.66879519149737 +76.10383808091636 +0 +120 +absolute + + + +0.01 +smooth + +8.5369555519902 +47.35014194443308 +428.9690394483639 +-70.93802895944555 +76.07097235956051 +0 +120 +absolute + + + +0.01 +smooth + +8.536955951599555 +47.35014266714517 +428.96913460508307 +-71.20721904378645 +76.03815374213623 +0 +120 +absolute + + + +0.01 +smooth + +8.536956349973499 +47.350143389478994 +428.9692281903414 +-71.47635618142154 +76.00538433446359 +0 +120 +absolute + + + +0.01 +smooth + +8.53695674705986 +47.350144111425784 +428.9693201522233 +-71.7454311092522 +75.97266624236244 +0 +120 +absolute + + + +0.01 +smooth + +8.536957142806465 +47.35014483297684 +428.9694104388135 +-72.01443456418 +75.94000157165277 +0 +120 +absolute + + + +0.01 +smooth + +8.53695753716114 +47.35014555412337 +428.9694989981964 +-72.28335728310633 +75.90739242815455 +0 +120 +absolute + + + +0.01 +smooth + +8.536957930071722 +47.350146274856726 +428.96958577845686 +-72.5521900029327 +75.87484091768779 +0 +120 +absolute + + + +0.01 +smooth + +8.536958321486036 +47.35014699516814 +428.9696707276794 +-72.82092346056048 +75.8423491460724 +0 +120 +absolute + + + +0.01 +smooth + +8.536958711351915 +47.35014771504888 +428.96975379394866 +-73.08954839289126 +75.80991921912835 +0 +120 +absolute + + + +0.01 +smooth + +8.53695909961718 +47.3501484344902 +428.96983492534906 +-73.35805553682641 +75.7775532426756 +0 +120 +absolute + + + +0.01 +smooth + +8.53695948622967 +47.3501491534834 +428.96991406996557 +-73.62643562926743 +75.74525332253413 +0 +120 +absolute + + + +0.01 +smooth + +8.536959871137208 +47.350149872019735 +428.96999117588257 +-73.89467940711575 +75.71302156452391 +0 +120 +absolute + + + +0.01 +smooth + +8.536960254287628 +47.35015059009047 +428.9700661911848 +-74.16277760727289 +75.6808600744649 +0 +120 +absolute + + + +0.01 +smooth + +8.53696063562875 +47.35015130768687 +428.9701390639566 +-74.43072096664021 +75.64877095817698 +0 +120 +absolute + + + +0.01 +smooth + +8.536961015108416 +47.35015202480024 +428.970209742283 +-74.69850022211929 +75.61675632148024 +0 +120 +absolute + + + +0.01 +smooth + +8.536961392674447 +47.3501527414218 +428.9702781742484 +-74.96610611061148 +75.58481827019457 +0 +120 +absolute + + + +0.01 +smooth + +8.536961768274674 +47.35015345754286 +428.97034430793735 +-75.23352936901834 +75.55295891013996 +0 +120 +absolute + + + +0.01 +smooth + +8.536962141856927 +47.350154173154664 +428.97040809143454 +-75.50076073424128 +75.52118034713638 +0 +120 +absolute + + + +0.01 +smooth + +8.536962513369035 +47.35015488824849 +428.9704694728247 +-75.76779094318177 +75.48948468700375 +0 +120 +absolute + + + +0.01 +smooth + +8.536962882758829 +47.35015560281562 +428.97052840019217 +-76.03461073274121 +75.45787403556207 +0 +120 +absolute + + + +0.01 +smooth + +8.536963249974134 +47.35015631684729 +428.97058482162186 +-76.30121083982121 +75.4263504986313 +0 +120 +absolute + + + +0.01 +smooth + +8.536963614962781 +47.3501570303348 +428.9706386851982 +-76.56758200132312 +75.39491618203137 +0 +120 +absolute + + + +0.01 +smooth + +8.536963977672603 +47.35015774326941 +428.9706899390059 +-76.8337149541484 +75.36357319158228 +0 +120 +absolute + + + +0.01 +smooth + +8.536964338051424 +47.350158455642394 +428.9707385311296 +-77.09960043519855 +75.33232363310398 +0 +120 +absolute + + + +0.01 +smooth + +8.536964696047075 +47.350159167445014 +428.9707844096538 +-77.36522918137499 +75.30116961241644 +0 +120 +absolute + + + +0.01 +smooth + +8.536965051607387 +47.35015987866854 +428.97082752266317 +-77.63059192957923 +75.27011323533961 +0 +120 +absolute + + + +0.01 +smooth + +8.536965404680188 +47.35016058930425 +428.97086781824237 +-77.89567941671271 +75.23915660769346 +0 +120 +absolute + + + +0.01 +smooth + +8.536965755213307 +47.35016129934341 +428.970905244476 +-78.16048237967689 +75.20830183529796 +0 +120 +absolute + + + +0.01 +smooth + +8.536966103154574 +47.350162008777275 +428.9709397494486 +-78.4249915553732 +75.17755102397307 +0 +120 +absolute + + + +0.01 +smooth + +8.53696644845182 +47.35016271759713 +428.97097128124494 +-78.68919768070316 +75.14690627953873 +0 +120 +absolute + + + +0.01 +smooth + +8.536966791052869 +47.35016342579425 +428.9709997879495 +-78.9530914925682 +75.11636970781493 +0 +120 +absolute + + + +0.01 +smooth + +8.536967130905555 +47.35016413335988 +428.9710252176468 +-79.2166637278698 +75.08594341462162 +0 +120 +absolute + + + +0.01 +smooth + +8.536967467957705 +47.35016484028533 +428.97104751842176 +-79.47990512350935 +75.05562950577877 +0 +120 +absolute + + + +0.01 +smooth + +8.53696780215715 +47.35016554656182 +428.9710666383589 +-79.74280641638842 +75.02543008710634 +0 +120 +absolute + + + +0.01 +smooth + +8.536968133451719 +47.35016625218066 +428.9710825255426 +-80.00535834340842 +74.99534726442431 +0 +120 +absolute + + + +0.01 +smooth + +8.53696846178924 +47.3501669571331 +428.97109512805775 +-80.26755164147082 +74.9653831435526 +0 +120 +absolute + + + +0.01 +smooth + +8.536968787117543 +47.35016766141041 +428.97110439398887 +-80.52937704747701 +74.93553983031121 +0 +120 +absolute + + + +0.01 +smooth + +8.536969109384454 +47.35016836500385 +428.9711102714205 +-80.79082529832854 +74.9058194305201 +0 +120 +absolute + + + +0.01 +smooth + +8.53696942853781 +47.35016906790472 +428.9711127084374 +-81.05188713092687 +74.87622404999924 +0 +120 +absolute + + + +0.01 +smooth + +8.536969745406099 +47.350169770189915 +428.9711099237587 +-81.31264662023416 +74.84672983587055 +0 +120 +absolute + + + +0.01 +smooth + +8.536970061736813 +47.35017047202836 +428.9710984556681 +-81.57328747744606 +74.81728541769748 +0 +120 +absolute + + + +0.01 +smooth + +8.536970377502085 +47.35017117341862 +428.97107843299517 +-81.83380712762458 +74.78789139579662 +0 +120 +absolute + + + +0.01 +smooth + +8.536970692618814 +47.35017187435394 +428.9710500945934 +-82.09419716793793 +74.75854999368802 +0 +120 +absolute + + + +0.01 +smooth + +8.536971007003883 +47.350172574827525 +428.9710136793161 +-82.35444919555427 +74.7292634348916 +0 +120 +absolute + + + +0.01 +smooth + +8.53697132057418 +47.35017327483257 +428.97096942601684 +-82.61455480764175 +74.70003394292733 +0 +120 +absolute + + + +0.01 +smooth + +8.536971633246594 +47.35017397436231 +428.97091757354883 +-82.87450560136865 +74.67086374131516 +0 +120 +absolute + + + +0.01 +smooth + +8.536971944938017 +47.350174673409995 +428.9708583607658 +-83.13429317390325 +74.64175505357507 +0 +120 +absolute + + + +0.01 +smooth + +8.53697225556534 +47.35017537196882 +428.9707920265209 +-83.39390912241367 +74.61271010322702 +0 +120 +absolute + + + +0.01 +smooth + +8.536972565045444 +47.350176070031985 +428.9707188096676 +-83.65334504406808 +74.58373111379096 +0 +120 +absolute + + + +0.01 +smooth + +8.536972873295225 +47.35017676759272 +428.9706389490592 +-83.91259253603474 +74.55482030878687 +0 +120 +absolute + + + +0.01 +smooth + +8.53697318023157 +47.35017746464427 +428.9705526835495 +-84.17164319548192 +74.52597991173472 +0 +120 +absolute + + + +0.01 +smooth + +8.53697348577137 +47.350178161179834 +428.9704602519916 +-84.43048861957777 +74.49721214615445 +0 +120 +absolute + + + +0.01 +smooth + +8.536973789831512 +47.35017885719263 +428.9703618932389 +-84.68912040549044 +74.46851923556606 +0 +120 +absolute + + + +0.01 +smooth + +8.536974092328881 +47.35017955267586 +428.9702578461448 +-84.9475301503882 +74.43990340348944 +0 +120 +absolute + + + +0.01 +smooth + +8.536974393180376 +47.35018024762279 +428.970148349563 +-85.20570945143932 +74.41136687344463 +0 +120 +absolute + + + +0.01 +smooth + +8.536974692302879 +47.350180942026604 +428.9700336423468 +-85.46364990581195 +74.38291186895158 +0 +120 +absolute + + + +0.01 +smooth + +8.536974989613283 +47.35018163588054 +428.96991396334937 +-85.72134311067424 +74.35454061353025 +0 +120 +absolute + + + +0.01 +smooth + +8.536975285028467 +47.35018232917777 +428.96978955142424 +-85.97878066319447 +74.32625533070053 +0 +120 +absolute + + + +0.01 +smooth + +8.536975578465336 +47.35018302191159 +428.96966064542505 +-86.23595416054089 +74.2980582439825 +0 +120 +absolute + + + +0.01 +smooth + +8.536975869840768 +47.35018371407517 +428.9695274842052 +-86.49285519988163 +74.26995157689608 +0 +120 +absolute + + + +0.01 +smooth + +8.536976159071656 +47.35018440566174 +428.9693903066177 +-86.74947537838489 +74.24193755296122 +0 +120 +absolute + + + +0.01 +smooth + +8.536976446074886 +47.3501850966645 +428.9692493515162 +-87.00580629321891 +74.21401839569783 +0 +120 +absolute + + + +0.01 +smooth + +8.536976730767353 +47.35018578707671 +428.9691048577543 +-87.26183954155195 +74.186196328626 +0 +120 +absolute + + + +0.01 +smooth + +8.536977013065941 +47.35018647689156 +428.9689570641853 +-87.51756672055217 +74.1584735752656 +0 +120 +absolute + + + +0.01 +smooth + +8.53697729288754 +47.35018716610227 +428.96880620966255 +-87.77297942738772 +74.13085235913663 +0 +120 +absolute + + + +0.01 +smooth + +8.536977570149041 +47.350187854702085 +428.9686525330394 +-88.02806925922694 +74.10333490375902 +0 +120 +absolute + + + +0.01 +smooth + +8.536977844767334 +47.35018854268418 +428.9684962731694 +-88.28282781323796 +74.07592343265279 +0 +120 +absolute + + + +0.01 +smooth + +8.536978116659302 +47.350189230041806 +428.968337668906 +-88.537246686589 +74.04862016933784 +0 +120 +absolute + + + +0.01 +smooth + +8.53697838574184 +47.35018991676819 +428.9681769591024 +-88.79131747644821 +74.02142733733417 +0 +120 +absolute + + + +0.01 +smooth + +8.536978651931834 +47.35019060285652 +428.9680143826123 +-89.04503177998393 +73.99434716016174 +0 +120 +absolute + + + +0.01 +smooth + +8.536978915146175 +47.35019128830004 +428.9678501782889 +-89.29838119436428 +73.96738186134051 +0 +120 +absolute + + + +0.01 +smooth + +8.536979175301752 +47.35019197309196 +428.9676845849858 +-89.55135731675749 +73.94053366439046 +0 +120 +absolute + + + +0.01 +smooth + +8.536979432315453 +47.35019265722549 +428.9675178415562 +-89.80395174433173 +73.91380479283151 +0 +120 +absolute + + + +0.01 +smooth + +8.536979686104166 +47.35019334069388 +428.9673501868537 +-90.05615607425528 +73.88719747018368 +0 +120 +absolute + + + +0.01 +smooth + +8.536979936584784 +47.35019402349032 +428.96718185973157 +-90.30796190369631 +73.86071391996687 +0 +120 +absolute + + + +0.01 +smooth + +8.536980183674192 +47.35019470560803 +428.96701309904336 +-90.55936082982305 +73.83435636570111 +0 +120 +absolute + + + +0.01 +smooth + +8.536980427289283 +47.350195387040245 +428.96684414364245 +-90.81034444980368 +73.80812703090632 +0 +120 +absolute + + + +0.01 +smooth + +8.536980667346942 +47.35019606778018 +428.96667523238216 +-91.06090436080639 +73.78202813910248 +0 +120 +absolute + + + +0.01 +smooth + +8.53698090376406 +47.350196747821045 +428.96650660411603 +-91.31103215999946 +73.75606191380955 +0 +120 +absolute + + + +0.01 +smooth + +8.536981136457529 +47.350197427156075 +428.9663384976973 +-91.56071944455107 +73.73023057854749 +0 +120 +absolute + + + +0.01 +smooth + +8.536981365344232 +47.350198105778475 +428.9661711519796 +-91.80995781162942 +73.70453635683626 +0 +120 +absolute + + + +0.01 +smooth + +8.536981590341064 +47.35019878368146 +428.9660048058163 +-92.05873885840266 +73.67898147219584 +0 +120 +absolute + + + +0.01 +smooth + +8.53698181136491 +47.35019946085827 +428.9658396980607 +-92.30705418203911 +73.65356814814618 +0 +120 +absolute + + + +0.01 +smooth + +8.536982028332663 +47.35020013730211 +428.96567606756633 +-92.55489537970692 +73.62829860820725 +0 +120 +absolute + + + +0.01 +smooth + +8.536982241161208 +47.3502008130062 +428.9655141531866 +-92.80225404857435 +73.603175075899 +0 +120 +absolute + + + +0.01 +smooth + +8.536982449767432 +47.35020148796376 +428.9653541937747 +-93.04912178580946 +73.57819977474142 +0 +120 +absolute + + + +0.01 +smooth + +8.536982654144229 +47.35020216217103 +428.9651963315895 +-93.29549400783175 +73.55337360527592 +0 +120 +absolute + + + +0.01 +smooth + +8.536982857682007 +47.35020283576031 +428.96503633827143 +-93.54153824032211 +73.52863797928913 +0 +120 +absolute + + + +0.01 +smooth + +8.536983062110588 +47.350203508801734 +428.96487194485326 +-93.78734250878637 +73.50396222233204 +0 +120 +absolute + + + +0.01 +smooth + +8.536983267248493 +47.3502041812902 +428.96470328507553 +-94.032899481414 +73.4793487575199 +0 +120 +absolute + + + +0.01 +smooth + +8.536983472914248 +47.35020485322063 +428.9645304926788 +-94.27820182639466 +73.45480000796796 +0 +120 +absolute + + + +0.01 +smooth + +8.53698367892638 +47.35020552458793 +428.96435370140364 +-94.52324221191789 +73.43031839679156 +0 +120 +absolute + + + +0.01 +smooth + +8.53698388510341 +47.350206195387024 +428.9641730449907 +-94.76801330617322 +73.40590634710595 +0 +120 +absolute + + + +0.01 +smooth + +8.536984091263868 +47.35020686561287 +428.96398865718044 +-95.01250777735027 +73.38156628202645 +0 +120 +absolute + + + +0.01 +smooth + +8.536984297226274 +47.350207535260324 +428.96380067171344 +-95.25671829363856 +73.3573006246683 +0 +120 +absolute + + + +0.01 +smooth + +8.536984502809153 +47.35020820432434 +428.9636092223302 +-95.50063752322771 +73.33311179814676 +0 +120 +absolute + + + +0.01 +smooth + +8.536984707831031 +47.35020887279981 +428.96341444277135 +-95.74425813430723 +73.30900222557716 +0 +120 +absolute + + + +0.01 +smooth + +8.536984912110436 +47.35020954068168 +428.96321646677757 +-95.98757279506671 +73.28497433007479 +0 +120 +absolute + + + +0.01 +smooth + +8.536985115465887 +47.35021020796487 +428.9630154280893 +-96.23057417369574 +73.2610305347549 +0 +120 +absolute + + + +0.01 +smooth + +8.53698531771591 +47.35021087464427 +428.9628114604471 +-96.47325493838387 +73.23717326273274 +0 +120 +absolute + + + +0.01 +smooth + +8.53698551867903 +47.35021154071482 +428.96260469759153 +-96.71560775732064 +73.21340493712364 +0 +120 +absolute + + + +0.01 +smooth + +8.536985718173774 +47.35021220617142 +428.96239527326327 +-96.95762529869563 +73.18972798104289 +0 +120 +absolute + + + +0.01 +smooth + +8.536985916018663 +47.35021287100899 +428.96218332120253 +-97.19930023069844 +73.16614481760571 +0 +120 +absolute + + + +0.01 +smooth + +8.536986112032228 +47.35021353522249 +428.9619689751505 +-97.44062522151864 +73.14265786992749 +0 +120 +absolute + + + +0.01 +smooth + +8.536986306032983 +47.35021419880677 +428.9617523688471 +-97.68159293934573 +73.11926956112339 +0 +120 +absolute + + + +0.01 +smooth + +8.53698649783946 +47.35021486175679 +428.96153363603327 +-97.92219605236932 +73.09598231430874 +0 +120 +absolute + + + +0.01 +smooth + +8.536986687270183 +47.350215524067465 +428.9613129104495 +-98.162427228779 +73.07279855259885 +0 +120 +absolute + + + +0.01 +smooth + +8.536986874143675 +47.3502161857337 +428.96109032583627 +-98.40227913676426 +73.04972069910896 +0 +120 +absolute + + + +0.01 +smooth + +8.536987058278465 +47.35021684675043 +428.9608660159342 +-98.6417444445148 +73.02675117695438 +0 +120 +absolute + + + +0.01 +smooth + +8.536987239493069 +47.35021750711256 +428.9606401144839 +-98.88081582022001 +73.00389240925037 +0 +120 +absolute + + + +0.01 +smooth + +8.53698741760602 +47.35021816681501 +428.96041275522595 +-99.11948593206961 +72.98114681911223 +0 +120 +absolute + + + +0.01 +smooth + +8.53698759243584 +47.3502188258527 +428.9601840719008 +-99.35774744825311 +72.95851682965521 +0 +120 +absolute + + + +0.01 +smooth + +8.536987763801054 +47.35021948422053 +428.9599541982491 +-99.59559303696005 +72.93600486399461 +0 +120 +absolute + + + +0.01 +smooth + +8.536987931520184 +47.350220141913454 +428.9597232680113 +-99.83301536638001 +72.91361334524574 +0 +120 +absolute + + + +0.01 +smooth + +8.536988095411756 +47.35022079892637 +428.95949141492815 +-100.07000710470261 +72.89134469652383 +0 +120 +absolute + + + +0.01 +smooth + +8.536988255294295 +47.350221455254186 +428.95925877274004 +-100.30656092011736 +72.86920134094419 +0 +120 +absolute + + + +0.01 +smooth + +8.536988410986327 +47.350222110891835 +428.9590254751877 +-100.54266948081386 +72.8471857016221 +0 +120 +absolute + + + +0.01 +smooth + +8.536988562306377 +47.350222765834225 +428.9587916560115 +-100.77832545498157 +72.82530020167283 +0 +120 +absolute + + + +0.01 +smooth + +8.536988709072965 +47.35022342007628 +428.9585574489521 +-101.01352151081024 +72.80354726421167 +0 +120 +absolute + + + +0.01 +smooth + +8.53698885110462 +47.35022407361292 +428.95832298775014 +-101.24825031648932 +72.78192931235391 +0 +120 +absolute + + + +0.01 +smooth + +8.536988988219864 +47.35022472643905 +428.9580884061461 +-101.4825045402084 +72.7604487692148 +0 +120 +absolute + + + +0.01 +smooth + +8.536989120237227 +47.35022537854961 +428.9578538378805 +-101.716276850157 +72.73910805790965 +0 +120 +absolute + + + +0.01 +smooth + +8.536989246975224 +47.3502260299395 +428.957619416694 +-101.94955991452477 +72.71790960155374 +0 +120 +absolute + + + +0.01 +smooth + +8.536989368252389 +47.35022668060364 +428.95738527632716 +-102.18234640150126 +72.69685582326233 +0 +120 +absolute + + + +0.01 +smooth + +8.536989483887242 +47.350227330536946 +428.95715155052045 +-102.414628979276 +72.67594914615071 +0 +120 +absolute + + + +0.01 +smooth + +8.536989593698308 +47.35022797973434 +428.9569183730145 +-102.64640031603858 +72.65519199333418 +0 +120 +absolute + + + +0.01 +smooth + +8.536989697504113 +47.350228628190756 +428.9566858775499 +-102.87765307997851 +72.63458678792801 +0 +120 +absolute + + + +0.01 +smooth + +8.53698979512318 +47.350229275901086 +428.95645419786706 +-103.10837993928546 +72.61413595304747 +0 +120 +absolute + + + +0.01 +smooth + +8.536989886374037 +47.35022992286025 +428.9562234677069 +-103.33857356214894 +72.59384191180786 +0 +120 +absolute + + + +0.01 +smooth + +8.536989971075204 +47.35023056906318 +428.9559938208095 +-103.5682266167585 +72.57370708732444 +0 +120 +absolute + + + +0.01 +smooth + +8.536990049045208 +47.35023121450479 +428.9557653909159 +-103.7973317713037 +72.5537339027125 +0 +120 +absolute + + + +0.01 +smooth + +8.536990120102573 +47.350231859179985 +428.9555383117662 +-104.02588169397418 +72.53392478108732 +0 +120 +absolute + + + +0.01 +smooth + +8.536990184065825 +47.3502325030837 +428.9553127171013 +-104.25386905295946 +72.5142821455642 +0 +120 +absolute + + + +0.01 +smooth + +8.536990240753486 +47.35023314621085 +428.9550887406618 +-104.4812865164491 +72.49480841925839 +0 +120 +absolute + + + +0.01 +smooth + +8.536990290993723 +47.35023378858113 +428.95486605230815 +-104.70816283568232 +72.47548950471149 +0 +120 +absolute + + + +0.01 +smooth + +8.536990339983188 +47.350234430320405 +428.95464231802316 +-104.93468118654067 +72.45624098179013 +0 +120 +absolute + + + +0.01 +smooth + +8.536990388465307 +47.35023507144398 +428.9544172545602 +-105.16086311236594 +72.43705298877782 +0 +120 +absolute + + + +0.01 +smooth + +8.536990436416222 +47.35023571194814 +428.95419093150184 +-105.38670257745898 +72.41792832622168 +0 +120 +absolute + + + +0.01 +smooth + +8.53699048381208 +47.35023635182922 +428.9539634184309 +-105.61219354612071 +72.39886979466883 +0 +120 +absolute + + + +0.01 +smooth + +8.536990530629016 +47.35023699108353 +428.9537347849297 +-105.837329982652 +72.37988019466627 +0 +120 +absolute + + + +0.01 +smooth + +8.536990576843179 +47.35023762970741 +428.9535051005809 +-106.06210585135373 +72.3609623267612 +0 +120 +absolute + + + +0.01 +smooth + +8.536990622430707 +47.350238267697165 +428.9532744349671 +-106.28651511652681 +72.34211899150064 +0 +120 +absolute + + + +0.01 +smooth + +8.536990667367744 +47.350238905049125 +428.9530428576711 +-106.51055174247212 +72.32335298943178 +0 +120 +absolute + + + +0.01 +smooth + +8.536990711630436 +47.350239541759635 +428.95281043827543 +-106.7342096934906 +72.30466712110169 +0 +120 +absolute + + + +0.01 +smooth + +8.53699075519492 +47.350240177825015 +428.95257724636275 +-106.95748293388309 +72.28606418705745 +0 +120 +absolute + + + +0.01 +smooth + +8.536990798037339 +47.35024081324154 +428.95234335151537 +-107.18036542795045 +72.26754698784616 +0 +120 +absolute + + + +0.01 +smooth + +8.536990840133841 +47.35024144800559 +428.9521088233163 +-107.40285113999361 +72.24911832401496 +0 +120 +absolute + + + +0.01 +smooth + +8.536990881460564 +47.350242082113475 +428.951873731348 +-107.6249340343135 +72.23078099611094 +0 +120 +absolute + + + +0.01 +smooth + +8.536990921993649 +47.35024271556151 +428.9516381451931 +-107.84660807521101 +72.21253780468116 +0 +120 +absolute + + + +0.01 +smooth + +8.53699096170924 +47.350243348346 +428.951402134434 +-108.06786722698692 +72.19439155027275 +0 +120 +absolute + + + +0.01 +smooth + +8.53699100058348 +47.35024398046332 +428.95116576865354 +-108.2887054539422 +72.17634503343284 +0 +120 +absolute + + + +0.01 +smooth + +8.536991038592513 +47.35024461190976 +428.9509291174344 +-108.50911672037778 +72.1584010547085 +0 +120 +absolute + + + +0.01 +smooth + +8.536991075712482 +47.35024524268163 +428.950692250359 +-108.7290949905945 +72.14056241464685 +0 +120 +absolute + + + +0.01 +smooth + +8.536991111919521 +47.35024587277527 +428.95045523701003 +-108.94863422889324 +72.12283191379494 +0 +120 +absolute + + + +0.01 +smooth + +8.536991147189784 +47.350246502187005 +428.95021814697014 +-109.1677283995749 +72.10521235269995 +0 +120 +absolute + + + +0.01 +smooth + +8.536991181499408 +47.350247130913175 +428.949981049822 +-109.38637146694043 +72.08770653190895 +0 +120 +absolute + + + +0.01 +smooth + +8.536991214824535 +47.350247758950076 +428.949744015148 +-109.60455739529066 +72.07031725196902 +0 +120 +absolute + + + +0.01 +smooth + +8.536991247141307 +47.35024838629405 +428.9495071125309 +-109.82228014892645 +72.05304731342726 +0 +120 +absolute + + + +0.01 +smooth + +8.53699127842587 +47.350249012941404 +428.94927041155336 +-110.03953369214875 +72.03589951683081 +0 +120 +absolute + + + +0.01 +smooth + +8.536991308654363 +47.35024963888848 +428.94903398179787 +-110.25631198925848 +72.01887666272675 +0 +120 +absolute + + + +0.01 +smooth + +8.53699133780293 +47.350250264131574 +428.9487978928471 +-110.47260900455645 +72.00198155166218 +0 +120 +absolute + + + +0.01 +smooth + +8.53699136584771 +47.35025088866705 +428.94856221428375 +-110.6884187023436 +71.9852169841842 +0 +120 +absolute + + + +0.01 +smooth + +8.536991392764852 +47.3502515124912 +428.94832701569027 +-110.90373504692076 +71.96858576083994 +0 +120 +absolute + + + +0.01 +smooth + +8.536991418530494 +47.35025213560036 +428.94809236664946 +-111.11855200258893 +71.95209068217648 +0 +120 +absolute + + + +0.01 +smooth + +8.536991443120778 +47.350252757990845 +428.9478583367438 +-111.33286353364892 +71.93573454874088 +0 +120 +absolute + + + +0.01 +smooth + +8.536991466511848 +47.35025337965898 +428.94762499555594 +-111.54666360440166 +71.91952016108033 +0 +120 +absolute + + + +0.01 +smooth + +8.536991488679847 +47.35025400060111 +428.9473924126685 +-111.75994617914799 +71.90345031974186 +0 +120 +absolute + + + +0.01 +smooth + +8.536991509600917 +47.35025462081353 +428.94716065766397 +-111.97270522218884 +71.8875278252726 +0 +120 +absolute + + + +0.01 +smooth + +8.5369915292512 +47.35025524029258 +428.9469298001251 +-112.1849346978251 +71.87175547821965 +0 +120 +absolute + + + +0.01 +smooth + +8.53699154760684 +47.35025585903459 +428.9466999096345 +-112.39662857035768 +71.85613607913012 +0 +120 +absolute + + + +0.01 +smooth + +8.536991564643976 +47.35025647703586 +428.9464710557748 +-112.60778080408741 +71.84067242855109 +0 +120 +absolute + + + +0.01 +smooth + +8.536991580338753 +47.35025709429273 +428.9462433081286 +-112.81838536331522 +71.82536732702968 +0 +120 +absolute + + + +0.01 +smooth + +8.536991594667313 +47.35025771080152 +428.94601673627835 +-113.02843621234203 +71.81022357511299 +0 +120 +absolute + + + +0.01 +smooth + +8.5369916076058 +47.35025832655856 +428.94579140980693 +-113.2379273154687 +71.79524397334812 +0 +120 +absolute + + + +0.01 +smooth + +8.536991619130355 +47.35025894156016 +428.9455673982968 +-113.44685263699606 +71.78043132228217 +0 +120 +absolute + + + +0.01 +smooth + +8.536991629217118 +47.350259555802666 +428.9453447713306 +-113.65520614122512 +71.76578842246224 +0 +120 +absolute + + + +0.01 +smooth + +8.536991637842236 +47.35026016928238 +428.94512359849085 +-113.86298179245671 +71.75131807443542 +0 +120 +absolute + + + +0.01 +smooth + +8.53699164498185 +47.35026078199562 +428.94490394936037 +-114.07017355499173 +71.73702307874885 +0 +120 +absolute + + + +0.01 +smooth + +8.536991650612098 +47.35026139393874 +428.94468589352164 +-114.27677539313106 +71.72290623594958 +0 +120 +absolute + + + +0.01 +smooth + +8.536991654709128 +47.350262005108036 +428.9444695005572 +-114.48278127117555 +71.70897034658476 +0 +120 +absolute + + + +0.01 +smooth + +8.536991657249082 +47.35026261549985 +428.94425484004984 +-114.68818515342619 +71.69521821120146 +0 +120 +absolute + + + +0.01 +smooth + +8.5369916582081 +47.35026322511049 +428.944041981582 +-114.89298100418381 +71.68165263034682 +0 +120 +absolute + + + +0.01 +smooth + +8.53699165513617 +47.350263833992386 +428.94383018773743 +-115.09725345690927 +71.66821504387022 +0 +120 +absolute + + + +0.01 +smooth + +8.536991644598846 +47.35026444222427 +428.9436183396566 +-115.30112947919427 +71.6548193759256 +0 +120 +absolute + + + +0.01 +smooth + +8.536991626747763 +47.35026504980424 +428.9434064756978 +-115.50460567685928 +71.64146852117103 +0 +120 +absolute + + + +0.01 +smooth + +8.536991601764846 +47.35026565672976 +428.9431946441467 +-115.70767753889345 +71.62816613322588 +0 +120 +absolute + + + +0.01 +smooth + +8.536991569832038 +47.35026626299824 +428.942982893289 +-115.91034055428601 +71.61491586570953 +0 +120 +absolute + + + +0.01 +smooth + +8.536991531131257 +47.350266868607136 +428.94277127141027 +-116.1125902120261 +71.6017213722413 +0 +120 +absolute + + + +0.01 +smooth + +8.536991485844437 +47.35026747355388 +428.9425598267964 +-116.314422001103 +71.58858630644059 +0 +120 +absolute + + + +0.01 +smooth + +8.536991434153508 +47.35026807783587 +428.94234860773275 +-116.5158314105058 +71.57551432192672 +0 +120 +absolute + + + +0.01 +smooth + +8.536991376240401 +47.35026868145059 +428.9421376625053 +-116.7168139292238 +71.56250907231907 +0 +120 +absolute + + + +0.01 +smooth + +8.536991312287046 +47.350269284395466 +428.9419270393994 +-116.91736504624609 +71.54957421123699 +0 +120 +absolute + + + +0.01 +smooth + +8.536991242475372 +47.350269886667924 +428.941716786701 +-117.117480250562 +71.53671339229987 +0 +120 +absolute + + + +0.01 +smooth + +8.536991166987308 +47.35027048826538 +428.9415069526955 +-117.31715503116057 +71.523930269127 +0 +120 +absolute + + + +0.01 +smooth + +8.536991086004788 +47.35027108918531 +428.9412975856688 +-117.51638487703114 +71.51122849533783 +0 +120 +absolute + + + +0.01 +smooth + +8.53699099970974 +47.350271689425135 +428.9410887339066 +-117.71516527716281 +71.49861172455168 +0 +120 +absolute + + + +0.01 +smooth + +8.53699090828409 +47.35027228898226 +428.94088044569423 +-117.91349172054477 +71.48608361038785 +0 +120 +absolute + + + +0.01 +smooth + +8.53699081190977 +47.35027288785415 +428.9406727693176 +-118.11135969616629 +71.47364780646576 +0 +120 +absolute + + + +0.01 +smooth + +8.536990710768718 +47.350273486038255 +428.9404657530625 +-118.30876469301656 +71.46130796640479 +0 +120 +absolute + + + +0.01 +smooth + +8.536990605042856 +47.350274083531986 +428.94025944521445 +-118.50570220008468 +71.44906774382427 +0 +120 +absolute + + + +0.01 +smooth + +8.53699049491411 +47.35027468033275 +428.940053894059 +-118.70216770635993 +71.43693079234353 +0 +120 +absolute + + + +0.01 +smooth + +8.53699038056442 +47.35027527643803 +428.9398491478819 +-118.89815670083149 +71.42490076558195 +0 +120 +absolute + + + +0.01 +smooth + +8.536990262175713 +47.35027587184527 +428.93964525496904 +-119.09366467248857 +71.41298131715894 +0 +120 +absolute + + + +0.01 +smooth + +8.53699013992992 +47.35027646655186 +428.9394422636059 +-119.28868711032034 +71.40117610069379 +0 +120 +absolute + + + +0.01 +smooth + +8.536990014008962 +47.35027706055524 +428.93924022207796 +-119.48321950331596 +71.38948876980588 +0 +120 +absolute + + + +0.01 +smooth + +8.536989884594778 +47.35027765385288 +428.93903917867124 +-119.6772573404647 +71.37792297811457 +0 +120 +absolute + + + +0.01 +smooth + +8.5369897518693 +47.3502782464422 +428.9388391816712 +-119.87079611075575 +71.36648237923923 +0 +120 +absolute + + + +0.01 +smooth + +8.536989616014452 +47.35027883832062 +428.9386402793635 +-120.06383130317823 +71.35517062679921 +0 +120 +absolute + + + +0.01 +smooth + +8.536989477212163 +47.350279429485596 +428.93844252003396 +-120.25635840672139 +71.34399137441387 +0 +120 +absolute + + + +0.01 +smooth + +8.53698933564437 +47.35028001993454 +428.9382459519681 +-120.44837291037446 +71.33294827570256 +0 +120 +absolute + + + +0.01 +smooth + +8.536989191492996 +47.350280609664914 +428.9380506234517 +-120.63987030312656 +71.32204498428467 +0 +120 +absolute + + + +0.01 +smooth + +8.536989044939977 +47.35028119867414 +428.93785658277034 +-120.83084607396692 +71.31128515377952 +0 +120 +absolute + + + +0.01 +smooth + +8.536988896167239 +47.35028178695965 +428.9376638782097 +-121.02129571188473 +71.3006724378065 +0 +120 +absolute + + + +0.01 +smooth + +8.536988745356712 +47.35028237451888 +428.93747255805545 +-121.21121470586925 +71.29021048998494 +0 +120 +absolute + + + +0.01 +smooth + +8.53698859269033 +47.35028296134927 +428.93728267059333 +-121.40059854490958 +71.27990296393423 +0 +120 +absolute + + + +0.01 +smooth + +8.536988438350019 +47.35028354744826 +428.93709426410885 +-121.58944271799496 +71.26975351327371 +0 +120 +absolute + + + +0.01 +smooth + +8.536988282517711 +47.35028413281328 +428.936907386888 +-121.77774271411457 +71.25976579162274 +0 +120 +absolute + + + +0.01 +smooth + +8.536988125375336 +47.35028471744175 +428.936722087216 +-121.96549402225763 +71.24994345260069 +0 +120 +absolute + + + +0.01 +smooth + +8.536987967104821 +47.350285301331134 +428.9365384133789 +-122.15269213141333 +71.2402901498269 +0 +120 +absolute + + + +0.01 +smooth + +8.536987807888101 +47.35028588447884 +428.93635641366217 +-122.33933253057083 +71.23080953692075 +0 +120 +absolute + + + +0.01 +smooth + +8.536987647907102 +47.35028646688233 +428.9361761363515 +-122.52541070871938 +71.22150526750158 +0 +120 +absolute + + + +0.01 +smooth + +8.536987487343756 +47.350287048539016 +428.9359976297326 +-122.71092215484813 +71.21238099518875 +0 +120 +absolute + + + +0.01 +smooth + +8.536987326379993 +47.35028762944634 +428.935820942091 +-122.89586235794633 +71.20344037360164 +0 +120 +absolute + + + +0.01 +smooth + +8.536987165197743 +47.35028820960175 +428.93564612171264 +-123.08022680700309 +71.1946870563596 +0 +120 +absolute + + + +0.01 +smooth + +8.536987003978938 +47.35028878900266 +428.935473216883 +-123.26401099100768 +71.186124697082 +0 +120 +absolute + + + +0.01 +smooth + +8.536986842905504 +47.35028936764652 +428.93530227588775 +-123.44721039894928 +71.17775694938814 +0 +120 +absolute + + + +0.01 +smooth + +8.536986682159371 +47.35028994553077 +428.93513334701265 +-123.6298205198171 +71.16958746689747 +0 +120 +absolute + + + +0.01 +smooth + +8.536986521922472 +47.35029052265282 +428.9349664785433 +-123.81183684260027 +71.16161990322927 +0 +120 +absolute + + + +0.01 +smooth + +8.536986362376737 +47.35029109901013 +428.93480171876536 +-123.99325485628805 +71.15385791200295 +0 +120 +absolute + + + +0.01 +smooth + +8.536986203445101 +47.3502916746041 +428.93463905039283 +-124.17407651729876 +71.14629655778779 +0 +120 +absolute + + + +0.01 +smooth + +8.536986040226864 +47.35029224950991 +428.9344772371003 +-124.35442429727289 +71.1387723091824 +0 +120 +absolute + + + +0.01 +smooth + +8.536985870890781 +47.350292823755645 +428.93431582493986 +-124.53434417332112 +71.13122671895175 +0 +120 +absolute + + + +0.01 +smooth + +8.53698569555888 +47.35029339733946 +428.9341548552243 +-124.71383336800017 +71.1236665755236 +0 +120 +absolute + + + +0.01 +smooth + +8.536985514353194 +47.35029397025952 +428.9339943692665 +-124.89288910386692 +71.11609866732559 +0 +120 +absolute + + + +0.01 +smooth + +8.536985327395763 +47.35029454251397 +428.9338344083797 +-125.07150860347822 +71.10852978278554 +0 +120 +absolute + + + +0.01 +smooth + +8.536985134808619 +47.35029511410097 +428.93367501387655 +-125.2496890893908 +71.10096671033111 +0 +120 +absolute + + + +0.01 +smooth + +8.53698493671379 +47.35029568501865 +428.93351622707013 +-125.42742778416142 +71.09341623839003 +0 +120 +absolute + + + +0.01 +smooth + +8.536984733233316 +47.35029625526519 +428.93335808927316 +-125.60472191034704 +71.08588515539005 +0 +120 +absolute + + + +0.01 +smooth + +8.536984524489228 +47.35029682483875 +428.933200641799 +-125.78156869050439 +71.07838024975888 +0 +120 +absolute + + + +0.01 +smooth + +8.536984310603563 +47.35029739373747 +428.93304392596036 +-125.9579653471903 +71.07090830992428 +0 +120 +absolute + + + +0.01 +smooth + +8.53698409169835 +47.3502979619595 +428.9328879830699 +-126.1339091029615 +71.06347612431394 +0 +120 +absolute + + + +0.01 +smooth + +8.536983867895625 +47.350298529502986 +428.93273285444087 +-126.30939718037486 +71.05609048135554 +0 +120 +absolute + + + +0.01 +smooth + +8.536983639317421 +47.350299096366115 +428.9325785813864 +-126.48442680198727 +71.04875816947691 +0 +120 +absolute + + + +0.01 +smooth + +8.536983406085774 +47.35029966254703 +428.9324252052192 +-126.65899519035543 +71.04148597710572 +0 +120 +absolute + + + +0.01 +smooth + +8.536983168322715 +47.35030022804386 +428.932272767252 +-126.8330995680361 +71.03428069266967 +0 +120 +absolute + + + +0.01 +smooth + +8.536982926150282 +47.35030079285479 +428.9321213087979 +-127.00673715758623 +71.02714910459652 +0 +120 +absolute + + + +0.01 +smooth + +8.536982679690503 +47.35030135697796 +428.93197087117005 +-127.17990518156257 +71.020098001314 +0 +120 +absolute + + + +0.01 +smooth + +8.53698242906542 +47.35030192041152 +428.9318214956813 +-127.35260086252194 +71.01313417124982 +0 +120 +absolute + + + +0.01 +smooth + +8.536982174397057 +47.350302483153634 +428.9316732236442 +-127.52482142302107 +71.00626440283168 +0 +120 +absolute + + + +0.01 +smooth + +8.536981915807454 +47.350303045202445 +428.93152609637224 +-127.69656408561686 +70.99949548448733 +0 +120 +absolute + + + +0.01 +smooth + +8.536981653418646 +47.35030360655613 +428.93138015517815 +-127.86782607286614 +70.99283420464451 +0 +120 +absolute + + + +0.01 +smooth + +8.536981387352661 +47.350304167212826 +428.9312354413747 +-128.03860460732562 +70.98628735173094 +0 +120 +absolute + + + +0.01 +smooth + +8.536981117731537 +47.35030472717069 +428.9310919962751 +-128.20889691155216 +70.97986171417432 +0 +120 +absolute + + + +0.01 +smooth + +8.536980844677306 +47.35030528642787 +428.93094986119195 +-128.3787002081026 +70.9735640804024 +0 +120 +absolute + + + +0.01 +smooth + +8.536980568312005 +47.350305844982536 +428.93080907743854 +-128.54801171953372 +70.9674012388429 +0 +120 +absolute + + + +0.01 +smooth + +8.536980288757665 +47.35030640283283 +428.9306696863278 +-128.71682866840231 +70.96137997792353 +0 +120 +absolute + + + +0.01 +smooth + +8.53698000613632 +47.350306959976905 +428.9305317291723 +-128.88514827726522 +70.95550708607202 +0 +120 +absolute + + + +0.01 +smooth + +8.536979720570002 +47.350307516412926 +428.9303952472854 +-129.05296776867922 +70.94978935171612 +0 +120 +absolute + + + +0.01 +smooth + +8.536979432180749 +47.350308072139036 +428.93026028197977 +-129.22028436520114 +70.94423356328352 +0 +120 +absolute + + + +0.01 +smooth + +8.53697914109059 +47.350308627153396 +428.93012687456843 +-129.3870952893878 +70.93884650920198 +0 +120 +absolute + + + +0.01 +smooth + +8.536978847421567 +47.35030918145416 +428.9299950663643 +-129.55339776379594 +70.93363497789919 +0 +120 +absolute + + + +0.01 +smooth + +8.536978551295704 +47.35030973503948 +428.9298648986804 +-129.7191890109825 +70.92860575780288 +0 +120 +absolute + + + +0.01 +smooth + +8.536978252835041 +47.35031028790751 +428.9297364128297 +-129.88446625350417 +70.92376563734081 +0 +120 +absolute + + + +0.01 +smooth + +8.53697795216161 +47.35031084005641 +428.9296096501249 +-130.04922671391782 +70.91912140494068 +0 +120 +absolute + + + +0.01 +smooth + +8.536977649397443 +47.350311391484325 +428.9294846518792 +-130.2134676147802 +70.91467984903022 +0 +120 +absolute + + + +0.01 +smooth + +8.536977344664578 +47.35031194218942 +428.92936145940536 +-130.3771861786482 +70.91044775803712 +0 +120 +absolute + + + +0.01 +smooth + +8.536977038085045 +47.35031249216984 +428.92924011401635 +-130.5403796280786 +70.90643192038917 +0 +120 +absolute + + + +0.01 +smooth + +8.536976729780879 +47.350313041423746 +428.92912065702535 +-130.7030451856282 +70.90263912451405 +0 +120 +absolute + + + +0.01 +smooth + +8.536976419874115 +47.35031358994929 +428.92900312974496 +-130.86518007385376 +70.89907615883949 +0 +120 +absolute + + + +0.01 +smooth + +8.536976108486785 +47.35031413774463 +428.9288875734883 +-131.02678151531222 +70.89574981179324 +0 +120 +absolute + + + +0.01 +smooth + +8.536975795740926 +47.35031468480791 +428.9287740295683 +-131.18784673256025 +70.89266687180299 +0 +120 +absolute + + + +0.01 +smooth + +8.536975481758565 +47.35031523113729 +428.92866253929776 +-131.34837294815472 +70.88983412729648 +0 +120 +absolute + + + +0.01 +smooth + +8.536975166661744 +47.35031577673092 +428.9285531439899 +-131.5083573846524 +70.88725836670145 +0 +120 +absolute + + + +0.01 +smooth + +8.536974850572491 +47.35031632158697 +428.92844588495734 +-131.66779726461021 +70.88494637844559 +0 +120 +absolute + + + +0.01 +smooth + +8.536974533612844 +47.35031686570358 +428.9283408035132 +-131.82668981058487 +70.88290495095666 +0 +120 +absolute + + + +0.01 +smooth + +8.536974215904836 +47.35031740907891 +428.92823794097046 +-131.9850322451332 +70.88114087266239 +0 +120 +absolute + + + +0.01 +smooth + +8.536973897570494 +47.35031795171111 +428.92813733864193 +-132.14282179081195 +70.87966093199044 +0 +120 +absolute + + + +0.01 +smooth + +8.536973577819603 +47.350318493618516 +428.9280386107276 +-132.30008125961035 +70.87841608020683 +0 +120 +absolute + + + +0.01 +smooth + +8.536973253424703 +47.35031903487296 +428.9279402413919 +-132.45690213688277 +70.87720640382688 +0 +120 +absolute + + + +0.01 +smooth + +8.5369729241606 +47.350319575479396 +428.92784213368776 +-132.61329206157012 +70.87601372686399 +0 +120 +absolute + + + +0.01 +smooth + +8.53697259010691 +47.350320115436 +428.92774433393913 +-132.76925013770503 +70.87483844560312 +0 +120 +absolute + + + +0.01 +smooth + +8.53697225134326 +47.35032065474095 +428.92764688847103 +-132.92477546932002 +70.87368095632931 +0 +120 +absolute + + + +0.01 +smooth + +8.53697190794927 +47.350321193392425 +428.92754984360784 +-133.07986716044775 +70.87254165532755 +0 +120 +absolute + + + +0.01 +smooth + +8.536971560004565 +47.35032173138861 +428.9274532456741 +-133.2345243151208 +70.87142093888285 +0 +120 +absolute + + + +0.01 +smooth + +8.536971207588772 +47.350322268727695 +428.92735714099473 +-133.38874603737187 +70.87031920328027 +0 +120 +absolute + + + +0.01 +smooth + +8.5369708507815 +47.35032280540786 +428.92726157589385 +-133.54253143123333 +70.8692368448047 +0 +120 +absolute + + + +0.01 +smooth + +8.536970489662384 +47.350323341427284 +428.9271665966963 +-133.695879600738 +70.86817425974122 +0 +120 +absolute + + + +0.01 +smooth + +8.536970124311038 +47.350323876784124 +428.92707224972656 +-133.84878964991833 +70.86713184437482 +0 +120 +absolute + + + +0.01 +smooth + +8.53696975480709 +47.3503244114766 +428.92697858130913 +-134.00126068280696 +70.86610999499051 +0 +120 +absolute + + + +0.01 +smooth + +8.536969381230165 +47.35032494550289 +428.92688563776886 +-134.1532918034366 +70.8651091078733 +0 +120 +absolute + + + +0.01 +smooth + +8.536969003659872 +47.350325478861144 +428.92679346543 +-134.3048821158396 +70.86412957930816 +0 +120 +absolute + + + +0.01 +smooth + +8.536968622175847 +47.35032601154956 +428.92670211061727 +-134.4560307240488 +70.86317180558014 +0 +120 +absolute + + + +0.01 +smooth + +8.53696823685771 +47.35032654356634 +428.9266116196554 +-134.60673673209672 +70.86223618297421 +0 +120 +absolute + + + +0.01 +smooth + +8.536967847785075 +47.350327074909615 +428.9265220388685 +-134.75699924401582 +70.86132310777538 +0 +120 +absolute + + + +0.01 +smooth + +8.536967455037578 +47.35032760557764 +428.92643341458177 +-134.9068173638389 +70.8604329762687 +0 +120 +absolute + + + +0.01 +smooth + +8.536967058694827 +47.35032813556852 +428.92634579311925 +-135.05619019559842 +70.8595661847391 +0 +120 +absolute + + + +0.01 +smooth + +8.536966658836453 +47.35032866488048 +428.9262592208057 +-135.20511684332706 +70.85872312947164 +0 +120 +absolute + + + +0.01 +smooth + +8.53696625554208 +47.35032919351171 +428.9261737439658 +-135.35359641105734 +70.85790420675129 +0 +120 +absolute + + + +0.01 +smooth + +8.536965848891322 +47.350329721460355 +428.926089408924 +-135.50162800282192 +70.85710981286309 +0 +120 +absolute + + + +0.01 +smooth + +8.536965438963815 +47.35033024872464 +428.9260062620051 +-135.64921072265344 +70.85634034409203 +0 +120 +absolute + + + +0.01 +smooth + +8.536965025839164 +47.3503307753027 +428.92592434953315 +-135.79634367458434 +70.85559619672308 +0 +120 +absolute + + + +0.01 +smooth + +8.536964609597007 +47.35033130119275 +428.9258437178333 +-135.9430259626473 +70.85487776704132 +0 +120 +absolute + + + +0.01 +smooth + +8.536964190316956 +47.35033182639296 +428.9257644132298 +-136.08925669087498 +70.85418545133167 +0 +120 +absolute + + + +0.01 +smooth + +8.536963768078639 +47.35033235090151 +428.92568648204724 +-136.23503496329994 +70.8535196458792 +0 +120 +absolute + + + +0.01 +smooth + +8.536963342961677 +47.35033287471659 +428.92560997061037 +-136.38035988395472 +70.85288074696888 +0 +120 +absolute + + + +0.01 +smooth + +8.53696291504569 +47.35033339783637 +428.92553492524354 +-136.52523055687192 +70.85226915088572 +0 +120 +absolute + + + +0.01 +smooth + +8.536962484410303 +47.35033392025904 +428.92546139227153 +-136.6696460860842 +70.85168525391475 +0 +120 +absolute + + + +0.01 +smooth + +8.53696205113514 +47.350334441982774 +428.92538941801877 +-136.81360557562417 +70.85112945234094 +0 +120 +absolute + + + +0.01 +smooth + +8.53696161529982 +47.350334963005764 +428.92531904880985 +-136.95710812952436 +70.8506021424493 +0 +120 +absolute + + + +0.01 +smooth + +8.536961176983967 +47.350335483326184 +428.92525033096933 +-137.10015285181737 +70.85010372052486 +0 +120 +absolute + + + +0.01 +smooth + +8.536960736267202 +47.350336002942214 +428.925183310822 +-137.24273884653584 +70.8496345828526 +0 +120 +absolute + + + +0.01 +smooth + +8.536960293229152 +47.35033652185204 +428.9251180346921 +-137.38486521771233 +70.84919512571754 +0 +120 +absolute + + + +0.01 +smooth + +8.536959847949433 +47.35033704005386 +428.9250545489044 +-137.52653106937947 +70.84878574540467 +0 +120 +absolute + + + +0.01 +smooth + +8.53695940050767 +47.350337557545814 +428.92499289978343 +-137.66773550556982 +70.84840683819901 +0 +120 +absolute + + + +0.01 +smooth + +8.536958950983488 +47.35033807432612 +428.9249331336538 +-137.80847763031602 +70.84805880038556 +0 +120 +absolute + + + +0.01 +smooth + +8.536958499456507 +47.35033859039294 +428.92487529684 +-137.94875654765065 +70.84774202824931 +0 +120 +absolute + + + +0.01 +smooth + +8.536958046006347 +47.35033910574447 +428.9248194356667 +-138.08857136160628 +70.84745691807527 +0 +120 +absolute + + + +0.01 +smooth + +8.536957590712637 +47.35033962037886 +428.9247655964584 +-138.2279211762155 +70.84720386614846 +0 +120 +absolute + + + +0.01 +smooth + +8.536957133654994 +47.35034013429434 +428.9247138255397 +-138.36680509551098 +70.84698326875389 +0 +120 +absolute + + + +0.01 +smooth + +8.536956674913041 +47.35034064748907 +428.92466416923514 +-138.50522222352524 +70.84679552217652 +0 +120 +absolute + + + +0.01 +smooth + +8.536956214566402 +47.35034115996122 +428.9246166738694 +-138.64317166429092 +70.8466410227014 +0 +120 +absolute + + + +0.01 +smooth + +8.536955752694698 +47.350341671708975 +428.92457138576697 +-138.78065252184058 +70.84652016661353 +0 +120 +absolute + + + +0.01 +smooth + +8.536955289377554 +47.35034218273052 +428.9245283512523 +-138.91766390020686 +70.8464333501979 +0 +120 +absolute + + + +0.01 +smooth + +8.53695482469459 +47.350342693024054 +428.92448761665025 +-139.05420490342235 +70.84638096973953 +0 +120 +absolute + + + +0.01 +smooth + +8.536954358725428 +47.35034320258773 +428.9244492282852 +-139.19027463551961 +70.84636342152339 +0 +120 +absolute + + + +0.01 +smooth + +8.536953890017138 +47.35034371147862 +428.92441204896494 +-139.32590331305 +70.84648432003758 +0 +120 +absolute + + + +0.01 +smooth + +8.536953417104057 +47.35034421975308 +428.9243749316216 +-139.4611224216643 +70.84684283917508 +0 +120 +absolute + + + +0.01 +smooth + +8.536952940046712 +47.3503447274082 +428.9243379077667 +-139.595932969044 +70.8474327143281 +0 +120 +absolute + + + +0.01 +smooth + +8.536952458905631 +47.3503452344411 +428.9243010089116 +-139.7303359628707 +70.84824768088906 +0 +120 +absolute + + + +0.01 +smooth + +8.536951973741346 +47.350345740848915 +428.9242642665678 +-139.86433241082602 +70.84928147425022 +0 +120 +absolute + + + +0.01 +smooth + +8.536951484614374 +47.35034624662871 +428.92422771224625 +-139.99792332059144 +70.85052782980385 +0 +120 +absolute + + + +0.01 +smooth + +8.536950991585249 +47.350346751777614 +428.9241913774588 +-140.1311096998486 +70.85198048294234 +0 +120 +absolute + + + +0.01 +smooth + +8.536950494714494 +47.35034725629273 +428.9241552937165 +-140.2638925562791 +70.8536331690579 +0 +120 +absolute + + + +0.01 +smooth + +8.536949994062644 +47.350347760171175 +428.92411949253085 +-140.39627289756444 +70.85547962354292 +0 +120 +absolute + + + +0.01 +smooth + +8.536949489690219 +47.35034826341008 +428.9240840054135 +-140.52825173138638 +70.85751358178969 +0 +120 +absolute + + + +0.01 +smooth + +8.53694898165775 +47.35034876600653 +428.9240488638754 +-140.6598300654263 +70.8597287791905 +0 +120 +absolute + + + +0.01 +smooth + +8.53694847002576 +47.350349267957625 +428.924014099428 +-140.7910089073658 +70.86211895113767 +0 +120 +absolute + + + +0.01 +smooth + +8.536947954854782 +47.3503497692605 +428.9239797435828 +-140.92178926488657 +70.86467783302349 +0 +120 +absolute + + + +0.01 +smooth + +8.53694743620534 +47.35035026991226 +428.9239458278513 +-141.0521721456701 +70.86739916024032 +0 +120 +absolute + + + +0.01 +smooth + +8.536946914137962 +47.35035076991002 +428.92391238374466 +-141.18215855739808 +70.87027666818042 +0 +120 +absolute + + + +0.01 +smooth + +8.536946388713172 +47.350351269250844 +428.92387944277425 +-141.31174950775195 +70.87330409223611 +0 +120 +absolute + + + +0.01 +smooth + +8.5369458599915 +47.3503517679319 +428.92384703645155 +-141.4409460044133 +70.87647516779968 +0 +120 +absolute + + + +0.01 +smooth + +8.536945328033475 +47.35035226595028 +428.923815196288 +-141.56974905506382 +70.8797836302635 +0 +120 +absolute + + + +0.01 +smooth + +8.536944792899625 +47.350352763303086 +428.9237839537949 +-141.69815966738503 +70.88322321501984 +0 +120 +absolute + + + +0.01 +smooth + +8.536944254650471 +47.35035325998742 +428.92375334048353 +-141.82617884905844 +70.88678765746099 +0 +120 +absolute + + + +0.01 +smooth + +8.536943713346542 +47.350353756000416 +428.9237233878653 +-141.9538076077657 +70.89047069297925 +0 +120 +absolute + + + +0.01 +smooth + +8.536943169048373 +47.35035425133916 +428.92369412745177 +-142.0810469511884 +70.894266056967 +0 +120 +absolute + + + +0.01 +smooth + +8.536942621816484 +47.3503547460008 +428.9236655907542 +-142.20789788700813 +70.89816748481648 +0 +120 +absolute + + + +0.01 +smooth + +8.536942071711403 +47.350355239982385 +428.9236378092838 +-142.33436142290634 +70.90216871192003 +0 +120 +absolute + + + +0.01 +smooth + +8.536941518793656 +47.35035573328108 +428.92361081455215 +-142.4604385665648 +70.90626347366992 +0 +120 +absolute + + + +0.01 +smooth + +8.536940963123774 +47.35035622589396 +428.9235846380707 +-142.58613032566493 +70.91044550545853 +0 +120 +absolute + + + +0.01 +smooth + +8.536940404762284 +47.35035671781817 +428.9235593113506 +-142.71143770788836 +70.91470854267811 +0 +120 +absolute + + + +0.01 +smooth + +8.536939843769709 +47.350357209050784 +428.9235348659033 +-142.83636172091673 +70.91904632072098 +0 +120 +absolute + + + +0.01 +smooth + +8.53693928020658 +47.35035769958893 +428.9235113332403 +-142.96090337243155 +70.92345257497946 +0 +120 +absolute + + + +0.01 +smooth + +8.536938714133424 +47.35035818942972 +428.92348874487277 +-143.0850636701144 +70.92792104084586 +0 +120 +absolute + + + +0.01 +smooth + +8.536938145610765 +47.35035867857025 +428.92346713231234 +-143.2088436216469 +70.93244545371249 +0 +120 +absolute + + + +0.01 +smooth + +8.536937574699135 +47.35035916700764 +428.92344652707027 +-143.33224423471057 +70.93701954897162 +0 +120 +absolute + + + +0.01 +smooth + +8.536937001459059 +47.35035965473901 +428.9234269606578 +-143.45526651698705 +70.9416370620156 +0 +120 +absolute + + + +0.01 +smooth + +8.536936425951064 +47.35036014176145 +428.92340846458654 +-143.57791147615788 +70.94629172823674 +0 +120 +absolute + + + +0.01 +smooth + +8.536935848235675 +47.35036062807208 +428.9233910703677 +-143.70018011990462 +70.95097728302733 +0 +120 +absolute + + + +0.01 +smooth + +8.536935268373425 +47.35036111366801 +428.9233748095127 +-143.82207345590894 +70.95568746177969 +0 +120 +absolute + + + +0.01 +smooth + +8.536934686424836 +47.35036159854635 +428.923359713533 +-143.9435924918523 +70.96041599988612 +0 +120 +absolute + + + +0.01 +smooth + +8.536934102450438 +47.3503620827042 +428.9233458139398 +-144.06473823541634 +70.96515663273892 +0 +120 +absolute + + + +0.01 +smooth + +8.536933516510755 +47.35036256613869 +428.9233331422447 +-144.18551169428267 +70.96990309573043 +0 +120 +absolute + + + +0.01 +smooth + +8.53693292866632 +47.35036304884691 +428.92332172995896 +-144.3059138761328 +70.97464912425292 +0 +120 +absolute + + + +0.01 +smooth + +8.536932338977655 +47.35036353082599 +428.9233116085939 +-144.42594578864836 +70.97938845369873 +0 +120 +absolute + + + +0.01 +smooth + +8.536931747505289 +47.350364012073015 +428.92330280966104 +-144.5456084395109 +70.98411481946016 +0 +120 +absolute + + + +0.01 +smooth + +8.536931154309748 +47.350364492585115 +428.9232953646716 +-144.664902836402 +70.98882195692951 +0 +120 +absolute + + + +0.01 +smooth + +8.536930559451564 +47.350364972359394 +428.923289305137 +-144.78382998700326 +70.9935036014991 +0 +120 +absolute + + + +0.01 +smooth + +8.53692996299126 +47.35036545139296 +428.9232846625688 +-144.90239089899626 +70.99815348856121 +0 +120 +absolute + + + +0.01 +smooth + +8.536929364989364 +47.35036592968292 +428.9232814684781 +-145.0205865800625 +71.00276535350821 +0 +120 +absolute + + + +0.01 +smooth + +8.536928765506401 +47.350366407226396 +428.92327975437644 +-145.13841803788367 +71.00733293173234 +0 +120 +absolute + + + +0.01 +smooth + +8.536928164450655 +47.35036688403236 +428.92327950057273 +-145.25588569928607 +71.01186271028064 +0 +120 +absolute + + + +0.01 +smooth + +8.53692756022049 +47.350367360226585 +428.92328016568723 +-145.37298477923193 +71.01648830799364 +0 +120 +absolute + + + +0.01 +smooth + +8.53692695241086 +47.350367835839315 +428.9232815830111 +-145.48971615401368 +71.02124445788958 +0 +120 +absolute + + + +0.01 +smooth + +8.536926341070137 +47.35036831086524 +428.92328373533985 +-145.60608254762778 +71.02612806038124 +0 +120 +absolute + + + +0.01 +smooth + +8.536925726246682 +47.350368785299 +428.92328660546883 +-145.72208668407032 +71.03113601588136 +0 +120 +absolute + + + +0.01 +smooth + +8.536925107988878 +47.35036925913529 +428.9232901761938 +-145.83773128733753 +71.03626522480273 +0 +120 +absolute + + + +0.01 +smooth + +8.53692448634508 +47.35036973236875 +428.92329443031014 +-145.95301908142557 +71.04151258755812 +0 +120 +absolute + + + +0.01 +smooth + +8.536923861363663 +47.35037020499407 +428.9232993506132 +-146.06795279033074 +71.04687500456029 +0 +120 +absolute + + + +0.01 +smooth + +8.536923233092992 +47.35037067700589 +428.9233049198985 +-146.1825351380491 +71.052349376222 +0 +120 +absolute + + + +0.01 +smooth + +8.536922601581441 +47.3503711483989 +428.92331112096167 +-146.29676884857702 +71.05793260295607 +0 +120 +absolute + + + +0.01 +smooth + +8.536921966877376 +47.35037161916773 +428.9233179365979 +-146.41065664591056 +71.0636215851752 +0 +120 +absolute + + + +0.01 +smooth + +8.53692132902917 +47.35037208930711 +428.9233253496033 +-146.5242012540461 +71.06941322329227 +0 +120 +absolute + + + +0.01 +smooth + +8.536920688085184 +47.35037255881163 +428.92333334277254 +-146.63740539697972 +71.0753044177199 +0 +120 +absolute + + + +0.01 +smooth + +8.53692004409379 +47.35037302767599 +428.9233418989016 +-146.75027179870762 +71.08129206887098 +0 +120 +absolute + + + +0.01 +smooth + +8.536919397103363 +47.3503734958949 +428.923351000786 +-146.86280318322616 +71.08737307715826 +0 +120 +absolute + + + +0.01 +smooth + +8.536918747162266 +47.35037396346296 +428.92336063122104 +-146.9750022745314 +71.09354434299449 +0 +120 +absolute + + + +0.01 +smooth + +8.536918094318864 +47.35037443037485 +428.92337077300215 +-147.0868717966195 +71.09980276679244 +0 +120 +absolute + + + +0.01 +smooth + +8.536917438621531 +47.35037489662524 +428.92338140892497 +-147.19841447348685 +71.10614524896485 +0 +120 +absolute + + + +0.01 +smooth + +8.536916780118641 +47.35037536220883 +428.92339252178505 +-147.3096330291296 +71.11256868992459 +0 +120 +absolute + + + +0.01 +smooth + +8.536916118858557 +47.35037582712024 +428.92340409437764 +-147.42053018754387 +71.11906999008433 +0 +120 +absolute + + + +0.01 +smooth + +8.536915454889643 +47.35037629135414 +428.92341610949825 +-147.53110867272594 +71.12564604985688 +0 +120 +absolute + + + +0.01 +smooth + +8.536914788260273 +47.35037675490522 +428.92342854994246 +-147.64137120867198 +71.132293769655 +0 +120 +absolute + + + +0.01 +smooth + +8.536914119018821 +47.350377217768155 +428.92344139850604 +-147.7513205193783 +71.13901004989151 +0 +120 +absolute + + + +0.01 +smooth + +8.536913447213648 +47.35037767993757 +428.92345463798404 +-147.860959328841 +71.14579179097913 +0 +120 +absolute + + + +0.01 +smooth + +8.536912772893123 +47.35037814140815 +428.923468251172 +-147.9702903610563 +71.15263589333063 +0 +120 +absolute + + + +0.01 +smooth + +8.536912096105619 +47.35037860217456 +428.92348222086554 +-148.07931634002045 +71.15953925735879 +0 +120 +absolute + + + +0.01 +smooth + +8.536911416899503 +47.350379062231475 +428.92349652986013 +-148.18803998972965 +71.1664987834764 +0 +120 +absolute + + + +0.01 +smooth + +8.536910735323147 +47.350379521573544 +428.92351116095125 +-148.29646403418008 +71.1735113720962 +0 +120 +absolute + + + +0.01 +smooth + +8.536910051424915 +47.350379980195456 +428.9235260969343 +-148.40459119736798 +71.18057392363099 +0 +120 +absolute + + + +0.01 +smooth + +8.536909365253177 +47.350380438091854 +428.9235413206049 +-148.51242420328958 +71.18768333849353 +0 +120 +absolute + + + +0.01 +smooth + +8.536908676856301 +47.350380895257416 +428.9235568147584 +-148.619965775941 +71.19483651709659 +0 +120 +absolute + + + +0.01 +smooth + +8.53690798628266 +47.350381351686806 +428.92357256219043 +-148.72721863931855 +71.20203035985293 +0 +120 +absolute + + + +0.01 +smooth + +8.53690729358062 +47.35038180737468 +428.92358854569636 +-148.83418551741838 +71.20926176717533 +0 +120 +absolute + + + +0.01 +smooth + +8.536906598798552 +47.350382262315726 +428.9236047480717 +-148.94086913423672 +71.21652763947658 +0 +120 +absolute + + + +0.01 +smooth + +8.53690590198482 +47.35038271650458 +428.923621152112 +-149.0472722137698 +71.22382487716942 +0 +120 +absolute + + + +0.01 +smooth + +8.536905203187798 +47.35038316993594 +428.9236377406126 +-149.15339748001372 +71.23115038066663 +0 +120 +absolute + + + +0.01 +smooth + +8.536904502455851 +47.350383622604454 +428.92365449636907 +-149.25924765696482 +71.23850105038099 +0 +120 +absolute + + + +0.01 +smooth + +8.53690379983735 +47.35038407450478 +428.923671402177 +-149.36482546861927 +71.24587378672527 +0 +120 +absolute + + + +0.01 +smooth + +8.536903095380666 +47.350384525631604 +428.9236884408317 +-149.47013363897327 +71.25326549011223 +0 +120 +absolute + + + +0.01 +smooth + +8.536902389134163 +47.35038497597957 +428.9237055951287 +-149.57517489202303 +71.26067306095466 +0 +120 +absolute + + + +0.01 +smooth + +8.536901681146212 +47.350385425543365 +428.9237228478636 +-149.67995195176474 +71.2680933996653 +0 +120 +absolute + + + +0.01 +smooth + +8.536900971465183 +47.350385874317645 +428.92374018183165 +-149.78446754219462 +71.27552340665696 +0 +120 +absolute + + + +0.01 +smooth + +8.536900260139443 +47.35038632229707 +428.9237575798287 +-149.8887243873089 +71.28295998234239 +0 +120 +absolute + + + +0.01 +smooth + +8.536899547217363 +47.35038676947631 +428.9237750246499 +-149.99272521110373 +71.29040002713435 +0 +120 +absolute + + + +0.01 +smooth + +8.53689883274731 +47.350387215850034 +428.9237924990909 +-150.09647273757545 +71.29784044144563 +0 +120 +absolute + + + +0.01 +smooth + +8.536898116777653 +47.35038766141291 +428.92380998594706 +-150.1999696907201 +71.30527812568899 +0 +120 +absolute + + + +0.01 +smooth + +8.53689739935676 +47.3503881061596 +428.923827468014 +-150.303218794534 +71.3127099802772 +0 +120 +absolute + + + +0.01 +smooth + +8.536896680533003 +47.350388550084766 +428.92384492808714 +-150.4062227730133 +71.32013290562305 +0 +120 +absolute + + + +0.01 +smooth + +8.53689595988869 +47.35038899325936 +428.92386265816623 +-150.5089647647302 +71.32756808368781 +0 +120 +absolute + + + +0.01 +smooth + +8.53689523626195 +47.35038943587347 +428.9238814338951 +-150.61139745710346 +71.33507584106859 +0 +120 +absolute + + + +0.01 +smooth + +8.536894509630361 +47.350389877928095 +428.9239012651532 +-150.7135222207269 +71.34265750305264 +0 +120 +absolute + + + +0.01 +smooth + +8.536893780033024 +47.350390319414124 +428.9239221207686 +-150.81534303083188 +71.3503111987057 +0 +120 +absolute + + + +0.01 +smooth + +8.536893047509032 +47.3503907603224 +428.92394396956854 +-150.91686386264982 +71.35803505709343 +0 +120 +absolute + + + +0.01 +smooth + +8.536892312097489 +47.35039120064382 +428.9239667803812 +-151.01808869141206 +71.36582720728164 +0 +120 +absolute + + + +0.01 +smooth + +8.536891573837483 +47.35039164036925 +428.92399052203393 +-151.11902149235007 +71.37368577833605 +0 +120 +absolute + + + +0.01 +smooth + +8.536890832768115 +47.35039207948959 +428.9240151633547 +-151.21966624069515 +71.38160889932243 +0 +120 +absolute + + + +0.01 +smooth + +8.536890088928484 +47.35039251799568 +428.9240406731709 +-151.32002691167872 +71.38959469930643 +0 +120 +absolute + + + +0.01 +smooth + +8.536889342357684 +47.35039295587841 +428.9240670203104 +-151.42010748053215 +71.39764130735388 +0 +120 +absolute + + + +0.01 +smooth + +8.53688859309481 +47.350393393128634 +428.9240941736008 +-151.51991192248687 +71.40574685253044 +0 +120 +absolute + + + +0.01 +smooth + +8.536887841178965 +47.35039382973725 +428.92412210186995 +-151.61944421277423 +71.41390946390189 +0 +120 +absolute + + + +0.01 +smooth + +8.53688708664924 +47.35039426569512 +428.9241507739453 +-151.71870832662563 +71.42212727053395 +0 +120 +absolute + + + +0.01 +smooth + +8.536886329544737 +47.35039470099313 +428.92418015865474 +-151.81770823927243 +71.43039840149238 +0 +120 +absolute + + + +0.01 +smooth + +8.536885569904552 +47.35039513562215 +428.924210224826 +-151.9164479259461 +71.4387209858429 +0 +120 +absolute + + + +0.01 +smooth + +8.536884807767777 +47.35039556957304 +428.92424094128666 +-152.01493136187793 +71.44709315265125 +0 +120 +absolute + + + +0.01 +smooth + +8.536884043173515 +47.35039600283668 +428.9242722768643 +-152.1131625222993 +71.45551303098316 +0 +120 +absolute + + + +0.01 +smooth + +8.536883276160857 +47.350396435403944 +428.92430420038676 +-152.21114538244169 +71.46397874990434 +0 +120 +absolute + + + +0.01 +smooth + +8.536882506768908 +47.35039686726573 +428.92433668068185 +-152.30888391753646 +71.47248843848062 +0 +120 +absolute + + + +0.01 +smooth + +8.536881735036758 +47.35039729841287 +428.92436968657694 +-152.40638210281492 +71.48104022577765 +0 +120 +absolute + + + +0.01 +smooth + +8.536880961003506 +47.35039772883626 +428.9244031869 +-152.50364391350854 +71.48963224086118 +0 +120 +absolute + + + +0.01 +smooth + +8.53688018470825 +47.35039815852677 +428.9244371504785 +-152.60067332484863 +71.49826261279696 +0 +120 +absolute + + + +0.01 +smooth + +8.536879406190089 +47.35039858747532 +428.9244715461405 +-152.69747431206673 +71.50692947065076 +0 +120 +absolute + + + +0.01 +smooth + +8.536878625488113 +47.35039901567268 +428.9245063427133 +-152.79405085039403 +71.51563094348825 +0 +120 +absolute + + + +0.01 +smooth + +8.536877842641424 +47.35039944310982 +428.9245415090247 +-152.890406915062 +71.52436516037521 +0 +120 +absolute + + + +0.01 +smooth + +8.536877057689118 +47.35039986977756 +428.9245770139025 +-152.9865464813021 +71.53313025037737 +0 +120 +absolute + + + +0.01 +smooth + +8.536876270670291 +47.35040029566681 +428.9246128261743 +-153.0824735243456 +71.54192434256045 +0 +120 +absolute + + + +0.01 +smooth + +8.536875481624044 +47.35040072076842 +428.92464891466784 +-153.17819201942393 +71.5507455659902 +0 +120 +absolute + + + +0.01 +smooth + +8.53687469058947 +47.350401145073256 +428.9246852482108 +-153.2737059417685 +71.55959204973237 +0 +120 +absolute + + + +0.01 +smooth + +8.536873897605666 +47.35040156857223 +428.92472179563083 +-153.3690192666107 +71.56846192285268 +0 +120 +absolute + + + +0.01 +smooth + +8.536873102711727 +47.35040199125617 +428.92475852575564 +-153.46413596918188 +71.57735331441688 +0 +120 +absolute + + + +0.01 +smooth + +8.536872305946758 +47.35040241311599 +428.9247954074129 +-153.55906002471346 +71.58626435349068 +0 +120 +absolute + + + +0.01 +smooth + +8.536871507349849 +47.35040283414253 +428.92483240943045 +-153.65379540843676 +71.59519316913983 +0 +120 +absolute + + + +0.01 +smooth + +8.536870706960098 +47.350403254326686 +428.92486950063574 +-153.74834609558326 +71.6041378904301 +0 +120 +absolute + + + +0.01 +smooth + +8.536869904816603 +47.35040367365933 +428.9249066498566 +-153.84271606138432 +71.61309664642717 +0 +120 +absolute + + + +0.01 +smooth + +8.53686910095846 +47.35040409213133 +428.92494382592076 +-153.9369092810713 +71.62206756619682 +0 +120 +absolute + + + +0.01 +smooth + +8.536868295424767 +47.35040450973356 +428.9249809976559 +-154.03092972987557 +71.63104877880475 +0 +120 +absolute + + + +0.01 +smooth + +8.536867488254622 +47.350404926456896 +428.92501813388964 +-154.12478138302856 +71.64003841331674 +0 +120 +absolute + + + +0.01 +smooth + +8.536866679487117 +47.350405342292206 +428.9250552034497 +-154.21846821576162 +71.64903459879851 +0 +120 +absolute + + + +0.01 +smooth + +8.536865869161357 +47.35040575723038 +428.92509217516374 +-154.31199420330623 +71.65803546431579 +0 +120 +absolute + + + +0.01 +smooth + +8.53686505731643 +47.350406171262264 +428.9251290178595 +-154.40536332089363 +71.66703913893429 +0 +120 +absolute + + + +0.01 +smooth + +8.53686424399144 +47.35040658437876 +428.9251657003647 +-154.4985795437553 +71.6760437517198 +0 +120 +absolute + + + +0.01 +smooth + +8.536863429225479 +47.35040699657074 +428.92520219150697 +-154.5916468471226 +71.68504743173803 +0 +120 +absolute + + + +0.01 +smooth + +8.536862613057648 +47.35040740782905 +428.92523846011403 +-154.68456920622694 +71.6940483080547 +0 +120 +absolute + + + +0.01 +smooth + +8.536861795527042 +47.35040781814459 +428.92527447501357 +-154.7773505962997 +71.7030445097356 +0 +120 +absolute + + + +0.01 +smooth + +8.536860976672758 +47.35040822750823 +428.9253102050333 +-154.86999499257223 +71.71203416584642 +0 +120 +absolute + + + +0.01 +smooth + +8.53686015653389 +47.350408635910846 +428.9253456190009 +-154.96250637027595 +71.72101540545292 +0 +120 +absolute + + + +0.01 +smooth + +8.536859335142847 +47.35040904334549 +428.92538068942656 +-155.0548881155289 +71.7299866259496 +0 +120 +absolute + + + +0.01 +smooth + +8.53685851174702 +47.35040945006214 +428.92541582321064 +-155.14707479392595 +71.73897771582662 +0 +120 +absolute + + + +0.01 +smooth + +8.536857685836573 +47.350409856225944 +428.92545130258 +-155.239023116046 +71.74800895322934 +0 +120 +absolute + + + +0.01 +smooth + +8.53685685744305 +47.350410261822965 +428.9254871138272 +-155.33073758142916 +71.75707894635153 +0 +120 +absolute + + + +0.01 +smooth + +8.536856026597988 +47.35041066683917 +428.92552324324384 +-155.42222268961535 +71.76618630338676 +0 +120 +absolute + + + +0.01 +smooth + +8.536855193332944 +47.35041107126064 +428.925559677122 +-155.51348294014434 +71.77532963252878 +0 +120 +absolute + + + +0.01 +smooth + +8.536854357679454 +47.35041147507334 +428.9255964017536 +-155.60452283255623 +71.78450754197122 +0 +120 +absolute + + + +0.01 +smooth + +8.536853519669066 +47.350411878263316 +428.9256334034308 +-155.69534686639093 +71.79371863990778 +0 +120 +absolute + + + +0.01 +smooth + +8.536852679333327 +47.35041228081661 +428.9256706684457 +-155.78595954118836 +71.80296153453216 +0 +120 +absolute + + + +0.01 +smooth + +8.536851836703777 +47.35041268271921 +428.9257081830899 +-155.87636535648844 +71.81223483403798 +0 +120 +absolute + + + +0.01 +smooth + +8.536850991811969 +47.35041308395717 +428.9257459336557 +-155.96656881183117 +71.82153714661898 +0 +120 +absolute + + + +0.01 +smooth + +8.536850144689437 +47.35041348451648 +428.92578390643484 +-156.0565744067564 +71.83086708046875 +0 +120 +absolute + + + +0.01 +smooth + +8.536849295367732 +47.35041388438317 +428.9258220877195 +-156.14638664080408 +71.84022324378107 +0 +120 +absolute + + + +0.01 +smooth + +8.536848443878403 +47.3504142835433 +428.92586046380177 +-156.23601001351426 +71.84960424474956 +0 +120 +absolute + + + +0.01 +smooth + +8.536847590252984 +47.350414681982826 +428.9258990209733 +-156.32544902442672 +71.85900869156787 +0 +120 +absolute + + + +0.01 +smooth + +8.536846734523035 +47.35041507968782 +428.9259377455264 +-156.4147081730815 +71.86843519242973 +0 +120 +absolute + + + +0.01 +smooth + +8.536845876720088 +47.350415476644294 +428.92597662375306 +-156.50379195901854 +71.8778823555288 +0 +120 +absolute + + + +0.01 +smooth + +8.536845016875688 +47.35041587283823 +428.92601564194484 +-156.5927048817777 +71.8873487890587 +0 +120 +absolute + + + +0.01 +smooth + +8.536844155021392 +47.350416268255714 +428.92605478639433 +-156.68145144089897 +71.8968331012132 +0 +120 +absolute + + + +0.01 +smooth + +8.536843291188731 +47.35041666288272 +428.92609404339305 +-156.77003613592228 +71.90633390018591 +0 +120 +absolute + + + +0.01 +smooth + +8.536842425409258 +47.3504170567053 +428.9261333992332 +-156.85846346638758 +71.91584979417053 +0 +120 +absolute + + + +0.01 +smooth + +8.536841557714519 +47.35041744970945 +428.92617284020685 +-156.94673793183483 +71.92537939136075 +0 +120 +absolute + + + +0.01 +smooth + +8.536840688136047 +47.350417841881196 +428.9262123526058 +-157.03486403180383 +71.9349212999502 +0 +120 +absolute + + + +0.01 +smooth + +8.536839816705404 +47.35041823320659 +428.9262519227222 +-157.1228462658347 +71.94447412813261 +0 +120 +absolute + + + +0.01 +smooth + +8.536838943454123 +47.35041862367161 +428.9262915368478 +-157.21068913346727 +71.95403648410161 +0 +120 +absolute + + + +0.01 +smooth + +8.536838068413756 +47.350419013262304 +428.9263311812749 +-157.29839713424153 +71.9636069760509 +0 +120 +absolute + + + +0.01 +smooth + +8.536837191615842 +47.350419401964686 +428.9263708422953 +-157.3859747676973 +71.97318421217416 +0 +120 +absolute + + + +0.01 +smooth + +8.536836313091928 +47.35041978976478 +428.9264105062011 +-157.4734265333747 +71.98276680066505 +0 +120 +absolute + + + +0.01 +smooth + +8.53683543287356 +47.35042017664861 +428.92645015928406 +-157.56075693081357 +71.99235334971726 +0 +120 +absolute + + + +0.01 +smooth + +8.536834550992284 +47.350420562602196 +428.92648978783654 +-157.64797045955382 +72.00194246752447 +0 +120 +absolute + + + +0.01 +smooth + +8.536833667479641 +47.350420947611546 +428.92652937815024 +-157.73507161913543 +72.01153276228032 +0 +120 +absolute + + + +0.01 +smooth + +8.536832782367178 +47.350421331662716 +428.9265689165172 +-157.82206490909832 +72.02112284217854 +0 +120 +absolute + + + +0.01 +smooth + +8.536831895686442 +47.350421714741685 +428.92660838922956 +-157.90895482898242 +72.03071131541276 +0 +120 +absolute + + + +0.01 +smooth + +8.536831007468974 +47.35042209683451 +428.92664778257915 +-157.9957458783277 +72.0402967901767 +0 +120 +absolute + + + +0.01 +smooth + +8.536830117746321 +47.35042247792718 +428.92668708285794 +-158.08244255667407 +72.04987787466399 +0 +120 +absolute + + + +0.01 +smooth + +8.53682922655003 +47.35042285800576 +428.92672627635807 +-158.1690493635615 +72.05945317706832 +0 +120 +absolute + + + +0.01 +smooth + +8.536828333911641 +47.35042323705622 +428.9267653493714 +-158.25557079852985 +72.06902130558339 +0 +120 +absolute + + + +0.01 +smooth + +8.536827439862702 +47.35042361506462 +428.9268042881901 +-158.34201136111915 +72.07858086840284 +0 +120 +absolute + + + +0.01 +smooth + +8.53682654443476 +47.35042399201697 +428.926843079106 +-158.4283755508693 +72.08813047372038 +0 +120 +absolute + + + +0.01 +smooth + +8.536825647659356 +47.35042436789929 +428.9268817084111 +-158.5146678673202 +72.09766872972966 +0 +120 +absolute + + + +0.01 +smooth + +8.536824749568037 +47.35042474269761 +428.9269201623974 +-158.60089281001189 +72.10719424462438 +0 +120 +absolute + + + +0.01 +smooth + +8.536823850192345 +47.350425116397936 +428.9269584273568 +-158.68705487848422 +72.1167056265982 +0 +120 +absolute + + + +0.01 +smooth + +8.536822949563831 +47.350425488986296 +428.92699648958154 +-158.77315857227708 +72.1262014838448 +0 +120 +absolute + + + +0.01 +smooth + +8.53682204771403 +47.35042586044873 +428.9270343353635 +-158.85920839093052 +72.13568042455785 +0 +120 +absolute + + + +0.01 +smooth + +8.5368211446745 +47.350426230771234 +428.92707195099456 +-158.94520883398442 +72.14514105693102 +0 +120 +absolute + + + +0.01 +smooth + +8.536820240476777 +47.35042659993984 +428.92710932276685 +-159.03116440097872 +72.154581989158 +0 +120 +absolute + + + +0.01 +smooth + +8.536819335152407 +47.350426967940564 +428.92714643697224 +-159.1170795914534 +72.1640018294325 +0 +120 +absolute + + + +0.01 +smooth + +8.536818428732936 +47.35042733475943 +428.9271832799029 +-159.20295890494833 +72.1733991859481 +0 +120 +absolute + + + +0.01 +smooth + +8.536817521136319 +47.35042770045247 +428.92721987756244 +-159.28879239806813 +72.18277708582065 +0 +120 +absolute + + + +0.01 +smooth + +8.536816611610728 +47.35042806548519 +428.9272564911246 +-159.37448512554025 +72.19216461178057 +0 +120 +absolute + + + +0.01 +smooth + +8.536815700033566 +47.35042842992973 +428.9272931634284 +-159.46002242298283 +72.20156636467219 +0 +120 +absolute + + + +0.01 +smooth + +8.536814786430313 +47.35042879376652 +428.92732988567786 +-159.54540847534216 +72.21098118468493 +0 +120 +absolute + + + +0.01 +smooth + +8.536813870826442 +47.35042915697603 +428.9273666490763 +-159.6306474675644 +72.22040791200813 +0 +120 +absolute + + + +0.01 +smooth + +8.53681295324743 +47.35042951953865 +428.9274034448275 +-159.71574358459569 +72.22984538683113 +0 +120 +absolute + + + +0.01 +smooth + +8.536812033718757 +47.35042988143485 +428.9274402641349 +-159.80070101138224 +72.23929244934331 +0 +120 +absolute + + + +0.01 +smooth + +8.536811112265896 +47.35043024264504 +428.9274770982022 +-159.88552393287026 +72.248747939734 +0 +120 +absolute + + + +0.01 +smooth + +8.536810188914327 +47.350430603149675 +428.92751393823306 +-159.970216534006 +72.25821069819258 +0 +120 +absolute + + + +0.01 +smooth + +8.536809263689523 +47.35043096292921 +428.92755077543103 +-160.05478299973566 +72.26767956490843 +0 +120 +absolute + + + +0.01 +smooth + +8.53680833661697 +47.35043132196406 +428.92758760099986 +-160.13922751500536 +72.27715338007089 +0 +120 +absolute + + + +0.01 +smooth + +8.536807407722138 +47.35043168023469 +428.92762440614314 +-160.22355426476142 +72.28663098386932 +0 +120 +absolute + + + +0.01 +smooth + +8.536806477030503 +47.3504320377215 +428.9276611820643 +-160.3077674339499 +72.29611121649307 +0 +120 +absolute + + + +0.01 +smooth + +8.53680554456754 +47.35043239440495 +428.92769791996704 +-160.391871207517 +72.3055929181315 +0 +120 +absolute + + + +0.01 +smooth + +8.536804610358733 +47.35043275026547 +428.9277346110551 +-160.47586977040905 +72.31507492897397 +0 +120 +absolute + + + +0.01 +smooth + +8.536803674429555 +47.35043310528349 +428.92777124653185 +-160.55976730757217 +72.32455608920985 +0 +120 +absolute + + + +0.01 +smooth + +8.536802736805484 +47.35043345943948 +428.9278078176012 +-160.64356800395257 +72.33403523902848 +0 +120 +absolute + + + +0.01 +smooth + +8.536801797511998 +47.35043381271386 +428.92784431546664 +-160.72727604449645 +72.34351121861926 +0 +120 +absolute + + + +0.01 +smooth + +8.536800856574567 +47.35043416508706 +428.92788073133164 +-160.81089561414996 +72.35298286817148 +0 +120 +absolute + + + +0.01 +smooth + +8.536799914018681 +47.350434516539536 +428.9279170564002 +-160.89443089785945 +72.3624490278746 +0 +120 +absolute + + + +0.01 +smooth + +8.536798969869805 +47.35043486705171 +428.9279532818755 +-160.97788608057093 +72.37190853791789 +0 +120 +absolute + + + +0.01 +smooth + +8.536798024153418 +47.35043521660401 +428.92798939896136 +-161.06126534723063 +72.38136023849074 +0 +120 +absolute + + + +0.01 +smooth + +8.536797076895 +47.35043556517691 +428.92802539886134 +-161.14457288278493 +72.3908029697825 +0 +120 +absolute + + + +0.01 +smooth + +8.536796128120029 +47.35043591275081 +428.9280612727793 +-161.22781287217978 +72.40023557198255 +0 +120 +absolute + + + +0.01 +smooth + +8.536795177853978 +47.35043625930618 +428.92809701191845 +-161.31098950036156 +72.40965688528023 +0 +120 +absolute + + + +0.01 +smooth + +8.536794226122327 +47.350436604823436 +428.9281326074826 +-161.3941069522764 +72.4190657498649 +0 +120 +absolute + + + +0.01 +smooth + +8.53679327295055 +47.35043694928302 +428.92816805067554 +-161.4771694128705 +72.42846100592594 +0 +120 +absolute + + + +0.01 +smooth + +8.536792318364128 +47.35043729266538 +428.92820333270066 +-161.56018106709004 +72.43784149365268 +0 +120 +absolute + + + +0.01 +smooth + +8.536791362388534 +47.35043763495095 +428.9282384447615 +-161.64314609988128 +72.44720605323451 +0 +120 +absolute + + + +0.01 +smooth + +8.536790405049247 +47.35043797612016 +428.928273378062 +-161.72606869619037 +72.45655352486078 +0 +120 +absolute + + + +0.01 +smooth + +8.536789446371742 +47.35043831615346 +428.92830812380555 +-161.80895304096356 +72.46588274872082 +0 +120 +absolute + + + +0.01 +smooth + +8.5367884863815 +47.35043865503128 +428.9283426731958 +-161.89180331914693 +72.47519256500402 +0 +120 +absolute + + + +0.01 +smooth + +8.536787525103994 +47.35043899273406 +428.92837701743633 +-161.97462371568682 +72.48448181389973 +0 +120 +absolute + + + +0.01 +smooth + +8.536786562564703 +47.35043932924225 +428.92841114773086 +-162.05741841552936 +72.49374933559731 +0 +120 +absolute + + + +0.01 +smooth + +8.536785598789102 +47.35043966453625 +428.92844505528285 +-162.14019160362074 +72.50299397028611 +0 +120 +absolute + + + +0.01 +smooth + +8.536784633802668 +47.35043999859654 +428.9284787312961 +-162.2229474649072 +72.5122145581555 +0 +120 +absolute + + + +0.01 +smooth + +8.536783667630882 +47.35044033140355 +428.9285121669741 +-162.30569018433488 +72.52140993939486 +0 +120 +absolute + + + +0.01 +smooth + +8.536782700299216 +47.3504406629377 +428.9285453535206 +-162.38842394685003 +72.53057895419352 +0 +120 +absolute + + + +0.01 +smooth + +8.536781731833148 +47.35044099317944 +428.92857828213903 +-162.47115293739884 +72.53972044274082 +0 +120 +absolute + + + +0.01 +smooth + +8.536780762258157 +47.35044132210922 +428.92861094403315 +-162.5538813409275 +72.54883324522618 +0 +120 +absolute + + + +0.01 +smooth + +8.53677979159972 +47.35044164970745 +428.9286433304065 +-162.6366133423822 +72.55791620183889 +0 +120 +absolute + + + +0.01 +smooth + +8.53677881988331 +47.350441975954574 +428.9286754324627 +-162.71935312670914 +72.56696815276837 +0 +120 +absolute + + + +0.01 +smooth + +8.53677784713441 +47.350442300831055 +428.9287072414054 +-162.80210487885455 +72.57598793820394 +0 +120 +absolute + + + +0.01 +smooth + +8.53677687337849 +47.35044262431732 +428.92873874843815 +-162.8848727837646 +72.58497439833498 +0 +120 +absolute + + + +0.01 +smooth + +8.53677589864103 +47.350442946393784 +428.9287699447647 +-162.96766102638549 +72.59392637335083 +0 +120 +absolute + + + +0.01 +smooth + +8.536774922947512 +47.350443267040916 +428.9288008215886 +-163.0504737916634 +72.60284270344086 +0 +120 +absolute + + + +0.01 +smooth + +8.536773946323404 +47.350443586239145 +428.9288313701134 +-163.1333152645446 +72.61172222879442 +0 +120 +absolute + + + +0.01 +smooth + +8.536772968794189 +47.350443903968895 +428.9288615815428 +-163.2161896299752 +72.62056378960091 +0 +120 +absolute + + + +0.01 +smooth + +8.536771990099636 +47.350444220522284 +428.9288915523147 +-163.29906068688695 +72.62937904779477 +0 +120 +absolute + + + +0.01 +smooth + +8.536771009736963 +47.35044453644965 +428.928921468262 +-163.3818577311431 +72.6381905082923 +0 +120 +absolute + + + +0.01 +smooth + +8.53677002771567 +47.35044485173767 +428.92895132657054 +-163.46458230377408 +72.6469976533587 +0 +120 +absolute + + + +0.01 +smooth + +8.536769044056673 +47.35044516636046 +428.92898112022533 +-163.5472375564675 +72.6557994529903 +0 +120 +absolute + + + +0.01 +smooth + +8.536768058780869 +47.35044548029212 +428.92901084221074 +-163.62982664091058 +72.66459487718335 +0 +120 +absolute + + + +0.01 +smooth + +8.536767071909166 +47.350445793506815 +428.929040485512 +-163.7123527087909 +72.67338289593422 +0 +120 +absolute + + + +0.01 +smooth + +8.536766083462481 +47.35044610597866 +428.92907004311394 +-163.79481891179591 +72.68216247923922 +0 +120 +absolute + + + +0.01 +smooth + +8.536765093461712 +47.3504464176818 +428.92909950800123 +-163.87722840161297 +72.69093259709469 +0 +120 +absolute + + + +0.01 +smooth + +8.536764101927771 +47.35044672859037 +428.9291288731588 +-163.9595843299296 +72.69969221949691 +0 +120 +absolute + + + +0.01 +smooth + +8.536763108881566 +47.350447038678496 +428.92915813157134 +-164.04188984843327 +72.7084403164422 +0 +120 +absolute + + + +0.01 +smooth + +8.536762114344002 +47.350447347920316 +428.92918727622384 +-164.1241481088113 +72.71717585792686 +0 +120 +absolute + + + +0.01 +smooth + +8.536761118335995 +47.35044765628996 +428.92921630010125 +-164.20636226275144 +72.7258978139473 +0 +120 +absolute + + + +0.01 +smooth + +8.53676012087844 +47.35044796376156 +428.92924519618805 +-164.28853546194074 +72.73460515449973 +0 +120 +absolute + + + +0.01 +smooth + +8.536759121992253 +47.35044827030925 +428.9292739574692 +-164.37067085806683 +72.74329684958049 +0 +120 +absolute + + + +0.01 +smooth + +8.536758121698341 +47.35044857590716 +428.92930257692973 +-164.45277160281725 +72.75197186918594 +0 +120 +absolute + + + +0.01 +smooth + +8.536757120017608 +47.350448880529434 +428.92933104755423 +-164.53484084787934 +72.76062918331236 +0 +120 +absolute + + + +0.01 +smooth + +8.536756116970965 +47.35044918415021 +428.9293593623277 +-164.61688174494057 +72.76926776195606 +0 +120 +absolute + + + +0.01 +smooth + +8.536755112579318 +47.350449486743585 +428.92938751423486 +-164.69889744568835 +72.7778865751134 +0 +120 +absolute + + + +0.01 +smooth + +8.536754106863574 +47.35044978828372 +428.9294154962605 +-164.78089110181017 +72.78648459278065 +0 +120 +absolute + + + +0.01 +smooth + +8.536753099844647 +47.350450088744765 +428.92944330138977 +-164.86286586499358 +72.79506078495422 +0 +120 +absolute + + + +0.01 +smooth + +8.536752091543436 +47.35045038810082 +428.92947092260715 +-164.94482488692577 +72.8036141216303 +0 +120 +absolute + + + +0.01 +smooth + +8.536751081980851 +47.35045068632603 +428.9294983528974 +-165.0267713192944 +72.81214357280525 +0 +120 +absolute + + + +0.01 +smooth + +8.536750071177803 +47.35045098339452 +428.9295255852457 +-165.10870831378685 +72.82064810847542 +0 +120 +absolute + + + +0.01 +smooth + +8.536749059155197 +47.35045127928044 +428.92955261263677 +-165.19063902209055 +72.82912669863713 +0 +120 +absolute + + + +0.01 +smooth + +8.536748045933942 +47.35045157395792 +428.92957942805526 +-165.27256659589304 +72.83757831328666 +0 +120 +absolute + + + +0.01 +smooth + +8.536747031534944 +47.350451867401084 +428.9296060244862 +-165.35449418688162 +72.84600192242034 +0 +120 +absolute + + + +0.01 +smooth + +8.536746015979112 +47.350452159584066 +428.9296323949144 +-165.43642494674384 +72.85439649603448 +0 +120 +absolute + + + +0.01 +smooth + +8.536744999287354 +47.35045245048101 +428.92965853232454 +-165.51836202716714 +72.86276100412543 +0 +120 +absolute + + + +0.01 +smooth + +8.536743981480576 +47.35045274006603 +428.9296844297015 +-165.60030857983892 +72.87109441668949 +0 +120 +absolute + + + +0.01 +smooth + +8.536742962579687 +47.35045302831328 +428.9297100800303 +-165.68226775644672 +72.87939570372295 +0 +120 +absolute + + + +0.01 +smooth + +8.536741942605596 +47.35045331519687 +428.9297354762956 +-165.7642427086779 +72.88766383522216 +0 +120 +absolute + + + +0.01 +smooth + +8.536740921579208 +47.35045360069097 +428.92976061148227 +-165.84623658821988 +72.89589778118344 +0 +120 +absolute + + + +0.01 +smooth + +8.536739899521429 +47.35045388476968 +428.9297854785751 +-165.92825254676023 +72.90409651160307 +0 +120 +absolute + + + +0.01 +smooth + +8.536738876453173 +47.350454167407136 +428.9298100705589 +-166.0102937359863 +72.91225899647739 +0 +120 +absolute + + + +0.01 +smooth + +8.536737852395344 +47.35045444857748 +428.9298343804187 +-166.09236330758557 +72.92038420580275 +0 +120 +absolute + + + +0.01 +smooth + +8.536736827368848 +47.350454728254846 +428.92985840113914 +-166.17446441324552 +72.92847110957541 +0 +120 +absolute + + + +0.01 +smooth + +8.536735801394594 +47.35045500641336 +428.92988212570503 +-166.2566002046535 +72.93651867779171 +0 +120 +absolute + + + +0.01 +smooth + +8.53673477449349 +47.35045528302716 +428.9299055471014 +-166.33877383349704 +72.94452588044797 +0 +120 +absolute + + + +0.01 +smooth + +8.536733746686446 +47.35045555807038 +428.9299286583129 +-166.4209884514636 +72.95249168754053 +0 +120 +absolute + + + +0.01 +smooth + +8.536732717994365 +47.35045583151715 +428.9299514523244 +-166.50324721024057 +72.96041506906568 +0 +120 +absolute + + + +0.01 +smooth + +8.536731688438158 +47.350456103341614 +428.9299739221208 +-166.58555326151543 +72.96829499501972 +0 +120 +absolute + + + +0.01 +smooth + +8.536730658038731 +47.350456373517886 +428.92999606068685 +-166.66790975697563 +72.976130435399 +0 +120 +absolute + + + +0.01 +smooth + +8.536729626816994 +47.350456642020106 +428.9300178610074 +-166.75031984830855 +72.98392036019982 +0 +120 +absolute + + + +0.01 +smooth + +8.536728594793852 +47.35045690882242 +428.93003931606734 +-166.83278668720178 +72.99166373941851 +0 +120 +absolute + + + +0.01 +smooth + +8.536727561990213 +47.350457173898945 +428.9300604188513 +-166.91531342534265 +72.99935954305138 +0 +120 +absolute + + + +0.01 +smooth + +8.536726528426987 +47.350457437223824 +428.93008116234444 +-166.99790321441867 +73.00700674109476 +0 +120 +absolute + + + +0.01 +smooth + +8.53672549412508 +47.35045769877118 +428.9301015395314 +-167.0805592061172 +73.01460430354493 +0 +120 +absolute + + + +0.01 +smooth + +8.536724459092078 +47.35045795853993 +428.9301215499522 +-167.16328301661562 +73.02215195059952 +0 +120 +absolute + + + +0.01 +smooth + +8.536723422908501 +47.350458217319684 +428.93014140291154 +-167.24602677618788 +73.02967343297681 +0 +120 +absolute + + + +0.01 +smooth + +8.536722385379319 +47.35045847547381 +428.9301611962507 +-167.32876776714704 +73.0371798135232 +0 +120 +absolute + + + +0.01 +smooth + +8.536721346522311 +47.35045873296846 +428.9301809229218 +-167.4115076845997 +73.04467016256669 +0 +120 +absolute + + + +0.01 +smooth + +8.53672030635527 +47.35045898976989 +428.9302005758769 +-167.49424822365245 +73.05214355043526 +0 +120 +absolute + + + +0.01 +smooth + +8.536719264895975 +47.35045924584421 +428.93022014806786 +-167.57699107941173 +73.05959904745681 +0 +120 +absolute + + + +0.01 +smooth + +8.536718222162206 +47.35045950115765 +428.9302396324468 +-167.6597379469841 +73.06703572395935 +0 +120 +absolute + + + +0.01 +smooth + +8.536717178171754 +47.35045975567637 +428.93025902196575 +-167.74249052147607 +73.07445265027081 +0 +120 +absolute + + + +0.01 +smooth + +8.536716132942406 +47.35046000936657 +428.93027830957675 +-167.82525049799423 +73.08184889671918 +0 +120 +absolute + + + +0.01 +smooth + +8.536715086491943 +47.35046026219444 +428.930297488232 +-167.90801957164518 +73.0892235336324 +0 +120 +absolute + + + +0.01 +smooth + +8.53671403883815 +47.350460514126134 +428.93031655088316 +-167.9907994375353 +73.09657563133845 +0 +120 +absolute + + + +0.01 +smooth + +8.536712989998811 +47.350460765127885 +428.93033549048266 +-168.07359179077125 +73.10390426016528 +0 +120 +absolute + + + +0.01 +smooth + +8.53671193999172 +47.35046101516587 +428.9303542999823 +-168.1563983264596 +73.11120849044086 +0 +120 +absolute + + + +0.01 +smooth + +8.536710888834651 +47.35046126420624 +428.93037297233417 +-168.23922073970675 +73.11848739249311 +0 +120 +absolute + + + +0.01 +smooth + +8.536709836545388 +47.35046151221518 +428.9303915004901 +-168.32206072561925 +73.12574003665003 +0 +120 +absolute + + + +0.01 +smooth + +8.536708783141727 +47.35046175915894 +428.93040987740255 +-168.40491997930383 +73.13296549323958 +0 +120 +absolute + + + +0.01 +smooth + +8.536707728641444 +47.350462005003635 +428.9304280960233 +-168.48780019586684 +73.14016283258972 +0 +120 +absolute + + + +0.01 +smooth + +8.536706673062326 +47.3504622497155 +428.93044614930443 +-168.57070307041485 +73.1473311250284 +0 +120 +absolute + + + +0.01 +smooth + +8.536705616422157 +47.350462493260686 +428.93046403019787 +-168.65363029805442 +73.15446944088356 +0 +120 +absolute + + + +0.01 +smooth + +8.536704558738725 +47.3504627356054 +428.93048173165573 +-168.73658357389212 +73.16157685048321 +0 +120 +absolute + + + +0.01 +smooth + +8.536703500029816 +47.35046297671582 +428.93049924663023 +-168.81956459303456 +73.16865242415534 +0 +120 +absolute + + + +0.01 +smooth + +8.53670244031321 +47.350463216558126 +428.93051656807313 +-168.9025750505881 +73.1756952322278 +0 +120 +absolute + + + +0.01 +smooth + +8.53670137960669 +47.35046345509849 +428.9305336889363 +-168.9856166416593 +73.1827043450286 +0 +120 +absolute + + + +0.01 +smooth + +8.53670031792805 +47.35046369230315 +428.9305506021723 +-169.06869106135485 +73.18967883288573 +0 +120 +absolute + + + +0.01 +smooth + +8.53669925529507 +47.35046392813825 +428.93056730073283 +-169.15180000478114 +73.19661776612712 +0 +120 +absolute + + + +0.01 +smooth + +8.536698191725531 +47.35046416256998 +428.93058377757 +-169.23494516704483 +73.20352021508076 +0 +120 +absolute + + + +0.01 +smooth + +8.536697127237224 +47.35046439556452 +428.9306000256358 +-169.31812824325235 +73.2103852500746 +0 +120 +absolute + + + +0.01 +smooth + +8.53669606184793 +47.35046462708809 +428.93061603788226 +-169.40135092851025 +73.21721194143657 +0 +120 +absolute + + + +0.01 +smooth + +8.536694995575436 +47.35046485710683 +428.9306318072615 +-169.48461491792517 +73.22399935949467 +0 +120 +absolute + + + +0.01 +smooth + +8.536693928437527 +47.35046508558695 +428.9306473267254 +-169.56792190660354 +73.23074657457684 +0 +120 +absolute + + + +0.01 +smooth + +8.53669286045199 +47.35046531249464 +428.93066258922613 +-169.65127358965196 +73.23745265701106 +0 +120 +absolute + + + +0.01 +smooth + +8.536691791636603 +47.350465537796076 +428.9306775877157 +-169.73467166217694 +73.24411667712528 +0 +120 +absolute + + + +0.01 +smooth + +8.536690722009157 +47.35046576145744 +428.9306923151462 +-169.81811781928502 +73.25073770524745 +0 +120 +absolute + + + +0.01 +smooth + +8.536689651587436 +47.350465983444934 +428.9307067644695 +-169.90161375608278 +73.25731481170553 +0 +120 +absolute + + + +0.01 +smooth + +8.536688580389223 +47.35046620372473 +428.9307209286377 +-169.9851611676767 +73.26384706682751 +0 +120 +absolute + + + +0.01 +smooth + +8.536687508432305 +47.35046642226301 +428.93073480060286 +-170.06876174917335 +73.27033354094132 +0 +120 +absolute + + + +0.01 +smooth + +8.536686435734465 +47.35046663902598 +428.930748373317 +-170.15241719567922 +73.27677330437496 +0 +120 +absolute + + + +0.01 +smooth + +8.536685362313488 +47.350466853979796 +428.93076163973217 +-170.23612920230093 +73.28316542745632 +0 +120 +absolute + + + +0.01 +smooth + +8.53668428818716 +47.350467067090676 +428.9307745928004 +-170.31989946414498 +73.28950898051343 +0 +120 +absolute + + + +0.01 +smooth + +8.536683213373266 +47.350467278324786 +428.93078722547375 +-170.4037296763179 +73.29580303387424 +0 +120 +absolute + + + +0.01 +smooth + +8.536682137889592 +47.3504674876483 +428.9307995307041 +-170.48762153392624 +73.30204665786668 +0 +120 +absolute + + + +0.01 +smooth + +8.53668106175392 +47.35046769502744 +428.9308115014437 +-170.57157673207655 +73.30823892281873 +0 +120 +absolute + + + +0.01 +smooth + +8.536679984984037 +47.35046790042837 +428.9308231306444 +-170.65559696587533 +73.31437889905835 +0 +120 +absolute + + + +0.01 +smooth + +8.536678907597727 +47.35046810381726 +428.9308344112584 +-170.73968393042915 +73.32046565691351 +0 +120 +absolute + + + +0.01 +smooth + +8.536677829612776 +47.350468305160334 +428.9308453362376 +-170.82383932084457 +73.32649826671215 +0 +120 +absolute + + + +0.01 +smooth + +8.536676751046967 +47.350468504423745 +428.9308558985341 +-170.90806483222804 +73.33247579878224 +0 +120 +absolute + + + +0.01 +smooth + +8.536675671918086 +47.35046870157369 +428.9308660911 +-170.99236215968622 +73.33839732345176 +0 +120 +absolute + + + +0.01 +smooth + +8.53667459224392 +47.35046889657636 +428.93087590688714 +-171.07673299832555 +73.34426191104863 +0 +120 +absolute + + + +0.01 +smooth + +8.536673511951657 +47.350469089681276 +428.93088540908235 +-171.16117455251327 +73.35007485759091 +0 +120 +absolute + + + +0.01 +smooth + +8.536672430637626 +47.35046928216493 +428.93089491537256 +-171.24566702627135 +73.35586419997483 +0 +120 +absolute + + + +0.01 +smooth + +8.53667134826479 +47.35046947414629 +428.9309044564495 +-171.33020797807663 +73.36163278404598 +0 +120 +absolute + + + +0.01 +smooth + +8.53667026484902 +47.35046966557821 +428.9309140218255 +-171.414797543676 +73.36737981937948 +0 +120 +absolute + + + +0.01 +smooth + +8.536669180406202 +47.35046985641357 +428.9309236010135 +-171.49943585881667 +73.37310451555048 +0 +120 +absolute + + + +0.01 +smooth + +8.536668094952196 +47.3504700466052 +428.93093318352544 +-171.58412305924554 +73.37880608213406 +0 +120 +absolute + + + +0.01 +smooth + +8.536667008502898 +47.35047023610597 +428.9309427588743 +-171.66885928070974 +73.38448372870536 +0 +120 +absolute + + + +0.01 +smooth + +8.536665921074166 +47.350470424868746 +428.93095231657236 +-171.75364465895626 +73.39013666483945 +0 +120 +absolute + + + +0.01 +smooth + +8.536664832681888 +47.35047061284639 +428.9309618461321 +-171.8384793297322 +73.39576410011148 +0 +120 +absolute + + + +0.01 +smooth + +8.53666374334194 +47.350470799991754 +428.9309713370663 +-171.9233634287846 +73.40136524409657 +0 +120 +absolute + + + +0.01 +smooth + +8.536662653070193 +47.35047098625768 +428.93098077888726 +-172.00829709186047 +73.40693930636981 +0 +120 +absolute + + + +0.01 +smooth + +8.536661561882529 +47.35047117159708 +428.9309901611076 +-172.09328045470696 +73.41248549650636 +0 +120 +absolute + + + +0.01 +smooth + +8.536660469794823 +47.35047135596278 +428.9309994732399 +-172.178313653071 +73.4180030240813 +0 +120 +absolute + + + +0.01 +smooth + +8.536659376822948 +47.35047153930763 +428.9310087047967 +-172.2633968226997 +73.42349109866973 +0 +120 +absolute + + + +0.01 +smooth + +8.536658282982781 +47.35047172158448 +428.9310178452901 +-172.34853009934005 +73.42894892984677 +0 +120 +absolute + + + +0.01 +smooth + +8.536657188290206 +47.350471902746236 +428.9310268842332 +-172.4337136187391 +73.43437572718754 +0 +120 +absolute + + + +0.01 +smooth + +8.53665609276109 +47.35047208274572 +428.93103581113803 +-172.51894751664395 +73.4397707002672 +0 +120 +absolute + + + +0.01 +smooth + +8.536654996411315 +47.350472261535806 +428.9310446155175 +-172.60423192880165 +73.4451330586608 +0 +120 +absolute + + + +0.01 +smooth + +8.536653899256754 +47.35047243906934 +428.9310532868839 +-172.68956699095915 +73.4504620119435 +0 +120 +absolute + + + +0.01 +smooth + +8.53665280131329 +47.35047261529922 +428.93106181475 +-172.7749528388637 +73.4557567696904 +0 +120 +absolute + + + +0.01 +smooth + +8.53665170259679 +47.35047279017826 +428.93107018862804 +-172.86038960826212 +73.46101654147657 +0 +120 +absolute + + + +0.01 +smooth + +8.536650603123137 +47.35047296365934 +428.9310783980307 +-172.94587743490158 +73.4662405368772 +0 +120 +absolute + + + +0.01 +smooth + +8.536649502908205 +47.3504731356953 +428.93108643247035 +-173.03141645452908 +73.47142796546733 +0 +120 +absolute + + + +0.01 +smooth + +8.53664840196787 +47.35047330623904 +428.9310942814597 +-173.1170068028917 +73.47657803682212 +0 +120 +absolute + + + +0.01 +smooth + +8.536647300318013 +47.35047347524338 +428.93110193451116 +-173.20264861573648 +73.48168996051668 +0 +120 +absolute + + + +0.01 +smooth + +8.536646197974505 +47.3504736426612 +428.9311093811373 +-173.28834202881046 +73.48676294612612 +0 +120 +absolute + + + +0.01 +smooth + +8.536645094953226 +47.350473808445365 +428.9311166108506 +-173.37408717786064 +73.49179620322556 +0 +120 +absolute + + + +0.01 +smooth + +8.536643991270049 +47.35047397254871 +428.9311236131636 +-173.45988419863417 +73.4967889413901 +0 +120 +absolute + + + +0.01 +smooth + +8.536642886940854 +47.35047413492412 +428.9311303775889 +-173.545733226878 +73.50174037019487 +0 +120 +absolute + + + +0.01 +smooth + +8.536641781981515 +47.350474295524435 +428.93113689363884 +-173.63163439833926 +73.50664969921498 +0 +120 +absolute + + + +0.01 +smooth + +8.536640676407911 +47.35047445430252 +428.9311431508261 +-173.71758784876494 +73.51151613802554 +0 +120 +absolute + + + +0.01 +smooth + +8.536639570235916 +47.35047461121125 +428.93114913866316 +-173.80359371390205 +73.51633889620166 +0 +120 +absolute + + + +0.01 +smooth + +8.536638463481408 +47.35047476620347 +428.9311548466625 +-173.88965212949776 +73.52111718331847 +0 +120 +absolute + + + +0.01 +smooth + +8.536637356160263 +47.350474919232035 +428.93116026433665 +-173.975763231299 +73.52585020895106 +0 +120 +absolute + + + +0.01 +smooth + +8.536636248288357 +47.350475070249814 +428.9311653811982 +-174.06192715505287 +73.53053718267458 +0 +120 +absolute + + + +0.01 +smooth + +8.536635139881565 +47.35047521920966 +428.9311701867596 +-174.1481440365064 +73.53517731406411 +0 +120 +absolute + + + +0.01 +smooth + +8.536634030955767 +47.350475366064444 +428.9311746705333 +-174.23441401140664 +73.53976981269479 +0 +120 +absolute + + + +0.01 +smooth + +8.536632921526838 +47.35047551076702 +428.93117882203205 +-174.32073721550069 +73.54431388814172 +0 +120 +absolute + + + +0.01 +smooth + +8.536631811610654 +47.350475653270244 +428.9311826307682 +-174.4071137845355 +73.54880874998 +0 +120 +absolute + + + +0.01 +smooth + +8.53663070122309 +47.35047579352698 +428.93118608625434 +-174.49354385425818 +73.55325360778477 +0 +120 +absolute + + + +0.01 +smooth + +8.536629590380027 +47.35047593149008 +428.9311891780029 +-174.58002756041574 +73.55764767113115 +0 +120 +absolute + + + +0.01 +smooth + +8.536628479097338 +47.3504760671124 +428.93119189552647 +-174.66656503875527 +73.56199014959424 +0 +120 +absolute + + + +0.01 +smooth + +8.5366273673909 +47.350476200346826 +428.9311942283376 +-174.7531564250238 +73.56628025274915 +0 +120 +absolute + + + +0.01 +smooth + +8.536626255276587 +47.35047633114618 +428.9311961659488 +-174.83980185496836 +73.57051719017099 +0 +120 +absolute + + + +0.01 +smooth + +8.53662514277028 +47.35047645946335 +428.9311976978725 +-174.92650146433598 +73.57470017143488 +0 +120 +absolute + + + +0.01 +smooth + +8.536624029887856 +47.350476585251194 +428.9311988136213 +-175.01325538887377 +73.57882840611596 +0 +120 +absolute + + + +0.01 +smooth + +8.536622916645186 +47.35047670846256 +428.9311995027077 +-175.10006376432872 +73.58290110378931 +0 +120 +absolute + + + +0.01 +smooth + +8.536621803058148 +47.35047682905031 +428.9311997546443 +-175.18692672644798 +73.58691747403005 +0 +120 +absolute + + + +0.01 +smooth + +8.536620688923657 +47.35047694824863 +428.9311997507602 +-175.27385293847004 +73.59089243620986 +0 +120 +absolute + + + +0.01 +smooth + +8.536619573974296 +47.350477067640014 +428.93119973474256 +-175.3608526499871 +73.59484566064016 +0 +120 +absolute + + + +0.01 +smooth + +8.536618458223785 +47.35047718714489 +428.9311997076283 +-175.4479246069128 +73.59877672942422 +0 +120 +absolute + + + +0.01 +smooth + +8.536617341686965 +47.35047730667712 +428.9311996694838 +-175.53506751059098 +73.6026851447299 +0 +120 +absolute + + + +0.01 +smooth + +8.536616224378674 +47.35047742615058 +428.93119962037514 +-175.622280062365 +73.60657040872515 +0 +120 +absolute + + + +0.01 +smooth + +8.536615106313747 +47.3504775454791 +428.9311995603682 +-175.70956096357855 +73.61043202357784 +0 +120 +absolute + + + +0.01 +smooth + +8.536613987507021 +47.35047766457656 +428.93119948952926 +-175.7969089155752 +73.61426949145591 +0 +120 +absolute + + + +0.01 +smooth + +8.536612867973336 +47.3504777833568 +428.93119940792457 +-175.88432261969845 +73.61808231452723 +0 +120 +absolute + + + +0.01 +smooth + +8.53661174772753 +47.3504779017337 +428.9311993156202 +-175.97180077729206 +73.62186999495978 +0 +120 +absolute + + + +0.01 +smooth + +8.536610626784444 +47.350478019621086 +428.93119921268215 +-176.05934208969947 +73.62563203492141 +0 +120 +absolute + + + +0.01 +smooth + +8.536609505158909 +47.35047813693284 +428.93119909917687 +-176.14694525826437 +73.62936793658008 +0 +120 +absolute + + + +0.01 +smooth + +8.536608382865769 +47.35047825358285 +428.9311989751705 +-176.23460898433044 +73.6330772021037 +0 +120 +absolute + + + +0.01 +smooth + +8.53660725991986 +47.35047836948492 +428.9311988407287 +-176.32233196924096 +73.63675933366014 +0 +120 +absolute + + + +0.01 +smooth + +8.536606136336015 +47.35047848455292 +428.9311986959181 +-176.4101129143398 +73.64041383341733 +0 +120 +absolute + + + +0.01 +smooth + +8.536605012129078 +47.35047859870074 +428.9311985408046 +-176.49795052097042 +73.64404020354321 +0 +120 +absolute + + + +0.01 +smooth + +8.536603887313886 +47.35047871184221 +428.9311983754544 +-176.5858434904765 +73.64763794620565 +0 +120 +absolute + + + +0.01 +smooth + +8.536602761905273 +47.350478823891194 +428.93119819993376 +-176.6737905242016 +73.6512065635726 +0 +120 +absolute + + + +0.01 +smooth + +8.536601635918082 +47.35047893476156 +428.93119801430873 +-176.7617903234892 +73.65474555781192 +0 +120 +absolute + + + +0.01 +smooth + +8.536600509367146 +47.35047904436715 +428.93119781864533 +-176.84984158968302 +73.65825443109159 +0 +120 +absolute + + + +0.01 +smooth + +8.53659938226731 +47.35047915262186 +428.93119761301006 +-176.93794302412672 +73.66173268557951 +0 +120 +absolute + + + +0.01 +smooth + +8.536598254633404 +47.350479259439496 +428.9311973974687 +-177.02609332816368 +73.66517982344354 +0 +120 +absolute + + + +0.01 +smooth + +8.536597126480267 +47.35047936473394 +428.9311971720874 +-177.11429120313753 +73.66859534685162 +0 +120 +absolute + + + +0.01 +smooth + +8.53659599782274 +47.35047946841907 +428.93119693693245 +-177.20253535039205 +73.67197875797166 +0 +120 +absolute + + + +0.01 +smooth + +8.536594868675662 +47.35047957040873 +428.93119669207 +-177.29082447127067 +73.67532955897158 +0 +120 +absolute + + + +0.01 +smooth + +8.536593739053867 +47.35047967061676 +428.9311964375662 +-177.379157267117 +73.67864725201932 +0 +120 +absolute + + + +0.01 +smooth + +8.536592608972194 +47.35047976895704 +428.93119617348714 +-177.46753243927466 +73.68193133928274 +0 +120 +absolute + + + +0.01 +smooth + +8.536591478445484 +47.350479865343424 +428.93119589989897 +-177.5559486890872 +73.6851813229298 +0 +120 +absolute + + + +0.01 +smooth + +8.53659034748857 +47.35047995968977 +428.9311956168678 +-177.64440471789828 +73.68839670512835 +0 +120 +absolute + + + +0.01 +smooth + +8.536589216116292 +47.35048005190994 +428.93119532445985 +-177.73289922705143 +73.69157698804636 +0 +120 +absolute + + + +0.01 +smooth + +8.536588084343489 +47.35048014191779 +428.93119502274124 +-177.82143091789027 +73.6947216738517 +0 +120 +absolute + + + +0.01 +smooth + +8.536586952184996 +47.35048022962718 +428.93119471177795 +-177.9099984917584 +73.69783026471232 +0 +120 +absolute + + + +0.01 +smooth + +8.536585819655652 +47.35048031495196 +428.9311943916364 +-177.99860064999936 +73.70090226279613 +0 +120 +absolute + + + +0.01 +smooth + +8.536584686770299 +47.350480397805995 +428.9311940623825 +-178.08723609395676 +73.703937170271 +0 +120 +absolute + + + +0.01 +smooth + +8.53658355354377 +47.35048047810315 +428.9311937240825 +-178.17590352497422 +73.7069344893049 +0 +120 +absolute + + + +0.01 +smooth + +8.536582419990904 +47.35048055575727 +428.9311933768026 +-178.26460164439533 +73.70989372206569 +0 +120 +absolute + + + +0.01 +smooth + +8.536581286126538 +47.350480630682235 +428.9311930206089 +-178.35332915356366 +73.71281437072132 +0 +120 +absolute + + + +0.01 +smooth + +8.536580151965511 +47.350480702791884 +428.93119265556743 +-178.44208475382277 +73.71569593743966 +0 +120 +absolute + + + +0.01 +smooth + +8.536579017522662 +47.35048077200007 +428.93119228174453 +-178.53086714651636 +73.71853792438867 +0 +120 +absolute + + + +0.01 +smooth + +8.536577882812828 +47.350480838220676 +428.9311918992061 +-178.61967503298786 +73.72133983373625 +0 +120 +absolute + + + +0.01 +smooth + +8.536576747850846 +47.35048090136755 +428.9311915080185 +-178.70850711458098 +73.72410116765029 +0 +120 +absolute + + + +0.01 +smooth + +8.536575612651554 +47.350480961354535 +428.93119110824773 +-178.7973620926393 +73.7268214282987 +0 +120 +absolute + + + +0.01 +smooth + +8.536574477229792 +47.350481018095515 +428.9311906999601 +-178.8862386685064 +73.72950011784944 +0 +120 +absolute + + + +0.01 +smooth + +8.536573341600395 +47.35048107150433 +428.93119028322155 +-178.97513554352582 +73.73213673847039 +0 +120 +absolute + + + +0.01 +smooth + +8.5365722057782 +47.35048112149485 +428.9311898580984 +-179.0640514190412 +73.73473079232943 +0 +120 +absolute + + + +0.01 +smooth + +8.536571069778047 +47.35048116798092 +428.9311894246566 +-179.1529849963961 +73.73728178159452 +0 +120 +absolute + + + +0.01 +smooth + +8.536569933614778 +47.35048121087641 +428.9311889829625 +-179.2419349769342 +73.73978920843356 +0 +120 +absolute + + + +0.01 +smooth + +8.536568797303222 +47.350481250095186 +428.93118853308215 +-179.330900061999 +73.74225257501445 +0 +120 +absolute + + + +0.01 +smooth + +8.536567660837093 +47.35048128571315 +428.93118806176733 +-179.41988169007502 +73.74467234436737 +0 +120 +absolute + + + +0.01 +smooth + +8.536566523897722 +47.35048132021936 +428.9311873614278 +-179.50892140979153 +73.74706335900846 +0 +120 +absolute + + + +0.01 +smooth + +8.536565386384492 +47.350481354469814 +428.931186367512 +-179.59803172036854 +73.74943093958181 +0 +120 +absolute + + + +0.01 +smooth + +8.536564248311791 +47.35048138844354 +428.9311850886575 +-179.68721012060666 +73.75177522758185 +0 +120 +absolute + + + +0.01 +smooth + +8.53656310969401 +47.350481422119536 +428.9311835335019 +-179.77645410930637 +73.75409636450316 +0 +120 +absolute + + + +0.01 +smooth + +8.536561970545527 +47.350481455476796 +428.9311817106823 +-179.865761185268 +73.7563944918402 +0 +120 +absolute + + + +0.01 +smooth + +8.536560830880736 +47.35048148849432 +428.9311796288365 +-179.9551288472922 +73.7586697510875 +0 +120 +absolute + + + +0.01 +smooth + +8.536559690714023 +47.350481521151146 +428.93117729660213 +-180.0445545941794 +73.76092228373959 +0 +120 +absolute + + + +0.01 +smooth + +8.536558550059777 +47.350481553426256 +428.93117472261645 +-180.13403592473 +73.76315223129099 +0 +120 +absolute + + + +0.01 +smooth + +8.53655740893238 +47.350481585298695 +428.93117191551704 +-180.22357033774472 +73.76535973523617 +0 +120 +absolute + + + +0.01 +smooth + +8.536556267346226 +47.350481616747416 +428.93116888394167 +-180.31315533202383 +73.76754493706966 +0 +120 +absolute + + + +0.01 +smooth + +8.536555125315697 +47.35048164775149 +428.9311656365275 +-180.40278840636785 +73.769707978286 +0 +120 +absolute + + + +0.01 +smooth + +8.536553982855185 +47.350481678289896 +428.9311621819124 +-180.49246705957742 +73.77184900037972 +0 +120 +absolute + + + +0.01 +smooth + +8.536552839979073 +47.35048170834163 +428.9311585287335 +-180.5821887904529 +73.77396814484526 +0 +120 +absolute + + + +0.01 +smooth + +8.536551696701748 +47.35048173788571 +428.93115468562837 +-180.67195109779473 +73.77606555317715 +0 +120 +absolute + + + +0.01 +smooth + +8.536550553037603 +47.350481766901154 +428.9311506612349 +-180.76175148040352 +73.77814136686995 +0 +120 +absolute + + + +0.01 +smooth + +8.53654940900102 +47.35048179536697 +428.9311464641903 +-180.85158743707976 +73.78019572741815 +0 +120 +absolute + + + +0.01 +smooth + +8.536548264606385 +47.35048182326216 +428.9311421031321 +-180.9414564666239 +73.78222877631626 +0 +120 +absolute + + + +0.01 +smooth + +8.536547119868091 +47.350481850565714 +428.9311375866978 +-181.03135606783636 +73.78424065505875 +0 +120 +absolute + + + +0.01 +smooth + +8.536545974800521 +47.350481877256684 +428.9311329235251 +-181.12128373951774 +73.78623150514022 +0 +120 +absolute + + + +0.01 +smooth + +8.536544829418066 +47.35048190331406 +428.9311281222515 +-181.21123698046853 +73.78820146805514 +0 +120 +absolute + + + +0.01 +smooth + +8.53654368373511 +47.35048192871683 +428.9311231915143 +-181.3012132894891 +73.790150685298 +0 +120 +absolute + + + +0.01 +smooth + +8.536542537766035 +47.35048195344402 +428.93111813995097 +-181.39121016538002 +73.79207929836332 +0 +120 +absolute + + + +0.01 +smooth + +8.536541391525242 +47.35048197747465 +428.93111297619936 +-181.4812251069418 +73.79398744874565 +0 +120 +absolute + + + +0.01 +smooth + +8.536540245027107 +47.3504820007877 +428.9311077088968 +-181.57125561297482 +73.79587527793947 +0 +120 +absolute + + + +0.01 +smooth + +8.536539098286022 +47.350482023362204 +428.9311023466807 +-181.66129918227975 +73.7977429274393 +0 +120 +absolute + + + +0.01 +smooth + +8.536537951316372 +47.35048204517715 +428.9310968981888 +-181.75135331365698 +73.79959053873965 +0 +120 +absolute + + + +0.01 +smooth + +8.536536804132545 +47.350482066211576 +428.93109137205846 +-181.84141550590698 +73.80141825333504 +0 +120 +absolute + + + +0.01 +smooth + +8.536535656748931 +47.35048208644445 +428.93108577692726 +-181.93148325783028 +73.80322621271999 +0 +120 +absolute + + + +0.01 +smooth + +8.536534509179914 +47.350482105854816 +428.9310801214327 +-182.0215540682273 +73.80501455838899 +0 +120 +absolute + + + +0.01 +smooth + +8.536533361439881 +47.35048212442167 +428.9310744142122 +-182.1116254358986 +73.80678343183656 +0 +120 +absolute + + + +0.01 +smooth + +8.536532213543222 +47.350482142124015 +428.9310686639034 +-182.20169485964468 +73.80853297455722 +0 +120 +absolute + + + +0.01 +smooth + +8.536531065504322 +47.35048215894087 +428.93106287914395 +-182.29175983826596 +73.8102633280455 +0 +120 +absolute + + + +0.01 +smooth + +8.536529917337567 +47.35048217485124 +428.9310570685709 +-182.381817870563 +73.81197463379587 +0 +120 +absolute + + + +0.01 +smooth + +8.53652876905735 +47.35048218983413 +428.9310512408223 +-182.47186645533623 +73.81366703330288 +0 +120 +absolute + + + +0.01 +smooth + +8.536527620678052 +47.35048220386855 +428.9310454045353 +-182.56190309138614 +73.81534066806103 +0 +120 +absolute + + + +0.01 +smooth + +8.536526472214064 +47.35048221693351 +428.9310395683476 +-182.65192527751333 +73.81699567956483 +0 +120 +absolute + + + +0.01 +smooth + +8.53652532367977 +47.35048222900802 +428.9310337408966 +-182.74193051251814 +73.81863220930879 +0 +120 +absolute + + + +0.01 +smooth + +8.536524175089564 +47.35048224007108 +428.93102793081994 +-182.83191629520115 +73.82025039878742 +0 +120 +absolute + + + +0.01 +smooth + +8.536523026457825 +47.35048225010171 +428.931022146755 +-182.92188012436281 +73.82185038949525 +0 +120 +absolute + + + +0.01 +smooth + +8.536521877798943 +47.350482259078916 +428.9310163973395 +-183.01181949880362 +73.82343232292679 +0 +120 +absolute + + + +0.01 +smooth + +8.536520729127307 +47.3504822669817 +428.93101069121076 +-183.10173191732414 +73.82499634057655 +0 +120 +absolute + + + +0.01 +smooth + +8.536519580457306 +47.35048227378908 +428.93100503700623 +-183.19161487872475 +73.82654258393902 +0 +120 +absolute + + + +0.01 +smooth + +8.536518431803323 +47.35048227948006 +428.9309994433636 +-183.28146588180599 +73.82807119450874 +0 +120 +absolute + + + +0.01 +smooth + +8.536517283179746 +47.350482284033646 +428.9309939189204 +-183.37128242536835 +73.82958231378021 +0 +120 +absolute + + + +0.01 +smooth + +8.536516134600966 +47.35048228742885 +428.9309884723141 +-183.46106200821225 +73.83107608324796 +0 +120 +absolute + + + +0.01 +smooth + +8.536514986081364 +47.350482289644674 +428.93098311218216 +-183.55080212913833 +73.83255264440648 +0 +120 +absolute + + + +0.01 +smooth + +8.536513837635331 +47.350482290660146 +428.93097784716207 +-183.6405002869469 +73.8340121387503 +0 +120 +absolute + + + +0.01 +smooth + +8.536512689175424 +47.35048229003814 +428.93097264256465 +-183.73017495645104 +73.83545262876754 +0 +120 +absolute + + + +0.01 +smooth + +8.536511540385082 +47.3504822864494 +428.93096736351765 +-183.81989136643583 +73.83686786161479 +0 +120 +absolute + + + +0.01 +smooth + +8.536510391253273 +47.35048227986248 +428.9309620021077 +-183.90965132254658 +73.83825822739212 +0 +120 +absolute + + + +0.01 +smooth + +8.536509241794429 +47.35048227035179 +428.93095656114576 +-183.9994513687437 +73.83962465044858 +0 +120 +absolute + + + +0.01 +smooth + +8.53650809202297 +47.350482257991644 +428.9309510434423 +-184.08928804898713 +73.8409680551332 +0 +120 +absolute + + + +0.01 +smooth + +8.536506941953322 +47.350482242856394 +428.93094545180776 +-184.17915790723703 +73.84228936579498 +0 +120 +absolute + + + +0.01 +smooth + +8.536505791599915 +47.350482225020414 +428.93093978905284 +-184.2690574874535 +73.84358950678293 +0 +120 +absolute + + + +0.01 +smooth + +8.536504640977173 +47.35048220455804 +428.93093405798805 +-184.35898333359663 +73.84486940244612 +0 +120 +absolute + + + +0.01 +smooth + +8.536503490099522 +47.35048218154366 +428.9309282614244 +-184.44893198962666 +73.84612997713356 +0 +120 +absolute + + + +0.01 +smooth + +8.53650233898139 +47.35048215605161 +428.9309224021719 +-184.53889999950368 +73.84737215519426 +0 +120 +absolute + + + +0.01 +smooth + +8.5365011876372 +47.35048212815625 +428.93091648304176 +-184.62888390718774 +73.84859686097724 +0 +120 +absolute + + + +0.01 +smooth + +8.536500036081378 +47.35048209793193 +428.93091050684416 +-184.71888025663904 +73.84980501883153 +0 +120 +absolute + + + +0.01 +smooth + +8.536498884328358 +47.35048206545302 +428.93090447638997 +-184.80888559181764 +73.8509975531062 +0 +120 +absolute + + + +0.01 +smooth + +8.536497732392556 +47.350482030793884 +428.9308983944896 +-184.89889645668373 +73.8521753881502 +0 +120 +absolute + + + +0.01 +smooth + +8.5364965802884 +47.350481994028826 +428.9308922639535 +-184.98890939519728 +73.85333944831257 +0 +120 +absolute + + + +0.01 +smooth + +8.536495428030323 +47.35048195523227 +428.93088608759285 +-185.07892095131865 +73.85449065794236 +0 +120 +absolute + + + +0.01 +smooth + +8.536494275632743 +47.35048191447854 +428.93087986821786 +-185.1689276690078 +73.8556299413886 +0 +120 +absolute + + + +0.01 +smooth + +8.536493123110091 +47.350481871841986 +428.93087360863916 +-185.25892609222495 +73.85675822300031 +0 +120 +absolute + + + +0.01 +smooth + +8.53649197047679 +47.35048182739698 +428.9308673116673 +-185.3489127649301 +73.85787642712647 +0 +120 +absolute + + + +0.01 +smooth + +8.536490817747275 +47.35048178121789 +428.93086098011327 +-185.43888423108356 +73.85898547811617 +0 +120 +absolute + + + +0.01 +smooth + +8.536489664935957 +47.35048173337903 +428.9308546167872 +-185.52883703464528 +73.86008630031837 +0 +120 +absolute + + + +0.01 +smooth + +8.536488512057273 +47.35048168395479 +428.93084822450004 +-185.61876771957537 +73.86117981808215 +0 +120 +absolute + + + +0.01 +smooth + +8.536487359125642 +47.350481633019506 +428.93084180606195 +-185.70867282983403 +73.86226695575647 +0 +120 +absolute + + + +0.01 +smooth + +8.5364862061555 +47.350481580647575 +428.9308353642841 +-185.79854890938145 +73.86334863769042 +0 +120 +absolute + + + +0.01 +smooth + +8.536485053161266 +47.35048152691331 +428.93082890197684 +-185.88839250217765 +73.864425788233 +0 +120 +absolute + + + +0.01 +smooth + +8.536483900157368 +47.35048147189109 +428.9308224219507 +-185.9782001521828 +73.86549933173323 +0 +120 +absolute + + + +0.01 +smooth + +8.53648274715823 +47.35048141565526 +428.93081592701645 +-186.067968403357 +73.86657019254012 +0 +120 +absolute + + + +0.01 +smooth + +8.53648159417828 +47.35048135828018 +428.93080941998454 +-186.15769379966042 +73.86763929500272 +0 +120 +absolute + + + +0.01 +smooth + +8.536480441231944 +47.35048129984022 +428.9308029036657 +-186.24737288505312 +73.86870756347005 +0 +120 +absolute + + + +0.01 +smooth + +8.536479288333648 +47.350481240409714 +428.93079638087056 +-186.33700220349525 +73.86977592229111 +0 +120 +absolute + + + +0.01 +smooth + +8.53647813549782 +47.350481180063035 +428.9307898544096 +-186.42657829894694 +73.87084529581496 +0 +120 +absolute + + + +0.01 +smooth + +8.536476982738884 +47.35048111887453 +428.9307833270934 +-186.51609771536826 +73.87191660839059 +0 +120 +absolute + + + +0.01 +smooth + +8.536475830071266 +47.35048105691856 +428.93077680173286 +-186.6055569967194 +73.87299078436705 +0 +120 +absolute + + + +0.01 +smooth + +8.536474677509391 +47.350480994269475 +428.9307702811384 +-186.6949526869605 +73.87406874809332 +0 +120 +absolute + + + +0.01 +smooth + +8.536473525067688 +47.35048093100164 +428.9307637681204 +-186.7842813300516 +73.87515142391848 +0 +120 +absolute + + + +0.01 +smooth + +8.536472372760583 +47.35048086718942 +428.9307572654899 +-186.87353946995293 +73.87623973619155 +0 +120 +absolute + + + +0.01 +smooth + +8.5364712206025 +47.35048080290715 +428.93075077605715 +-186.96272365062453 +73.87733460926151 +0 +120 +absolute + + + +0.01 +smooth + +8.536470068607866 +47.35048073822921 +428.93074430263306 +-187.05183041602646 +73.87843696747741 +0 +120 +absolute + + + +0.01 +smooth + +8.536468916791108 +47.35048067322993 +428.930737848028 +-187.14085631011906 +73.87954773518828 +0 +120 +absolute + + + +0.01 +smooth + +8.53646776516665 +47.350480607983684 +428.93073141505266 +-187.22979787686228 +73.88066783674313 +0 +120 +absolute + + + +0.01 +smooth + +8.536466613748921 +47.350480542564824 +428.93072500651766 +-187.31865166021626 +73.88179819649099 +0 +120 +absolute + + + +0.01 +smooth + +8.536465462552343 +47.35048047704771 +428.93071862523357 +-187.40741420414116 +73.88293973878089 +0 +120 +absolute + + + +0.01 +smooth + +8.536464311591349 +47.35048041150671 +428.9307122740111 +-187.4960820525971 +73.88409338796185 +0 +120 +absolute + + + +0.01 +smooth + +8.536463160880357 +47.35048034601615 +428.9307059556608 +-187.58465174954424 +73.88526006838289 +0 +120 +absolute + + + +0.01 +smooth + +8.5364620104338 +47.3504802806504 +428.9306996729932 +-187.67311983894257 +73.88644070439305 +0 +120 +absolute + + + +0.01 +smooth + +8.536460860266098 +47.35048021548383 +428.9306934288191 +-187.76148286475234 +73.8876362203413 +0 +120 +absolute + + + +0.01 +smooth + +8.536459710391684 +47.35048015059078 +428.9306872259489 +-187.8497373709337 +73.88884754057675 +0 +120 +absolute + + + +0.01 +smooth + +8.536458560824716 +47.35048008604393 +428.9306810671539 +-187.93787997003616 +73.89007557388275 +0 +120 +absolute + + + +0.01 +smooth + +8.53645741133101 +47.350480020285154 +428.93067491738236 +-188.0259727824672 +73.8913063220152 +0 +120 +absolute + + + +0.01 +smooth + +8.536456261707123 +47.35047995194362 +428.93066874540244 +-188.1140694081419 +73.89252756767638 +0 +120 +absolute + + + +0.01 +smooth + +8.536455111968033 +47.35047988107597 +428.9306625528563 +-188.20216564733596 +73.89374017483797 +0 +120 +absolute + + + +0.01 +smooth + +8.536453962128723 +47.350479807738886 +428.930656341386 +-188.29025730032527 +73.89494500747166 +0 +120 +absolute + + + +0.01 +smooth + +8.536452812204187 +47.35047973198903 +428.93065011263366 +-188.37834016738563 +73.8961429295492 +0 +120 +absolute + + + +0.01 +smooth + +8.536451662209396 +47.35047965388309 +428.9306438682416 +-188.46641004879274 +73.89733480504222 +0 +120 +absolute + + + +0.01 +smooth + +8.536450512159346 +47.35047957347771 +428.9306376098518 +-188.55446274482267 +73.89852149792247 +0 +120 +absolute + + + +0.01 +smooth + +8.536449362069016 +47.35047949082959 +428.93063133910624 +-188.6424940557509 +73.89970387216162 +0 +120 +absolute + + + +0.01 +smooth + +8.53644821195339 +47.3504794059954 +428.93062505764755 +-188.7304997818535 +73.9008827917314 +0 +120 +absolute + + + +0.01 +smooth + +8.53644706182745 +47.35047931903176 +428.93061876711727 +-188.8184757234061 +73.90205912060345 +0 +120 +absolute + + + +0.01 +smooth + +8.536445911706187 +47.35047922999541 +428.93061246915795 +-188.90641768068468 +73.90323372274953 +0 +120 +absolute + + + +0.01 +smooth + +8.536444761604578 +47.35047913894297 +428.9306061654115 +-188.99432145396486 +73.90440746214132 +0 +120 +absolute + + + +0.01 +smooth + +8.53644361153761 +47.35047904593114 +428.9305998575203 +-189.08218284352262 +73.9055812027505 +0 +120 +absolute + + + +0.01 +smooth + +8.53644246152027 +47.35047895101659 +428.9305935471263 +-189.16999764963373 +73.90675580854878 +0 +120 +absolute + + + +0.01 +smooth + +8.536441311567538 +47.35047885425597 +428.93058723587154 +-189.25776167257393 +73.90793214350782 +0 +120 +absolute + + + +0.01 +smooth + +8.5364401616944 +47.350478755705964 +428.9305809253984 +-189.3454707126191 +73.90911107159938 +0 +120 +absolute + + + +0.01 +smooth + +8.536439011915837 +47.35047865542323 +428.9305746173487 +-189.43312057004496 +73.91029345679513 +0 +120 +absolute + + + +0.01 +smooth + +8.53643786224684 +47.35047855346447 +428.930568313365 +-189.52070704512744 +73.91148016306676 +0 +120 +absolute + + + +0.01 +smooth + +8.536436712702384 +47.35047844988631 +428.930562015089 +-189.60822593814217 +73.91267205438595 +0 +120 +absolute + + + +0.01 +smooth + +8.536435563297465 +47.35047834474547 +428.9305557241632 +-189.69567304936518 +73.91386999472445 +0 +120 +absolute + + + +0.01 +smooth + +8.536434414047054 +47.35047823809857 +428.93054944222945 +-189.7830441790721 +73.91507484805392 +0 +120 +absolute + + + +0.01 +smooth + +8.536433264966144 +47.350478130002315 +428.93054317093 +-189.87033512753885 +73.91628747834605 +0 +120 +absolute + + + +0.01 +smooth + +8.536432116069715 +47.35047802051338 +428.9305369119071 +-189.95754169504124 +73.91750874957259 +0 +120 +absolute + + + +0.01 +smooth + +8.536430967372754 +47.35047790968841 +428.93053066680267 +-190.044659681855 +73.91873952570516 +0 +120 +absolute + + + +0.01 +smooth + +8.536429818890243 +47.35047779758409 +428.93052443725895 +-190.13168488825602 +73.91998067071553 +0 +120 +absolute + + + +0.01 +smooth + +8.53642867063717 +47.350477684257086 +428.930518224918 +-190.21861311452005 +73.92123304857535 +0 +120 +absolute + + + +0.01 +smooth + +8.536427522628514 +47.35047756976408 +428.9305120314222 +-190.3054401609229 +73.92249752325634 +0 +120 +absolute + + + +0.01 +smooth + +8.53642637487926 +47.35047745416173 +428.9305058584133 +-190.39216182774044 +73.9237749587302 +0 +120 +absolute + + + +0.01 +smooth + +8.536425227404395 +47.3504773375067 +428.9304997075338 +-190.4787739152484 +73.92506621896861 +0 +120 +absolute + + + +0.01 +smooth + +8.536424080218902 +47.3504772198557 +428.93049358042566 +-190.56527222372264 +73.92637216794327 +0 +120 +absolute + + + +0.01 +smooth + +8.536422933337764 +47.350477101265355 +428.930487478731 +-190.65165255343896 +73.92769366962591 +0 +120 +absolute + + + +0.01 +smooth + +8.536421786775968 +47.35047698179236 +428.93048140409195 +-190.7379107046732 +73.92903158798819 +0 +120 +absolute + + + +0.01 +smooth + +8.536420640548492 +47.35047686149338 +428.9304753581507 +-190.8240424777011 +73.93038678700182 +0 +120 +absolute + + + +0.01 +smooth + +8.536419494670328 +47.350476740425066 +428.9304693425494 +-190.9100436727985 +73.9317601306385 +0 +120 +absolute + + + +0.01 +smooth + +8.536418349156456 +47.35047661864412 +428.93046335893007 +-190.99591009024124 +73.93315248286991 +0 +120 +absolute + + + +0.01 +smooth + +8.536417204021859 +47.35047649620721 +428.9304574089349 +-191.0816375303051 +73.93456470766779 +0 +120 +absolute + + + +0.01 +smooth + +8.536416059281523 +47.35047637317099 +428.9304514942062 +-191.1672217932659 +73.93599766900378 +0 +120 +absolute + + + +0.01 +smooth + +8.536414914950432 +47.350476249592134 +428.9304456163858 +-191.25265867939942 +73.93745223084963 +0 +120 +absolute + + + +0.01 +smooth + +8.536413771043572 +47.350476125527315 +428.930439777116 +-191.33794398898155 +73.93892925717701 +0 +120 +absolute + + + +0.01 +smooth + +8.536412627575922 +47.350476001033215 +428.930433978039 +-191.423073522288 +73.94042961195763 +0 +120 +absolute + + + +0.01 +smooth + +8.536411484562471 +47.350475876166485 +428.9304282207967 +-191.50804307959464 +73.94195415916317 +0 +120 +absolute + + + +0.01 +smooth + +8.536410342018204 +47.350475750983804 +428.9304225070315 +-191.59284846117723 +73.94350376276535 +0 +120 +absolute + + + +0.01 +smooth + +8.536409199958099 +47.350475625541854 +428.93041683838544 +-191.6774854673116 +73.94507928673585 +0 +120 +absolute + + + +0.01 +smooth + +8.536408058397145 +47.3504754998973 +428.93041121650054 +-191.7619498982736 +73.94668159504637 +0 +120 +absolute + + + +0.01 +smooth + +8.536406917350325 +47.350475374106786 +428.93040564301907 +-191.84623755433904 +73.94831155166861 +0 +120 +absolute + + + +0.01 +smooth + +8.536405776832623 +47.35047524822703 +428.93040011958317 +-191.93034423578368 +73.94997002057427 +0 +120 +absolute + + + +0.01 +smooth + +8.536404636859023 +47.35047512231466 +428.9303946478349 +-192.0142657428833 +73.95165786573504 +0 +120 +absolute + + + +0.01 +smooth + +8.536403497404734 +47.35047499628183 +428.9303892253243 +-192.09800996367494 +73.9533760549157 +0 +120 +absolute + + + +0.01 +smooth + +8.536402358117185 +47.35047486884016 +428.9303838157055 +-192.18168431509147 +73.95512613158483 +0 +120 +absolute + + + +0.01 +smooth + +8.53640121892287 +47.35047473969801 +428.9303784110181 +-192.26531123336557 +73.95690838583953 +0 +120 +absolute + + + +0.01 +smooth + +8.53640007983785 +47.35047460888755 +428.93037301248444 +-192.34888592142667 +73.95872282270595 +0 +120 +absolute + + + +0.01 +smooth + +8.536398940878172 +47.350474476440915 +428.93036762132556 +-192.43240358220382 +73.96056944721008 +0 +120 +absolute + + + +0.01 +smooth + +8.536397802059893 +47.35047434239026 +428.93036223876385 +-192.5158594186266 +73.96244826437805 +0 +120 +absolute + + + +0.01 +smooth + +8.536396663399069 +47.35047420676771 +428.9303568660208 +-192.5992486336242 +73.96435927923585 +0 +120 +absolute + + + +0.01 +smooth + +8.536395524911748 +47.35047406960539 +428.93035150431814 +-192.68256643012592 +73.96630249680955 +0 +120 +absolute + + + +0.01 +smooth + +8.536394386613994 +47.350473930935486 +428.9303461548778 +-192.76580801106107 +73.96827792212522 +0 +120 +absolute + + + +0.01 +smooth + +8.536393248521852 +47.350473790790105 +428.9303408189213 +-192.84896857935914 +73.97028556020894 +0 +120 +absolute + + + +0.01 +smooth + +8.536392110651384 +47.35047364920141 +428.93033549767074 +-192.93204333794924 +73.97232541608672 +0 +120 +absolute + + + +0.01 +smooth + +8.53639097301864 +47.350473506201546 +428.9303301923478 +-193.01502748976085 +73.97439749478471 +0 +120 +absolute + + + +0.01 +smooth + +8.536389835639673 +47.35047336182262 +428.9303249041739 +-193.09791623772315 +73.9765018013288 +0 +120 +absolute + + + +0.01 +smooth + +8.536388698530542 +47.35047321609683 +428.9303196343713 +-193.18070478476548 +73.9786383407452 +0 +120 +absolute + + + +0.01 +smooth + +8.5363875617073 +47.35047306905628 +428.93031438416153 +-193.26338833381735 +73.98080711805991 +0 +120 +absolute + + + +0.01 +smooth + +8.536386425185997 +47.35047292073312 +428.93030915476635 +-193.34596208780775 +73.983008138299 +0 +120 +absolute + + + +0.01 +smooth + +8.536385288982693 +47.350472771159495 +428.9303039474076 +-193.4284212496663 +73.98524140648851 +0 +120 +absolute + + + +0.01 +smooth + +8.536384153113437 +47.35047262036754 +428.9302987633069 +-193.51076102232216 +73.98750692765452 +0 +120 +absolute + + + +0.01 +smooth + +8.536383017594288 +47.35047246838941 +428.93029360368627 +-193.59297660870467 +73.98980470682308 +0 +120 +absolute + + + +0.01 +smooth + +8.536381882441296 +47.35047231525726 +428.93028846976733 +-193.67506321174315 +73.99213474902024 +0 +120 +absolute + + + +0.01 +smooth + +8.536380747670515 +47.350472161003175 +428.9302833627716 +-193.7570160343669 +73.99449705927202 +0 +120 +absolute + + + +0.01 +smooth + +8.536379613298008 +47.35047200565936 +428.9302782839214 +-193.8388302795053 +73.99689164260455 +0 +120 +absolute + + + +0.01 +smooth + +8.53637847933982 +47.350471849257936 +428.930273234438 +-193.92050115008763 +73.99931850404386 +0 +120 +absolute + + + +0.01 +smooth + +8.536377345812006 +47.35047169183104 +428.9302682155435 +-194.00202384904318 +74.001777648616 +0 +120 +absolute + + + +0.01 +smooth + +8.536376212730627 +47.350471533410825 +428.9302632284595 +-194.08339357930134 +74.00426908134702 +0 +120 +absolute + + + +0.01 +smooth + +8.53637508011173 +47.35047137402941 +428.93025827440795 +-194.16460554379137 +74.00679280726301 +0 +120 +absolute + + + +0.01 +smooth + +8.53637394797137 +47.35047121371897 +428.9302533546102 +-194.2456549454426 +74.00934883138999 +0 +120 +absolute + + + +0.01 +smooth + +8.536372816325606 +47.35047105251162 +428.9302484702885 +-194.32653698718437 +74.01193715875404 +0 +120 +absolute + + + +0.01 +smooth + +8.53637168519049 +47.350470890439524 +428.9302436226643 +-194.40724687194597 +74.0145577943812 +0 +120 +absolute + + + +0.01 +smooth + +8.536370554582074 +47.35047072753481 +428.9302388129596 +-194.48777980265672 +74.01721074329754 +0 +120 +absolute + + + +0.01 +smooth + +8.536369424516417 +47.350470563829624 +428.9302340423961 +-194.56813098224598 +74.01989601052912 +0 +120 +absolute + + + +0.01 +smooth + +8.53636829500957 +47.350470399356105 +428.9302293121954 +-194.648295613643 +74.022613601102 +0 +120 +absolute + + + +0.01 +smooth + +8.536367166077586 +47.35047023414641 +428.9302246235794 +-194.72826889977716 +74.02536352004222 +0 +120 +absolute + + + +0.01 +smooth + +8.536366037736522 +47.35047006823266 +428.93021997777 +-194.80804604357775 +74.02814577237586 +0 +120 +absolute + + + +0.01 +smooth + +8.536364910002433 +47.35046990164702 +428.9302153759888 +-194.8876222479741 +74.03096036312895 +0 +120 +absolute + + + +0.01 +smooth + +8.53636378289137 +47.350469734421615 +428.93021081945744 +-194.96699271589546 +74.0338072973276 +0 +120 +absolute + + + +0.01 +smooth + +8.536362656419389 +47.35046956658859 +428.93020630939805 +-195.04615265027127 +74.03668657999779 +0 +120 +absolute + + + +0.01 +smooth + +8.536361530602544 +47.350469398180095 +428.93020184703204 +-195.12509725403075 +74.03959821616564 +0 +120 +absolute + + + +0.01 +smooth + +8.53636040545689 +47.35046922922827 +428.93019743358144 +-195.2038217301033 +74.04254221085719 +0 +120 +absolute + + + +0.01 +smooth + +8.536359280998479 +47.35046905976526 +428.93019307026793 +-195.28232128141818 +74.04551856909848 +0 +120 +absolute + + + +0.01 +smooth + +8.53635815724337 +47.35046888982319 +428.9301887583132 +-195.3605911109047 +74.04852729591559 +0 +120 +absolute + + + +0.01 +smooth + +8.536357034207613 +47.35046871943423 +428.93018449893907 +-195.4386264214922 +74.05156839633457 +0 +120 +absolute + + + +0.01 +smooth + +8.536355911907263 +47.35046854863051 +428.93018029336747 +-195.51642241610995 +74.05464187538146 +0 +120 +absolute + + + +0.01 +smooth + +8.536354790358377 +47.35046837744416 +428.9301761428199 +-195.59397429768737 +74.05774773808236 +0 +120 +absolute + + + +0.01 +smooth + +8.536353669577004 +47.35046820590733 +428.93017204851833 +-195.67127726915373 +74.0608859894633 +0 +120 +absolute + + + +0.01 +smooth + +8.536352549579203 +47.35046803405218 +428.9301680116844 +-195.74832653343833 +74.0640566345503 +0 +120 +absolute + + + +0.01 +smooth + +8.536351430381028 +47.350467861910836 +428.93016403354 +-195.8251172934705 +74.0672596783695 +0 +120 +absolute + + + +0.01 +smooth + +8.536350311998529 +47.35046768951544 +428.93016011530676 +-195.90164475217955 +74.0704951259469 +0 +120 +absolute + + + +0.01 +smooth + +8.536349194287308 +47.35046751659466 +428.9301562430425 +-195.97795746042146 +74.07377470033857 +0 +120 +absolute + + + +0.01 +smooth + +8.536348076893493 +47.35046734247402 +428.93015238288984 +-196.05417357500562 +74.07712510676332 +0 +120 +absolute + + + +0.01 +smooth + +8.536346959819678 +47.350467167146775 +428.93014853456975 +-196.1302927053679 +74.08054673334732 +0 +120 +absolute + + + +0.01 +smooth + +8.536345843083339 +47.350466990634224 +428.9301446992069 +-196.20630951455493 +74.0840388763727 +0 +120 +absolute + + + +0.01 +smooth + +8.536344726701948 +47.35046681295772 +428.93014087792614 +-196.2822186656133 +74.08760083212148 +0 +120 +absolute + + + +0.01 +smooth + +8.536343610692976 +47.3504666341385 +428.93013707185196 +-196.35801482158945 +74.09123189687574 +0 +120 +absolute + + + +0.01 +smooth + +8.536342495073894 +47.35046645419791 +428.9301332821095 +-196.43369264553016 +74.09493136691754 +0 +120 +absolute + + + +0.01 +smooth + +8.536341379862176 +47.35046627315722 +428.93012950982336 +-196.5092468004819 +74.09869853852892 +0 +120 +absolute + + + +0.01 +smooth + +8.536340265075292 +47.350466091037724 +428.930125756118 +-196.58467194949122 +74.10253270799195 +0 +120 +absolute + + + +0.01 +smooth + +8.536339150730722 +47.35046590786075 +428.9301220221187 +-196.6599627556049 +74.10643317158872 +0 +120 +absolute + + + +0.01 +smooth + +8.536338036845931 +47.350465723647616 +428.93011830895017 +-196.73511388186938 +74.11039922560127 +0 +120 +absolute + + + +0.01 +smooth + +8.53633692343839 +47.35046553841958 +428.93011461773665 +-196.81011999133122 +74.11443016631164 +0 +120 +absolute + + + +0.01 +smooth + +8.536335810525575 +47.35046535219794 +428.93011094960343 +-196.88497574703706 +74.11852529000191 +0 +120 +absolute + + + +0.01 +smooth + +8.536334698124962 +47.35046516500407 +428.9301073056751 +-196.95967581203357 +74.12268389295416 +0 +120 +absolute + + + +0.01 +smooth + +8.536333586254015 +47.35046497685917 +428.9301036870764 +-197.03421484936717 +74.12690527145043 +0 +120 +absolute + + + +0.01 +smooth + +8.536332474930212 +47.35046478778461 +428.930100094932 +-197.10858752208452 +74.13118872177279 +0 +120 +absolute + + + +0.01 +smooth + +8.536331364171023 +47.35046459780167 +428.93009653036677 +-197.1827884932322 +74.13553354020327 +0 +120 +absolute + + + +0.01 +smooth + +8.53633025399392 +47.35046440693165 +428.9300929945055 +-197.2568124258569 +74.13993902302398 +0 +120 +absolute + + + +0.01 +smooth + +8.53632914441638 +47.35046421519585 +428.930089488473 +-197.33065398300505 +74.14440446651699 +0 +120 +absolute + + + +0.01 +smooth + +8.536328035455865 +47.350464022615554 +428.9300860133937 +-197.40430782772327 +74.14892916696425 +0 +120 +absolute + + + +0.01 +smooth + +8.536326927129856 +47.350463829212096 +428.9300825703927 +-197.47776862305818 +74.15351242064793 +0 +120 +absolute + + + +0.01 +smooth + +8.536325819455827 +47.35046363500677 +428.93007916059474 +-197.5510310320564 +74.15815352385009 +0 +120 +absolute + + + +0.01 +smooth + +8.536324712451243 +47.35046344002086 +428.9300757851245 +-197.6240897177645 +74.16285177285273 +0 +120 +absolute + + + +0.01 +smooth + +8.536323606133582 +47.35046324427568 +428.9300724451067 +-197.69693934322902 +74.16760646393797 +0 +120 +absolute + + + +0.01 +smooth + +8.53632250052031 +47.35046304779252 +428.93006914166614 +-197.7695745714965 +74.17241689338783 +0 +120 +absolute + + + +0.01 +smooth + +8.536321395628907 +47.35046285059269 +428.9300658759276 +-197.84199006561371 +74.1772823574844 +0 +120 +absolute + + + +0.01 +smooth + +8.53632029147684 +47.3504626526975 +428.9300626490157 +-197.91418048862707 +74.18220215250972 +0 +120 +absolute + + + +0.01 +smooth + +8.536319188081583 +47.35046245412823 +428.9300594620555 +-197.98614050358327 +74.18717557474586 +0 +120 +absolute + + + +0.01 +smooth + +8.53631808546061 +47.35046225490619 +428.9300563161715 +-198.0578647735288 +74.19220192047487 +0 +120 +absolute + + + +0.01 +smooth + +8.53631698363139 +47.350462055052674 +428.9300532124886 +-198.12934796151026 +74.19728048597882 +0 +120 +absolute + + + +0.01 +smooth + +8.536315882611397 +47.350461854589 +428.93005015213146 +-198.20058473057435 +74.20241056753977 +0 +120 +absolute + + + +0.01 +smooth + +8.536314782418103 +47.350461653536456 +428.9300471362249 +-198.2715697437675 +74.2075914614398 +0 +120 +absolute + + + +0.01 +smooth + +8.536313683068979 +47.350461451916345 +428.9300441658936 +-198.3422976641364 +74.21282246396095 +0 +120 +absolute + + + +0.01 +smooth + +8.536312584581502 +47.35046124974997 +428.9300412422625 +-198.41276315472763 +74.21810287138527 +0 +120 +absolute + + + +0.01 +smooth + +8.53631148697314 +47.35046104705862 +428.9300383664562 +-198.48296087858773 +74.22343197999484 +0 +120 +absolute + + + +0.01 +smooth + +8.536310390261365 +47.350460843863615 +428.93003553959954 +-198.55288549876335 +74.22880908607172 +0 +120 +absolute + + + +0.01 +smooth + +8.536309294463651 +47.35046064018624 +428.9300327628171 +-198.62253167830102 +74.23423348589799 +0 +120 +absolute + + + +0.01 +smooth + +8.536308199597471 +47.35046043604781 +428.930030037234 +-198.69189408024732 +74.23970447575564 +0 +120 +absolute + + + +0.01 +smooth + +8.536307105680295 +47.35046023146962 +428.93002736397466 +-198.7609673676489 +74.24522135192683 +0 +120 +absolute + + + +0.01 +smooth + +8.536306012729597 +47.35046002647296 +428.93002474416403 +-198.82974620355225 +74.25078341069354 +0 +120 +absolute + + + +0.01 +smooth + +8.536304920762849 +47.350459821079156 +428.9300221789267 +-198.89822525100408 +74.25638994833787 +0 +120 +absolute + + + +0.01 +smooth + +8.536303829797523 +47.350459615309475 +428.93001966938766 +-198.96639917305086 +74.26204026114189 +0 +120 +absolute + + + +0.01 +smooth + +8.536302739851092 +47.35045940918525 +428.93001721667156 +-199.03426263273926 +74.26773364538762 +0 +120 +absolute + + + +0.01 +smooth + +8.536301650941025 +47.350459202727755 +428.9300148219031 +-199.10181029311582 +74.27346939735718 +0 +120 +absolute + + + +0.01 +smooth + +8.5363005630848 +47.35045899595831 +428.9300124862071 +-199.16903681722715 +74.27924681333256 +0 +120 +absolute + + + +0.01 +smooth + +8.536299476299886 +47.35045878889821 +428.9300102107083 +-199.23593686811978 +74.28506518959588 +0 +120 +absolute + + + +0.01 +smooth + +8.536298390603758 +47.35045858156876 +428.9300079965315 +-199.3025051088404 +74.29092382242918 +0 +120 +absolute + + + +0.01 +smooth + +8.536297306008471 +47.3504583739854 +428.93000584423237 +-199.36873815212195 +74.29682256615416 +0 +120 +absolute + + + +0.01 +smooth + +8.536296222157288 +47.35045816576244 +428.93000371559526 +-199.4347655456989 +74.3027992734751 +0 +120 +absolute + + + +0.01 +smooth + +8.536295138840456 +47.350457956668066 +428.93000158799265 +-199.50066379113483 +74.3088764589563 +0 +120 +absolute + + + +0.01 +smooth + +8.53629405607694 +47.35045774671712 +428.92999946288455 +-199.56642693907736 +74.31505300862936 +0 +120 +absolute + + + +0.01 +smooth + +8.53629297388568 +47.350457535924384 +428.9299973417305 +-199.63204904017405 +74.32132780852571 +0 +120 +absolute + + + +0.01 +smooth + +8.53629189228564 +47.35045732430475 +428.929995225991 +-199.69752414507283 +74.32769974467702 +0 +120 +absolute + + + +0.01 +smooth + +8.536290811295759 +47.35045711187298 +428.9299931171255 +-199.76284630442123 +74.33416770311479 +0 +120 +absolute + + + +0.01 +smooth + +8.536289730935 +47.35045689864391 +428.92999101659433 +-199.82800956886692 +74.34073056987059 +0 +120 +absolute + + + +0.01 +smooth + +8.536288651222314 +47.350456684632384 +428.929988925857 +-199.89300798905768 +74.34738723097591 +0 +120 +absolute + + + +0.01 +smooth + +8.536287572176652 +47.35045646985322 +428.92998684637377 +-199.95783561564116 +74.35413657246241 +0 +120 +absolute + + + +0.01 +smooth + +8.536286493816966 +47.35045625432126 +428.9299847796045 +-200.02248649926509 +74.36097748036156 +0 +120 +absolute + + + +0.01 +smooth + +8.536285416162212 +47.3504560380513 +428.92998272700913 +-200.08695469057716 +74.36790884070491 +0 +120 +absolute + + + +0.01 +smooth + +8.536284339231337 +47.350455821058155 +428.92998069004733 +-200.15123424022488 +74.37492953952403 +0 +120 +absolute + + + +0.01 +smooth + +8.5362832630433 +47.350455603356686 +428.9299786701796 +-200.21531919885618 +74.38203846285049 +0 +120 +absolute + + + +0.01 +smooth + +8.536282187617047 +47.35045538496173 +428.9299766688654 +-200.27920361711872 +74.38923449671582 +0 +120 +absolute + + + +0.01 +smooth + +8.536281112971535 +47.35045516588806 +428.9299746875647 +-200.3428815456601 +74.39651652715156 +0 +120 +absolute + + + +0.01 +smooth + +8.536280039125717 +47.35045494615051 +428.92997272773766 +-200.40634703512802 +74.4038834401893 +0 +120 +absolute + + + +0.01 +smooth + +8.536278966098541 +47.350454725763946 +428.929970790844 +-200.46959413617023 +74.41133412186055 +0 +120 +absolute + + + +0.01 +smooth + +8.536277893908965 +47.35045450474316 +428.9299688783438 +-200.5326168994344 +74.41886745819689 +0 +120 +absolute + + + +0.01 +smooth + +8.53627682257594 +47.350454283102984 +428.929966991697 +-200.59540937556818 +74.42648233522982 +0 +120 +absolute + + + +0.01 +smooth + +8.536275752118414 +47.350454060858226 +428.9299651323632 +-200.65796561521918 +74.43417763899092 +0 +120 +absolute + + + +0.01 +smooth + +8.536274682555344 +47.350453838023746 +428.92996330180273 +-200.72027966903525 +74.44195225551177 +0 +120 +absolute + + + +0.01 +smooth + +8.536273613905685 +47.35045361461435 +428.92996150147553 +-200.78234558766414 +74.44980507082391 +0 +120 +absolute + + + +0.01 +smooth + +8.536272546188384 +47.350453390644866 +428.92995973284127 +-200.84415742175335 +74.45773497095888 +0 +120 +absolute + + + +0.01 +smooth + +8.536271479422396 +47.350453166130116 +428.92995799736 +-200.90570922195064 +74.46574084194822 +0 +120 +absolute + + + +0.01 +smooth + +8.536270413626674 +47.35045294108491 +428.9299562964917 +-200.96699503890375 +74.47382156982349 +0 +120 +absolute + + + +0.01 +smooth + +8.53626934882017 +47.3504527155241 +428.9299546316963 +-201.0280089232603 +74.48197604061623 +0 +120 +absolute + + + +0.01 +smooth + +8.536268285021835 +47.3504524894625 +428.9299530044336 +-201.08874492566798 +74.490203140358 +0 +120 +absolute + + + +0.01 +smooth + +8.536267222250626 +47.35045226291493 +428.9299514161637 +-201.14919709677457 +74.49850175508038 +0 +120 +absolute + + + +0.01 +smooth + +8.536266160525491 +47.350452035896225 +428.9299498683464 +-201.20935948722766 +74.50687077081486 +0 +120 +absolute + + + +0.01 +smooth + +8.536265099865386 +47.3504518084212 +428.9299483624418 +-201.269226147675 +74.51530907359304 +0 +120 +absolute + + + +0.01 +smooth + +8.53626404028926 +47.35045158050468 +428.9299468999096 +-201.32879112876427 +74.52381554944645 +0 +120 +absolute + + + +0.01 +smooth + +8.536262981816067 +47.35045135216149 +428.92994548221 +-201.38804848114313 +74.53238908440666 +0 +120 +absolute + + + +0.01 +smooth + +8.536261924464764 +47.35045112340646 +428.9299441108027 +-201.44699225545935 +74.54102856450518 +0 +120 +absolute + + + +0.01 +smooth + +8.536260868254296 +47.35045089425442 +428.92994278714775 +-201.5056165023605 +74.5497328757736 +0 +120 +absolute + + + +0.01 +smooth + +8.536259813203618 +47.35045066472019 +428.92994151270506 +-201.5639152724944 +74.55850090424346 +0 +120 +absolute + + + +0.01 +smooth + +8.536258759331687 +47.35045043481858 +428.92994028893463 +-201.62188261650863 +74.5673315359463 +0 +120 +absolute + + + +0.01 +smooth + +8.536257706657452 +47.35045020456444 +428.92993911729627 +-201.67951258505093 +74.5762236569137 +0 +120 +absolute + + + +0.01 +smooth + +8.536256655199866 +47.35044997397257 +428.92993799925 +-201.736799228769 +74.58517615317714 +0 +120 +absolute + + + +0.01 +smooth + +8.53625560497788 +47.35044974305782 +428.9299369362557 +-201.79373659831055 +74.59418791076826 +0 +120 +absolute + + + +0.01 +smooth + +8.53625455601045 +47.350449511834995 +428.92993592977336 +-201.8503187443232 +74.60325781571856 +0 +120 +absolute + + + +0.01 +smooth + +8.536253508316527 +47.35044928031893 +428.9299349812628 +-201.90653971745468 +74.6123847540596 +0 +120 +absolute + + + +0.01 +smooth + +8.536252461915062 +47.35044904852444 +428.9299340921841 +-201.96239356835272 +74.62156761182294 +0 +120 +absolute + + + +0.01 +smooth + +8.536251416825008 +47.35044881646637 +428.9299332639971 +-202.01787434766493 +74.6308052750401 +0 +120 +absolute + + + +0.01 +smooth + +8.536250373065318 +47.35044858415952 +428.92993249816175 +-202.07297610603908 +74.64009662974267 +0 +120 +absolute + + + +0.01 +smooth + +8.536249330654947 +47.35044835161873 +428.9299317961381 +-202.1276928941228 +74.6494405619622 +0 +120 +absolute + + + +0.01 +smooth + +8.536248289612844 +47.35044811885882 +428.9299311593859 +-202.18201876256376 +74.6588359577302 +0 +120 +absolute + + + +0.01 +smooth + +8.536247249957967 +47.35044788589461 +428.92993058936514 +-202.23594776200977 +74.66828170307825 +0 +120 +absolute + + + +0.01 +smooth + +8.53624621162479 +47.350447652685205 +428.9299300794727 +-202.2895078037497 +74.677785751835 +0 +120 +absolute + + + +0.01 +smooth + +8.536245174125932 +47.350447418909546 +428.92992958233555 +-202.342895758151 +74.68740130028904 +0 +120 +absolute + + + +0.01 +smooth + +8.536244137397075 +47.350447184522814 +428.9299290901895 +-202.39613865706477 +74.69713605559257 +0 +120 +absolute + + + +0.01 +smooth + +8.536243101458423 +47.3504469495358 +428.92992860328326 +-202.44922963346428 +74.7069886463757 +0 +120 +absolute + + + +0.01 +smooth + +8.536242066330177 +47.350446713959194 +428.929928121865 +-202.50216182032287 +74.71695770126843 +0 +120 +absolute + + + +0.01 +smooth + +8.536241032032544 +47.350446477803835 +428.92992764618344 +-202.55492835061395 +74.72704184890091 +0 +120 +absolute + + + +0.01 +smooth + +8.53623999858573 +47.35044624108045 +428.92992717648696 +-202.6075223573107 +74.73723971790308 +0 +120 +absolute + + + +0.01 +smooth + +8.536238966009934 +47.35044600379979 +428.929926713024 +-202.65993697338658 +74.74754993690509 +0 +120 +absolute + + + +0.01 +smooth + +8.536237934325362 +47.35044576597264 +428.92992625604313 +-202.71216533181484 +74.75797113453697 +0 +120 +absolute + + + +0.01 +smooth + +8.53623690355222 +47.35044552760973 +428.9299258057928 +-202.76420056556884 +74.76850193942879 +0 +120 +absolute + + + +0.01 +smooth + +8.536235873710712 +47.350445288721836 +428.92992536252154 +-202.81603580762192 +74.77914098021061 +0 +120 +absolute + + + +0.01 +smooth + +8.536234844821044 +47.35044504931972 +428.92992492647795 +-202.86766419094747 +74.7898868855125 +0 +120 +absolute + + + +0.01 +smooth + +8.536233816903412 +47.35044480941412 +428.92992449791006 +-202.9190788485186 +74.80073828396448 +0 +120 +absolute + + + +0.01 +smooth + +8.536232789978028 +47.350444569015835 +428.9299240770669 +-202.97027291330892 +74.81169380419665 +0 +120 +absolute + + + +0.01 +smooth + +8.536231764065095 +47.35044432813561 +428.92992366419685 +-203.02123951829162 +74.82275207483912 +0 +120 +absolute + + + +0.01 +smooth + +8.536230739184814 +47.35044408678418 +428.92992325954805 +-203.07197179643998 +74.83391172452181 +0 +120 +absolute + + + +0.01 +smooth + +8.536229715357392 +47.350443844972325 +428.9299228633692 +-203.12246288072743 +74.8451713818749 +0 +120 +absolute + + + +0.01 +smooth + +8.536228692603032 +47.350443602710804 +428.92992247590894 +-203.1727059041272 +74.8565296755284 +0 +120 +absolute + + + +0.01 +smooth + +8.536227670941939 +47.35044336001038 +428.92992209741556 +-203.22269399961277 +74.86798523411242 +0 +120 +absolute + + + +0.01 +smooth + +8.536226650394315 +47.350443116881806 +428.9299217281375 +-203.2724203001573 +74.87953668625696 +0 +120 +absolute + + + +0.01 +smooth + +8.536225630980363 +47.35044287333583 +428.92992136832333 +-203.32187793873425 +74.8911826605921 +0 +120 +absolute + + + +0.01 +smooth + +8.536224612720293 +47.35044262938324 +428.92992101822153 +-203.3710600483168 +74.9029217857479 +0 +120 +absolute + + + +0.01 +smooth + +8.536223595634308 +47.35044238503478 +428.92992067808086 +-203.41995976187854 +74.91475269035446 +0 +120 +absolute + + + +0.01 +smooth + +8.536222579742606 +47.35044214030122 +428.92992034814927 +-203.4685702123925 +74.9266740030418 +0 +120 +absolute + + + +0.01 +smooth + +8.536221565065397 +47.350441895193285 +428.9299200286758 +-203.5168845328322 +74.93868435243998 +0 +120 +absolute + + + +0.01 +smooth + +8.53622055162288 +47.35044164972179 +428.92991971990847 +-203.56489585617095 +74.95078236717907 +0 +120 +absolute + + + +0.01 +smooth + +8.536219539435267 +47.35044140389744 +428.9299194220959 +-203.612597315382 +74.96296667588913 +0 +120 +absolute + + + +0.01 +smooth + +8.536218528522754 +47.350441157731034 +428.9299191354868 +-203.65998204343873 +74.97523590720024 +0 +120 +absolute + + + +0.01 +smooth + +8.536217518905552 +47.35044091123332 +428.92991886032934 +-203.7070431733145 +74.98758868974244 +0 +120 +absolute + + + +0.01 +smooth + +8.536216510603861 +47.35044066441505 +428.92991859687226 +-203.75377383798255 +75.0000236521458 +0 +120 +absolute + + + +0.01 +smooth + +8.536215503637884 +47.35044041728699 +428.9299183453639 +-203.8001671704163 +75.01253942304038 +0 +120 +absolute + + + +0.01 +smooth + +8.536214498027826 +47.35044016985991 +428.9299181060528 +-203.84621630358905 +75.0251346310562 +0 +120 +absolute + + + +0.01 +smooth + +8.536213493793895 +47.350439922144545 +428.9299178791875 +-203.8919143704741 +75.0378079048234 +0 +120 +absolute + + + +0.01 +smooth + +8.536212490956292 +47.35043967415167 +428.9299176650163 +-203.93725450404486 +75.05055787297198 +0 +120 +absolute + + + +0.01 +smooth + +8.536211489535223 +47.35043942589205 +428.9299174637878 +-203.98222983727453 +75.06338316413203 +0 +120 +absolute + + + +0.01 +smooth + +8.536210489550886 +47.35043917737644 +428.92991727575054 +-204.02683350313654 +75.0762824069336 +0 +120 +absolute + + + +0.01 +smooth + +8.536209491023493 +47.350438928615596 +428.929917101153 +-204.07105863460424 +75.08925423000674 +0 +120 +absolute + + + +0.01 +smooth + +8.536208493973245 +47.35043867962028 +428.9299169402436 +-204.11489836465086 +75.10229726198153 +0 +120 +absolute + + + +0.01 +smooth + +8.536207498420342 +47.35043843040125 +428.9299167932708 +-204.1583458262498 +75.11541013148803 +0 +120 +absolute + + + +0.01 +smooth + +8.536206504384998 +47.35043818096926 +428.9299166604832 +-204.20139415237435 +75.1285914671563 +0 +120 +absolute + + + +0.01 +smooth + +8.53620551188741 +47.3504379313351 +428.9299165421291 +-204.24403647599792 +75.14183989761638 +0 +120 +absolute + + + +0.01 +smooth + +8.53620452094778 +47.35043768150949 +428.92991643845716 +-204.28626593009375 +75.15515405149836 +0 +120 +absolute + + + +0.01 +smooth + +8.536203531586319 +47.35043743150322 +428.9299163497159 +-204.32807564763522 +75.16853255743227 +0 +120 +absolute + + + +0.01 +smooth + +8.536202543823226 +47.35043718132702 +428.92991627615356 +-204.36945876159558 +75.18197404404819 +0 +120 +absolute + + + +0.01 +smooth + +8.536201557678709 +47.35043693099168 +428.9299162180189 +-204.41040840494827 +75.19547713997622 +0 +120 +absolute + + + +0.01 +smooth + +8.536200573172968 +47.35043668050794 +428.92991617556027 +-204.45091771066657 +75.20904047384633 +0 +120 +absolute + + + +0.01 +smooth + +8.53619959032621 +47.350436429886564 +428.9299161490262 +-204.4909798117238 +75.22266267428866 +0 +120 +absolute + + + +0.01 +smooth + +8.536198609158639 +47.35043617913831 +428.92991613866513 +-204.53058784109334 +75.23634236993324 +0 +120 +absolute + + + +0.01 +smooth + +8.536197629412037 +47.350435928152564 +428.92991615337934 +-204.56986705264057 +75.25010641432436 +0 +120 +absolute + + + +0.01 +smooth + +8.536196650650744 +47.350435676739785 +428.9299162068437 +-204.60902608632793 +75.2639995910638 +0 +120 +absolute + + + +0.01 +smooth + +8.536195672889203 +47.35043542490566 +428.92991629821097 +-204.64805940611464 +75.2780210128406 +0 +120 +absolute + + + +0.01 +smooth + +8.536194696148439 +47.35043517265872 +428.92991642642534 +-204.68695834350044 +75.29216912375178 +0 +120 +absolute + + + +0.01 +smooth + +8.536193720449477 +47.350434920007466 +428.9299165904301 +-204.72571422998493 +75.30644236789429 +0 +120 +absolute + + + +0.01 +smooth + +8.536192745813354 +47.350434666960425 +428.9299167891697 +-204.7643183970679 +75.32083918936517 +0 +120 +absolute + + + +0.01 +smooth + +8.536191772261093 +47.350434413526145 +428.92991702158776 +-204.8027621762492 +75.33535803226142 +0 +120 +absolute + + + +0.01 +smooth + +8.536190799813728 +47.35043415971313 +428.9299172866284 +-204.84103689902838 +75.34999734068 +0 +120 +absolute + + + +0.01 +smooth + +8.536189828492287 +47.35043390552992 +428.92991758323564 +-204.87913389690527 +75.3647555587179 +0 +120 +absolute + + + +0.01 +smooth + +8.536188858317798 +47.350433650985046 +428.92991791035325 +-204.9170445013796 +75.3796311304722 +0 +120 +absolute + + + +0.01 +smooth + +8.536187889311295 +47.350433396087034 +428.92991826692537 +-204.9547600439511 +75.39462250003982 +0 +120 +absolute + + + +0.01 +smooth + +8.536186921493801 +47.350433140844395 +428.9299186518957 +-204.9922718561195 +75.40972811151774 +0 +120 +absolute + + + +0.01 +smooth + +8.536185954886351 +47.35043288526566 +428.9299190642084 +-205.02957126938452 +75.42494640900301 +0 +120 +absolute + + + +0.01 +smooth + +8.53618498950997 +47.35043262935939 +428.9299195028073 +-205.06664961524586 +75.44027583659262 +0 +120 +absolute + + + +0.01 +smooth + +8.536184025385692 +47.350432373134055 +428.9299199666364 +-205.1034982252034 +75.45571483838354 +0 +120 +absolute + + + +0.01 +smooth + +8.536183062534539 +47.35043211659822 +428.9299204546396 +-205.14010843075664 +75.47126185847276 +0 +120 +absolute + + + +0.01 +smooth + +8.536182100977548 +47.3504318597604 +428.9299209657608 +-205.1764715634055 +75.48691534095731 +0 +120 +absolute + + + +0.01 +smooth + +8.536181140735748 +47.35043160262911 +428.929921498944 +-205.21257895464964 +75.50267372993417 +0 +120 +absolute + + + +0.01 +smooth + +8.536180181830163 +47.3504313452129 +428.9299220531331 +-205.2484219359888 +75.51853546950035 +0 +120 +absolute + + + +0.01 +smooth + +8.536179224281824 +47.35043108752026 +428.929922627272 +-205.28399183892262 +75.53449900375279 +0 +120 +absolute + + + +0.01 +smooth + +8.536178268111764 +47.35043082955977 +428.9299232203048 +-205.31927999495102 +75.55056277678852 +0 +120 +absolute + + + +0.01 +smooth + +8.53617731334101 +47.350430571339906 +428.92992383117536 +-205.35427773557362 +75.5667252327046 +0 +120 +absolute + + + +0.01 +smooth + +8.536176359990593 +47.35043031286924 +428.92992445882766 +-205.3889763922902 +75.58298481559794 +0 +120 +absolute + + + +0.01 +smooth + +8.536175408081538 +47.350430054156256 +428.9299251022055 +-205.42336729660036 +75.59933996956556 +0 +120 +absolute + + + +0.01 +smooth + +8.53617445763488 +47.35042979520951 +428.929925760253 +-205.45744178000402 +75.61578913870447 +0 +120 +absolute + + + +0.01 +smooth + +8.536173508671645 +47.35042953603751 +428.929926431914 +-205.4911911740008 +75.63233076711165 +0 +120 +absolute + + + +0.01 +smooth + +8.536172561212862 +47.35042927664878 +428.9299271161324 +-205.52460681009043 +75.64896329888411 +0 +120 +absolute + + + +0.01 +smooth + +8.536171615279562 +47.350429017051866 +428.9299278118523 +-205.55768001977268 +75.66568517811885 +0 +120 +absolute + + + +0.01 +smooth + +8.536170670892774 +47.350428757255294 +428.92992851801745 +-205.59040213454725 +75.68249484891282 +0 +120 +absolute + + + +0.01 +smooth + +8.536169728073528 +47.350428497267565 +428.92992923357195 +-205.62276448591393 +75.69939075536308 +0 +120 +absolute + + + +0.01 +smooth + +8.536168786842854 +47.350428237097226 +428.9299299574597 +-205.6547584053724 +75.7163713415666 +0 +120 +absolute + + + +0.01 +smooth + +8.536167847221778 +47.3504279767528 +428.92993068862455 +-205.68637522442242 +75.73343505162035 +0 +120 +absolute + + + +0.01 +smooth + +8.536166909231332 +47.350427716242805 +428.9299314260105 +-205.7176062745637 +75.75058032962136 +0 +120 +absolute + + + +0.01 +smooth + +8.536165972892546 +47.35042745557578 +428.92993216856166 +-205.74844288729594 +75.76780561966663 +0 +120 +absolute + + + +0.01 +smooth + +8.536165038226446 +47.35042719476025 +428.9299329152217 +-205.77887639411898 +75.78510936585312 +0 +120 +absolute + + + +0.01 +smooth + +8.536164105254068 +47.350426933804734 +428.9299336649347 +-205.80889812653243 +75.80249001227787 +0 +120 +absolute + + + +0.01 +smooth + +8.536163173996433 +47.35042667271777 +428.92993441664464 +-205.83849941603614 +75.81994600303784 +0 +120 +absolute + + + +0.01 +smooth + +8.536162244474578 +47.35042641150786 +428.9299351692953 +-205.8676715941297 +75.83747578223003 +0 +120 +absolute + + + +0.01 +smooth + +8.536161316709528 +47.350426150183566 +428.92993592183075 +-205.89640599231296 +75.85507779395147 +0 +120 +absolute + + + +0.01 +smooth + +8.536160390722314 +47.35042588875338 +428.929936673195 +-205.9246939420856 +75.8727504822991 +0 +120 +absolute + + + +0.01 +smooth + +8.536159466533963 +47.350425627225846 +428.9299374223318 +-205.9525267749474 +75.89049229136995 +0 +120 +absolute + + + +0.01 +smooth + +8.53615854416551 +47.35042536560949 +428.92993816818534 +-205.97989582239805 +75.90830166526104 +0 +120 +absolute + + + +0.01 +smooth + +8.536157623637976 +47.35042510391283 +428.9299389096992 +-206.00679241593724 +75.92617704806933 +0 +120 +absolute + + + +0.01 +smooth + +8.536156704972399 +47.35042484214441 +428.9299396458176 +-206.0332078870648 +75.94411688389184 +0 +120 +absolute + + + +0.01 +smooth + +8.536155788189802 +47.350424580312755 +428.92994037548453 +-206.0591335672804 +75.9621196168255 +0 +120 +absolute + + + +0.01 +smooth + +8.536154873311217 +47.35042431842636 +428.9299410976438 +-206.08456078808382 +75.98018369096738 +0 +120 +absolute + + + +0.01 +smooth + +8.536153960357673 +47.35042405649379 +428.9299418112393 +-206.1094808809747 +75.9983075504145 +0 +120 +absolute + + + +0.01 +smooth + +8.536153049328396 +47.35042379451635 +428.92994251606564 +-206.13389942379288 +76.01649165268468 +0 +120 +absolute + + + +0.01 +smooth + +8.536152139700723 +47.35042353232307 +428.92994323239236 +-206.1581617110065 +76.03478461716671 +0 +120 +absolute + + + +0.01 +smooth + +8.536151231260586 +47.35042326984414 +428.92994396875037 +-206.18240816801838 +76.05320649317662 +0 +120 +absolute + + + +0.01 +smooth + +8.536150324029354 +47.35042300708737 +428.9299447245319 +-206.20662490656386 +76.07175557902048 +0 +120 +absolute + + + +0.01 +smooth + +8.536149418028398 +47.35042274406051 +428.92994549912925 +-206.23079803837857 +76.09043017300432 +0 +120 +absolute + + + +0.01 +smooth + +8.536148513279088 +47.35042248077138 +428.9299462919344 +-206.25491367519786 +76.10922857343418 +0 +120 +absolute + + + +0.01 +smooth + +8.53614760980279 +47.35042221722771 +428.9299471023398 +-206.2789579287571 +76.12814907861605 +0 +120 +absolute + + + +0.01 +smooth + +8.536146707620873 +47.35042195343731 +428.9299479297374 +-206.30291691079182 +76.14718998685603 +0 +120 +absolute + + + +0.01 +smooth + +8.536145806754705 +47.35042168940795 +428.9299487735195 +-206.32677673303735 +76.16634959646011 +0 +120 +absolute + + + +0.01 +smooth + +8.536144907225658 +47.35042142514741 +428.9299496330784 +-206.35052350722927 +76.18562620573434 +0 +120 +absolute + + + +0.01 +smooth + +8.5361440090551 +47.350421160663466 +428.92995050780627 +-206.37414334510296 +76.20501811298476 +0 +120 +absolute + + + +0.01 +smooth + +8.536143112264401 +47.35042089596393 +428.92995139709535 +-206.39762235839385 +76.22452361651743 +0 +120 +absolute + + + +0.01 +smooth + +8.536142216874925 +47.35042063105652 +428.92995230033756 +-206.42094665883727 +76.24414101463833 +0 +120 +absolute + + + +0.01 +smooth + +8.536141322908046 +47.35042036594908 +428.92995321692547 +-206.44410235816886 +76.26386860565353 +0 +120 +absolute + + + +0.01 +smooth + +8.536140430385132 +47.35042010064935 +428.9299541462512 +-206.467075568124 +76.28370468786908 +0 +120 +absolute + + + +0.01 +smooth + +8.53613953932755 +47.350419835165106 +428.92995508770684 +-206.48985240043808 +76.30364755959098 +0 +120 +absolute + + + +0.01 +smooth + +8.536138649756673 +47.35041956950416 +428.92995604068466 +-206.51241896684652 +76.3236955191253 +0 +120 +absolute + + + +0.01 +smooth + +8.536137761693864 +47.350419303674265 +428.9299570045768 +-206.53476137908478 +76.34384686477804 +0 +120 +absolute + + + +0.01 +smooth + +8.536136875160496 +47.3504190376832 +428.92995797877563 +-206.55686574888836 +76.36409989485526 +0 +120 +absolute + + + +0.01 +smooth + +8.536135990177938 +47.35041877153877 +428.92995896267325 +-206.57871818799268 +76.38445290766299 +0 +120 +absolute + + + +0.01 +smooth + +8.536135106767551 +47.35041850524871 +428.92995995566156 +-206.60030480813305 +76.40490420150726 +0 +120 +absolute + + + +0.01 +smooth + +8.536134224950716 +47.35041823882084 +428.9299609571334 +-206.62161172104504 +76.4254520746941 +0 +120 +absolute + + + +0.01 +smooth + +8.536133344748796 +47.35041797226294 +428.92996196648056 +-206.64262503846413 +76.44609482552958 +0 +120 +absolute + + + +0.01 +smooth + +8.536132466183162 +47.35041770558277 +428.9299629830953 +-206.66333087212567 +76.46683075231972 +0 +120 +absolute + + + +0.01 +smooth + +8.536131589275179 +47.3504174387881 +428.9299640063699 +-206.68371533376512 +76.48765815337053 +0 +120 +absolute + + + +0.01 +smooth + +8.53613071404622 +47.35041717188675 +428.92996503569645 +-206.70376453511787 +76.50857532698805 +0 +120 +absolute + + + +0.01 +smooth + +8.53612984051765 +47.35041690488645 +428.92996607046734 +-206.72346458791947 +76.52958057147836 +0 +120 +absolute + + + +0.01 +smooth + +8.536128968710841 +47.350416637795014 +428.92996711007453 +-206.7428016039052 +76.55067218514746 +0 +120 +absolute + + + +0.01 +smooth + +8.536128098647161 +47.35041637062021 +428.9299681539104 +-206.7617616948107 +76.57184846630139 +0 +120 +absolute + + + +0.01 +smooth + +8.53612723034798 +47.35041610336982 +428.92996920136716 +-206.78033097237127 +76.59310771324618 +0 +120 +absolute + + + +0.01 +smooth + +8.536126363834663 +47.35041583605162 +428.92997025183695 +-206.79849554832236 +76.61444822428787 +0 +120 +absolute + + + +0.01 +smooth + +8.536125499128584 +47.35041556867339 +428.9299713047119 +-206.81624153439944 +76.63586829773251 +0 +120 +absolute + + + +0.01 +smooth + +8.536124636251108 +47.35041530124292 +428.92997235938435 +-206.83355504233793 +76.65736623188612 +0 +120 +absolute + + + +0.01 +smooth + +8.536123775223606 +47.35041503376797 +428.9299734152465 +-206.85042218387332 +76.67894032505473 +0 +120 +absolute + + + +0.01 +smooth + +8.536122916067448 +47.350414766256335 +428.92997447169046 +-206.86682907074098 +76.7005888755444 +0 +120 +absolute + + + +0.01 +smooth + +8.536122058803999 +47.35041449871579 +428.92997552810846 +-206.88276181467637 +76.72231018166114 +0 +120 +absolute + + + +0.01 +smooth + +8.53612120345463 +47.35041423115412 +428.92997658389277 +-206.89820652741497 +76.74410254171102 +0 +120 +absolute + + + +0.01 +smooth + +8.536120350040713 +47.3504139635791 +428.92997763843556 +-206.91314932069213 +76.76596425400001 +0 +120 +absolute + + + +0.01 +smooth + +8.536119498583613 +47.3504136959985 +428.9299786911291 +-206.9275763062434 +76.78789361683422 +0 +120 +absolute + + + +0.01 +smooth + +8.536118649104697 +47.35041342842011 +428.9299797413654 +-206.94147359580413 +76.80988892851965 +0 +120 +absolute + + + +0.01 +smooth + +8.536117801625341 +47.350413160851716 +428.92998078853685 +-206.95482730110984 +76.83194848736235 +0 +120 +absolute + + + +0.01 +smooth + +8.536116956166907 +47.35041289330108 +428.92998183203565 +-206.96762353389585 +76.85407059166833 +0 +120 +absolute + + + +0.01 +smooth + +8.536116112750767 +47.350412625775995 +428.92998287125386 +-206.97984840589774 +76.87625353974366 +0 +120 +absolute + + + +0.01 +smooth + +8.536115271398291 +47.35041235828423 +428.92998390558387 +-206.99148802885082 +76.89849562989434 +0 +120 +absolute + + + +0.01 +smooth + +8.536114432130844 +47.35041209083358 +428.9299849344177 +-207.00252851449065 +76.92079516042642 +0 +120 +absolute + + + +0.01 +smooth + +8.536113594969798 +47.35041182343181 +428.9299859571477 +-207.0129559745526 +76.94315042964595 +0 +120 +absolute + + + +0.01 +smooth + +8.536112759936522 +47.35041155608671 +428.929986973166 +-207.02275652077208 +76.96555973585895 +0 +120 +absolute + + + +0.01 +smooth + +8.536111927052385 +47.35041128880606 +428.92998798186494 +-207.03191626488456 +76.98802137737147 +0 +120 +absolute + + + +0.01 +smooth + +8.536111096185232 +47.35041102155211 +428.9299889853045 +-207.04053625326083 +77.01054641988104 +0 +120 +absolute + + + +0.01 +smooth + +8.536110266725252 +47.35041075414578 +428.92998999397 +-207.04907822385542 +77.03318559779724 +0 +120 +absolute + + + +0.01 +smooth + +8.53610943862551 +47.35041048657491 +428.9299910087245 +-207.05758648149117 +77.05594276505694 +0 +120 +absolute + + + +0.01 +smooth + +8.536108611907302 +47.350410218847635 +428.92999202925336 +-207.0660544437536 +77.07881609794693 +0 +120 +absolute + + + +0.01 +smooth + +8.53610778659191 +47.35040995097208 +428.929993055241 +-207.07447552822794 +77.10180377275393 +0 +120 +absolute + + + +0.01 +smooth + +8.536106962700632 +47.35040968295637 +428.9299940863731 +-207.08284315249986 +77.1249039657648 +0 +120 +absolute + + + +0.01 +smooth + +8.53610614025476 +47.350409414808595 +428.92999512233416 +-207.09115073415464 +77.14811485326626 +0 +120 +absolute + + + +0.01 +smooth + +8.536105319275588 +47.35040914653688 +428.9299961628096 +-207.09939169077765 +77.1714346115451 +0 +120 +absolute + + + +0.01 +smooth + +8.53610449978441 +47.350408878149395 +428.92999720748423 +-207.10755943995446 +77.1948614168881 +0 +120 +absolute + + + +0.01 +smooth + +8.536103681802512 +47.3504086096542 +428.9299982560432 +-207.11564739927044 +77.21839344558208 +0 +120 +absolute + + + +0.01 +smooth + +8.53610286535119 +47.35040834105942 +428.9299993081715 +-207.12364898631097 +77.24202887391375 +0 +120 +absolute + + + +0.01 +smooth + +8.536102050451738 +47.35040807237321 +428.9300003635543 +-207.1315576186616 +77.26576587816993 +0 +120 +absolute + + + +0.01 +smooth + +8.536101237125441 +47.35040780360365 +428.93000142187634 +-207.13936671390746 +77.28960263463739 +0 +120 +absolute + + + +0.01 +smooth + +8.536100425393602 +47.350407534758865 +428.93000248282294 +-207.14706968963432 +77.31353731960291 +0 +120 +absolute + + + +0.01 +smooth + +8.53609961527751 +47.35040726584701 +428.9300035460792 +-207.1546599634275 +77.33756810935328 +0 +120 +absolute + + + +0.01 +smooth + +8.536098806798455 +47.35040699687617 +428.93000461132993 +-207.1621309528723 +77.36169318017528 +0 +120 +absolute + + + +0.01 +smooth + +8.536097999977729 +47.35040672785447 +428.9300056782602 +-207.1694760755543 +77.38591070835565 +0 +120 +absolute + + + +0.01 +smooth + +8.536097194836625 +47.350406458790026 +428.93000674655514 +-207.1766887490588 +77.41021887018121 +0 +120 +absolute + + + +0.01 +smooth + +8.536096391396438 +47.35040618969098 +428.93000781589996 +-207.18376239097134 +77.43461584193872 +0 +120 +absolute + + + +0.01 +smooth + +8.536095589678457 +47.350405920565414 +428.93000888597925 +-207.1906904188772 +77.45909979991497 +0 +120 +absolute + + + +0.01 +smooth + +8.536094789703972 +47.35040565142145 +428.9300099564782 +-207.19746625036188 +77.48366892039671 +0 +120 +absolute + + + +0.01 +smooth + +8.536093991494283 +47.35040538226723 +428.9300110270821 +-207.20408330301086 +77.50832137967075 +0 +120 +absolute + + + +0.01 +smooth + +8.53609319507068 +47.350405113110895 +428.93001209747604 +-207.21053499440956 +77.5330553540239 +0 +120 +absolute + + + +0.01 +smooth + +8.536092400454452 +47.35040484396049 +428.93001316734467 +-207.21681474214324 +77.55786901974285 +0 +120 +absolute + + + +0.01 +smooth + +8.536091607666892 +47.35040457482422 +428.9300142363732 +-207.22291596379756 +77.58276055311443 +0 +120 +absolute + + + +0.01 +smooth + +8.536090816729295 +47.35040430571012 +428.9300153042468 +-207.22883207695776 +77.60772813042544 +0 +120 +absolute + + + +0.01 +smooth + +8.53609002766295 +47.35040403662638 +428.9300163706504 +-207.23455649920933 +77.63276992796263 +0 +120 +absolute + + + +0.01 +smooth + +8.536089240489154 +47.35040376758107 +428.9300174352689 +-207.24008264813773 +77.65788412201277 +0 +120 +absolute + + + +0.01 +smooth + +8.536088455229198 +47.35040349858234 +428.93001849778756 +-207.24540394132833 +77.68306888886269 +0 +120 +absolute + + + +0.01 +smooth + +8.53608767190437 +47.350403229638296 +428.93001955789134 +-207.2505137963666 +77.70832240479909 +0 +120 +absolute + + + +0.01 +smooth + +8.536086890535968 +47.35040296075705 +428.9300206152653 +-207.2554056308379 +77.73364284610882 +0 +120 +absolute + + + +0.01 +smooth + +8.53608611114528 +47.35040269194673 +428.93002166959445 +-207.26007286232777 +77.75902838907862 +0 +120 +absolute + + + +0.01 +smooth + +8.5360853337536 +47.350402423215456 +428.9300227205639 +-207.26450890842148 +77.78447720999526 +0 +120 +absolute + + + +0.01 +smooth + +8.536084558382225 +47.35040215457134 +428.9300237678586 +-207.26870718670455 +77.80998748514557 +0 +120 +absolute + + + +0.01 +smooth + +8.53608378505244 +47.35040188602251 +428.93002481116366 +-207.2726611147624 +77.83555739081626 +0 +120 +absolute + + + +0.01 +smooth + +8.536083013785541 +47.35040161757708 +428.93002585016404 +-207.27636411018045 +77.86118510329416 +0 +120 +absolute + + + +0.01 +smooth + +8.53608224460282 +47.35040134924316 +428.9300268845449 +-207.27980959054412 +77.88686879886606 +0 +120 +absolute + + + +0.01 +smooth + +8.536081477525569 +47.35040108102888 +428.9300279139911 +-207.28299097343876 +77.91260665381868 +0 +120 +absolute + + + +0.01 +smooth + +8.53608071257508 +47.350400812942354 +428.9300289381879 +-207.28590167644992 +77.93839684443887 +0 +120 +absolute + + + +0.01 +smooth + +8.536079949772645 +47.3504005449917 +428.9300299568201 +-207.288535117163 +77.96423754701334 +0 +120 +absolute + + + +0.01 +smooth + +8.536079189139562 +47.35040027718506 +428.930030969573 +-207.29088471316334 +77.9901269378289 +0 +120 +absolute + + + +0.01 +smooth + +8.536078430697113 +47.35040000953052 +428.93003197613143 +-207.2929438820364 +78.01606319317236 +0 +120 +absolute + + + +0.01 +smooth + +8.5360776744666 +47.35039974203622 +428.9300329761805 +-207.2947060413677 +78.04204448933044 +0 +120 +absolute + + + +0.01 +smooth + +8.536076920469311 +47.35039947471026 +428.9300339694054 +-207.29616460874254 +78.06806900258995 +0 +120 +absolute + + + +0.01 +smooth + +8.536076168726538 +47.350399207560756 +428.9300349554909 +-207.29731300174637 +78.09413490923765 +0 +120 +absolute + + + +0.01 +smooth + +8.536075419259575 +47.35039894059586 +428.9300359341222 +-207.29814463796467 +78.12024038556036 +0 +120 +absolute + + + +0.01 +smooth + +8.536074672089715 +47.350398673823655 +428.93003690498426 +-207.29865293498278 +78.14638360784483 +0 +120 +absolute + + + +0.01 +smooth + +8.536073927238249 +47.350398407252285 +428.9300378677623 +-207.29883131038622 +78.17256275237783 +0 +120 +absolute + + + +0.01 +smooth + +8.536073184306527 +47.3503981407618 +428.93003882634287 +-207.2986402204382 +78.19880763294832 +0 +120 +absolute + + + +0.01 +smooth + +8.536072442837284 +47.35039787421504 +428.93003978525957 +-207.29804586919886 +78.22515239627927 +0 +120 +absolute + + + +0.01 +smooth + +8.536071702850982 +47.35039760762096 +428.93004074429916 +-207.2970576620394 +78.25159515006732 +0 +120 +absolute + + + +0.01 +smooth + +8.536070964368605 +47.35039734098867 +428.93004170324326 +-207.29568504649288 +78.27813396437053 +0 +120 +absolute + + + +0.01 +smooth + +8.53607022741111 +47.35039707432721 +428.9300426618732 +-207.29393747009183 +78.30476690924682 +0 +120 +absolute + + + +0.01 +smooth + +8.53606949199949 +47.350396807645744 +428.930043619971 +-207.2918243803694 +78.33149205475429 +0 +120 +absolute + + + +0.01 +smooth + +8.536068758154698 +47.350396540953305 +428.93004457731814 +-207.28935522485818 +78.35830747095095 +0 +120 +absolute + + + +0.01 +smooth + +8.536068025897716 +47.35039627425902 +428.9300455336963 +-207.2865394510911 +78.38521122789476 +0 +120 +absolute + + + +0.01 +smooth + +8.536067295249513 +47.35039600757196 +428.93004648888683 +-207.28338650660103 +78.41220139564379 +0 +120 +absolute + + + +0.01 +smooth + +8.53606656623106 +47.35039574090123 +428.93004744267176 +-207.27990583892074 +78.43927604425608 +0 +120 +absolute + + + +0.01 +smooth + +8.536065838863333 +47.350395474255926 +428.9300483948325 +-207.27610689558315 +78.4664332437896 +0 +120 +absolute + + + +0.01 +smooth + +8.536065113167304 +47.350395207645136 +428.93004934515096 +-207.2719991241211 +78.4936710643024 +0 +120 +absolute + + + +0.01 +smooth + +8.53606438916394 +47.35039494107793 +428.9300502934083 +-207.26759197206715 +78.52098757585246 +0 +120 +absolute + + + +0.01 +smooth + +8.536063666874217 +47.350394674563454 +428.9300512393866 +-207.2628948869545 +78.54838084849784 +0 +120 +absolute + + + +0.01 +smooth + +8.536062946319111 +47.35039440811076 +428.93005218286737 +-207.25791731631588 +78.57584895229658 +0 +120 +absolute + + + +0.01 +smooth + +8.536062227519587 +47.35039414172895 +428.9300531236322 +-207.25266870768408 +78.60338995730666 +0 +120 +absolute + + + +0.01 +smooth + +8.536061510496623 +47.35039387542712 +428.9300540614626 +-207.2471585085919 +78.63100193358609 +0 +120 +absolute + + + +0.01 +smooth + +8.536060795271187 +47.35039360921436 +428.9300549961405 +-207.24139616657223 +78.65868295119292 +0 +120 +absolute + + + +0.01 +smooth + +8.536060081864255 +47.35039334309977 +428.9300559274473 +-207.2353911291579 +78.68643108018516 +0 +120 +absolute + + + +0.01 +smooth + +8.536059370296794 +47.35039307709243 +428.9300568551647 +-207.22915284388174 +78.7142443906208 +0 +120 +absolute + + + +0.01 +smooth + +8.536058660589777 +47.35039281120142 +428.9300577790742 +-207.2226907582765 +78.74212095255788 +0 +120 +absolute + + + +0.01 +smooth + +8.536057952764182 +47.35039254543586 +428.93005869895774 +-207.21601431987517 +78.77005883605445 +0 +120 +absolute + + + +0.01 +smooth + +8.536057246840977 +47.35039227980486 +428.93005961459687 +-207.2091329762106 +78.7980561111685 +0 +120 +absolute + + + +0.01 +smooth + +8.536056542841136 +47.350392014317464 +428.9300605257731 +-207.2020561748155 +78.82611084795808 +0 +120 +absolute + + + +0.01 +smooth + +8.53605584078563 +47.350391748982794 +428.9300614322682 +-207.19479336322274 +78.85422111648116 +0 +120 +absolute + + + +0.01 +smooth + +8.53605514069543 +47.350391483809936 +428.9300623338635 +-207.18735398896513 +78.88238498679577 +0 +120 +absolute + + + +0.01 +smooth + +8.53605444259151 +47.350391218807985 +428.930063230341 +-207.1797474995756 +78.91060052895996 +0 +120 +absolute + + + +0.01 +smooth + +8.536053746494842 +47.35039095398603 +428.9300641214823 +-207.17198334258688 +78.93886581303173 +0 +120 +absolute + + + +0.01 +smooth + +8.536053052426396 +47.35039068935316 +428.93006500706883 +-207.1640709655319 +78.9671789090691 +0 +120 +absolute + + + +0.01 +smooth + +8.53605236040715 +47.35039042491849 +428.9300658868824 +-207.1560198159434 +78.99553788713008 +0 +120 +absolute + + + +0.01 +smooth + +8.536051670458068 +47.35039016069108 +428.93006676070445 +-207.1478393413543 +79.02394081727272 +0 +120 +absolute + + + +0.01 +smooth + +8.53605098260013 +47.35038989668004 +428.9300676283168 +-207.1395389892974 +79.052385769555 +0 +120 +absolute + + + +0.01 +smooth + +8.536050296854302 +47.350389632894476 +428.9300684895011 +-207.13112820730555 +79.08087081403497 +0 +120 +absolute + + + +0.01 +smooth + +8.536049613241563 +47.35038936934346 +428.9300693440389 +-207.12261644291155 +79.10939402077065 +0 +120 +absolute + + + +0.01 +smooth + +8.536048931782876 +47.35038910603609 +428.93007019171193 +-207.11401314364826 +79.13795345982004 +0 +120 +absolute + + + +0.01 +smooth + +8.53604825249922 +47.35038884298146 +428.9300710323016 +-207.10532775704854 +79.16654720124117 +0 +120 +absolute + + + +0.01 +smooth + +8.536047575411567 +47.350388580188664 +428.93007186558975 +-207.09656973064523 +79.19517331509205 +0 +120 +absolute + + + +0.01 +smooth + +8.536046900540889 +47.3503883176668 +428.93007269135796 +-207.08774851197106 +79.2238298714307 +0 +120 +absolute + + + +0.01 +smooth + +8.536046227908153 +47.35038805542495 +428.93007350938797 +-207.078873548559 +79.25251494031517 +0 +120 +absolute + + + +0.01 +smooth + +8.536045557534337 +47.35038779347221 +428.93007431946126 +-207.0699542879418 +79.28122659180345 +0 +120 +absolute + + + +0.01 +smooth + +8.536044889440412 +47.350387531817674 +428.93007512135944 +-207.06100017765232 +79.30996289595356 +0 +120 +absolute + + + +0.01 +smooth + +8.536044223647348 +47.35038727047045 +428.93007591486435 +-207.05202066522344 +79.33872192282354 +0 +120 +absolute + + + +0.01 +smooth + +8.536043560176122 +47.350387009439594 +428.9300766997574 +-207.04302519818793 +79.36750174247138 +0 +120 +absolute + + + +0.01 +smooth + +8.5360428990477 +47.35038674873423 +428.9300774758205 +-207.03402322407865 +79.39630042495511 +0 +120 +absolute + + + +0.01 +smooth + +8.536042240283058 +47.35038648836344 +428.930078242835 +-207.02502419042844 +79.42511604033275 +0 +120 +absolute + + + +0.01 +smooth + +8.536041583903167 +47.350386228336326 +428.9300790005827 +-207.01603754477017 +79.45394665866233 +0 +120 +absolute + + + +0.01 +smooth + +8.536040929929 +47.35038596866196 +428.9300797488452 +-207.0070727346366 +79.48279035000188 +0 +120 +absolute + + + +0.01 +smooth + +8.536040278329192 +47.35038570933188 +428.9300804878657 +-206.99811219578862 +79.51164883552138 +0 +120 +absolute + + + +0.01 +smooth + +8.536039628444266 +47.35038545012687 +428.93008122343673 +-206.9888145550411 +79.54056762094197 +0 +120 +absolute + + + +0.01 +smooth + +8.536038980085525 +47.35038519098678 +428.9300819572149 +-206.97908225133247 +79.56955929079037 +0 +120 +absolute + + + +0.01 +smooth + +8.536038333273595 +47.35038493192193 +428.93008268901315 +-206.96892585376875 +79.59862181794688 +0 +120 +absolute + + + +0.01 +smooth + +8.536037688029094 +47.3503846729426 +428.93008341864373 +-206.95835593145594 +79.62775317529182 +0 +120 +absolute + + + +0.01 +smooth + +8.536037044372648 +47.35038441405912 +428.9300841459197 +-206.94738305349998 +79.65695133570553 +0 +120 +absolute + + + +0.01 +smooth + +8.536036402324878 +47.35038415528176 +428.93008487065333 +-206.9360177890069 +79.68621427206828 +0 +120 +absolute + + + +0.01 +smooth + +8.536035761906406 +47.35038389662081 +428.9300855926571 +-206.92427070708248 +79.71553995726042 +0 +120 +absolute + + + +0.01 +smooth + +8.536035123137854 +47.35038363808662 +428.93008631174416 +-206.91215237683298 +79.74492636416225 +0 +120 +absolute + + + +0.01 +smooth + +8.536034486039844 +47.350383379689426 +428.93008702772653 +-206.8996733673641 +79.77437146565404 +0 +120 +absolute + + + +0.01 +smooth + +8.536033850633 +47.35038312143958 +428.9300877404173 +-206.88684424778202 +79.80387323461616 +0 +120 +absolute + + + +0.01 +smooth + +8.53603321693794 +47.35038286334732 +428.9300884496288 +-206.87367558719254 +79.83342964392888 +0 +120 +absolute + + + +0.01 +smooth + +8.53603258497529 +47.35038260542301 +428.9300891551736 +-206.86017795470184 +79.86303866647256 +0 +120 +absolute + + + +0.01 +smooth + +8.536031954765674 +47.35038234767692 +428.93008985686464 +-206.84636191941573 +79.8926982751275 +0 +120 +absolute + + + +0.01 +smooth + +8.536031326329704 +47.35038209011933 +428.93009055451404 +-206.8322380504402 +79.92240644277393 +0 +120 +absolute + + + +0.01 +smooth + +8.536030699688013 +47.350381832760576 +428.9300912479348 +-206.81781691688127 +79.95216114229228 +0 +120 +absolute + + + +0.01 +smooth + +8.53603007486122 +47.35038157561093 +428.93009193693933 +-206.80310908784483 +79.98196034656276 +0 +120 +absolute + + + +0.01 +smooth + +8.536029451869942 +47.3503813186807 +428.9300926213403 +-206.78812513243696 +80.01180202846574 +0 +120 +absolute + + + +0.01 +smooth + +8.53602883073481 +47.350381061980194 +428.93009330095043 +-206.77287561976362 +80.04168416088154 +0 +120 +absolute + + + +0.01 +smooth + +8.53602821147644 +47.35038080551968 +428.9300939755821 +-206.7573711189307 +80.07160471669043 +0 +120 +absolute + + + +0.01 +smooth + +8.536027594115458 +47.35038054930949 +428.93009464504826 +-206.74162219904426 +80.10156166877276 +0 +120 +absolute + + + +0.01 +smooth + +8.53602697867248 +47.350380293359905 +428.93009530916106 +-206.72563942921022 +80.1315529900088 +0 +120 +absolute + + + +0.01 +smooth + +8.536026365168135 +47.35038003768123 +428.9300959677334 +-206.70943337853458 +80.1615766532789 +0 +120 +absolute + + + +0.01 +smooth + +8.536025753623042 +47.35037978228376 +428.930096620578 +-206.69301461612326 +80.19163063146335 +0 +120 +absolute + + + +0.01 +smooth + +8.536025144057824 +47.350379527177815 +428.9300972675072 +-206.67639371108237 +80.22171289744247 +0 +120 +absolute + + + +0.01 +smooth + +8.5360245364931 +47.35037927237366 +428.93009790833383 +-206.65958123251772 +80.25182142409659 +0 +120 +absolute + + + +0.01 +smooth + +8.536023930949497 +47.35037901788162 +428.9300985428704 +-206.64258774953535 +80.28195418430599 +0 +120 +absolute + + + +0.01 +smooth + +8.536023327447634 +47.350378763711966 +428.93009917092934 +-206.62542383124122 +80.31210915095097 +0 +120 +absolute + + + +0.01 +smooth + +8.536022726008134 +47.35037850987503 +428.9300997923235 +-206.60810004674133 +80.34228429691187 +0 +120 +absolute + + + +0.01 +smooth + +8.536022126651618 +47.35037825638109 +428.93010040686545 +-206.59062696514164 +80.372477595069 +0 +120 +absolute + + + +0.01 +smooth + +8.53602152939871 +47.35037800324044 +428.9301010143678 +-206.57301515554812 +80.40268701830267 +0 +120 +absolute + + + +0.01 +smooth + +8.536020934270033 +47.350377750463394 +428.93010161464304 +-206.55527518706674 +80.4329105394932 +0 +120 +absolute + + + +0.01 +smooth + +8.536020341286207 +47.35037749806025 +428.93010220750386 +-206.5374176288035 +80.46314613152086 +0 +120 +absolute + + + +0.01 +smooth + +8.536019750467853 +47.3503772460413 +428.930102792763 +-206.5194530498643 +80.49339176726602 +0 +120 +absolute + + + +0.01 +smooth + +8.536019161835595 +47.350376994416834 +428.9301033702329 +-206.50139201935517 +80.52364541960895 +0 +120 +absolute + + + +0.01 +smooth + +8.536018575410056 +47.350376743197174 +428.9301039397261 +-206.48324510638207 +80.55390506142996 +0 +120 +absolute + + + +0.01 +smooth + +8.536017991211857 +47.3503764923926 +428.93010450105555 +-206.465022880051 +80.5841686656094 +0 +120 +absolute + + + +0.01 +smooth + +8.536017409261621 +47.350376242013425 +428.93010505403345 +-206.44673590946792 +80.61443420502755 +0 +120 +absolute + + + +0.01 +smooth + +8.536016829579967 +47.35037599206993 +428.93010559847266 +-206.42839476373882 +80.64469965256471 +0 +120 +absolute + + + +0.01 +smooth + +8.53601625218752 +47.350375742572425 +428.93010613418573 +-206.41001001196958 +80.67496298110123 +0 +120 +absolute + + + +0.01 +smooth + +8.536015677104904 +47.3503754935312 +428.9301066609853 +-206.39159222326623 +80.7052221635174 +0 +120 +absolute + + + +0.01 +smooth + +8.536015104352737 +47.350375244956574 +428.93010717868384 +-206.37315196673478 +80.73547517269353 +0 +120 +absolute + + + +0.01 +smooth + +8.536014533951644 +47.350374996858825 +428.93010768709416 +-206.35469981148114 +80.76571998150995 +0 +120 +absolute + + + +0.01 +smooth + +8.536013965922244 +47.35037474924827 +428.93010818602863 +-206.3362463266114 +80.79595456284693 +0 +120 +absolute + + + +0.01 +smooth + +8.536013400285162 +47.35037450213519 +428.9301086753002 +-206.31780208123138 +80.82617688958481 +0 +120 +absolute + + + +0.01 +smooth + +8.53601283706102 +47.350374255529886 +428.93010915472115 +-206.29937764444713 +80.85638493460391 +0 +120 +absolute + + + +0.01 +smooth + +8.536012276270442 +47.350374009442675 +428.9301096241042 +-206.2809835853646 +80.88657667078454 +0 +120 +absolute + + + +0.01 +smooth + +8.536011717934045 +47.35037376388383 +428.9301100832621 +-206.26263047308979 +80.91675007100697 +0 +120 +absolute + + + +0.01 +smooth + +8.536011161830636 +47.35037351877262 +428.9301105343726 +-206.2442532147279 +80.94691930132966 +0 +120 +absolute + + + +0.01 +smooth + +8.536010607279982 +47.35037327385604 +428.93011098409164 +-206.22564083659773 +80.97712921500222 +0 +120 +absolute + + + +0.01 +smooth + +8.536010054258085 +47.35037302912888 +428.9301114326412 +-206.20678535346553 +81.00738066345735 +0 +120 +absolute + + + +0.01 +smooth + +8.53600950278537 +47.3503727846026 +428.9301118798088 +-206.18769260627727 +81.03767152241313 +0 +120 +absolute + + + +0.01 +smooth + +8.536008952882266 +47.35037254028871 +428.93011232538225 +-206.16836843597903 +81.06799966758761 +0 +120 +absolute + + + +0.01 +smooth + +8.536008404569182 +47.35037229619869 +428.9301127691486 +-206.1488186835167 +81.09836297469886 +0 +120 +absolute + + + +0.01 +smooth + +8.536007857866549 +47.350372052344035 +428.9301132108956 +-206.12904918983617 +81.1287593194649 +0 +120 +absolute + + + +0.01 +smooth + +8.536007312794785 +47.350371808736256 +428.93011365041065 +-206.10906579588357 +81.15918657760385 +0 +120 +absolute + + + +0.01 +smooth + +8.536006769374314 +47.35037156538682 +428.93011408748123 +-206.08887434260495 +81.18964262483374 +0 +120 +absolute + + + +0.01 +smooth + +8.53600622762556 +47.350371322307254 +428.93011452189495 +-206.06848067094614 +81.22012533687261 +0 +120 +absolute + + + +0.01 +smooth + +8.536005687568942 +47.35037107950902 +428.9301149534391 +-206.04789062185316 +81.25063258943858 +0 +120 +absolute + + + +0.01 +smooth + +8.536005149224883 +47.350370837003624 +428.9301153819013 +-206.02711003627206 +81.28116225824967 +0 +120 +absolute + + + +0.01 +smooth + +8.536004612613812 +47.35037059480258 +428.9301158070691 +-206.00614475514888 +81.31171221902397 +0 +120 +absolute + + + +0.01 +smooth + +8.536004077756138 +47.350370352917324 +428.9301162287298 +-205.98500061942943 +81.3422803474795 +0 +120 +absolute + + + +0.01 +smooth + +8.536003544672294 +47.35037011135942 +428.93011664667097 +-205.96368347005983 +81.37286451933436 +0 +120 +absolute + + + +0.01 +smooth + +8.536003013382697 +47.3503698701403 +428.93011706068006 +-205.942199147986 +81.40346261030662 +0 +120 +absolute + + + +0.01 +smooth + +8.53600248390777 +47.35036962927149 +428.93011747054464 +-205.92055349415392 +81.43407249611427 +0 +120 +absolute + + + +0.01 +smooth + +8.536001956267938 +47.350369388764484 +428.9301178760521 +-205.89875234950966 +81.46469205247547 +0 +120 +absolute + + + +0.01 +smooth + +8.536001430483616 +47.35036914863076 +428.9301182769899 +-205.87680155499916 +81.49531915510819 +0 +120 +absolute + + + +0.01 +smooth + +8.536000906575236 +47.350368908881826 +428.9301186731457 +-205.85470695156835 +81.52595167973057 +0 +120 +absolute + + + +0.01 +smooth + +8.536000384563218 +47.35036866952918 +428.930119064307 +-205.83247438016338 +81.55658750206064 +0 +120 +absolute + + + +0.01 +smooth + +8.535999864467977 +47.35036843058429 +428.93011945026103 +-205.81010968173004 +81.58722449781641 +0 +120 +absolute + + + +0.01 +smooth + +8.535999346309941 +47.35036819205867 +428.9301198307954 +-205.7876186972145 +81.61786054271603 +0 +120 +absolute + + + +0.01 +smooth + +8.53599883010953 +47.35036795396381 +428.9301202056976 +-205.76500726756257 +81.64849351247753 +0 +120 +absolute + + + +0.01 +smooth + +8.53599831588717 +47.350367716311204 +428.93012057475516 +-205.74228123372032 +81.67912128281895 +0 +120 +absolute + + + +0.01 +smooth + +8.535997803663278 +47.350367479112336 +428.93012093775553 +-205.7194464366338 +81.70974172945839 +0 +120 +absolute + + + +0.01 +smooth + +8.535997293458276 +47.35036724237872 +428.9301212944861 +-205.6965087172489 +81.74035272811386 +0 +120 +absolute + + + +0.01 +smooth + +8.535996785292594 +47.350367006121814 +428.9301216447346 +-205.67347391651163 +81.77095215450345 +0 +120 +absolute + + + +0.01 +smooth + +8.535996279186646 +47.35036677035314 +428.93012198828836 +-205.650347875368 +81.80153788434524 +0 +120 +absolute + + + +0.01 +smooth + +8.53599577516086 +47.35036653508419 +428.93012232493476 +-205.627136434764 +81.83210779335725 +0 +120 +absolute + + + +0.01 +smooth + +8.535995273235653 +47.350366300326456 +428.9301226544615 +-205.60384543564558 +81.86265975725759 +0 +120 +absolute + + + +0.01 +smooth + +8.53599477343145 +47.35036606609141 +428.9301229766559 +-205.5804807189588 +81.89319165176428 +0 +120 +absolute + + + +0.01 +smooth + +8.535994275768672 +47.35036583239058 +428.93012329130556 +-205.5570481256496 +81.9237013525954 +0 +120 +absolute + + + +0.01 +smooth + +8.535993780267741 +47.35036559923543 +428.93012359819784 +-205.5335534966639 +81.95418673546902 +0 +120 +absolute + + + +0.01 +smooth + +8.535993286949083 +47.350365366637476 +428.9301238971203 +-205.5100026729478 +81.9846456761032 +0 +120 +absolute + + + +0.01 +smooth + +8.535992795833117 +47.35036513460818 +428.93012418786054 +-205.48640149544724 +82.01507605021597 +0 +120 +absolute + + + +0.01 +smooth + +8.535992306940264 +47.35036490315908 +428.9301244702058 +-205.46275580510823 +82.04547573352545 +0 +120 +absolute + + + +0.01 +smooth + +8.535991820290949 +47.35036467230164 +428.9301247439438 +-205.4390714428767 +82.07584260174963 +0 +120 +absolute + + + +0.01 +smooth + +8.535991335905592 +47.35036444204735 +428.9301250088618 +-205.41535424969868 +82.10617453060664 +0 +120 +absolute + + + +0.01 +smooth + +8.535990853804616 +47.35036421240771 +428.9301252647475 +-205.39161006652017 +82.13646939581449 +0 +120 +absolute + + + +0.01 +smooth + +8.535990374008442 +47.35036398339422 +428.9301255113883 +-205.36784473428713 +82.16672507309127 +0 +120 +absolute + + + +0.01 +smooth + +8.535989896537497 +47.35036375501837 +428.93012574857164 +-205.34406409394558 +82.19693943815503 +0 +120 +absolute + + + +0.01 +smooth + +8.535989421412197 +47.350363527291655 +428.930125976085 +-205.3202739864414 +82.22711036672385 +0 +120 +absolute + + + +0.01 +smooth + +8.53598894865297 +47.35036330022556 +428.930126193716 +-205.29648025272073 +82.25723573451576 +0 +120 +absolute + + + +0.01 +smooth + +8.535988478280231 +47.35036307383158 +428.930126401252 +-205.27268873372947 +82.28731341724885 +0 +120 +absolute + + + +0.01 +smooth + +8.535988010314409 +47.35036284812123 +428.93012659848046 +-205.24890527041362 +82.31734129064118 +0 +120 +absolute + + + +0.01 +smooth + +8.535987544775923 +47.350362623105966 +428.93012678518903 +-205.2251357037192 +82.34731723041082 +0 +120 +absolute + + + +0.01 +smooth + +8.535987081682887 +47.350362398796335 +428.93012696118916 +-205.20138549469397 +82.37723926766049 +0 +120 +absolute + + + +0.01 +smooth + +8.535986620472588 +47.350362174958356 +428.93012713236084 +-205.17756406962357 +82.40714457011013 +0 +120 +absolute + + + +0.01 +smooth + +8.535986160713723 +47.3503619514141 +428.9301273032591 +-205.1536014551271 +82.43706137725472 +0 +120 +absolute + + + +0.01 +smooth + +8.535985702426785 +47.35036172817619 +428.9301274737376 +-205.12950190783985 +82.46698745762777 +0 +120 +absolute + + + +0.01 +smooth + +8.535985245632268 +47.35036150525722 +428.9301276436506 +-205.10526968439706 +82.49692057976284 +0 +120 +absolute + + + +0.01 +smooth + +8.535984790350655 +47.35036128266974 +428.93012781285205 +-205.08090904143387 +82.5268585121935 +0 +120 +absolute + + + +0.01 +smooth + +8.535984336602437 +47.35036106042635 +428.9301279811957 +-205.05642423558558 +82.55679902345328 +0 +120 +absolute + + + +0.01 +smooth + +8.535983884408108 +47.35036083853968 +428.93012814853563 +-205.03181952348743 +82.58673988207579 +0 +120 +absolute + + + +0.01 +smooth + +8.535983433788154 +47.35036061702227 +428.93012831472583 +-205.0070991617746 +82.6166788565945 +0 +120 +absolute + + + +0.01 +smooth + +8.535982984763066 +47.350360395886746 +428.93012847962024 +-204.98226740708236 +82.64661371554305 +0 +120 +absolute + + + +0.01 +smooth + +8.535982537353334 +47.35036017514569 +428.930128643073 +-204.95732851604598 +82.67654222745496 +0 +120 +absolute + + + +0.01 +smooth + +8.535982091579447 +47.35035995481168 +428.93012880493797 +-204.9322867453006 +82.70646216086377 +0 +120 +absolute + + + +0.01 +smooth + +8.535981647461897 +47.350359734897324 +428.93012896506923 +-204.90714635148152 +82.73637128430305 +0 +120 +absolute + + + +0.01 +smooth + +8.535981205021178 +47.350359515415214 +428.9301291233206 +-204.88191159122405 +82.76626736630644 +0 +120 +absolute + + + +0.01 +smooth + +8.535980764277765 +47.3503592963779 +428.9301292795461 +-204.85658672116318 +82.79614817540734 +0 +120 +absolute + + + +0.01 +smooth + +8.535980325252162 +47.35035907779804 +428.93012943359986 +-204.8311759979344 +82.82601148013939 +0 +120 +absolute + + + +0.01 +smooth + +8.535979887964855 +47.35035885968816 +428.9301295853356 +-204.80568367817276 +82.85585504903614 +0 +120 +absolute + + + +0.01 +smooth + +8.53597945243633 +47.3503586420609 +428.9301297346075 +-204.7801140185136 +82.88567665063113 +0 +120 +absolute + + + +0.01 +smooth + +8.53597901868708 +47.3503584249288 +428.9301298812694 +-204.75447127559204 +82.91547405345796 +0 +120 +absolute + + + +0.01 +smooth + +8.535978586737595 +47.3503582083045 +428.9301300251754 +-204.72875970604346 +82.94524502605015 +0 +120 +absolute + + + +0.01 +smooth + +8.535978156608365 +47.35035799220057 +428.93013016617954 +-204.70298356650304 +82.97498733694123 +0 +120 +absolute + + + +0.01 +smooth + +8.535977728319883 +47.35035777662961 +428.9301303041359 +-204.677147113606 +83.00469875466484 +0 +120 +absolute + + + +0.01 +smooth + +8.53597730189263 +47.35035756160417 +428.9301304388979 +-204.65125460398747 +83.03437704775445 +0 +120 +absolute + + + +0.01 +smooth + +8.535976877347103 +47.35035734713689 +428.93013057032 +-204.62531029428283 +83.06401998474367 +0 +120 +absolute + + + +0.01 +smooth + +8.535976454703789 +47.35035713324036 +428.9301306982561 +-204.59931844112725 +83.093625334166 +0 +120 +absolute + + + +0.01 +smooth + +8.535976033983179 +47.35035691992712 +428.93013082256005 +-204.573283301156 +83.12319086455506 +0 +120 +absolute + + + +0.01 +smooth + +8.53597561520576 +47.35035670720981 +428.930130943086 +-204.54720913100422 +83.15271434444439 +0 +120 +absolute + + + +0.01 +smooth + +8.535975198392029 +47.350356495100996 +428.9301310596878 +-204.52110018730724 +83.1821935423675 +0 +120 +absolute + + + +0.01 +smooth + +8.53597478356247 +47.35035628361329 +428.93013117221955 +-204.49496072670024 +83.21162622685799 +0 +120 +absolute + + + +0.01 +smooth + +8.535974370737572 +47.35035607275925 +428.9301312805352 +-204.4687950058185 +83.2410101664494 +0 +120 +absolute + + + +0.01 +smooth + +8.535973959937827 +47.35035586255149 +428.93013138448856 +-204.4426072812972 +83.27034312967531 +0 +120 +absolute + + + +0.01 +smooth + +8.535973551183726 +47.350355653002595 +428.9301314839338 +-204.4164018097716 +83.29962288506927 +0 +120 +absolute + + + +0.01 +smooth + +8.535973144495758 +47.35035544412517 +428.93013157872485 +-204.39018284787693 +83.32884720116479 +0 +120 +absolute + + + +0.01 +smooth + +8.535972739894412 +47.35035523593177 +428.93013166871566 +-204.36395465224837 +83.35801384649548 +0 +120 +absolute + + + +0.01 +smooth + +8.535972337400178 +47.35035502843502 +428.93013175376035 +-204.33772147952118 +83.38712058959487 +0 +120 +absolute + + + +0.01 +smooth + +8.535971937033544 +47.35035482164749 +428.9301318337126 +-204.3114875863307 +83.41616519899651 +0 +120 +absolute + + + +0.01 +smooth + +8.535971538815003 +47.350354615581786 +428.9301319084266 +-204.285257229312 +83.445145443234 +0 +120 +absolute + + + +0.01 +smooth + +8.535971142765046 +47.35035441025049 +428.9301319777564 +-204.25903466510042 +83.47405909084083 +0 +120 +absolute + + + +0.01 +smooth + +8.535970748904159 +47.35035420566619 +428.9301320415558 +-204.23282415033117 +83.50290391035058 +0 +120 +absolute + + + +0.01 +smooth + +8.535970357252832 +47.35035400184148 +428.93013209967893 +-204.2066299416394 +83.53167767029686 +0 +120 +absolute + + + +0.01 +smooth + +8.535969967831559 +47.35035379878895 +428.93013215197965 +-204.18045629566046 +83.56037813921316 +0 +120 +absolute + + + +0.01 +smooth + +8.535969580660826 +47.35035359652119 +428.930132198312 +-204.15430746902953 +83.58900308563304 +0 +120 +absolute + + + +0.01 +smooth + +8.535969195761123 +47.35035339505079 +428.93013223853 +-204.12818771838184 +83.61755027809009 +0 +120 +absolute + + + +0.01 +smooth + +8.535968813152941 +47.35035319439034 +428.9301322724875 +-204.10210130035261 +83.64601748511785 +0 +120 +absolute + + + +0.01 +smooth + +8.53596843285677 +47.35035299455244 +428.9301323000387 +-204.0760524715771 +83.67440247524989 +0 +120 +absolute + + + +0.01 +smooth + +8.5359680548931 +47.350352795549654 +428.9301323210372 +-204.05004548869056 +83.70270301701973 +0 +120 +absolute + + + +0.01 +smooth + +8.535967679282418 +47.350352597394604 +428.9301323353374 +-204.0240846083281 +83.73091687896094 +0 +120 +absolute + + + +0.01 +smooth + +8.535967306045219 +47.350352400099865 +428.9301323427931 +-203.9981740871251 +83.7590418296071 +0 +120 +absolute + + + +0.01 +smooth + +8.535966935099147 +47.35035220362996 +428.93013234358233 +-203.9723064438386 +83.7870829493526 +0 +120 +absolute + + + +0.01 +smooth + +8.535966565648161 +47.35035200761601 +428.93013234021083 +-203.94639250110745 +83.81509602573558 +0 +120 +absolute + + + +0.01 +smooth + +8.535966197537244 +47.3503518119894 +428.9301323333012 +-203.92041581971876 +83.8430912115147 +0 +120 +absolute + + + +0.01 +smooth + +8.535965830787259 +47.350351616763675 +428.93013232293396 +-203.89437999767682 +83.87106614897726 +0 +120 +absolute + + + +0.01 +smooth + +8.535965465419073 +47.350351421952496 +428.93013230918973 +-203.86828863298604 +83.89901848041072 +0 +120 +absolute + + + +0.01 +smooth + +8.53596510145355 +47.35035122756944 +428.93013229214864 +-203.84214532365067 +83.92694584810238 +0 +120 +absolute + + + +0.01 +smooth + +8.535964738911558 +47.35035103362809 +428.93013227189135 +-203.81595366767496 +83.95484589433963 +0 +120 +absolute + + + +0.01 +smooth + +8.535964377813958 +47.35035084014206 +428.9301322484984 +-203.78971726306332 +83.98271626140983 +0 +120 +absolute + + + +0.01 +smooth + +8.535964018181625 +47.35035064712499 +428.9301322220502 +-203.76343970782005 +84.01055459160041 +0 +120 +absolute + + + +0.01 +smooth + +8.535963660035414 +47.35035045459044 +428.9301321926273 +-203.7371245999495 +84.0383585271987 +0 +120 +absolute + + + +0.01 +smooth + +8.5359633033962 +47.35035026255204 +428.9301321603101 +-203.71077553745596 +84.06612571049209 +0 +120 +absolute + + + +0.01 +smooth + +8.53596294828484 +47.350350071023385 +428.93013212517917 +-203.68439611834378 +84.09385378376793 +0 +120 +absolute + + + +0.01 +smooth + +8.53596259472221 +47.350349880018086 +428.93013208731514 +-203.65798994061737 +84.12154038931367 +0 +120 +absolute + + + +0.01 +smooth + +8.53596224272917 +47.350349689549724 +428.93013204679806 +-203.6315606022808 +84.14918316941659 +0 +120 +absolute + + + +0.01 +smooth + +8.535961892326581 +47.350349499631925 +428.9301320037087 +-203.6051117013386 +84.17677976636408 +0 +120 +absolute + + + +0.01 +smooth + +8.535961543535317 +47.35034931027829 +428.9301319581275 +-203.57864683579498 +84.20432782244355 +0 +120 +absolute + + + +0.01 +smooth + +8.535961196376242 +47.35034912150241 +428.930131910135 +-203.5521696036543 +84.23182497994237 +0 +120 +absolute + + + +0.01 +smooth + +8.53596085087022 +47.35034893331791 +428.9301318598117 +-203.525683602921 +84.25926888114792 +0 +120 +absolute + + + +0.01 +smooth + +8.535960507038116 +47.350348745738366 +428.93013180723773 +-203.49919243159917 +84.28665716834755 +0 +120 +absolute + + + +0.01 +smooth + +8.535960164900796 +47.350348558777405 +428.93013175249405 +-203.47269968769334 +84.31398748382864 +0 +120 +absolute + + + +0.01 +smooth + +8.53595982447913 +47.35034837244863 +428.93013169566103 +-203.44620896920773 +84.3412574698786 +0 +120 +absolute + + + +0.01 +smooth + +8.53595948579398 +47.350348186765636 +428.930131636819 +-203.41972387414665 +84.36846476878476 +0 +120 +absolute + + + +0.01 +smooth + +8.53595914886621 +47.35034800174202 +428.93013157604844 +-203.39324800051443 +84.39560702283447 +0 +120 +absolute + + + +0.01 +smooth + +8.535958813716688 +47.3503478173914 +428.93013151342996 +-203.3667849463155 +84.42268187431517 +0 +120 +absolute + + + +0.01 +smooth + +8.535958480366283 +47.350347633727374 +428.930131449044 +-203.34033830955403 +84.44968696551423 +0 +120 +absolute + + + +0.01 +smooth + +8.535958148835856 +47.35034745076354 +428.9301313829709 +-203.3139116882344 +84.476619938719 +0 +120 +absolute + + + +0.01 +smooth + +8.535957819146274 +47.35034726851352 +428.9301313152914 +-203.287508680361 +84.50347843621684 +0 +120 +absolute + + + +0.01 +smooth + +8.535957491318404 +47.350347086990894 +428.93013124608586 +-203.261132883938 +84.53026010029515 +0 +120 +absolute + + + +0.01 +smooth + +8.535957165373112 +47.350346906209296 +428.9301311754348 +-203.23478789696983 +84.55696257324131 +0 +120 +absolute + + + +0.01 +smooth + +8.535956841331261 +47.350346726182295 +428.93013110341843 +-203.20847731746082 +84.58358349734264 +0 +120 +absolute + + + +0.01 +smooth + +8.53595651921372 +47.35034654692351 +428.93013103011765 +-203.18220474341524 +84.6101205148866 +0 +120 +absolute + + + +0.01 +smooth + +8.535956199041353 +47.35034636844656 +428.93013095561275 +-203.15597377283746 +84.63657126816051 +0 +120 +absolute + + + +0.01 +smooth + +8.535955880835026 +47.35034619076502 +428.9301308799842 +-203.12978800373173 +84.66293339945175 +0 +120 +absolute + + + +0.01 +smooth + +8.535955564615605 +47.350346013892526 +428.93013080331247 +-203.10365103410243 +84.68920455104768 +0 +120 +absolute + + + +0.01 +smooth + +8.535955250403957 +47.35034583784265 +428.93013072567805 +-203.0775664619539 +84.71538236523573 +0 +120 +absolute + + + +0.01 +smooth + +8.535954938220945 +47.35034566262902 +428.93013064716155 +-203.05153788529037 +84.74146448430321 +0 +120 +absolute + + + +0.01 +smooth + +8.535954628087437 +47.350345488265226 +428.9301305678433 +-203.0255689021163 +84.76744855053754 +0 +120 +absolute + + + +0.01 +smooth + +8.535954320024297 +47.35034531476487 +428.9301304878038 +-202.9996631104359 +84.79333220622607 +0 +120 +absolute + + + +0.01 +smooth + +8.535954014052393 +47.35034514214156 +428.93013040712356 +-202.97382410825352 +84.81911309365617 +0 +120 +absolute + + + +0.01 +smooth + +8.53595371019259 +47.35034497040892 +428.93013032588306 +-202.94805549357346 +84.84478885511525 +0 +120 +absolute + + + +0.01 +smooth + +8.535953408465753 +47.35034479958053 +428.9301302441628 +-202.9223608644001 +84.87035713289065 +0 +120 +absolute + + + +0.01 +smooth + +8.535953108892748 +47.35034462966999 +428.9301301620434 +-202.89674381873772 +84.89581556926977 +0 +120 +absolute + + + +0.01 +smooth + +8.535952811494441 +47.35034446069092 +428.930130079605 +-202.87120795459063 +84.92116180653994 +0 +120 +absolute + + + +0.01 +smooth + +8.5359525162917 +47.35034429265692 +428.9301299969285 +-202.84575686996317 +84.94639348698858 +0 +120 +absolute + + + +0.01 +smooth + +8.535952223305387 +47.350344125581586 +428.93012991409387 +-202.82039416285969 +84.97150825290308 +0 +120 +absolute + + + +0.01 +smooth + +8.535951932556369 +47.35034395947853 +428.9301298311821 +-202.79512343128448 +84.99650374657074 +0 +120 +absolute + + + +0.01 +smooth + +8.535951644065513 +47.350343794361336 +428.9301297482734 +-202.76994827324185 +85.02137761027899 +0 +120 +absolute + + + +0.01 +smooth + +8.535951357853682 +47.35034363024364 +428.9301296654483 +-202.74487228673613 +85.04612748631519 +0 +120 +absolute + + + +0.01 +smooth + +8.535951073569795 +47.35034346694749 +428.9301295810369 +-202.7198624762035 +85.07077994348266 +0 +120 +absolute + + + +0.01 +smooth + +8.535950790467913 +47.35034330409199 +428.9301294915453 +-202.69484683867682 +85.09539220316698 +0 +120 +absolute + + + +0.01 +smooth + +8.535950508546298 +47.35034314167974 +428.93012939700986 +-202.66982645192905 +85.11996356501577 +0 +120 +absolute + + + +0.01 +smooth + +8.535950227826461 +47.35034297972532 +428.93012929757697 +-202.64480467926657 +85.1444915197591 +0 +120 +absolute + + + +0.01 +smooth + +8.535949948329915 +47.35034281824335 +428.93012919339327 +-202.61978488399566 +85.168973558127 +0 +120 +absolute + + + +0.01 +smooth + +8.535949670078164 +47.35034265724836 +428.93012908460463 +-202.59477042942243 +85.19340717084944 +0 +120 +absolute + + + +0.01 +smooth + +8.53594939309272 +47.350342496754976 +428.9301289713576 +-202.56976467885335 +85.21778984865652 +0 +120 +absolute + + + +0.01 +smooth + +8.535949117395095 +47.35034233677778 +428.9301288537986 +-202.5447709955947 +85.24211908227828 +0 +120 +absolute + + + +0.01 +smooth + +8.535948843006802 +47.350342177331356 +428.93012873207385 +-202.5197927429527 +85.26639236244473 +0 +120 +absolute + + + +0.01 +smooth + +8.535948569949344 +47.35034201843027 +428.93012860632973 +-202.4948332842337 +85.29060717988588 +0 +120 +absolute + + + +0.01 +smooth + +8.535948298244241 +47.350341860089145 +428.9301284767127 +-202.4698959827439 +85.31476102533183 +0 +120 +absolute + + + +0.01 +smooth + +8.535948027912998 +47.350341702322545 +428.93012834336895 +-202.44498420178968 +85.33885138951254 +0 +120 +absolute + + + +0.01 +smooth + +8.535947758977127 +47.35034154514508 +428.9301282064451 +-202.42010130467747 +85.36287576315812 +0 +120 +absolute + + + +0.01 +smooth + +8.535947491458137 +47.35034138857129 +428.93012806608715 +-202.39525065471327 +85.38683163699852 +0 +120 +absolute + + + +0.01 +smooth + +8.535947225377535 +47.35034123261579 +428.93012792244144 +-202.3704356152035 +85.41071650176382 +0 +120 +absolute + + + +0.01 +smooth + +8.535946960756842 +47.35034107729317 +428.9301277756546 +-202.34565954945444 +85.43452784818405 +0 +120 +absolute + + + +0.01 +smooth + +8.53594669761756 +47.350340922618 +428.93012762587284 +-202.3209258207724 +85.45826316698925 +0 +120 +absolute + + + +0.01 +smooth + +8.535946435981202 +47.350340768604894 +428.9301274732426 +-202.29623779246367 +85.48191994890945 +0 +120 +absolute + + + +0.01 +smooth + +8.535946175869277 +47.350340615268415 +428.93012731791003 +-202.27159882783454 +85.50549568467468 +0 +120 +absolute + + + +0.01 +smooth + +8.535945917303296 +47.350340462623144 +428.93012716002164 +-202.2470122901913 +85.52898786501495 +0 +120 +absolute + + + +0.01 +smooth + +8.535945660304774 +47.350340310683706 +428.9301269997238 +-202.22248154284028 +85.55239398066038 +0 +120 +absolute + + + +0.01 +smooth + +8.535945404895218 +47.35034015946464 +428.9301268371627 +-202.1980099490877 +85.57571152234091 +0 +120 +absolute + + + +0.01 +smooth + +8.535945151096133 +47.35034000898056 +428.9301266724847 +-202.17360087223986 +85.59893798078656 +0 +120 +absolute + + + +0.01 +smooth + +8.535944898929039 +47.350339859246034 +428.9301265058362 +-202.14925767560308 +85.62207084672748 +0 +120 +absolute + + + +0.01 +smooth + +8.53594464841544 +47.35033971027566 +428.9301263373637 +-202.12498372248365 +85.64510761089358 +0 +120 +absolute + + + +0.01 +smooth + +8.535944399576849 +47.35033956208404 +428.9301261672134 +-202.10078237618785 +85.66804576401498 +0 +120 +absolute + + + +0.01 +smooth + +8.535944152434777 +47.35033941468572 +428.93012599553157 +-202.076657000022 +85.69088279682165 +0 +120 +absolute + + + +0.01 +smooth + +8.535943907010731 +47.350339268095325 +428.9301258224647 +-202.05261095729236 +85.71361620004369 +0 +120 +absolute + + + +0.01 +smooth + +8.53594366332623 +47.350339122327426 +428.93012564815905 +-202.0286476113052 +85.73624346441107 +0 +120 +absolute + + + +0.01 +smooth + +8.53594342140277 +47.35033897739662 +428.93012547276095 +-202.00477032536685 +85.75876208065388 +0 +120 +absolute + + + +0.01 +smooth + +8.535943181261876 +47.350338833317466 +428.9301252964168 +-201.98098246278363 +85.7811695395021 +0 +120 +absolute + + + +0.01 +smooth + +8.53594294292505 +47.35033869010457 +428.93012511927304 +-201.95728738686176 +85.8034633316858 +0 +120 +absolute + + + +0.01 +smooth + +8.535942706413808 +47.35033854777251 +428.9301249414759 +-201.9336884609076 +85.82564094793501 +0 +120 +absolute + + + +0.01 +smooth + +8.535942471749657 +47.350338406335894 +428.93012476317176 +-201.91018904822735 +85.84769987897975 +0 +120 +absolute + + + +0.01 +smooth + +8.535942238954105 +47.35033826580928 +428.93012458450687 +-201.88679251212739 +85.86963761555006 +0 +120 +absolute + + + +0.01 +smooth + +8.535942008048666 +47.350338126207276 +428.9301244056277 +-201.86350221591397 +85.89145164837599 +0 +120 +absolute + + + +0.01 +smooth + +8.535941779054852 +47.35033798754445 +428.9301242266805 +-201.8403215228934 +85.91313946818755 +0 +120 +absolute + + + +0.01 +smooth + +8.53594155199417 +47.350337849835405 +428.9301240478117 +-201.81725379637197 +85.93469856571477 +0 +120 +absolute + + + +0.01 +smooth + +8.535941326888134 +47.35033771309472 +428.93012386916763 +-201.79430239965592 +85.95612643168771 +0 +120 +absolute + + + +0.01 +smooth + +8.53594110375825 +47.350337577336965 +428.9301236908946 +-201.7714706960516 +85.97742055683639 +0 +120 +absolute + + + +0.01 +smooth + +8.535940882626031 +47.35033744257676 +428.93012351313905 +-201.7487620488653 +85.99857843189085 +0 +120 +absolute + + + +0.01 +smooth + +8.535940663512989 +47.350337308828664 +428.93012333604725 +-201.7261798214033 +86.0195975475811 +0 +120 +absolute + + + +0.01 +smooth + +8.53594044644063 +47.35033717610728 +428.93012315976546 +-201.70372737697187 +86.04047539463721 +0 +120 +absolute + + + +0.01 +smooth + +8.53594023143047 +47.35033704442718 +428.9301229844402 +-201.6814080788773 +86.06120946378917 +0 +120 +absolute + + + +0.01 +smooth + +8.535940018504016 +47.35033691380297 +428.9301228102177 +-201.65922529042592 +86.08179724576706 +0 +120 +absolute + + + +0.01 +smooth + +8.535939807682778 +47.350336784249215 +428.9301226372444 +-201.63718237492404 +86.10223623130089 +0 +120 +absolute + + + +0.01 +smooth + +8.535939598988268 +47.3503366557805 +428.93012246566656 +-201.61528269567785 +86.12252391112071 +0 +120 +absolute + + + +0.01 +smooth + +8.535939392424815 +47.350336528401755 +428.93012229558184 +-201.59352789970444 +86.14265926955859 +0 +120 +absolute + + + +0.01 +smooth + +8.535939187223574 +47.350336401682284 +428.93012212487673 +-201.57184240189756 +86.1627084628745 +0 +120 +absolute + + + +0.01 +smooth + +8.535938982977129 +47.350336275395435 +428.93012195240755 +-201.55018666182062 +86.18270616528528 +0 +120 +absolute + + + +0.01 +smooth + +8.535938779707779 +47.350336149556796 +428.9301217782389 +-201.52856404672605 +86.20264969046292 +0 +120 +absolute + + + +0.01 +smooth + +8.535938577437832 +47.35033602418193 +428.93012160243586 +-201.50697792386634 +86.22253635207932 +0 +120 +absolute + + + +0.01 +smooth + +8.535938376189591 +47.35033589928643 +428.93012142506336 +-201.48543166049413 +86.24236346380657 +0 +120 +absolute + + + +0.01 +smooth + +8.535938175985356 +47.350335774885835 +428.930121246186 +-201.46392862386173 +86.26212833931646 +0 +120 +absolute + + + +0.01 +smooth + +8.535937976847432 +47.350335650995746 +428.9301210658687 +-201.44247218122172 +86.28182829228106 +0 +120 +absolute + + + +0.01 +smooth + +8.53593777879812 +47.350335527631714 +428.9301208841764 +-201.4210656998265 +86.30146063637227 +0 +120 +absolute + + + +0.01 +smooth + +8.535937581859729 +47.350335404809336 +428.9301207011738 +-201.39971254692867 +86.32102268526207 +0 +120 +absolute + + + +0.01 +smooth + +8.53593738605456 +47.35033528254417 +428.930120516926 +-201.37841608978067 +86.34051175262248 +0 +120 +absolute + + + +0.01 +smooth + +8.535937191404912 +47.350335160851806 +428.93012033149756 +-201.35717969563498 +86.35992515212534 +0 +120 +absolute + + + +0.01 +smooth + +8.535936997933096 +47.350335039747804 +428.9301201449536 +-201.33600673174416 +86.3792601974427 +0 +120 +absolute + + + +0.01 +smooth + +8.53593680566141 +47.35033491924776 +428.93011995735907 +-201.31490056536074 +86.39851420224653 +0 +120 +absolute + + + +0.01 +smooth + +8.53593661461216 +47.350334799367204 +428.93011976877835 +-201.29386456373697 +86.4176844802087 +0 +120 +absolute + + + +0.01 +smooth + +8.535936424807648 +47.35033468012173 +428.93011957927666 +-201.27290209412556 +86.43676834500121 +0 +120 +absolute + + + +0.01 +smooth + +8.535936236270176 +47.35033456152694 +428.9301193889187 +-201.25201652377896 +86.45576311029606 +0 +120 +absolute + + + +0.01 +smooth + +8.535936049022052 +47.35033444359836 +428.9301191977694 +-201.23121121994964 +86.47466608976515 +0 +120 +absolute + + + +0.01 +smooth + +8.535935863085573 +47.3503343263516 +428.9301190058937 +-201.21048954989016 +86.49347459708048 +0 +120 +absolute + + + +0.01 +smooth + +8.535935678483048 +47.35033420980221 +428.93011881335616 +-201.1898548808528 +86.512185945914 +0 +120 +absolute + + + +0.01 +smooth + +8.53593549523678 +47.35033409396579 +428.93011862022183 +-201.16931058009038 +86.53079744993764 +0 +120 +absolute + + + +0.01 +smooth + +8.535935313369073 +47.3503339788579 +428.9301184265558 +-201.14886001485516 +86.5493064228234 +0 +120 +absolute + + + +0.01 +smooth + +8.535935132902223 +47.3503338644941 +428.9301182324226 +-201.12850655239964 +86.5677101782432 +0 +120 +absolute + + + +0.01 +smooth + +8.535934953858542 +47.35033375088997 +428.9301180378871 +-201.10825355997636 +86.58600602986904 +0 +120 +absolute + + + +0.01 +smooth + +8.535934776260328 +47.3503336380611 +428.93011784301416 +-201.0881044048379 +86.60419129137286 +0 +120 +absolute + + + +0.01 +smooth + +8.53593460012989 +47.35033352602304 +428.9301176478688 +-201.06806245423655 +86.6222632764266 +0 +120 +absolute + + + +0.01 +smooth + +8.535934425489526 +47.35033341479141 +428.93011745251573 +-201.048131075425 +86.64021929870225 +0 +120 +absolute + + + +0.01 +smooth + +8.535934252361539 +47.35033330438172 +428.9301172570198 +-201.02831363565565 +86.65805667187172 +0 +120 +absolute + + + +0.01 +smooth + +8.535934080768238 +47.35033319480958 +428.93011706144597 +-201.008613502181 +86.67577270960703 +0 +120 +absolute + + + +0.01 +smooth + +8.535933910731922 +47.35033308609055 +428.9301168658591 +-200.9890340422535 +86.69336472558012 +0 +120 +absolute + + + +0.01 +smooth + +8.535933742274896 +47.35033297824022 +428.9301166703239 +-200.96957862312576 +86.71083003346293 +0 +120 +absolute + + + +0.01 +smooth + +8.535933575419463 +47.35033287127415 +428.9301164749053 +-200.95025061205013 +86.72816594692743 +0 +120 +absolute + + + +0.01 +smooth + +8.535933410187928 +47.35033276520792 +428.93011627966814 +-200.93105337627918 +86.74536977964559 +0 +120 +absolute + + + +0.01 +smooth + +8.535933246602593 +47.350332660057106 +428.93011608467725 +-200.91199028306542 +86.76243884528932 +0 +120 +absolute + + + +0.01 +smooth + +8.535933084685759 +47.35033255583727 +428.93011588999764 +-200.89306469966132 +86.77937045753063 +0 +120 +absolute + + + +0.01 +smooth + +8.535932924459733 +47.350332452564004 +428.930115695694 +-200.87427999331936 +86.7961619300415 +0 +120 +absolute + + + +0.01 +smooth + +8.535932765946816 +47.350332350252856 +428.9301155018312 +-200.85563953129204 +86.81281057649383 +0 +120 +absolute + + + +0.01 +smooth + +8.535932609169315 +47.350332248919415 +428.9301153084741 +-200.83714668083186 +86.8293137105596 +0 +120 +absolute + + + +0.01 +smooth + +8.535932454149528 +47.35033214857927 +428.9301151156877 +-200.8188048091913 +86.84566864591076 +0 +120 +absolute + + + +0.01 +smooth + +8.535932300909764 +47.350332049247974 +428.9301149235366 +-200.80061728362284 +86.86187269621931 +0 +120 +absolute + + + +0.01 +smooth + +8.535932149472323 +47.35033195094108 +428.9301147320859 +-200.78258747137897 +86.87792317515715 +0 +120 +absolute + + + +0.01 +smooth + +8.535931999859509 +47.35033185367422 +428.9301145414003 +-200.76471873971224 +86.89381739639629 +0 +120 +absolute + + + +0.01 +smooth + +8.535931852093626 +47.35033175746292 +428.9301143515447 +-200.7470144558751 +86.90955267360866 +0 +120 +absolute + + + +0.01 +smooth + +8.535931706196976 +47.350331662322766 +428.93011416258395 +-200.72947798712005 +86.9251263204662 +0 +120 +absolute + + + +0.01 +smooth + +8.535931562191864 +47.35033156826934 +428.9301139745829 +-200.71211270069958 +86.94053565064092 +0 +120 +absolute + + + +0.01 +smooth + +8.535931420100594 +47.3503314753182 +428.9301137876064 +-200.69492196386616 +86.95577797780476 +0 +120 +absolute + + + +0.01 +smooth + +8.535931279945467 +47.350331383484935 +428.93011360171937 +-200.67790914387234 +86.97085061562966 +0 +120 +absolute + + + +0.01 +smooth + +8.535931141748787 +47.350331292785114 +428.93011341698656 +-200.66107760797053 +86.9857508777876 +0 +120 +absolute + + + +0.01 +smooth + +8.535931005345853 +47.35033120311977 +428.9301132332263 +-200.64441001136075 +87.00049436345039 +0 +120 +absolute + + + +0.01 +smooth + +8.535930869774521 +47.35033111390175 +428.9301130491959 +-200.62780071342743 +87.01517459778825 +0 +120 +absolute + + + +0.01 +smooth + +8.535930734914592 +47.35033102505986 +428.9301128647511 +-200.61123735664555 +87.02980271456195 +0 +120 +absolute + + + +0.01 +smooth + +8.535930600789053 +47.35033093661057 +428.9301126799352 +-200.5947234461606 +87.04437584092653 +0 +120 +absolute + + + +0.01 +smooth + +8.535930467420906 +47.3503308485704 +428.9301124947916 +-200.5782624871177 +87.05889110403706 +0 +120 +absolute + + + +0.01 +smooth + +8.535930334833143 +47.35033076095584 +428.93011230936344 +-200.56185798466217 +87.07334563104851 +0 +120 +absolute + + + +0.01 +smooth + +8.535930203048757 +47.35033067378339 +428.9301121236943 +-200.54551344393926 +87.08773654911599 +0 +120 +absolute + + + +0.01 +smooth + +8.53593007209075 +47.35033058706958 +428.9301119378275 +-200.52923237009438 +87.10206098539452 +0 +120 +absolute + + + +0.01 +smooth + +8.535929941982111 +47.35033050083087 +428.93011175180646 +-200.51301826827273 +87.11631606703914 +0 +120 +absolute + + + +0.01 +smooth + +8.535929812745838 +47.350330415083796 +428.9301115656746 +-200.49687464361955 +87.1304989212049 +0 +120 +absolute + + + +0.01 +smooth + +8.535929684404929 +47.35033032984485 +428.9301113794753 +-200.48080500128026 +87.14460667504686 +0 +120 +absolute + + + +0.01 +smooth + +8.535929556982376 +47.350330245130536 +428.93011119325183 +-200.46481284640004 +87.15863645572004 +0 +120 +absolute + + + +0.01 +smooth + +8.535929430501179 +47.35033016095737 +428.93011100704797 +-200.4489016841243 +87.17258539037951 +0 +120 +absolute + + + +0.01 +smooth + +8.535929304984327 +47.35033007734183 +428.9301108209066 +-200.43307501959822 +87.18645060618029 +0 +120 +absolute + + + +0.01 +smooth + +8.535929180454819 +47.350329994300424 +428.93011063487126 +-200.41733635796703 +87.2002292302774 +0 +120 +absolute + + + +0.01 +smooth + +8.535929056935649 +47.35032991184965 +428.9301104489853 +-200.40168920437617 +87.21391838982593 +0 +120 +absolute + + + +0.01 +smooth + +8.535928934449815 +47.35032983000604 +428.9301102632924 +-200.38613706397084 +87.22751521198091 +0 +120 +absolute + + + +0.01 +smooth + +8.535928813020314 +47.350329748786066 +428.9301100778357 +-200.37068344189638 +87.24101682389738 +0 +120 +absolute + + + +0.01 +smooth + +8.535928692670133 +47.350329668206236 +428.9301098926586 +-200.355331843298 +87.25442035273039 +0 +120 +absolute + + + +0.01 +smooth + +8.535928573422277 +47.35032958828307 +428.9301097078045 +-200.34008577332108 +87.26772292563498 +0 +120 +absolute + + + +0.01 +smooth + +8.535928455299738 +47.35032950903305 +428.93010952331707 +-200.32494873711087 +87.28092166976624 +0 +120 +absolute + + + +0.01 +smooth + +8.535928338325512 +47.35032943047269 +428.9301093392391 +-200.30992423981266 +87.29401371227911 +0 +120 +absolute + + + +0.01 +smooth + +8.535928222522589 +47.35032935261847 +428.93010915561433 +-200.29501578657167 +87.3069961803287 +0 +120 +absolute + + + +0.01 +smooth + +8.535928107913971 +47.350329275486935 +428.9301089724862 +-200.28022688253327 +87.31986620107006 +0 +120 +absolute + + + +0.01 +smooth + +8.535927994522652 +47.350329199094546 +428.9301087898981 +-200.26556103284275 +87.3326209016582 +0 +120 +absolute + + + +0.01 +smooth + +8.535927882371624 +47.35032912345784 +428.93010860789326 +-200.25102174264538 +87.3452574092482 +0 +120 +absolute + + + +0.01 +smooth + +8.535927771483887 +47.35032904859329 +428.9301084265152 +-200.2366125170864 +87.35777285099509 +0 +120 +absolute + + + +0.01 +smooth + +8.535927661882438 +47.35032897451742 +428.93010824580716 +-200.2223368613112 +87.3701643540539 +0 +120 +absolute + + + +0.01 +smooth + +8.535927553590266 +47.350328901246705 +428.93010806581265 +-200.20819828046496 +87.3824290455797 +0 +120 +absolute + + + +0.01 +smooth + +8.53592744663037 +47.35032882879767 +428.930107886575 +-200.19420027969304 +87.3945640527275 +0 +120 +absolute + + + +0.01 +smooth + +8.535927341025745 +47.35032875718683 +428.9301077081377 +-200.1803463641407 +87.40656650265237 +0 +120 +absolute + + + +0.01 +smooth + +8.535927236799386 +47.35032868643066 +428.9301075305441 +-200.16664003895326 +87.41843352250936 +0 +120 +absolute + + + +0.01 +smooth + +8.53592713397429 +47.35032861654567 +428.93010735383746 +-200.15308480927592 +87.4301622394535 +0 +120 +absolute + + + +0.01 +smooth + +8.535927032573452 +47.350328547548365 +428.93010717806123 +-200.13968418025408 +87.44174978063982 +0 +120 +absolute + + + +0.01 +smooth + +8.535926932619867 +47.35032847945526 +428.93010700325885 +-200.12644165703298 +87.45319327322339 +0 +120 +absolute + + + +0.01 +smooth + +8.53592683413653 +47.35032841228283 +428.93010682947374 +-200.1133607447579 +87.46448984435924 +0 +120 +absolute + + + +0.01 +smooth + +8.535926737146436 +47.3503283460476 +428.9301066567492 +-200.10044494857414 +87.47563662120241 +0 +120 +absolute + + + +0.01 +smooth + +8.535926641672583 +47.350328280766064 +428.93010648512865 +-200.08769777362699 +87.48663073090793 +0 +120 +absolute + + + +0.01 +smooth + +8.535926547737965 +47.35032821645473 +428.9301063146554 +-200.0751227250617 +87.49746930063091 +0 +120 +absolute + + + +0.01 +smooth + +8.535926455365576 +47.35032815313009 +428.930106145373 +-200.0627233080236 +87.50814945752634 +0 +120 +absolute + + + +0.01 +smooth + +8.535926364578415 +47.35032809080866 +428.93010597732473 +-200.05050302765795 +87.51866832874924 +0 +120 +absolute + + + +0.01 +smooth + +8.535926275399472 +47.350328029506926 +428.9301058105539 +-200.0384653891101 +87.5290230414547 +0 +120 +absolute + + + +0.01 +smooth + +8.535926187851748 +47.35032796924141 +428.93010564510405 +-200.02661389752527 +87.53921072279778 +0 +120 +absolute + + + +0.01 +smooth + +8.535926101958236 +47.3503279100286 +428.93010548101853 +-200.0149520580488 +87.54922849993346 +0 +120 +absolute + + + +0.01 +smooth + +8.53592601774193 +47.350327851885 +428.9301053183407 +-200.0034833758259 +87.55907350001684 +0 +120 +absolute + + + +0.01 +smooth + +8.535925935225828 +47.350327794827116 +428.93010515711387 +-199.99221135600197 +87.56874285020294 +0 +120 +absolute + + + +0.01 +smooth + +8.535925854432927 +47.35032773887145 +428.9301049973816 +-199.9811395037222 +87.5782336776468 +0 +120 +absolute + + + +0.01 +smooth + +8.535925775386218 +47.350327684034504 +428.93010483918715 +-199.97027132413194 +87.58754310950346 +0 +120 +absolute + + + +0.01 +smooth + +8.535925697550434 +47.35032762996375 +428.93010468195354 +-199.9595396817234 +87.59672949471384 +0 +120 +absolute + + + +0.01 +smooth + +8.535925620135236 +47.35032757613835 +428.9301045248192 +-199.9488452503699 +87.60587907814158 +0 +120 +absolute + + + +0.01 +smooth + +8.53592554315662 +47.35032752257068 +428.93010436781725 +-199.93819079142781 +87.61498962730631 +0 +120 +absolute + + + +0.01 +smooth + +8.535925466637478 +47.350327469277666 +428.9301042109889 +-199.92757993857435 +87.62405815371041 +0 +120 +absolute + + + +0.01 +smooth + +8.5359253906007 +47.35032741627628 +428.93010405437497 +-199.91701632548714 +87.63308166885616 +0 +120 +absolute + + + +0.01 +smooth + +8.535925315069175 +47.350327363583396 +428.93010389801634 +-199.90650358584332 +87.64205718424594 +0 +120 +absolute + + + +0.01 +smooth + +8.53592524006579 +47.35032731121598 +428.9301037419541 +-199.8960453533205 +87.6509817113821 +0 +120 +absolute + + + +0.01 +smooth + +8.535925165613438 +47.350327259190955 +428.9301035862293 +-199.88564526159593 +87.65985226176693 +0 +120 +absolute + + + +0.01 +smooth + +8.535925091735008 +47.350327207525275 +428.9301034308827 +-199.87530694434707 +87.66866584690285 +0 +120 +absolute + + + +0.01 +smooth + +8.535925018453392 +47.35032715623584 +428.93010327595533 +-199.86503403525137 +87.6774194782922 +0 +120 +absolute + + + +0.01 +smooth + +8.535924945791475 +47.3503271053396 +428.9301031214883 +-199.85483016798608 +87.68611016743725 +0 +120 +absolute + + + +0.01 +smooth + +8.535924873772153 +47.350327054853494 +428.93010296752243 +-199.84469897622867 +87.69473492584042 +0 +120 +absolute + + + +0.01 +smooth + +8.535924802418315 +47.35032700479447 +428.93010281409903 +-199.8346440936566 +87.70329076500407 +0 +120 +absolute + + + +0.01 +smooth + +8.535924731752843 +47.35032695517943 +428.9301026612585 +-199.82466915394716 +87.71177469643048 +0 +120 +absolute + + + +0.01 +smooth + +8.535924661798633 +47.35032690602532 +428.93010250904206 +-199.8147777907777 +87.72018373162199 +0 +120 +absolute + + + +0.01 +smooth + +8.535924592578578 +47.350326857349074 +428.9301023574908 +-199.80497363782578 +87.72851488208099 +0 +120 +absolute + + + +0.01 +smooth + +8.535924524115561 +47.35032680916762 +428.9301022066457 +-199.79526032876873 +87.73676515930984 +0 +120 +absolute + + + +0.01 +smooth + +8.53592445643248 +47.3503267614979 +428.9301020565475 +-199.78564149728388 +87.74493157481083 +0 +120 +absolute + + + +0.01 +smooth + +8.535924389552216 +47.35032671435683 +428.9301019072373 +-199.77612077704865 +87.75301114008636 +0 +120 +absolute + + + +0.01 +smooth + +8.535924323497664 +47.35032666776138 +428.9301017587562 +-199.76670180174045 +87.76100086663872 +0 +120 +absolute + + + +0.01 +smooth + +8.535924258291715 +47.350326621728456 +428.9301016111451 +-199.75738820503676 +87.76889776597035 +0 +120 +absolute + + + +0.01 +smooth + +8.535924193957255 +47.350326576274995 +428.9301014644448 +-199.7481836206148 +87.77669884958348 +0 +120 +absolute + + + +0.01 +smooth + +8.535924130517174 +47.35032653141792 +428.9301013186964 +-199.73909168215204 +87.7844011289805 +0 +120 +absolute + + + +0.01 +smooth + +8.535924067994367 +47.350326487174186 +428.9301011739408 +-199.73011602332593 +87.79200161566376 +0 +120 +absolute + + + +0.01 +smooth + +8.535924006411717 +47.350326443560704 +428.93010103021913 +-199.7212602778138 +87.79949732113563 +0 +120 +absolute + + + +0.01 +smooth + +8.53592394579212 +47.35032640059442 +428.93010088757217 +-199.71252807929307 +87.80688525689843 +0 +120 +absolute + + + +0.01 +smooth + +8.535923886158463 +47.35032635829227 +428.93010074604103 +-199.70392306144106 +87.81416243445449 +0 +120 +absolute + + + +0.01 +smooth + +8.535923827533635 +47.350326316671186 +428.93010060566667 +-199.6954488579353 +87.8213258653062 +0 +120 +absolute + + + +0.01 +smooth + +8.535923769940528 +47.350326275748095 +428.9301004664899 +-199.68710910245306 +87.82837256095587 +0 +120 +absolute + + + +0.01 +smooth + +8.53592371340203 +47.35032623553994 +428.9301003285518 +-199.6789074286718 +87.83529953290585 +0 +120 +absolute + + + +0.01 +smooth + +8.535923657941032 +47.35032619606364 +428.9301001918935 +-199.6708474702689 +87.84210379265846 +0 +120 +absolute + + + +0.01 +smooth + +8.535923603580422 +47.35032615733614 +428.9301000565557 +-199.66293286092176 +87.84878235171612 +0 +120 +absolute + + + +0.01 +smooth + +8.535923550343094 +47.35032611937437 +428.93009992257953 +-199.65516723430775 +87.85533222158111 +0 +120 +absolute + + + +0.01 +smooth + +8.535923498251936 +47.350326082195274 +428.9300997900059 +-199.64755422410428 +87.8617504137558 +0 +120 +absolute + + + +0.01 +smooth + +8.535923447329834 +47.35032604581576 +428.93009965887575 +-199.64009746398875 +87.86803393974253 +0 +120 +absolute + + + +0.01 +smooth + +8.535923397599683 +47.350326010252786 +428.93009952923006 +-199.63280058763849 +87.87417981104366 +0 +120 +absolute + + + +0.01 +smooth + +8.53592334908437 +47.35032597552327 +428.93009940110994 +-199.625667228731 +87.88018503916152 +0 +120 +absolute + + + +0.01 +smooth + +8.53592330180679 +47.35032594164416 +428.9300992745562 +-199.61870102094363 +87.88604663559843 +0 +120 +absolute + + + +0.01 +smooth + +8.535923255789825 +47.35032590863237 +428.9300991496099 +-199.61190559795375 +87.8917616118568 +0 +120 +absolute + + + +0.01 +smooth + +8.53592321105637 +47.35032587650484 +428.93009902631195 +-199.60528459343874 +87.89732697943892 +0 +120 +absolute + + + +0.01 +smooth + +8.535923167629313 +47.35032584527852 +428.9300989047033 +-199.59884164107606 +87.90273974984714 +0 +120 +absolute + + + +0.01 +smooth + +8.535923125531545 +47.35032581497032 +428.93009878482496 +-199.59258037454302 +87.90799693458385 +0 +120 +absolute + + + +0.01 +smooth + +8.535923084785955 +47.35032578559719 +428.9300986667179 +-199.58650442751707 +87.91309554515135 +0 +120 +absolute + + + +0.01 +smooth + +8.535923045415432 +47.35032575717605 +428.93009855042317 +-199.58061743367563 +87.918032593052 +0 +120 +absolute + + + +0.01 +smooth + +8.535923007442868 +47.35032572972385 +428.9300984359816 +-199.57492302669598 +87.92280508978813 +0 +120 +absolute + + + +0.01 +smooth + +8.535922970891153 +47.350325703257504 +428.9300983234343 +-199.56942484025564 +87.92741004686214 +0 +120 +absolute + + + +0.01 +smooth + +8.535922935783175 +47.35032567779396 +428.9300982128221 +-199.56412650803196 +87.9318444757763 +0 +120 +absolute + + + +0.01 +smooth + +8.535922902094033 +47.35032565331639 +428.93009810411024 +-199.55902479593493 +87.93611118926157 +0 +120 +absolute + + + +0.01 +smooth + +8.535922868910427 +47.350325629180546 +428.9300979958617 +-199.55398883683006 +87.94032081406206 +0 +120 +absolute + + + +0.01 +smooth + +8.535922835889647 +47.35032560514542 +428.9300978875628 +-199.54896981585685 +87.94451467164959 +0 +120 +absolute + + + +0.01 +smooth + +8.53592280305 +47.35032558122497 +428.9300977792752 +-199.54397080533076 +87.94869025484559 +0 +120 +absolute + + + +0.01 +smooth + +8.535922770409805 +47.3503255574332 +428.93009767106025 +-199.53899487756735 +87.9528450564714 +0 +120 +absolute + + + +0.01 +smooth + +8.535922737987372 +47.3503255337841 +428.93009756297977 +-199.53404510488235 +87.95697656934843 +0 +120 +absolute + + + +0.01 +smooth + +8.535922705801013 +47.350325510291626 +428.9300974550949 +-199.52912455959105 +87.96108228629798 +0 +120 +absolute + + + +0.01 +smooth + +8.53592267386904 +47.350325486969794 +428.93009734746744 +-199.52423631400922 +87.96515970014147 +0 +120 +absolute + + + +0.01 +smooth + +8.53592264220977 +47.35032546383257 +428.930097240159 +-199.51938344045234 +87.96920630370023 +0 +120 +absolute + + + +0.01 +smooth + +8.535922610841512 +47.35032544089395 +428.93009713323084 +-199.514569011236 +87.97321958979569 +0 +120 +absolute + + + +0.01 +smooth + +8.535922579782582 +47.35032541816792 +428.93009702674493 +-199.50979609867588 +87.9771970512492 +0 +120 +absolute + + + +0.01 +smooth + +8.535922549051289 +47.35032539566847 +428.9300969207624 +-199.5050677750873 +87.98113618088212 +0 +120 +absolute + + + +0.01 +smooth + +8.53592251866595 +47.35032537340958 +428.93009681534505 +-199.500387112786 +87.98503447151582 +0 +120 +absolute + + + +0.01 +smooth + +8.53592248864488 +47.350325351405246 +428.9300967105546 +-199.49575718408767 +87.98888941597171 +0 +120 +absolute + + + +0.01 +smooth + +8.535922459006384 +47.350325329669445 +428.9300966064521 +-199.4911810613076 +87.99269850707113 +0 +120 +absolute + + + +0.01 +smooth + +8.535922429768778 +47.35032530821615 +428.93009650309926 +-199.48666181676143 +87.99645923763543 +0 +120 +absolute + + + +0.01 +smooth + +8.535922400950376 +47.35032528705937 +428.93009640055783 +-199.4822025227648 +88.00016910048602 +0 +120 +absolute + + + +0.01 +smooth + +8.535922372569493 +47.35032526621308 +428.9300962988892 +-199.4778062516333 +88.00382558844426 +0 +120 +absolute + + + +0.01 +smooth + +8.535922344644439 +47.35032524569129 +428.93009619815484 +-199.4734760756824 +88.00742619433153 +0 +120 +absolute + + + +0.01 +smooth + +8.535922317193526 +47.35032522550793 +428.9300960984165 +-199.4692150672277 +88.01096841096916 +0 +120 +absolute + + + +0.01 +smooth + +8.535922290235069 +47.35032520567704 +428.93009599973567 +-199.46502629858483 +88.01444973117857 +0 +120 +absolute + + + +0.01 +smooth + +8.535922263787384 +47.35032518621261 +428.9300959021739 +-199.46091284206938 +88.01786764778117 +0 +120 +absolute + + + +0.01 +smooth + +8.535922237868776 +47.35032516712856 +428.9300958057925 +-199.45687776999674 +88.02121965359822 +0 +120 +absolute + + + +0.01 +smooth + +8.535922212497566 +47.35032514843895 +428.9300957106534 +-199.45292415468262 +88.02450324145119 +0 +120 +absolute + + + +0.01 +smooth + +8.535922187692059 +47.35032513015773 +428.9300956168179 +-199.44905506844253 +88.02771590416138 +0 +120 +absolute + + + +0.01 +smooth + +8.535922163470573 +47.350325112298876 +428.93009552434756 +-199.44527358359207 +88.03085513455022 +0 +120 +absolute + + + +0.01 +smooth + +8.535922139851422 +47.35032509487641 +428.93009543330396 +-199.4415827724468 +88.03391842543905 +0 +120 +absolute + + + +0.01 +smooth + +8.535922116852914 +47.350325077904294 +428.93009534374863 +-199.4379857073223 +88.03690326964923 +0 +120 +absolute + + + +0.01 +smooth + +8.535922094493365 +47.35032506139651 +428.93009525574314 +-199.43448546053406 +88.03980716000218 +0 +120 +absolute + + + +0.01 +smooth + +8.53592207279109 +47.350325045367065 +428.930095169349 +-199.43108510439777 +88.04262758931924 +0 +120 +absolute + + + +0.01 +smooth + +8.535922051764398 +47.35032502982993 +428.93009508462785 +-199.42778771122892 +88.04536205042177 +0 +120 +absolute + + + +0.01 +smooth + +8.535922031431603 +47.35032501479909 +428.9300950016412 +-199.42459635334302 +88.04800803613118 +0 +120 +absolute + + + +0.01 +smooth + +8.535922011811019 +47.350325000288535 +428.9300949204504 +-199.4215141030558 +88.05056303926881 +0 +120 +absolute + + + +0.01 +smooth + +8.535921992920958 +47.35032498631225 +428.93009484111735 +-199.4185440326827 +88.05302455265603 +0 +120 +absolute + + + +0.01 +smooth + +8.535921974779733 +47.35032497288422 +428.9300947637032 +-199.4156892145393 +88.05539006911422 +0 +120 +absolute + + + +0.01 +smooth + +8.535921957405655 +47.350324960018455 +428.93009468826983 +-199.41295272094118 +88.05765708146478 +0 +120 +absolute + + + +0.01 +smooth + +8.53592194081704 +47.3503249477289 +428.9300946148787 +-199.41033762420395 +88.05982308252905 +0 +120 +absolute + + + +0.01 +smooth + +8.535921925032202 +47.350324936029565 +428.93009454359117 +-199.40784699664312 +88.06188556512839 +0 +120 +absolute + + + +0.01 +smooth + +8.535921910069451 +47.350324924934434 +428.9300944744691 +-199.40548391057428 +88.06384202208423 +0 +120 +absolute + + + +0.01 +smooth + +8.535921895947098 +47.35032491445749 +428.9300944075737 +-199.403251438313 +88.06568994621786 +0 +120 +absolute + + + +0.01 +smooth + +8.535921882683459 +47.35032490461273 +428.93009434296675 +-199.4011526521748 +88.06742683035073 +0 +120 +absolute + + + +0.01 +smooth + +8.535921870296848 +47.35032489541412 +428.9300942807097 +-199.39919062447535 +88.06905016730416 +0 +120 +absolute + + + +0.01 +smooth + +8.535921858805576 +47.35032488687566 +428.93009422086413 +-199.39736842753013 +88.07055744989955 +0 +120 +absolute + + + +0.01 +smooth + +8.535921848227954 +47.35032487901134 +428.93009416349156 +-199.39568913365474 +88.07194617095826 +0 +120 +absolute + + + +0.01 +smooth + +8.5359218385823 +47.350324871835134 +428.9300941086536 +-199.39415581516477 +88.07321382330164 +0 +120 +absolute + + + +0.01 +smooth + +8.535921829886924 +47.35032486536103 +428.93009405641163 +-199.3927715443757 +88.07435789975112 +0 +120 +absolute + + + +0.01 +smooth + +8.535921822160136 +47.35032485960302 +428.9300940068274 +-199.39153939360318 +88.07537589312804 +0 +120 +absolute + + + +0.01 +smooth + +8.535921815420252 +47.35032485457508 +428.93009395996233 +-199.39046243516273 +88.07626529625372 +0 +120 +absolute + + + +0.01 +smooth + +8.535921809495854 +47.35032485015068 +428.9300939153175 +-199.38951382066406 +88.07704837618307 +0 +120 +absolute + + + +0.01 +smooth + +8.535921803705405 +47.350324845825185 +428.93009387089774 +-199.38858618416097 +88.07781405346594 +0 +120 +absolute + + + +0.01 +smooth + +8.535921797987935 +47.3503248415535 +428.9300938265534 +-199.38766993365587 +88.07857027451489 +0 +120 +absolute + + + +0.01 +smooth + +8.535921792345716 +47.350324837337354 +428.9300937823229 +-199.38676544556688 +88.07931673118844 +0 +120 +absolute + + + +0.01 +smooth + +8.535921786781007 +47.350324833178455 +428.93009373824384 +-199.38587309631194 +88.08005311534502 +0 +120 +absolute + + + +0.01 +smooth + +8.535921781296079 +47.35032482907856 +428.93009369435487 +-199.38499326230934 +88.08077911884311 +0 +120 +absolute + + + +0.01 +smooth + +8.53592177589319 +47.35032482503935 +428.93009365069355 +-199.38412631997693 +88.08149443354105 +0 +120 +absolute + + + +0.01 +smooth + +8.535921770574618 +47.35032482106257 +428.93009360729826 +-199.383272645733 +88.08219875129743 +0 +120 +absolute + + + +0.01 +smooth + +8.535921765342616 +47.35032481714995 +428.9300935642067 +-199.38243261599547 +88.0828917639706 +0 +120 +absolute + + + +0.01 +smooth + +8.53592176019946 +47.350324813303196 +428.9300935214573 +-199.38160660718253 +88.08357316341902 +0 +120 +absolute + + + +0.01 +smooth + +8.53592175514741 +47.35032480952405 +428.93009347908793 +-199.38079499571217 +88.08424264150115 +0 +120 +absolute + + + +0.01 +smooth + +8.535921750188734 +47.35032480581424 +428.93009343713675 +-199.37999815800268 +88.08489989007542 +0 +120 +absolute + + + +0.01 +smooth + +8.535921745325695 +47.350324802175436 +428.9300933956416 +-199.3792164704719 +88.08554460100028 +0 +120 +absolute + + + +0.01 +smooth + +8.535921740560562 +47.35032479860944 +428.9300933546408 +-199.37845030953804 +88.0861764661342 +0 +120 +absolute + + + +0.01 +smooth + +8.535921735895599 +47.35032479511791 +428.93009331417215 +-199.37770005161914 +88.08679517733555 +0 +120 +absolute + + + +0.01 +smooth + +8.535921731333074 +47.35032479170263 +428.93009327427393 +-199.37696607313336 +88.08740042646288 +0 +120 +absolute + + + +0.01 +smooth + +8.535921726875246 +47.35032478836526 +428.930093234984 +-199.37624875049872 +88.08799190537452 +0 +120 +absolute + + + +0.01 +smooth + +8.535921722524392 +47.35032478510758 +428.9300931963405 +-199.37554846013336 +88.08856930592903 +0 +120 +absolute + + + +0.01 +smooth + +8.535921718282768 +47.35032478193128 +428.9300931583815 +-199.37486557845523 +88.08913231998478 +0 +120 +absolute + + + +0.01 +smooth + +8.535921714152648 +47.350324778838086 +428.93009312114515 +-199.37420048188264 +88.08968063940023 +0 +120 +absolute + + + +0.01 +smooth + +8.53592171013629 +47.35032477582973 +428.93009308466924 +-199.37355354683345 +88.09021395603384 +0 +120 +absolute + + + +0.01 +smooth + +8.535921706235964 +47.35032477290794 +428.9300930489921 +-199.3729251497259 +88.09073196174404 +0 +120 +absolute + + + +0.01 +smooth + +8.535921702453937 +47.35032477007444 +428.9300930141517 +-199.372315666978 +88.09123434838929 +0 +120 +absolute + + + +0.01 +smooth + +8.53592169879247 +47.350324767330925 +428.93009298018586 +-199.3717254750078 +88.09172080782801 +0 +120 +absolute + + + +0.01 +smooth + +8.535921695253831 +47.350324764679144 +428.9300929471329 +-199.3711549502335 +88.09219103191867 +0 +120 +absolute + + + +0.01 +smooth + +8.535921691840286 +47.35032476212083 +428.93009291503085 +-199.37060446907307 +88.0926447125197 +0 +120 +absolute + + + +0.01 +smooth + +8.535921688554103 +47.35032475965769 +428.93009288391767 +-199.37007440794468 +88.09308154148952 +0 +120 +absolute + + + +0.01 +smooth + +8.535921685397545 +47.35032475729143 +428.9300928538315 +-199.36956514326639 +88.09350121068665 +0 +120 +absolute + + + +0.01 +smooth + +8.53592168237288 +47.35032475502381 +428.93009282481034 +-199.36907705145626 +88.09390341196945 +0 +120 +absolute + + + +0.01 +smooth + +8.535921679482371 +47.35032475285655 +428.9300927968924 +-199.3686105089324 +88.09428783719642 +0 +120 +absolute + + + +0.01 +smooth + +8.535921676728286 +47.35032475079136 +428.9300927701154 +-199.36816589211287 +88.09465417822597 +0 +120 +absolute + + + +0.01 +smooth + +8.535921674112886 +47.35032474882995 +428.93009274451765 +-199.36774357741578 +88.09500212691658 +0 +120 +absolute + + + +0.01 +smooth + +8.535921671638446 +47.35032474697407 +428.9300927201371 +-199.3673439412592 +88.09533137512668 +0 +120 +absolute + + + +0.01 +smooth + +8.535921669307223 +47.35032474522542 +428.9300926970119 +-199.36696736006127 +88.09564161471471 +0 +120 +absolute + + + +0.01 +smooth + +8.535921667121489 +47.35032474358575 +428.93009267518005 +-199.36661421024 +88.09593253753911 +0 +120 +absolute + + + +0.01 +smooth + +8.535921665083507 +47.350324742056756 +428.9300926546796 +-199.36628486821348 +88.09620383545834 +0 +120 +absolute + + + +0.01 +smooth + +8.535921663195541 +47.3503247406402 +428.93009263554853 +-199.3659797103998 +88.09645520033082 +0 +120 +absolute + + + +0.01 +smooth + +8.53592166145986 +47.350324739337765 +428.93009261782504 +-199.36569911321715 +88.09668632401501 +0 +120 +absolute + + + +0.01 +smooth + +8.535921659878728 +47.350324738151194 +428.9300926015471 +-199.36544345308346 +88.09689689836938 +0 +120 +absolute + + + +0.01 +smooth + +8.535921658454411 +47.350324737082204 +428.9300925867527 +-199.3652131064169 +88.09708661525232 +0 +120 +absolute + + + +0.01 +smooth + +8.535921657189176 +47.35032473613253 +428.93009257348007 +-199.36500844963552 +88.09725516652233 +0 +120 +absolute + + + +0.01 +smooth + +8.535921656085286 +47.35032473530387 +428.9300925617672 +-199.36482985915745 +88.09740224403782 +0 +120 +absolute + + + +0.01 +smooth + +8.53592165514501 +47.35032473459798 +428.930092551652 +-199.36467771140073 +88.09752753965725 +0 +120 +absolute + + + +0.01 +smooth + +8.535921654370615 +47.350324734016574 +428.9300925431727 +-199.36455238278347 +88.09763074523906 +0 +120 +absolute + + + +0.01 +smooth + +8.53592165376436 +47.35032473356136 +428.9300925363672 +-199.36445424972376 +88.09771155264168 +0 +120 +absolute + + + +0.01 +smooth + +8.535921653328517 +47.350324733234075 +428.9300925312738 +-199.36438368863966 +88.0977696537236 +0 +120 +absolute + + + +0.01 +smooth + +8.53592165306535 +47.350324733036445 +428.93009252793024 +-199.36434107594928 +88.0978047403432 +0 +120 +absolute + + + +0.01 +smooth + +8.535921652977123 +47.35032473297018 +428.93009252637484 +-199.36432678807068 +88.09781650435897 +0 +120 +absolute + + + + + + diff --git a/parameter-learning_nd_disc/kmls/saffa_premax.kml b/parameter-learning_nd_disc/kmls/saffa_premax.kml new file mode 100644 index 0000000..b31723e --- /dev/null +++ b/parameter-learning_nd_disc/kmls/saffa_premax.kml @@ -0,0 +1,34102 @@ + + + + + +Tour + + +0.01 +smooth + +8.536348154452593 +47.34969652396877 +412.35755233845094 +14.0290626583571 +88.46603184312883 +0 +120 +absolute + + + +0.01 +smooth + +8.536348154656054 +47.34969652402453 +412.3581650303882 +14.029080682925663 +88.46603457124782 +0 +120 +absolute + + + +0.01 +smooth + +8.536348155262296 +47.34969652419072 +412.35923111024374 +14.029134382201653 +88.46604269871713 +0 +120 +absolute + + + +0.01 +smooth + +8.53634815626511 +47.34969652446566 +412.36073935037024 +14.029223194540519 +88.46605614020532 +0 +120 +absolute + + + +0.01 +smooth + +8.536348157658285 +47.34969652484767 +412.3626785231198 +14.029346558297705 +88.46607481038099 +0 +120 +absolute + + + +0.01 +smooth + +8.536348159435617 +47.349696525335084 +412.3650374008453 +14.029503911828671 +88.46609862391269 +0 +120 +absolute + + + +0.01 +smooth + +8.536348161590892 +47.34969652592621 +412.36780475589893 +14.029694693488858 +88.46612749546897 +0 +120 +absolute + + + +0.01 +smooth + +8.5363481641179 +47.34969652661941 +412.3709693606331 +14.029918341633712 +88.46616133971835 +0 +120 +absolute + + + +0.01 +smooth + +8.536348167010436 +47.34969652741298 +412.37451998740056 +14.030174294618691 +88.46620007132947 +0 +120 +absolute + + + +0.01 +smooth + +8.53634817026229 +47.349696528305266 +412.37844540855366 +14.030461990799239 +88.46624360497088 +0 +120 +absolute + + + +0.01 +smooth + +8.536348173867253 +47.3496965292946 +412.38273439644473 +14.030780868530803 +88.46629185531111 +0 +120 +absolute + + + +0.01 +smooth + +8.53634817781911 +47.34969653037928 +412.3873757234266 +14.031130366168838 +88.46634473701874 +0 +120 +absolute + + + +0.01 +smooth + +8.536348182111658 +47.34969653155765 +412.3923581618513 +14.031509922068782 +88.4664021647623 +0 +120 +absolute + + + +0.01 +smooth + +8.536348186738687 +47.34969653282804 +412.3976704840714 +14.031918974586096 +88.46646405321039 +0 +120 +absolute + + + +0.01 +smooth + +8.536348191693985 +47.34969653418876 +412.40330146243963 +14.032356962076223 +88.46653031703154 +0 +120 +absolute + + + +0.01 +smooth + +8.536348196971346 +47.34969653563817 +412.4092398693083 +14.032823322894618 +88.46660087089437 +0 +120 +absolute + + + +0.01 +smooth + +8.536348202564557 +47.34969653717456 +412.41547447702976 +14.033317495396718 +88.46667562946737 +0 +120 +absolute + + + +0.01 +smooth + +8.536348208467416 +47.3496965387963 +412.42199405795674 +14.03383891793799 +88.4667545074192 +0 +120 +absolute + + + +0.01 +smooth + +8.536348214673703 +47.34969654050167 +412.4287873844415 +14.03438702887386 +88.4668374194183 +0 +120 +absolute + + + +0.01 +smooth + +8.53634822117722 +47.349696542289024 +412.43584322883663 +14.034961266559797 +88.46692428013333 +0 +120 +absolute + + + +0.01 +smooth + +8.536348227971748 +47.34969654415667 +412.4431503634944 +14.035561069351239 +88.46701500423278 +0 +120 +absolute + + + +0.01 +smooth + +8.536348235051083 +47.34969654610296 +412.4506975607674 +14.036185875603637 +88.46710950638528 +0 +120 +absolute + + + +0.01 +smooth + +8.536348242409016 +47.349696548126204 +412.45847359300825 +14.036835123672445 +88.46720770125933 +0 +120 +absolute + + + +0.01 +smooth + +8.536348250039337 +47.34969655022474 +412.46646723256924 +14.037508251913104 +88.46730950352354 +0 +120 +absolute + + + +0.01 +smooth + +8.536348257935835 +47.349696552396885 +412.4746672518029 +14.038204698681072 +88.46741482784644 +0 +120 +absolute + + + +0.01 +smooth + +8.536348266092302 +47.34969655464098 +412.4830624230617 +14.03892390233179 +88.46752358889663 +0 +120 +absolute + + + +0.01 +smooth + +8.536348274502531 +47.34969655695532 +412.49164151869815 +14.039665301220712 +88.46763570134264 +0 +120 +absolute + + + +0.01 +smooth + +8.536348283160311 +47.34969655933827 +412.5003933110646 +14.040428333703282 +88.46775107985303 +0 +120 +absolute + + + +0.01 +smooth + +8.53634829205943 +47.34969656178813 +412.5093065725136 +14.041212438134956 +88.46786963909639 +0 +120 +absolute + + + +0.01 +smooth + +8.536348301193684 +47.349696564303244 +412.5183700753977 +14.042017052871175 +88.46799129374126 +0 +120 +absolute + + + +0.01 +smooth + +8.53634831055686 +47.34969656688193 +412.5275725920691 +14.042841616267395 +88.4681159584562 +0 +120 +absolute + + + +0.01 +smooth + +8.53634832014275 +47.349696569522514 +412.5369028948806 +14.043685566679063 +88.4682435479098 +0 +120 +absolute + + + +0.01 +smooth + +8.536348329945145 +47.34969657222333 +412.54634975618444 +14.044548342461626 +88.46837397677058 +0 +120 +absolute + + + +0.01 +smooth + +8.536348339957836 +47.349696574982694 +412.55590194833326 +14.045429381970536 +88.46850715970712 +0 +120 +absolute + + + +0.01 +smooth + +8.536348350174613 +47.349696577798944 +412.5655482436793 +14.046328123561235 +88.46864301138801 +0 +120 +absolute + + + +0.01 +smooth + +8.536348360589265 +47.3496965806704 +412.57527741457534 +14.047244005589182 +88.46878144648178 +0 +120 +absolute + + + +0.01 +smooth + +8.536348371195588 +47.3496965835954 +412.58507823337357 +14.048176466409819 +88.46892237965702 +0 +120 +absolute + + + +0.01 +smooth + +8.536348381987368 +47.34969658657225 +412.5949394724266 +14.049124944378597 +88.46906572558224 +0 +120 +absolute + + + +0.01 +smooth + +8.536348392958399 +47.349696589599304 +412.60484990408685 +14.050088877850966 +88.46921139892605 +0 +120 +absolute + + + +0.01 +smooth + +8.536348404102469 +47.34969659267486 +412.61479830070675 +14.051067705182373 +88.469359314357 +0 +120 +absolute + + + +0.01 +smooth + +8.536348415413368 +47.34969659579726 +412.62477343463894 +14.052060864728267 +88.46950938654368 +0 +120 +absolute + + + +0.01 +smooth + +8.53634842708604 +47.349696599021094 +412.6348309384485 +14.053085236622026 +88.46966416016089 +0 +120 +absolute + + + +0.01 +smooth + +8.536348440696441 +47.34969660278724 +412.64548782682544 +14.05427738111315 +88.46984422416672 +0 +120 +absolute + + + +0.01 +smooth + +8.536348456540578 +47.34969660717898 +412.65683979031684 +14.055662747687244 +88.47005340983037 +0 +120 +absolute + + + +0.01 +smooth + +8.536348474568126 +47.34969661218279 +412.6688677651735 +14.05723674362023 +88.47029101810988 +0 +120 +absolute + + + +0.01 +smooth + +8.536348494728754 +47.34969661778511 +412.68155268764576 +14.058994776187994 +88.47055634996322 +0 +120 +absolute + + + +0.01 +smooth + +8.536348516972133 +47.349696623972385 +412.6948754939843 +14.060932252666444 +88.47084870634832 +0 +120 +absolute + + + +0.01 +smooth + +8.536348541247934 +47.3496966307311 +412.70881712043973 +14.063044580331482 +88.4711673882232 +0 +120 +absolute + + + +0.01 +smooth + +8.53634856750583 +47.34969663804769 +412.72335850326255 +14.065327166459015 +88.47151169654585 +0 +120 +absolute + + + +0.01 +smooth + +8.53634859569549 +47.34969664590862 +412.73848057870333 +14.067775418324937 +88.47188093227422 +0 +120 +absolute + + + +0.01 +smooth + +8.536348625766584 +47.34969665430032 +412.75416428301247 +14.070384743205148 +88.47227439636629 +0 +120 +absolute + + + +0.01 +smooth + +8.536348657668789 +47.34969666320927 +412.77039055244086 +14.07315054837556 +88.47269138978007 +0 +120 +absolute + + + +0.01 +smooth + +8.53634869135177 +47.34969667262191 +412.7871403232389 +14.076068241112063 +88.4731312134735 +0 +120 +absolute + + + +0.01 +smooth + +8.536348726765203 +47.34969668252471 +412.8043945316571 +14.07913322869057 +88.47359316840459 +0 +120 +absolute + + + +0.01 +smooth + +8.53634876385876 +47.349696692904125 +412.8221341139462 +14.082340918386977 +88.47407655553135 +0 +120 +absolute + + + +0.01 +smooth + +8.536348802582108 +47.34969670374661 +412.84034000635677 +14.08568671747719 +88.4745806758117 +0 +120 +absolute + + + +0.01 +smooth + +8.536348842884918 +47.3496967150386 +412.8589931451392 +14.089166033237108 +88.47510483020366 +0 +120 +absolute + + + +0.01 +smooth + +8.536348884716865 +47.34969672676656 +412.8780744665439 +14.092774272942627 +88.47564831966517 +0 +120 +absolute + + + +0.01 +smooth + +8.53634892802762 +47.34969673891694 +412.89756490682186 +14.096506843869657 +88.47621044515424 +0 +120 +absolute + + + +0.01 +smooth + +8.536348972766849 +47.34969675147622 +412.9174454022234 +14.1003591532941 +88.47679050762885 +0 +120 +absolute + + + +0.01 +smooth + +8.53634901888423 +47.34969676443083 +412.9376968889992 +14.104326608491856 +88.47738780804698 +0 +120 +absolute + + + +0.01 +smooth + +8.53634906632943 +47.349696777767235 +412.95830030339977 +14.108404616738826 +88.47800164736658 +0 +120 +absolute + + + +0.01 +smooth + +8.536349115052124 +47.34969679147189 +412.97923658167554 +14.11258858531091 +88.47863132654571 +0 +120 +absolute + + + +0.01 +smooth + +8.536349165001978 +47.349696805531245 +413.0004866600774 +14.116873921484016 +88.47927614654225 +0 +120 +absolute + + + +0.01 +smooth + +8.53634921612867 +47.349696819931765 +413.0220314748555 +14.121256032534038 +88.47993540831425 +0 +120 +absolute + + + +0.01 +smooth + +8.536349268381866 +47.34969683465989 +413.0438519622609 +14.125730325736887 +88.48060841281966 +0 +120 +absolute + + + +0.01 +smooth + +8.536349321711239 +47.34969684970209 +413.0659290585437 +14.130292208368457 +88.48129446101647 +0 +120 +absolute + + + +0.01 +smooth + +8.536349376066457 +47.34969686504482 +413.08824369995466 +14.134937087704657 +88.48199285386266 +0 +120 +absolute + + + +0.01 +smooth + +8.536349431397198 +47.349696880674514 +413.11077682274447 +14.139660371021382 +88.48270289231621 +0 +120 +absolute + + + +0.01 +smooth + +8.53634948765313 +47.34969689657764 +413.1335093631635 +14.144457465594538 +88.4834238773351 +0 +120 +absolute + + + +0.01 +smooth + +8.536349544783922 +47.34969691274067 +413.1564222574624 +14.149323778700023 +88.48415510987729 +0 +120 +absolute + + + +0.01 +smooth + +8.536349602739248 +47.349696929150035 +413.17949644189173 +14.154254717613746 +88.4848958909008 +0 +120 +absolute + + + +0.01 +smooth + +8.53634966146878 +47.3496969457922 +413.2027128527021 +14.159245689611604 +88.4856455213636 +0 +120 +absolute + + + +0.01 +smooth + +8.536349720922185 +47.349696962653624 +413.226052426144 +14.164292101969497 +88.48640330222364 +0 +120 +absolute + + + +0.01 +smooth + +8.53634978104914 +47.34969697972075 +413.24949609846806 +14.169389361963333 +88.48716853443892 +0 +120 +absolute + + + +0.01 +smooth + +8.536349841799312 +47.34969699698004 +413.2730248059248 +14.174532876869009 +88.48794051896743 +0 +120 +absolute + + + +0.01 +smooth + +8.536349903122373 +47.349697014417956 +413.29661948476485 +14.179718053962429 +88.48871855676715 +0 +120 +absolute + + + +0.01 +smooth + +8.536349964967997 +47.349697032020934 +413.32026107123863 +14.184940300519493 +88.48950194879603 +0 +120 +absolute + + + +0.01 +smooth + +8.53635002728585 +47.349697049775465 +413.34393050159684 +14.190195023816106 +88.4902899960121 +0 +120 +absolute + + + +0.01 +smooth + +8.536350090025609 +47.349697067667954 +413.3676087120901 +14.195477631128167 +88.49108199937328 +0 +120 +absolute + + + +0.01 +smooth + +8.536350153136942 +47.349697085684895 +413.39127663896886 +14.200783529731577 +88.49187725983761 +0 +120 +absolute + + + +0.01 +smooth + +8.53635021656952 +47.34969710381272 +413.4149152184836 +14.206108126902242 +88.49267507836305 +0 +120 +absolute + + + +0.01 +smooth + +8.53635028137485 +47.34969712236678 +413.4387006956783 +14.211535547241969 +88.49348795823896 +0 +120 +absolute + + + +0.01 +smooth + +8.536350349302372 +47.34969714187028 +413.46293893516537 +14.217206181268747 +88.49433677795334 +0 +120 +absolute + + + +0.01 +smooth + +8.536350420317243 +47.34969716231358 +413.4876237484637 +14.223116799245417 +88.49522104485457 +0 +120 +absolute + + + +0.01 +smooth + +8.536350494358485 +47.3496971836792 +413.5127443489233 +14.229262069426762 +88.49613995349466 +0 +120 +absolute + + + +0.01 +smooth + +8.536350571365132 +47.349697205949695 +413.5382899498945 +14.235636660067561 +88.49709269842548 +0 +120 +absolute + + + +0.01 +smooth + +8.536350651276221 +47.3496972291076 +413.5642497647272 +14.242235239422603 +88.498078474199 +0 +120 +absolute + + + +0.01 +smooth + +8.536350734030776 +47.34969725313547 +413.59061300677183 +14.249052475746673 +88.4990964753672 +0 +120 +absolute + + + +0.01 +smooth + +8.536350819567833 +47.34969727801586 +413.6173688893784 +14.25608303729455 +88.50014589648198 +0 +120 +absolute + + + +0.01 +smooth + +8.536350907826423 +47.349697303731276 +413.644506625897 +14.263321592321022 +88.50122593209532 +0 +120 +absolute + + + +0.01 +smooth + +8.536350998745574 +47.34969733026428 +413.67201542967774 +14.27076280908086 +88.50233577675907 +0 +120 +absolute + + + +0.01 +smooth + +8.536351092264326 +47.34969735759742 +413.6998845140709 +14.278401355828866 +88.50347462502529 +0 +120 +absolute + + + +0.01 +smooth + +8.536351188321705 +47.349697385713235 +413.7281030924266 +14.28623190081981 +88.50464167144584 +0 +120 +absolute + + + +0.01 +smooth + +8.536351286856743 +47.349697414594274 +413.75666037809503 +14.294249112308485 +88.50583611057272 +0 +120 +absolute + + + +0.01 +smooth + +8.536351387808477 +47.34969744422307 +413.7855455844263 +14.302447658549674 +88.50705713695784 +0 +120 +absolute + + + +0.01 +smooth + +8.536351491115932 +47.349697474582186 +413.8147479247706 +14.310822207798156 +88.50830394515317 +0 +120 +absolute + + + +0.01 +smooth + +8.536351596718143 +47.34969750565414 +413.844256612478 +14.319367428308716 +88.5095757297106 +0 +120 +absolute + + + +0.01 +smooth + +8.536351704554141 +47.34969753742148 +413.8740608608985 +14.328077988336135 +88.5108716851821 +0 +120 +absolute + + + +0.01 +smooth + +8.536351814562959 +47.34969756986677 +413.9041498833827 +14.336948556135198 +88.51219100611962 +0 +120 +absolute + + + +0.01 +smooth + +8.536351926683627 +47.34969760297252 +413.93451289328027 +14.345973799960692 +88.51353288707512 +0 +120 +absolute + + + +0.01 +smooth + +8.53635204085518 +47.34969763672131 +413.9651391039416 +14.355148388067402 +88.51489652260052 +0 +120 +absolute + + + +0.01 +smooth + +8.53635215701665 +47.34969767109564 +413.996017728717 +14.364466988710106 +88.51628110724776 +0 +120 +absolute + + + +0.01 +smooth + +8.536352275107063 +47.349697706078096 +414.0271379809563 +14.37392427014359 +88.51768583556878 +0 +120 +absolute + + + +0.01 +smooth + +8.536352395065457 +47.349697741651205 +414.05848907400974 +14.383514900622638 +88.51910990211553 +0 +120 +absolute + + + +0.01 +smooth + +8.53635251683086 +47.3496977777975 +414.09006022122753 +14.393233548402034 +88.52055250143997 +0 +120 +absolute + + + +0.01 +smooth + +8.536352640342304 +47.34969781449954 +414.12184063595987 +14.403074881736563 +88.522012828094 +0 +120 +absolute + + + +0.01 +smooth + +8.536352765538826 +47.34969785173986 +414.1538195315568 +14.413033568881005 +88.5234900766296 +0 +120 +absolute + + + +0.01 +smooth + +8.536352892359451 +47.349697889501 +414.1859861213685 +14.423104278090145 +88.5249834415987 +0 +120 +absolute + + + +0.01 +smooth + +8.536353020743215 +47.34969792776552 +414.2183296187451 +14.433281677618766 +88.52649211755325 +0 +120 +absolute + + + +0.01 +smooth + +8.536353150629148 +47.349697966515926 +414.25083923703687 +14.443560435721654 +88.52801529904518 +0 +120 +absolute + + + +0.01 +smooth + +8.536353281956282 +47.34969800573481 +414.2835041895938 +14.453935220653594 +88.52955218062644 +0 +120 +absolute + + + +0.01 +smooth + +8.536353414663651 +47.34969804540468 +414.3163136897661 +14.464400700669366 +88.53110195684896 +0 +120 +absolute + + + +0.01 +smooth + +8.536353548690283 +47.34969808550808 +414.34925695090396 +14.474951544023753 +88.5326638222647 +0 +120 +absolute + + + +0.01 +smooth + +8.536353683975214 +47.34969812602758 +414.38232318635755 +14.485582418971543 +88.5342369714256 +0 +120 +absolute + + + +0.01 +smooth + +8.536353820457473 +47.34969816694571 +414.4155016094769 +14.496287993767517 +88.53582059888359 +0 +120 +absolute + + + +0.01 +smooth + +8.536353958076093 +47.34969820824499 +414.4487814336122 +14.507062936666458 +88.53741389919062 +0 +120 +absolute + + + +0.01 +smooth + +8.536354096770104 +47.349698249907995 +414.48215187211366 +14.517901915923149 +88.53901606689865 +0 +120 +absolute + + + +0.01 +smooth + +8.536354236478541 +47.349698291917264 +414.5156021383315 +14.52879959979238 +88.5406262965596 +0 +120 +absolute + + + +0.01 +smooth + +8.536354377140434 +47.34969833425533 +414.5491214456156 +14.539750656528927 +88.5422437827254 +0 +120 +absolute + + + +0.01 +smooth + +8.536354518694813 +47.349698376904726 +414.58269900731636 +14.550749754387578 +88.54386771994804 +0 +120 +absolute + + + +0.01 +smooth + +8.536354661080715 +47.34969841984802 +414.61632403678385 +14.561791561623114 +88.54549730277941 +0 +120 +absolute + + + +0.01 +smooth + +8.536354804365025 +47.34969846310923 +414.64999900955837 +14.572880098036585 +88.54713309595505 +0 +120 +absolute + + + +0.01 +smooth + +8.53635495050463 +47.349698507325485 +414.68392330512506 +14.584157643979408 +88.54879592263612 +0 +120 +absolute + + + +0.01 +smooth + +8.536355100136356 +47.3496985527047 +414.71816133589647 +14.595669995161343 +88.55049247037992 +0 +120 +absolute + + + +0.01 +smooth + +8.536355253201037 +47.34969859922878 +414.75270557526346 +14.607412052302708 +88.55222196980051 +0 +120 +absolute + + + +0.01 +smooth + +8.536355409639526 +47.34969864687968 +414.7875484966175 +14.61937871612384 +88.55398365151198 +0 +120 +absolute + + + +0.01 +smooth + +8.536355569392663 +47.34969869563931 +414.82268257334954 +14.631564887345059 +88.5557767461284 +0 +120 +absolute + + + +0.01 +smooth + +8.536355732401292 +47.34969874548958 +414.8581002788511 +14.643965466686707 +88.55760048426384 +0 +120 +absolute + + + +0.01 +smooth + +8.536355898606262 +47.349698796412476 +414.89379408651337 +14.656575354869105 +88.55945409653242 +0 +120 +absolute + + + +0.01 +smooth + +8.53635606794841 +47.34969884838987 +414.92975646972735 +14.669389452612581 +88.56133681354817 +0 +120 +absolute + + + +0.01 +smooth + +8.536356240368583 +47.34969890140371 +414.96597990188445 +14.682402660637475 +88.5632478659252 +0 +120 +absolute + + + +0.01 +smooth + +8.536356415807624 +47.349698955435905 +415.0024568563758 +14.695609879664103 +88.56518648427759 +0 +120 +absolute + + + +0.01 +smooth + +8.536356594206381 +47.34969901046842 +415.0391798065926 +14.709006010412802 +88.5671518992194 +0 +120 +absolute + + + +0.01 +smooth + +8.536356775505695 +47.34969906648313 +415.07614122592594 +14.722585953603895 +88.5691433413647 +0 +120 +absolute + + + +0.01 +smooth + +8.536356959646412 +47.34969912346204 +415.11333358776756 +14.736344609957722 +88.57116004132762 +0 +120 +absolute + + + +0.01 +smooth + +8.536357146569372 +47.34969918138698 +415.150749365508 +14.750276880194601 +88.57320122972219 +0 +120 +absolute + + + +0.01 +smooth + +8.536357336215428 +47.349699240239964 +415.18838103253904 +14.764377665034875 +88.57526613716253 +0 +120 +absolute + + + +0.01 +smooth + +8.536357528525413 +47.34969930000287 +415.2262210622514 +14.778641865198855 +88.57735399426265 +0 +120 +absolute + + + +0.01 +smooth + +8.53635772344018 +47.34969936065763 +415.2642619280368 +14.793064381406886 +88.5794640316367 +0 +120 +absolute + + + +0.01 +smooth + +8.536357920900565 +47.34969942218618 +415.302496103286 +14.807640114379286 +88.58159547989872 +0 +120 +absolute + + + +0.01 +smooth + +8.53635812084742 +47.34969948457044 +415.34091606139043 +14.822363964836395 +88.5837475696628 +0 +120 +absolute + + + +0.01 +smooth + +8.536358323221586 +47.34969954779236 +415.3795142757413 +14.837230833498532 +88.58591953154303 +0 +120 +absolute + + + +0.01 +smooth + +8.536358527963907 +47.34969961183384 +415.41828321973 +14.852235621086034 +88.58811059615346 +0 +120 +absolute + + + +0.01 +smooth + +8.536358735015225 +47.34969967667684 +415.45721536674745 +14.867373228319227 +88.5903199941082 +0 +120 +absolute + + + +0.01 +smooth + +8.536358944316389 +47.349699742303244 +415.49630319018496 +14.88263855591844 +88.59254695602131 +0 +120 +absolute + + + +0.01 +smooth + +8.53635915580824 +47.34969980869501 +415.5355391634338 +14.898026504604006 +88.59479071250689 +0 +120 +absolute + + + +0.01 +smooth + +8.536359369431622 +47.34969987583405 +415.57491575988513 +14.913531975096248 +88.59705049417899 +0 +120 +absolute + + + +0.01 +smooth + +8.53635958512738 +47.349699943702305 +415.61442545293016 +14.929149868115498 +88.5993255316517 +0 +120 +absolute + + + +0.01 +smooth + +8.536359802836358 +47.34970001228169 +415.6540607159602 +14.944875084382089 +88.60161505553913 +0 +120 +absolute + + + +0.01 +smooth + +8.536360022499402 +47.34970008155414 +415.6938140223664 +14.960702524616346 +88.60391829645529 +0 +120 +absolute + + + +0.01 +smooth + +8.53636024405735 +47.34970015150158 +415.73367784554 +14.9766270895386 +88.60623448501434 +0 +120 +absolute + + + +0.01 +smooth + +8.536360467451052 +47.34970022210594 +415.7736446588722 +14.992643679869179 +88.60856285183029 +0 +120 +absolute + + + +0.01 +smooth + +8.536360692621352 +47.34970029334913 +415.8137069357542 +15.008747196328416 +88.61090262751725 +0 +120 +absolute + + + +0.01 +smooth + +8.536360919509091 +47.34970036521311 +415.85385714957727 +15.024932539636636 +88.61325304268931 +0 +120 +absolute + + + +0.01 +smooth + +8.536361148055116 +47.34970043767978 +415.89408777373256 +15.041194610514168 +88.61561332796053 +0 +120 +absolute + + + +0.01 +smooth + +8.53636137820027 +47.349700510731076 +415.9343912816113 +15.057528309681345 +88.617982713945 +0 +120 +absolute + + + +0.01 +smooth + +8.536361609885397 +47.34970058434894 +415.97476014660475 +15.073928537858496 +88.62036043125678 +0 +120 +absolute + + + +0.01 +smooth + +8.53636184305134 +47.34970065851527 +416.0151868421041 +15.090390195765945 +88.62274571050999 +0 +120 +absolute + + + +0.01 +smooth + +8.536362077638945 +47.34970073321201 +416.0556638415005 +15.106908184124027 +88.62513778231866 +0 +120 +absolute + + + +0.01 +smooth + +8.536362313589056 +47.34970080842108 +416.0961836181854 +15.123477403653071 +88.62753587729689 +0 +120 +absolute + + + +0.01 +smooth + +8.536362550842517 +47.349700884124424 +416.13673864554977 +15.140092755073404 +88.62993922605877 +0 +120 +absolute + + + +0.01 +smooth + +8.53636278934017 +47.34970096030396 +416.17732139698484 +15.156749139105353 +88.63234705921836 +0 +120 +absolute + + + +0.01 +smooth + +8.536363029703368 +47.34970103718228 +416.21797697810075 +15.1734874780866 +88.63476531769251 +0 +120 +absolute + + + +0.01 +smooth + +8.536363273635354 +47.34970111536398 +416.25883492094573 +15.19042177988992 +88.63721059412438 +0 +120 +absolute + + + +0.01 +smooth + +8.536363521171047 +47.34970119486304 +416.2998964559917 +15.207553148149792 +88.63968301428103 +0 +120 +absolute + + + +0.01 +smooth + +8.536363772255443 +47.349701275661616 +416.341155875637 +15.224876602405802 +88.64218181671096 +0 +120 +absolute + + + +0.01 +smooth + +8.536364026833535 +47.3497013577419 +416.3826074722804 +15.242387162197549 +88.64470623996267 +0 +120 +absolute + + + +0.01 +smooth + +8.536364284850317 +47.34970144108605 +416.4242455383206 +15.260079847064624 +88.64725552258457 +0 +120 +absolute + + + +0.01 +smooth + +8.536364546250775 +47.34970152567619 +416.46606436615554 +15.27794967654661 +88.64982890312504 +0 +120 +absolute + + + +0.01 +smooth + +8.536364810979903 +47.349701611494524 +416.50805824818406 +15.295991670183103 +88.65242562013258 +0 +120 +absolute + + + +0.01 +smooth + +8.536365078982692 +47.3497016985232 +416.55022147680467 +15.314200847513694 +88.65504491215566 +0 +120 +absolute + + + +0.01 +smooth + +8.53636535020414 +47.34970178674439 +416.59254834441595 +15.332572228077975 +88.65768601774272 +0 +120 +absolute + + + +0.01 +smooth + +8.53636562458923 +47.34970187614026 +416.63503314341614 +15.351100831415534 +88.66034817544217 +0 +120 +absolute + + + +0.01 +smooth + +8.536365902082958 +47.349701966692955 +416.6776701662039 +15.369781677065962 +88.66303062380248 +0 +120 +absolute + + + +0.01 +smooth + +8.536366182630314 +47.34970205838465 +416.72045370517753 +15.38860978456885 +88.66573260137207 +0 +120 +absolute + + + +0.01 +smooth + +8.536366466176291 +47.34970215119751 +416.7633780527359 +15.407580173463794 +88.66845334669944 +0 +120 +absolute + + + +0.01 +smooth + +8.536366752665884 +47.34970224511372 +416.80643750127734 +15.42668786329038 +88.67119209833301 +0 +120 +absolute + + + +0.01 +smooth + +8.536367042044084 +47.34970234011542 +416.8496263432004 +15.4459278735882 +88.67394809482123 +0 +120 +absolute + + + +0.01 +smooth + +8.536367334255877 +47.34970243618476 +416.89293887090327 +15.465295223896844 +88.67672057471252 +0 +120 +absolute + + + +0.01 +smooth + +8.536367629246255 +47.34970253330392 +416.93636937678474 +15.4847849337559 +88.67950877655532 +0 +120 +absolute + + + +0.01 +smooth + +8.536367926960217 +47.34970263145505 +416.9799121532434 +15.504392022704966 +88.68231193889812 +0 +120 +absolute + + + +0.01 +smooth + +8.536368227342749 +47.34970273062035 +417.02356149267746 +15.524111510283625 +88.68512930028935 +0 +120 +absolute + + + +0.01 +smooth + +8.536368530338848 +47.34970283078196 +417.0673116874857 +15.543938416031477 +88.68796009927748 +0 +120 +absolute + + + +0.01 +smooth + +8.5363688358935 +47.34970293192204 +417.11115703006647 +15.563867759488106 +88.6908035744109 +0 +120 +absolute + + + +0.01 +smooth + +8.536369143951699 +47.34970303402276 +417.15509181281817 +15.583894560193105 +88.69365896423811 +0 +120 +absolute + + + +0.01 +smooth + +8.536369454458438 +47.34970313706627 +417.19911032813957 +15.604013837686065 +88.69652550730751 +0 +120 +absolute + + + +0.01 +smooth + +8.536369767358707 +47.34970324103476 +417.2432068684289 +15.624220611506574 +88.6994024421676 +0 +120 +absolute + + + +0.01 +smooth + +8.5363700825975 +47.349703345910385 +417.2873757260849 +15.64450990119423 +88.70228900736677 +0 +120 +absolute + + + +0.01 +smooth + +8.536370400119806 +47.34970345167528 +417.33161119350586 +15.664876726288618 +88.70518444145353 +0 +120 +absolute + + + +0.01 +smooth + +8.536370719870618 +47.349703558311646 +417.37590756309055 +15.68531610632933 +88.70808798297625 +0 +120 +absolute + + + +0.01 +smooth + +8.53637104179493 +47.34970366580163 +417.42025912723716 +15.705823060855954 +88.71099887048344 +0 +120 +absolute + + + +0.01 +smooth + +8.53637136583773 +47.3497037741274 +417.46466017834433 +15.726392609408087 +88.7139163425235 +0 +120 +absolute + + + +0.01 +smooth + +8.536371691944012 +47.34970388327112 +417.5091050088106 +15.747019771525316 +88.71683963764491 +0 +120 +absolute + + + +0.01 +smooth + +8.536372020058767 +47.34970399321495 +417.5535879110344 +15.767699566747234 +88.71976799439612 +0 +120 +absolute + + + +0.01 +smooth + +8.536372350126989 +47.34970410394106 +417.5981031774143 +15.788427014613431 +88.72270065132554 +0 +120 +absolute + + + +0.01 +smooth + +8.536372682093667 +47.3497042154316 +417.6426451003488 +15.8091971346635 +88.72563684698167 +0 +120 +absolute + + + +0.01 +smooth + +8.536373015903795 +47.349704327668746 +417.68720797223637 +15.830004946437025 +88.7285758199129 +0 +120 +absolute + + + +0.01 +smooth + +8.53637335150236 +47.34970444063466 +417.7317860854754 +15.850845469473605 +88.7315168086677 +0 +120 +absolute + + + +0.01 +smooth + +8.53637368883436 +47.349704554311515 +417.77637373246455 +15.871713723312823 +88.73445905179454 +0 +120 +absolute + + + +0.01 +smooth + +8.536374027844785 +47.349704668681454 +417.8209652056023 +15.892604727494277 +88.73740178784183 +0 +120 +absolute + + + +0.01 +smooth + +8.536374368478624 +47.34970478372665 +417.86555479728713 +15.913513501557553 +88.74034425535802 +0 +120 +absolute + + + +0.01 +smooth + +8.536374710680871 +47.34970489942928 +417.9101367999175 +15.934435065042244 +88.74328569289162 +0 +120 +absolute + + + +0.01 +smooth + +8.536375054427191 +47.349705015783265 +417.9547074816408 +15.955366523386825 +88.74622565301301 +0 +120 +absolute + + + +0.01 +smooth + +8.536375401074661 +47.34970513331278 +417.99935227987567 +15.976398777400197 +88.74917780147382 +0 +120 +absolute + + + +0.01 +smooth + +8.536375751339 +47.34970525229505 +418.0441158964434 +15.99757872092818 +88.75214915794893 +0 +120 +absolute + + + +0.01 +smooth + +8.536376105169548 +47.34970537271277 +418.08899377238873 +16.018901064589887 +88.75513888247524 +0 +120 +absolute + + + +0.01 +smooth + +8.536376462515642 +47.349705494548694 +418.13398134875683 +16.04036051900445 +88.75814613508985 +0 +120 +absolute + + + +0.01 +smooth + +8.536376823326615 +47.349705617785546 +418.1790740665926 +16.061951794790982 +88.76117007582961 +0 +120 +absolute + + + +0.01 +smooth + +8.5363771875518 +47.34970574240611 +418.2242673669411 +16.083669602568612 +88.76420986473165 +0 +120 +absolute + + + +0.01 +smooth + +8.536377555140538 +47.34970586839307 +418.2695566908471 +16.105508652956456 +88.76726466183285 +0 +120 +absolute + + + +0.01 +smooth + +8.536377926042162 +47.34970599572919 +418.31493747935554 +16.127463656573628 +88.77033362717027 +0 +120 +absolute + + + +0.01 +smooth + +8.536378300206003 +47.34970612439724 +418.36040517351165 +16.149529324039264 +88.77341592078088 +0 +120 +absolute + + + +0.01 +smooth + +8.536378677581407 +47.34970625437992 +418.40595521436023 +16.17170036597248 +88.77651070270169 +0 +120 +absolute + + + +0.01 +smooth + +8.536379058117697 +47.34970638565997 +418.451583042946 +16.19397149299239 +88.77961713296959 +0 +120 +absolute + + + +0.01 +smooth + +8.536379441764213 +47.34970651822014 +418.49728410031423 +16.21633741571812 +88.78273437162166 +0 +120 +absolute + + + +0.01 +smooth + +8.536379828470295 +47.34970665204317 +418.5430538275099 +16.238792844768792 +88.7858615786949 +0 +120 +absolute + + + +0.01 +smooth + +8.536380218185274 +47.34970678711181 +418.58888766557794 +16.26133249076353 +88.78899791422627 +0 +120 +absolute + + + +0.01 +smooth + +8.536380610858483 +47.349706923408775 +418.63478105556294 +16.283951064321446 +88.79214253825272 +0 +120 +absolute + + + +0.01 +smooth + +8.536381006439258 +47.34970706091683 +418.6807294385102 +16.306643276061664 +88.79529461081128 +0 +120 +absolute + + + +0.01 +smooth + +8.536381404876941 +47.3497071996187 +418.72672825546465 +16.32940383660332 +88.79845329193898 +0 +120 +absolute + + + +0.01 +smooth + +8.536381806120861 +47.34970733949713 +418.7727729474713 +16.352227456565515 +88.80161774167274 +0 +120 +absolute + + + +0.01 +smooth + +8.536382210120353 +47.349707480534846 +418.8188589555749 +16.37510884656738 +88.80478712004957 +0 +120 +absolute + + + +0.01 +smooth + +8.536382616824753 +47.34970762271461 +418.8649817208205 +16.39804271722803 +88.80796058710644 +0 +120 +absolute + + + +0.01 +smooth + +8.536383026183403 +47.34970776601915 +418.91113668425317 +16.4210237791666 +88.8111373028804 +0 +120 +absolute + + + +0.01 +smooth + +8.53638343814563 +47.34970791043121 +418.9573192869178 +16.444046743002193 +88.81431642740839 +0 +120 +absolute + + + +0.01 +smooth + +8.536383852660773 +47.349708055933526 +419.0035249698593 +16.467106319353945 +88.81749712072741 +0 +120 +absolute + + + +0.01 +smooth + +8.536384269678164 +47.349708202508836 +419.04974917412267 +16.49019721884097 +88.82067854287445 +0 +120 +absolute + + + +0.01 +smooth + +8.536384689147143 +47.34970835013988 +419.0959873407528 +16.513314152082387 +88.82385985388649 +0 +120 +absolute + + + +0.01 +smooth + +8.536385111017042 +47.349708498809406 +419.1422349107947 +16.53645182969732 +88.82704021380053 +0 +120 +absolute + + + +0.01 +smooth + +8.536385535237198 +47.34970864850014 +419.1884873252933 +16.559604962304892 +88.83021878265356 +0 +120 +absolute + + + +0.01 +smooth + +8.536385961756945 +47.34970879919483 +419.2347400252936 +16.582768260524226 +88.83339472048254 +0 +120 +absolute + + + +0.01 +smooth + +8.536386390525617 +47.34970895087622 +419.28098845184047 +16.605936434974435 +88.8365671873245 +0 +120 +absolute + + + +0.01 +smooth + +8.536386821492554 +47.34970910352703 +419.3272280459791 +16.629104196274646 +88.83973534321643 +0 +120 +absolute + + + +0.01 +smooth + +8.536387254607089 +47.34970925713003 +419.3734542487542 +16.652266255043983 +88.84289834819529 +0 +120 +absolute + + + +0.01 +smooth + +8.536387689818556 +47.34970941166793 +419.4196625012107 +16.675417321901556 +88.84605536229807 +0 +120 +absolute + + + +0.01 +smooth + +8.53638812707629 +47.3497095671235 +419.46584824439384 +16.698552107466497 +88.8492055455618 +0 +120 +absolute + + + +0.01 +smooth + +8.53638856632963 +47.34970972347945 +419.5120069193483 +16.72166532235793 +88.85234805802341 +0 +120 +absolute + + + +0.01 +smooth + +8.536389007527905 +47.34970988071853 +419.55813396711915 +16.744751677194962 +88.85548205971993 +0 +120 +absolute + + + +0.01 +smooth + +8.536389450620458 +47.34971003882349 +419.60422482875134 +16.767805882596722 +88.85860671068833 +0 +120 +absolute + + + +0.01 +smooth + +8.536389895556619 +47.34971019777706 +419.65027494528994 +16.79082264918233 +88.86172117096562 +0 +120 +absolute + + + +0.01 +smooth + +8.536390342285724 +47.34971035756197 +419.6962797577796 +16.813796687570914 +88.86482460058876 +0 +120 +absolute + + + +0.01 +smooth + +8.53639079075711 +47.34971051816099 +419.7422347072656 +16.836722708381583 +88.86791615959477 +0 +120 +absolute + + + +0.01 +smooth + +8.536391240920112 +47.34971067955682 +419.7881352347927 +16.859595422233472 +88.8709950080206 +0 +120 +absolute + + + +0.01 +smooth + +8.536391693069096 +47.34971084187542 +419.83399711197217 +16.882438135316562 +88.87406505370035 +0 +120 +absolute + + + +0.01 +smooth + +8.536392148573649 +47.349711005688455 +419.87989969246 +16.90536261807362 +88.87714486078495 +0 +120 +absolute + + + +0.01 +smooth + +8.536392607540517 +47.349711171043026 +419.9258482091016 +16.928375150221857 +88.88023543799565 +0 +120 +absolute + + + +0.01 +smooth + +8.536393069923212 +47.34971133792264 +419.9718388796481 +16.951469271101825 +88.88333567675862 +0 +120 +absolute + + + +0.01 +smooth + +8.536393535675243 +47.34971150631073 +420.0178679218493 +16.974638520054032 +88.88644446850006 +0 +120 +absolute + + + +0.01 +smooth + +8.536394004750125 +47.34971167619083 +420.06393155345665 +16.997876436419023 +88.88956070464623 +0 +120 +absolute + + + +0.01 +smooth + +8.53639447710136 +47.34971184754638 +420.1100259922201 +17.021176559537302 +88.8926832766233 +0 +120 +absolute + + + +0.01 +smooth + +8.53639495268247 +47.34971202036088 +420.1561474558906 +17.044532428749417 +88.89581107585751 +0 +120 +absolute + + + +0.01 +smooth + +8.536395431446952 +47.34971219461781 +420.2022921622187 +17.067937583395878 +88.89894299377502 +0 +120 +absolute + + + +0.01 +smooth + +8.536395913348331 +47.34971237030067 +420.24845632895506 +17.09138556281723 +88.9020779218021 +0 +120 +absolute + + + +0.01 +smooth + +8.536396398340106 +47.3497125473929 +420.29463617384994 +17.11486990635398 +88.90521475136495 +0 +120 +absolute + + + +0.01 +smooth + +8.53639688637579 +47.34971272587802 +420.3408279146542 +17.13838415334667 +88.90835237388973 +0 +120 +absolute + + + +0.01 +smooth + +8.536397377408901 +47.34971290573949 +420.3870277691187 +17.16192184313583 +88.91148968080273 +0 +120 +absolute + + + +0.01 +smooth + +8.536397871392944 +47.349713086960804 +420.4332319549937 +17.18547651506197 +88.9146255635301 +0 +120 +absolute + + + +0.01 +smooth + +8.536398368281427 +47.349713269525424 +420.4794366900296 +17.209041708465634 +88.91775891349805 +0 +120 +absolute + + + +0.01 +smooth + +8.536398868027861 +47.34971345341684 +420.5256381919774 +17.232610962687332 +88.92088862213284 +0 +120 +absolute + + + +0.01 +smooth + +8.536399370585766 +47.349713638618546 +420.57183267858767 +17.256177817067606 +88.92401358086065 +0 +120 +absolute + + + +0.01 +smooth + +8.536399875908645 +47.34971382511404 +420.6180163676109 +17.27973581094698 +88.92713268110771 +0 +120 +absolute + + + +0.01 +smooth + +8.536400383950005 +47.34971401288675 +420.66418547679757 +17.303278483665974 +88.93024481430018 +0 +120 +absolute + + + +0.01 +smooth + +8.536400894663359 +47.34971420192018 +420.71033622389837 +17.32679937456512 +88.93334887186428 +0 +120 +absolute + + + +0.01 +smooth + +8.536401408002224 +47.34971439219783 +420.75646482666417 +17.350292022984952 +88.9364437452263 +0 +120 +absolute + + + +0.01 +smooth + +8.536401923920105 +47.34971458370318 +420.8025675028452 +17.37374996826598 +88.93952832581238 +0 +120 +absolute + + + +0.01 +smooth + +8.536402442370514 +47.34971477641969 +420.8486404701922 +17.397166749748745 +88.94260150504877 +0 +120 +absolute + + + +0.01 +smooth + +8.53640296330696 +47.34971497033085 +420.8946799464558 +17.42053590677377 +88.94566217436162 +0 +120 +absolute + + + +0.01 +smooth + +8.536403486682955 +47.34971516542015 +420.94068214938653 +17.44385097868158 +88.9487092251772 +0 +120 +absolute + + + +0.01 +smooth + +8.53640401245201 +47.349715361671066 +420.98664329673505 +17.467105504812707 +88.95174154892169 +0 +120 +absolute + + + +0.01 +smooth + +8.536404540567636 +47.34971555906708 +421.03255960625194 +17.49029302450767 +88.95475803702132 +0 +120 +absolute + + + +0.01 +smooth + +8.53640507098334 +47.34971575759167 +421.0784272956878 +17.513407077107008 +88.95775758090228 +0 +120 +absolute + + + +0.01 +smooth + +8.536405603652637 +47.34971595722831 +421.1242425827932 +17.536441201951234 +88.9607390719908 +0 +120 +absolute + + + +0.01 +smooth + +8.536406138529037 +47.3497161579605 +421.1700016853189 +17.559388938380884 +88.96370140171311 +0 +120 +absolute + + + +0.01 +smooth + +8.536406675566047 +47.34971635977172 +421.2157008210153 +17.582243825736484 +88.96664346149537 +0 +120 +absolute + + + +0.01 +smooth + +8.536407214717181 +47.34971656264543 +421.261336207633 +17.604999403358562 +88.96956414276382 +0 +120 +absolute + + + +0.01 +smooth + +8.536407755935949 +47.34971676656514 +421.30690406292285 +17.62764921058764 +88.97246233694466 +0 +120 +absolute + + + +0.01 +smooth + +8.53640829917586 +47.34971697151431 +421.3524006046351 +17.650186786764248 +88.97533693546413 +0 +120 +absolute + + + +0.01 +smooth + +8.536408844390428 +47.34971717747642 +421.39782205052063 +17.67260567122891 +88.97818682974841 +0 +120 +absolute + + + +0.01 +smooth + +8.53640939153316 +47.34971738443497 +421.4431646183299 +17.694899403322164 +88.98101091122369 +0 +120 +absolute + + + +0.01 +smooth + +8.536409940557567 +47.34971759237344 +421.4884245258135 +17.71706152238452 +88.98380807131623 +0 +120 +absolute + + + +0.01 +smooth + +8.536410491417161 +47.3497178012753 +421.53359799072217 +17.739085567756522 +88.98657720145225 +0 +120 +absolute + + + +0.01 +smooth + +8.536411044065453 +47.34971801112401 +421.5786812308063 +17.760965078778682 +88.98931719305789 +0 +120 +absolute + + + +0.01 +smooth + +8.536411598455953 +47.3497182219031 +421.6236704638167 +17.782693594791542 +88.99202693755942 +0 +120 +absolute + + + +0.01 +smooth + +8.536412154543092 +47.349718433596436 +421.668561961435 +17.804264782429783 +88.9947053515867 +0 +120 +absolute + + + +0.01 +smooth + +8.536412713164172 +47.34971864658293 +421.7134037048991 +17.825793538871277 +88.99737531721351 +0 +120 +absolute + + + +0.01 +smooth + +8.536413275051196 +47.3497188611937 +421.7582377305399 +17.84737765898963 +89.00005618938711 +0 +120 +absolute + + + +0.01 +smooth + +8.536413840161513 +47.349719077412935 +421.80306080395866 +17.86900736695405 +89.00274599160409 +0 +120 +absolute + + + +0.01 +smooth + +8.536414408452472 +47.349719295224915 +421.84786969075697 +17.890672886933782 +89.00544274736106 +0 +120 +absolute + + + +0.01 +smooth + +8.536414979881426 +47.34971951461384 +421.89266115653606 +17.912364443098053 +89.00814448015467 +0 +120 +absolute + + + +0.01 +smooth + +8.536415554405725 +47.349719735563966 +421.9374319668976 +17.9340722596161 +89.01084921348155 +0 +120 +absolute + + + +0.01 +smooth + +8.536416131982712 +47.34971995805949 +421.9821788874428 +17.95578656065715 +89.01355497083827 +0 +120 +absolute + + + +0.01 +smooth + +8.53641671256974 +47.34972018208465 +422.0268986837731 +17.977497570390433 +89.0162597757215 +0 +120 +absolute + + + +0.01 +smooth + +8.536417296124162 +47.34972040762369 +422.07158812149 +17.99919551298518 +89.01896165162785 +0 +120 +absolute + + + +0.01 +smooth + +8.536417882603319 +47.349720634660834 +422.11624396619493 +18.020870612610626 +89.02165862205392 +0 +120 +absolute + + + +0.01 +smooth + +8.536418471964566 +47.34972086318028 +422.1608629834893 +18.042513093435993 +89.02434871049633 +0 +120 +absolute + + + +0.01 +smooth + +8.536419064165257 +47.349721093166295 +422.20544193897456 +18.064113179630528 +89.02702994045174 +0 +120 +absolute + + + +0.01 +smooth + +8.536419659162732 +47.34972132460308 +422.249977598252 +18.085661095363445 +89.02970033541675 +0 +120 +absolute + + + +0.01 +smooth + +8.536420256914353 +47.3497215574749 +422.29446672692325 +18.107147064803993 +89.03235791888802 +0 +120 +absolute + + + +0.01 +smooth + +8.536420857377454 +47.349721791765944 +422.33890609058955 +18.12856131212139 +89.03500071436207 +0 +120 +absolute + + + +0.01 +smooth + +8.536421460509397 +47.34972202746046 +422.3832924548525 +18.14989406148487 +89.0376267453356 +0 +120 +absolute + + + +0.01 +smooth + +8.536422066267525 +47.34972226454268 +422.42762258531343 +18.171135537063662 +89.04023403530525 +0 +120 +absolute + + + +0.01 +smooth + +8.536422674609186 +47.3497225029968 +422.4718932475736 +18.192275963026997 +89.04282060776754 +0 +120 +absolute + + + +0.01 +smooth + +8.536423285491736 +47.349722742807096 +422.51610120723467 +18.213305563544118 +89.04538448621922 +0 +120 +absolute + + + +0.01 +smooth + +8.53642389887252 +47.34972298395777 +422.56024322989805 +18.234214562784246 +89.04792369415682 +0 +120 +absolute + + + +0.01 +smooth + +8.536424514708893 +47.349723226433056 +422.60431608116517 +18.25499318491661 +89.05043625507702 +0 +120 +absolute + + + +0.01 +smooth + +8.536425132958197 +47.34972347021717 +422.6483165266373 +18.275631654110448 +89.05292019247638 +0 +120 +absolute + + + +0.01 +smooth + +8.536425753577785 +47.34972371529436 +422.69224133191597 +18.296120194534986 +89.05537352985155 +0 +120 +absolute + + + +0.01 +smooth + +8.536426376525007 +47.34972396164885 +422.7360872626026 +18.316449030359454 +89.05779429069916 +0 +120 +absolute + + + +0.01 +smooth + +8.536427001757211 +47.349724209264856 +422.77985108429857 +18.33660838575309 +89.06018049851583 +0 +120 +absolute + + + +0.01 +smooth + +8.536427629231747 +47.34972445812663 +422.82352956260536 +18.356588484885123 +89.06253017679816 +0 +120 +absolute + + + +0.01 +smooth + +8.536428258905966 +47.34972470821837 +422.8671194631244 +18.37637955192478 +89.06484134904281 +0 +120 +absolute + + + +0.01 +smooth + +8.536428890737216 +47.34972495952432 +422.9106175514571 +18.395971811041292 +89.06711203874636 +0 +120 +absolute + + + +0.01 +smooth + +8.536429524682847 +47.349725212028716 +422.9540205932048 +18.4153554864039 +89.06934026940547 +0 +120 +absolute + + + +0.01 +smooth + +8.536430160700208 +47.34972546571578 +422.997325353969 +18.434520802181826 +89.07152406451672 +0 +120 +absolute + + + +0.01 +smooth + +8.536430798746647 +47.34972572056974 +423.0405285993512 +18.4534579825443 +89.07366144757677 +0 +120 +absolute + + + +0.01 +smooth + +8.53643143877952 +47.34972597657482 +423.0836270949528 +18.472157251660562 +89.07575044208221 +0 +120 +absolute + + + +0.01 +smooth + +8.536432080756168 +47.34972623371525 +423.126617606375 +18.49060883369983 +89.07778907152968 +0 +120 +absolute + + + +0.01 +smooth + +8.536432724633944 +47.34972649197526 +423.16949689921955 +18.50880295283135 +89.0797753594158 +0 +120 +absolute + + + +0.01 +smooth + +8.536433370370201 +47.34972675133909 +423.21226173908764 +18.526729833224344 +89.08170732923718 +0 +120 +absolute + + + +0.01 +smooth + +8.536434017922284 +47.349727011790954 +423.2549088915808 +18.544379699048044 +89.08358300449046 +0 +120 +absolute + + + +0.01 +smooth + +8.536434667247544 +47.34972727331508 +423.29743512230044 +18.561742774471682 +89.08540040867224 +0 +120 +absolute + + + +0.01 +smooth + +8.53643531830333 +47.34972753589571 +423.3398371968479 +18.57880928366449 +89.08715756527916 +0 +120 +absolute + + + +0.01 +smooth + +8.536435971046991 +47.349727799517055 +423.38211188082477 +18.5955694507957 +89.08885249780784 +0 +120 +absolute + + + +0.01 +smooth + +8.536436625435877 +47.34972806416336 +423.42425593983234 +18.612013500034543 +89.09048322975485 +0 +120 +absolute + + + +0.01 +smooth + +8.536437281584314 +47.349728329894475 +423.46627590845327 +18.628187214582372 +89.09205703025117 +0 +120 +absolute + + + +0.01 +smooth + +8.536437940530408 +47.34972859721511 +423.50823587951925 +18.644458115161463 +89.09363522330564 +0 +120 +absolute + + + +0.01 +smooth + +8.536438602439649 +47.34972886620883 +423.55014575159936 +18.66087620318484 +89.09522714628646 +0 +120 +absolute + + + +0.01 +smooth + +8.536439267272657 +47.349729136860475 +423.59200268236395 +18.677418276667265 +89.09683002270621 +0 +120 +absolute + + + +0.01 +smooth + +8.536439934990051 +47.349729409154925 +423.6338038294834 +18.69406113362348 +89.09844107607748 +0 +120 +absolute + + + +0.01 +smooth + +8.536440605552453 +47.34972968307697 +423.6755463506278 +18.710781572068235 +89.10005752991273 +0 +120 +absolute + + + +0.01 +smooth + +8.536441278920474 +47.34972995861145 +423.71722740346786 +18.727556390016268 +89.10167660772454 +0 +120 +absolute + + + +0.01 +smooth + +8.536441955054737 +47.3497302357432 +423.75884414567355 +18.744362385482344 +89.1032955330255 +0 +120 +absolute + + + +0.01 +smooth + +8.536442633915867 +47.34973051445709 +423.80039373491576 +18.761176356481222 +89.10491152932819 +0 +120 +absolute + + + +0.01 +smooth + +8.536443315464473 +47.349730794737916 +423.84187332886427 +18.77797510102762 +89.10652182014509 +0 +120 +absolute + + + +0.01 +smooth + +8.536443999661177 +47.34973107657051 +423.8832800851896 +18.79473541713631 +89.10812362898879 +0 +120 +absolute + + + +0.01 +smooth + +8.536444686466599 +47.34973135993973 +423.92461116156227 +18.81143410282204 +89.10971417937185 +0 +120 +absolute + + + +0.01 +smooth + +8.536445375841355 +47.34973164483039 +423.96586371565235 +18.82804795609955 +89.11129069480675 +0 +120 +absolute + + + +0.01 +smooth + +8.536446067746072 +47.34973193122736 +424.0070349051304 +18.8445537749836 +89.11285039880617 +0 +120 +absolute + + + +0.01 +smooth + +8.536446762141358 +47.349732219115445 +424.04812188766675 +18.860928357488934 +89.11439051488257 +0 +120 +absolute + + + +0.01 +smooth + +8.536447458987837 +47.34973250847947 +424.0891218209316 +18.877148501630305 +89.11590826654854 +0 +120 +absolute + + + +0.01 +smooth + +8.536448158246131 +47.34973279930432 +424.1300318625956 +18.893191005422466 +89.11740087731665 +0 +120 +absolute + + + +0.01 +smooth + +8.536448859876852 +47.34973309157478 +424.1708491703287 +18.90903266688015 +89.1188655706994 +0 +120 +absolute + + + +0.01 +smooth + +8.536449563840625 +47.34973338527569 +424.2115709018014 +18.924650284018128 +89.12029957020938 +0 +120 +absolute + + + +0.01 +smooth + +8.536450270098063 +47.34973368039192 +424.25219421468427 +18.94002065485114 +89.12170009935915 +0 +120 +absolute + + + +0.01 +smooth + +8.536450978609789 +47.34973397690826 +424.29271626664723 +18.955120577393927 +89.12306438166124 +0 +120 +absolute + + + +0.01 +smooth + +8.536451689336422 +47.349734274809585 +424.333134215361 +18.969926849661253 +89.12438964062821 +0 +120 +absolute + + + +0.01 +smooth + +8.536452402238577 +47.34973457408069 +424.3734452184957 +18.98441626966786 +89.12567309977263 +0 +120 +absolute + + + +0.01 +smooth + +8.536453117276878 +47.349734874706456 +424.41364643372185 +18.9985656354285 +89.12691198260701 +0 +120 +absolute + + + +0.01 +smooth + +8.536453834411939 +47.34973517667167 +424.4537350187096 +19.012351744957922 +89.12810351264396 +0 +120 +absolute + + + +0.01 +smooth + +8.53645455360438 +47.34973547996121 +424.4937081311295 +19.025751396270874 +89.12924491339604 +0 +120 +absolute + + + +0.01 +smooth + +8.536455274814823 +47.34973578455988 +424.53356292865175 +19.03874138738211 +89.13033340837572 +0 +120 +absolute + + + +0.01 +smooth + +8.536455998003884 +47.34973609045253 +424.5732965689467 +19.051298516306375 +89.13136622109562 +0 +120 +absolute + + + +0.01 +smooth + +8.536456723132183 +47.349736397624 +424.61290620968475 +19.06339958105842 +89.1323405750683 +0 +120 +absolute + + + +0.01 +smooth + +8.536457450160336 +47.34973670605911 +424.65238900853626 +19.075021379652995 +89.13325369380627 +0 +120 +absolute + + + +0.01 +smooth + +8.536458179048964 +47.3497370157427 +424.6917421231716 +19.08614071010485 +89.1341028008221 +0 +120 +absolute + + + +0.01 +smooth + +8.536458909758688 +47.349737326659614 +424.73096271126093 +19.096734370428738 +89.13488511962836 +0 +120 +absolute + + + +0.01 +smooth + +8.536459642250122 +47.34973763879468 +424.7700479304748 +19.1067791586394 +89.1355978737376 +0 +120 +absolute + + + +0.01 +smooth + +8.53646037648389 +47.34973795213272 +424.80899493848347 +19.11625187275159 +89.13623828666238 +0 +120 +absolute + + + +0.01 +smooth + +8.536461112420607 +47.34973826665859 +424.84780089295737 +19.125129310780064 +89.13680358191523 +0 +120 +absolute + + + +0.01 +smooth + +8.536461850020892 +47.34973858235712 +424.88646295156667 +19.133388270739562 +89.13729098300871 +0 +120 +absolute + + + +0.01 +smooth + +8.536462589245366 +47.349738899213136 +424.92497827198184 +19.141005550644838 +89.13769771345535 +0 +120 +absolute + + + +0.01 +smooth + +8.536463330054646 +47.349739217211464 +424.96334401187323 +19.147957948510644 +89.13802099676778 +0 +120 +absolute + + + +0.01 +smooth + +8.536464072409352 +47.34973953633698 +425.00155732891113 +19.154222262351727 +89.13825805645848 +0 +120 +absolute + + + +0.01 +smooth + +8.536464816270101 +47.34973985657448 +425.03961538076595 +19.159775290182832 +89.13840611604003 +0 +120 +absolute + + + +0.01 +smooth + +8.536465561597515 +47.34974017790882 +425.07751532510804 +19.164593830018713 +89.138462399025 +0 +120 +absolute + + + +0.01 +smooth + +8.536466308863819 +47.34974050058932 +425.1152897687575 +19.16894674811339 +89.13844487269157 +0 +120 +absolute + + + +0.01 +smooth + +8.536467058776509 +47.34974082498641 +425.15298767690854 +19.173248422202416 +89.13838317237035 +0 +120 +absolute + + + +0.01 +smooth + +8.536467811305132 +47.34974115108859 +425.19060691957327 +19.177499329375102 +89.13827841564921 +0 +120 +absolute + + + +0.01 +smooth + +8.536468566412912 +47.34974147888108 +425.2281449295779 +19.181696374451352 +89.1381314700934 +0 +120 +absolute + + + +0.01 +smooth + +8.536469324063077 +47.34974180834913 +425.2655991397493 +19.18583646225111 +89.13794320326836 +0 +120 +absolute + + + +0.01 +smooth + +8.536470084218866 +47.34974213947798 +425.30296698291386 +19.189916497594286 +89.13771448273945 +0 +120 +absolute + + + +0.01 +smooth + +8.536470846843498 +47.34974247225287 +425.34024589189835 +19.193933385300816 +89.13744617607193 +0 +120 +absolute + + + +0.01 +smooth + +8.536471611900213 +47.34974280665906 +425.3774332995297 +19.19788403019061 +89.13713915083129 +0 +120 +absolute + + + +0.01 +smooth + +8.536472379352235 +47.34974314268174 +425.4145266386339 +19.201765337083597 +89.13679427458275 +0 +120 +absolute + + + +0.01 +smooth + +8.536473149162795 +47.3497434803062 +425.45152334203806 +19.205574210799696 +89.13641241489178 +0 +120 +absolute + + + +0.01 +smooth + +8.536473921295125 +47.349743819517656 +425.48842084256864 +19.209307556158837 +89.13599443932371 +0 +120 +absolute + + + +0.01 +smooth + +8.53647469571245 +47.34974416030132 +425.5252165730519 +19.212962277980935 +89.13554121544384 +0 +120 +absolute + + + +0.01 +smooth + +8.536475472378001 +47.34974450264248 +425.56190796631506 +19.216535281085914 +89.13505361081756 +0 +120 +absolute + + + +0.01 +smooth + +8.53647625125501 +47.349744846526356 +425.5984924551845 +19.2200234702937 +89.13453249301025 +0 +120 +absolute + + + +0.01 +smooth + +8.536477032306705 +47.349745191938155 +425.63496747248644 +19.223423750424207 +89.1339787295872 +0 +120 +absolute + + + +0.01 +smooth + +8.536477815496319 +47.349745538863175 +425.67133045104816 +19.226733026297378 +89.13339318811386 +0 +120 +absolute + + + +0.01 +smooth + +8.536478600787078 +47.349745887286616 +425.7075788236958 +19.229948202733112 +89.13277673615553 +0 +120 +absolute + + + +0.01 +smooth + +8.536479388142213 +47.349746237193706 +425.7437100232562 +19.233066184551344 +89.13213024127755 +0 +120 +absolute + + + +0.01 +smooth + +8.53648017752496 +47.349746588569744 +425.77972148255606 +19.236083876572003 +89.13145457104534 +0 +120 +absolute + + + +0.01 +smooth + +8.536480968898536 +47.3497469413999 +425.81561063442155 +19.238998183614996 +89.13075059302419 +0 +120 +absolute + + + +0.01 +smooth + +8.536481762226181 +47.349747295669445 +425.8513749116798 +19.24180601050025 +89.13001917477948 +0 +120 +absolute + + + +0.01 +smooth + +8.536482557471121 +47.34974765136362 +425.8870117471571 +19.2445042620477 +89.12926118387657 +0 +120 +absolute + + + +0.01 +smooth + +8.536483354596587 +47.349748008467664 +425.9225185736802 +19.247089843077255 +89.12847748788083 +0 +120 +absolute + + + +0.01 +smooth + +8.536484153565807 +47.3497483669668 +425.95789282407566 +19.249559658408845 +89.12766895435759 +0 +120 +absolute + + + +0.01 +smooth + +8.536484954342015 +47.34974872684628 +425.9931319311702 +19.25191061286239 +89.1268364508722 +0 +120 +absolute + + + +0.01 +smooth + +8.536485756888435 +47.349749088091336 +426.0282333277903 +19.254139611257813 +89.12598084499007 +0 +120 +absolute + + + +0.01 +smooth + +8.536486561168301 +47.34974945068721 +426.06319444676257 +19.25624355841504 +89.12510300427651 +0 +120 +absolute + + + +0.01 +smooth + +8.536487367144842 +47.34974981461916 +426.09801272091374 +19.258219359153987 +89.12420379629688 +0 +120 +absolute + + + +0.01 +smooth + +8.536488174781287 +47.349750179872395 +426.1326855830704 +19.26006391829458 +89.12328408861654 +0 +120 +absolute + + + +0.01 +smooth + +8.536488984040867 +47.34975054643217 +426.16721046605915 +19.261774140656748 +89.12234474880087 +0 +120 +absolute + + + +0.01 +smooth + +8.53648979488681 +47.34975091428371 +426.2015848027065 +19.2633469310604 +89.12138664441517 +0 +120 +absolute + + + +0.01 +smooth + +8.53649060728235 +47.349751283412274 +426.2358060258392 +19.264779194325474 +89.12041064302485 +0 +120 +absolute + + + +0.01 +smooth + +8.53649142119071 +47.34975165380309 +426.269871568284 +19.26606783527188 +89.11941761219526 +0 +120 +absolute + + + +0.01 +smooth + +8.536492236575125 +47.3497520254414 +426.3037788628671 +19.267209758719552 +89.11840841949174 +0 +120 +absolute + + + +0.01 +smooth + +8.536493053398821 +47.34975239831244 +426.33752534241546 +19.2682018694884 +89.11738393247964 +0 +120 +absolute + + + +0.01 +smooth + +8.536493871625034 +47.349752772401445 +426.3711084397555 +19.26904107239836 +89.11634501872433 +0 +120 +absolute + + + +0.01 +smooth + +8.536494691216989 +47.34975314769366 +426.404525587714 +19.269724272269347 +89.11529254579118 +0 +120 +absolute + + + +0.01 +smooth + +8.536495512137916 +47.34975352417433 +426.4377742191175 +19.270248373921287 +89.11422738124551 +0 +120 +absolute + + + +0.01 +smooth + +8.536496334351046 +47.349753901828684 +426.47085176679263 +19.270610282174097 +89.11315039265268 +0 +120 +absolute + + + +0.01 +smooth + +8.536497157819607 +47.34975428064196 +426.503755663566 +19.270806901847706 +89.1120624475781 +0 +120 +absolute + + + +0.01 +smooth + +8.536497982569097 +47.34975466063373 +426.5364882675818 +19.270791841233468 +89.1109567913134 +0 +120 +absolute + + + +0.01 +smooth + +8.536498809372736 +47.34975504223535 +426.56911109336284 +19.270007615700287 +89.10973601518654 +0 +120 +absolute + + + +0.01 +smooth + +8.536499638444681 +47.34975542556957 +426.60164143927915 +19.26830439839262 +89.10837303929493 +0 +120 +absolute + + + +0.01 +smooth + +8.536500469750187 +47.34975581062181 +426.6340769155716 +19.265707664924317 +89.10687147616066 +0 +120 +absolute + + + +0.01 +smooth + +8.536501303254514 +47.34975619737755 +426.666415132482 +19.262242890909217 +89.105234938306 +0 +120 +absolute + + + +0.01 +smooth + +8.536502138922916 +47.349756585822256 +426.6986537002511 +19.25793555196116 +89.10346703825313 +0 +120 +absolute + + + +0.01 +smooth + +8.536502976720643 +47.34975697594136 +426.7307902291204 +19.252811123694002 +89.10157138852415 +0 +120 +absolute + + + +0.01 +smooth + +8.536503816612958 +47.34975736772033 +426.7628223293308 +19.246895081721565 +89.09955160164131 +0 +120 +absolute + + + +0.01 +smooth + +8.53650465856511 +47.34975776114462 +426.79474761112385 +19.240212901657703 +89.09741129012677 +0 +120 +absolute + + + +0.01 +smooth + +8.53650550254236 +47.349758156199684 +426.8265636847405 +19.232790059116258 +89.09515406650272 +0 +120 +absolute + + + +0.01 +smooth + +8.536506348509961 +47.349758552870995 +426.85826816042226 +19.224652029711077 +89.09278354329135 +0 +120 +absolute + + + +0.01 +smooth + +8.536507196433169 +47.34975895114399 +426.88985864841015 +19.215824289056 +89.09030333301484 +0 +120 +absolute + + + +0.01 +smooth + +8.536508046277243 +47.34975935100415 +426.9213327589456 +19.20633231276487 +89.0877170481954 +0 +120 +absolute + + + +0.01 +smooth + +8.536508898007437 +47.349759752436924 +426.9526881022698 +19.19620157645153 +89.08502830135521 +0 +120 +absolute + + + +0.01 +smooth + +8.536509751589003 +47.34976015542776 +426.98392228862383 +19.185457555729823 +89.0822407050164 +0 +120 +absolute + + + +0.01 +smooth + +8.536510606987203 +47.34976055996214 +427.015032928249 +19.1741257262136 +89.07935787170123 +0 +120 +absolute + + + +0.01 +smooth + +8.536511464167285 +47.349760966025485 +427.0460176313866 +19.162231563516684 +89.0763834139318 +0 +120 +absolute + + + +0.01 +smooth + +8.536512323094513 +47.34976137360328 +427.0768740082776 +19.149800543252937 +89.07332094423039 +0 +120 +absolute + + + +0.01 +smooth + +8.536513183734133 +47.34976178268096 +427.1075996691636 +19.136858141036193 +89.07017407511908 +0 +120 +absolute + + + +0.01 +smooth + +8.53651404605141 +47.349762193244004 +427.13819222428555 +19.123429832480298 +89.06694641912016 +0 +120 +absolute + + + +0.01 +smooth + +8.5365149100116 +47.349762605277874 +427.168649283885 +19.109541093199102 +89.06364158875579 +0 +120 +absolute + + + +0.01 +smooth + +8.53651577557995 +47.349763018768016 +427.19896845820284 +19.095217398806433 +89.06026319654809 +0 +120 +absolute + + + +0.01 +smooth + +8.536516642721725 +47.34976343369988 +427.2291473574804 +19.080484224916145 +89.05681485501928 +0 +120 +absolute + + + +0.01 +smooth + +8.536517511402174 +47.349763850058935 +427.25918359195896 +19.06536704714208 +89.05330017669158 +0 +120 +absolute + + + +0.01 +smooth + +8.536518381586555 +47.34976426783063 +427.28907477187965 +19.04989134109808 +89.04972277408713 +0 +120 +absolute + + + +0.01 +smooth + +8.536519253240126 +47.34976468700044 +427.3188185074839 +19.034082582397982 +89.04608625972816 +0 +120 +absolute + + + +0.01 +smooth + +8.536520126328139 +47.34976510755379 +427.34841240901284 +19.01796624665564 +89.0423942461368 +0 +120 +absolute + + + +0.01 +smooth + +8.536521000815851 +47.34976552947617 +427.37785408670754 +19.00156780948489 +89.03865034583526 +0 +120 +absolute + + + +0.01 +smooth + +8.53652187666852 +47.34976595275303 +427.40714115080937 +18.984912746499578 +89.03485817134573 +0 +120 +absolute + + + +0.01 +smooth + +8.536522753851397 +47.34976637736982 +427.4362712115597 +18.96802653331354 +89.0310213351904 +0 +120 +absolute + + + +0.01 +smooth + +8.536523632329741 +47.34976680331201 +427.46524187919954 +18.95093464554063 +89.02714344989144 +0 +120 +absolute + + + +0.01 +smooth + +8.53652451206881 +47.349767230565035 +427.4940507639702 +18.933662558794687 +89.02322812797104 +0 +120 +absolute + + + +0.01 +smooth + +8.536525393033857 +47.34976765911436 +427.5226954761129 +18.91623574868955 +89.01927898195137 +0 +120 +absolute + + + +0.01 +smooth + +8.536526275190138 +47.34976808894546 +427.55117362586884 +18.898679690839067 +89.01529962435464 +0 +120 +absolute + + + +0.01 +smooth + +8.536527158502906 +47.34976852004378 +427.57948282347934 +18.88101986085708 +89.01129366770304 +0 +120 +absolute + + + +0.01 +smooth + +8.536528042937421 +47.34976895239478 +427.6076206791855 +18.86328173435743 +89.00726472451873 +0 +120 +absolute + + + +0.01 +smooth + +8.536528928458937 +47.34976938598392 +427.6355848032287 +18.84549078695396 +89.00321640732389 +0 +120 +absolute + + + +0.01 +smooth + +8.53652981503271 +47.34976982079665 +427.6633728058501 +18.82767249426052 +88.99915232864075 +0 +120 +absolute + + + +0.01 +smooth + +8.536530702623995 +47.34977025681844 +427.6909822972909 +18.80985233189094 +88.99507610099144 +0 +120 +absolute + + + +0.01 +smooth + +8.536531591198049 +47.349770694034724 +427.7184108877923 +18.792055775459076 +88.99099133689819 +0 +120 +absolute + + + +0.01 +smooth + +8.536532480720128 +47.34977113243098 +427.7456561875956 +18.77430830057877 +88.98690164888313 +0 +120 +absolute + + + +0.01 +smooth + +8.536533371452524 +47.34977157216522 +427.77274294433533 +18.756338068564077 +88.98277319288755 +0 +120 +absolute + + + +0.01 +smooth + +8.536534264047486 +47.349772013621525 +427.7997314995421 +18.737480541678966 +88.97852237198245 +0 +120 +absolute + + + +0.01 +smooth + +8.536535158499333 +47.34977245680142 +427.8266220597989 +18.717727537910264 +88.97414802611365 +0 +120 +absolute + + + +0.01 +smooth + +8.536536054774894 +47.34977290169044 +427.8534123187744 +18.697098358729992 +88.96965245280788 +0 +120 +absolute + + + +0.01 +smooth + +8.536536952840999 +47.34977334827416 +427.8800999701375 +18.67561230561017 +88.9650379495919 +0 +120 +absolute + + + +0.01 +smooth + +8.536537852664466 +47.34977379653809 +427.9066827075565 +18.65328868002282 +88.96030681399232 +0 +120 +absolute + + + +0.01 +smooth + +8.536538754212126 +47.34977424646777 +427.9331582247001 +18.63014678343996 +88.95546134353586 +0 +120 +absolute + + + +0.01 +smooth + +8.5365396574508 +47.349774698048755 +427.9595242152372 +18.606205917333618 +88.95050383574925 +0 +120 +absolute + + + +0.01 +smooth + +8.536540562347321 +47.349775151266584 +427.98577837283614 +18.58148538317582 +88.9454365881592 +0 +120 +absolute + + + +0.01 +smooth + +8.536541468868508 +47.34977560610679 +428.0119183911655 +18.556004482438574 +88.94026189829235 +0 +120 +absolute + + + +0.01 +smooth + +8.536542376981192 +47.34977606255492 +428.03794196389435 +18.52978251659391 +88.93498206367546 +0 +120 +absolute + + + +0.01 +smooth + +8.536543286652194 +47.34977652059652 +428.0638467846909 +18.50283878711385 +88.92959938183517 +0 +120 +absolute + + + +0.01 +smooth + +8.536544197848349 +47.34977698021713 +428.0896305472239 +18.47519259547041 +88.92411615029827 +0 +120 +absolute + + + +0.01 +smooth + +8.536545110536466 +47.34977744140227 +428.115290945162 +18.446863243135606 +88.91853466659136 +0 +120 +absolute + + + +0.01 +smooth + +8.536546024683389 +47.349777904137525 +428.14082567217395 +18.41787003158148 +88.91285722824121 +0 +120 +absolute + + + +0.01 +smooth + +8.536546940255935 +47.34977836840841 +428.16623242192827 +18.388232262280038 +88.90708613277448 +0 +120 +absolute + + + +0.01 +smooth + +8.536547857220928 +47.34977883420043 +428.1915088880933 +18.357969236703298 +88.90122367771784 +0 +120 +absolute + + + +0.01 +smooth + +8.5365487755452 +47.34977930149921 +428.21665276433833 +18.32710025632329 +88.89527216059808 +0 +120 +absolute + + + +0.01 +smooth + +8.536549695195571 +47.34977977029022 +428.2416617443315 +18.295644622612038 +88.88923387894185 +0 +120 +absolute + + + +0.01 +smooth + +8.53655061613887 +47.34978024055902 +428.2665335217415 +18.263621637041553 +88.88311113027581 +0 +120 +absolute + + + +0.01 +smooth + +8.536551538341923 +47.34978071229118 +428.29126579023733 +18.231050601083865 +88.87690621212674 +0 +120 +absolute + + + +0.01 +smooth + +8.536552461771556 +47.34978118547221 +428.31585624348713 +18.19795081621099 +88.87062142202129 +0 +120 +absolute + + + +0.01 +smooth + +8.536553386394592 +47.34978166008766 +428.34030257515974 +18.164341583894956 +88.86425905748615 +0 +120 +absolute + + + +0.01 +smooth + +8.536554312177861 +47.34978213612307 +428.36460247892387 +18.13024220560778 +88.85782141604804 +0 +120 +absolute + + + +0.01 +smooth + +8.536555239088184 +47.34978261356399 +428.388753648448 +18.095671982821482 +88.85131079523367 +0 +120 +absolute + + + +0.01 +smooth + +8.536556167092392 +47.34978309239594 +428.4127537774009 +18.060650217008085 +88.84472949256971 +0 +120 +absolute + + + +0.01 +smooth + +8.536557096157306 +47.34978357260449 +428.4366005594512 +18.02519620963961 +88.8380798055829 +0 +120 +absolute + + + +0.01 +smooth + +8.536558026249757 +47.34978405417516 +428.4602916882675 +17.98932926218808 +88.8313640317999 +0 +120 +absolute + + + +0.01 +smooth + +8.536558957336567 +47.3497845370935 +428.4838248575183 +17.95306867612551 +88.82458446874742 +0 +120 +absolute + + + +0.01 +smooth + +8.536559889384561 +47.34978502134504 +428.5071977608724 +17.916433752923936 +88.81774341395214 +0 +120 +absolute + + + +0.01 +smooth + +8.53656082236057 +47.349785506915346 +428.5304080919984 +17.879443794055362 +88.81084316494082 +0 +120 +absolute + + + +0.01 +smooth + +8.536561756231414 +47.349785993789936 +428.55345354456495 +17.842118100991822 +88.80388601924011 +0 +120 +absolute + + + +0.01 +smooth + +8.53656269096392 +47.34978648195437 +428.5763318122407 +17.804475975205335 +88.79687427437672 +0 +120 +absolute + + + +0.01 +smooth + +8.536563626524918 +47.34978697139417 +428.59904058869415 +17.766536718167917 +88.78981022787735 +0 +120 +absolute + + + +0.01 +smooth + +8.536564562881232 +47.34978746209488 +428.62157756759404 +17.728319631351592 +88.7826961772687 +0 +120 +absolute + + + +0.01 +smooth + +8.536565499999686 +47.34978795404206 +428.64394044260894 +17.68984401622839 +88.77553442007746 +0 +120 +absolute + + + +0.01 +smooth + +8.536566437847107 +47.34978844722124 +428.66612690740766 +17.651129174270316 +88.76832725383035 +0 +120 +absolute + + + +0.01 +smooth + +8.53656737639032 +47.34978894161795 +428.68813465565864 +17.612194406949406 +88.76107697605407 +0 +120 +absolute + + + +0.01 +smooth + +8.53656831559615 +47.349789437217744 +428.7099613810306 +17.573059015737677 +88.75378588427529 +0 +120 +absolute + + + +0.01 +smooth + +8.536569255431427 +47.34978993400617 +428.73160477719216 +17.533742302107143 +88.74645627602074 +0 +120 +absolute + + + +0.01 +smooth + +8.536570195881533 +47.349790431979955 +428.7530645066457 +17.494248599533673 +88.73908857734311 +0 +120 +absolute + + + +0.01 +smooth + +8.536571137526073 +47.34979093149425 +428.77440322836776 +17.4541020755762 +88.73162323140444 +0 +120 +absolute + + + +0.01 +smooth + +8.536572080629892 +47.34979143271379 +428.7956501142664 +17.413078114176376 +88.72403223584534 +0 +120 +absolute + + + +0.01 +smooth + +8.536573025161003 +47.349791935624104 +428.8168028321504 +17.371191058308018 +88.71631748934658 +0 +120 +absolute + + + +0.01 +smooth + +8.536573971087423 +47.34979244021073 +428.8378590498294 +17.32845525094495 +88.70848089058904 +0 +120 +absolute + + + +0.01 +smooth + +8.53657491837715 +47.34979294645918 +428.85881643511226 +17.284885035060967 +88.70052433825353 +0 +120 +absolute + + + +0.01 +smooth + +8.5365758669982 +47.34979345435498 +428.87967265580846 +17.24049475362991 +88.69244973102086 +0 +120 +absolute + + + +0.01 +smooth + +8.536576816918586 +47.349793963883705 +428.90042537972715 +17.1952987496256 +88.68425896757194 +0 +120 +absolute + + + +0.01 +smooth + +8.536577768106314 +47.34979447503082 +428.92107227467744 +17.14931136602184 +88.67595394658751 +0 +120 +absolute + + + +0.01 +smooth + +8.536578720529395 +47.349794987781884 +428.94161100846856 +17.10254694579246 +88.66753656674844 +0 +120 +absolute + + + +0.01 +smooth + +8.536579674155838 +47.34979550212244 +428.9620392489097 +17.055019831911284 +88.65900872673558 +0 +120 +absolute + + + +0.01 +smooth + +8.536580628953654 +47.34979601803798 +428.98235466381027 +17.00674436735212 +88.65037232522974 +0 +120 +absolute + + + +0.01 +smooth + +8.536581584890857 +47.349796535514066 +429.00255492097943 +16.9577348950888 +88.64162926091176 +0 +120 +absolute + + + +0.01 +smooth + +8.536582541935456 +47.34979705453622 +429.02263768822627 +16.908005758095136 +88.63278143246248 +0 +120 +absolute + + + +0.01 +smooth + +8.536583500055453 +47.34979757508996 +429.04260063335994 +16.85757129934494 +88.62383073856269 +0 +120 +absolute + + + +0.01 +smooth + +8.53658445921887 +47.349798097160836 +429.06244142419 +16.80644586181205 +88.61477907789332 +0 +120 +absolute + + + +0.01 +smooth + +8.536585419393708 +47.34979862073435 +429.0821577285252 +16.754643788470272 +88.60562834913507 +0 +120 +absolute + + + +0.01 +smooth + +8.536586380547982 +47.34979914579604 +429.1017472141752 +16.70217942229343 +88.59638045096888 +0 +120 +absolute + + + +0.01 +smooth + +8.536587342649703 +47.34979967233145 +429.121207548949 +16.64906710625534 +88.58703728207553 +0 +120 +absolute + + + +0.01 +smooth + +8.536588305666875 +47.34980020032608 +429.1405364006556 +16.595321183329826 +88.57760074113583 +0 +120 +absolute + + + +0.01 +smooth + +8.536589269567516 +47.349800729765505 +429.1597314371047 +16.54095599649071 +88.5680727268307 +0 +120 +absolute + + + +0.01 +smooth + +8.53659023431963 +47.34980126063521 +429.1787903261051 +16.485985888711802 +88.5584551378409 +0 +120 +absolute + + + +0.01 +smooth + +8.53659119989123 +47.349801792920736 +429.1977107354663 +16.430425202966923 +88.54874987284725 +0 +120 +absolute + + + +0.01 +smooth + +8.536592166250326 +47.34980232660761 +429.2164903329973 +16.374288282229898 +88.53895883053065 +0 +120 +absolute + + + +0.01 +smooth + +8.536593133364928 +47.34980286168138 +429.23512678650735 +16.317589469474548 +88.52908390957185 +0 +120 +absolute + + + +0.01 +smooth + +8.536594101203047 +47.34980339812756 +429.2536177638058 +16.260343107674686 +88.51912700865176 +0 +120 +absolute + + + +0.01 +smooth + +8.53659506973269 +47.349803935931675 +429.27196093270175 +16.202563539804135 +88.50909002645118 +0 +120 +absolute + + + +0.01 +smooth + +8.536596038921873 +47.34980447507926 +429.2901539610044 +16.14426510883672 +88.49897486165094 +0 +120 +absolute + + + +0.01 +smooth + +8.536597008738601 +47.349805015555845 +429.3081945165231 +16.085462157746246 +88.48878341293185 +0 +120 +absolute + + + +0.01 +smooth + +8.536597979150887 +47.34980555734696 +429.3260802670669 +16.026169029506544 +88.47851757897479 +0 +120 +absolute + + + +0.01 +smooth + +8.536598950126738 +47.34980610043813 +429.34380888044507 +15.966400067091431 +88.46817925846055 +0 +120 +absolute + + + +0.01 +smooth + +8.536599921634169 +47.34980664481489 +429.36137802446694 +15.906169613474725 +88.45777035006998 +0 +120 +absolute + + + +0.01 +smooth + +8.536600893641184 +47.349807190462755 +429.37878536694154 +15.845492011630256 +88.44729275248392 +0 +120 +absolute + + + +0.01 +smooth + +8.536601866115799 +47.34980773736727 +429.3960285756782 +15.784381604531829 +88.43674836438318 +0 +120 +absolute + + + +0.01 +smooth + +8.53660283902602 +47.34980828551395 +429.41310531848615 +15.722852735153264 +88.42613908444861 +0 +120 +absolute + + + +0.01 +smooth + +8.53660381233986 +47.34980883488834 +429.4300132631745 +15.660919746468386 +88.41546681136103 +0 +120 +absolute + + + +0.01 +smooth + +8.536604786025329 +47.34980938547596 +429.44675007755257 +15.598596981451017 +88.40473344380129 +0 +120 +absolute + + + +0.01 +smooth + +8.536605760050435 +47.349809937262336 +429.4633134294295 +15.53589878307497 +88.3939408804502 +0 +120 +absolute + + + +0.01 +smooth + +8.53660673438319 +47.349810490233 +429.47970098661455 +15.472839494314071 +88.3830910199886 +0 +120 +absolute + + + +0.01 +smooth + +8.536607708991603 +47.349811044373475 +429.49591041691696 +15.409433458142132 +88.37218576109734 +0 +120 +absolute + + + +0.01 +smooth + +8.536608683843683 +47.34981159966931 +429.5119393881459 +15.34569501753298 +88.36122700245723 +0 +120 +absolute + + + +0.01 +smooth + +8.536609659082176 +47.3498121562134 +429.52780726176326 +15.281517689970686 +88.35020074578134 +0 +120 +absolute + + + +0.01 +smooth + +8.536610635313368 +47.3498127143833 +429.5435908245675 +15.216473848038406 +88.33905077662192 +0 +120 +absolute + + + +0.01 +smooth + +8.536611612564656 +47.3498132742005 +429.5592948312328 +15.150535489075038 +88.32777350308798 +0 +120 +absolute + + + +0.01 +smooth + +8.536612590804873 +47.349813835650416 +429.57491676092695 +15.08371506637092 +88.31637065791666 +0 +120 +absolute + + + +0.01 +smooth + +8.53661357000286 +47.349814398718514 +429.59045409281714 +15.016025033216367 +88.30484397384505 +0 +120 +absolute + + + +0.01 +smooth + +8.536614550127457 +47.34981496339028 +429.6059043060711 +14.94747784290173 +88.29319518361028 +0 +120 +absolute + + + +0.01 +smooth + +8.536615531147499 +47.349815529651146 +429.6212648798564 +14.87808594871733 +88.2814260199495 +0 +120 +absolute + + + +0.01 +smooth + +8.536616513031825 +47.34981609748659 +429.6365332933404 +14.807861803953513 +88.26953821559985 +0 +120 +absolute + + + +0.01 +smooth + +8.536617495749274 +47.34981666688202 +429.65170702569065 +14.736817861900592 +88.25753350329839 +0 +120 +absolute + + + +0.01 +smooth + +8.53661847926869 +47.34981723782296 +429.6667835560748 +14.664966575848924 +88.24541361578231 +0 +120 +absolute + + + +0.01 +smooth + +8.536619463558905 +47.34981781029484 +429.68176036366043 +14.592320399088825 +88.23318028578876 +0 +120 +absolute + + + +0.01 +smooth + +8.536620448588762 +47.3498183842831 +429.696634927615 +14.518891784910638 +88.22083524605482 +0 +120 +absolute + + + +0.01 +smooth + +8.536621434327097 +47.349818959773216 +429.71140472710573 +14.444693186604692 +88.20838022931761 +0 +120 +absolute + + + +0.01 +smooth + +8.536622420742749 +47.34981953675064 +429.7260672413006 +14.369737057461315 +88.19581696831425 +0 +120 +absolute + + + +0.01 +smooth + +8.536623407804557 +47.34982011520082 +429.7406199493669 +14.294035850770845 +88.18314719578193 +0 +120 +absolute + + + +0.01 +smooth + +8.536624395481356 +47.34982069510923 +429.7550603304722 +14.21760201982362 +88.17037264445771 +0 +120 +absolute + + + +0.01 +smooth + +8.536625383741992 +47.34982127646133 +429.769385863784 +14.140448017909964 +88.15749504707878 +0 +120 +absolute + + + +0.01 +smooth + +8.536626372555299 +47.34982185924257 +429.78359402847013 +14.062586298320218 +88.14451613638225 +0 +120 +absolute + + + +0.01 +smooth + +8.536627361890117 +47.3498224434384 +429.7976823036978 +13.984029314344708 +88.13143764510522 +0 +120 +absolute + + + +0.01 +smooth + +8.536628351715287 +47.3498230290343 +429.8116481686346 +13.904789519273773 +88.11826130598487 +0 +120 +absolute + + + +0.01 +smooth + +8.53662934199964 +47.34982361601569 +429.82548910244793 +13.82487936639774 +88.10498885175824 +0 +120 +absolute + + + +0.01 +smooth + +8.536630332712026 +47.34982420436807 +429.8392025843056 +13.744311309006948 +88.09162201516253 +0 +120 +absolute + + + +0.01 +smooth + +8.536631323821272 +47.34982479407687 +429.852786093375 +13.663097800391725 +88.07816252893487 +0 +120 +absolute + + + +0.01 +smooth + +8.536632315296224 +47.34982538512756 +429.8662371088237 +13.581251293842406 +88.06461212581235 +0 +120 +absolute + + + +0.01 +smooth + +8.536633307105719 +47.34982597750559 +429.8795531098192 +13.498784242649327 +88.05097253853212 +0 +120 +absolute + + + +0.01 +smooth + +8.536634299218594 +47.349826571196424 +429.89273157552896 +13.415709100102816 +88.03724549983131 +0 +120 +absolute + + + +0.01 +smooth + +8.536635291603691 +47.349827166185506 +429.9057699851206 +13.332038319493211 +88.02343274244703 +0 +120 +absolute + + + +0.01 +smooth + +8.536636284229845 +47.34982776245831 +429.9186658177617 +13.24778435411085 +88.00953599911645 +0 +120 +absolute + + + +0.01 +smooth + +8.536637277065894 +47.34982836000029 +429.9314165526197 +13.162959657246052 +87.99555700257665 +0 +120 +absolute + + + +0.01 +smooth + +8.536638270080683 +47.349828958796905 +429.94401966886215 +13.077576682189157 +87.98149748556477 +0 +120 +absolute + + + +0.01 +smooth + +8.536639263243046 +47.349829558833605 +429.95647264565656 +12.991647882230497 +87.96735918081794 +0 +120 +absolute + + + +0.01 +smooth + +8.536640256521821 +47.34983016009585 +429.96877296217053 +12.905185710660408 +87.95314382107333 +0 +120 +absolute + + + +0.01 +smooth + +8.53664124988585 +47.349830762569106 +429.9809180975715 +12.81820262076922 +87.93885313906799 +0 +120 +absolute + + + +0.01 +smooth + +8.536642243303968 +47.34983136623881 +429.9929055310271 +12.730711065847267 +87.92448886753911 +0 +120 +absolute + + + +0.01 +smooth + +8.536643236745014 +47.34983197109045 +430.0047327417047 +12.642723499184882 +87.9100527392238 +0 +120 +absolute + + + +0.01 +smooth + +8.53664423017783 +47.34983257710945 +430.016397208772 +12.5542523740724 +87.89554648685919 +0 +120 +absolute + + + +0.01 +smooth + +8.536645223571252 +47.3498331842813 +430.0278964113965 +12.465310143800153 +87.8809718431824 +0 +120 +absolute + + + +0.01 +smooth + +8.53664621689412 +47.349833792591426 +430.0392278287457 +12.375909261658471 +87.86633054093056 +0 +120 +absolute + + + +0.01 +smooth + +8.536647210115273 +47.34983440202532 +430.05038893998704 +12.28606218093769 +87.85162431284081 +0 +120 +absolute + + + +0.01 +smooth + +8.536648203203546 +47.34983501256842 +430.0613772242882 +12.195781354928155 +87.83685489165028 +0 +120 +absolute + + + +0.01 +smooth + +8.536649196129645 +47.34983562420732 +430.07219044025743 +12.105078067416473 +87.82202385357422 +0 +120 +absolute + + + +0.01 +smooth + +8.536650189334264 +47.349836237215854 +430.0828966664579 +12.01366872507012 +87.80709331822784 +0 +120 +absolute + + + +0.01 +smooth + +8.53665118315209 +47.34983685180282 +430.09354770563704 +11.921335827348607 +87.79203428101336 +0 +120 +absolute + + + +0.01 +smooth + +8.536652177552385 +47.349837467953535 +430.1041405142627 +11.82809097226318 +87.77684840557929 +0 +120 +absolute + + + +0.01 +smooth + +8.536653172504419 +47.349838085653374 +430.1146720488031 +11.733945757825087 +87.76153735557412 +0 +120 +absolute + + + +0.01 +smooth + +8.536654167977458 +47.34983870488768 +430.1251392657265 +11.638911782045579 +87.74610279464642 +0 +120 +absolute + + + +0.01 +smooth + +8.536655163940768 +47.34983932564182 +430.13553912150104 +11.543000642935915 +87.73054638644474 +0 +120 +absolute + + + +0.01 +smooth + +8.536656160363611 +47.34983994790112 +430.14586857259457 +11.446223938507334 +87.71486979461758 +0 +120 +absolute + + + +0.01 +smooth + +8.53665715721526 +47.34984057165095 +430.15612457547553 +11.348593266771092 +87.69907468281345 +0 +120 +absolute + + + +0.01 +smooth + +8.536658154464973 +47.34984119687665 +430.16630408661194 +11.250120225738446 +87.68316271468095 +0 +120 +absolute + + + +0.01 +smooth + +8.536659152082022 +47.349841823563565 +430.1764040624719 +11.15081641342063 +87.6671355538685 +0 +120 +absolute + + + +0.01 +smooth + +8.536660150035669 +47.34984245169704 +430.1864214595233 +11.05069342782891 +87.65099486402468 +0 +120 +absolute + + + +0.01 +smooth + +8.536661148295181 +47.34984308126245 +430.19635323423455 +10.949762866974536 +87.63474230879804 +0 +120 +absolute + + + +0.01 +smooth + +8.536662146829824 +47.349843712245125 +430.20619634307377 +10.848036328868744 +87.6183795518371 +0 +120 +absolute + + + +0.01 +smooth + +8.536663145608872 +47.349844344630434 +430.2159477425092 +10.745525411522799 +87.6019082567904 +0 +120 +absolute + + + +0.01 +smooth + +8.536664144601577 +47.349844978403695 +430.2256043890085 +10.642241712947943 +87.58533008730637 +0 +120 +absolute + + + +0.01 +smooth + +8.536665143777212 +47.349845613550286 +430.23516323904016 +10.538196831155428 +87.56864670703368 +0 +120 +absolute + + + +0.01 +smooth + +8.536666143105046 +47.349846250055556 +430.24462124907234 +10.433402364156509 +87.5518597796208 +0 +120 +absolute + + + +0.01 +smooth + +8.536667142554336 +47.34984688790483 +430.25397537557285 +10.327869909962427 +87.53497096871621 +0 +120 +absolute + + + +0.01 +smooth + +8.536668142094358 +47.34984752708347 +430.26322257501005 +10.221611066584442 +87.51798193796849 +0 +120 +absolute + + + +0.01 +smooth + +8.536669141694372 +47.34984816757686 +430.27235980385217 +10.114637432033806 +87.50089435102618 +0 +120 +absolute + + + +0.01 +smooth + +8.536670141323643 +47.34984880937031 +430.28138401856694 +10.006960604321758 +87.48370987153776 +0 +120 +absolute + + + +0.01 +smooth + +8.536671140951443 +47.34984945244917 +430.29029217562294 +9.89859218145956 +87.46643016315178 +0 +120 +absolute + + + +0.01 +smooth + +8.536672140547033 +47.34985009679881 +430.29908123148795 +9.789543761458454 +87.44905688951678 +0 +120 +absolute + + + +0.01 +smooth + +8.53667314007968 +47.34985074240457 +430.3077481426302 +9.679826942329704 +87.4315917142813 +0 +120 +absolute + + + +0.01 +smooth + +8.536674139518649 +47.34985138925181 +430.31628986551783 +9.569453322084543 +87.41403630109383 +0 +120 +absolute + + + +0.01 +smooth + +8.53667513883321 +47.34985203732587 +430.324703356619 +9.458434498734231 +87.39639231360292 +0 +120 +absolute + + + +0.01 +smooth + +8.536676137992623 +47.34985268661208 +430.33298557240187 +9.346782070290011 +87.37866141545709 +0 +120 +absolute + + + +0.01 +smooth + +8.53667713696616 +47.34985333709584 +430.3411334693343 +9.234507634763144 +87.36084527030488 +0 +120 +absolute + + + +0.01 +smooth + +8.536678135723083 +47.34985398876246 +430.3491440038848 +9.121622790164874 +87.34294554179479 +0 +120 +absolute + + + +0.01 +smooth + +8.536679134232658 +47.349854641597304 +430.3570141325212 +9.008139134506452 +87.3249638935754 +0 +120 +absolute + + + +0.01 +smooth + +8.536680132464152 +47.34985529558571 +430.3647408117117 +8.89406826579913 +87.30690198929518 +0 +120 +absolute + + + +0.01 +smooth + +8.536681130386832 +47.34985595071305 +430.3723209979245 +8.779421782054158 +87.2887614926027 +0 +120 +absolute + + + +0.01 +smooth + +8.536682127969964 +47.34985660696467 +430.3797516476276 +8.664211281282787 +87.27054406714647 +0 +120 +absolute + + + +0.01 +smooth + +8.53668312518281 +47.349857264325905 +430.38702971728924 +8.548448361496265 +87.25225137657502 +0 +120 +absolute + + + +0.01 +smooth + +8.536684121994641 +47.34985792278211 +430.3941521633774 +8.432144620705845 +87.2338850845369 +0 +120 +absolute + + + +0.01 +smooth + +8.53668511837472 +47.34985858231863 +430.40111594236026 +8.315311656922788 +87.21544685468058 +0 +120 +absolute + + + +0.01 +smooth + +8.536686114292312 +47.34985924292084 +430.4079180107061 +8.197961068158325 +87.19693835065465 +0 +120 +absolute + + + +0.01 +smooth + +8.536687109716688 +47.34985990457407 +430.4145553248829 +8.080104452423711 +87.17836123610759 +0 +120 +absolute + + + +0.01 +smooth + +8.53668810461711 +47.34986056726366 +430.4210248413587 +7.961753407730201 +87.15971717468798 +0 +120 +absolute + + + +0.01 +smooth + +8.536689098962842 +47.34986123097499 +430.42732351660175 +7.842919532089046 +87.14100783004432 +0 +120 +absolute + + + +0.01 +smooth + +8.536690092827374 +47.34986189575494 +430.4334693058044 +7.723554994993508 +87.12222686666787 +0 +120 +absolute + + + +0.01 +smooth + +8.536691086805243 +47.34986256195811 +430.4395845262633 +7.603314676532434 +87.10332794576445 +0 +120 +absolute + + + +0.01 +smooth + +8.536692080969853 +47.349863229631296 +430.4456855192948 +7.482150371006538 +87.08430471266101 +0 +120 +absolute + + + +0.01 +smooth + +8.536693075290383 +47.349863898759715 +430.4517675573223 +7.360073284921796 +87.06515881100853 +0 +120 +absolute + + + +0.01 +smooth + +8.536694069736006 +47.34986456932855 +430.45782591276907 +7.237094624784184 +87.04589188445786 +0 +120 +absolute + + + +0.01 +smooth + +8.536695064275904 +47.34986524132307 +430.4638558580589 +7.11322559709968 +87.02650557666003 +0 +120 +absolute + + + +0.01 +smooth + +8.536696058879253 +47.34986591472848 +430.46985266561506 +6.988477408374264 +87.00700153126593 +0 +120 +absolute + + + +0.01 +smooth + +8.536697053515233 +47.34986658952999 +430.47581160786115 +6.862861265113919 +86.98738139192653 +0 +120 +absolute + + + +0.01 +smooth + +8.536698048153026 +47.349867265712845 +430.48172795722064 +6.736388373824605 +86.96764680229282 +0 +120 +absolute + + + +0.01 +smooth + +8.536699042761802 +47.34986794326223 +430.4875969861168 +6.609069941012308 +86.94779940601566 +0 +120 +absolute + + + +0.01 +smooth + +8.536700037310743 +47.34986862216338 +430.49341396697326 +6.4809171731830055 +86.92784084674607 +0 +120 +absolute + + + +0.01 +smooth + +8.536701031769033 +47.349869302401515 +430.49917417221354 +6.351941276842676 +86.90777276813496 +0 +120 +absolute + + + +0.01 +smooth + +8.53670202610584 +47.34986998396186 +430.5048728742608 +6.222153458497293 +86.88759681383326 +0 +120 +absolute + + + +0.01 +smooth + +8.536703020290348 +47.34987066682964 +430.5105053455391 +6.091564924652839 +86.86731462749195 +0 +120 +absolute + + + +0.01 +smooth + +8.536704014291738 +47.34987135099007 +430.51606685847133 +5.96018688181529 +86.846927852762 +0 +120 +absolute + + + +0.01 +smooth + +8.53670500807918 +47.34987203642836 +430.52155268548114 +5.828030536490619 +86.82643813329427 +0 +120 +absolute + + + +0.01 +smooth + +8.53670600162186 +47.34987272312974 +430.52695809899217 +5.69510709518481 +86.8058471127398 +0 +120 +absolute + + + +0.01 +smooth + +8.536706994888956 +47.349873411079436 +430.5322783714277 +5.5614277644038355 +86.78515643474947 +0 +120 +absolute + + + +0.01 +smooth + +8.536707987849637 +47.349874100262646 +430.5375087752112 +5.427003750653673 +86.76436774297424 +0 +120 +absolute + + + +0.01 +smooth + +8.536708980473096 +47.349874790664636 +430.54264458276634 +5.291846260440314 +86.74348268106513 +0 +120 +absolute + + + +0.01 +smooth + +8.536709972728495 +47.34987548227056 +430.5476810665164 +5.155966500269711 +86.72250289267294 +0 +120 +absolute + + + +0.01 +smooth + +8.536710964585025 +47.34987617506569 +430.55261349888497 +5.0193756766478534 +86.70143002144876 +0 +120 +absolute + + + +0.01 +smooth + +8.536711956011859 +47.349876869035214 +430.5574371522953 +4.882084996080718 +86.68026571104346 +0 +120 +absolute + + + +0.01 +smooth + +8.536712946978176 +47.34987756416439 +430.5621472991711 +4.744105665074281 +86.65901160510799 +0 +120 +absolute + + + +0.01 +smooth + +8.536713937453152 +47.34987826043841 +430.56673921193567 +4.6054488901345225 +86.6376693472933 +0 +120 +absolute + + + +0.01 +smooth + +8.536714927405969 +47.3498789578425 +430.5712081630126 +4.466125877767419 +86.61624058125038 +0 +120 +absolute + + + +0.01 +smooth + +8.536715916805802 +47.34987965636188 +430.57554942482534 +4.326147834478945 +86.5947269506301 +0 +120 +absolute + + + +0.01 +smooth + +8.536716905621834 +47.34988035598176 +430.5797582697973 +4.1855259667750815 +86.57313009908347 +0 +120 +absolute + + + +0.01 +smooth + +8.536717893823237 +47.34988105668738 +430.583829970352 +4.044271481161804 +86.55145167026143 +0 +120 +absolute + + + +0.01 +smooth + +8.536718881379194 +47.34988175846395 +430.58775979891294 +3.9023955841450895 +86.52969330781488 +0 +120 +absolute + + + +0.01 +smooth + +8.536719868258881 +47.34988246129669 +430.5915430279035 +3.759909482230916 +86.50785665539482 +0 +120 +absolute + + + +0.01 +smooth + +8.536720854431476 +47.34988316517082 +430.59517492974726 +3.6168243819252615 +86.48594335665217 +0 +120 +absolute + + + +0.01 +smooth + +8.53672183986616 +47.34988387007158 +430.5986507768676 +3.4731514897341147 +86.46395505523785 +0 +120 +absolute + + + +0.01 +smooth + +8.536722824532108 +47.34988457598415 +430.60196584168796 +3.328902012163428 +86.44189339480286 +0 +120 +absolute + + + +0.01 +smooth + +8.536723808398499 +47.34988528289378 +430.6051153966319 +3.1840871557191908 +86.41976001899812 +0 +120 +absolute + + + +0.01 +smooth + +8.536724791434512 +47.34988599078567 +430.6080947141228 +3.0387181269073813 +86.39755657147457 +0 +120 +absolute + + + +0.01 +smooth + +8.536725773609326 +47.34988669964507 +430.6108990665843 +2.8928061322339764 +86.37528469588317 +0 +120 +absolute + + + +0.01 +smooth + +8.536726754892118 +47.349887409457175 +430.6135237264397 +2.7463623782049535 +86.35294603587487 +0 +120 +absolute + + + +0.01 +smooth + +8.536727735252068 +47.34988812020721 +430.61596396611253 +2.5993980713262896 +86.33054223510057 +0 +120 +absolute + + + +0.01 +smooth + +8.536728714658352 +47.3498888318804 +430.61821505802624 +2.4519244181039634 +86.30807493721129 +0 +120 +absolute + + + +0.01 +smooth + +8.536729693080149 +47.34988954446197 +430.62027227460436 +2.3039526250439497 +86.28554578585792 +0 +120 +absolute + + + +0.01 +smooth + +8.536730670860397 +47.34989025814352 +430.6222134552369 +2.155304148990377 +86.26293079944651 +0 +120 +absolute + + + +0.01 +smooth + +8.53673164845026 +47.34989097317664 +430.6241422379445 +2.0057451590912474 +86.2401985478979 +0 +120 +absolute + + + +0.01 +smooth + +8.536732625820074 +47.34989168954748 +430.62605718252775 +1.8552857246815224 +86.21735055014433 +0 +120 +absolute + + + +0.01 +smooth + +8.536733602938254 +47.349892407241086 +430.62795642965165 +1.7039368830813675 +86.1943884558634 +0 +120 +absolute + + + +0.01 +smooth + +8.536734579773231 +47.349893126242556 +430.6298381199814 +1.5517096716109116 +86.1713139147328 +0 +120 +absolute + + + +0.01 +smooth + +8.536735556293428 +47.34989384653697 +430.631700394182 +1.3986151275903227 +86.14812857643027 +0 +120 +absolute + + + +0.01 +smooth + +8.536736532467264 +47.349894568109434 +430.63354139291886 +1.2446642883397563 +86.12483409063339 +0 +120 +absolute + + + +0.01 +smooth + +8.536737508263174 +47.34989529094506 +430.63535925685704 +1.089868191179367 +86.10143210701995 +0 +120 +absolute + + + +0.01 +smooth + +8.536738483649572 +47.34989601502886 +430.6371521266614 +0.9342378734293092 +86.07792427526752 +0 +120 +absolute + + + +0.01 +smooth + +8.53673945859488 +47.349896740345976 +430.6389181429974 +0.7777843724097382 +86.05431224505386 +0 +120 +absolute + + + +0.01 +smooth + +8.536740433067534 +47.34989746688148 +430.6406554465302 +0.6205187254408088 +86.03059766605666 +0 +120 +absolute + + + +0.01 +smooth + +8.536741407035942 +47.349898194620444 +430.6423621779247 +0.4624519698426756 +86.00678218795349 +0 +120 +absolute + + + +0.01 +smooth + +8.536742380468539 +47.34989892354795 +430.64403647784627 +0.3035951429354936 +85.98286746042214 +0 +120 +absolute + + + +0.01 +smooth + +8.536743353333751 +47.34989965364913 +430.6456764869599 +0.14395928203941774 +85.95885513314025 +0 +120 +absolute + + + +0.01 +smooth + +8.536744325599994 +47.34990038490901 +430.64728034593077 +-0.01644457552539727 +85.93474685578548 +0 +120 +absolute + + + +0.01 +smooth + +8.536745297235692 +47.34990111731272 +430.648846195424 +-0.1776053924387821 +85.91054427803554 +0 +120 +absolute + + + +0.01 +smooth + +8.536746268209273 +47.34990185084531 +430.65037217610484 +-0.33951213138061104 +85.88624904956808 +0 +120 +absolute + + + +0.01 +smooth + +8.53674723848916 +47.34990258549189 +430.65185642863827 +-0.502153755030714 +85.86186282006081 +0 +120 +absolute + + + +0.01 +smooth + +8.536748208043779 +47.349903321237555 +430.6532970936896 +-0.6655192260689371 +85.8373872391914 +0 +120 +absolute + + + +0.01 +smooth + +8.536749176841548 +47.34990405806736 +430.6546923119238 +-0.8295975071751247 +85.81282395663752 +0 +120 +absolute + + + +0.01 +smooth + +8.536750144850895 +47.34990479596641 +430.65604022400623 +-0.9943775610291227 +85.78817462207682 +0 +120 +absolute + + + +0.01 +smooth + +8.536751112040243 +47.34990553491978 +430.65733897060176 +-1.1598483503107748 +85.76344088518704 +0 +120 +absolute + + + +0.01 +smooth + +8.536752078378017 +47.34990627491258 +430.6585866923757 +-1.3259988376999283 +85.73862439564583 +0 +120 +absolute + + + +0.01 +smooth + +8.536753043832642 +47.34990701592985 +430.6597815299932 +-1.492817985876427 +85.71372680313085 +0 +120 +absolute + + + +0.01 +smooth + +8.536754008372537 +47.34990775795672 +430.6609216241194 +-1.6602947575201163 +85.68874975731981 +0 +120 +absolute + + + +0.01 +smooth + +8.53675497196613 +47.34990850097826 +430.66200511541933 +-1.8284181153108412 +85.6636949078904 +0 +120 +absolute + + + +0.01 +smooth + +8.536755934581844 +47.34990924497955 +430.6630301445582 +-1.997177021928447 +85.63856390452024 +0 +120 +absolute + + + +0.01 +smooth + +8.5367568961881 +47.34990998994569 +430.66399485220126 +-2.1665604400527636 +85.61335839688707 +0 +120 +absolute + + + +0.01 +smooth + +8.536757856753326 +47.34991073586174 +430.6648973790135 +-2.3365573323636672 +85.58808003466854 +0 +120 +absolute + + + +0.01 +smooth + +8.536758816245946 +47.34991148271281 +430.66573586566005 +-2.507156661540987 +85.56273046754231 +0 +120 +absolute + + + +0.01 +smooth + +8.53675977463438 +47.34991223048397 +430.66650845280617 +-2.6783473902645674 +85.53731134518608 +0 +120 +absolute + + + +0.01 +smooth + +8.536760731887055 +47.34991297916032 +430.6672132811169 +-2.8501184812142553 +85.51182431727756 +0 +120 +absolute + + + +0.01 +smooth + +8.536761687972394 +47.34991372872694 +430.6678484912575 +-3.0224588970698942 +85.4862710334944 +0 +120 +absolute + + + +0.01 +smooth + +8.536762642858822 +47.34991447916891 +430.66841222389303 +-3.195357600511331 +85.46065314351426 +0 +120 +absolute + + + +0.01 +smooth + +8.53676359651476 +47.34991523047132 +430.66890261968854 +-3.3688035542184087 +85.43497229701485 +0 +120 +absolute + + + +0.01 +smooth + +8.536764548908634 +47.34991598261926 +430.6693178193093 +-3.5427857208709748 +85.40923014367384 +0 +120 +absolute + + + +0.01 +smooth + +8.536765500008869 +47.3499167355978 +430.6696559634205 +-3.7172930631488734 +85.3834283331689 +0 +120 +absolute + + + +0.01 +smooth + +8.536766449783885 +47.34991748939204 +430.6699151926872 +-3.8923145437319486 +85.3575685151777 +0 +120 +absolute + + + +0.01 +smooth + +8.536767398202109 +47.34991824398706 +430.6700936477744 +-4.067839125300047 +85.33165233937797 +0 +120 +absolute + + + +0.01 +smooth + +8.536768345231966 +47.349918999367965 +430.6701894693475 +-4.243855770532997 +85.30568145544733 +0 +120 +absolute + + + +0.01 +smooth + +8.536769290903562 +47.349919755550545 +430.67019866412267 +-4.420380438874191 +85.27965384317929 +0 +120 +absolute + + + +0.01 +smooth + +8.53677023585672 +47.34992051285481 +430.6700977239563 +-4.59769618178313 +85.2535311834584 +0 +120 +absolute + + + +0.01 +smooth + +8.536771180242395 +47.34992127135741 +430.6698832052264 +-4.77587258052278 +85.22730419389927 +0 +120 +absolute + + + +0.01 +smooth + +8.536772124027417 +47.34992203104335 +430.66955837349457 +-4.954898677631764 +85.20097454232263 +0 +120 +absolute + + + +0.01 +smooth + +8.536773067178608 +47.34992279189757 +430.6691264943223 +-5.134763515648708 +85.1745438965493 +0 +120 +absolute + + + +0.01 +smooth + +8.536774009662789 +47.349923553905086 +430.6685908332713 +-5.315456137112239 +85.1480139244001 +0 +120 +absolute + + + +0.01 +smooth + +8.53677495144678 +47.34992431705083 +430.66795465590303 +-5.4969655845609795 +85.1213862936958 +0 +120 +absolute + + + +0.01 +smooth + +8.536775892497406 +47.34992508131978 +430.6672212277789 +-5.6792809005335565 +85.09466267225721 +0 +120 +absolute + + + +0.01 +smooth + +8.536776832781491 +47.34992584669693 +430.66639381446083 +-5.8623911275685945 +85.06784472790515 +0 +120 +absolute + + + +0.01 +smooth + +8.536777772265852 +47.349926613167206 +430.6654756815099 +-6.04628530820472 +85.04093412846035 +0 +120 +absolute + + + +0.01 +smooth + +8.536778710917316 +47.3499273807156 +430.6644700944879 +-6.230952484980553 +85.01393254174366 +0 +120 +absolute + + + +0.01 +smooth + +8.536779648702705 +47.349928149327084 +430.66338031895646 +-6.416381700434709 +84.98684163557587 +0 +120 +absolute + + + +0.01 +smooth + +8.536780585588838 +47.34992891898662 +430.6622096204768 +-6.60256199710584 +84.95966307777776 +0 +120 +absolute + + + +0.01 +smooth + +8.536781521542547 +47.349929689679215 +430.6609612646111 +-6.789482417532564 +84.93239853617017 +0 +120 +absolute + + + +0.01 +smooth + +8.536782456530641 +47.34993046138977 +430.65963851692027 +-6.977132004253495 +84.90504967857383 +0 +120 +absolute + + + +0.01 +smooth + +8.53678339051995 +47.349931234103316 +430.6582446429661 +-7.1654997998072645 +84.87761817280958 +0 +120 +absolute + + + +0.01 +smooth + +8.536784323477297 +47.34993200780479 +430.6567829083104 +-7.354574846732497 +84.85010568669821 +0 +120 +absolute + + + +0.01 +smooth + +8.5367852553695 +47.34993278247915 +430.65525657851407 +-7.544346187567815 +84.82251388806048 +0 +120 +absolute + + + +0.01 +smooth + +8.536786186163386 +47.3499335581114 +430.65366891913936 +-7.734802864851849 +84.79484444471727 +0 +120 +absolute + + + +0.01 +smooth + +8.536787115825778 +47.349934334686516 +430.6520231957474 +-7.92593392112322 +84.76709902448931 +0 +120 +absolute + + + +0.01 +smooth + +8.536788044323492 +47.34993511218942 +430.6503226738999 +-8.117728398920551 +84.7392792951974 +0 +120 +absolute + + + +0.01 +smooth + +8.536788971623356 +47.34993589060511 +430.64857061915825 +-8.310175340782473 +84.71138692466238 +0 +120 +absolute + + + +0.01 +smooth + +8.536789897692191 +47.34993666991856 +430.64677029708423 +-8.50326378924761 +84.68342358070498 +0 +120 +absolute + + + +0.01 +smooth + +8.536790822496819 +47.34993745011474 +430.64492497323926 +-8.696982786854583 +84.65539093114607 +0 +120 +absolute + + + +0.01 +smooth + +8.536791746004063 +47.34993823117861 +430.64303791318497 +-8.891321376142004 +84.62729064380639 +0 +120 +absolute + + + +0.01 +smooth + +8.536792668180745 +47.349939013095145 +430.6411123824827 +-9.08626859964853 +84.59912438650676 +0 +120 +absolute + + + +0.01 +smooth + +8.536793588993689 +47.34993979584931 +430.6391516466943 +-9.28181349991277 +84.57089382706799 +0 +120 +absolute + + + +0.01 +smooth + +8.536794508409713 +47.349940579426075 +430.63715897138104 +-9.477945119473352 +84.54260063331085 +0 +120 +absolute + + + +0.01 +smooth + +8.536795426395644 +47.3499413638104 +430.63513762210465 +-9.674652500868895 +84.51424647305613 +0 +120 +absolute + + + +0.01 +smooth + +8.536796342918302 +47.34994214898729 +430.63309086442666 +-9.87192468663803 +84.48583301412467 +0 +120 +absolute + + + +0.01 +smooth + +8.536797257944512 +47.34994293494167 +430.63102196390855 +-10.06975071931938 +84.45736192433723 +0 +120 +absolute + + + +0.01 +smooth + +8.536798171441095 +47.34994372165856 +430.6289341861119 +-10.26811964145157 +84.42883487151462 +0 +120 +absolute + + + +0.01 +smooth + +8.53679908337487 +47.34994450912288 +430.62683079659826 +-10.467020495573223 +84.40025352347763 +0 +120 +absolute + + + +0.01 +smooth + +8.536799993712666 +47.34994529731962 +430.62471506092925 +-10.666442324222965 +84.37161954804708 +0 +120 +absolute + + + +0.01 +smooth + +8.5368009024213 +47.34994608623376 +430.6225902446663 +-10.866374169939427 +84.34293461304372 +0 +120 +absolute + + + +0.01 +smooth + +8.536801809467596 +47.34994687585024 +430.620459613371 +-11.066805075261227 +84.31420038628839 +0 +120 +absolute + + + +0.01 +smooth + +8.536802714818378 +47.34994766615408 +430.618326432605 +-11.267724082726977 +84.28541853560186 +0 +120 +absolute + + + +0.01 +smooth + +8.536803618440466 +47.349948457130196 +430.61619396792963 +-11.469120234875334 +84.25659072880495 +0 +120 +absolute + + + +0.01 +smooth + +8.536804520300686 +47.349949248763586 +430.61406548490675 +-11.670982574244908 +84.22771863371844 +0 +120 +absolute + + + +0.01 +smooth + +8.536805420365855 +47.34995004103923 +430.61194424909763 +-11.873300143374323 +84.19880391816314 +0 +120 +absolute + + + +0.01 +smooth + +8.5368063186028 +47.34995083394206 +430.60983352606394 +-12.076061984802203 +84.16984824995984 +0 +120 +absolute + + + +0.01 +smooth + +8.536807215304213 +47.34995162759873 +430.6076963077515 +-12.279375906981027 +84.14083692047018 +0 +120 +absolute + + + +0.01 +smooth + +8.536808111107563 +47.34995242228634 +430.60545269425387 +-12.483475948177363 +84.11173783239067 +0 +120 +absolute + + + +0.01 +smooth + +8.536809005997391 +47.349953217998646 +430.6031032479906 +-12.688358649275544 +84.0825516508417 +0 +120 +absolute + + + +0.01 +smooth + +8.536809899937841 +47.34995401472051 +430.6006510472342 +-12.894013128796832 +84.05328006461193 +0 +120 +absolute + + + +0.01 +smooth + +8.536810792893068 +47.349954812436884 +430.59809917025706 +-13.100428505262508 +84.02392476249025 +0 +120 +absolute + + + +0.01 +smooth + +8.536811684827216 +47.34995561113262 +430.5954506953318 +-13.30759389719383 +83.99448743326543 +0 +120 +absolute + + + +0.01 +smooth + +8.536812575704435 +47.34995641079263 +430.59270870073044 +-13.515498423112067 +83.96496976572624 +0 +120 +absolute + + + +0.01 +smooth + +8.536813465488873 +47.34995721140179 +430.5898762647254 +-13.724131201538464 +83.93537344866145 +0 +120 +absolute + + + +0.01 +smooth + +8.536814354144681 +47.34995801294502 +430.5869564655893 +-13.933481350994336 +83.90570017085989 +0 +120 +absolute + + + +0.01 +smooth + +8.536815241636008 +47.3499588154072 +430.58395238159426 +-14.14353799000093 +83.87595162111033 +0 +120 +absolute + + + +0.01 +smooth + +8.536816127926999 +47.349959618773205 +430.5808670910127 +-14.354290237079502 +83.84612948820154 +0 +120 +absolute + + + +0.01 +smooth + +8.536817012981802 +47.34996042302799 +430.5777036721171 +-14.565727210751334 +83.81623546092239 +0 +120 +absolute + + + +0.01 +smooth + +8.536817896764575 +47.34996122815641 +430.57446520317984 +-14.77783802953769 +83.78627122806157 +0 +120 +absolute + + + +0.01 +smooth + +8.536818779239459 +47.34996203414337 +430.5711547624732 +-14.990611811959837 +83.75623847840791 +0 +120 +absolute + + + +0.01 +smooth + +8.536819660370606 +47.34996284097377 +430.56777542826967 +-15.204037676539045 +83.72613890075021 +0 +120 +absolute + + + +0.01 +smooth + +8.53682054012216 +47.349963648632475 +430.5643302788414 +-15.418104741796576 +83.69597418387724 +0 +120 +absolute + + + +0.01 +smooth + +8.536821418458272 +47.349964457104406 +430.560822392461 +-15.6328021262537 +83.66574601657778 +0 +120 +absolute + + + +0.01 +smooth + +8.536822295343095 +47.349965266374454 +430.5572548474007 +-15.84811894843169 +83.63545608764065 +0 +120 +absolute + + + +0.01 +smooth + +8.536823170740773 +47.34996607642752 +430.5536307219329 +-16.064044326851803 +83.6051060858546 +0 +120 +absolute + + + +0.01 +smooth + +8.536824044615459 +47.3499668872485 +430.54995309433014 +-16.280567380035304 +83.5746977000085 +0 +120 +absolute + + + +0.01 +smooth + +8.536824916931296 +47.34996769882229 +430.54622504286453 +-16.497677226503487 +83.54423261889104 +0 +120 +absolute + + + +0.01 +smooth + +8.53682578765244 +47.349968511133774 +430.5424496458087 +-16.715362984777606 +83.51371253129106 +0 +120 +absolute + + + +0.01 +smooth + +8.536826656743033 +47.349969324167844 +430.5386299814348 +-16.933613773378923 +83.48313912599734 +0 +120 +absolute + + + +0.01 +smooth + +8.53682752416723 +47.34997013790942 +430.5347691280152 +-17.152418710828712 +83.45251409179866 +0 +120 +absolute + + + +0.01 +smooth + +8.536828389889173 +47.34997095234336 +430.53087016382256 +-17.371766915648237 +83.42183911748384 +0 +120 +absolute + + + +0.01 +smooth + +8.536829253873016 +47.349971767454605 +430.526936167129 +-17.59164750635877 +83.39111589184162 +0 +120 +absolute + + + +0.01 +smooth + +8.536830116082907 +47.349972583228016 +430.52297021620706 +-17.812049601481572 +83.36034610366083 +0 +120 +absolute + + + +0.01 +smooth + +8.536830976482992 +47.349973399648505 +430.51897538932894 +-18.03296231953792 +83.32953144173025 +0 +120 +absolute + + + +0.01 +smooth + +8.536831835037422 +47.34997421670096 +430.5149547647671 +-18.25437477904907 +83.29867359483866 +0 +120 +absolute + + + +0.01 +smooth + +8.536832691710348 +47.349975034370274 +430.51091142079383 +-18.476276098536303 +83.26777425177485 +0 +120 +absolute + + + +0.01 +smooth + +8.536833546465916 +47.34997585264135 +430.5068484356817 +-18.698655396520877 +83.23683510132763 +0 +120 +absolute + + + +0.01 +smooth + +8.536834399268272 +47.34997667149907 +430.502768887703 +-18.921501791524044 +83.20585783228576 +0 +120 +absolute + + + +0.01 +smooth + +8.536835250081571 +47.34997749092835 +430.49867585513 +-19.144804402067116 +83.17484413343803 +0 +120 +absolute + + + +0.01 +smooth + +8.536836098869959 +47.349978310914075 +430.4945724162352 +-19.36855234667133 +83.14379569357325 +0 +120 +absolute + + + +0.01 +smooth + +8.536836945597585 +47.349979131441145 +430.49046164929086 +-19.592734743857964 +83.1127142014802 +0 +120 +absolute + + + +0.01 +smooth + +8.536837790228596 +47.34997995249444 +430.4863466325694 +-19.81734071214828 +83.08160134594767 +0 +120 +absolute + + + +0.01 +smooth + +8.536838632727143 +47.34998077405888 +430.4822304443433 +-20.04235937006355 +83.05045881576444 +0 +120 +absolute + + + +0.01 +smooth + +8.536839473057373 +47.349981596119335 +430.4781161628849 +-20.26777983612504 +83.01928829971934 +0 +120 +absolute + + + +0.01 +smooth + +8.536840311183438 +47.349982418660716 +430.4740068664664 +-20.493591228854015 +82.98809148660108 +0 +120 +absolute + + + +0.01 +smooth + +8.53684114706948 +47.34998324166791 +430.4699056333603 +-20.71978266677175 +82.9568700651985 +0 +120 +absolute + + + +0.01 +smooth + +8.53684198071157 +47.34998406513752 +430.4658135322629 +-20.946352615010056 +82.92562440034692 +0 +120 +absolute + + + +0.01 +smooth + +8.536842812868617 +47.34998488934623 +430.4616831418946 +-21.173523317885763 +82.89432316757075 +0 +120 +absolute + + + +0.01 +smooth + +8.536843643845602 +47.349985714405186 +430.4574944819153 +-21.401384915774795 +82.86295377842713 +0 +120 +absolute + + + +0.01 +smooth + +8.536844473602613 +47.34998654029933 +430.45324911913843 +-21.62992665647269 +82.8315179395114 +0 +120 +absolute + + + +0.01 +smooth + +8.53684530209973 +47.3499873670135 +430.4489486203776 +-21.859137787774976 +82.8000173574187 +0 +120 +absolute + + + +0.01 +smooth + +8.536846129297027 +47.34998819453256 +430.4445945524455 +-22.089007557477228 +82.76845373874424 +0 +120 +absolute + + + +0.01 +smooth + +8.536846955154596 +47.34998902284143 +430.4401884821561 +-22.319525213374977 +82.73682879008332 +0 +120 +absolute + + + +0.01 +smooth + +8.536847779632511 +47.34998985192496 +430.4357319763224 +-22.55068000326376 +82.70514421803117 +0 +120 +absolute + + + +0.01 +smooth + +8.53684860269086 +47.34999068176801 +430.43122660175777 +-22.78246117493913 +82.67340172918298 +0 +120 +absolute + + + +0.01 +smooth + +8.536849424289718 +47.3499915123555 +430.4266739252756 +-23.01485797619662 +82.64160303013401 +0 +120 +absolute + + + +0.01 +smooth + +8.536850244389168 +47.34999234367227 +430.422075513689 +-23.247859654831775 +82.60974982747943 +0 +120 +absolute + + + +0.01 +smooth + +8.536851062949296 +47.34999317570323 +430.41743293381165 +-23.48145545864015 +82.57784382781456 +0 +120 +absolute + + + +0.01 +smooth + +8.536851879930179 +47.349994008433235 +430.4127477524566 +-23.715634635417278 +82.54588673773458 +0 +120 +absolute + + + +0.01 +smooth + +8.5368526952919 +47.34999484184718 +430.40802153643733 +-23.950386432958705 +82.51388026383474 +0 +120 +absolute + + + +0.01 +smooth + +8.536853508994543 +47.349995675929925 +430.40325585256716 +-24.185700099059982 +82.48182611271027 +0 +120 +absolute + + + +0.01 +smooth + +8.536854320998184 +47.34999651066633 +430.3984522676592 +-24.421564881516638 +82.44972599095635 +0 +120 +absolute + + + +0.01 +smooth + +8.53685513126291 +47.34999734604132 +430.39361234852714 +-24.657970028124208 +82.41758160516831 +0 +120 +absolute + + + +0.01 +smooth + +8.5368559397488 +47.349998182039755 +430.38873766198407 +-24.894904786678275 +82.38539466194133 +0 +120 +absolute + + + +0.01 +smooth + +8.536856746415932 +47.34999901864647 +430.3838297748432 +-25.13235840497435 +82.35316686787058 +0 +120 +absolute + + + +0.01 +smooth + +8.536857551224395 +47.349999855846406 +430.3788902539183 +-25.370320130808008 +82.32089992955143 +0 +120 +absolute + + + +0.01 +smooth + +8.536858354134266 +47.350000693624395 +430.3739206660222 +-25.608779211974756 +82.28859555357899 +0 +120 +absolute + + + +0.01 +smooth + +8.536859155105628 +47.35000153196535 +430.36892257796853 +-25.847724896270158 +82.25625544654855 +0 +120 +absolute + + + +0.01 +smooth + +8.536859954098562 +47.350002370854114 +430.36389755657046 +-26.087146431489757 +82.22388131505531 +0 +120 +absolute + + + +0.01 +smooth + +8.536860751073148 +47.35000321027558 +430.3588471686415 +-26.327033065429088 +82.19147486569452 +0 +120 +absolute + + + +0.01 +smooth + +8.536861545989469 +47.35000405021462 +430.3537729809948 +-26.5673740458837 +82.15903780506142 +0 +120 +absolute + + + +0.01 +smooth + +8.536862338807605 +47.35000489065613 +430.3486765604438 +-26.80815862064914 +82.12657183975121 +0 +120 +absolute + + + +0.01 +smooth + +8.536863129487642 +47.35000573158497 +430.34355947380175 +-27.049376037520947 +82.09407867635915 +0 +120 +absolute + + + +0.01 +smooth + +8.536863917989658 +47.35000657298602 +430.33842328788194 +-27.29101554429467 +82.06156002148046 +0 +120 +absolute + + + +0.01 +smooth + +8.536864704273736 +47.35000741484416 +430.33326956949793 +-27.53306638876582 +82.02901758171038 +0 +120 +absolute + + + +0.01 +smooth + +8.536865488299956 +47.35000825714426 +430.32809988546285 +-27.77551781873 +81.99645306364414 +0 +120 +absolute + + + +0.01 +smooth + +8.5368662700284 +47.3500090998712 +430.32291580259005 +-28.018359081982712 +81.96386817387696 +0 +120 +absolute + + + +0.01 +smooth + +8.536867049419147 +47.35000994300987 +430.3177188876929 +-28.26157942631952 +81.93126461900408 +0 +120 +absolute + + + +0.01 +smooth + +8.536867826432285 +47.350010786545134 +430.3125107075846 +-28.50516809953596 +81.89864410562073 +0 +120 +absolute + + + +0.01 +smooth + +8.53686860102789 +47.350011630461864 +430.30729282907856 +-28.749114349427565 +81.86600834032214 +0 +120 +absolute + + + +0.01 +smooth + +8.536869373166049 +47.35001247474496 +430.30206681898824 +-28.993407423789893 +81.83335902970354 +0 +120 +absolute + + + +0.01 +smooth + +8.536870142806837 +47.35001331937928 +430.29683424412684 +-29.238036570418487 +81.80069788036018 +0 +120 +absolute + + + +0.01 +smooth + +8.536870909910338 +47.3500141643497 +430.2915966713076 +-29.482991037108885 +81.76802659888725 +0 +120 +absolute + + + +0.01 +smooth + +8.536871674436634 +47.35001500964112 +430.286355667344 +-29.72826007165663 +81.73534689188003 +0 +120 +absolute + + + +0.01 +smooth + +8.536872436345806 +47.35001585523838 +430.2811127990494 +-29.973832921857273 +81.70266046593372 +0 +120 +absolute + + + +0.01 +smooth + +8.53687319559794 +47.3500167011264 +430.275869633237 +-30.219698835506343 +81.66996902764353 +0 +120 +absolute + + + +0.01 +smooth + +8.536873952153112 +47.350017547290015 +430.2706277367201 +-30.465847060399405 +81.63727428360477 +0 +120 +absolute + + + +0.01 +smooth + +8.536874706281289 +47.35001839380725 +430.2653802566006 +-30.712337525541127 +81.60456748492348 +0 +120 +absolute + + + +0.01 +smooth + +8.536875458946907 +47.35001924096561 +430.260101140136 +-30.959389294011793 +81.5718163631637 +0 +120 +absolute + + + +0.01 +smooth + +8.536876210181605 +47.35002008877328 +430.25478930756447 +-31.207009498781805 +81.53902002230197 +0 +120 +absolute + + + +0.01 +smooth + +8.536876959939445 +47.35002093721513 +430.2494457738325 +-31.4551876065735 +81.50618018039953 +0 +120 +absolute + + + +0.01 +smooth + +8.536877708174488 +47.3500217862761 +430.24407155388667 +-31.70391308410922 +81.4732985555176 +0 +120 +absolute + + + +0.01 +smooth + +8.536878454840801 +47.35002263594109 +430.2386676626739 +-31.953175398111252 +81.44037686571738 +0 +120 +absolute + + + +0.01 +smooth + +8.536879199892438 +47.350023486194985 +430.23323511514025 +-32.20296401530201 +81.4074168290601 +0 +120 +absolute + + + +0.01 +smooth + +8.536879943283465 +47.35002433702269 +430.22777492623237 +-32.45326840240378 +81.37442016360693 +0 +120 +absolute + + + +0.01 +smooth + +8.53688068496794 +47.350025188409134 +430.22228811089707 +-32.70407802613891 +81.34138858741916 +0 +120 +absolute + + + +0.01 +smooth + +8.53688142489993 +47.35002604033917 +430.21677568408063 +-32.95538235322972 +81.30832381855792 +0 +120 +absolute + + + +0.01 +smooth + +8.536882163033491 +47.35002689279775 +430.2112386607297 +-33.20717085039856 +81.2752275750845 +0 +120 +absolute + + + +0.01 +smooth + +8.536882899322684 +47.35002774576976 +430.2056780557908 +-33.459432984367744 +81.24210157506002 +0 +120 +absolute + + + +0.01 +smooth + +8.536883633721573 +47.350028599240076 +430.2000948842105 +-33.7121582218596 +81.20894753654578 +0 +120 +absolute + + + +0.01 +smooth + +8.536884366184221 +47.35002945319363 +430.1944901609353 +-33.96533602959649 +81.17576717760294 +0 +120 +absolute + + + +0.01 +smooth + +8.536885096664683 +47.350030307615306 +430.1888649009117 +-34.21895587430072 +81.14256221629272 +0 +120 +absolute + + + +0.01 +smooth + +8.536885825117027 +47.350031162490026 +430.1832201190864 +-34.47300722269465 +81.10933437067635 +0 +120 +absolute + + + +0.01 +smooth + +8.536886551495314 +47.35003201780269 +430.1775568304059 +-34.727479541500585 +81.07608535881506 +0 +120 +absolute + + + +0.01 +smooth + +8.536887275753603 +47.35003287353818 +430.1718760498167 +-34.98236229744088 +81.04281689877001 +0 +120 +absolute + + + +0.01 +smooth + +8.536887997845955 +47.35003372968143 +430.1661787922655 +-35.237644957237855 +81.00953070860247 +0 +120 +absolute + + + +0.01 +smooth + +8.536888717726432 +47.35003458621731 +430.1604660726985 +-35.49331698761385 +80.97622850637362 +0 +120 +absolute + + + +0.01 +smooth + +8.536889435349094 +47.35003544313073 +430.15473890606256 +-35.74936785529118 +80.94291201014464 +0 +120 +absolute + + + +0.01 +smooth + +8.536890150668006 +47.3500363004066 +430.14899830730405 +-36.00578702699221 +80.90958293797681 +0 +120 +absolute + + + +0.01 +smooth + +8.536890863637225 +47.35003715802982 +430.1432452913697 +-36.26256396943925 +80.87624300793128 +0 +120 +absolute + + + +0.01 +smooth + +8.536891574210818 +47.350038015985305 +430.13748087320585 +-36.51968814935464 +80.84289393806932 +0 +120 +absolute + + + +0.01 +smooth + +8.536892282342842 +47.35003887425793 +430.1317060677591 +-36.77714903346072 +80.80953744645211 +0 +120 +absolute + + + +0.01 +smooth + +8.536892987987358 +47.35003973283264 +430.12592188997615 +-37.03493608847981 +80.7761752511409 +0 +120 +absolute + + + +0.01 +smooth + +8.536893691098431 +47.35004059169429 +430.12012935480345 +-37.29303878113425 +80.74280907019684 +0 +120 +absolute + + + +0.01 +smooth + +8.536894391630119 +47.350041450827796 +430.1143294771874 +-37.551446578146376 +80.70944062168118 +0 +120 +absolute + + + +0.01 +smooth + +8.536895089536486 +47.35004231021807 +430.10852327207476 +-37.81014894623852 +80.67607162365513 +0 +120 +absolute + + + +0.01 +smooth + +8.536895784771591 +47.350043169850025 +430.1027117544121 +-38.069135352133 +80.64270379417991 +0 +120 +absolute + + + +0.01 +smooth + +8.536896477289497 +47.35004402970854 +430.0968959391456 +-38.328395262552135 +80.60933885131672 +0 +120 +absolute + + + +0.01 +smooth + +8.536897167044263 +47.35004488977853 +430.09107684122233 +-38.58791814421832 +80.57597851312678 +0 +120 +absolute + + + +0.01 +smooth + +8.536897853989954 +47.350045750044885 +430.0852554755884 +-38.84769346385386 +80.54262449767128 +0 +120 +absolute + + + +0.01 +smooth + +8.536898538080628 +47.35004661049253 +430.07943285719057 +-39.10771068818108 +80.50927852301146 +0 +120 +absolute + + + +0.01 +smooth + +8.53689921927035 +47.35004747110634 +430.07361000097546 +-39.36795928392232 +80.47594230720856 +0 +120 +absolute + + + +0.01 +smooth + +8.536899897513178 +47.35004833187125 +430.06778792188936 +-39.6284287177999 +80.44261756832371 +0 +120 +absolute + + + +0.01 +smooth + +8.536900572763177 +47.35004919277213 +430.061967634879 +-39.889108456536164 +80.40930602441819 +0 +120 +absolute + + + +0.01 +smooth + +8.536901244974404 +47.35005005379389 +430.056150154891 +-40.149987966853445 +80.37600939355319 +0 +120 +absolute + + + +0.01 +smooth + +8.536901914100923 +47.35005091492146 +430.05033649687164 +-40.41105671547406 +80.34272939378992 +0 +120 +absolute + + + +0.01 +smooth + +8.536902580096795 +47.3500517761397 +430.0445276757676 +-40.67230416912038 +80.30946774318961 +0 +120 +absolute + + + +0.01 +smooth + +8.536903242924689 +47.350052637435596 +430.0387245862112 +-40.933721270328675 +80.27622592720421 +0 +120 +absolute + + + +0.01 +smooth + +8.536903903552329 +47.3500534990367 +430.0329139901117 +-41.19547169856422 +80.24297821682023 +0 +120 +absolute + + + +0.01 +smooth + +8.536904562623024 +47.350054361094436 +430.0270869170015 +-41.45766474755059 +80.20970749225312 +0 +120 +absolute + + + +0.01 +smooth + +8.536905220081781 +47.35005522359378 +430.0212441044272 +-41.720290214726575 +80.17641547561453 +0 +120 +absolute + + + +0.01 +smooth + +8.536905875873616 +47.350056086519665 +430.01538628993563 +-41.98333789753089 +80.143103889016 +0 +120 +absolute + + + +0.01 +smooth + +8.536906529943534 +47.35005694985703 +430.00951421107374 +-42.246797593402306 +80.10977445456913 +0 +120 +absolute + + + +0.01 +smooth + +8.536907182236549 +47.35005781359079 +430.0036286053879 +-42.5106590997796 +80.07642889438553 +0 +120 +absolute + + + +0.01 +smooth + +8.536907832697668 +47.3500586777059 +429.99773021042506 +-42.77491221410147 +80.04306893057675 +0 +120 +absolute + + + +0.01 +smooth + +8.536908481271903 +47.35005954218729 +429.991819763732 +-43.0395467338067 +80.0096962852544 +0 +120 +absolute + + + +0.01 +smooth + +8.536909127904265 +47.350060407019924 +429.98589800285544 +-43.30455245633405 +79.97631268053007 +0 +120 +absolute + + + +0.01 +smooth + +8.536909772539758 +47.35006127218868 +429.97996566534187 +-43.56991917912224 +79.9429198385153 +0 +120 +absolute + + + +0.01 +smooth + +8.5369104151234 +47.35006213767853 +429.97402348873817 +-43.835636699610035 +79.90951948132171 +0 +120 +absolute + + + +0.01 +smooth + +8.536911055600198 +47.35006300347443 +429.96807221059146 +-44.101694815236215 +79.87611333106092 +0 +120 +absolute + + + +0.01 +smooth + +8.53691169391516 +47.35006386956127 +429.96211256844776 +-44.36808332343949 +79.84270310984444 +0 +120 +absolute + + + +0.01 +smooth + +8.536912330013303 +47.350064735924015 +429.9561452998544 +-44.6347920216586 +79.80929053978393 +0 +120 +absolute + + + +0.01 +smooth + +8.536912963839628 +47.35006560254759 +429.9501711423578 +-44.90181070733234 +79.7758773429909 +0 +120 +absolute + + + +0.01 +smooth + +8.53691359533915 +47.350066469416944 +429.9441908335049 +-45.16912917789947 +79.74246524157701 +0 +120 +absolute + + + +0.01 +smooth + +8.536914224456881 +47.350067336517 +429.9382051108424 +-45.43673723079872 +79.7090559576538 +0 +120 +absolute + + + +0.01 +smooth + +8.536914851137825 +47.350068203832684 +429.93221471191663 +-45.70462466346881 +79.67565121333284 +0 +120 +absolute + + + +0.01 +smooth + +8.536915475327001 +47.35006907134896 +429.926220374275 +-45.97278127334856 +79.64225273072577 +0 +120 +absolute + + + +0.01 +smooth + +8.53691609696941 +47.350069939050755 +429.92022283546373 +-46.241196857876666 +79.60886223194416 +0 +120 +absolute + + + +0.01 +smooth + +8.536916716010069 +47.35007080692299 +429.91422283302984 +-46.50986121449191 +79.57548143909956 +0 +120 +absolute + + + +0.01 +smooth + +8.536917332393985 +47.35007167495062 +429.90822110452007 +-46.778764140633015 +79.54211207430362 +0 +120 +absolute + + + +0.01 +smooth + +8.536917946066168 +47.35007254311857 +429.90221838748084 +-47.04789543373876 +79.50875585966784 +0 +120 +absolute + + + +0.01 +smooth + +8.536918556971628 +47.350073411411785 +429.8962154194593 +-47.31724489124788 +79.47541451730388 +0 +120 +absolute + + + +0.01 +smooth + +8.536919165055377 +47.35007427981519 +429.8902129380019 +-47.58680231059914 +79.44208976932327 +0 +120 +absolute + + + +0.01 +smooth + +8.536919770262426 +47.35007514831372 +429.8842116806556 +-47.85655748923128 +79.40878333783763 +0 +120 +absolute + + + +0.01 +smooth + +8.53692037253778 +47.35007601689233 +429.8782123849669 +-48.126500224583054 +79.37549694495854 +0 +120 +absolute + + + +0.01 +smooth + +8.536920971826454 +47.350076885535934 +429.87221578848266 +-48.39662031409321 +79.3422323127976 +0 +120 +absolute + + + +0.01 +smooth + +8.536921568073454 +47.350077754229474 +429.86622262874965 +-48.66690755520051 +79.30899116346636 +0 +120 +absolute + + + +0.01 +smooth + +8.536922161223798 +47.3500786229579 +429.8602336433146 +-48.9373517453437 +79.27577521907645 +0 +120 +absolute + + + +0.01 +smooth + +8.536922751222487 +47.35007949170613 +429.8542495697242 +-49.20794268196153 +79.24258620173941 +0 +120 +absolute + + + +0.01 +smooth + +8.536923338014535 +47.35008036045912 +429.84827114552513 +-49.478670162492755 +79.20942583356685 +0 +120 +absolute + + + +0.01 +smooth + +8.536923921544954 +47.35008122920178 +429.84229910826434 +-49.749523984376125 +79.17629583667036 +0 +120 +absolute + + + +0.01 +smooth + +8.536924501758751 +47.35008209791907 +429.83633419548823 +-50.02049394505039 +79.1431979331615 +0 +120 +absolute + + + +0.01 +smooth + +8.53692507860094 +47.350082966595906 +429.8303771447439 +-50.291569841954306 +79.11013384515189 +0 +120 +absolute + + + +0.01 +smooth + +8.536925652016524 +47.35008383521725 +429.82442869357794 +-50.562741472526625 +79.0771052947531 +0 +120 +absolute + + + +0.01 +smooth + +8.536926221950521 +47.35008470376801 +429.8184895795371 +-50.8339986342061 +79.04411400407672 +0 +120 +absolute + + + +0.01 +smooth + +8.536926788347937 +47.350085572233134 +429.81256054016796 +-51.105331124431416 +79.01116169523432 +0 +120 +absolute + + + +0.01 +smooth + +8.536927351153784 +47.35008644059756 +429.80664231301745 +-51.37672874064144 +78.9782500903375 +0 +120 +absolute + + + +0.01 +smooth + +8.53692791031307 +47.35008730884623 +429.80073563563224 +-51.648181280274876 +78.94538091149784 +0 +120 +absolute + + + +0.01 +smooth + +8.536928466085564 +47.350088177022016 +429.79483870486075 +-51.91971760720322 +78.91254918240891 +0 +120 +absolute + + + +0.01 +smooth + +8.536929020068019 +47.35008904541501 +429.7889388173378 +-52.19153340705285 +78.87972135264376 +0 +120 +absolute + + + +0.01 +smooth + +8.536929572432548 +47.350089914054564 +429.78303461156395 +-52.46364882773195 +78.846894012933 +0 +120 +absolute + + + +0.01 +smooth + +8.536930123109759 +47.350090782925584 +429.7771266654682 +-52.73605412349171 +78.81406888237426 +0 +120 +absolute + + + +0.01 +smooth + +8.53693067203025 +47.35009165201304 +429.7712155569797 +-53.00873954858334 +78.78124768006504 +0 +120 +absolute + + + +0.01 +smooth + +8.536931219124629 +47.35009252130185 +429.765301864027 +-53.281695357258 +78.74843212510284 +0 +120 +absolute + + + +0.01 +smooth + +8.536931764323498 +47.350093390776976 +429.7593861645394 +-53.55491180376691 +78.71562393658527 +0 +120 +absolute + + + +0.01 +smooth + +8.536932307557462 +47.35009426042336 +429.75346903644595 +-53.82837914236123 +78.68282483360989 +0 +120 +absolute + + + +0.01 +smooth + +8.536932848757125 +47.350095130225974 +429.7475510576756 +-54.10208762729222 +78.65003653527421 +0 +120 +absolute + + + +0.01 +smooth + +8.536933387853091 +47.35009600016971 +429.7416328061573 +-54.376027512811 +78.61726076067573 +0 +120 +absolute + + + +0.01 +smooth + +8.536933924775958 +47.35009687023954 +429.73571485981995 +-54.65018905316879 +78.58449922891211 +0 +120 +absolute + + + +0.01 +smooth + +8.536934459456344 +47.35009774042045 +429.729797796593 +-54.9245625026168 +78.55175365908083 +0 +120 +absolute + + + +0.01 +smooth + +8.536934991824838 +47.35009861069731 +429.72388219440506 +-55.199138115406186 +78.51902577027941 +0 +120 +absolute + + + +0.01 +smooth + +8.536935521812053 +47.35009948105511 +429.71796863118516 +-55.47390614578816 +78.48631728160542 +0 +120 +absolute + + + +0.01 +smooth + +8.53693604934859 +47.3501003514788 +429.71205768486243 +-55.74885684801394 +78.45362991215644 +0 +120 +absolute + + + +0.01 +smooth + +8.536936574365049 +47.350101221953274 +429.7061499333658 +-56.02398047633467 +78.42096538102996 +0 +120 +absolute + + + +0.01 +smooth + +8.536937096792045 +47.35010209246355 +429.70024595462434 +-56.299267285001584 +78.38832540732358 +0 +120 +absolute + + + +0.01 +smooth + +8.536937616560172 +47.35010296299454 +429.6943463265671 +-56.57470752826586 +78.35571171013484 +0 +120 +absolute + + + +0.01 +smooth + +8.536938133600033 +47.350103833531165 +429.68845162712273 +-56.85029146037867 +78.3231260085612 +0 +120 +absolute + + + +0.01 +smooth + +8.536938647842241 +47.3501047040584 +429.68256243422076 +-57.12600933559125 +78.29057002170033 +0 +120 +absolute + + + +0.01 +smooth + +8.536939159217393 +47.350105574561184 +429.67667932578985 +-57.401851408154755 +78.25804546864971 +0 +120 +absolute + + + +0.01 +smooth + +8.536939667656096 +47.350106445024466 +429.67080287975915 +-57.677807932320405 +78.22555406850691 +0 +120 +absolute + + + +0.01 +smooth + +8.536940173088952 +47.35010731543316 +429.66493367405764 +-57.95386916233933 +78.19309754036944 +0 +120 +absolute + + + +0.01 +smooth + +8.536940675446566 +47.35010818577226 +429.6590722866143 +-58.23002535246281 +78.16067760333488 +0 +120 +absolute + + + +0.01 +smooth + +8.536941174659542 +47.35010905602668 +429.65321929535804 +-58.506266756942004 +78.12829597650075 +0 +120 +absolute + + + +0.01 +smooth + +8.536941670658482 +47.35010992618139 +429.6473752782181 +-58.78258363002811 +78.09595437896463 +0 +120 +absolute + + + +0.01 +smooth + +8.536942163373993 +47.3501107962213 +429.64154081312324 +-59.058966225972306 +78.06365452982403 +0 +120 +absolute + + + +0.01 +smooth + +8.536942652736679 +47.35011166613138 +429.6357164780026 +-59.335404799025795 +78.03139814817654 +0 +120 +absolute + + + +0.01 +smooth + +8.536943138677142 +47.35011253589657 +429.62990285078524 +-59.61188960343976 +77.99918695311966 +0 +120 +absolute + + + +0.01 +smooth + +8.536943621125985 +47.350113405501816 +429.62410050939997 +-59.888410893465405 +77.96702266375097 +0 +120 +absolute + + + +0.01 +smooth + +8.536944100013814 +47.35011427493204 +429.618310031776 +-60.16495892335392 +77.93490699916799 +0 +120 +absolute + + + +0.01 +smooth + +8.536944575271232 +47.350115144172236 +429.61253199584223 +-60.4415239473565 +77.90284167846829 +0 +120 +absolute + + + +0.01 +smooth + +8.536945046828844 +47.3501160132073 +429.6067669795278 +-60.718096219724316 +77.8708284207494 +0 +120 +absolute + + + +0.01 +smooth + +8.536945514617255 +47.350116882022206 +429.60101556076154 +-60.994665994708605 +77.83886894510889 +0 +120 +absolute + + + +0.01 +smooth + +8.536945978567065 +47.350117750601896 +429.59527831747243 +-61.27122352656051 +77.80696497064426 +0 +120 +absolute + + + +0.01 +smooth + +8.53694643860888 +47.350118618931305 +429.5895558275897 +-61.54775906953125 +77.7751182164531 +0 +120 +absolute + + + +0.01 +smooth + +8.536946894673305 +47.35011948699539 +429.58384866904214 +-61.82426287787203 +77.74333040163293 +0 +120 +absolute + + + +0.01 +smooth + +8.536947346690944 +47.35012035477909 +429.5781574197589 +-62.100725205834024 +77.71160324528132 +0 +120 +absolute + + + +0.01 +smooth + +8.536947794592399 +47.35012122226735 +429.5724826576689 +-62.37713630766842 +77.67993846649578 +0 +120 +absolute + + + +0.01 +smooth + +8.536948238308275 +47.3501220894451 +429.56682496070124 +-62.653486437626434 +77.64833778437391 +0 +120 +absolute + + + +0.01 +smooth + +8.536948677769177 +47.35012295629732 +429.5611849067848 +-62.92976584995923 +77.61680291801324 +0 +120 +absolute + + + +0.01 +smooth + +8.536949114320423 +47.35012382299977 +429.5555560330673 +-63.2060844651544 +77.58531279753885 +0 +120 +absolute + + + +0.01 +smooth + +8.536949549487524 +47.350124689754786 +429.5499308342484 +-63.482569234080266 +77.55384317718031 +0 +120 +absolute + + + +0.01 +smooth + +8.536949983176953 +47.35012555654748 +429.54430978227464 +-63.75921114638134 +77.52239574042014 +0 +120 +absolute + + + +0.01 +smooth + +8.53695041529351 +47.350126423362795 +429.5386933574464 +-64.03600104952163 +77.49097219783677 +0 +120 +absolute + + + +0.01 +smooth + +8.536950845741995 +47.35012729018562 +429.5330820400644 +-64.31292979096517 +77.45957426000872 +0 +120 +absolute + + + +0.01 +smooth + +8.536951274427203 +47.350128157000896 +429.52747631042917 +-64.58998821817588 +77.42820363751443 +0 +120 +absolute + + + +0.01 +smooth + +8.536951701253926 +47.35012902379351 +429.52187664884116 +-64.86716717861783 +77.39686204093232 +0 +120 +absolute + + + +0.01 +smooth + +8.53695212612697 +47.35012989054839 +429.5162835356009 +-65.14445751975504 +77.36555118084092 +0 +120 +absolute + + + +0.01 +smooth + +8.536952548951122 +47.350130757250426 +429.510697451009 +-65.42185008905143 +77.33427276781863 +0 +120 +absolute + + + +0.01 +smooth + +8.536952969631182 +47.350131623884536 +429.5051188753659 +-65.69933573397103 +77.30302851244393 +0 +120 +absolute + + + +0.01 +smooth + +8.53695338807195 +47.35013249043567 +429.4995482889722 +-65.97690530197787 +77.27182012529528 +0 +120 +absolute + + + +0.01 +smooth + +8.536953804178216 +47.35013335688868 +429.49398617212836 +-66.25454964053586 +77.24064931695114 +0 +120 +absolute + + + +0.01 +smooth + +8.536954217854783 +47.35013422322852 +429.4884330051348 +-66.53225959710906 +77.20951779798995 +0 +120 +absolute + + + +0.01 +smooth + +8.536954629006443 +47.350135089440094 +429.4828892682924 +-66.81002601916147 +77.1784272789902 +0 +120 +absolute + + + +0.01 +smooth + +8.536955037537993 +47.3501359555083 +429.4773554419012 +-67.08783975415703 +77.1473794705303 +0 +120 +absolute + + + +0.01 +smooth + +8.536955443354232 +47.350136821418076 +429.4718320062622 +-67.3656916495598 +77.1163760831888 +0 +120 +absolute + + + +0.01 +smooth + +8.536955846359957 +47.350137687154316 +429.4663194416757 +-67.64357255283377 +77.08541882754407 +0 +120 +absolute + + + +0.01 +smooth + +8.53695624645996 +47.35013855270192 +429.4608182284421 +-67.92147331144288 +77.05450941417459 +0 +120 +absolute + + + +0.01 +smooth + +8.536956643559044 +47.35013941804583 +429.45532884686224 +-68.1993847728512 +77.02364955365886 +0 +120 +absolute + + + +0.01 +smooth + +8.536957037562 +47.35014028317094 +429.4498517772365 +-68.47729778452269 +76.9928409565753 +0 +120 +absolute + + + +0.01 +smooth + +8.536957428373627 +47.35014114806216 +429.44438749986534 +-68.75520319392133 +76.96208533350237 +0 +120 +absolute + + + +0.01 +smooth + +8.536957815898722 +47.35014201270442 +429.43893649504935 +-69.03309184851113 +76.93138439501854 +0 +120 +absolute + + + +0.01 +smooth + +8.53695820004208 +47.35014287708262 +429.43349924308905 +-69.31095459575612 +76.90073985170227 +0 +120 +absolute + + + +0.01 +smooth + +8.536958580708498 +47.350143741181654 +429.42807622428495 +-69.58878228312024 +76.87015341413199 +0 +120 +absolute + + + +0.01 +smooth + +8.536958957802774 +47.35014460498647 +429.4226679189376 +-69.86656575806752 +76.83962679288621 +0 +120 +absolute + + + +0.01 +smooth + +8.536959331229703 +47.35014546848195 +429.41727480734755 +-70.14429586806196 +76.80916169854338 +0 +120 +absolute + + + +0.01 +smooth + +8.536959700894082 +47.35014633165303 +429.4118973698153 +-70.42196346056755 +76.7787598416819 +0 +120 +absolute + + + +0.01 +smooth + +8.536960066700708 +47.3501471944846 +429.4065360866414 +-70.69955938304827 +76.74842293288032 +0 +120 +absolute + + + +0.01 +smooth + +8.536960428554377 +47.35014805696159 +429.40119143812626 +-70.97707448296813 +76.71815268271702 +0 +120 +absolute + + + +0.01 +smooth + +8.536960786359884 +47.3501489190689 +429.39586390457055 +-71.25449960779115 +76.6879508017705 +0 +120 +absolute + + + +0.01 +smooth + +8.53696114002203 +47.350149780791455 +429.3905539662748 +-71.53182560498124 +76.65781900061921 +0 +120 +absolute + + + +0.01 +smooth + +8.536961489445606 +47.35015064211416 +429.3852621035395 +-71.80904332200248 +76.6277589898416 +0 +120 +absolute + + + +0.01 +smooth + +8.536961834535415 +47.35015150302192 +429.3799887966651 +-72.08614360631887 +76.59777248001615 +0 +120 +absolute + + + +0.01 +smooth + +8.536962175196248 +47.35015236349966 +429.37473452595225 +-72.36311730539438 +76.5678611817213 +0 +120 +absolute + + + +0.01 +smooth + +8.536962511332904 +47.350153223532274 +429.3694997717014 +-72.63995526669301 +76.53802680553551 +0 +120 +absolute + + + +0.01 +smooth + +8.536962842850178 +47.350154083104705 +429.36428501421307 +-72.91664833767877 +76.50827106203724 +0 +120 +absolute + + + +0.01 +smooth + +8.536963169652868 +47.35015494220184 +429.3590907337878 +-73.19318736581562 +76.47859566180497 +0 +120 +absolute + + + +0.01 +smooth + +8.536963491645771 +47.3501558008086 +429.35391741072624 +-73.46956319856757 +76.44900231541713 +0 +120 +absolute + + + +0.01 +smooth + +8.536963808733685 +47.35015665890988 +429.3487655253288 +-73.74576668339864 +76.4194927334522 +0 +120 +absolute + + + +0.01 +smooth + +8.536964120821398 +47.35015751649062 +429.343635557896 +-74.0217886677728 +76.39006862648861 +0 +120 +absolute + + + +0.01 +smooth + +8.536964428188277 +47.35015837356887 +429.3385268660143 +-74.29763907327859 +76.36072758576398 +0 +120 +absolute + + + +0.01 +smooth + +8.536964734184275 +47.35015923043627 +429.33342952533 +-74.57348542362743 +76.33143321442411 +0 +120 +absolute + + + +0.01 +smooth + +8.536965039500842 +47.35016008715223 +429.32834143378136 +-74.84936217539017 +76.302177944375 +0 +120 +absolute + + + +0.01 +smooth + +8.536965343983093 +47.35016094370162 +429.3232630118234 +-75.12526091254855 +76.27296347539153 +0 +120 +absolute + + + +0.01 +smooth + +8.536965647476144 +47.35016180006924 +429.31819467991085 +-75.4011732190844 +76.24379150724843 +0 +120 +absolute + + + +0.01 +smooth + +8.536965949825108 +47.35016265623997 +429.3131368584984 +-75.67709067897943 +76.21466373972058 +0 +120 +absolute + + + +0.01 +smooth + +8.536966250875093 +47.3501635121986 +429.30808996804024 +-75.9530048762154 +76.18558187258273 +0 +120 +absolute + + + +0.01 +smooth + +8.536966550471218 +47.35016436792996 +429.30305442899135 +-76.22890739477408 +76.1565476056097 +0 +120 +absolute + + + +0.01 +smooth + +8.5369668484586 +47.35016522341894 +429.29803066180654 +-76.50478981863728 +76.12756263857634 +0 +120 +absolute + + + +0.01 +smooth + +8.536967144682345 +47.35016607865032 +429.29301908694015 +-76.78064373178667 +76.09862867125743 +0 +120 +absolute + + + +0.01 +smooth + +8.536967438987574 +47.35016693360896 +429.28802012484687 +-77.05646071820408 +76.06974740342777 +0 +120 +absolute + + + +0.01 +smooth + +8.536967731219397 +47.350167788279684 +429.2830341959815 +-77.33223236187128 +76.0409205348622 +0 +120 +absolute + + + +0.01 +smooth + +8.536968021222926 +47.35016864264732 +429.27806172079846 +-77.60795024676996 +76.01214976533551 +0 +120 +absolute + + + +0.01 +smooth + +8.53696830884328 +47.35016949669671 +429.2731031197527 +-77.88360595688198 +75.9834367946225 +0 +120 +absolute + + + +0.01 +smooth + +8.536968593925568 +47.35017035041269 +429.26815881329867 +-78.159191076189 +75.95478332249802 +0 +120 +absolute + + + +0.01 +smooth + +8.536968876314907 +47.35017120378009 +429.26322922189104 +-78.43469718867287 +75.92619104873684 +0 +120 +absolute + + + +0.01 +smooth + +8.536969155856411 +47.350172056783755 +429.2583147659845 +-78.71011587831535 +75.8976616731138 +0 +120 +absolute + + + +0.01 +smooth + +8.536969432395189 +47.35017290940849 +429.25341586603355 +-78.98543872909814 +75.86919689540368 +0 +120 +absolute + + + +0.01 +smooth + +8.536969705776361 +47.35017376163917 +429.2485329424931 +-79.26065732500305 +75.8407984153813 +0 +120 +absolute + + + +0.01 +smooth + +8.536969975845038 +47.350174613460595 +429.24366641581764 +-79.53576325001184 +75.81246793282149 +0 +120 +absolute + + + +0.01 +smooth + +8.536970242446333 +47.350175464857614 +429.2388167064619 +-79.81074808810624 +75.78420714749905 +0 +120 +absolute + + + +0.01 +smooth + +8.536970505425364 +47.35017631581506 +429.2339842348804 +-80.08560342326805 +75.75601775918877 +0 +120 +absolute + + + +0.01 +smooth + +8.536970764627238 +47.350177166317756 +429.22916942152784 +-80.36032083947903 +75.72790146766548 +0 +120 +absolute + + + +0.01 +smooth + +8.536971019897074 +47.350178016350554 +429.22437268685894 +-80.63489192072093 +75.699859972704 +0 +120 +absolute + + + +0.01 +smooth + +8.536971271079985 +47.35017886589828 +429.2195944513283 +-80.9093082509755 +75.67189497407912 +0 +120 +absolute + + + +0.01 +smooth + +8.536971518021083 +47.35017971494577 +429.2148351353905 +-81.18356141422453 +75.64400817156566 +0 +120 +absolute + + + +0.01 +smooth + +8.536971760565484 +47.350180563477835 +429.21009515950027 +-81.45764299444976 +75.61620126493843 +0 +120 +absolute + + + +0.01 +smooth + +8.5369719985583 +47.35018141147935 +429.20537494411224 +-81.73154457563297 +75.58847595397222 +0 +120 +absolute + + + +0.01 +smooth + +8.536972231844645 +47.350182258935114 +429.20067490968114 +-82.00525774175591 +75.56083393844187 +0 +120 +absolute + + + +0.01 +smooth + +8.536972460269634 +47.350183105829984 +429.1959954766615 +-82.27877407680035 +75.53327691812218 +0 +120 +absolute + + + +0.01 +smooth + +8.536972683678382 +47.35018395214878 +429.1913370655079 +-82.55208516474805 +75.50580659278796 +0 +120 +absolute + + + +0.01 +smooth + +8.536972901916 +47.35018479787634 +429.1867000966753 +-82.82518258958078 +75.47842466221401 +0 +120 +absolute + + + +0.01 +smooth + +8.536973114827603 +47.3501856429975 +429.182084990618 +-83.0980579352803 +75.45113282617515 +0 +120 +absolute + + + +0.01 +smooth + +8.536973322258303 +47.35018648749708 +429.1774921677909 +-83.37070278582836 +75.42393278444621 +0 +120 +absolute + + + +0.01 +smooth + +8.536973524053218 +47.35018733135995 +429.1729220486484 +-83.64310872520673 +75.39682623680196 +0 +120 +absolute + + + +0.01 +smooth + +8.536973720057459 +47.35018817457091 +429.1683750536454 +-83.91526733739718 +75.36981488301721 +0 +120 +absolute + + + +0.01 +smooth + +8.536973910116139 +47.3501890171148 +429.1638516032364 +-84.18717020638148 +75.34290042286682 +0 +120 +absolute + + + +0.01 +smooth + +8.536974094074374 +47.35018985897645 +429.1593521178761 +-84.45880891614138 +75.31608455612556 +0 +120 +absolute + + + +0.01 +smooth + +8.536974271777275 +47.35019070014072 +429.1548770180192 +-84.73017505065859 +75.28936898256826 +0 +120 +absolute + + + +0.01 +smooth + +8.536974443069958 +47.35019154059242 +429.15042672412017 +-85.00126019391497 +75.26275540196971 +0 +120 +absolute + + + +0.01 +smooth + +8.536974607797537 +47.350192380316386 +429.1460016566338 +-85.27205592989225 +75.23624551410471 +0 +120 +absolute + + + +0.01 +smooth + +8.536974768654794 +47.35019321944526 +429.1415973575597 +-85.54263056176697 +75.20982185667759 +0 +120 +absolute + + + +0.01 +smooth + +8.536974930666645 +47.350194058235694 +429.13720525242775 +-85.81311733043856 +75.18345086733022 +0 +120 +absolute + + + +0.01 +smooth + +8.536975093679231 +47.35019489667834 +429.13282553356447 +-86.0835117657132 +75.15713347238382 +0 +120 +absolute + + + +0.01 +smooth + +8.53697525742418 +47.35019573475791 +429.1284585882808 +-86.35380633270854 +75.13087136460989 +0 +120 +absolute + + + +0.01 +smooth + +8.536975421633104 +47.35019657245909 +429.124104803887 +-86.62399349654223 +75.10466623677998 +0 +120 +absolute + + + +0.01 +smooth + +8.536975586037636 +47.350197409766565 +429.1197645676942 +-86.89406572233197 +75.07851978166562 +0 +120 +absolute + + + +0.01 +smooth + +8.536975750369395 +47.35019824666507 +429.11543826701313 +-87.16401547519543 +75.05243369203838 +0 +120 +absolute + + + +0.01 +smooth + +8.53697591436001 +47.350199083139316 +429.11112628915487 +-87.43383522025034 +75.02640966066981 +0 +120 +absolute + + + +0.01 +smooth + +8.536976077741096 +47.350199919173974 +429.10682902142986 +-87.70351742261428 +75.00044938033146 +0 +120 +absolute + + + +0.01 +smooth + +8.536976240244284 +47.350200754753764 +429.1025468511491 +-87.97305454740497 +74.97455454379484 +0 +120 +absolute + + + +0.01 +smooth + +8.536976401601196 +47.350201589863396 +429.0982801656235 +-88.24243905974012 +74.94872684383155 +0 +120 +absolute + + + +0.01 +smooth + +8.53697656154345 +47.35020242448756 +429.0940293521635 +-88.51166342473732 +74.92296797321309 +0 +120 +absolute + + + +0.01 +smooth + +8.536976719802674 +47.35020325861096 +429.08979479808033 +-88.78072010751433 +74.89727962471103 +0 +120 +absolute + + + +0.01 +smooth + +8.536976876110494 +47.35020409221833 +429.08557689068465 +-89.0496015731888 +74.87166349109694 +0 +120 +absolute + + + +0.01 +smooth + +8.536977030198528 +47.350204925294314 +429.081376017287 +-89.31830028687834 +74.84612126514229 +0 +120 +absolute + + + +0.01 +smooth + +8.536977181798404 +47.35020575782368 +429.07719256519863 +-89.58680871370072 +74.82065463961871 +0 +120 +absolute + + + +0.01 +smooth + +8.536977330641744 +47.35020658979109 +429.07302692173016 +-89.85511931877357 +74.79526530729771 +0 +120 +absolute + + + +0.01 +smooth + +8.536977476460171 +47.35020742118126 +429.0688794741923 +-90.12322456721458 +74.76995496095084 +0 +120 +absolute + + + +0.01 +smooth + +8.536977618985308 +47.350208251978906 +429.0647506098961 +-90.3911169241414 +74.74472529334966 +0 +120 +absolute + + + +0.01 +smooth + +8.536977757948781 +47.350209082168725 +429.06064071615214 +-90.65878885467173 +74.71957799726569 +0 +120 +absolute + + + +0.01 +smooth + +8.536977893082211 +47.35020991173541 +429.0565501802713 +-90.92623282392323 +74.69451476547049 +0 +120 +absolute + + + +0.01 +smooth + +8.536978024117225 +47.35021074066367 +429.0524793895645 +-91.19344129701358 +74.6695372907356 +0 +120 +absolute + + + +0.01 +smooth + +8.53697815078544 +47.35021156893822 +429.0484287313424 +-91.4604067390604 +74.64464726583262 +0 +120 +absolute + + + +0.01 +smooth + +8.536978272818487 +47.35021239654374 +429.04439859291597 +-91.72712161518149 +74.619846383533 +0 +120 +absolute + + + +0.01 +smooth + +8.536978389947986 +47.35021322346496 +429.0403893615959 +-91.99357839049442 +74.59513633660836 +0 +120 +absolute + + + +0.01 +smooth + +8.536978501905558 +47.35021404968658 +429.036401424693 +-92.25976953011693 +74.57051881783023 +0 +120 +absolute + + + +0.01 +smooth + +8.536978608422832 +47.350214875193274 +429.03243516951807 +-92.52568749916666 +74.54599551997015 +0 +120 +absolute + + + +0.01 +smooth + +8.536978709231429 +47.35021569996978 +429.028490983382 +-92.79132476276128 +74.52156813579967 +0 +120 +absolute + + + +0.01 +smooth + +8.53697880406297 +47.350216524000786 +429.0245692535955 +-93.05667378601848 +74.49723835809033 +0 +120 +absolute + + + +0.01 +smooth + +8.536978892649081 +47.350217347271006 +429.02067036746956 +-93.32172703405595 +74.47300787961369 +0 +120 +absolute + + + +0.01 +smooth + +8.536978974721388 +47.350218169765135 +429.01679471231483 +-93.58647697199132 +74.44887839314129 +0 +120 +absolute + + + +0.01 +smooth + +8.53697905001151 +47.350218991467884 +429.0129426754421 +-93.85091606494231 +74.42485159144466 +0 +120 +absolute + + + +0.01 +smooth + +8.536979118251073 +47.350219812363946 +429.0091146441624 +-94.11503677802656 +74.40092916729537 +0 +120 +absolute + + + +0.01 +smooth + +8.536979179171698 +47.350220632438024 +429.0053110057863 +-94.37883157636176 +74.37711281346498 +0 +120 +absolute + + + +0.01 +smooth + +8.536979232505015 +47.35022145167484 +429.00153214762474 +-94.6422929250656 +74.353404222725 +0 +120 +absolute + + + +0.01 +smooth + +8.536979277982638 +47.35022227005908 +428.99777845698844 +-94.90541328925575 +74.32980508784699 +0 +120 +absolute + + + +0.01 +smooth + +8.5369793153362 +47.35022308757546 +428.99405032118835 +-95.16818513404985 +74.3063171016025 +0 +120 +absolute + + + +0.01 +smooth + +8.536979344297318 +47.350223904208676 +428.9903481275351 +-95.43060092456562 +74.2829419567631 +0 +120 +absolute + + + +0.01 +smooth + +8.536979364597617 +47.35022471994343 +428.98667226333976 +-95.6926531259207 +74.25968134610031 +0 +120 +absolute + + + +0.01 +smooth + +8.536979375968723 +47.350225534764434 +428.9830231159128 +-95.9543342032328 +74.23653696238566 +0 +120 +absolute + + + +0.01 +smooth + +8.536979378419588 +47.35022634867211 +428.9794005482254 +-96.21564380259815 +74.21350837001546 +0 +120 +absolute + + + +0.01 +smooth + +8.536979377185641 +47.35022716195887 +428.97579468746693 +-96.47671513910696 +74.19055562752698 +0 +120 +absolute + + + +0.01 +smooth + +8.536979374362875 +47.35022797472815 +428.9722019463592 +-96.73759591030085 +74.16766433902598 +0 +120 +absolute + + + +0.01 +smooth + +8.536979369976248 +47.35022878696445 +428.9686227020325 +-96.99827959876632 +74.14483620516232 +0 +120 +absolute + + + +0.01 +smooth + +8.536979364050705 +47.35022959865227 +428.9650573316166 +-97.25875968708978 +74.12207292658589 +0 +120 +absolute + + + +0.01 +smooth + +8.536979356611207 +47.35023040977611 +428.96150621224166 +-97.51902965785773 +74.09937620394658 +0 +120 +absolute + + + +0.01 +smooth + +8.536979347682697 +47.35023122032041 +428.9579697210374 +-97.7790829936564 +74.07674773789415 +0 +120 +absolute + + + +0.01 +smooth + +8.536979337290134 +47.35023203026974 +428.95444823513407 +-98.03891317707243 +74.05418922907855 +0 +120 +absolute + + + +0.01 +smooth + +8.53697932545846 +47.35023283960849 +428.95094213166135 +-98.29851369069216 +74.03170237814957 +0 +120 +absolute + + + +0.01 +smooth + +8.536979312212639 +47.35023364832123 +428.94745178774934 +-98.55787801710203 +74.0092888857571 +0 +120 +absolute + + + +0.01 +smooth + +8.536979297577615 +47.35023445639243 +428.94397758052804 +-98.81699963888848 +73.986950452551 +0 +120 +absolute + + + +0.01 +smooth + +8.536979281578342 +47.35023526380654 +428.9405198871274 +-99.0758720386379 +73.96468877918112 +0 +120 +absolute + + + +0.01 +smooth + +8.536979264239768 +47.35023607054809 +428.9370790846773 +-99.33448869893675 +73.9425055662973 +0 +120 +absolute + + + +0.01 +smooth + +8.536979245586853 +47.35023687660157 +428.93365555030795 +-99.59284310237145 +73.92040251454944 +0 +120 +absolute + + + +0.01 +smooth + +8.536979225644536 +47.350237681951434 +428.9302496611488 +-99.8509287315284 +73.89838132458732 +0 +120 +absolute + + + +0.01 +smooth + +8.536979204437781 +47.35023848658221 +428.9268617943304 +-100.10873906899411 +73.8764436970609 +0 +120 +absolute + + + +0.01 +smooth + +8.536979181991537 +47.35023929047838 +428.92349232698257 +-100.36626759735493 +73.85459133261996 +0 +120 +absolute + + + +0.01 +smooth + +8.536979158330748 +47.3502400936244 +428.920141636235 +-100.62350779919731 +73.8328259319144 +0 +120 +absolute + + + +0.01 +smooth + +8.536979133480376 +47.350240896004806 +428.916810099218 +-100.88045315710771 +73.81114919559407 +0 +120 +absolute + + + +0.01 +smooth + +8.536979107465367 +47.35024169760405 +428.9134980930613 +-101.13709715367251 +73.7895628243088 +0 +120 +absolute + + + +0.01 +smooth + +8.536979080310672 +47.35024249840665 +428.910205994895 +-101.39343327147816 +73.76806851870845 +0 +120 +absolute + + + +0.01 +smooth + +8.536979052041248 +47.350243298397075 +428.906934181849 +-101.64945499311112 +73.74666797944292 +0 +120 +absolute + + + +0.01 +smooth + +8.536979022682042 +47.35024409755983 +428.9036830310533 +-101.90515580115778 +73.72536290716201 +0 +120 +absolute + + + +0.01 +smooth + +8.536978992258007 +47.35024489587939 +428.90045291963787 +-102.16052917820457 +73.70415500251563 +0 +120 +absolute + + + +0.01 +smooth + +8.536978960794094 +47.35024569334025 +428.8972442247325 +-102.41556860683791 +73.6830459661536 +0 +120 +absolute + + + +0.01 +smooth + +8.536978928315257 +47.35024648992689 +428.89405732346756 +-102.67026756964424 +73.6620374987258 +0 +120 +absolute + + + +0.01 +smooth + +8.536978894846445 +47.350247285623816 +428.89089259297265 +-102.92461954921002 +73.64113130088207 +0 +120 +absolute + + + +0.01 +smooth + +8.536978860412612 +47.35024808041551 +428.887750410378 +-103.17861802812163 +73.62032907327227 +0 +120 +absolute + + + +0.01 +smooth + +8.536978825038709 +47.350248874286464 +428.88463115281326 +-103.43225648896555 +73.59963251654628 +0 +120 +absolute + + + +0.01 +smooth + +8.536978788749686 +47.35024966722115 +428.88153519740865 +-103.68552841432816 +73.57904333135393 +0 +120 +absolute + + + +0.01 +smooth + +8.536978751570498 +47.35025045920409 +428.87846292129416 +-103.93842728679586 +73.55856321834507 +0 +120 +absolute + + + +0.01 +smooth + +8.536978713526093 +47.35025125021974 +428.8754147015996 +-104.19094658895517 +73.5381938781696 +0 +120 +absolute + + + +0.01 +smooth + +8.536978674641427 +47.35025204025261 +428.87239091545507 +-104.4430798033925 +73.51793701147733 +0 +120 +absolute + + + +0.01 +smooth + +8.536978634941448 +47.350252829287186 +428.86939193999035 +-104.69482041269423 +73.49779431891815 +0 +120 +absolute + + + +0.01 +smooth + +8.536978594451108 +47.35025361730794 +428.86641815233554 +-104.94616189944682 +73.4777675011419 +0 +120 +absolute + + + +0.01 +smooth + +8.536978553195361 +47.35025440429939 +428.8634699296207 +-105.1970977462367 +73.45785825879844 +0 +120 +absolute + + + +0.01 +smooth + +8.536978511199159 +47.350255190246 +428.86054764897574 +-105.44762143565026 +73.43806829253764 +0 +120 +absolute + + + +0.01 +smooth + +8.536978468487451 +47.35025597513228 +428.85765168753045 +-105.69772645027399 +73.41839930300934 +0 +120 +absolute + + + +0.01 +smooth + +8.53697842508519 +47.35025675894271 +428.854782422415 +-105.94740627269428 +73.39885299086342 +0 +120 +absolute + + + +0.01 +smooth + +8.53697838101733 +47.35025754166177 +428.85194023075934 +-106.19665438549757 +73.37943105674968 +0 +120 +absolute + + + +0.01 +smooth + +8.536978336308817 +47.35025832327396 +428.84912548969334 +-106.44546427127028 +73.36013520131804 +0 +120 +absolute + + + +0.01 +smooth + +8.536978288706935 +47.35025910387795 +428.84633463142836 +-106.69387377128761 +73.34095102189549 +0 +120 +absolute + + + +0.01 +smooth + +8.536978231756436 +47.350259883788965 +428.84355660855533 +-106.94200546278444 +73.32183357295416 +0 +120 +absolute + + + +0.01 +smooth + +8.536978165310101 +47.35026066301207 +428.84079108931894 +-107.18986209033383 +73.3027816395066 +0 +120 +absolute + + + +0.01 +smooth + +8.536978089642822 +47.35026144153142 +428.83803846678023 +-107.4374382679663 +73.28379696495985 +0 +120 +absolute + + + +0.01 +smooth + +8.536978005029495 +47.35026221933113 +428.83529913400014 +-107.68472860971232 +73.26488129272101 +0 +120 +absolute + + + +0.01 +smooth + +8.536977911745 +47.35026299639534 +428.83257348403976 +-107.93172772960236 +73.24603636619715 +0 +120 +absolute + + + +0.01 +smooth + +8.536977810064233 +47.350263772708175 +428.82986190995996 +-108.17843024166696 +73.22726392879532 +0 +120 +absolute + + + +0.01 +smooth + +8.536977700262076 +47.35026454825372 +428.8271648048216 +-108.42483075993653 +73.20856572392256 +0 +120 +absolute + + + +0.01 +smooth + +8.536977582613423 +47.350265323016146 +428.8244825616856 +-108.67092389844161 +73.18994349498597 +0 +120 +absolute + + + +0.01 +smooth + +8.536977457393165 +47.35026609697955 +428.8218155736132 +-108.9167042712127 +73.17139898539264 +0 +120 +absolute + + + +0.01 +smooth + +8.536977324876185 +47.350266870128074 +428.8191642336649 +-109.16216649228022 +73.15293393854957 +0 +120 +absolute + + + +0.01 +smooth + +8.536977185337376 +47.350267642445836 +428.8165289349019 +-109.40730517567471 +73.13455009786384 +0 +120 +absolute + + + +0.01 +smooth + +8.536977039051624 +47.35026841391696 +428.8139100703851 +-109.6521149354266 +73.11624920674255 +0 +120 +absolute + + + +0.01 +smooth + +8.536976886293822 +47.350269184525565 +428.81130803317546 +-109.89659038556647 +73.09803300859274 +0 +120 +absolute + + + +0.01 +smooth + +8.536976727338857 +47.350269954255786 +428.808723216334 +-110.1407261401247 +73.07990324682149 +0 +120 +absolute + + + +0.01 +smooth + +8.53697656246162 +47.35027072309176 +428.80615601292135 +-110.38451681313187 +73.06186166483586 +0 +120 +absolute + + + +0.01 +smooth + +8.536976391937 +47.3502714910176 +428.80360681599893 +-110.62795701861845 +73.04391000604292 +0 +120 +absolute + + + +0.01 +smooth + +8.536976216039879 +47.35027225801742 +428.8010760186272 +-110.87104137061488 +73.02605001384974 +0 +120 +absolute + + + +0.01 +smooth + +8.536976035045155 +47.350273024075356 +428.7985640138676 +-111.1137644831517 +73.00828343166336 +0 +120 +absolute + + + +0.01 +smooth + +8.536975849227712 +47.35027378917553 +428.7960711947806 +-111.35612097025935 +72.99061200289086 +0 +120 +absolute + + + +0.01 +smooth + +8.53697565886244 +47.350274553302064 +428.79359795442724 +-111.5981054459683 +72.9730374709393 +0 +120 +absolute + + + +0.01 +smooth + +8.536975464224229 +47.35027531643908 +428.79114468586874 +-111.8397125243091 +72.95556157921575 +0 +120 +absolute + + + +0.01 +smooth + +8.536975265587968 +47.35027607857073 +428.78871178216576 +-112.08093681931221 +72.93818607112729 +0 +120 +absolute + + + +0.01 +smooth + +8.536975063228544 +47.350276839681094 +428.78629963637945 +-112.32177294500812 +72.92091269008098 +0 +120 +absolute + + + +0.01 +smooth + +8.53697485742085 +47.35027759975434 +428.7839086415706 +-112.56221551542728 +72.90374317948385 +0 +120 +absolute + + + +0.01 +smooth + +8.53697464843977 +47.350278358774574 +428.7815391908002 +-112.80225914460026 +72.88667928274302 +0 +120 +absolute + + + +0.01 +smooth + +8.536974436560197 +47.35027911672592 +428.7791916771291 +-113.04189844655745 +72.86972274326553 +0 +120 +absolute + + + +0.01 +smooth + +8.536974222057019 +47.350279873592505 +428.77686649361846 +-113.2811280353294 +72.85287530445842 +0 +120 +absolute + + + +0.01 +smooth + +8.536974005205124 +47.35028062935845 +428.77456403332906 +-113.51994252494657 +72.8361387097288 +0 +120 +absolute + + + +0.01 +smooth + +8.536973786279402 +47.3502813840079 +428.7722846893219 +-113.75833652943945 +72.8195147024837 +0 +120 +absolute + + + +0.01 +smooth + +8.536973565554742 +47.35028213752495 +428.7700288546579 +-113.99630466283855 +72.80300502613022 +0 +120 +absolute + + + +0.01 +smooth + +8.536973343306034 +47.35028288989375 +428.7677969223979 +-114.2338415391743 +72.7866114240754 +0 +120 +absolute + + + +0.01 +smooth + +8.536973119808167 +47.35028364109841 +428.765589285603 +-114.47094177247726 +72.77033563972631 +0 +120 +absolute + + + +0.01 +smooth + +8.536972895336024 +47.350284391123054 +428.7634063373342 +-114.70759997677789 +72.75417941649002 +0 +120 +absolute + + + +0.01 +smooth + +8.536972670164502 +47.35028513995181 +428.7612484706523 +-114.94381076610662 +72.73814449777359 +0 +120 +absolute + + + +0.01 +smooth + +8.536972444568487 +47.350285887568816 +428.75911607861815 +-115.17956875449401 +72.7222326269841 +0 +120 +absolute + + + +0.01 +smooth + +8.53697221882287 +47.350286633958184 +428.7570095542929 +-115.41486855597051 +72.7064455475286 +0 +120 +absolute + + + +0.01 +smooth + +8.536971993202537 +47.350287379104046 +428.7549292907374 +-115.64970478456664 +72.69078500281415 +0 +120 +absolute + + + +0.01 +smooth + +8.536971767982376 +47.350288122990506 +428.75287568101254 +-115.8840720543128 +72.67525273624784 +0 +120 +absolute + + + +0.01 +smooth + +8.536971543437279 +47.350288865601726 +428.7508491181794 +-116.11796497923956 +72.65985049123672 +0 +120 +absolute + + + +0.01 +smooth + +8.536971319774036 +47.350289606926225 +428.7488498310341 +-116.35137956800034 +72.64457935764213 +0 +120 +absolute + + + +0.01 +smooth + +8.536971092521288 +47.35029034725496 +428.7468668498562 +-116.58440727051403 +72.62939584557489 +0 +120 +absolute + + + +0.01 +smooth + +8.536970858951916 +47.35029108675883 +428.74489367882757 +-116.81710267897132 +72.61427418724816 +0 +120 +absolute + + + +0.01 +smooth + +8.536970619198007 +47.35029182542133 +428.7429307696587 +-117.04946161376225 +72.59921624164947 +0 +120 +absolute + + + +0.01 +smooth + +8.536970373391654 +47.35029256322602 +428.74097857406065 +-117.28147989527689 +72.58422386776633 +0 +120 +absolute + + + +0.01 +smooth + +8.536970121664945 +47.35029330015645 +428.7390375437443 +-117.51315334390539 +72.56929892458638 +0 +120 +absolute + + + +0.01 +smooth + +8.536969864149969 +47.35029403619616 +428.7371081304208 +-117.74447778003784 +72.55444327109716 +0 +120 +absolute + + + +0.01 +smooth + +8.536969600978813 +47.35029477132866 +428.73519078580057 +-117.97544902406428 +72.5396587662862 +0 +120 +absolute + + + +0.01 +smooth + +8.536969332283565 +47.350295505537524 +428.7332859615949 +-118.20606289637479 +72.52494726914107 +0 +120 +absolute + + + +0.01 +smooth + +8.536969058196322 +47.350296238806294 +428.7313941095145 +-118.43631521735955 +72.51031063864934 +0 +120 +absolute + + + +0.01 +smooth + +8.536968778849161 +47.35029697111847 +428.72951568127013 +-118.66620180740856 +72.49575073379853 +0 +120 +absolute + + + +0.01 +smooth + +8.53696849437418 +47.35029770245762 +428.727651128573 +-118.89571848691192 +72.48126941357627 +0 +120 +absolute + + + +0.01 +smooth + +8.536968204903465 +47.35029843280729 +428.72580090313375 +-119.12486107625978 +72.46686853697008 +0 +120 +absolute + + + +0.01 +smooth + +8.5369679105691 +47.350299162150996 +428.72396545666334 +-119.35362539584213 +72.45254996296747 +0 +120 +absolute + + + +0.01 +smooth + +8.536967611503185 +47.3502998904723 +428.7221452408728 +-119.58200726604916 +72.43831555055608 +0 +120 +absolute + + + +0.01 +smooth + +8.5369673078378 +47.350300617754755 +428.72034070747293 +-119.81000250727092 +72.42416715872346 +0 +120 +absolute + + + +0.01 +smooth + +8.536966999705031 +47.35030134398184 +428.71855230817437 +-120.03760693989742 +72.4101066464571 +0 +120 +absolute + + + +0.01 +smooth + +8.536966687236978 +47.350302069137165 +428.7167804946885 +-120.2648163843189 +72.39613587274461 +0 +120 +absolute + + + +0.01 +smooth + +8.536966370565722 +47.350302793204236 +428.7150257187259 +-120.49162666092535 +72.38225669657355 +0 +120 +absolute + + + +0.01 +smooth + +8.53696604982335 +47.35030351616658 +428.7132884319974 +-120.71803359010686 +72.36847097693148 +0 +120 +absolute + + + +0.01 +smooth + +8.53696572514196 +47.35030423800779 +428.71156908621424 +-120.9440329922536 +72.35478057280594 +0 +120 +absolute + + + +0.01 +smooth + +8.536965396653631 +47.35030495871134 +428.7098681330869 +-121.16962068775553 +72.34118734318449 +0 +120 +absolute + + + +0.01 +smooth + +8.536965064490458 +47.350305678260796 +428.70818602432655 +-121.39479249700284 +72.3276931470547 +0 +120 +absolute + + + +0.01 +smooth + +8.536964728784527 +47.350306396639716 +428.70652321164397 +-121.61954424038552 +72.31429984340413 +0 +120 +absolute + + + +0.01 +smooth + +8.53696438966793 +47.35030711383163 +428.70488014675004 +-121.84387173829376 +72.30100929122032 +0 +120 +absolute + + + +0.01 +smooth + +8.53696404727275 +47.35030782982006 +428.70325728135566 +-122.06777081111763 +72.28782334949085 +0 +120 +absolute + + + +0.01 +smooth + +8.536963701731082 +47.350308544588565 +428.7016550671718 +-122.29123727924721 +72.27474387720326 +0 +120 +absolute + + + +0.01 +smooth + +8.536963353175011 +47.35030925812069 +428.70007395590926 +-122.51426696307257 +72.26177273334514 +0 +120 +absolute + + + +0.01 +smooth + +8.536963001736629 +47.35030997039994 +428.69851439927913 +-122.73685568298382 +72.24891177690401 +0 +120 +absolute + + + +0.01 +smooth + +8.536962647548023 +47.350310681409894 +428.696976848992 +-122.95899925937101 +72.23616286686745 +0 +120 +absolute + + + +0.01 +smooth + +8.53696229074128 +47.35031139113407 +428.69546175675896 +-123.18069351262427 +72.22352786222302 +0 +120 +absolute + + + +0.01 +smooth + +8.536961931448493 +47.350312099556035 +428.6939695742909 +-123.4019342631337 +72.21100862195829 +0 +120 +absolute + + + +0.01 +smooth + +8.536961569801747 +47.35031280665929 +428.69250075329865 +-123.62271733128935 +72.19860700506077 +0 +120 +absolute + + + +0.01 +smooth + +8.536961205933133 +47.35031351242739 +428.69105574549303 +-123.84303853748133 +72.18632487051806 +0 +120 +absolute + + + +0.01 +smooth + +8.53696083997474 +47.3503142168439 +428.6896350025851 +-124.0628937020997 +72.17416407731771 +0 +120 +absolute + + + +0.01 +smooth + +8.536960472058656 +47.35031491989233 +428.6882389762857 +-124.28227864553459 +72.16212648444728 +0 +120 +absolute + + + +0.01 +smooth + +8.536960102316968 +47.350315621556206 +428.6868681183056 +-124.50118918817606 +72.15021395089434 +0 +120 +absolute + + + +0.01 +smooth + +8.53695973088177 +47.35031632181912 +428.68552288035585 +-124.71962115041424 +72.13842833564642 +0 +120 +absolute + + + +0.01 +smooth + +8.536959357885147 +47.35031702066456 +428.6842037141473 +-124.93757035263916 +72.1267714976911 +0 +120 +absolute + + + +0.01 +smooth + +8.536958983459188 +47.35031771807609 +428.6829110713908 +-125.15503261524093 +72.11524529601594 +0 +120 +absolute + + + +0.01 +smooth + +8.536958607735983 +47.35031841403726 +428.6816454037973 +-125.37200375860967 +72.10385158960847 +0 +120 +absolute + + + +0.01 +smooth + +8.536958230153074 +47.35031910861858 +428.6804034080088 +-125.58850052058938 +72.0925785704044 +0 +120 +absolute + + + +0.01 +smooth + +8.536957847600284 +47.35031980220713 +428.67916816879784 +-125.80461635551458 +72.08136474457616 +0 +120 +absolute + + + +0.01 +smooth + +8.536957459763155 +47.35032049483652 +428.67793810799094 +-126.02036050378995 +72.07020424296837 +0 +120 +absolute + + + +0.01 +smooth + +8.536957066732061 +47.350321186489424 +428.676713848648 +-126.2357300121956 +72.05909919710655 +0 +120 +absolute + + + +0.01 +smooth + +8.536956668597385 +47.35032187714853 +428.6754960138282 +-126.45072192751164 +72.04805173851616 +0 +120 +absolute + + + +0.01 +smooth + +8.53695626544951 +47.35032256679653 +428.6742852265916 +-126.66533329651824 +72.03706399872272 +0 +120 +absolute + + + +0.01 +smooth + +8.536955857378814 +47.350323255416086 +428.67308210999795 +-126.87956116599548 +72.0261381092517 +0 +120 +absolute + + + +0.01 +smooth + +8.536955444475684 +47.35032394298991 +428.6718872871067 +-127.09340258272356 +72.01527620162857 +0 +120 +absolute + + + +0.01 +smooth + +8.536955026830498 +47.35032462950069 +428.6707013809778 +-127.3068545934826 +72.0044804073789 +0 +120 +absolute + + + +0.01 +smooth + +8.536954604533634 +47.35032531493109 +428.6695250146708 +-127.51991424505275 +71.9937528580281 +0 +120 +absolute + + + +0.01 +smooth + +8.53695417767548 +47.35032599926382 +428.66835881124535 +-127.7325785842141 +71.98309568510172 +0 +120 +absolute + + + +0.01 +smooth + +8.536953746346411 +47.35032668248158 +428.6672033937613 +-127.94484465774683 +71.97251102012524 +0 +120 +absolute + + + +0.01 +smooth + +8.536953310636811 +47.350327364567015 +428.66605938527823 +-128.156709512431 +71.96200099462412 +0 +120 +absolute + + + +0.01 +smooth + +8.536952870637062 +47.350328045502835 +428.664927408856 +-128.36817019504682 +71.95156774012388 +0 +120 +absolute + + + +0.01 +smooth + +8.536952426437548 +47.35032872527175 +428.6638080875542 +-128.57922375237442 +71.94121338815002 +0 +120 +absolute + + + +0.01 +smooth + +8.53695197812864 +47.35032940385639 +428.6627020444323 +-128.7898672311939 +71.93094007022799 +0 +120 +absolute + + + +0.01 +smooth + +8.536951525800731 +47.350330081239505 +428.6616099025506 +-129.00009767828544 +71.92074991788334 +0 +120 +absolute + + + +0.01 +smooth + +8.536951069544198 +47.35033075740374 +428.6605322849682 +-129.20991214042914 +71.91064506264155 +0 +120 +absolute + + + +0.01 +smooth + +8.536950609449418 +47.350331432331785 +428.65946981474514 +-129.41930766440512 +71.90062763602808 +0 +120 +absolute + + + +0.01 +smooth + +8.536950145606784 +47.35033210600638 +428.65842311494106 +-129.6282812969936 +71.89069976956847 +0 +120 +absolute + + + +0.01 +smooth + +8.536949678106662 +47.35033277841012 +428.6573928086155 +-129.83683008497462 +71.88086359478815 +0 +120 +absolute + + + +0.01 +smooth + +8.536949207039445 +47.35033344952577 +428.6563795188284 +-130.04495107512835 +71.87112124321267 +0 +120 +absolute + + + +0.01 +smooth + +8.536948732495508 +47.35033411933598 +428.6553838686392 +-130.25264131423495 +71.86147484636749 +0 +120 +absolute + + + +0.01 +smooth + +8.536948254565237 +47.35033478782344 +428.6544064811078 +-130.4598978490745 +71.8519265357781 +0 +120 +absolute + + + +0.01 +smooth + +8.536947773339008 +47.35033545497086 +428.6534479792939 +-130.6667177264272 +71.84247844297002 +0 +120 +absolute + + + +0.01 +smooth + +8.536947288907207 +47.35033612076091 +428.6525089862571 +-130.87309799307315 +71.83313269946873 +0 +120 +absolute + + + +0.01 +smooth + +8.536946801360214 +47.35033678517627 +428.6515901250571 +-131.07903569579247 +71.82389143679973 +0 +120 +absolute + + + +0.01 +smooth + +8.536946310788409 +47.35033744819964 +428.6506920187537 +-131.28452788136534 +71.81475678648849 +0 +120 +absolute + + + +0.01 +smooth + +8.536945817282174 +47.35033810981369 +428.6498152904066 +-131.48957159657186 +71.80573088006052 +0 +120 +absolute + + + +0.01 +smooth + +8.53694532093189 +47.35033877000113 +428.64896056307543 +-131.69416388819218 +71.79681584904131 +0 +120 +absolute + + + +0.01 +smooth + +8.536944821827941 +47.35033942874463 +428.6481284598198 +-131.8983018030064 +71.78801382495635 +0 +120 +absolute + + + +0.01 +smooth + +8.536944320060703 +47.350340086026904 +428.6473196036996 +-132.10198238779472 +71.77932693933116 +0 +120 +absolute + + + +0.01 +smooth + +8.536943815720562 +47.3503407418306 +428.6465346177745 +-132.30520268933725 +71.77075732369116 +0 +120 +absolute + + + +0.01 +smooth + +8.536943308897897 +47.350341396138425 +428.645774125104 +-132.50795975441412 +71.7623071095619 +0 +120 +absolute + + + +0.01 +smooth + +8.53694279968309 +47.35034204893307 +428.6450387487481 +-132.71025062980544 +71.75397842846888 +0 +120 +absolute + + + +0.01 +smooth + +8.536942288166523 +47.35034270019722 +428.6443291117662 +-132.9120723622914 +71.74577341193759 +0 +120 +absolute + + + +0.01 +smooth + +8.536941774438576 +47.35034334991356 +428.6436458372183 +-133.1134219986521 +71.73769419149349 +0 +120 +absolute + + + +0.01 +smooth + +8.536941258589632 +47.35034399806477 +428.6429895481638 +-133.3142965856677 +71.72974289866208 +0 +120 +absolute + + + +0.01 +smooth + +8.53694074071007 +47.35034464463355 +428.6423608676627 +-133.51469317011828 +71.72192166496889 +0 +120 +absolute + + + +0.01 +smooth + +8.536940220890276 +47.35034528960258 +428.6417604187745 +-133.714608798784 +71.71423262193939 +0 +120 +absolute + + + +0.01 +smooth + +8.536939699220623 +47.35034593295455 +428.6411888245589 +-133.91404051844506 +71.70667790109903 +0 +120 +absolute + + + +0.01 +smooth + +8.536939174254448 +47.35034657497073 +428.6406307345685 +-134.11303617463923 +71.6992064560898 +0 +120 +absolute + + + +0.01 +smooth + +8.53693864453152 +47.35034721593167 +428.64007091735476 +-134.31164439926093 +71.69176769865444 +0 +120 +absolute + + + +0.01 +smooth + +8.536938110121888 +47.35034785581884 +428.63951017447465 +-134.5098634186247 +71.68436444746979 +0 +120 +absolute + + + +0.01 +smooth + +8.536937571095592 +47.35034849461381 +428.6389493074862 +-134.70769145904535 +71.67699952121268 +0 +120 +absolute + + + +0.01 +smooth + +8.536937027522686 +47.350349132298106 +428.63838911794693 +-134.90512674683762 +71.66967573855987 +0 +120 +absolute + + + +0.01 +smooth + +8.536936479473214 +47.350349768853285 +428.63783040741464 +-135.10216750831623 +71.6623959181882 +0 +120 +absolute + + + +0.01 +smooth + +8.536935927017215 +47.35035040426082 +428.6372739774466 +-135.29881196979585 +71.65516287877448 +0 +120 +absolute + + + +0.01 +smooth + +8.536935370224741 +47.35035103850229 +428.63672062960063 +-135.49505835759123 +71.64797943899549 +0 +120 +absolute + + + +0.01 +smooth + +8.536934809165842 +47.35035167155923 +428.6361711654343 +-135.69090489801712 +71.6408484175281 +0 +120 +absolute + + + +0.01 +smooth + +8.536934243910553 +47.35035230341314 +428.6356263865051 +-135.88634981738815 +71.63377263304902 +0 +120 +absolute + + + +0.01 +smooth + +8.536933674528928 +47.35035293404557 +428.63508709437076 +-136.08139134201915 +71.62675490423514 +0 +120 +absolute + + + +0.01 +smooth + +8.536933101091009 +47.350353563438055 +428.63455409058895 +-136.2760276982248 +71.61979804976328 +0 +120 +absolute + + + +0.01 +smooth + +8.536932523666845 +47.3503541915721 +428.6340281767169 +-136.47025711231973 +71.61290488831013 +0 +120 +absolute + + + +0.01 +smooth + +8.536931942326481 +47.350354818429295 +428.63351015431283 +-136.66407781061883 +71.60607823855263 +0 +120 +absolute + + + +0.01 +smooth + +8.536931357139961 +47.35035544399111 +428.63300082493373 +-136.85748801943663 +71.59932091916751 +0 +120 +absolute + + + +0.01 +smooth + +8.536930768177337 +47.35035606823913 +428.63250099013766 +-137.05048596508803 +71.59263574883165 +0 +120 +absolute + + + +0.01 +smooth + +8.536930175508646 +47.350356691154836 +428.63201145148196 +-137.24306987388766 +71.5860255462218 +0 +120 +absolute + + + +0.01 +smooth + +8.536929579203939 +47.350357312719794 +428.63153301052427 +-137.43523797215022 +71.57949313001478 +0 +120 +absolute + + + +0.01 +smooth + +8.536928979333267 +47.35035793291554 +428.63106646882255 +-137.62698848619056 +71.57304131888743 +0 +120 +absolute + + + +0.01 +smooth + +8.536928375966664 +47.35035855172357 +428.6306126279338 +-137.81831964232322 +71.5666729315165 +0 +120 +absolute + + + +0.01 +smooth + +8.536927769174184 +47.35035916912546 +428.63017228941595 +-138.009229666863 +71.56039078657882 +0 +120 +absolute + + + +0.01 +smooth + +8.536927159025872 +47.350359785102704 +428.62974625482667 +-138.1997167861247 +71.55419770275124 +0 +120 +absolute + + + +0.01 +smooth + +8.536926545591774 +47.35036039963688 +428.62933532572356 +-138.3897792264229 +71.54809649871052 +0 +120 +absolute + + + +0.01 +smooth + +8.536925928941935 +47.350361012709456 +428.6289403036639 +-138.5794152140724 +71.5420899931335 +0 +120 +absolute + + + +0.01 +smooth + +8.5369253091464 +47.35036162430201 +428.6285619902057 +-138.7686229753879 +71.53618100469697 +0 +120 +absolute + + + +0.01 +smooth + +8.536924686275217 +47.35036223439607 +428.6282011869064 +-138.95740073668415 +71.53037235207773 +0 +120 +absolute + + + +0.01 +smooth + +8.536924060398432 +47.35036284297316 +428.6278586953236 +-139.14574672427582 +71.52466685395262 +0 +120 +absolute + + + +0.01 +smooth + +8.53692343158609 +47.35036345001481 +428.62753531701486 +-139.33365916447767 +71.51906732899843 +0 +120 +absolute + + + +0.01 +smooth + +8.536922799908236 +47.35036405550257 +428.62723185353786 +-139.52113628360442 +71.51357659589198 +0 +120 +absolute + + + +0.01 +smooth + +8.536922165434916 +47.35036465941794 +428.6269491064502 +-139.70817630797075 +71.50819747331005 +0 +120 +absolute + + + +0.01 +smooth + +8.53692152823618 +47.35036526174248 +428.6266878773095 +-139.89477746389144 +71.50293277992947 +0 +120 +absolute + + + +0.01 +smooth + +8.53692088838207 +47.350365862457714 +428.62644896767335 +-140.08093797768117 +71.49778533442705 +0 +120 +absolute + + + +0.01 +smooth + +8.536920245942632 +47.350366461545164 +428.62623317909924 +-140.26665607565465 +71.49275795547959 +0 +120 +absolute + + + +0.01 +smooth + +8.536919600987915 +47.35036705898638 +428.62604131314504 +-140.45192998412665 +71.4878534617639 +0 +120 +absolute + + + +0.01 +smooth + +8.53691895358796 +47.35036765476288 +428.6258741713681 +-140.6367579294118 +71.48307467195679 +0 +120 +absolute + + + +0.01 +smooth + +8.536918303812817 +47.3503682488562 +428.62573255532607 +-140.82113813782493 +71.4784244047351 +0 +120 +absolute + + + +0.01 +smooth + +8.53691765173253 +47.35036884124786 +428.6256172665766 +-141.00506883568073 +71.47390547877558 +0 +120 +absolute + + + +0.01 +smooth + +8.536916997417148 +47.35036943191942 +428.6255291066774 +-141.1885482492939 +71.46952071275507 +0 +120 +absolute + + + +0.01 +smooth + +8.536916340936713 +47.35037002085238 +428.6254688771859 +-141.37157460497906 +71.46527292535038 +0 +120 +absolute + + + +0.01 +smooth + +8.536915682361274 +47.35037060802831 +428.62543737965984 +-141.5541461290511 +71.46116493523829 +0 +120 +absolute + + + +0.01 +smooth + +8.536915021537792 +47.350371193491384 +428.6254332035 +-141.7362678078578 +71.4571836912157 +0 +120 +absolute + + + +0.01 +smooth + +8.536914356760738 +47.350371777720405 +428.62543926686845 +-141.91799191063848 +71.45320695212992 +0 +120 +absolute + + + +0.01 +smooth + +8.536913687707187 +47.35037236080264 +428.6254517120465 +-142.0993292262324 +71.44921305230615 +0 +120 +absolute + + + +0.01 +smooth + +8.536913014435067 +47.35037294271809 +428.6254704146809 +-142.28027904010662 +71.44520761457778 +0 +120 +absolute + + + +0.01 +smooth + +8.536912337002288 +47.3503735234468 +428.6254952504183 +-142.46084063772813 +71.44119626177813 +0 +120 +absolute + + + +0.01 +smooth + +8.536911655466776 +47.35037410296876 +428.6255260949054 +-142.64101330456396 +71.43718461674058 +0 +120 +absolute + + + +0.01 +smooth + +8.536910969886438 +47.350374681263986 +428.62556282378904 +-142.82079632608102 +71.43317830229843 +0 +120 +absolute + + + +0.01 +smooth + +8.5369102803192 +47.35037525831249 +428.62560531271583 +-143.00018898774638 +71.42918294128499 +0 +120 +absolute + + + +0.01 +smooth + +8.536909586822983 +47.35037583409428 +428.62565343733274 +-143.1791905750271 +71.42520415653374 +0 +120 +absolute + + + +0.01 +smooth + +8.536908889455693 +47.35037640858937 +428.6257070732862 +-143.35780037339 +71.42124757087784 +0 +120 +absolute + + + +0.01 +smooth + +8.536908188275257 +47.35037698177776 +428.62576609622295 +-143.5360176683022 +71.41731880715076 +0 +120 +absolute + + + +0.01 +smooth + +8.536907483339592 +47.35037755363948 +428.6258303817899 +-143.71384174523072 +71.4134234881858 +0 +120 +absolute + + + +0.01 +smooth + +8.53690677470661 +47.350378124154524 +428.6258998056336 +-143.89127188964238 +71.40956723681626 +0 +120 +absolute + + + +0.01 +smooth + +8.536906062434236 +47.35037869330294 +428.625974243401 +-144.0683073870044 +71.40575567587555 +0 +120 +absolute + + + +0.01 +smooth + +8.536905346580383 +47.350379261064695 +428.62605357073875 +-144.2449475227837 +71.40199442819697 +0 +120 +absolute + + + +0.01 +smooth + +8.536904627202968 +47.35037982741983 +428.62613766329343 +-144.4211915824472 +71.39828911661388 +0 +120 +absolute + + + +0.01 +smooth + +8.536903904359916 +47.35038039234834 +428.62622639671196 +-144.597038851462 +71.39464536395961 +0 +120 +absolute + + + +0.01 +smooth + +8.536903178109139 +47.35038095583025 +428.626319646641 +-144.77248861529506 +71.39106879306752 +0 +120 +absolute + + + +0.01 +smooth + +8.536902448508553 +47.35038151784556 +428.62641728872705 +-144.94754015941328 +71.3875650267709 +0 +120 +absolute + + + +0.01 +smooth + +8.536901715616082 +47.3503820783743 +428.62651919861736 +-145.12219276928386 +71.38413968790316 +0 +120 +absolute + + + +0.01 +smooth + +8.536900979489637 +47.35038263739646 +428.6266252519581 +-145.29644573037362 +71.38079839929757 +0 +120 +absolute + + + +0.01 +smooth + +8.53690024018714 +47.350383194892046 +428.62673532439635 +-145.47029832814965 +71.37754678378752 +0 +120 +absolute + + + +0.01 +smooth + +8.536899497766509 +47.350383750841104 +428.62684929157865 +-145.6437498480789 +71.37439046420636 +0 +120 +absolute + + + +0.01 +smooth + +8.53689875228566 +47.35038430522361 +428.62696702915196 +-145.81679957562832 +71.37133506338738 +0 +120 +absolute + + + +0.01 +smooth + +8.536898003802511 +47.35038485801961 +428.62708841276265 +-145.98944679626507 +71.36838620416397 +0 +120 +absolute + + + +0.01 +smooth + +8.536897252374981 +47.35038540920908 +428.6272133180577 +-146.161690795456 +71.36554950936944 +0 +120 +absolute + + + +0.01 +smooth + +8.536896498060987 +47.35038595877206 +428.6273416206839 +-146.33353085866818 +71.36283060183716 +0 +120 +absolute + + + +0.01 +smooth + +8.536895740918446 +47.35038650668855 +428.62747319628784 +-146.50496627136857 +71.36023510440043 +0 +120 +absolute + + + +0.01 +smooth + +8.536894981005277 +47.35038705293856 +428.6276079205162 +-146.67599631902416 +71.35776863989263 +0 +120 +absolute + + + +0.01 +smooth + +8.536894218379398 +47.3503875975021 +428.6277456690159 +-146.84662028710198 +71.35543683114709 +0 +120 +absolute + + + +0.01 +smooth + +8.536893453098727 +47.350388140359186 +428.6278863174334 +-147.01683746106903 +71.35324530099713 +0 +120 +absolute + + + +0.01 +smooth + +8.53689268522118 +47.35038868148983 +428.62802974141573 +-147.1866471263923 +71.35119967227612 +0 +120 +absolute + + + +0.01 +smooth + +8.536891914804677 +47.35038922087405 +428.6281758166094 +-147.35604856853877 +71.34930556781737 +0 +120 +absolute + + + +0.01 +smooth + +8.536891141907134 +47.35038975849185 +428.62832441866124 +-147.5250410729754 +71.34756861045426 +0 +120 +absolute + + + +0.01 +smooth + +8.53689036658647 +47.35039029432323 +428.6284754232179 +-147.69362392516925 +71.3459944230201 +0 +120 +absolute + + + +0.01 +smooth + +8.5368895889006 +47.350390828348225 +428.62862870592613 +-147.86179641058735 +71.34458862834825 +0 +120 +absolute + + + +0.01 +smooth + +8.536888808907445 +47.35039136054684 +428.6287841424327 +-148.0295578146966 +71.34335684927203 +0 +120 +absolute + + + +0.01 +smooth + +8.536888026664922 +47.35039189089908 +428.62894160838437 +-148.19690742296405 +71.3423047086248 +0 +120 +absolute + + + +0.01 +smooth + +8.53688724223095 +47.350392419384946 +428.6291009794278 +-148.36384452085667 +71.34143782923988 +0 +120 +absolute + + + +0.01 +smooth + +8.536886455663446 +47.350392945984474 +428.6292621312097 +-148.53036839384148 +71.34076183395064 +0 +120 +absolute + + + +0.01 +smooth + +8.536885667020323 +47.350393470677666 +428.62942493937686 +-148.6964783273855 +71.34028234559041 +0 +120 +absolute + + + +0.01 +smooth + +8.536884875635838 +47.35039399372847 +428.62959823339474 +-148.8621902790976 +71.33993082825236 +0 +120 +absolute + + + +0.01 +smooth + +8.536884080377073 +47.350394515581115 +428.6297961994857 +-149.0275313634741 +71.3395881370512 +0 +120 +absolute + + + +0.01 +smooth + +8.536883281276747 +47.35039503622037 +428.63001829821474 +-149.1925021233012 +71.33925261549976 +0 +120 +absolute + + + +0.01 +smooth + +8.53688247838467 +47.35039555562418 +428.63026377635816 +-149.3571027093215 +71.338924345931 +0 +120 +absolute + + + +0.01 +smooth + +8.536881671750669 +47.3503960737706 +428.63053188069324 +-149.52133327227804 +71.33860341067796 +0 +120 +absolute + + + +0.01 +smooth + +8.536880861424558 +47.35039659063762 +428.63082185799675 +-149.68519396291356 +71.33828989207367 +0 +120 +absolute + + + +0.01 +smooth + +8.536880047456153 +47.35039710620322 +428.6311329550451 +-149.84868493197087 +71.33798387245103 +0 +120 +absolute + + + +0.01 +smooth + +8.536879229895282 +47.35039762044547 +428.6314644186157 +-150.01180633019297 +71.33768543414317 +0 +120 +absolute + + + +0.01 +smooth + +8.536878408791758 +47.350398133342296 +428.6318154954849 +-150.17455830832262 +71.33739465948297 +0 +120 +absolute + + + +0.01 +smooth + +8.536877584195395 +47.35039864487175 +428.63218543242954 +-150.33694101710265 +71.33711163080349 +0 +120 +absolute + + + +0.01 +smooth + +8.536876756156023 +47.35039915501186 +428.6325734762268 +-150.498954607276 +71.33683643043773 +0 +120 +absolute + + + +0.01 +smooth + +8.536875924723446 +47.35039966374055 +428.63297887365303 +-150.6605992295854 +71.33656914071864 +0 +120 +absolute + + + +0.01 +smooth + +8.536875089947495 +47.35040017103591 +428.63340087148555 +-150.82187503477383 +71.33630984397928 +0 +120 +absolute + + + +0.01 +smooth + +8.536874251877983 +47.35040067687591 +428.6338387165007 +-150.98278217358404 +71.33605862255261 +0 +120 +absolute + + + +0.01 +smooth + +8.53687341056473 +47.35040118123853 +428.6342916554754 +-151.1433207967589 +71.33581555877166 +0 +120 +absolute + + + +0.01 +smooth + +8.536872566057557 +47.350401684101826 +428.6347589351867 +-151.30349105504135 +71.3355807349694 +0 +120 +absolute + + + +0.01 +smooth + +8.536871718406278 +47.35040218544377 +428.6352398024112 +-151.46329309917414 +71.33535423347882 +0 +120 +absolute + + + +0.01 +smooth + +8.536870867660712 +47.35040268524237 +428.63573350392574 +-151.62272707990013 +71.33513613663295 +0 +120 +absolute + + + +0.01 +smooth + +8.536870013870686 +47.35040318347567 +428.63623928650725 +-151.78179314796222 +71.33492652676482 +0 +120 +absolute + + + +0.01 +smooth + +8.536869157086006 +47.3504036801216 +428.63675639693236 +-151.9404914541032 +71.33472548620733 +0 +120 +absolute + + + +0.01 +smooth + +8.536868297356499 +47.35040417515823 +428.637284081978 +-152.098822149066 +71.33453309729353 +0 +120 +absolute + + + +0.01 +smooth + +8.536867434731981 +47.350404668563534 +428.637821588421 +-152.25678538359338 +71.33434944235646 +0 +120 +absolute + + + +0.01 +smooth + +8.536866569262273 +47.35040516031554 +428.63836816303814 +-152.4143813084283 +71.33417460372905 +0 +120 +absolute + + + +0.01 +smooth + +8.53686570099719 +47.350405650392226 +428.6389230526061 +-152.57161007431347 +71.33400866374434 +0 +120 +absolute + + + +0.01 +smooth + +8.536864829986552 +47.35040613877163 +428.639485503902 +-152.72847183199187 +71.33385170473534 +0 +120 +absolute + + + +0.01 +smooth + +8.536863956280179 +47.35040662543172 +428.6400547637023 +-152.8849667322063 +71.333703809035 +0 +120 +absolute + + + +0.01 +smooth + +8.536863079927887 +47.35040711035053 +428.64063007878406 +-153.04109492569958 +71.33356505897636 +0 +120 +absolute + + + +0.01 +smooth + +8.536862200979499 +47.35040759350605 +428.6412106959241 +-153.19685656321462 +71.33343553689241 +0 +120 +absolute + + + +0.01 +smooth + +8.536861319484828 +47.3504080748763 +428.641795861899 +-153.35225179549423 +71.33331532511613 +0 +120 +absolute + + + +0.01 +smooth + +8.536860435493699 +47.35040855443927 +428.6423848234858 +-153.50728077328125 +71.33320450598055 +0 +120 +absolute + + + +0.01 +smooth + +8.536859549055924 +47.350409032172976 +428.64297682746127 +-153.66194364731857 +71.33310316181863 +0 +120 +absolute + + + +0.01 +smooth + +8.536858660221327 +47.35040950805541 +428.64357112060213 +-153.81624056834903 +71.33301137496342 +0 +120 +absolute + + + +0.01 +smooth + +8.536857769039724 +47.35040998206459 +428.6441669496852 +-153.97017168711548 +71.33292922774787 +0 +120 +absolute + + + +0.01 +smooth + +8.536856875560934 +47.350410454178515 +428.64476356148737 +-154.12373715436075 +71.332856802505 +0 +120 +absolute + + + +0.01 +smooth + +8.536855979834776 +47.35041092437521 +428.6453602027856 +-154.27693712082774 +71.3327941815678 +0 +120 +absolute + + + +0.01 +smooth + +8.53685508191107 +47.350411392632644 +428.64595612035623 +-154.42977173725924 +71.3327414472693 +0 +120 +absolute + + + +0.01 +smooth + +8.536854181839631 +47.35041185892885 +428.64655056097655 +-154.58224115439816 +71.33269868194246 +0 +120 +absolute + + + +0.01 +smooth + +8.53685327967028 +47.35041232324183 +428.64714277142315 +-154.73434552298733 +71.33266596792029 +0 +120 +absolute + + + +0.01 +smooth + +8.536852375452836 +47.35041278554957 +428.6477319984729 +-154.88608499376957 +71.3326433875358 +0 +120 +absolute + + + +0.01 +smooth + +8.536851469237117 +47.3504132458301 +428.64831748890265 +-155.03745971748776 +71.33263102312198 +0 +120 +absolute + + + +0.01 +smooth + +8.536850561000604 +47.350413704100575 +428.6488992758933 +-155.18847077404092 +71.33263631135571 +0 +120 +absolute + + + +0.01 +smooth + +8.536849649650163 +47.35041416095623 +428.6494891360725 +-155.33913314510107 +71.3327738584243 +0 +120 +absolute + + + +0.01 +smooth + +8.536848734836461 +47.35041461658582 +428.6500909959649 +-155.4894525973735 +71.33307885944231 +0 +120 +absolute + + + +0.01 +smooth + +8.536847816603519 +47.350415070964615 +428.65070453597343 +-155.6394298883774 +71.33354603100572 +0 +120 +absolute + + + +0.01 +smooth + +8.536846894995364 +47.350415524067955 +428.65132943650127 +-155.78906577563188 +71.33417008971047 +0 +120 +absolute + + + +0.01 +smooth + +8.536845970056032 +47.35041597587116 +428.651965377952 +-155.93836101665633 +71.33494575215265 +0 +120 +absolute + + + +0.01 +smooth + +8.536845041829537 +47.350416426349476 +428.65261204072806 +-156.08731636896982 +71.3358677349281 +0 +120 +absolute + + + +0.01 +smooth + +8.536844110359915 +47.35041687547824 +428.653269105233 +-156.23593259009164 +71.33693075463289 +0 +120 +absolute + + + +0.01 +smooth + +8.536843175691194 +47.35041732323275 +428.6539362518699 +-156.38421043754107 +71.338129527863 +0 +120 +absolute + + + +0.01 +smooth + +8.536842237867393 +47.35041776958829 +428.65461316104165 +-156.53215066883718 +71.33945877121437 +0 +120 +absolute + + + +0.01 +smooth + +8.536841296932545 +47.35041821452018 +428.6552995131515 +-156.67975404149934 +71.340913201283 +0 +120 +absolute + + + +0.01 +smooth + +8.536840352930678 +47.35041865800372 +428.6559949886025 +-156.82702131304666 +71.3424875346649 +0 +120 +absolute + + + +0.01 +smooth + +8.536839405905814 +47.3504191000142 +428.6566992677977 +-156.97395324099833 +71.34417648795598 +0 +120 +absolute + + + +0.01 +smooth + +8.536838455901984 +47.350419540526936 +428.65741203114055 +-157.12055058287373 +71.34597477775229 +0 +120 +absolute + + + +0.01 +smooth + +8.536837502963216 +47.35041997951723 +428.65813295903394 +-157.26681409619195 +71.34787712064978 +0 +120 +absolute + + + +0.01 +smooth + +8.536836547133532 +47.35042041696037 +428.6588617318809 +-157.41274453847223 +71.34987823324444 +0 +120 +absolute + + + +0.01 +smooth + +8.536835588456963 +47.35042085283166 +428.6595980300846 +-157.5583426672338 +71.35197283213225 +0 +120 +absolute + + + +0.01 +smooth + +8.536834626977534 +47.3504212871064 +428.6603415340482 +-157.7036092399959 +71.35415563390917 +0 +120 +absolute + + + +0.01 +smooth + +8.536833662739276 +47.35042171975993 +428.661091924175 +-157.84854501427776 +71.35642135517124 +0 +120 +absolute + + + +0.01 +smooth + +8.53683269578621 +47.350422150767486 +428.66184888086764 +-157.9931507475985 +71.35876471251437 +0 +120 +absolute + + + +0.01 +smooth + +8.536831726162365 +47.350422580104414 +428.66261208452966 +-158.13742719747742 +71.36118042253457 +0 +120 +absolute + + + +0.01 +smooth + +8.536830753911772 +47.350423007745995 +428.6633812155639 +-158.28137512143374 +71.36366320182782 +0 +120 +absolute + + + +0.01 +smooth + +8.536829779078454 +47.35042343366755 +428.66415595437365 +-158.42499527698664 +71.36620776699012 +0 +120 +absolute + + + +0.01 +smooth + +8.536828801706438 +47.350423857844376 +428.66493598136185 +-158.56828842165538 +71.36880883461743 +0 +120 +absolute + + + +0.01 +smooth + +8.536827821839752 +47.35042428025176 +428.6657209769318 +-158.71125531295917 +71.37146112130571 +0 +120 +absolute + + + +0.01 +smooth + +8.536826839522423 +47.350424700865005 +428.66651062148657 +-158.8538967084172 +71.374159343651 +0 +120 +absolute + + + +0.01 +smooth + +8.536825854798478 +47.35042511965943 +428.66730459542913 +-158.9962133655487 +71.37689821824922 +0 +120 +absolute + + + +0.01 +smooth + +8.536824867711946 +47.350425536610324 +428.6681025791628 +-159.13820604187288 +71.37967246169637 +0 +120 +absolute + + + +0.01 +smooth + +8.53682387830685 +47.350425951693005 +428.66890425309055 +-159.279875494909 +71.38247679058847 +0 +120 +absolute + + + +0.01 +smooth + +8.536822886627219 +47.350426364882736 +428.6697092976156 +-159.42122248217623 +71.38530592152146 +0 +120 +absolute + + + +0.01 +smooth + +8.53682189271708 +47.35042677615487 +428.6705173931409 +-159.56224776119382 +71.38815457109132 +0 +120 +absolute + + + +0.01 +smooth + +8.53682089662046 +47.35042718548467 +428.67132822006977 +-159.702952089481 +71.39101745589403 +0 +120 +absolute + + + +0.01 +smooth + +8.536819898381388 +47.35042759284744 +428.6721414588051 +-159.84333622455694 +71.39388929252561 +0 +120 +absolute + + + +0.01 +smooth + +8.536818898043887 +47.35042799821851 +428.6729567897502 +-159.98340092394085 +71.39676479758201 +0 +120 +absolute + + + +0.01 +smooth + +8.53681789565199 +47.35042840157315 +428.67377389330807 +-160.123146945152 +71.39963868765919 +0 +120 +absolute + + + +0.01 +smooth + +8.536816891249716 +47.35042880288667 +428.67459244988186 +-160.2625750457096 +71.40250567935317 +0 +120 +absolute + + + +0.01 +smooth + +8.536815884881097 +47.35042920213439 +428.6754121398746 +-160.4016859831329 +71.4053604892599 +0 +120 +absolute + + + +0.01 +smooth + +8.53681487659016 +47.350429599291594 +428.67623264368956 +-160.54048051494104 +71.40819783397541 +0 +120 +absolute + + + +0.01 +smooth + +8.53681386642093 +47.35042999433358 +428.67705364172974 +-160.6789593986533 +71.41101243009562 +0 +120 +absolute + + + +0.01 +smooth + +8.536812854417438 +47.35043038723566 +428.6778748143983 +-160.81712339178878 +71.41379899421653 +0 +120 +absolute + + + +0.01 +smooth + +8.536811840623704 +47.35043077797313 +428.6786958420983 +-160.9549732518669 +71.41655224293416 +0 +120 +absolute + + + +0.01 +smooth + +8.536810824714685 +47.350431166795836 +428.67951852005467 +-161.09251071193665 +71.41930146849778 +0 +120 +absolute + + + +0.01 +smooth + +8.536809805777528 +47.350431554387264 +428.6803480611907 +-161.2297392052223 +71.42213240955816 +0 +120 +absolute + + + +0.01 +smooth + +8.536808783803192 +47.35043194075531 +428.6811845478038 +-161.36665991863902 +71.42504747766934 +0 +120 +absolute + + + +0.01 +smooth + +8.536807758831388 +47.35043232587146 +428.68202778401127 +-161.50327391370908 +71.42804454985496 +0 +120 +absolute + + + +0.01 +smooth + +8.53680673090184 +47.35043270970727 +428.68287757393085 +-161.63958225195518 +71.43112150313867 +0 +120 +absolute + + + +0.01 +smooth + +8.53680570005425 +47.3504330922342 +428.68373372167974 +-161.77558599489947 +71.43427621454418 +0 +120 +absolute + + + +0.01 +smooth + +8.536804666328344 +47.350433473423806 +428.68459603137563 +-161.91128620406457 +71.43750656109512 +0 +120 +absolute + + + +0.01 +smooth + +8.536803629763826 +47.350433853247594 +428.68546430713633 +-162.0466839409729 +71.44081041981521 +0 +120 +absolute + + + +0.01 +smooth + +8.536802590400416 +47.35043423167704 +428.68633835307884 +-162.18178026714685 +71.44418566772804 +0 +120 +absolute + + + +0.01 +smooth + +8.53680154827782 +47.35043460868372 +428.6872179733208 +-162.31657624410877 +71.44763018185735 +0 +120 +absolute + + + +0.01 +smooth + +8.536800503435764 +47.350434984239115 +428.68810297198 +-162.45107293338128 +71.45114183922682 +0 +120 +absolute + + + +0.01 +smooth + +8.536799455913947 +47.35043535831472 +428.68899315317356 +-162.5852713964866 +71.45471851686005 +0 +120 +absolute + + + +0.01 +smooth + +8.536798405752096 +47.35043573088208 +428.68988832101934 +-162.7191726949474 +71.45835809178078 +0 +120 +absolute + + + +0.01 +smooth + +8.53679735298992 +47.35043610191272 +428.6907882796347 +-162.85277789028592 +71.46205844101266 +0 +120 +absolute + + + +0.01 +smooth + +8.536796297667129 +47.35043647137811 +428.6916928331371 +-162.98608804402465 +71.46581744157932 +0 +120 +absolute + + + +0.01 +smooth + +8.536795239823446 +47.35043683924981 +428.6926017856443 +-163.11910421768616 +71.4696329705045 +0 +120 +absolute + + + +0.01 +smooth + +8.536794179498576 +47.3504372054993 +428.69351494127346 +-163.25182747279266 +71.47350290481182 +0 +120 +absolute + + + +0.01 +smooth + +8.536793116732234 +47.35043757009809 +428.6944321041422 +-163.3842588708667 +71.47742512152497 +0 +120 +absolute + + + +0.01 +smooth + +8.536792051564143 +47.35043793301774 +428.6953530783683 +-163.51639947343077 +71.48139749766766 +0 +120 +absolute + + + +0.01 +smooth + +8.536790984034006 +47.350438294229704 +428.69627766806894 +-163.64825034200712 +71.48541791026345 +0 +120 +absolute + + + +0.01 +smooth + +8.53678991418154 +47.35043865370555 +428.6972056773618 +-163.77981253811834 +71.4894842363361 +0 +120 +absolute + + + +0.01 +smooth + +8.536788842046462 +47.350439011416746 +428.6981369103643 +-163.91108712328688 +71.49359435290927 +0 +120 +absolute + + + +0.01 +smooth + +8.536787767668484 +47.35043936733484 +428.69907117119413 +-164.04207515903502 +71.49774613700662 +0 +120 +absolute + + + +0.01 +smooth + +8.536786691087318 +47.35043972143133 +428.7000082639686 +-164.17277770688534 +71.5019374656518 +0 +120 +absolute + + + +0.01 +smooth + +8.536785612342682 +47.35044007367774 +428.70094799280525 +-164.30319582836023 +71.50616621586852 +0 +120 +absolute + + + +0.01 +smooth + +8.536784531474286 +47.35044042404558 +428.7018901618218 +-164.43333058498212 +71.51043026468042 +0 +120 +absolute + + + +0.01 +smooth + +8.536783448521845 +47.35044077250635 +428.7028345751354 +-164.5631830382734 +71.5147274891112 +0 +120 +absolute + + + +0.01 +smooth + +8.536782363525074 +47.350441119031586 +428.7037810368638 +-164.6927542497566 +71.5190557661845 +0 +120 +absolute + + + +0.01 +smooth + +8.536781276523687 +47.35044146359279 +428.7047293511246 +-164.82204528095406 +71.523412972924 +0 +120 +absolute + + + +0.01 +smooth + +8.536780187557394 +47.35044180616147 +428.70567932203517 +-164.95105719338824 +71.5277969863534 +0 +120 +absolute + + + +0.01 +smooth + +8.536779096665914 +47.350442146709156 +428.70663075371306 +-165.07979104858163 +71.53220568349631 +0 +120 +absolute + + + +0.01 +smooth + +8.536778003888958 +47.35044248520735 +428.7075834502757 +-165.2082479080566 +71.53663694137646 +0 +120 +absolute + + + +0.01 +smooth + +8.53677690926624 +47.350442821627574 +428.7085372158408 +-165.3364288333356 +71.54108863701748 +0 +120 +absolute + + + +0.01 +smooth + +8.536775812837476 +47.350443155941335 +428.7094918545257 +-165.464334885941 +71.54555864744307 +0 +120 +absolute + + + +0.01 +smooth + +8.536774714642378 +47.35044348812016 +428.7104471704479 +-165.5919671273954 +71.55004484967688 +0 +120 +absolute + + + +0.01 +smooth + +8.53677361472066 +47.350443818135545 +428.711402967725 +-165.7193266192211 +71.55454512074257 +0 +120 +absolute + + + +0.01 +smooth + +8.536772513112037 +47.350444145959 +428.7123590504745 +-165.84641442294057 +71.55905733766387 +0 +120 +absolute + + + +0.01 +smooth + +8.536771409856222 +47.35044447156207 +428.713315222814 +-165.97323160007622 +71.5635793774644 +0 +120 +absolute + + + +0.01 +smooth + +8.53677030499293 +47.35044479491624 +428.71427128886074 +-166.0997792121505 +71.56810911716781 +0 +120 +absolute + + + +0.01 +smooth + +8.53676919856187 +47.35044511599305 +428.7152270527325 +-166.22605832068587 +71.57264443379783 +0 +120 +absolute + + + +0.01 +smooth + +8.536768090586193 +47.35044543478109 +428.7161823838615 +-166.35206991429712 +71.5771839756398 +0 +120 +absolute + + + +0.01 +smooth + +8.53676698034268 +47.35044575203854 +428.7171401039563 +-166.47781169828144 +71.58176132038398 +0 +120 +absolute + + + +0.01 +smooth + +8.536765867453907 +47.35044606816007 +428.71810170109876 +-166.60328290182412 +71.58639449438898 +0 +120 +absolute + + + +0.01 +smooth + +8.536764751956296 +47.3504463831115 +428.7190670371869 +-166.72848457553806 +71.59108235605567 +0 +120 +absolute + + + +0.01 +smooth + +8.536763633886272 +47.35044669685869 +428.72003597411924 +-166.8534177700362 +71.59582376378499 +0 +120 +absolute + + + +0.01 +smooth + +8.536762513280264 +47.35044700936751 +428.7210083737938 +-166.97808353593157 +71.60061757597784 +0 +120 +absolute + + + +0.01 +smooth + +8.536761390174684 +47.35044732060374 +428.7219840981086 +-167.10248292383704 +71.60546265103504 +0 +120 +absolute + + + +0.01 +smooth + +8.536760264605965 +47.350447630533274 +428.72296300896187 +-167.22661698436556 +71.61035784735753 +0 +120 +absolute + + + +0.01 +smooth + +8.536759136610529 +47.350447939121935 +428.7239449682518 +-167.35048676813017 +71.6153020233462 +0 +120 +absolute + + + +0.01 +smooth + +8.5367580062248 +47.35044824633557 +428.7249298378768 +-167.4740933257438 +71.62029403740193 +0 +120 +absolute + + + +0.01 +smooth + +8.536756873485203 +47.35044855214002 +428.7259174797348 +-167.5974377078194 +71.62533274792564 +0 +120 +absolute + + + +0.01 +smooth + +8.536755738428155 +47.35044885650112 +428.7269077557239 +-167.72052096496984 +71.63041701331812 +0 +120 +absolute + + + +0.01 +smooth + +8.536754601090095 +47.35044915938473 +428.7279005277426 +-167.84334414780827 +71.63554569198041 +0 +120 +absolute + + + +0.01 +smooth + +8.53675346150743 +47.350449460756685 +428.7288956576887 +-167.96590830694745 +71.64071764231329 +0 +120 +absolute + + + +0.01 +smooth + +8.536752319716594 +47.35044976058281 +428.72989300746065 +-168.0882144930004 +71.64593172271765 +0 +120 +absolute + + + +0.01 +smooth + +8.536751175754013 +47.35045005882898 +428.73089243895674 +-168.21026375658025 +71.65118679159448 +0 +120 +absolute + + + +0.01 +smooth + +8.536750029656101 +47.350450355461014 +428.7318938140746 +-168.33205714829964 +71.65648170734455 +0 +120 +absolute + + + +0.01 +smooth + +8.536748881459289 +47.350450650444756 +428.73289699471286 +-168.4535957187717 +71.66181532836883 +0 +120 +absolute + + + +0.01 +smooth + +8.536747731200002 +47.35045094374607 +428.7339018427697 +-168.5748805186095 +71.6671865130682 +0 +120 +absolute + + + +0.01 +smooth + +8.53674657891466 +47.350451235330766 +428.734908220143 +-168.69591259842574 +71.6725941198435 +0 +120 +absolute + + + +0.01 +smooth + +8.536745424639689 +47.3504515251647 +428.73591598873116 +-168.81669300883354 +71.67803700709568 +0 +120 +absolute + + + +0.01 +smooth + +8.536744268411509 +47.35045181321371 +428.7369250104323 +-168.93722280044582 +71.68351403322558 +0 +120 +absolute + + + +0.01 +smooth + +8.536743110266551 +47.35045209944365 +428.7379351471445 +-169.05750302387557 +71.68902405663414 +0 +120 +absolute + + + +0.01 +smooth + +8.536741950241236 +47.35045238382037 +428.73894626076617 +-169.17753472973567 +71.69456593572221 +0 +120 +absolute + + + +0.01 +smooth + +8.536740788371985 +47.350452666309685 +428.7399582131953 +-169.29731896863916 +71.7001385288907 +0 +120 +absolute + + + +0.01 +smooth + +8.536739624695226 +47.35045294687747 +428.74097086633003 +-169.41685679119894 +71.70574069454048 +0 +120 +absolute + + + +0.01 +smooth + +8.536738459247381 +47.35045322548954 +428.74198408206877 +-169.53614924802798 +71.71137129107248 +0 +120 +absolute + + + +0.01 +smooth + +8.536737292064874 +47.35045350211174 +428.74299772230944 +-169.65519738973924 +71.71702917688755 +0 +120 +absolute + + + +0.01 +smooth + +8.536736123184129 +47.35045377670992 +428.7440116489503 +-169.7740022669457 +71.7227132103866 +0 +120 +absolute + + + +0.01 +smooth + +8.536734952641572 +47.35045404924993 +428.7450257238895 +-169.89256493026025 +71.72842224997052 +0 +120 +absolute + + + +0.01 +smooth + +8.536733780473623 +47.350454319697604 +428.7460398090253 +-170.0108864302959 +71.7341551540402 +0 +120 +absolute + + + +0.01 +smooth + +8.53673260671671 +47.35045458801878 +428.7470537662559 +-170.12896781766563 +71.73991078099651 +0 +120 +absolute + + + +0.01 +smooth + +8.536731431407254 +47.350454854179304 +428.7480674574793 +-170.24681014298233 +71.74568798924037 +0 +120 +absolute + + + +0.01 +smooth + +8.53673025458168 +47.35045511814503 +428.74908074459375 +-170.36441445685898 +71.75148563717266 +0 +120 +absolute + + + +0.01 +smooth + +8.536729076276412 +47.35045537988178 +428.75009348949754 +-170.48178180990854 +71.75730258319425 +0 +120 +absolute + + + +0.01 +smooth + +8.536727896527875 +47.35045563935542 +428.75110555408867 +-170.59891325274398 +71.76313768570607 +0 +120 +absolute + + + +0.01 +smooth + +8.536726715372492 +47.35045589653176 +428.75211680026547 +-170.71580983597823 +71.76898980310897 +0 +120 +absolute + + + +0.01 +smooth + +8.536725532846686 +47.35045615137668 +428.75312708992595 +-170.83247261022433 +71.77485779380386 +0 +120 +absolute + + + +0.01 +smooth + +8.536724348986885 +47.350456403856 +428.75413628496835 +-170.9489026260951 +71.78074051619164 +0 +120 +absolute + + + +0.01 +smooth + +8.536723163829507 +47.35045665393557 +428.755144247291 +-171.0651009342036 +71.7866368286732 +0 +120 +absolute + + + +0.01 +smooth + +8.53672197741098 +47.35045690158122 +428.7561508387919 +-171.18106858516273 +71.79254558964936 +0 +120 +absolute + + + +0.01 +smooth + +8.53672078957758 +47.35045714703892 +428.7571565168163 +-171.29680567578154 +71.79847107185222 +0 +120 +absolute + + + +0.01 +smooth + +8.536719599582934 +47.35045739142201 +428.75816360500204 +-171.41230920781916 +71.80443460304633 +0 +120 +absolute + + + +0.01 +smooth + +8.536718407376485 +47.35045763481158 +428.759172261351 +-171.52757951675173 +71.81043792808431 +0 +120 +absolute + + + +0.01 +smooth + +8.536717212992116 +47.35045787716393 +428.76018238008356 +-171.64261735398935 +71.81648039860227 +0 +120 +absolute + + + +0.01 +smooth + +8.536716016463707 +47.3504581184354 +428.76119385542023 +-171.75742347094214 +71.82256136623637 +0 +120 +absolute + + + +0.01 +smooth + +8.536714817825144 +47.35045835858229 +428.7622065815818 +-171.87199861902042 +71.82868018262276 +0 +120 +absolute + + + +0.01 +smooth + +8.536713617110307 +47.35045859756092 +428.76322045278863 +-171.98634354963428 +71.83483619939759 +0 +120 +absolute + + + +0.01 +smooth + +8.536712414353087 +47.35045883532764 +428.7642353632615 +-172.10045901419394 +71.84102876819702 +0 +120 +absolute + + + +0.01 +smooth + +8.536711209587356 +47.35045907183874 +428.76525120722073 +-172.21434576410957 +71.84725724065714 +0 +120 +absolute + + + +0.01 +smooth + +8.536710002847004 +47.350459307050556 +428.76626787888694 +-172.3280045507913 +71.85352096841416 +0 +120 +absolute + + + +0.01 +smooth + +8.536708794165916 +47.35045954091942 +428.767285272481 +-172.44143612564937 +71.8598193031042 +0 +120 +absolute + + + +0.01 +smooth + +8.536707583577966 +47.350459773401624 +428.76830328222275 +-172.55464124009387 +71.8661515963634 +0 +120 +absolute + + + +0.01 +smooth + +8.536706371117043 +47.35046000445351 +428.76932180233337 +-172.6676206455351 +71.8725171998279 +0 +120 +absolute + + + +0.01 +smooth + +8.53670515681703 +47.35046023403138 +428.7703407270332 +-172.7803750933831 +71.87891546513386 +0 +120 +absolute + + + +0.01 +smooth + +8.536703940711812 +47.350460462091576 +428.77135995054283 +-172.8929053350482 +71.88534574391743 +0 +120 +absolute + + + +0.01 +smooth + +8.536702722835267 +47.35046068859042 +428.77237936708303 +-173.00521212194047 +71.89180738781477 +0 +120 +absolute + + + +0.01 +smooth + +8.53670150322128 +47.3504609134842 +428.77339887087385 +-173.11729620547013 +71.89829974846194 +0 +120 +absolute + + + +0.01 +smooth + +8.536700281903737 +47.350461136729265 +428.77441835613627 +-173.22915833704732 +71.9048221774952 +0 +120 +absolute + + + +0.01 +smooth + +8.536699058916518 +47.35046135828195 +428.77543771709077 +-173.34079926808224 +71.91137402655065 +0 +120 +absolute + + + +0.01 +smooth + +8.536697834293507 +47.35046157809854 +428.77645684795783 +-173.45221974998515 +71.91795464726441 +0 +120 +absolute + + + +0.01 +smooth + +8.536696608068585 +47.35046179613537 +428.77747564295794 +-173.56342053416608 +71.92456339127264 +0 +120 +absolute + + + +0.01 +smooth + +8.536695380275637 +47.35046201234876 +428.7784939963119 +-173.67440237203527 +71.93119961021152 +0 +120 +absolute + + + +0.01 +smooth + +8.536694150948547 +47.35046222669504 +428.77951180224 +-173.78516601500294 +71.93786265571715 +0 +120 +absolute + + + +0.01 +smooth + +8.536692920121196 +47.350462439130524 +428.7805289549629 +-173.89571221447923 +71.9445518794257 +0 +120 +absolute + + + +0.01 +smooth + +8.536691687827467 +47.35046264961153 +428.7815453487012 +-174.0060417218743 +71.9512666329733 +0 +120 +absolute + + + +0.01 +smooth + +8.536690454101246 +47.350462858094374 +428.78256087767545 +-174.11615528859835 +71.95800626799613 +0 +120 +absolute + + + +0.01 +smooth + +8.536689218976413 +47.350463064535404 +428.78357543610616 +-174.22605366606157 +71.96477013613031 +0 +120 +absolute + + + +0.01 +smooth + +8.53668798248685 +47.350463268890906 +428.7845889182139 +-174.33573760567413 +71.97155758901197 +0 +120 +absolute + + + +0.01 +smooth + +8.536686744666444 +47.350463471117216 +428.7856012182193 +-174.4452078588462 +71.97836797827728 +0 +120 +absolute + + + +0.01 +smooth + +8.536685505549077 +47.350463671170644 +428.7866122303428 +-174.55446517698795 +71.98520065556238 +0 +120 +absolute + + + +0.01 +smooth + +8.536684265168628 +47.35046386900754 +428.787621848805 +-174.66351031150958 +71.99205497250341 +0 +120 +absolute + + + +0.01 +smooth + +8.536683023558986 +47.3504640645842 +428.7886299678265 +-174.77234401382123 +71.99893028073652 +0 +120 +absolute + + + +0.01 +smooth + +8.536681780754028 +47.35046425785695 +428.7896364816278 +-174.88096703533313 +72.00582593189786 +0 +120 +absolute + + + +0.01 +smooth + +8.53668053678764 +47.350464448782105 +428.7906412844295 +-174.98938012745543 +72.01274127762358 +0 +120 +absolute + + + +0.01 +smooth + +8.536679291693709 +47.350464637316 +428.79164427045214 +-175.09758404159828 +72.01967566954981 +0 +120 +absolute + + + +0.01 +smooth + +8.536678045506111 +47.35046482341495 +428.7926453339163 +-175.20557952917193 +72.0266284593127 +0 +120 +absolute + + + +0.01 +smooth + +8.536676798258734 +47.35046500703527 +428.79364436904245 +-175.31336734158648 +72.0335989985484 +0 +120 +absolute + + + +0.01 +smooth + +8.536675549985457 +47.350465188133285 +428.79464127005133 +-175.42094823025215 +72.04058663889307 +0 +120 +absolute + + + +0.01 +smooth + +8.536674300720168 +47.350465366665304 +428.7956359311633 +-175.5283229465791 +72.04759073198284 +0 +120 +absolute + + + +0.01 +smooth + +8.536673050496745 +47.35046554258768 +428.79662824659897 +-175.63549224197752 +72.05461062945385 +0 +120 +absolute + + + +0.01 +smooth + +8.536671799348545 +47.350465715857894 +428.7976181120478 +-175.7424568694505 +72.06164569223158 +0 +120 +absolute + + + +0.01 +smooth + +8.536670546802638 +47.35046588757115 +428.79860683242237 +-175.8492190129609 +72.06870422940634 +0 +120 +absolute + + + +0.01 +smooth + +8.536669292446636 +47.35046605866997 +428.79959555390695 +-175.9557803201639 +72.07579368143672 +0 +120 +absolute + + + +0.01 +smooth + +8.536668036312463 +47.35046622909095 +428.80058419042905 +-176.06214101727443 +72.08291372746906 +0 +120 +absolute + + + +0.01 +smooth + +8.53666677843204 +47.3504663987706 +428.80157265591606 +-176.16830133050715 +72.09006404664962 +0 +120 +absolute + + + +0.01 +smooth + +8.536665518837292 +47.35046656764552 +428.8025608642952 +-176.2742614860767 +72.09724431812474 +0 +120 +absolute + + + +0.01 +smooth + +8.536664257560144 +47.35046673565229 +428.803548729494 +-176.38002171019804 +72.10445422104075 +0 +120 +absolute + + + +0.01 +smooth + +8.536662994632515 +47.35046690272744 +428.80453616543974 +-176.4855822290857 +72.11169343454394 +0 +120 +absolute + + + +0.01 +smooth + +8.536661730086328 +47.350467068807546 +428.8055230860598 +-176.5909432689546 +72.11896163778063 +0 +120 +absolute + + + +0.01 +smooth + +8.53666046395351 +47.350467233829185 +428.8065094052819 +-176.69610505601935 +72.12625850989714 +0 +120 +absolute + + + +0.01 +smooth + +8.53665919626598 +47.35046739772891 +428.80749503703305 +-176.80106781649474 +72.13358373003976 +0 +120 +absolute + + + +0.01 +smooth + +8.536657927055659 +47.35046756044329 +428.8084798952406 +-176.9058317765955 +72.1409369773548 +0 +120 +absolute + + + +0.01 +smooth + +8.536656656354475 +47.35046772190889 +428.80946389383223 +-177.01039716253646 +72.14831793098861 +0 +120 +absolute + + + +0.01 +smooth + +8.536655384194345 +47.35046788206227 +428.81044694673517 +-177.1147642005322 +72.15572627008747 +0 +120 +absolute + + + +0.01 +smooth + +8.5366541106072 +47.350468040840035 +428.81142896787696 +-177.21893311679764 +72.16316167379776 +0 +120 +absolute + + + +0.01 +smooth + +8.536652835624956 +47.350468198178696 +428.8124098711847 +-177.32290413754743 +72.17062382126569 +0 +120 +absolute + + + +0.01 +smooth + +8.536651559279536 +47.35046835401484 +428.81338957058585 +-177.4266774889963 +72.17811239163763 +0 +120 +absolute + + + +0.01 +smooth + +8.536650281602869 +47.35046850828506 +428.81436798000817 +-177.5302533973591 +72.18562706405991 +0 +120 +absolute + + + +0.01 +smooth + +8.53664900262687 +47.35046866092588 +428.8153450133786 +-177.6336320888504 +72.19316751767877 +0 +120 +absolute + + + +0.01 +smooth + +8.536647722383465 +47.350468811873874 +428.81632058462463 +-177.73681378968507 +72.20073343164061 +0 +120 +absolute + + + +0.01 +smooth + +8.53664644090458 +47.35046896106562 +428.8172946076739 +-177.83979872607785 +72.20832448509171 +0 +120 +absolute + + + +0.01 +smooth + +8.536645158222132 +47.35046910843768 +428.81826699645336 +-177.9425871242434 +72.21594035717835 +0 +120 +absolute + + + +0.01 +smooth + +8.536643874368046 +47.35046925392662 +428.81923766489075 +-178.04517921039653 +72.2235807270469 +0 +120 +absolute + + + +0.01 +smooth + +8.53664258937425 +47.350469397469 +428.82020652691324 +-178.14757521075202 +72.23124527384363 +0 +120 +absolute + + + +0.01 +smooth + +8.536641303272658 +47.350469539001395 +428.8211734964485 +-178.24977535152453 +72.23893367671485 +0 +120 +absolute + + + +0.01 +smooth + +8.536640016095198 +47.35046967846036 +428.8221384874236 +-178.3517798589289 +72.24664561480688 +0 +120 +absolute + + + +0.01 +smooth + +8.536638727873793 +47.35046981578246 +428.82310141376615 +-178.45358895917974 +72.25438076726607 +0 +120 +absolute + + + +0.01 +smooth + +8.536637438640366 +47.35046995090428 +428.82406218940343 +-178.5552028784919 +72.26213881323872 +0 +120 +absolute + + + +0.01 +smooth + +8.536636148426837 +47.35047008376236 +428.82502072826287 +-178.6566218430801 +72.2699194318711 +0 +120 +absolute + + + +0.01 +smooth + +8.536634857265131 +47.350470214293274 +428.8259769442718 +-178.7578460791591 +72.27772230230956 +0 +120 +absolute + + + +0.01 +smooth + +8.53663356518717 +47.350470342433596 +428.8269307513576 +-178.8588758129436 +72.2855471037004 +0 +120 +absolute + + + +0.01 +smooth + +8.536632272224878 +47.350470468119894 +428.82788206344776 +-178.95971127064834 +72.29339351518993 +0 +120 +absolute + + + +0.01 +smooth + +8.536630978410177 +47.350470591288726 +428.8288307944696 +-179.06035267848813 +72.30126121592448 +0 +120 +absolute + + + +0.01 +smooth + +8.536629683774988 +47.35047071187664 +428.82977685835056 +-179.16080026267764 +72.30914988505035 +0 +120 +absolute + + + +0.01 +smooth + +8.53662838835124 +47.350470829820225 +428.8307201690179 +-179.2610542494317 +72.31705920171387 +0 +120 +absolute + + + +0.01 +smooth + +8.536627092170846 +47.350470945056045 +428.8316606403992 +-179.36111486496497 +72.32498884506131 +0 +120 +absolute + + + +0.01 +smooth + +8.536625795265739 +47.350471057520664 +428.83259818642165 +-179.4609823354922 +72.33293849423904 +0 +120 +absolute + + + +0.01 +smooth + +8.536624497667834 +47.35047116715064 +428.83353272101283 +-179.56065688722816 +72.34090782839333 +0 +120 +absolute + + + +0.01 +smooth + +8.536623199409057 +47.35047127388255 +428.83446415809993 +-179.66013874638764 +72.34889652667052 +0 +120 +absolute + + + +0.01 +smooth + +8.536621900521332 +47.350471377652944 +428.8353924116104 +-179.7594281391853 +72.3569042682169 +0 +120 +absolute + + + +0.01 +smooth + +8.53662060103658 +47.350471478398404 +428.8363173954718 +-179.85852529183592 +72.36493073217879 +0 +120 +absolute + + + +0.01 +smooth + +8.536619300891502 +47.35047157646669 +428.8372392809064 +-179.9574323060727 +72.37297651758512 +0 +120 +absolute + + + +0.01 +smooth + +8.53661799946259 +47.35047167459658 +428.8381597558416 +-180.0561620681885 +72.38104771400705 +0 +120 +absolute + + + +0.01 +smooth + +8.536616696655988 +47.35047177319314 +428.8390790820614 +-180.15471661930502 +72.38914542495552 +0 +120 +absolute + + + +0.01 +smooth + +8.536615392502148 +47.350471872120934 +428.8399971858776 +-180.25309551929757 +72.39726956355435 +0 +120 +absolute + + + +0.01 +smooth + +8.536614087031507 +47.35047197124448 +428.84091399360227 +-180.35129832804148 +72.4054200429274 +0 +120 +absolute + + + +0.01 +smooth + +8.536612780274515 +47.350472070428346 +428.8418294315471 +-180.44932460541213 +72.41359677619849 +0 +120 +absolute + + + +0.01 +smooth + +8.536611472261624 +47.35047216953708 +428.8427434260246 +-180.547173911285 +72.42179967649156 +0 +120 +absolute + + + +0.01 +smooth + +8.536610163023266 +47.350472268435205 +428.8436559033458 +-180.64484580553525 +72.43002865693036 +0 +120 +absolute + + + +0.01 +smooth + +8.536608852589906 +47.35047236698734 +428.8445667898236 +-180.74233984803848 +72.43828363063884 +0 +120 +absolute + + + +0.01 +smooth + +8.536607540991975 +47.35047246505795 +428.84547601176934 +-180.83965559867002 +72.44656451074077 +0 +120 +absolute + + + +0.01 +smooth + +8.536606228259926 +47.350472562511634 +428.8463834954952 +-180.93679261730512 +72.45487121036001 +0 +120 +absolute + + + +0.01 +smooth + +8.536604914424204 +47.35047265921295 +428.8472891673133 +-181.03375046381936 +72.46320364262047 +0 +120 +absolute + + + +0.01 +smooth + +8.536603599515253 +47.35047275502641 +428.84819295353503 +-181.13052869808783 +72.47156172064594 +0 +120 +absolute + + + +0.01 +smooth + +8.536602283563525 +47.3504728498166 +428.8490947804731 +-181.22712687998623 +72.47994535756033 +0 +120 +absolute + + + +0.01 +smooth + +8.536600966599464 +47.350472943448054 +428.8499945744389 +-181.32354456938975 +72.48835446648742 +0 +120 +absolute + + + +0.01 +smooth + +8.536599648653514 +47.35047303578531 +428.85089226174455 +-181.41978132617376 +72.49678896055113 +0 +120 +absolute + + + +0.01 +smooth + +8.536598329756124 +47.350473126692975 +428.8517877687023 +-181.5158367102138 +72.50524875287529 +0 +120 +absolute + + + +0.01 +smooth + +8.536597009937738 +47.35047321603551 +428.8526810216235 +-181.611710281385 +72.51373375658375 +0 +120 +absolute + + + +0.01 +smooth + +8.536595689228802 +47.350473303677525 +428.8535719468206 +-181.70740159956293 +72.52224388480035 +0 +120 +absolute + + + +0.01 +smooth + +8.536594367659767 +47.350473389483575 +428.8544604706054 +-181.8029102246229 +72.53077905064896 +0 +120 +absolute + + + +0.01 +smooth + +8.536593045261073 +47.35047347331817 +428.85534651928964 +-181.89823571644027 +72.53933916725339 +0 +120 +absolute + + + +0.01 +smooth + +8.53659172206317 +47.35047355504588 +428.8562300191856 +-181.99337763489044 +72.54792414773755 +0 +120 +absolute + + + +0.01 +smooth + +8.536590398096504 +47.35047363453127 +428.85711089660504 +-182.0883355398488 +72.55653390522525 +0 +120 +absolute + + + +0.01 +smooth + +8.53658907339152 +47.35047371163888 +428.85798907786 +-182.18310899119066 +72.56516835284037 +0 +120 +absolute + + + +0.01 +smooth + +8.536587747978665 +47.35047378623324 +428.85886448926254 +-182.27769754879148 +72.57382740370674 +0 +120 +absolute + + + +0.01 +smooth + +8.536586421888385 +47.35047385817892 +428.85973705712433 +-182.3721007725266 +72.58251097094822 +0 +120 +absolute + + + +0.01 +smooth + +8.536585095151128 +47.350473927340474 +428.8606067077576 +-182.4663182222714 +72.59121896768868 +0 +120 +absolute + + + +0.01 +smooth + +8.536583767797339 +47.350473993582455 +428.8614733674741 +-182.5603494579013 +72.59995130705195 +0 +120 +absolute + + + +0.01 +smooth + +8.536582439857462 +47.350474056769386 +428.8623369625859 +-182.6541940392916 +72.6087079021619 +0 +120 +absolute + + + +0.01 +smooth + +8.536581111361947 +47.35047411676584 +428.86319741940486 +-182.7478515263177 +72.61748866614235 +0 +120 +absolute + + + +0.01 +smooth + +8.536579782341239 +47.35047417343637 +428.8640546642431 +-182.84132147885504 +72.62629351211719 +0 +120 +absolute + + + +0.01 +smooth + +8.536578452825784 +47.3504742266455 +428.86490862341236 +-182.9346034567789 +72.63512235321022 +0 +120 +absolute + + + +0.01 +smooth + +8.53657712284603 +47.35047427625781 +428.8657592232248 +-183.0276970199647 +72.64397510254535 +0 +120 +absolute + + + +0.01 +smooth + +8.53657579243242 +47.35047432213784 +428.86660638999217 +-183.12060172828785 +72.65285167324642 +0 +120 +absolute + + + +0.01 +smooth + +8.536574461615402 +47.350474364150124 +428.8674500500266 +-183.2133171416237 +72.66175197843725 +0 +120 +absolute + + + +0.01 +smooth + +8.536573130425424 +47.35047440215925 +428.86829012963995 +-183.3058428198476 +72.67067593124172 +0 +120 +absolute + + + +0.01 +smooth + +8.536571798892927 +47.35047443602972 +428.8691265551442 +-183.39817832283498 +72.67962344478366 +0 +120 +absolute + + + +0.01 +smooth + +8.536570467048364 +47.350474465626114 +428.86995925285134 +-183.49032321046118 +72.68859443218695 +0 +120 +absolute + + + +0.01 +smooth + +8.536569134922177 +47.350474490812985 +428.8707881490732 +-183.5822770426016 +72.69758880657541 +0 +120 +absolute + + + +0.01 +smooth + +8.536567802544813 +47.35047451145486 +428.87161317012186 +-183.67403937913153 +72.70660648107292 +0 +120 +absolute + + + +0.01 +smooth + +8.53656646994672 +47.350474527416324 +428.87243424230917 +-183.76560977992654 +72.71564736880335 +0 +120 +absolute + + + +0.01 +smooth + +8.536565136825969 +47.3504745404411 +428.87325221937584 +-183.85700224390806 +72.72471272914096 +0 +120 +absolute + + + +0.01 +smooth + +8.536563802728182 +47.35047455321006 +428.8740683832208 +-183.94823693313333 +72.73380452706516 +0 +120 +absolute + + + +0.01 +smooth + +8.536562467678655 +47.35047456574157 +428.87488267910385 +-184.03931286813477 +72.74292284273574 +0 +120 +absolute + + + +0.01 +smooth + +8.53656113170678 +47.35047457803097 +428.8756950408467 +-184.13022888998717 +72.75206773994312 +0 +120 +absolute + + + +0.01 +smooth + +8.536559794841963 +47.35047459007362 +428.8765054022717 +-184.22098383976513 +72.76123928247786 +0 +120 +absolute + + + +0.01 +smooth + +8.536558457113605 +47.350474601864896 +428.877313697201 +-184.31157655854363 +72.77043753413045 +0 +120 +absolute + + + +0.01 +smooth + +8.5365571185511 +47.35047461340012 +428.87811985945643 +-184.40200588739714 +72.77966255869136 +0 +120 +absolute + + + +0.01 +smooth + +8.536555779183844 +47.35047462467468 +428.8789238228604 +-184.49227066740045 +72.78891441995107 +0 +120 +absolute + + + +0.01 +smooth + +8.536554439041243 +47.35047463568395 +428.87972552123483 +-184.58236973962843 +72.79819318170014 +0 +120 +absolute + + + +0.01 +smooth + +8.53655309815269 +47.35047464642325 +428.8805248884019 +-184.67230194515565 +72.80749890772903 +0 +120 +absolute + + + +0.01 +smooth + +8.536551756547585 +47.350474656887975 +428.8813218581838 +-184.76206612505692 +72.81683166182823 +0 +120 +absolute + + + +0.01 +smooth + +8.536550414255329 +47.35047466707346 +428.8821163644026 +-184.85166112040687 +72.82619150778824 +0 +120 +absolute + + + +0.01 +smooth + +8.536549071305314 +47.350474676975075 +428.8829083408802 +-184.94108577228025 +72.83557850939955 +0 +120 +absolute + + + +0.01 +smooth + +8.536547727726948 +47.35047468658818 +428.8836977214389 +-185.0303389217519 +72.84499273045267 +0 +120 +absolute + + + +0.01 +smooth + +8.536546383549622 +47.35047469590813 +428.8844844399009 +-185.11941940989644 +72.8544342347381 +0 +120 +absolute + + + +0.01 +smooth + +8.53654503880274 +47.35047470493029 +428.88526843008816 +-185.20832607778863 +72.86390308604632 +0 +120 +absolute + + + +0.01 +smooth + +8.536543693515696 +47.350474713650016 +428.8860496258229 +-185.29705776650314 +72.87339934816784 +0 +120 +absolute + + + +0.01 +smooth + +8.536542347717896 +47.350474722062685 +428.88682796092723 +-185.38561331711483 +72.88292308489316 +0 +120 +absolute + + + +0.01 +smooth + +8.536541001438732 +47.350474730163626 +428.88760336922314 +-185.4739915706983 +72.89247436001277 +0 +120 +absolute + + + +0.01 +smooth + +8.536539654707605 +47.35047473794822 +428.8883757845329 +-185.56219136832834 +72.90205323731718 +0 +120 +absolute + + + +0.01 +smooth + +8.53653830755391 +47.350474745411816 +428.88914514067835 +-185.6502115510796 +72.91165978059684 +0 +120 +absolute + + + +0.01 +smooth + +8.53653696000705 +47.350474752549765 +428.88991137148196 +-185.7380509600269 +72.92129405364228 +0 +120 +absolute + + + +0.01 +smooth + +8.536535612096422 +47.35047475935745 +428.8906744107656 +-185.82570843624487 +72.930956120244 +0 +120 +absolute + + + +0.01 +smooth + +8.536534263851427 +47.35047476583023 +428.8914341923515 +-185.91318282080834 +72.94064604419249 +0 +120 +absolute + + + +0.01 +smooth + +8.53653291530146 +47.35047477196344 +428.8921906500617 +-186.00047295479197 +72.95036388927826 +0 +120 +absolute + + + +0.01 +smooth + +8.536531566475924 +47.35047477775246 +428.89294371771837 +-186.0875776792705 +72.96010971929178 +0 +120 +absolute + + + +0.01 +smooth + +8.536530217404213 +47.350474783192645 +428.8936933291436 +-186.17449583531865 +72.96988359802356 +0 +120 +absolute + + + +0.01 +smooth + +8.53652886811573 +47.35047478827936 +428.8944394181595 +-186.26122626401116 +72.97968558926411 +0 +120 +absolute + + + +0.01 +smooth + +8.536527518639868 +47.35047479300794 +428.89518191858815 +-186.34776780642275 +72.9895157568039 +0 +120 +absolute + + + +0.01 +smooth + +8.536526169006033 +47.350474797373764 +428.8959207642516 +-186.4341193036281 +72.99937416443343 +0 +120 +absolute + + + +0.01 +smooth + +8.536524819243619 +47.3504748013722 +428.8966558889723 +-186.52027959670207 +73.00926087594323 +0 +120 +absolute + + + +0.01 +smooth + +8.536523469382026 +47.35047480499859 +428.89738722657194 +-186.60624752671922 +73.01917595512376 +0 +120 +absolute + + + +0.01 +smooth + +8.536522119450652 +47.35047480824831 +428.89811471087285 +-186.69202193475437 +73.02911946576553 +0 +120 +absolute + + + +0.01 +smooth + +8.536520769478894 +47.3504748111167 +428.8988382756971 +-186.77760166188222 +73.03909147165903 +0 +120 +absolute + + + +0.01 +smooth + +8.536519419496155 +47.350474813599135 +428.89955785486677 +-186.86298554917752 +73.04909203659477 +0 +120 +absolute + + + +0.01 +smooth + +8.53651806953183 +47.350474815690966 +428.90027338220403 +-186.94817243771496 +73.05912122436322 +0 +120 +absolute + + + +0.01 +smooth + +8.536516719615317 +47.350474817387564 +428.90098479153096 +-187.0331611685693 +73.06917909875492 +0 +120 +absolute + + + +0.01 +smooth + +8.536515369776021 +47.350474818684276 +428.9016920166697 +-187.1179505828152 +73.07926572356033 +0 +120 +absolute + + + +0.01 +smooth + +8.536514020043334 +47.35047481957646 +428.9023949914423 +-187.2025395215275 +73.08938116256994 +0 +120 +absolute + + + +0.01 +smooth + +8.536512670446657 +47.35047482005948 +428.903093649671 +-187.28692682578082 +73.09952547957428 +0 +120 +absolute + + + +0.01 +smooth + +8.536511320971645 +47.350474819900796 +428.9037880554481 +-187.37111446380717 +73.10969879353652 +0 +120 +absolute + + + +0.01 +smooth + +8.53650997107879 +47.35047481617362 +428.9044798372049 +-187.45514172335945 +73.11990190386499 +0 +120 +absolute + + + +0.01 +smooth + +8.536508620621884 +47.35047480808932 +428.9051694532706 +-187.5390193092497 +73.13013515245646 +0 +120 +absolute + + + +0.01 +smooth + +8.536507269629656 +47.350474795781075 +428.9058568411674 +-187.62274536606998 +73.14039866511025 +0 +120 +absolute + + + +0.01 +smooth + +8.536505918130837 +47.350474779382125 +428.9065419384176 +-187.7063180384122 +73.1506925676257 +0 +120 +absolute + + + +0.01 +smooth + +8.53650456615415 +47.35047475902566 +428.9072246825431 +-187.7897354708683 +73.16101698580205 +0 +120 +absolute + + + +0.01 +smooth + +8.53650321372832 +47.35047473484491 +428.907905011066 +-187.87299580803023 +73.1713720454387 +0 +120 +absolute + + + +0.01 +smooth + +8.53650186088208 +47.350474706973074 +428.9085828615088 +-187.95609719449 +73.18175787233486 +0 +120 +absolute + + + +0.01 +smooth + +8.536500507644153 +47.35047467554339 +428.90925817139345 +-188.03903777483958 +73.19217459228989 +0 +120 +absolute + + + +0.01 +smooth + +8.536499154043273 +47.35047464068908 +428.90993087824233 +-188.12181569367098 +73.20262233110313 +0 +120 +absolute + + + +0.01 +smooth + +8.536497800108158 +47.35047460254331 +428.9106009195773 +-188.20442909557596 +73.21310121457383 +0 +120 +absolute + + + +0.01 +smooth + +8.536496445867542 +47.350474561239324 +428.9112682329207 +-188.28687612514668 +73.2236113685013 +0 +120 +absolute + + + +0.01 +smooth + +8.536495091350151 +47.350474516910346 +428.91193275579457 +-188.36915492697497 +73.23415291868486 +0 +120 +absolute + + + +0.01 +smooth + +8.536493736584712 +47.35047446968957 +428.9125944257214 +-188.4512636456529 +73.24472599092384 +0 +120 +absolute + + + +0.01 +smooth + +8.536492381599954 +47.35047441971023 +428.91325318022314 +-188.5332004257724 +73.25533071101754 +0 +120 +absolute + + + +0.01 +smooth + +8.536491026424601 +47.35047436710552 +428.91390895682196 +-188.61496341192543 +73.26596720476525 +0 +120 +absolute + + + +0.01 +smooth + +8.536489671087384 +47.350474312008686 +428.91456169304007 +-188.69655074870397 +73.27663559796629 +0 +120 +absolute + + + +0.01 +smooth + +8.536488315617028 +47.3504742545529 +428.9152113263995 +-188.7779605806999 +73.28733601641993 +0 +120 +absolute + + + +0.01 +smooth + +8.536486960042259 +47.35047419487138 +428.91585779442255 +-188.8591910525052 +73.29806858592552 +0 +120 +absolute + + + +0.01 +smooth + +8.536485604391808 +47.350474133097386 +428.9165010346313 +-188.9402403087119 +73.30883343228237 +0 +120 +absolute + + + +0.01 +smooth + +8.536484248694402 +47.35047406936408 +428.91714098454815 +-189.02110649391196 +73.31963068128978 +0 +120 +absolute + + + +0.01 +smooth + +8.536482892978764 +47.35047400380472 +428.91777758169496 +-189.10178775269728 +73.33046045874704 +0 +120 +absolute + + + +0.01 +smooth + +8.536481537273628 +47.35047393655249 +428.9184107635942 +-189.18228222965988 +73.34132289045347 +0 +120 +absolute + + + +0.01 +smooth + +8.536480181607718 +47.350473867740604 +428.9190404677678 +-189.26258806939163 +73.35221810220838 +0 +120 +absolute + + + +0.01 +smooth + +8.53647882600976 +47.3504737975023 +428.919666631738 +-189.34270341648465 +73.36314621981109 +0 +120 +absolute + + + +0.01 +smooth + +8.536477470508483 +47.35047372597078 +428.92028919302703 +-189.42262641553074 +73.37410736906088 +0 +120 +absolute + + + +0.01 +smooth + +8.536476115132619 +47.350473653279245 +428.92090808915697 +-189.502355211122 +73.38510167575706 +0 +120 +absolute + + + +0.01 +smooth + +8.536474759910885 +47.350473579560926 +428.92152325765005 +-189.58188794785025 +73.39612926569896 +0 +120 +absolute + + + +0.01 +smooth + +8.536473404872016 +47.35047350494902 +428.92213463602843 +-189.66122277030752 +73.40719026468588 +0 +120 +absolute + + + +0.01 +smooth + +8.536472050044738 +47.350473429576766 +428.92274216181426 +-189.74035782308584 +73.41828479851712 +0 +120 +absolute + + + +0.01 +smooth + +8.536470695457778 +47.350473353577364 +428.92334577252973 +-189.81929125077707 +73.429412992992 +0 +120 +absolute + + + +0.01 +smooth + +8.536469341139863 +47.35047327708402 +428.923945405697 +-189.8980211979732 +73.4405749739098 +0 +120 +absolute + + + +0.01 +smooth + +8.536467987119721 +47.35047320022997 +428.92454099883827 +-189.97654580926624 +73.45177086706985 +0 +120 +absolute + + + +0.01 +smooth + +8.53646663342608 +47.350473123148404 +428.92513248947563 +-190.0548632292481 +73.46300079827145 +0 +120 +absolute + + + +0.01 +smooth + +8.536465280087665 +47.350473045972564 +428.9257198151313 +-190.13297160251074 +73.47426489331394 +0 +120 +absolute + + + +0.01 +smooth + +8.536463927133205 +47.35047296883563 +428.92630291332745 +-190.2108690736461 +73.48556327799658 +0 +120 +absolute + + + +0.01 +smooth + +8.536462574591429 +47.350472891870844 +428.92688172158626 +-190.2885537872463 +73.49689607811868 +0 +120 +absolute + + + +0.01 +smooth + +8.536461222491061 +47.35047281521142 +428.9274561774299 +-190.36602388790305 +73.50826341947959 +0 +120 +absolute + + + +0.01 +smooth + +8.536459870860833 +47.35047273899054 +428.9280262183805 +-190.44327752020854 +73.51966542787859 +0 +120 +absolute + + + +0.01 +smooth + +8.536458519729464 +47.350472663341456 +428.9285917819603 +-190.52031282875456 +73.53110222911499 +0 +120 +absolute + + + +0.01 +smooth + +8.536457169125693 +47.35047258839736 +428.92915280569133 +-190.59712795813317 +73.54257394898808 +0 +120 +absolute + + + +0.01 +smooth + +8.536455818851117 +47.350472513217746 +428.9297099624349 +-190.6737437232549 +73.5540811304523 +0 +120 +absolute + + + +0.01 +smooth + +8.53645446840961 +47.35047243541966 +428.93026488835045 +-190.7502103124138 +73.56562484853364 +0 +120 +absolute + + + +0.01 +smooth + +8.536453117808485 +47.350472354968595 +428.9308175890556 +-190.82652735068237 +73.57720524022214 +0 +120 +absolute + + + +0.01 +smooth + +8.536451767076095 +47.35047227192891 +428.9313680020545 +-190.90269235756355 +73.58882240361643 +0 +120 +absolute + + + +0.01 +smooth + +8.536450416240791 +47.35047218636496 +428.93191606485203 +-190.97870285256047 +73.60047643681513 +0 +120 +absolute + + + +0.01 +smooth + +8.536449065330922 +47.350472098341044 +428.93246171495235 +-191.05455635517606 +73.61216743791684 +0 +120 +absolute + + + +0.01 +smooth + +8.536447714374834 +47.35047200792154 +428.93300488986 +-191.13025038491327 +73.62389550502017 +0 +120 +absolute + + + +0.01 +smooth + +8.536446363400882 +47.35047191517078 +428.9335455270798 +-191.20578246127528 +73.63566073622377 +0 +120 +absolute + + + +0.01 +smooth + +8.536445012437412 +47.3504718201531 +428.9340835641156 +-191.28115010376504 +73.64746322962621 +0 +120 +absolute + + + +0.01 +smooth + +8.536443661512775 +47.35047172293284 +428.9346189384722 +-191.3563508318855 +73.65930308332615 +0 +120 +absolute + + + +0.01 +smooth + +8.536442310655325 +47.350471623574336 +428.9351515876542 +-191.43138216513978 +73.67118039542218 +0 +120 +absolute + + + +0.01 +smooth + +8.536440959893403 +47.350471522141945 +428.935681449166 +-191.5062416230309 +73.68309526401293 +0 +120 +absolute + + + +0.01 +smooth + +8.536439609255368 +47.35047141870002 +428.93620846051215 +-191.5809267250619 +73.69504778719701 +0 +120 +absolute + + + +0.01 +smooth + +8.53643825876957 +47.35047131331288 +428.93673255919686 +-191.65543499073573 +73.70703806307306 +0 +120 +absolute + + + +0.01 +smooth + +8.536436908464351 +47.350471206044865 +428.9372536827248 +-191.7297639395555 +73.71906618973966 +0 +120 +absolute + + + +0.01 +smooth + +8.536435558368069 +47.350471096960334 +428.93777176860056 +-191.80391109102416 +73.73113226529546 +0 +120 +absolute + + + +0.01 +smooth + +8.536434208509066 +47.3504709861236 +428.93828675432843 +-191.87787396464475 +73.74323638783905 +0 +120 +absolute + + + +0.01 +smooth + +8.536432858915695 +47.35047087359903 +428.9387985774128 +-191.9516500799203 +73.75537865546903 +0 +120 +absolute + + + +0.01 +smooth + +8.53643150961631 +47.35047075945095 +428.9393071753584 +-192.02523695635384 +73.76755916628406 +0 +120 +absolute + + + +0.01 +smooth + +8.53643016063926 +47.35047064374373 +428.93981248566956 +-192.0986321134484 +73.77977801838274 +0 +120 +absolute + + + +0.01 +smooth + +8.53642881201289 +47.35047052654167 +428.9403144458508 +-192.17183307070695 +73.79203530986368 +0 +120 +absolute + + + +0.01 +smooth + +8.536427463765552 +47.35047040790916 +428.9408129934066 +-192.2448373476326 +73.8043311388255 +0 +120 +absolute + + + +0.01 +smooth + +8.536426115925597 +47.35047028791048 +428.9413080658415 +-192.31764246372836 +73.81666560336683 +0 +120 +absolute + + + +0.01 +smooth + +8.536424768521377 +47.35047016661002 +428.94179960065986 +-192.39024593849715 +73.82903880158626 +0 +120 +absolute + + + +0.01 +smooth + +8.536423421581238 +47.35047004407211 +428.9422875353663 +-192.46264529144207 +73.84145083158245 +0 +120 +absolute + + + +0.01 +smooth + +8.536422075133531 +47.35046992036109 +428.94277180746514 +-192.5348380420662 +73.85390179145396 +0 +120 +absolute + + + +0.01 +smooth + +8.536420729206608 +47.3504697955413 +428.9432523544609 +-192.60682170987252 +73.86639177929945 +0 +120 +absolute + + + +0.01 +smooth + +8.536419383828816 +47.350469669677075 +428.9437291138581 +-192.67859381436398 +73.87892089321753 +0 +120 +absolute + + + +0.01 +smooth + +8.536418039028508 +47.35046954283277 +428.9442020231613 +-192.75015187504368 +73.89148923130679 +0 +120 +absolute + + + +0.01 +smooth + +8.53641669483403 +47.350469415072716 +428.9446710198748 +-192.82149341141468 +73.90409689166587 +0 +120 +absolute + + + +0.01 +smooth + +8.536415351273735 +47.35046928646126 +428.9451360415033 +-192.8926159429799 +73.91674397239338 +0 +120 +absolute + + + +0.01 +smooth + +8.536414008375974 +47.35046915706274 +428.945597025551 +-192.96351698924235 +73.92943057158794 +0 +120 +absolute + + + +0.01 +smooth + +8.536412666169092 +47.350469026941504 +428.9460539095227 +-193.03419406970522 +73.94215678734817 +0 +120 +absolute + + + +0.01 +smooth + +8.536411324681442 +47.350468896161885 +428.9465066309225 +-193.10464470387137 +73.95492271777266 +0 +120 +absolute + + + +0.01 +smooth + +8.536409983941375 +47.35046876478823 +428.94695512725525 +-193.1748664112439 +73.96772846096007 +0 +120 +absolute + + + +0.01 +smooth + +8.53640864397724 +47.350468632884876 +428.94739933602517 +-193.24485671132584 +73.98057411500899 +0 +120 +absolute + + + +0.01 +smooth + +8.536407304817386 +47.350468500516165 +428.9478391947369 +-193.31461312362018 +73.99345977801804 +0 +120 +absolute + + + +0.01 +smooth + +8.536405966490163 +47.350468367746444 +428.94827464089474 +-193.3841331676299 +74.00638554808583 +0 +120 +absolute + + + +0.01 +smooth + +8.536404629023924 +47.350468234640054 +428.9487056120033 +-193.45341436285813 +74.01935152331099 +0 +120 +absolute + + + +0.01 +smooth + +8.536403292447014 +47.350468101261335 +428.9491320455672 +-193.52245422880785 +74.03235780179213 +0 +120 +absolute + + + +0.01 +smooth + +8.53640195677231 +47.35046796763713 +428.9495539346524 +-193.5912522430114 +74.04540456588062 +0 +120 +absolute + + + +0.01 +smooth + +8.536400621517497 +47.350467832588954 +428.9499730491199 +-193.65987041178062 +74.05849466825782 +0 +120 +absolute + + + +0.01 +smooth + +8.536399286463183 +47.35046769555945 +428.9503902110693 +-193.72833710604675 +74.07162945919049 +0 +120 +absolute + + + +0.01 +smooth + +8.536397951637552 +47.35046755658837 +428.9508053530882 +-193.79664931131134 +74.08480892945366 +0 +120 +absolute + + + +0.01 +smooth + +8.536396617068787 +47.350467415715535 +428.95121840776454 +-193.86480401307594 +74.09803306982242 +0 +120 +absolute + + + +0.01 +smooth + +8.53639528278506 +47.35046727298065 +428.9516293076857 +-193.93279819684182 +74.11130187107179 +0 +120 +absolute + + + +0.01 +smooth + +8.536393948814556 +47.35046712842354 +428.9520379854396 +-194.00062884811052 +74.12461532397683 +0 +120 +absolute + + + +0.01 +smooth + +8.536392615185454 +47.350466982083944 +428.95244437361384 +-194.06829295238347 +74.13797341931256 +0 +120 +absolute + + + +0.01 +smooth + +8.536391281925937 +47.35046683400167 +428.95284840479655 +-194.13578749516213 +74.15137614785412 +0 +120 +absolute + + + +0.01 +smooth + +8.536389949064175 +47.350466684216464 +428.95325001157477 +-194.20310946194795 +74.16482350037647 +0 +120 +absolute + + + +0.01 +smooth + +8.53638861662836 +47.35046653276811 +428.9536491265366 +-194.27025583824235 +74.17831546765471 +0 +120 +absolute + + + +0.01 +smooth + +8.536387284646661 +47.35046637969637 +428.95404568226974 +-194.33722360954678 +74.19185204046389 +0 +120 +absolute + + + +0.01 +smooth + +8.536385953147262 +47.350466225041004 +428.9544396113617 +-194.4040097613626 +74.20543320957901 +0 +120 +absolute + + + +0.01 +smooth + +8.53638462215834 +47.350466068841804 +428.9548308464004 +-194.47061127919144 +74.21905896577518 +0 +120 +absolute + + + +0.01 +smooth + +8.536383291708079 +47.35046591113854 +428.95521931997337 +-194.53702514853455 +74.23272929982741 +0 +120 +absolute + + + +0.01 +smooth + +8.53638196182466 +47.35046575197099 +428.95560496466874 +-194.6032483548936 +74.24644420251082 +0 +120 +absolute + + + +0.01 +smooth + +8.536380632536254 +47.35046559137891 +428.9559877130736 +-194.66927788376984 +74.26020366460038 +0 +120 +absolute + + + +0.01 +smooth + +8.53637930387105 +47.35046542940209 +428.956367497776 +-194.7351107206648 +74.27400767687121 +0 +120 +absolute + + + +0.01 +smooth + +8.53637797585722 +47.35046526608027 +428.9567442513636 +-194.80074385107986 +74.2878562300983 +0 +120 +absolute + + + +0.01 +smooth + +8.536376648522948 +47.35046510145325 +428.9571179064242 +-194.86617426051652 +74.30174931505672 +0 +120 +absolute + + + +0.01 +smooth + +8.536375321896411 +47.350464935560794 +428.9574883955453 +-194.9313989344762 +74.31568692252154 +0 +120 +absolute + + + +0.01 +smooth + +8.536373996005794 +47.35046476844268 +428.9578556513148 +-194.9964148584604 +74.32966904326781 +0 +120 +absolute + + + +0.01 +smooth + +8.536372670879272 +47.35046460013868 +428.95821960632026 +-195.06121901797056 +74.34369566807058 +0 +120 +absolute + + + +0.01 +smooth + +8.536371346545025 +47.350464430688554 +428.9585801931495 +-195.12580839850804 +74.35776678770488 +0 +120 +absolute + + + +0.01 +smooth + +8.536370023031232 +47.350464260132085 +428.95893734439016 +-195.19017998557433 +74.37188239294578 +0 +120 +absolute + + + +0.01 +smooth + +8.536368700366076 +47.350464088509035 +428.9592909926301 +-195.25433076467087 +74.38604247456833 +0 +120 +absolute + + + +0.01 +smooth + +8.536367378577733 +47.35046391585918 +428.95964107045677 +-195.31825772129912 +74.40024702334757 +0 +120 +absolute + + + +0.01 +smooth + +8.536366057694384 +47.350463742222296 +428.95998751045806 +-195.38195784096058 +74.41449603005856 +0 +120 +absolute + + + +0.01 +smooth + +8.536364737744208 +47.35046356763815 +428.96033024522166 +-195.44542810915655 +74.42878948547634 +0 +120 +absolute + + + +0.01 +smooth + +8.536363418755386 +47.35046339214652 +428.9606692073352 +-195.50866551138859 +74.443127380376 +0 +120 +absolute + + + +0.01 +smooth + +8.536362100756097 +47.35046321578718 +428.96100432938647 +-195.57166703315818 +74.45750970553254 +0 +120 +absolute + + + +0.01 +smooth + +8.53636078377452 +47.350463038599884 +428.96133554396306 +-195.6344296599666 +74.47193645172106 +0 +120 +absolute + + + +0.01 +smooth + +8.536359467838835 +47.350462860624425 +428.96166278365286 +-195.6969503773155 +74.48640760971657 +0 +120 +absolute + + + +0.01 +smooth + +8.536358152977222 +47.35046268190057 +428.9619859810434 +-195.7592261707061 +74.50092317029413 +0 +120 +absolute + + + +0.01 +smooth + +8.53635683921786 +47.35046250246808 +428.96230506872246 +-195.8212540256401 +74.51548312422882 +0 +120 +absolute + + + +0.01 +smooth + +8.53635552658893 +47.35046232236674 +428.96261997927786 +-195.88303092761873 +74.53008746229565 +0 +120 +absolute + + + +0.01 +smooth + +8.536354215118608 +47.350462141636314 +428.9629306452972 +-195.9445538621435 +74.54473617526972 +0 +120 +absolute + + + +0.01 +smooth + +8.536352904835079 +47.350461960316565 +428.9632369993682 +-196.00581981471592 +74.55942925392604 +0 +120 +absolute + + + +0.01 +smooth + +8.536351595766519 +47.35046177844728 +428.96353897407835 +-196.06682577083734 +74.57416668903967 +0 +120 +absolute + + + +0.01 +smooth + +8.536350287941106 +47.35046159606824 +428.9638365020158 +-196.1275687160093 +74.58894847138568 +0 +120 +absolute + + + +0.01 +smooth + +8.536348981387023 +47.35046141321921 +428.9641295157679 +-196.18804563573315 +74.60377459173912 +0 +120 +absolute + + + +0.01 +smooth + +8.53634767597446 +47.35046122970141 +428.96441860484657 +-196.24827722566425 +74.61864676989043 +0 +120 +absolute + + + +0.01 +smooth + +8.536346371154748 +47.35046104467903 +428.9647060938777 +-196.30834683570467 +74.63357123454026 +0 +120 +absolute + + + +0.01 +smooth + +8.536345066903088 +47.35046085810152 +428.9649921216288 +-196.36825895736695 +74.64854839184913 +0 +120 +absolute + + + +0.01 +smooth + +8.536343763247634 +47.350460669998036 +428.96527660635866 +-196.4280101248813 +74.66357806468375 +0 +120 +absolute + + + +0.01 +smooth + +8.536342460216531 +47.350460480397714 +428.9655594663254 +-196.4875968724777 +74.67866007591066 +0 +120 +absolute + + + +0.01 +smooth + +8.53634115783793 +47.3504602893297 +428.96584061978774 +-196.54701573438624 +74.69379424839656 +0 +120 +absolute + + + +0.01 +smooth + +8.536339856139985 +47.35046009682315 +428.9661199850042 +-196.60626324483718 +74.7089804050081 +0 +120 +absolute + + + +0.01 +smooth + +8.53633855515085 +47.350459902907225 +428.9663974802336 +-196.66533593806048 +74.72421836861193 +0 +120 +absolute + + + +0.01 +smooth + +8.536337254898669 +47.350459707611066 +428.96667302373413 +-196.72423034828626 +74.73950796207467 +0 +120 +absolute + + + +0.01 +smooth + +8.536335955411598 +47.350459510963816 +428.96694653376437 +-196.7829430097446 +74.75484900826298 +0 +120 +absolute + + + +0.01 +smooth + +8.536334656717786 +47.35045931299465 +428.9672179285831 +-196.84147045666572 +74.7702413300435 +0 +120 +absolute + + + +0.01 +smooth + +8.536333358845383 +47.35045911373269 +428.9674871264487 +-196.8998092232796 +74.78568475028288 +0 +120 +absolute + + + +0.01 +smooth + +8.536332061822542 +47.35045891320709 +428.96775404561953 +-196.9579558438163 +74.80117909184774 +0 +120 +absolute + + + +0.01 +smooth + +8.53633076567741 +47.35045871144702 +428.96801860435454 +-197.01590685250602 +74.81672417760477 +0 +120 +absolute + + + +0.01 +smooth + +8.536329470438142 +47.35045850848161 +428.9682807209119 +-197.07365878357885 +74.83231983042057 +0 +120 +absolute + + + +0.01 +smooth + +8.536328176132887 +47.35045830434002 +428.96854031355036 +-197.13120817126483 +74.84796587316185 +0 +120 +absolute + + + +0.01 +smooth + +8.536326882789801 +47.35045809905142 +428.9687973005285 +-197.18855154979414 +74.86366212869521 +0 +120 +absolute + + + +0.01 +smooth + +8.536325590437027 +47.350457892644926 +428.9690516001047 +-197.24568545339685 +74.87940841988728 +0 +120 +absolute + + + +0.01 +smooth + +8.536324299102722 +47.35045768514971 +428.9693031305377 +-197.30260641630298 +74.89520456960474 +0 +120 +absolute + + + +0.01 +smooth + +8.536323008815033 +47.35045747659491 +428.9695518100858 +-197.3593109727427 +74.91105040071422 +0 +120 +absolute + + + +0.01 +smooth + +8.536321719602112 +47.35045726700967 +428.96979755700767 +-197.41579565694607 +74.92694573608235 +0 +120 +absolute + + + +0.01 +smooth + +8.536320431492111 +47.35045705642317 +428.9700402895619 +-197.47205700314322 +74.9428903985758 +0 +120 +absolute + + + +0.01 +smooth + +8.53631914451318 +47.35045684486454 +428.9702799260069 +-197.52809154556422 +74.95888421106122 +0 +120 +absolute + + + +0.01 +smooth + +8.536317858693472 +47.35045663236293 +428.9705163846014 +-197.58389581843926 +74.97492699640523 +0 +120 +absolute + + + +0.01 +smooth + +8.536316574061134 +47.35045641894749 +428.97074958360383 +-197.63946635599837 +74.99101857747449 +0 +120 +absolute + + + +0.01 +smooth + +8.536315290644323 +47.350456204647365 +428.9709794412728 +-197.69479969247163 +75.00715877713564 +0 +120 +absolute + + + +0.01 +smooth + +8.536314008471184 +47.350455989491735 +428.97120587586664 +-197.74989236208916 +75.02334741825534 +0 +120 +absolute + + + +0.01 +smooth + +8.536312727569868 +47.35045577350972 +428.9714288056442 +-197.80474089908103 +75.03958432370021 +0 +120 +absolute + + + +0.01 +smooth + +8.536311447968531 +47.35045555673048 +428.9716481488638 +-197.8593418376774 +75.05586931633694 +0 +120 +absolute + + + +0.01 +smooth + +8.53631016969532 +47.35045533918316 +428.97186382378413 +-197.91369171210832 +75.07220221903212 +0 +120 +absolute + + + +0.01 +smooth + +8.536308892778386 +47.350455120896925 +428.97207574866366 +-197.96778705660387 +75.08858285465243 +0 +120 +absolute + + + +0.01 +smooth + +8.536307617245882 +47.35045490190092 +428.9722838417609 +-198.02162440539422 +75.1050110460645 +0 +120 +absolute + + + +0.01 +smooth + +8.536306343125958 +47.35045468222428 +428.9724880213344 +-198.07520029270944 +75.12148661613497 +0 +120 +absolute + + + +0.01 +smooth + +8.536305070446765 +47.35045446189617 +428.97268820564284 +-198.12851125277962 +75.13800938773053 +0 +120 +absolute + + + +0.01 +smooth + +8.536303799236455 +47.35045424094574 +428.9728843129445 +-198.1815538198348 +75.15457918371777 +0 +120 +absolute + + + +0.01 +smooth + +8.536302529523175 +47.35045401940214 +428.97307626149814 +-198.23432452810513 +75.17119582696336 +0 +120 +absolute + + + +0.01 +smooth + +8.53630126133508 +47.35045379729452 +428.97326396956225 +-198.28681991182074 +75.18785914033393 +0 +120 +absolute + + + +0.01 +smooth + +8.536299994700318 +47.35045357465202 +428.97344735539536 +-198.3390365052117 +75.20456894669617 +0 +120 +absolute + + + +0.01 +smooth + +8.536298729647044 +47.35045335150381 +428.97362633725606 +-198.39097084250812 +75.22132506891667 +0 +120 +absolute + + + +0.01 +smooth + +8.536297466203406 +47.35045312787902 +428.97380083340283 +-198.4426194579401 +75.23812732986211 +0 +120 +absolute + + + +0.01 +smooth + +8.536296204395748 +47.35045290380492 +428.9739707720104 +-198.4939791949822 +75.25497558327531 +0 +120 +absolute + + + +0.01 +smooth + +8.536294943794973 +47.35045267883091 +428.9741385713785 +-198.54512475004736 +75.27187742455325 +0 +120 +absolute + + + +0.01 +smooth + +8.536293684075059 +47.35045245261038 +428.97430605399944 +-198.59611292370357 +75.28883855185985 +0 +120 +absolute + + + +0.01 +smooth + +8.536292425264241 +47.35045222516674 +428.9744730921412 +-198.64693984591497 +75.30585858166532 +0 +120 +absolute + + + +0.01 +smooth + +8.536291167390749 +47.35045199652337 +428.97463955807075 +-198.69760164664524 +75.3229371304398 +0 +120 +absolute + + + +0.01 +smooth + +8.536289910482813 +47.35045176670368 +428.97480532405586 +-198.74809445585845 +75.34007381465346 +0 +120 +absolute + + + +0.01 +smooth + +8.536288654568674 +47.35045153573108 +428.9749702623645 +-198.7984144035186 +75.3572682507766 +0 +120 +absolute + + + +0.01 +smooth + +8.536287399676555 +47.35045130362893 +428.97513424526375 +-198.84855761958949 +75.37452005527926 +0 +120 +absolute + + + +0.01 +smooth + +8.536286145834692 +47.350451070420654 +428.9752971450212 +-198.89852023403506 +75.39182884463173 +0 +120 +absolute + + + +0.01 +smooth + +8.536284893071322 +47.35045083612964 +428.9754588339046 +-198.9482983768194 +75.40919423530414 +0 +120 +absolute + + + +0.01 +smooth + +8.536283641414675 +47.35045060077931 +428.9756191841817 +-198.99788817790642 +75.42661584376674 +0 +120 +absolute + + + +0.01 +smooth + +8.536282390892982 +47.35045036439302 +428.9757780681197 +-199.04728576725995 +75.44409328648966 +0 +120 +absolute + + + +0.01 +smooth + +8.536281141534479 +47.35045012699419 +428.9759353579865 +-199.0964872748441 +75.46162617994312 +0 +120 +absolute + + + +0.01 +smooth + +8.536279893367395 +47.35044988860621 +428.9760909260493 +-199.14548883062258 +75.47921414059729 +0 +120 +absolute + + + +0.01 +smooth + +8.536278646419962 +47.350449649252454 +428.9762446445759 +-199.1942865645595 +75.49685678492236 +0 +120 +absolute + + + +0.01 +smooth + +8.536277400720417 +47.35044940895637 +428.9763963858339 +-199.24287660661872 +75.51455372938851 +0 +120 +absolute + + + +0.01 +smooth + +8.53627615629699 +47.350449167741324 +428.9765460220907 +-199.29125508676427 +75.53230459046596 +0 +120 +absolute + + + +0.01 +smooth + +8.536274913177916 +47.350448925630715 +428.97669342561426 +-199.33941813496006 +75.55010898462487 +0 +120 +absolute + + + +0.01 +smooth + +8.536273671391424 +47.35044868264795 +428.9768384686717 +-199.38736188117002 +75.56796652833543 +0 +120 +absolute + + + +0.01 +smooth + +8.53627243096575 +47.35044843881642 +428.9769810235309 +-199.4350824553581 +75.58587683806783 +0 +120 +absolute + + + +0.01 +smooth + +8.536271191929124 +47.3504481941595 +428.97712096245914 +-199.48257598748813 +75.60383953029226 +0 +120 +absolute + + + +0.01 +smooth + +8.53626995430978 +47.35044794870063 +428.9772581577243 +-199.52983860752423 +75.62185422147891 +0 +120 +absolute + + + +0.01 +smooth + +8.536268718135952 +47.35044770246315 +428.9773924815937 +-199.57686644543026 +75.63992052809797 +0 +120 +absolute + + + +0.01 +smooth + +8.53626748343587 +47.3504474554705 +428.97752380633506 +-199.62365563117015 +75.65803806661962 +0 +120 +absolute + + + +0.01 +smooth + +8.536266250237768 +47.350447207746086 +428.97765200421594 +-199.67020229470788 +75.67620645351406 +0 +120 +absolute + + + +0.01 +smooth + +8.536265018569878 +47.35044695931327 +428.9777769475039 +-199.71650256600734 +75.69442530525146 +0 +120 +absolute + + + +0.01 +smooth + +8.536263788460435 +47.35044671019546 +428.97789850846647 +-199.76255257503254 +75.712694238302 +0 +120 +absolute + + + +0.01 +smooth + +8.536262559937668 +47.35044646041606 +428.97801655937127 +-199.8083484517473 +75.73101286913591 +0 +120 +absolute + + + +0.01 +smooth + +8.536261333029815 +47.350446209998466 +428.9781309724859 +-199.85388632611574 +75.74938081422333 +0 +120 +absolute + + + +0.01 +smooth + +8.536260107765102 +47.35044595896607 +428.9782416200779 +-199.89916232810162 +75.76779769003447 +0 +120 +absolute + + + +0.01 +smooth + +8.536258884171767 +47.350445707342274 +428.97834837441474 +-199.94417258766902 +75.78626311303951 +0 +120 +absolute + + + +0.01 +smooth + +8.53625766227804 +47.350445455150464 +428.97845110776416 +-199.98891323478182 +75.80477669970867 +0 +120 +absolute + + + +0.01 +smooth + +8.536256442112155 +47.35044520241405 +428.9785496923936 +-200.03338039940397 +75.8233380665121 +0 +120 +absolute + + + +0.01 +smooth + +8.536255223702343 +47.350444949156426 +428.97864400057074 +-200.0775702114994 +75.84194682991998 +0 +120 +absolute + + + +0.01 +smooth + +8.536254007076838 +47.350444695400974 +428.97873390456306 +-200.12147880103208 +75.86060260640254 +0 +120 +absolute + + + +0.01 +smooth + +8.536252792263873 +47.350444441171106 +428.9788192766381 +-200.16510229796592 +75.87930501242992 +0 +120 +absolute + + + +0.01 +smooth + +8.53625157929168 +47.35044418649022 +428.9788999890636 +-200.20843683226488 +75.89805366447234 +0 +120 +absolute + + + +0.01 +smooth + +8.536250368188492 +47.350443931381704 +428.9789759141071 +-200.2514785338929 +75.916848179 +0 +120 +absolute + + + +0.01 +smooth + +8.536249158982539 +47.35044367586896 +428.9790469240361 +-200.2942235328139 +75.93568817248305 +0 +120 +absolute + + + +0.01 +smooth + +8.536247951702057 +47.35044341997539 +428.979112891118 +-200.33666795899188 +75.95457326139169 +0 +120 +absolute + + + +0.01 +smooth + +8.536246746375278 +47.35044316372438 +428.9791736876208 +-200.37880794239072 +75.97350306219613 +0 +120 +absolute + + + +0.01 +smooth + +8.536245542924245 +47.35044290705696 +428.9792298268766 +-200.42065985906717 +75.992479589671 +0 +120 +absolute + + + +0.01 +smooth + +8.536244340740136 +47.35044264950111 +428.97928505469116 +-200.462341155402 +76.01151676588529 +0 +120 +absolute + + + +0.01 +smooth + +8.536243139745181 +47.35044239099459 +428.9793399537726 +-200.5038677982041 +76.03061639036376 +0 +120 +absolute + + + +0.01 +smooth + +8.536241939967816 +47.35044213155735 +428.9793944687811 +-200.5452354903968 +76.04977785496816 +0 +120 +absolute + + + +0.01 +smooth + +8.536240741436467 +47.350441871209405 +428.9794485443762 +-200.5864399349031 +76.06900055156015 +0 +120 +absolute + + + +0.01 +smooth + +8.536239544179569 +47.35044160997074 +428.97950212521835 +-200.62747683464602 +76.08828387200141 +0 +120 +absolute + + + +0.01 +smooth + +8.536238348225554 +47.3504413478613 +428.9795551559668 +-200.66834189254868 +76.10762720815356 +0 +120 +absolute + + + +0.01 +smooth + +8.536237153602853 +47.35044108490109 +428.97960758128175 +-200.70903081153403 +76.12702995187836 +0 +120 +absolute + + + +0.01 +smooth + +8.536235960339898 +47.35044082111009 +428.97965934582294 +-200.74953929452522 +76.14649149503742 +0 +120 +absolute + + + +0.01 +smooth + +8.536234768465123 +47.350440556508296 +428.9797103942504 +-200.78986304444524 +76.16601122949245 +0 +120 +absolute + + + +0.01 +smooth + +8.536233578006955 +47.35044029111565 +428.97976067122397 +-200.82999776421715 +76.18558854710513 +0 +120 +absolute + + + +0.01 +smooth + +8.53623238899383 +47.35044002495218 +428.97981012140355 +-200.86993915676413 +76.20522283973715 +0 +120 +absolute + + + +0.01 +smooth + +8.536231201454177 +47.35043975803783 +428.9798586894489 +-200.9096829250091 +76.22491349925012 +0 +120 +absolute + + + +0.01 +smooth + +8.536230015416429 +47.350439490392596 +428.97990632002 +-200.94922477187515 +76.2446599175058 +0 +120 +absolute + + + +0.01 +smooth + +8.536228830909016 +47.35043922203646 +428.9799529577766 +-200.98856040028534 +76.2644614863658 +0 +120 +absolute + + + +0.01 +smooth + +8.53622764796037 +47.35043895298938 +428.97999854737867 +-201.02768551316262 +76.28431759769181 +0 +120 +absolute + + + +0.01 +smooth + +8.536226466598924 +47.350438683271385 +428.9800430334861 +-201.06659581343027 +76.30422764334553 +0 +120 +absolute + + + +0.01 +smooth + +8.53622528685311 +47.3504384129024 +428.98008636075866 +-201.10528700401116 +76.3241910151886 +0 +120 +absolute + + + +0.01 +smooth + +8.536224108751359 +47.35043814190246 +428.9801284738563 +-201.14375478782844 +76.34420710508277 +0 +120 +absolute + + + +0.01 +smooth + +8.536222932322104 +47.35043787029152 +428.98016931743916 +-201.18199486780514 +76.36427530488965 +0 +120 +absolute + + + +0.01 +smooth + +8.536221757593774 +47.350437598089556 +428.98020883616664 +-201.2200029468643 +76.38439500647094 +0 +120 +absolute + + + +0.01 +smooth + +8.536220584594801 +47.35043732531655 +428.98024697469896 +-201.25777472792896 +76.40456560168829 +0 +120 +absolute + + + +0.01 +smooth + +8.536219413353619 +47.350437051992486 +428.9802836776957 +-201.29530591392225 +76.42478648240339 +0 +120 +absolute + + + +0.01 +smooth + +8.53621824389866 +47.35043677813735 +428.98031888981706 +-201.33259220776714 +76.44505704047793 +0 +120 +absolute + + + +0.01 +smooth + +8.53621707625835 +47.35043650377112 +428.9803525557226 +-201.36962931238668 +76.46537666777358 +0 +120 +absolute + + + +0.01 +smooth + +8.536215910461127 +47.35043622891377 +428.9803846200725 +-201.40641293070402 +76.48574475615202 +0 +120 +absolute + + + +0.01 +smooth + +8.536214746535421 +47.350435953585304 +428.98041502752653 +-201.44293876564217 +76.50616069747491 +0 +120 +absolute + + + +0.01 +smooth + +8.536213584509664 +47.35043567780568 +428.9804437227444 +-201.47920252012412 +76.52662388360395 +0 +120 +absolute + + + +0.01 +smooth + +8.536212424412284 +47.350435401594886 +428.9804706503862 +-201.51519989707305 +76.54713370640079 +0 +120 +absolute + + + +0.01 +smooth + +8.536211266271717 +47.3504351249729 +428.98049575511175 +-201.55092659941187 +76.56768955772712 +0 +120 +absolute + + + +0.01 +smooth + +8.536210110116393 +47.35043484795971 +428.9805189815809 +-201.58637833006378 +76.58829082944463 +0 +120 +absolute + + + +0.01 +smooth + +8.536208955974745 +47.350434570575295 +428.98054027445346 +-201.62155079195173 +76.60893691341496 +0 +120 +absolute + + + +0.01 +smooth + +8.536207803875202 +47.35043429283963 +428.9805595783894 +-201.65643968799884 +76.62962720149983 +0 +120 +absolute + + + +0.01 +smooth + +8.5362066538462 +47.3504340147727 +428.9805768380486 +-201.6910407211281 +76.65036108556089 +0 +120 +absolute + + + +0.01 +smooth + +8.536205505916165 +47.35043373639449 +428.980591998091 +-201.72534959426264 +76.6711379574598 +0 +120 +absolute + + + +0.01 +smooth + +8.536204360113533 +47.35043345772498 +428.98060500317615 +-201.75936201032545 +76.69195720905827 +0 +120 +absolute + + + +0.01 +smooth + +8.536203216466735 +47.35043317878416 +428.98061579796433 +-201.79307367223964 +76.71281823221797 +0 +120 +absolute + + + +0.01 +smooth + +8.536202075004201 +47.35043289959198 +428.9806243271152 +-201.82648028292823 +76.73372041880057 +0 +120 +absolute + + + +0.01 +smooth + +8.536200935754364 +47.35043262016844 +428.9806305352887 +-201.85957754531427 +76.75466316066773 +0 +120 +absolute + + + +0.01 +smooth + +8.536199798745658 +47.35043234053353 +428.9806343671447 +-201.89236116232087 +76.77564584968117 +0 +120 +absolute + + + +0.01 +smooth + +8.536198664006509 +47.35043206070723 +428.98063576734313 +-201.924826836871 +76.7966678777025 +0 +120 +absolute + + + +0.01 +smooth + +8.536197531174988 +47.350431780472995 +428.98063439997674 +-201.95705295918617 +76.81773913772287 +0 +120 +absolute + + + +0.01 +smooth + +8.53619639977584 +47.3504314995442 +428.98062993596574 +-201.9891416038808 +76.83887243524202 +0 +120 +absolute + + + +0.01 +smooth + +8.536195269835844 +47.35043121793757 +428.9806224603697 +-202.02108831440935 +76.86006698890134 +0 +120 +absolute + + + +0.01 +smooth + +8.536194141383769 +47.350430935671035 +428.9806120597844 +-202.05288821192156 +76.88132196359686 +0 +120 +absolute + + + +0.01 +smooth + +8.53619301444838 +47.35043065276244 +428.98059882080554 +-202.08453641756668 +76.90263652422462 +0 +120 +absolute + + + +0.01 +smooth + +8.536191889058443 +47.35043036922976 +428.9805828300293 +-202.11602805249456 +76.92400983568069 +0 +120 +absolute + + + +0.01 +smooth + +8.536190765242731 +47.35043008509087 +428.9805641740514 +-202.14735823785455 +76.94544106286111 +0 +120 +absolute + + + +0.01 +smooth + +8.536189643030015 +47.35042980036373 +428.98054293946785 +-202.17852209479648 +76.96692937066194 +0 +120 +absolute + + + +0.01 +smooth + +8.536188522449054 +47.35042951506617 +428.9805192128743 +-202.2095147444696 +76.98847392397924 +0 +120 +absolute + + + +0.01 +smooth + +8.536187403528622 +47.35042922921617 +428.980493080867 +-202.24033130802366 +77.01007388770905 +0 +120 +absolute + + + +0.01 +smooth + +8.536186286297486 +47.35042894283159 +428.9804646300415 +-202.27096690660812 +77.0317284267474 +0 +120 +absolute + + + +0.01 +smooth + +8.536185170784414 +47.35042865593038 +428.9804339469938 +-202.30141666137257 +77.05343670599032 +0 +120 +absolute + + + +0.01 +smooth + +8.536184057018172 +47.35042836853043 +428.98040111831983 +-202.33167569346662 +77.07519789033392 +0 +120 +absolute + + + +0.01 +smooth + +8.536182945027532 +47.350428080649664 +428.98036623061563 +-202.36173912403987 +77.09701114467425 +0 +120 +absolute + + + +0.01 +smooth + +8.536181834841257 +47.350427792305965 +428.98032937047674 +-202.39160207424172 +77.1188756339073 +0 +120 +absolute + + + +0.01 +smooth + +8.536180726488118 +47.35042750351728 +428.98029062449933 +-202.4212596652219 +77.14079052292917 +0 +120 +absolute + + + +0.01 +smooth + +8.536179619996883 +47.35042721430148 +428.98025007927913 +-202.45070701812975 +77.16275497663588 +0 +120 +absolute + + + +0.01 +smooth + +8.53617851539632 +47.35042692467651 +428.98020782141225 +-202.4799392541151 +77.1847681599235 +0 +120 +absolute + + + +0.01 +smooth + +8.536177412715201 +47.35042663466027 +428.98016393749447 +-202.50895149432742 +77.20682923768808 +0 +120 +absolute + + + +0.01 +smooth + +8.536176311982288 +47.35042634427068 +428.9801185141216 +-202.5377388599162 +77.22893737482568 +0 +120 +absolute + + + +0.01 +smooth + +8.536175213226349 +47.35042605352562 +428.9800716378894 +-202.566296472031 +77.2510917362323 +0 +120 +absolute + + + +0.01 +smooth + +8.536174116476154 +47.35042576244302 +428.9800233953941 +-202.59461945182144 +77.27329148680403 +0 +120 +absolute + + + +0.01 +smooth + +8.536173021760472 +47.35042547104079 +428.9799738732315 +-202.6227029204371 +77.2955357914369 +0 +120 +absolute + + + +0.01 +smooth + +8.536171929108072 +47.350425179336845 +428.97992315799723 +-202.65054199902744 +77.317823815027 +0 +120 +absolute + + + +0.01 +smooth + +8.536170838547719 +47.35042488734909 +428.9798713362875 +-202.6781318087421 +77.34015472247033 +0 +120 +absolute + + + +0.01 +smooth + +8.536169750108181 +47.350424595095426 +428.979818494698 +-202.70546747073067 +77.36252767866299 +0 +120 +absolute + + + +0.01 +smooth + +8.536168663818229 +47.35042430259378 +428.97976471982474 +-202.73254410614263 +77.38494184850094 +0 +120 +absolute + + + +0.01 +smooth + +8.536167579706628 +47.35042400986205 +428.9797100982636 +-202.75935683612755 +77.40739639688034 +0 +120 +absolute + + + +0.01 +smooth + +8.53616649780215 +47.35042371691815 +428.9796547166104 +-202.78590078183504 +77.4298904886972 +0 +120 +absolute + + + +0.01 +smooth + +8.536165418133558 +47.35042342378 +428.97959866146107 +-202.81217106441466 +77.45242328884754 +0 +120 +absolute + + + +0.01 +smooth + +8.536164340729623 +47.35042313046551 +428.9795420194115 +-202.83816280501594 +77.47499396222744 +0 +120 +absolute + + + +0.01 +smooth + +8.536163265619113 +47.350422836992564 +428.97948487705753 +-202.86387112478846 +77.49760167373293 +0 +120 +absolute + + + +0.01 +smooth + +8.536162192830796 +47.350422543379096 +428.9794273209952 +-202.88929114488178 +77.52024558826008 +0 +120 +absolute + + + +0.01 +smooth + +8.53616112239344 +47.35042224964302 +428.9793694378202 +-202.9144179864454 +77.54292487070492 +0 +120 +absolute + + + +0.01 +smooth + +8.53616005433581 +47.35042195580223 +428.9793113141286 +-202.93924677062898 +77.5656386859635 +0 +120 +absolute + + + +0.01 +smooth + +8.536158988686678 +47.35042166187465 +428.9792530365161 +-202.963772618582 +77.5883861989319 +0 +120 +absolute + + + +0.01 +smooth + +8.536157925474813 +47.350421367878184 +428.97919469157887 +-202.98799065145408 +77.61116657450614 +0 +120 +absolute + + + +0.01 +smooth + +8.536156864728978 +47.35042107383074 +428.97913636591244 +-203.01189599039475 +77.63397897758229 +0 +120 +absolute + + + +0.01 +smooth + +8.536155806477945 +47.35042077975024 +428.979078146113 +-203.0354837565536 +77.65682257305637 +0 +120 +absolute + + + +0.01 +smooth + +8.53615475075048 +47.35042048565458 +428.9790201187763 +-203.05874907108017 +77.67969652582448 +0 +120 +absolute + + + +0.01 +smooth + +8.536153697511237 +47.35042019152968 +428.97896213127126 +-203.08170254416828 +77.70260192379033 +0 +120 +absolute + + + +0.01 +smooth + +8.53615264609076 +47.350419897044794 +428.97890166486496 +-203.104507684961 +77.72555881033477 +0 +120 +absolute + + + +0.01 +smooth + +8.536151596326985 +47.350419602121235 +428.9788380938233 +-203.12720484435653 +77.74857188376548 +0 +120 +absolute + + + +0.01 +smooth + +8.536150548249177 +47.35041930677576 +428.978771506239 +-203.1497880918312 +77.77164009054977 +0 +120 +absolute + + + +0.01 +smooth + +8.5361495018866 +47.35041901102509 +428.97870199020514 +-203.1722514968614 +77.79476237715511 +0 +120 +absolute + + + +0.01 +smooth + +8.536148457268506 +47.35041871488588 +428.97862963381414 +-203.19458912892335 +77.81793769004882 +0 +120 +absolute + + + +0.01 +smooth + +8.536147414424164 +47.35041841837488 +428.9785545251591 +-203.2167950574934 +77.8411649756983 +0 +120 +absolute + + + +0.01 +smooth + +8.536146373382836 +47.3504181215088 +428.97847675233265 +-203.23886335204784 +77.86444318057093 +0 +120 +absolute + + + +0.01 +smooth + +8.53614533417378 +47.35041782430435 +428.97839640342795 +-203.2607880820631 +77.88777125113414 +0 +120 +absolute + + + +0.01 +smooth + +8.536144296826262 +47.35041752677826 +428.97831356653745 +-203.28256331701547 +77.91114813385529 +0 +120 +absolute + + + +0.01 +smooth + +8.536143261369535 +47.35041722894722 +428.978228329754 +-203.30418312638116 +77.93457277520173 +0 +120 +absolute + + + +0.01 +smooth + +8.536142227832867 +47.35041693082793 +428.97814078117074 +-203.32564157963657 +77.95804412164088 +0 +120 +absolute + + + +0.01 +smooth + +8.536141196245518 +47.350416632437145 +428.9780510088802 +-203.34693274625803 +77.9815611196401 +0 +120 +absolute + + + +0.01 +smooth + +8.536140166636748 +47.35041633379152 +428.97795910097506 +-203.36805069572176 +78.0051227156668 +0 +120 +absolute + + + +0.01 +smooth + +8.53613913903582 +47.35041603490781 +428.9778651455485 +-203.38898949750416 +78.02872785618833 +0 +120 +absolute + + + +0.01 +smooth + +8.536138113471992 +47.35041573580271 +428.977769230693 +-203.40974322108147 +78.05237548767211 +0 +120 +absolute + + + +0.01 +smooth + +8.53613708997453 +47.350415436492945 +428.97767144450165 +-203.43030593593014 +78.07606455658551 +0 +120 +absolute + + + +0.01 +smooth + +8.536136068572693 +47.350415136995224 +428.9775718750674 +-203.4506717115265 +78.09979400939592 +0 +120 +absolute + + + +0.01 +smooth + +8.536135049295742 +47.35041483732624 +428.9774706104825 +-203.47083461734667 +78.12356279257072 +0 +120 +absolute + + + +0.01 +smooth + +8.53613403217294 +47.35041453750273 +428.9773677388403 +-203.49078872286714 +78.1473698525773 +0 +120 +absolute + + + +0.01 +smooth + +8.536133017233546 +47.35041423754138 +428.9772633482333 +-203.51052809756408 +78.17121413588299 +0 +120 +absolute + + + +0.01 +smooth + +8.536132004506822 +47.35041393745892 +428.9771575267544 +-203.53004681091394 +78.19509458895527 +0 +120 +absolute + + + +0.01 +smooth + +8.536130994022033 +47.35041363727206 +428.97705036249647 +-203.54933893239303 +78.21901015826145 +0 +120 +absolute + + + +0.01 +smooth + +8.536129985808433 +47.35041333699751 +428.9769419435523 +-203.56839853147756 +78.24295979026897 +0 +120 +absolute + + + +0.01 +smooth + +8.53612897989529 +47.35041303665198 +428.9768323580147 +-203.58721967764393 +78.26694243144516 +0 +120 +absolute + + + +0.01 +smooth + +8.536127976311862 +47.35041273625219 +428.97672169397646 +-203.6057964403685 +78.29095702825742 +0 +120 +absolute + + + +0.01 +smooth + +8.536126975087413 +47.35041243581484 +428.97661003953044 +-203.62412288912748 +78.31500252717316 +0 +120 +absolute + + + +0.01 +smooth + +8.5361259762512 +47.35041213535665 +428.97649748276945 +-203.64219309339722 +78.33907787465975 +0 +120 +absolute + + + +0.01 +smooth + +8.536124979832486 +47.35041183489433 +428.9763841117864 +-203.66000112265414 +78.36318201718456 +0 +120 +absolute + + + +0.01 +smooth + +8.536123985860536 +47.35041153444459 +428.9762700146738 +-203.6775410463744 +78.38731390121498 +0 +120 +absolute + + + +0.01 +smooth + +8.536122994364607 +47.350411234024136 +428.97615527952473 +-203.69480693403443 +78.41147247321841 +0 +120 +absolute + + + +0.01 +smooth + +8.536122005373963 +47.350410933649705 +428.97603999443197 +-203.71179285511045 +78.43565667966223 +0 +120 +absolute + + + +0.01 +smooth + +8.536121018917864 +47.35041063333798 +428.9759242474883 +-203.72849287907889 +78.45986546701381 +0 +120 +absolute + + + +0.01 +smooth + +8.536120035025572 +47.350410333105685 +428.97580812678655 +-203.74490107541595 +78.48409778174054 +0 +120 +absolute + + + +0.01 +smooth + +8.536119053726345 +47.350410032969535 +428.97569172041943 +-203.76101151359808 +78.50835257030981 +0 +120 +absolute + + + +0.01 +smooth + +8.53611807504945 +47.35040973294624 +428.97557511648006 +-203.7768182631015 +78.532628779189 +0 +120 +absolute + + + +0.01 +smooth + +8.536117099024146 +47.350409433052505 +428.9754584030609 +-203.79231539340256 +78.55692535484549 +0 +120 +absolute + + + +0.01 +smooth + +8.536116125679692 +47.35040913330505 +428.97534166825494 +-203.80749697397758 +78.58124124374667 +0 +120 +absolute + + + +0.01 +smooth + +8.536115155045351 +47.350408833720586 +428.9752250001549 +-203.82235707430283 +78.60557539235994 +0 +120 +absolute + + + +0.01 +smooth + +8.536114187150385 +47.350408534315825 +428.9751084868538 +-203.83688976385469 +78.62992674715265 +0 +120 +absolute + + + +0.01 +smooth + +8.536113222024056 +47.35040823510747 +428.97499221644426 +-203.85108911210946 +78.6542942545922 +0 +120 +absolute + + + +0.01 +smooth + +8.536112259368622 +47.35040793597011 +428.97487558505907 +-203.86504800598672 +78.6786873169601 +0 +120 +absolute + + + +0.01 +smooth + +8.536111298539254 +47.350407636626905 +428.9747572303272 +-203.87896284498603 +78.7031263359396 +0 +120 +absolute + + + +0.01 +smooth + +8.536110339545429 +47.35040733708515 +428.9746371542416 +-203.89283115045077 +78.72761070932376 +0 +120 +absolute + + + +0.01 +smooth + +8.53610938241708 +47.35040703736094 +428.97451540175496 +-203.90664424935082 +78.7521391800602 +0 +120 +absolute + + + +0.01 +smooth + +8.536108427184132 +47.35040673747043 +428.9743920178204 +-203.92039346865607 +78.7767104910968 +0 +120 +absolute + + + +0.01 +smooth + +8.536107473876502 +47.35040643742973 +428.9742670473899 +-203.93407013533624 +78.8013233853812 +0 +120 +absolute + + + +0.01 +smooth + +8.536106522524118 +47.35040613725496 +428.9741405354168 +-203.94766557636115 +78.82597660586119 +0 +120 +absolute + + + +0.01 +smooth + +8.536105573156904 +47.35040583696227 +428.9740125268537 +-203.96117111870078 +78.85066889548457 +0 +120 +absolute + + + +0.01 +smooth + +8.536104625804786 +47.35040553656776 +428.9738830666531 +-203.97457808932478 +78.87539899719901 +0 +120 +absolute + + + +0.01 +smooth + +8.536103680497686 +47.35040523608755 +428.973752199768 +-203.98787781520303 +78.90016565395233 +0 +120 +absolute + + + +0.01 +smooth + +8.53610273726553 +47.35040493553781 +428.973619971151 +-204.00106162330545 +78.92496760869224 +0 +120 +absolute + + + +0.01 +smooth + +8.536101796138238 +47.35040463493464 +428.97348642575486 +-204.01412084060178 +78.94980360436651 +0 +120 +absolute + + + +0.01 +smooth + +8.53610085714574 +47.350404334294154 +428.9733516085323 +-204.0270467940619 +78.97467238392288 +0 +120 +absolute + + + +0.01 +smooth + +8.53609992031796 +47.350404033632515 +428.9732155644362 +-204.03983081065567 +78.99957269030914 +0 +120 +absolute + + + +0.01 +smooth + +8.53609898568482 +47.35040373296581 +428.973078338419 +-204.0524642173528 +79.024503266473 +0 +120 +absolute + + + +0.01 +smooth + +8.536098053276246 +47.3504034323102 +428.97293997543375 +-204.06493834112328 +79.04946285536224 +0 +120 +absolute + + + +0.01 +smooth + +8.536097123122158 +47.35040313168179 +428.972800520433 +-204.0772445089368 +79.07445019992456 +0 +120 +absolute + + + +0.01 +smooth + +8.536096195252485 +47.35040283109671 +428.9726600183693 +-204.08937404776322 +79.09946404310774 +0 +120 +absolute + + + +0.01 +smooth + +8.536095269697148 +47.35040253057109 +428.9725185141957 +-204.10131828457244 +79.12450312785957 +0 +120 +absolute + + + +0.01 +smooth + +8.536094346486074 +47.35040223012104 +428.9723760528647 +-204.1130685463342 +79.14956619712774 +0 +120 +absolute + + + +0.01 +smooth + +8.536093425649186 +47.350401929762725 +428.97223267932935 +-204.12461616001843 +79.17465199386007 +0 +120 +absolute + + + +0.01 +smooth + +8.53609250721641 +47.350401629512234 +428.97208843854213 +-204.1359524525949 +79.19975926100423 +0 +120 +absolute + + + +0.01 +smooth + +8.536091591217668 +47.35040132938571 +428.97194337545574 +-204.1470687510335 +79.22488674150804 +0 +120 +absolute + + + +0.01 +smooth + +8.536090677682886 +47.35040102939929 +428.9717975350231 +-204.1579563823039 +79.25003317831923 +0 +120 +absolute + + + +0.01 +smooth + +8.536089766641986 +47.350400729569095 +428.9716509621967 +-204.16860667337613 +79.27519731438552 +0 +120 +absolute + + + +0.01 +smooth + +8.536088858124895 +47.35040042991124 +428.97150370192946 +-204.17901095121988 +79.30037789265472 +0 +120 +absolute + + + +0.01 +smooth + +8.536087952161536 +47.35040013044185 +428.97135579917403 +-204.18916054280507 +79.32557365607454 +0 +120 +absolute + + + +0.01 +smooth + +8.536087048781834 +47.35039983117707 +428.9712072988832 +-204.19904677510146 +79.35078334759272 +0 +120 +absolute + + + +0.01 +smooth + +8.53608614801571 +47.35039953213301 +428.97105824600965 +-204.20866097507894 +79.37600571015707 +0 +120 +absolute + + + +0.01 +smooth + +8.536085249893095 +47.3503992333258 +428.9709086855062 +-204.21799446970732 +79.4012394867153 +0 +120 +absolute + + + +0.01 +smooth + +8.536084354443908 +47.350398934771576 +428.97075866232535 +-204.2270385859564 +79.42648342021516 +0 +120 +absolute + + + +0.01 +smooth + +8.536083461698077 +47.35039863648645 +428.9706082214201 +-204.23578465079606 +79.4517362536044 +0 +120 +absolute + + + +0.01 +smooth + +8.536082571685519 +47.35039833848657 +428.970457407743 +-204.24422399119612 +79.47699672983079 +0 +120 +absolute + + + +0.01 +smooth + +8.536081684436166 +47.35039804078804 +428.9703062662469 +-204.25234793412636 +79.50226359184208 +0 +120 +absolute + + + +0.01 +smooth + +8.53608079997994 +47.35039774340701 +428.97015484188455 +-204.26014780655666 +79.527535582586 +0 +120 +absolute + + + +0.01 +smooth + +8.536079918346765 +47.35039744635958 +428.9700031796085 +-204.26761493545683 +79.55281144501032 +0 +120 +absolute + + + +0.01 +smooth + +8.536079039566566 +47.3503971496619 +428.96985132437163 +-204.27474064779676 +79.57808992206279 +0 +120 +absolute + + + +0.01 +smooth + +8.536078163669266 +47.35039685333008 +428.9696993211267 +-204.28151627054618 +79.60336975669118 +0 +120 +absolute + + + +0.01 +smooth + +8.536077290684792 +47.35039655738025 +428.9695472148263 +-204.287933130675 +79.6286496918432 +0 +120 +absolute + + + +0.01 +smooth + +8.536076420643065 +47.35039626182856 +428.96939505042326 +-204.293982555153 +79.65392847046662 +0 +120 +absolute + + + +0.01 +smooth + +8.536075553544041 +47.35039596667911 +428.9692428426081 +-204.29966637979456 +79.679205837471 +0 +120 +absolute + + + +0.01 +smooth + +8.536074688670528 +47.350395671649196 +428.9690898776165 +-204.30523845199968 +79.70450547624878 +0 +120 +absolute + + + +0.01 +smooth + +8.536073825729678 +47.35039537662547 +428.9689358594177 +-204.31080512658076 +79.72983677870494 +0 +120 +absolute + + + +0.01 +smooth + +8.536072964752249 +47.35039508162387 +428.9687808171392 +-204.31635947679348 +79.75519830138599 +0 +120 +absolute + + + +0.01 +smooth + +8.536072105768993 +47.35039478666043 +428.96862477990896 +-204.3218945758941 +79.7805886008386 +0 +120 +absolute + + + +0.01 +smooth + +8.536071248810673 +47.35039449175116 +428.9684677768552 +-204.32740349713862 +79.80600623360935 +0 +120 +absolute + + + +0.01 +smooth + +8.536070393908034 +47.35039419691201 +428.9683098371053 +-204.33287931378288 +79.8314497562448 +0 +120 +absolute + + + +0.01 +smooth + +8.536069541091841 +47.35039390215902 +428.96815098978755 +-204.338315099083 +79.85691772529154 +0 +120 +absolute + + + +0.01 +smooth + +8.536068690392845 +47.35039360750817 +428.9679912640294 +-204.34370392629495 +79.88240869729621 +0 +120 +absolute + + + +0.01 +smooth + +8.536067841841808 +47.35039331297544 +428.96783068895934 +-204.3490388686748 +79.9079212288054 +0 +120 +absolute + + + +0.01 +smooth + +8.536066995469474 +47.35039301857685 +428.9676692937048 +-204.35431299947845 +79.93345387636566 +0 +120 +absolute + + + +0.01 +smooth + +8.536066151306612 +47.35039272432839 +428.9675071073938 +-204.35951939196198 +79.9590051965236 +0 +120 +absolute + + + +0.01 +smooth + +8.536065309383966 +47.35039243024601 +428.9673441591541 +-204.36465111938136 +79.98457374582581 +0 +120 +absolute + + + +0.01 +smooth + +8.5360644697323 +47.350392136345775 +428.96718047811373 +-204.36970125499263 +80.0101580808189 +0 +120 +absolute + + + +0.01 +smooth + +8.536063632382367 +47.35039184264363 +428.9670160934006 +-204.37466287205174 +80.03575675804942 +0 +120 +absolute + + + +0.01 +smooth + +8.536062797364924 +47.35039154915558 +428.9668510341425 +-204.37952904381476 +80.06136833406403 +0 +120 +absolute + + + +0.01 +smooth + +8.536061964710726 +47.35039125589766 +428.9666853294674 +-204.3842928435377 +80.08699136540929 +0 +120 +absolute + + + +0.01 +smooth + +8.536061134450527 +47.350390962885825 +428.96651900850327 +-204.38894734447655 +80.11262440863179 +0 +120 +absolute + + + +0.01 +smooth + +8.536060306615086 +47.35039067013607 +428.9663521003777 +-204.3934856198872 +80.1382660202781 +0 +120 +absolute + + + +0.01 +smooth + +8.536059481235155 +47.3503903776644 +428.9661846342187 +-204.39790074302576 +80.1639147568948 +0 +120 +absolute + + + +0.01 +smooth + +8.53605865834149 +47.3503900854868 +428.96601663915425 +-204.40218578714826 +80.18956917502854 +0 +120 +absolute + + + +0.01 +smooth + +8.53605783796485 +47.350389793619286 +428.96584814431213 +-204.40633382551067 +80.2152278312259 +0 +120 +absolute + + + +0.01 +smooth + +8.536057020135992 +47.35038950207784 +428.9656791788203 +-204.410337931369 +80.24088928203344 +0 +120 +absolute + + + +0.01 +smooth + +8.536056204885668 +47.35038921087846 +428.96550977180675 +-204.4141911779793 +80.2665520839978 +0 +120 +absolute + + + +0.01 +smooth + +8.536055392244633 +47.35038892003713 +428.9653399523991 +-204.41788663859745 +80.2922147936655 +0 +120 +absolute + + + +0.01 +smooth + +8.536054582243645 +47.35038862956986 +428.9651697497255 +-204.4214173864796 +80.3178759675832 +0 +120 +absolute + + + +0.01 +smooth + +8.536053774913459 +47.35038833949264 +428.9649991929135 +-204.42477649488166 +80.34353416229746 +0 +120 +absolute + + + +0.01 +smooth + +8.536052970284832 +47.35038804982147 +428.9648283110914 +-204.42795703705963 +80.3691879343549 +0 +120 +absolute + + + +0.01 +smooth + +8.536052168388519 +47.350387760572346 +428.9646571333868 +-204.4309520862696 +80.39483584030208 +0 +120 +absolute + + + +0.01 +smooth + +8.536051369255276 +47.35038747176125 +428.96448568892754 +-204.43375471576746 +80.42047643668559 +0 +120 +absolute + + + +0.01 +smooth + +8.536050572915858 +47.35038718340418 +428.9643140068418 +-204.4363579988094 +80.44610828005204 +0 +120 +absolute + + + +0.01 +smooth + +8.53604977940102 +47.35038689551714 +428.9641421162573 +-204.43875500865119 +80.47172992694804 +0 +120 +absolute + + + +0.01 +smooth + +8.53604898874152 +47.350386608116125 +428.9639700463018 +-204.440938818549 +80.49733993392014 +0 +120 +absolute + + + +0.01 +smooth + +8.536048200968114 +47.350386321217115 +428.96379782610336 +-204.44290250175877 +80.52293685751499 +0 +120 +absolute + + + +0.01 +smooth + +8.536047416111554 +47.350386034836134 +428.9636254847899 +-204.44463913153652 +80.54851925427911 +0 +120 +absolute + + + +0.01 +smooth + +8.5360466342026 +47.350385748989154 +428.96345305148907 +-204.44614178113827 +80.57408568075914 +0 +120 +absolute + + + +0.01 +smooth + +8.536045855272006 +47.35038546369217 +428.9632805553289 +-204.44740352382007 +80.59963469350166 +0 +120 +absolute + + + +0.01 +smooth + +8.536045079350526 +47.35038517896119 +428.96310802543735 +-204.4484174328378 +80.62516484905326 +0 +120 +absolute + + + +0.01 +smooth + +8.53604430646892 +47.350384894812194 +428.9629354909423 +-204.44917658144752 +80.65067470396053 +0 +120 +absolute + + + +0.01 +smooth + +8.536043536657939 +47.35038461126119 +428.96276298097143 +-204.44967404290526 +80.6761628147701 +0 +120 +absolute + + + +0.01 +smooth + +8.536042769948342 +47.35038432832418 +428.96259052465285 +-204.449902890467 +80.70162773802849 +0 +120 +absolute + + + +0.01 +smooth + +8.536042006106497 +47.35038404591507 +428.9624179946749 +-204.44988328237312 +80.72707722266101 +0 +120 +absolute + + + +0.01 +smooth + +8.536041244304355 +47.350383763718284 +428.96224490802103 +-204.44970132363966 +80.75253962111923 +0 +120 +absolute + + + +0.01 +smooth + +8.53604048450755 +47.35038348172449 +428.96207124682945 +-204.44936747055814 +80.77801561987387 +0 +120 +absolute + + + +0.01 +smooth + +8.536039726747832 +47.350383199949924 +428.9618970322001 +-204.44888560839652 +80.80350360412812 +0 +120 +absolute + + + +0.01 +smooth + +8.53603897105695 +47.350382918410766 +428.9617222852321 +-204.4482596224225 +80.82900195908506 +0 +120 +absolute + + + +0.01 +smooth + +8.536038217466652 +47.350382637123275 +428.961547027025 +-204.4474933979041 +80.85450906994775 +0 +120 +absolute + + + +0.01 +smooth + +8.53603746600869 +47.35038235610362 +428.96137127867866 +-204.44659082010915 +80.88002332191932 +0 +120 +absolute + + + +0.01 +smooth + +8.536036716714811 +47.35038207536805 +428.9611950612926 +-204.44555577430552 +80.90554310020289 +0 +120 +absolute + + + +0.01 +smooth + +8.53603596961677 +47.35038179493279 +428.96101839596633 +-204.4443921457611 +80.9310667900016 +0 +120 +absolute + + + +0.01 +smooth + +8.536035224746307 +47.350381514814 +428.9608413037993 +-204.44310381974373 +80.95659277651849 +0 +120 +absolute + + + +0.01 +smooth + +8.53603448213518 +47.35038123502796 +428.9606638058913 +-204.44169468152128 +80.9821194449567 +0 +120 +absolute + + + +0.01 +smooth + +8.53603374181513 +47.35038095559083 +428.9604859233417 +-204.44016861636166 +81.00764518051932 +0 +120 +absolute + + + +0.01 +smooth + +8.536033003817913 +47.35038067651883 +428.96030767725006 +-204.43852950953263 +81.03316836840943 +0 +120 +absolute + + + +0.01 +smooth + +8.536032268175274 +47.350380397828204 +428.96012908871614 +-204.43678124630227 +81.05868739383018 +0 +120 +absolute + + + +0.01 +smooth + +8.536031534918965 +47.350380119535146 +428.9599501788392 +-204.43492771193826 +81.08420064198467 +0 +120 +absolute + + + +0.01 +smooth + +8.536030804080735 +47.35037984165587 +428.9597709687191 +-204.4329727917086 +81.109706498076 +0 +120 +absolute + + + +0.01 +smooth + +8.536030075692333 +47.35037956420662 +428.95959147945547 +-204.43092037088113 +81.13520334730728 +0 +120 +absolute + + + +0.01 +smooth + +8.536029349785506 +47.350379287203566 +428.9594117321476 +-204.4287743347237 +81.16068957488159 +0 +120 +absolute + + + +0.01 +smooth + +8.53602862639201 +47.350379010662955 +428.9592317478952 +-204.42653856850418 +81.18616356600205 +0 +120 +absolute + + + +0.01 +smooth + +8.536027905543584 +47.35037873460098 +428.95905154779774 +-204.42421695749042 +81.21162370587177 +0 +120 +absolute + + + +0.01 +smooth + +8.536027187271984 +47.35037845903385 +428.95887115295477 +-204.42181338695036 +81.23706837969385 +0 +120 +absolute + + + +0.01 +smooth + +8.53602647160896 +47.350378183977796 +428.958690584466 +-204.41933174215177 +81.26249597267139 +0 +120 +absolute + + + +0.01 +smooth + +8.536025758586257 +47.35037790944904 +428.9585098634309 +-204.41677590836264 +81.28790487000751 +0 +120 +absolute + + + +0.01 +smooth + +8.53602504823563 +47.35037763546377 +428.9583290109491 +-204.4141497708508 +81.31329345690531 +0 +120 +absolute + + + +0.01 +smooth + +8.53602434058882 +47.35037736203823 +428.9581480481201 +-204.41145721488414 +81.33866011856787 +0 +120 +absolute + + + +0.01 +smooth + +8.536023635677584 +47.35037708918861 +428.95796699604347 +-204.40870212573043 +81.36400324019834 +0 +120 +absolute + + + +0.01 +smooth + +8.536022933533669 +47.35037681693113 +428.9577858758189 +-204.4058883886577 +81.3893212069998 +0 +120 +absolute + + + +0.01 +smooth + +8.536022234188824 +47.35037654528202 +428.9576047085457 +-204.40301988893373 +81.41461240417534 +0 +120 +absolute + + + +0.01 +smooth + +8.536021537674799 +47.350376274257464 +428.9574235153237 +-204.40010051182637 +81.4398752169281 +0 +120 +absolute + + + +0.01 +smooth + +8.53602084402334 +47.350376003873706 +428.9572423172523 +-204.39713414260353 +81.46510803046117 +0 +120 +absolute + + + +0.01 +smooth + +8.5360201532662 +47.350375734146944 +428.9570611354311 +-204.39412466653312 +81.49030922997764 +0 +120 +absolute + + + +0.01 +smooth + +8.536019465435128 +47.35037546509339 +428.9568799909597 +-204.39107596888294 +81.51547720068064 +0 +120 +absolute + + + +0.01 +smooth + +8.536018780561871 +47.350375196729274 +428.9566989049377 +-204.38799193492093 +81.54061032777324 +0 +120 +absolute + + + +0.01 +smooth + +8.536018098678179 +47.35037492907079 +428.95651789846465 +-204.3848764499149 +81.5657069964586 +0 +120 +absolute + + + +0.01 +smooth + +8.536017419815803 +47.350374662134165 +428.9563369926399 +-204.38173339913277 +81.59076559193976 +0 +120 +absolute + + + +0.01 +smooth + +8.536016744006488 +47.35037439593561 +428.95615620856336 +-204.3785666678424 +81.61578449941987 +0 +120 +absolute + + + +0.01 +smooth + +8.536016071281992 +47.350374130491346 +428.95597556733435 +-204.37538014131167 +81.64076210410204 +0 +120 +absolute + + + +0.01 +smooth + +8.536015401674055 +47.35037386581757 +428.95579509005256 +-204.37217770480842 +81.66569679118932 +0 +120 +absolute + + + +0.01 +smooth + +8.536014735214431 +47.350373601930514 +428.9556147978175 +-204.36896324360058 +81.69058694588489 +0 +120 +absolute + + + +0.01 +smooth + +8.536014071934867 +47.35037333884639 +428.95543471172874 +-204.36574064295596 +81.7154309533918 +0 +120 +absolute + + + +0.01 +smooth + +8.536013411860672 +47.35037307657891 +428.9552548503424 +-204.36251245755892 +81.74022743401947 +0 +120 +absolute + + + +0.01 +smooth + +8.536012754263334 +47.35037281485016 +428.9550749336892 +-204.35912635493096 +81.76500248299014 +0 +120 +absolute + + + +0.01 +smooth + +8.536012098653575 +47.35037255347485 +428.9548947728494 +-204.3554818363653 +81.7897733896235 +0 +120 +absolute + + + +0.01 +smooth + +8.536011445064297 +47.3503722924697 +428.95471438430644 +-204.3515867100134 +81.8145383778607 +0 +120 +absolute + + + +0.01 +smooth + +8.536010793528396 +47.3503720318514 +428.95453378454357 +-204.34744878402662 +81.83929567164273 +0 +120 +absolute + + + +0.01 +smooth + +8.53601014407877 +47.35037177163666 +428.95435299004447 +-204.34307586655638 +81.86404349491076 +0 +120 +absolute + + + +0.01 +smooth + +8.536009496748319 +47.35037151184224 +428.95417201729276 +-204.3384757657544 +81.88878007160584 +0 +120 +absolute + + + +0.01 +smooth + +8.536008851569946 +47.35037125248482 +428.95399088277156 +-204.3336562897718 +81.91350362566907 +0 +120 +absolute + + + +0.01 +smooth + +8.536008208576549 +47.35037099358114 +428.9538096029646 +-204.32862524676025 +81.93821238104151 +0 +120 +absolute + + + +0.01 +smooth + +8.536007567801027 +47.350370735147884 +428.9536281943553 +-204.32339044487108 +81.9629045616643 +0 +120 +absolute + + + +0.01 +smooth + +8.53600692927628 +47.35037047720179 +428.95344667342727 +-204.31795969225584 +81.98757839147851 +0 +120 +absolute + + + +0.01 +smooth + +8.53600629303521 +47.3503702197596 +428.9532650566639 +-204.31234079706604 +82.01223209442527 +0 +120 +absolute + + + +0.01 +smooth + +8.536005659110712 +47.35036996283799 +428.9530833605485 +-204.306541567453 +82.0368638944456 +0 +120 +absolute + + + +0.01 +smooth + +8.536005027535692 +47.350369706453684 +428.9529016015649 +-204.3005698115682 +82.06147201548062 +0 +120 +absolute + + + +0.01 +smooth + +8.536004398343044 +47.350369450623404 +428.9527197961963 +-204.29443333756313 +82.08605468147142 +0 +120 +absolute + + + +0.01 +smooth + +8.536003771565673 +47.35036919536387 +428.95253796092624 +-204.2881399535893 +82.11061011635908 +0 +120 +absolute + + + +0.01 +smooth + +8.53600314723647 +47.350368940691794 +428.9523561122383 +-204.28169746779807 +82.13513654408472 +0 +120 +absolute + + + +0.01 +smooth + +8.536002525388344 +47.35036868662391 +428.95217426661594 +-204.27511368834098 +82.15963218858941 +0 +120 +absolute + + + +0.01 +smooth + +8.53600190605419 +47.35036843317691 +428.95199244054265 +-204.2683964233694 +82.18409527381425 +0 +120 +absolute + + + +0.01 +smooth + +8.536001289266911 +47.35036818036753 +428.95181065050184 +-204.26155348103487 +82.20852402370033 +0 +120 +absolute + + + +0.01 +smooth + +8.536000675059402 +47.350367928212464 +428.9516289129771 +-204.25459266948877 +82.23291666218871 +0 +120 +absolute + + + +0.01 +smooth + +8.536000063464563 +47.35036767672844 +428.95144724445174 +-204.24752179688255 +82.2572714132205 +0 +120 +absolute + + + +0.01 +smooth + +8.535999454515299 +47.35036742593217 +428.95126566140937 +-204.2403486713678 +82.2815865007368 +0 +120 +absolute + + + +0.01 +smooth + +8.535998848244505 +47.35036717584039 +428.9510841803336 +-204.23308110109582 +82.3058601486787 +0 +120 +absolute + + + +0.01 +smooth + +8.535998244685084 +47.350366926469796 +428.95090281770763 +-204.22572689421813 +82.33009058098727 +0 +120 +absolute + + + +0.01 +smooth + +8.535997643869933 +47.350366677837116 +428.9507215900152 +-204.21829385888623 +82.35427602160364 +0 +120 +absolute + + + +0.01 +smooth + +8.535997045831952 +47.35036642995907 +428.9505405137397 +-204.2107898032515 +82.37841469446886 +0 +120 +absolute + + + +0.01 +smooth + +8.535996450604042 +47.35036618285234 +428.95035960536455 +-204.20322253546541 +82.40250482352403 +0 +120 +absolute + + + +0.01 +smooth + +8.535995858219103 +47.35036593653369 +428.9501788813733 +-204.19559986367952 +82.42654463271023 +0 +120 +absolute + + + +0.01 +smooth + +8.535995268710032 +47.35036569101981 +428.94999835824945 +-204.1879295960451 +82.4505323459686 +0 +120 +absolute + + + +0.01 +smooth + +8.535994682109731 +47.350365446327416 +428.9498180524764 +-204.18021954071378 +82.47446618724017 +0 +120 +absolute + + + +0.01 +smooth + +8.535994098451098 +47.350365202473235 +428.9496379805378 +-204.17247750583695 +82.49834438046608 +0 +120 +absolute + + + +0.01 +smooth + +8.535993517767036 +47.35036495947398 +428.94945815891697 +-204.16471129956602 +82.52216514958735 +0 +120 +absolute + + + +0.01 +smooth + +8.535992940090441 +47.350364717346366 +428.94927860409746 +-204.15692873005253 +82.54592671854516 +0 +120 +absolute + + + +0.01 +smooth + +8.535992365454213 +47.35036447610712 +428.9490993325628 +-204.14913760544786 +82.56962731128053 +0 +120 +absolute + + + +0.01 +smooth + +8.535991793891256 +47.35036423577293 +428.94892036079636 +-204.1413457339035 +82.59326515173458 +0 +120 +absolute + + + +0.01 +smooth + +8.535991225434465 +47.35036399636054 +428.9487417052817 +-204.13356092357094 +82.61683846384841 +0 +120 +absolute + + + +0.01 +smooth + +8.535990660116742 +47.350363757886655 +428.9485633825023 +-204.1257909826016 +82.64034547156308 +0 +120 +absolute + + + +0.01 +smooth + +8.535990097970984 +47.35036352036799 +428.9483854089416 +-204.1180437191469 +82.66378439881971 +0 +120 +absolute + + + +0.01 +smooth + +8.535989539030094 +47.35036328382128 +428.9482078010832 +-204.11032694135832 +82.68715346955938 +0 +120 +absolute + + + +0.01 +smooth + +8.535988983326972 +47.350363048263226 +428.9480305754105 +-204.1026484573874 +82.71045090772316 +0 +120 +absolute + + + +0.01 +smooth + +8.535988430695763 +47.35036281363141 +428.9478536891119 +-204.09499014916761 +82.73368264340407 +0 +120 +absolute + + + +0.01 +smooth + +8.53598788012334 +47.350362579526276 +428.94767684538033 +-204.08722176752974 +82.75688741654113 +0 +120 +absolute + + + +0.01 +smooth + +8.535987331491686 +47.35036234590468 +428.9475000126816 +-204.0793274844878 +82.78006919933541 +0 +120 +absolute + + + +0.01 +smooth + +8.535986784835 +47.35036211278407 +428.9473232047804 +-204.07131117920866 +82.80322605824942 +0 +120 +absolute + + + +0.01 +smooth + +8.535986240187484 +47.35036188018187 +428.94714643544177 +-204.06317673085945 +82.82635605974578 +0 +120 +absolute + + + +0.01 +smooth + +8.535985697583333 +47.3503616481156 +428.9469697184305 +-204.05492801860714 +82.8494572702871 +0 +120 +absolute + + + +0.01 +smooth + +8.535985157056755 +47.350361416602695 +428.9467930675117 +-204.04656892161864 +82.87252775633594 +0 +120 +absolute + + + +0.01 +smooth + +8.535984618641946 +47.35036118566059 +428.9466164964499 +-204.038103319061 +82.89556558435486 +0 +120 +absolute + + + +0.01 +smooth + +8.535984082373101 +47.35036095530675 +428.94644001901025 +-204.02953509010112 +82.91856882080643 +0 +120 +absolute + + + +0.01 +smooth + +8.535983548284431 +47.35036072555866 +428.9462636489576 +-204.02086811390615 +82.94153553215334 +0 +120 +absolute + + + +0.01 +smooth + +8.535983016410125 +47.35036049643375 +428.9460874000566 +-204.01210626964294 +82.96446378485804 +0 +120 +absolute + + + +0.01 +smooth + +8.535982486784388 +47.35036026794948 +428.9459112860723 +-204.00325343647847 +82.9873516453832 +0 +120 +absolute + + + +0.01 +smooth + +8.53598195944142 +47.35036004012331 +428.9457353207697 +-203.99431349357985 +83.01019718019134 +0 +120 +absolute + + + +0.01 +smooth + +8.535981434415422 +47.35035981297273 +428.94555951791364 +-203.985290320114 +83.03299845574514 +0 +120 +absolute + + + +0.01 +smooth + +8.535980911740593 +47.35035958651515 +428.94538389126876 +-203.97618779524788 +83.05575353850712 +0 +120 +absolute + + + +0.01 +smooth + +8.535980391451128 +47.35035936076803 +428.9452084546001 +-203.96700979814844 +83.07846049493983 +0 +120 +absolute + + + +0.01 +smooth + +8.535979873581237 +47.35035913574886 +428.94503322167253 +-203.95776020798274 +83.10111739150591 +0 +120 +absolute + + + +0.01 +smooth + +8.53597935816511 +47.350358911475084 +428.94485820625096 +-203.94844290391777 +83.12372229466791 +0 +120 +absolute + + + +0.01 +smooth + +8.53597884523695 +47.350358687964146 +428.94468342210035 +-203.93906176512053 +83.14627327088846 +0 +120 +absolute + + + +0.01 +smooth + +8.535978334830965 +47.35035846523353 +428.9445088829854 +-203.92962067075803 +83.1687683866301 +0 +120 +absolute + + + +0.01 +smooth + +8.535977826981345 +47.350358243300676 +428.9443346026711 +-203.92012349999715 +83.19120570835543 +0 +120 +absolute + + + +0.01 +smooth + +8.535977321722292 +47.350358022183045 +428.9441605949224 +-203.9105741320049 +83.21358330252703 +0 +120 +absolute + + + +0.01 +smooth + +8.53597681908801 +47.35035780189809 +428.943986873504 +-203.90097644594834 +83.23589923560749 +0 +120 +absolute + + + +0.01 +smooth + +8.535976319112693 +47.350357582463275 +428.94381345218085 +-203.89133432099442 +83.25815157405938 +0 +120 +absolute + + + +0.01 +smooth + +8.535975821830547 +47.35035736389605 +428.9436403447179 +-203.88165163631015 +83.28033838434528 +0 +120 +absolute + + + +0.01 +smooth + +8.53597532727577 +47.35035714621389 +428.94346756487994 +-203.87193227106243 +83.30245773292779 +0 +120 +absolute + + + +0.01 +smooth + +8.535974835482559 +47.35035692943423 +428.9432951264319 +-203.86218010441837 +83.3245076862695 +0 +120 +absolute + + + +0.01 +smooth + +8.535974346485117 +47.35035671357454 +428.9431230431386 +-203.8523990155449 +83.34648631083297 +0 +120 +absolute + + + +0.01 +smooth + +8.535973860317643 +47.350356498652275 +428.94295132876516 +-203.84259288360897 +83.36839167308081 +0 +120 +absolute + + + +0.01 +smooth + +8.535973377014336 +47.35035628468489 +428.94277999707606 +-203.83276558777766 +83.39022183947559 +0 +120 +absolute + + + +0.01 +smooth + +8.5359728966094 +47.35035607168986 +428.9426090618365 +-203.82292100721784 +83.41197487647986 +0 +120 +absolute + + + +0.01 +smooth + +8.535972419137028 +47.35035585968462 +428.9424385368112 +-203.81306302109658 +83.43364885055627 +0 +120 +absolute + + + +0.01 +smooth + +8.535971944631427 +47.35035564868663 +428.9422684357652 +-203.80319550858087 +83.45524182816735 +0 +120 +absolute + + + +0.01 +smooth + +8.535971473126793 +47.350355438713365 +428.94209877246317 +-203.79332234883765 +83.47675187577572 +0 +120 +absolute + + + +0.01 +smooth + +8.535971004657327 +47.350355229782274 +428.9419295606702 +-203.78344742103394 +83.49817705984394 +0 +120 +absolute + + + +0.01 +smooth + +8.535970539257228 +47.3503550219108 +428.941760814151 +-203.77357460433674 +83.51951544683459 +0 +120 +absolute + + + +0.01 +smooth + +8.5359700769607 +47.35035481511642 +428.9415925466706 +-203.763707777913 +83.54076510321028 +0 +120 +absolute + + + +0.01 +smooth + +8.535969617801939 +47.350354609416584 +428.94142477199364 +-203.7538508209297 +83.56192409543357 +0 +120 +absolute + + + +0.01 +smooth + +8.535969161815144 +47.35035440482875 +428.94125750388537 +-203.7440076125539 +83.58299048996705 +0 +120 +absolute + + + +0.01 +smooth + +8.535968709034517 +47.35035420137038 +428.9410907561104 +-203.7341820319525 +83.60396235327329 +0 +120 +absolute + + + +0.01 +smooth + +8.53596825949426 +47.35035399905892 +428.9409245424336 +-203.7243779582926 +83.62483775181492 +0 +120 +absolute + + + +0.01 +smooth + +8.535967812520642 +47.350353797617075 +428.9407586977245 +-203.71455569694785 +83.64564434253812 +0 +120 +absolute + + + +0.01 +smooth + +8.535967367342371 +47.35035359672722 +428.940593031045 +-203.70466875714828 +83.66641379592096 +0 +120 +absolute + + + +0.01 +smooth + +8.53596692399424 +47.35035339640734 +428.9404275545201 +-203.69471982758256 +83.687144053705 +0 +120 +absolute + + + +0.01 +smooth + +8.53596648251188 +47.35035319667586 +428.9402622804882 +-203.68471164854046 +83.70783302241743 +0 +120 +absolute + + + +0.01 +smooth + +8.535966042930923 +47.35035299755122 +428.94009722128715 +-203.67464696031197 +83.72847860858543 +0 +120 +absolute + + + +0.01 +smooth + +8.535965605287002 +47.35035279905176 +428.9399323892547 +-203.66452850318677 +83.74907871873606 +0 +120 +absolute + + + +0.01 +smooth + +8.535965169615748 +47.35035260119593 +428.9397677967288 +-203.6543590174547 +83.76963125939648 +0 +120 +absolute + + + +0.01 +smooth + +8.535964735952794 +47.350352404002116 +428.93960345604756 +-203.64414124340567 +83.79013413709383 +0 +120 +absolute + + + +0.01 +smooth + +8.535964304333778 +47.35035220748874 +428.93943937954896 +-203.63387792132946 +83.8105852583553 +0 +120 +absolute + + + +0.01 +smooth + +8.535963874794321 +47.35035201167418 +428.93927557957073 +-203.6235717915159 +83.83098252970797 +0 +120 +absolute + + + +0.01 +smooth + +8.535963447370067 +47.35035181657686 +428.9391120684509 +-203.6132255942548 +83.85132385767896 +0 +120 +absolute + + + +0.01 +smooth + +8.535963022096638 +47.350351622215165 +428.93894885852745 +-203.602842069836 +83.87160714879548 +0 +120 +absolute + + + +0.01 +smooth + +8.535962599009673 +47.35035142860751 +428.93878596213824 +-203.5924239585493 +83.8918303095846 +0 +120 +absolute + + + +0.01 +smooth + +8.535962178144802 +47.35035123577229 +428.9386233916212 +-203.58197400068454 +83.9119912465735 +0 +120 +absolute + + + +0.01 +smooth + +8.53596175953766 +47.35035104372794 +428.93846115931444 +-203.5714949365316 +83.93208786628934 +0 +120 +absolute + + + +0.01 +smooth + +8.535961343223876 +47.350350852492824 +428.93829927755576 +-203.56098950638022 +83.9521180752592 +0 +120 +absolute + + + +0.01 +smooth + +8.535960929239085 +47.35035066208536 +428.93813775868324 +-203.55046045052038 +83.97207978001028 +0 +120 +absolute + + + +0.01 +smooth + +8.535960517618918 +47.350350472523964 +428.9379766150346 +-203.53991050924165 +83.99197088706966 +0 +120 +absolute + + + +0.01 +smooth + +8.535960108399006 +47.35035028382702 +428.9378158589478 +-203.52934242283405 +84.01178930296449 +0 +120 +absolute + + + +0.01 +smooth + +8.535959701614983 +47.35035009601293 +428.93765550276083 +-203.51875893158734 +84.03153293422193 +0 +120 +absolute + + + +0.01 +smooth + +8.535959297302481 +47.350349909100125 +428.93749555881175 +-203.50816277579136 +84.05119968736912 +0 +120 +absolute + + + +0.01 +smooth + +8.535958895497133 +47.35034972310699 +428.9373360394384 +-203.49755669573597 +84.07078746893319 +0 +120 +absolute + + + +0.01 +smooth + +8.53595849623457 +47.35034953805193 +428.93717695697876 +-203.48694343171096 +84.0902941854413 +0 +120 +absolute + + + +0.01 +smooth + +8.53595809955043 +47.35034935395334 +428.9370183237707 +-203.47632572400613 +84.10971774342055 +0 +120 +absolute + + + +0.01 +smooth + +8.535957705480334 +47.350349170829645 +428.93686015215224 +-203.46570631291135 +84.1290560493981 +0 +120 +absolute + + + +0.01 +smooth + +8.535957314059925 +47.350348988699224 +428.9367024544612 +-203.45508793871642 +84.14830700990109 +0 +120 +absolute + + + +0.01 +smooth + +8.535956925324829 +47.3503488075805 +428.9365452430357 +-203.4444733417112 +84.16746853145665 +0 +120 +absolute + + + +0.01 +smooth + +8.535956539310682 +47.35034862749188 +428.93638853021355 +-203.4338652621855 +84.18653852059191 +0 +120 +absolute + + + +0.01 +smooth + +8.535956156053114 +47.35034844845175 +428.93623232833266 +-203.42326644042907 +84.20551488383406 +0 +120 +absolute + + + +0.01 +smooth + +8.53595577558776 +47.35034827047852 +428.93607664973115 +-203.41267961673188 +84.22439552771016 +0 +120 +absolute + + + +0.01 +smooth + +8.53595539795025 +47.3503480935906 +428.9359215067468 +-203.40210753138365 +84.2431783587474 +0 +120 +absolute + + + +0.01 +smooth + +8.535955023176218 +47.350347917806374 +428.9357669117175 +-203.39155292467422 +84.26186128347292 +0 +120 +absolute + + + +0.01 +smooth + +8.535954651301294 +47.350347743144276 +428.9356128769814 +-203.38101853689346 +84.28044220841383 +0 +120 +absolute + + + +0.01 +smooth + +8.535954282361113 +47.35034756962269 +428.9354594148762 +-203.3705071083312 +84.29891904009732 +0 +120 +absolute + + + +0.01 +smooth + +8.535953916391307 +47.35034739726002 +428.93530653774013 +-203.36002137927716 +84.31728968505047 +0 +120 +absolute + + + +0.01 +smooth + +8.535953553427506 +47.35034722607469 +428.93515425791077 +-203.3495640900213 +84.33555204980046 +0 +120 +absolute + + + +0.01 +smooth + +8.535953193505344 +47.35034705608506 +428.93500258772633 +-203.33913798085334 +84.35370404087439 +0 +120 +absolute + + + +0.01 +smooth + +8.535952836660453 +47.35034688730957 +428.93485153952463 +-203.32874579206316 +84.37174356479943 +0 +120 +absolute + + + +0.01 +smooth + +8.535952482928465 +47.350346719766634 +428.9347011256437 +-203.3183902639406 +84.38966852810272 +0 +120 +absolute + + + +0.01 +smooth + +8.535952132345017 +47.350346553474616 +428.93455135842146 +-203.30807413677547 +84.40747683731138 +0 +120 +absolute + + + +0.01 +smooth + +8.535951784814397 +47.35034638839422 +428.93440221908094 +-203.29779465237874 +84.42517238235669 +0 +120 +absolute + + + +0.01 +smooth + +8.535951439157875 +47.3503462240104 +428.9342534320386 +-203.28750355462884 +84.44280836171741 +0 +120 +absolute + + + +0.01 +smooth + +8.535951095117001 +47.350346060212686 +428.9341049393055 +-203.2771908223801 +84.46039598764777 +0 +120 +absolute + + + +0.01 +smooth + +8.535950752728928 +47.350345897020645 +428.93395675288104 +-203.26685878118002 +84.47793299972592 +0 +120 +absolute + + + +0.01 +smooth + +8.535950412030804 +47.350345734453754 +428.9338088847644 +-203.25650975657587 +84.49541713752991 +0 +120 +absolute + + + +0.01 +smooth + +8.53595007305979 +47.35034557253159 +428.9336613469551 +-203.24614607411496 +84.51284614063783 +0 +120 +absolute + + + +0.01 +smooth + +8.535949735853029 +47.3503454112736 +428.933514151452 +-203.23577005934456 +84.53021774862772 +0 +120 +absolute + + + +0.01 +smooth + +8.535949400447674 +47.350345250699355 +428.93336731025454 +-203.225384037812 +84.54752970107766 +0 +120 +absolute + + + +0.01 +smooth + +8.535949066880878 +47.350345090828355 +428.9332208353619 +-203.21499033506464 +84.56477973756576 +0 +120 +absolute + + + +0.01 +smooth + +8.535948735189796 +47.35034493168013 +428.93307473877354 +-203.20459127664978 +84.58196559767005 +0 +120 +absolute + + + +0.01 +smooth + +8.535948405411574 +47.350344773274166 +428.9329290324883 +-203.19418918811468 +84.59908502096857 +0 +120 +absolute + + + +0.01 +smooth + +8.535948077583365 +47.35034461563001 +428.93278372850574 +-203.18378639500668 +84.61613574703946 +0 +120 +absolute + + + +0.01 +smooth + +8.535947751742324 +47.35034445876718 +428.932638838825 +-203.17338522287315 +84.63311551546079 +0 +120 +absolute + + + +0.01 +smooth + +8.535947427925601 +47.350344302705174 +428.9324943754453 +-203.1629879972613 +84.65002206581059 +0 +120 +absolute + + + +0.01 +smooth + +8.535947106170344 +47.350344147463524 +428.9323503503659 +-203.15259704371846 +84.66685313766693 +0 +120 +absolute + + + +0.01 +smooth + +8.535946786513708 +47.35034399306174 +428.932206775586 +-203.14221468779206 +84.68360647060791 +0 +120 +absolute + + + +0.01 +smooth + +8.535946468992845 +47.35034383951935 +428.9320636631049 +-203.13184325502925 +84.70027980421158 +0 +120 +absolute + + + +0.01 +smooth + +8.535946153644906 +47.35034368685586 +428.9319210249219 +-203.12148507097749 +84.71687087805603 +0 +120 +absolute + + + +0.01 +smooth + +8.535945840507047 +47.350343535090815 +428.9317788730363 +-203.11114246118404 +84.73337743171938 +0 +120 +absolute + + + +0.01 +smooth + +8.53594552961641 +47.3503433842437 +428.9316372194471 +-203.10081775119613 +84.74979720477961 +0 +120 +absolute + + + +0.01 +smooth + +8.535945221010154 +47.35034323433405 +428.9314960761536 +-203.09051326656123 +84.76612793681483 +0 +120 +absolute + + + +0.01 +smooth + +8.53594491472543 +47.350343085381375 +428.9313554551552 +-203.08023133282651 +84.78236736740311 +0 +120 +absolute + + + +0.01 +smooth + +8.535944610799387 +47.3503429374052 +428.93121536845103 +-203.06997427553938 +84.79851323612252 +0 +120 +absolute + + + +0.01 +smooth + +8.53594430926918 +47.35034279042504 +428.9310758280404 +-203.05974442024709 +84.81456328255115 +0 +120 +absolute + + + +0.01 +smooth + +8.535944010171956 +47.35034264446041 +428.93093684592236 +-203.04954409249697 +84.83051524626705 +0 +120 +absolute + + + +0.01 +smooth + +8.535943713544873 +47.35034249953084 +428.93079843409646 +-203.03937561783636 +84.8463668668483 +0 +120 +absolute + + + +0.01 +smooth + +8.535943419425076 +47.350342355655826 +428.9306606045617 +-203.02924132181255 +84.86211588387297 +0 +120 +absolute + + + +0.01 +smooth + +8.535943127849722 +47.35034221285491 +428.93052336931737 +-203.01914352997287 +84.87776003691914 +0 +120 +absolute + + + +0.01 +smooth + +8.53594283885596 +47.3503420711476 +428.93038674036285 +-203.0090845678646 +84.89329706556487 +0 +120 +absolute + + + +0.01 +smooth + +8.535942552480941 +47.3503419305534 +428.93025072969726 +-202.99906676103507 +84.90872470938825 +0 +120 +absolute + + + +0.01 +smooth + +8.535942268761818 +47.35034179109185 +428.93011534931986 +-202.9890924350316 +84.92404070796732 +0 +120 +absolute + + + +0.01 +smooth + +8.535941987735745 +47.35034165278246 +428.9299806112299 +-202.9791639154015 +84.93924280088018 +0 +120 +absolute + + + +0.01 +smooth + +8.53594170943987 +47.35034151564474 +428.92984652742655 +-202.96928352769208 +84.9543287277049 +0 +120 +absolute + + + +0.01 +smooth + +8.535941433911345 +47.35034137969822 +428.92971310990913 +-202.95945359745068 +84.96929622801954 +0 +120 +absolute + + + +0.01 +smooth + +8.535941161187324 +47.350341244962415 +428.92958037067694 +-202.94967645022456 +84.98414304140218 +0 +120 +absolute + + + +0.01 +smooth + +8.535940891304957 +47.350341111456835 +428.9294483217291 +-202.93995441156108 +84.99886690743088 +0 +120 +absolute + + + +0.01 +smooth + +8.535940624301395 +47.35034097920101 +428.929316975065 +-202.9302898070075 +85.01346556568375 +0 +120 +absolute + + + +0.01 +smooth + +8.535940360213791 +47.350340848214444 +428.9291863426838 +-202.92068496211124 +85.02793675573879 +0 +120 +absolute + + + +0.01 +smooth + +8.535940099079296 +47.35034071851668 +428.92905643658463 +-202.9111422024195 +85.04227821717413 +0 +120 +absolute + + + +0.01 +smooth + +8.535939840935065 +47.350340590127196 +428.92892726876687 +-202.90166385347965 +85.05648768956783 +0 +120 +absolute + + + +0.01 +smooth + +8.535939585818243 +47.35034046306555 +428.92879885122977 +-202.89225224083893 +85.07056291249799 +0 +120 +absolute + + + +0.01 +smooth + +8.535939333150173 +47.35034033706466 +428.9286710459845 +-202.88288646344097 +85.08453235301293 +0 +120 +absolute + + + +0.01 +smooth + +8.53593908183574 +47.350340211617436 +428.92854358951473 +-202.87352605186274 +85.0984501918881 +0 +120 +absolute + + + +0.01 +smooth + +8.535938831888958 +47.35034008673314 +428.92841648864214 +-202.8641722994953 +85.11231522482683 +0 +120 +absolute + + + +0.01 +smooth + +8.535938583348461 +47.35033996243253 +428.9282897561917 +-202.85482742831454 +85.12612501762904 +0 +120 +absolute + + + +0.01 +smooth + +8.535938336252903 +47.35033983873631 +428.9281634049885 +-202.84549366029617 +85.13987713609463 +0 +120 +absolute + + + +0.01 +smooth + +8.535938090640927 +47.350339715665235 +428.92803744785743 +-202.8361732174161 +85.1535691460236 +0 +120 +absolute + + + +0.01 +smooth + +8.535937846551176 +47.35033959324001 +428.9279118976233 +-202.82686832164998 +85.16719861321579 +0 +120 +absolute + + + +0.01 +smooth + +8.535937604022298 +47.350339471481405 +428.9277867671113 +-202.81758119497354 +85.18076310347122 +0 +120 +absolute + + + +0.01 +smooth + +8.535937363092938 +47.350339350410145 +428.9276620691464 +-202.8083140593628 +85.19426018258979 +0 +120 +absolute + + + +0.01 +smooth + +8.53593712380174 +47.35033923004696 +428.9275378165535 +-202.79906913679326 +85.20768741637136 +0 +120 +absolute + + + +0.01 +smooth + +8.535936886187343 +47.35033911041257 +428.92741402215756 +-202.7898486492409 +85.22104237061599 +0 +120 +absolute + + + +0.01 +smooth + +8.535936650288402 +47.35033899152772 +428.9272906987835 +-202.7806548186814 +85.2343226111235 +0 +120 +absolute + + + +0.01 +smooth + +8.53593641614356 +47.35033887341315 +428.9271678592565 +-202.77148986709057 +85.2475257036939 +0 +120 +absolute + + + +0.01 +smooth + +8.535936183791463 +47.35033875608961 +428.92704551640145 +-202.76235601644427 +85.26064921412711 +0 +120 +absolute + + + +0.01 +smooth + +8.535935953270753 +47.350338639577814 +428.9269236830431 +-202.75325548871814 +85.27369070822303 +0 +120 +absolute + + + +0.01 +smooth + +8.535935724620078 +47.35033852389849 +428.9268023720068 +-202.74419050588807 +85.28664775178163 +0 +120 +absolute + + + +0.01 +smooth + +8.535935497878079 +47.35033840907239 +428.92668159611736 +-202.7351632899298 +85.2995179106028 +0 +120 +absolute + + + +0.01 +smooth + +8.535935273083401 +47.350338295120224 +428.92656136819954 +-202.72617606281906 +85.31229875048648 +0 +120 +absolute + + + +0.01 +smooth + +8.535935050274697 +47.35033818206276 +428.9264417010785 +-202.71723104653168 +85.32498783723261 +0 +120 +absolute + + + +0.01 +smooth + +8.535934829490605 +47.350338069920696 +428.92632260757927 +-202.70833046304347 +85.33758273664114 +0 +120 +absolute + + + +0.01 +smooth + +8.535934610769774 +47.350337958714796 +428.92620410052683 +-202.69947653433024 +85.35008101451203 +0 +120 +absolute + + + +0.01 +smooth + +8.535934394150846 +47.35033784846579 +428.92608619274614 +-202.69067148236763 +85.36248023664511 +0 +120 +absolute + + + +0.01 +smooth + +8.53593417967247 +47.3503377391944 +428.9259688970621 +-202.68191752913157 +85.37477796884039 +0 +120 +absolute + + + +0.01 +smooth + +8.535933967373287 +47.350337630921366 +428.9258522262995 +-202.6732168965978 +85.38697177689782 +0 +120 +absolute + + + +0.01 +smooth + +8.535933757291946 +47.35033752366742 +428.9257361932838 +-202.66457180674206 +85.39905922661728 +0 +120 +absolute + + + +0.01 +smooth + +8.535933549467092 +47.350337417453304 +428.9256208108395 +-202.65598448154014 +85.41103788379871 +0 +120 +absolute + + + +0.01 +smooth + +8.535933343937366 +47.35033731229975 +428.92550609179193 +-202.64745714296782 +85.42290531424206 +0 +120 +absolute + + + +0.01 +smooth + +8.535933140741419 +47.35033720822749 +428.9253920489659 +-202.63899201300094 +85.43465908374725 +0 +120 +absolute + + + +0.01 +smooth + +8.53593293991789 +47.35033710525725 +428.9252786951863 +-202.63059131361518 +85.44629675811422 +0 +120 +absolute + + + +0.01 +smooth + +8.53593274150543 +47.35033700340979 +428.9251660432783 +-202.62225726678642 +85.45781590314292 +0 +120 +absolute + + + +0.01 +smooth + +8.53593254554268 +47.35033690270582 +428.92505410606674 +-202.6139920944904 +85.46921408463324 +0 +120 +absolute + + + +0.01 +smooth + +8.535932352068286 +47.35033680316607 +428.92494289637665 +-202.6057980187029 +85.48048886838512 +0 +120 +absolute + + + +0.01 +smooth + +8.535932161120897 +47.350336704811305 +428.9248324270329 +-202.5976772613997 +85.49163782019853 +0 +120 +absolute + + + +0.01 +smooth + +8.535931972739155 +47.35033660766224 +428.92472271086064 +-202.5896320445566 +85.50265850587337 +0 +120 +absolute + + + +0.01 +smooth + +8.535931786961704 +47.350336511739606 +428.9246137606847 +-202.58166459014936 +85.51354849120958 +0 +120 +absolute + + + +0.01 +smooth + +8.535931603827192 +47.35033641706414 +428.92450558933007 +-202.57377712015372 +85.5243053420071 +0 +120 +absolute + + + +0.01 +smooth + +8.535931423374262 +47.35033632365658 +428.9243982096218 +-202.56597185654556 +85.53492662406585 +0 +120 +absolute + + + +0.01 +smooth + +8.535931245641562 +47.35033623153766 +428.9242916343848 +-202.55825102130058 +85.54540990318577 +0 +120 +absolute + + + +0.01 +smooth + +8.535931070667733 +47.35033614072812 +428.92418587644414 +-202.55061683639465 +85.55575274516677 +0 +120 +absolute + + + +0.01 +smooth + +8.535930898491424 +47.35033605124868 +428.9240809486246 +-202.54307152380343 +85.56595271580883 +0 +120 +absolute + + + +0.01 +smooth + +8.535930729083566 +47.35033596308671 +428.92397684518596 +-202.53561457544302 +85.57601108435419 +0 +120 +absolute + + + +0.01 +smooth + +8.535930561158409 +47.35033587561026 +428.923873216424 +-202.52819482072556 +85.58599782068194 +0 +120 +absolute + + + +0.01 +smooth + +8.535930394243566 +47.3503357885887 +428.9237699370016 +-202.520793883997 +85.59593834633877 +0 +120 +absolute + + + +0.01 +smooth + +8.53593022837883 +47.35033570204388 +428.92366702220227 +-202.51341404045002 +85.60583006066938 +0 +120 +absolute + + + +0.01 +smooth + +8.535930063604011 +47.350335615997686 +428.9235644873106 +-202.50605756527744 +85.61567036301857 +0 +120 +absolute + + + +0.01 +smooth + +8.535929899958909 +47.350335530472044 +428.9234623476106 +-202.49872673367213 +85.62545665273102 +0 +120 +absolute + + + +0.01 +smooth + +8.53592973748333 +47.35033544548877 +428.92336061838614 +-202.49142382082667 +85.63518632915142 +0 +120 +absolute + + + +0.01 +smooth + +8.535929576217077 +47.350335361069774 +428.92325931492144 +-202.4841511019339 +85.64485679162458 +0 +120 +absolute + + + +0.01 +smooth + +8.535929416199954 +47.350335277236944 +428.92315845250056 +-202.47691085218653 +85.6544654394952 +0 +120 +absolute + + + +0.01 +smooth + +8.53592925747177 +47.35033519401217 +428.92305804640785 +-202.46970534677752 +85.66400967210804 +0 +120 +absolute + + + +0.01 +smooth + +8.535929100072321 +47.35033511141729 +428.92295811192696 +-202.46253686089932 +85.67348688880776 +0 +120 +absolute + + + +0.01 +smooth + +8.535928944041418 +47.350335029474216 +428.92285866434236 +-202.455407669745 +85.68289448893917 +0 +120 +absolute + + + +0.01 +smooth + +8.53592878941886 +47.350334948204825 +428.9227597189379 +-202.44832004850713 +85.69222987184696 +0 +120 +absolute + + + +0.01 +smooth + +8.535928636244448 +47.35033486763098 +428.9226612909977 +-202.44127627237847 +85.70149043687584 +0 +120 +absolute + + + +0.01 +smooth + +8.535928484557997 +47.350334787774585 +428.922563395806 +-202.43427861655186 +85.71067358337058 +0 +120 +absolute + + + +0.01 +smooth + +8.535928334399301 +47.350334708657506 +428.9224660486467 +-202.42732935622 +85.71977671067592 +0 +120 +absolute + + + +0.01 +smooth + +8.53592818580817 +47.35033463030165 +428.9223692648042 +-202.42043076657575 +85.72879721813656 +0 +120 +absolute + + + +0.01 +smooth + +8.535928038824407 +47.35033455272887 +428.92227305956226 +-202.41358512281178 +85.73773250509727 +0 +120 +absolute + + + +0.01 +smooth + +8.535927893487814 +47.35033447596104 +428.92217744820516 +-202.40679470012094 +85.74657997090274 +0 +120 +absolute + + + +0.01 +smooth + +8.535927749838192 +47.35033440002006 +428.9220824460168 +-202.40006177369582 +85.75533701489772 +0 +120 +absolute + + + +0.01 +smooth + +8.535927607915353 +47.35033432492779 +428.92198806828145 +-202.39338861872935 +85.76400103642693 +0 +120 +absolute + + + +0.01 +smooth + +8.535927467759095 +47.35033425070614 +428.9218943302832 +-202.38677751041425 +85.77256943483512 +0 +120 +absolute + + + +0.01 +smooth + +8.535927329409226 +47.35033417737697 +428.92180124730606 +-202.38023072394324 +85.78103960946702 +0 +120 +absolute + + + +0.01 +smooth + +8.535927192905545 +47.35033410496216 +428.9217088346342 +-202.37375053450913 +85.78940895966734 +0 +120 +absolute + + + +0.01 +smooth + +8.535927058287859 +47.35033403348359 +428.9216171075516 +-202.36733921730468 +85.79767488478083 +0 +120 +absolute + + + +0.01 +smooth + +8.535926925595973 +47.35033396296316 +428.9215260813425 +-202.3609990475226 +85.80583478415222 +0 +120 +absolute + + + +0.01 +smooth + +8.53592679486969 +47.35033389342273 +428.9214357712908 +-202.3547323003557 +85.81388605712625 +0 +120 +absolute + + + +0.01 +smooth + +8.535926666148814 +47.35033382488418 +428.92134619268086 +-202.34854125099673 +85.82182610304764 +0 +120 +absolute + + + +0.01 +smooth + +8.535926539473149 +47.3503337573694 +428.92125736079646 +-202.34242817463843 +85.82965232126111 +0 +120 +absolute + + + +0.01 +smooth + +8.535926414882496 +47.35033369090027 +428.92116929092197 +-202.33639534647364 +85.8373621111114 +0 +120 +absolute + + + +0.01 +smooth + +8.535926292416665 +47.35033362549866 +428.92108199834126 +-202.330445041695 +85.84495287194326 +0 +120 +absolute + + + +0.01 +smooth + +8.535926172115456 +47.35033356118647 +428.9209954983386 +-202.32457953549533 +85.8524220031014 +0 +120 +absolute + + + +0.01 +smooth + +8.535926054018674 +47.35033349798556 +428.9209098061979 +-202.31880110306744 +85.85976690393056 +0 +120 +absolute + + + +0.01 +smooth + +8.535925938166123 +47.35033343591782 +428.92082493720346 +-202.31311201960403 +85.86698497377547 +0 +120 +absolute + + + +0.01 +smooth + +8.535925824597605 +47.350333375005135 +428.92074090663925 +-202.3075145602979 +85.87407361198086 +0 +120 +absolute + + + +0.01 +smooth + +8.535925713352928 +47.35033331526937 +428.92065772978935 +-202.3020110003418 +85.88103021789148 +0 +120 +absolute + + + +0.01 +smooth + +8.535925604471894 +47.35033325673241 +428.9205754219379 +-202.29660361492844 +85.88785219085202 +0 +120 +absolute + + + +0.01 +smooth + +8.535925497994304 +47.350333199416156 +428.92049399836895 +-202.29129467925065 +85.89453693020724 +0 +120 +absolute + + + +0.01 +smooth + +8.53592539395997 +47.350333143342475 +428.9204134743666 +-202.2860864685012 +85.90108183530188 +0 +120 +absolute + + + +0.01 +smooth + +8.535925292408686 +47.35033308853323 +428.920333865215 +-202.2809812578728 +85.90748430548065 +0 +120 +absolute + + + +0.01 +smooth + +8.535925193380264 +47.35033303501034 +428.9202551861982 +-202.27598132255818 +85.91374174008831 +0 +120 +absolute + + + +0.01 +smooth + +8.535925096422151 +47.350332982539214 +428.92017728213347 +-202.27106618631132 +85.91988093297876 +0 +120 +absolute + + + +0.01 +smooth + +8.535925000147202 +47.35033293039889 +428.9200996770196 +-202.26617223199852 +85.92598442509058 +0 +120 +absolute + + + +0.01 +smooth + +8.535924904504526 +47.350332878564565 +428.92002236039235 +-202.26129763862485 +85.9320549278602 +0 +120 +absolute + + + +0.01 +smooth + +8.535924809533665 +47.350332827058594 +428.91994535318315 +-202.25644476528961 +85.93808975240913 +0 +120 +absolute + + + +0.01 +smooth + +8.535924715274147 +47.35033277590329 +428.91986867632244 +-202.2516159710921 +85.94408620985892 +0 +120 +absolute + + + +0.01 +smooth + +8.535924621765508 +47.35033272512098 +428.9197923507417 +-202.2468136151315 +85.95004161133119 +0 +120 +absolute + + + +0.01 +smooth + +8.53592452904729 +47.35033267473398 +428.9197163973717 +-202.24204005650725 +85.95595326794745 +0 +120 +absolute + + + +0.01 +smooth + +8.535924437159025 +47.35033262476463 +428.91964083714356 +-202.23729765431852 +85.96181849082932 +0 +120 +absolute + + + +0.01 +smooth + +8.535924346140254 +47.350332575235285 +428.91956569098846 +-202.2325887676648 +85.96763459109835 +0 +120 +absolute + + + +0.01 +smooth + +8.535924256030508 +47.35033252616822 +428.91949097983695 +-202.22791575564526 +85.97339887987604 +0 +120 +absolute + + + +0.01 +smooth + +8.535924166869323 +47.350332477585816 +428.91941672462053 +-202.22328097735925 +85.97910866828408 +0 +120 +absolute + + + +0.01 +smooth + +8.535924078696238 +47.35033242951037 +428.91934294626986 +-202.21868679190598 +85.9847612674439 +0 +120 +absolute + + + +0.01 +smooth + +8.535923991550787 +47.350332381964186 +428.91926966571606 +-202.21413555838478 +85.99035398847714 +0 +120 +absolute + + + +0.01 +smooth + +8.535923905472504 +47.35033233496964 +428.91919690389017 +-202.20962963589508 +85.99588414250536 +0 +120 +absolute + + + +0.01 +smooth + +8.535923820500932 +47.35033228854904 +428.91912468172325 +-202.205171383536 +86.0013490406501 +0 +120 +absolute + + + +0.01 +smooth + +8.535923736675604 +47.350332242724726 +428.9190530201462 +-202.20076316040698 +86.00674599403295 +0 +120 +absolute + + + +0.01 +smooth + +8.535923654036054 +47.35033219751901 +428.91898194009025 +-202.19640732560728 +86.01207231377548 +0 +120 +absolute + + + +0.01 +smooth + +8.535923572621819 +47.35033215295422 +428.91891146248616 +-202.19210623823614 +86.01732531099923 +0 +120 +absolute + + + +0.01 +smooth + +8.535923492472437 +47.35033210905271 +428.9188416082651 +-202.18786225739294 +86.02250229682579 +0 +120 +absolute + + + +0.01 +smooth + +8.53592341362744 +47.35033206583677 +428.91877239835793 +-202.18367774217694 +86.02760058237669 +0 +120 +absolute + + + +0.01 +smooth + +8.535923336126368 +47.350332023328725 +428.9187038536956 +-202.1795550516874 +86.03261747877349 +0 +120 +absolute + + + +0.01 +smooth + +8.535923260008754 +47.35033198155095 +428.9186359952094 +-202.17549654502363 +86.03755029713778 +0 +120 +absolute + + + +0.01 +smooth + +8.53592318531414 +47.35033194052574 +428.91856884383026 +-202.17150458128506 +86.04239634859115 +0 +120 +absolute + + + +0.01 +smooth + +8.535923112082054 +47.35033190027543 +428.91850242048906 +-202.16758151957086 +86.04715294425512 +0 +120 +absolute + + + +0.01 +smooth + +8.535923040352039 +47.350331860822344 +428.9184367461169 +-202.1637297189804 +86.0518173952513 +0 +120 +absolute + + + +0.01 +smooth + +8.535922970163627 +47.35033182218882 +428.91837184164484 +-202.15995153861292 +86.0563870127012 +0 +120 +absolute + + + +0.01 +smooth + +8.535922901556356 +47.35033178439718 +428.91830772800375 +-202.15624933756771 +86.0608591077264 +0 +120 +absolute + + + +0.01 +smooth + +8.53592283456976 +47.35033174746974 +428.91824442612483 +-202.15262547494416 +86.06523099144849 +0 +120 +absolute + + + +0.01 +smooth + +8.53592276924338 +47.35033171142885 +428.9181819569389 +-202.1490823098415 +86.06949997498901 +0 +120 +absolute + + + +0.01 +smooth + +8.535922705616745 +47.35033167629682 +428.918120341377 +-202.14562220135906 +86.07366336946956 +0 +120 +absolute + + + +0.01 +smooth + +8.535922643729396 +47.350331642095995 +428.91805960037027 +-202.1422475085961 +86.07771848601166 +0 +120 +absolute + + + +0.01 +smooth + +8.53592258362087 +47.35033160884869 +428.9179997548497 +-202.138960590652 +86.0816626357369 +0 +120 +absolute + + + +0.01 +smooth + +8.535922525330697 +47.35033157657723 +428.9179408257462 +-202.13576380662596 +86.08549312976683 +0 +120 +absolute + + + +0.01 +smooth + +8.535922468898422 +47.35033154530396 +428.9178828339908 +-202.13265951561732 +86.08920727922302 +0 +120 +absolute + + + +0.01 +smooth + +8.535922414363574 +47.350331515051195 +428.9178258005146 +-202.12965007672545 +86.09280239522704 +0 +120 +absolute + + + +0.01 +smooth + +8.53592236176569 +47.35033148584126 +428.91776974624855 +-202.12673784904956 +86.09627578890044 +0 +120 +absolute + + + +0.01 +smooth + +8.535922311144308 +47.350331457696484 +428.91771469212364 +-202.12392519168895 +86.09962477136483 +0 +120 +absolute + + + +0.01 +smooth + +8.535922262538966 +47.350331430639216 +428.91766065907086 +-202.121214463743 +86.10284665374172 +0 +120 +absolute + + + +0.01 +smooth + +8.535922215989194 +47.35033140469176 +428.9176076680214 +-202.11860802431093 +86.1059387471527 +0 +120 +absolute + + + +0.01 +smooth + +8.535922171534537 +47.350331379876444 +428.917555739906 +-202.11610823249205 +86.10889836271933 +0 +120 +absolute + + + +0.01 +smooth + +8.535922129197042 +47.350331356206055 +428.91750488579936 +-202.11371651593112 +86.11172394009175 +0 +120 +absolute + + + +0.01 +smooth + +8.535922087803794 +47.35033133303963 +428.91745444751774 +-202.11137065565688 +86.11449103783771 +0 +120 +absolute + + + +0.01 +smooth + +8.535922046648693 +47.35033130999187 +428.9174040436741 +-202.1090333509965 +86.11724504315862 +0 +120 +absolute + + + +0.01 +smooth + +8.535922005763323 +47.35033128708112 +428.917353711344 +-202.1067066114752 +86.11998371955498 +0 +120 +absolute + + + +0.01 +smooth + +8.535921965179268 +47.35033126432567 +428.91730348760274 +-202.1043924466181 +86.1227048305272 +0 +120 +absolute + + + +0.01 +smooth + +8.535921924928111 +47.350331241743845 +428.91725340952644 +-202.10209286595042 +86.12540613957565 +0 +120 +absolute + + + +0.01 +smooth + +8.535921885041438 +47.35033121935397 +428.9172035141903 +-202.0998098789973 +86.1280854102008 +0 +120 +absolute + + + +0.01 +smooth + +8.535921845550835 +47.35033119717439 +428.9171538386704 +-202.097545495284 +86.1307404059031 +0 +120 +absolute + + + +0.01 +smooth + +8.53592180648788 +47.35033117522341 +428.91710442004205 +-202.09530172433566 +86.13336889018294 +0 +120 +absolute + + + +0.01 +smooth + +8.535921767884163 +47.35033115351935 +428.91705529538086 +-202.09308057567748 +86.13596862654073 +0 +120 +absolute + + + +0.01 +smooth + +8.53592172977127 +47.35033113208054 +428.9170065017628 +-202.09088405883463 +86.13853737847697 +0 +120 +absolute + + + +0.01 +smooth + +8.535921692180775 +47.35033111092529 +428.91695807626314 +-202.08871418333229 +86.14107290949198 +0 +120 +absolute + + + +0.01 +smooth + +8.535921655144275 +47.35033109007194 +428.9169100559576 +-202.08657295869565 +86.14357298308629 +0 +120 +absolute + + + +0.01 +smooth + +8.535921618693349 +47.35033106953881 +428.916862477922 +-202.08446239444993 +86.14603536276029 +0 +120 +absolute + + + +0.01 +smooth + +8.53592158285958 +47.35033104934419 +428.9168153792316 +-202.0823845001203 +86.14845781201437 +0 +120 +absolute + + + +0.01 +smooth + +8.535921547674553 +47.35033102950645 +428.91676879696234 +-202.08034128523184 +86.15083809434897 +0 +120 +absolute + + + +0.01 +smooth + +8.535921513169853 +47.350331010043874 +428.91672276818974 +-202.07833475930985 +86.15317397326454 +0 +120 +absolute + + + +0.01 +smooth + +8.535921479377064 +47.35033099097481 +428.91667732998957 +-202.07636693187956 +86.15546321226152 +0 +120 +absolute + + + +0.01 +smooth + +8.535921446327773 +47.35033097231758 +428.91663251943726 +-202.0744398124661 +86.15770357484033 +0 +120 +absolute + + + +0.01 +smooth + +8.535921414053561 +47.35033095409049 +428.91658837360865 +-202.07255541059462 +86.15989282450134 +0 +120 +absolute + + + +0.01 +smooth + +8.535921382586016 +47.35033093631187 +428.91654492957923 +-202.07071573579032 +86.16202872474506 +0 +120 +absolute + + + +0.01 +smooth + +8.535921351956715 +47.35033091900004 +428.9165022244245 +-202.06892279757835 +86.16410903907183 +0 +120 +absolute + + + +0.01 +smooth + +8.53592132219725 +47.35033090217332 +428.91646029522025 +-202.067178605484 +86.16613153098214 +0 +120 +absolute + + + +0.01 +smooth + +8.535921293339202 +47.350330885850056 +428.91641917904224 +-202.06548516903234 +86.16809396397639 +0 +120 +absolute + + + +0.01 +smooth + +8.535921265414155 +47.35033087004854 +428.9163789129659 +-202.06384449774865 +86.16999410155503 +0 +120 +absolute + + + +0.01 +smooth + +8.535921238453696 +47.3503308547871 +428.916339534067 +-202.06225860115808 +86.17182970721848 +0 +120 +absolute + + + +0.01 +smooth + +8.535921212489406 +47.35033084008408 +428.91630107942103 +-202.0607294887858 +86.17359854446714 +0 +120 +absolute + + + +0.01 +smooth + +8.535921187552871 +47.35033082595778 +428.9162635861037 +-202.05925917015702 +86.17529837680144 +0 +120 +absolute + + + +0.01 +smooth + +8.535921163675678 +47.35033081242653 +428.91622709119065 +-202.05784965479685 +86.17692696772185 +0 +120 +absolute + + + +0.01 +smooth + +8.535921140889407 +47.350330799508654 +428.91619163175756 +-202.05650295223057 +86.17848208072876 +0 +120 +absolute + + + +0.01 +smooth + +8.535921119225643 +47.35033078722246 +428.9161572448799 +-202.05522107198334 +86.1799614793226 +0 +120 +absolute + + + +0.01 +smooth + +8.535921098715972 +47.35033077558629 +428.91612396763344 +-202.0540060235803 +86.18136292700379 +0 +120 +absolute + + + +0.01 +smooth + +8.53592107939198 +47.35033076461846 +428.91609183709386 +-202.05285981654674 +86.18268418727278 +0 +120 +absolute + + + +0.01 +smooth + +8.535921061285245 +47.35033075433729 +428.9160608903366 +-202.05178446040773 +86.18392302362997 +0 +120 +absolute + + + +0.01 +smooth + +8.53592104442736 +47.350330744761116 +428.9160311644374 +-202.0507819646885 +86.18507719957582 +0 +120 +absolute + + + +0.01 +smooth + +8.535921028849902 +47.35033073590824 +428.91600269647193 +-202.04985433891426 +86.18614447861073 +0 +120 +absolute + + + +0.01 +smooth + +8.535921014584458 +47.35033072779699 +428.9159755235158 +-202.04900359261018 +86.18712262423513 +0 +120 +absolute + + + +0.01 +smooth + +8.535921001662615 +47.35033072044569 +428.9159496826445 +-202.04823173530139 +86.18800939994946 +0 +120 +absolute + + + +0.01 +smooth + +8.535920990115953 +47.35033071387267 +428.91592521093384 +-202.04754077651313 +86.18880256925412 +0 +120 +absolute + + + +0.01 +smooth + +8.535920979976058 +47.350330708096244 +428.9159021454595 +-202.04693272577063 +86.18949989564955 +0 +120 +absolute + + + +0.01 +smooth + +8.535920971274518 +47.35033070313474 +428.9158805232969 +-202.046409592599 +86.1900991426362 +0 +120 +absolute + + + +0.01 +smooth + +8.535920963820168 +47.35033069888012 +428.91586014103234 +-202.0459601865295 +86.19061328986577 +0 +120 +absolute + + + +0.01 +smooth + +8.535920956598956 +47.3503306947575 +428.9158399138629 +-202.04552450006054 +86.19111156080797 +0 +120 +absolute + + + +0.01 +smooth + +8.53592094948539 +47.35033069069577 +428.9158197260562 +-202.04509511502252 +86.19160251679735 +0 +120 +absolute + + + +0.01 +smooth + +8.53592094248338 +47.35033068669715 +428.9157996021183 +-202.04467227707067 +86.19208588251996 +0 +120 +absolute + + + +0.01 +smooth + +8.535920935596826 +47.350330682763904 +428.9157795665556 +-202.04425623186043 +86.192561382662 +0 +120 +absolute + + + +0.01 +smooth + +8.535920928829643 +47.35033067889832 +428.91575964387454 +-202.04384722504707 +86.1930287419096 +0 +120 +absolute + + + +0.01 +smooth + +8.535920922185724 +47.35033067510264 +428.9157398585812 +-202.04344550228603 +86.1934876849489 +0 +120 +absolute + + + +0.01 +smooth + +8.535920915668987 +47.350330671379155 +428.91572023518233 +-202.0430513092327 +86.19393793646606 +0 +120 +absolute + + + +0.01 +smooth + +8.535920909283321 +47.35033066773008 +428.9157007981837 +-202.04266489154224 +86.19437922114717 +0 +120 +absolute + + + +0.01 +smooth + +8.535920903032643 +47.35033066415768 +428.91568157209184 +-202.0422864948701 +86.19481126367842 +0 +120 +absolute + + + +0.01 +smooth + +8.535920896920857 +47.35033066066426 +428.91566258141324 +-202.04191636487172 +86.19523378874595 +0 +120 +absolute + + + +0.01 +smooth + +8.53592089095186 +47.350330657252016 +428.91564385065385 +-202.0415547472022 +86.19564652103585 +0 +120 +absolute + + + +0.01 +smooth + +8.535920885129567 +47.35033065392325 +428.9156254043201 +-202.0412018875171 +86.19604918523433 +0 +120 +absolute + + + +0.01 +smooth + +8.535920879457874 +47.35033065068021 +428.91560726691836 +-202.04085803147166 +86.19644150602747 +0 +120 +absolute + + + +0.01 +smooth + +8.535920873940693 +47.350330647525176 +428.9155894629551 +-202.04052342472136 +86.19682320810145 +0 +120 +absolute + + + +0.01 +smooth + +8.535920868581927 +47.350330644460385 +428.91557201693644 +-202.04019831292143 +86.1971940161424 +0 +120 +absolute + + + +0.01 +smooth + +8.535920863385478 +47.35033064148809 +428.9155549533686 +-202.03988294172726 +86.19755365483647 +0 +120 +absolute + + + +0.01 +smooth + +8.535920858355253 +47.350330638610586 +428.91553829675826 +-202.0395775567942 +86.19790184886979 +0 +120 +absolute + + + +0.01 +smooth + +8.535920853495158 +47.35033063583008 +428.9155220716113 +-202.03928240377752 +86.19823832292852 +0 +120 +absolute + + + +0.01 +smooth + +8.535920848809093 +47.35033063314888 +428.9155063024341 +-202.03899772833262 +86.19856280169873 +0 +120 +absolute + + + +0.01 +smooth + +8.535920844300968 +47.35033063056922 +428.9154910137332 +-202.0387237761149 +86.19887500986663 +0 +120 +absolute + + + +0.01 +smooth + +8.535920839974688 +47.350330628093374 +428.91547623001475 +-202.03846079277963 +86.19917467211839 +0 +120 +absolute + + + +0.01 +smooth + +8.535920835834155 +47.350330625723586 +428.9154619757851 +-202.03820902398218 +86.19946151314005 +0 +120 +absolute + + + +0.01 +smooth + +8.535920831883274 +47.350330623462135 +428.9154482755505 +-202.03796871537799 +86.19973525761783 +0 +120 +absolute + + + +0.01 +smooth + +8.535920828125953 +47.350330621311265 +428.9154351538173 +-202.03774011262226 +86.19999563023785 +0 +120 +absolute + + + +0.01 +smooth + +8.535920824566096 +47.35033061927324 +428.91542263509194 +-202.0375234613704 +86.20024235568627 +0 +120 +absolute + + + +0.01 +smooth + +8.535920821207606 +47.35033061735033 +428.91541074388044 +-202.03731900727774 +86.2004751586492 +0 +120 +absolute + + + +0.01 +smooth + +8.53592081805439 +47.350330615544785 +428.9153995046894 +-202.03712699599967 +86.20069376381278 +0 +120 +absolute + + + +0.01 +smooth + +8.535920815110352 +47.35033061385886 +428.91538894202506 +-202.03694767319152 +86.20089789586316 +0 +120 +absolute + + + +0.01 +smooth + +8.535920812379395 +47.35033061229483 +428.91537908039345 +-202.0367812845086 +86.2010872794865 +0 +120 +absolute + + + +0.01 +smooth + +8.535920809865427 +47.35033061085494 +428.9153699443013 +-202.03662807560633 +86.20126163936894 +0 +120 +absolute + + + +0.01 +smooth + +8.53592080757235 +47.35033060954146 +428.91536155825463 +-202.03648829213995 +86.20142070019658 +0 +120 +absolute + + + +0.01 +smooth + +8.535920805504073 +47.35033060835665 +428.91535394675986 +-202.03636217976495 +86.20156418665559 +0 +120 +absolute + + + +0.01 +smooth + +8.535920803664496 +47.350330607302766 +428.9153471343232 +-202.03624998413653 +86.20169182343213 +0 +120 +absolute + + + +0.01 +smooth + +8.535920802057529 +47.35033060638206 +428.9153411454511 +-202.0361519509101 +86.2018033352123 +0 +120 +absolute + + + +0.01 +smooth + +8.535920800687073 +47.35033060559681 +428.9153360046498 +-202.03606832574104 +86.20189844668225 +0 +120 +absolute + + + +0.01 +smooth + +8.535920799557035 +47.35033060494926 +428.91533173642557 +-202.03599935428468 +86.20197688252816 +0 +120 +absolute + + + +0.01 +smooth + +8.535920798671318 +47.35033060444167 +428.91532836528484 +-202.03594528219634 +86.20203836743615 +0 +120 +absolute + + + +0.01 +smooth + +8.535920798033828 +47.35033060407632 +428.9153259157337 +-202.03590635513137 +86.20208262609232 +0 +120 +absolute + + + +0.01 +smooth + +8.535920797648473 +47.35033060385544 +428.9153244122788 +-202.03588281874514 +86.20210938318284 +0 +120 +absolute + + + +0.01 +smooth + +8.535920797519152 +47.350330603781316 +428.91532387942607 +-202.035874918693 +86.2021183633939 +0 +120 +absolute + + + + + + diff --git a/parameter-learning_nd_disc/my_package nd.tar.gz b/parameter-learning_nd_disc/my_package nd.tar.gz new file mode 100644 index 0000000..9d4674f Binary files /dev/null and b/parameter-learning_nd_disc/my_package nd.tar.gz differ diff --git a/parameter-learning_nd_disc/plot_3d.py b/parameter-learning_nd_disc/plot_3d.py new file mode 100644 index 0000000..3f89e04 --- /dev/null +++ b/parameter-learning_nd_disc/plot_3d.py @@ -0,0 +1,14 @@ +import numpy as np +from matplotlib import pyplot as plt +from mpl_toolkits.mplot3d import Axes3D + +X = np.arange(0,10,1) +Y = np.arange(0,10,1) +X, Y = np.meshgrid(X,Y) +Z = np.atleast_2d(np.arange(0,10,0.1)).reshape((10,10)) +print(X) +print(Z) +fig = plt.figure() +ax = Axes3D(fig) +ax.plot_surface(X, Y, Z, cmap = 'rainbow') +plt.show() \ No newline at end of file diff --git a/parameter-learning_nd_disc/plot_quad_camera_trajectory.py b/parameter-learning_nd_disc/plot_quad_camera_trajectory.py new file mode 100755 index 0000000..340bd07 --- /dev/null +++ b/parameter-learning_nd_disc/plot_quad_camera_trajectory.py @@ -0,0 +1,192 @@ +import numpy as np +from scipy.interpolate import pchip_interpolate +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D + + +def create_quad_camera_contour_plots(trajGen, trajectory, **kwargs): + + file = None + for key, value in kwargs.iteritems(): + if key == "file": + file = value + + end_time = trajectory[trajGen.endTimeStateIndex, -1] + print("end time = {}".format(end_time)) + print("T = {}".format(trajGen.T)) + theta = trajectory[trajGen.thetaStateIndex, :] + time = np.arange(0, trajGen.nStages + 1) * trajGen.T + # ref_pos = trajGen.pos_spline(theta) + ref_pos = np.zeros((trajGen.nStages + 1, 3)) + ref_pos[:, 0] = pchip_interpolate(trajGen.theta, trajGen.ref_positions[:, 0], theta) + ref_pos[:, 1] = pchip_interpolate(trajGen.theta, trajGen.ref_positions[:, 1], theta) + ref_pos[:, 2] = pchip_interpolate(trajGen.theta, trajGen.ref_positions[:, 2], theta) + ref_yaw = pchip_interpolate(trajGen.theta, trajGen.ref_yaw, theta) + ref_pitch = pchip_interpolate(trajGen.theta, trajGen.ref_pitch, theta) + if trajGen.velocity_weight != 0: + ref_vel = pchip_interpolate(trajGen.theta, trajGen.ref_velocities, theta) + no_keyframes = trajGen.keyframes.shape[0] + + keyframe_theta_times = np.zeros(no_keyframes, dtype=int) + for i in range(0, no_keyframes): + tmp = np.abs(theta - trajGen.theta_of_keyframes[i]) + idx = np.argmin(tmp) # index of closest value + keyframe_theta_times[i] = idx + + keyframe_times = np.zeros(no_keyframes, dtype=int) + for i in range(no_keyframes): + tmp = np.sum(np.square(np.abs((trajectory[trajGen.posStateIndices, :].transpose() - trajGen.keyframes[i, :]).transpose())), axis=0) + idx = np.argmin(tmp) # index of closest value + keyframe_times[i] = idx + + posPlot = trajectory[trajGen.posStateIndices, :] + velVectors = trajectory[trajGen.velStateIndices, :] + velProfile = np.linalg.norm(velVectors, axis=0) + accVectors = trajectory[trajGen.accStateIndices, :] + inputVectors = trajectory[trajGen.inputIndices, :] + + yawAngle = trajectory[trajGen.yawStateIndex, :] + pitchAngle = trajectory[trajGen.pitchStateIndex, :] + + keyorientation_times = np.zeros(no_keyframes, dtype=int) + orientations = np.vstack((yawAngle, pitchAngle)) + for i in range(no_keyframes): + tmp = np.sum(np.square(np.abs((orientations.transpose() - trajGen.keyorientations[i, :]).transpose())), axis=0) + idx = np.argmin(tmp) + keyorientation_times[i] = idx + + yawAngleVelocity = trajectory[trajGen.yawVelStateIndex, :] + pitchAngleVelocity = trajectory[trajGen.pitchVelStateIndex, :] + yawAngleAcc = trajectory[trajGen.yawAccStateIndex, :] + pitchAngleAcc = trajectory[trajGen.pitchAccStateIndex, :] + + keytimes = trajGen.keytimes + velocity_profile = trajGen.velocity_profile + + keyframes = np.squeeze(np.asarray(trajGen.keyframes.T)) + keyorientations = np.squeeze(np.asarray(trajGen.keyorientations.T)) + + fig = plt.figure() + ax = fig.add_subplot(331, projection='3d') + ax.plot(posPlot[0, :], posPlot[1, :], posPlot[2, :]) + ax.plot(ref_pos[:, 0], ref_pos[:, 1], ref_pos[:, 2], 'b--') + ax.scatter(keyframes[0, :], keyframes[1, :], keyframes[2, :], c="blue") + ax.set_title("3D Position") + + ax = fig.add_subplot(332) + thetaTime, = ax.plot(time, theta) + thetaTimeRef, = ax.plot(trajGen.ref_timings, trajGen.theta, 'b--') + ax.scatter(keytimes, trajGen.theta_of_keyframes, c="blue") + # ax.legend([thetaTime, thetaTimeRef], ["theta", "theta-ref"]) + # ax.legend([thetaTime, thetaTimeRef], ["t", "tr"]) + ax.set_title("Theta") + + ax = fig.add_subplot(333) + x, = ax.plot(time, posPlot[0, :]) + y, = ax.plot(time, posPlot[1, :]) + z, = ax.plot(time, posPlot[2, :]) + xref, = ax.plot(time, ref_pos[:, 0], 'b--') + yref, = ax.plot(time, ref_pos[:, 1], 'g--') + zref, = ax.plot(time, ref_pos[:, 2], 'r--') + ax.scatter(time[keyframe_theta_times], keyframes[0, :], c="blue") + ax.scatter(time[keyframe_theta_times], keyframes[1, :], c="green") + ax.scatter(time[keyframe_theta_times], keyframes[2, :], c="red") + # ax.scatter(steps[keyframe_times], posPlot[0, keyframe_times], c="blue", marker="s") + # ax.scatter(steps[keyframe_times], posPlot[1, keyframe_times], c="green", marker="s") + # ax.scatter(steps[keyframe_times], posPlot[2, keyframe_times], c="red", marker="s") + # ax.legend([x, y, z, xref, yref, zref], ["x", "y", "z", "x-ref", "y-ref", "z-ref"]) + # ax.legend([x, y, z, xref, yref, zref], ["x", "y", "z", "xr", "yr", "zr"]) + ax.set_title("Position") + + ax = fig.add_subplot(334) + quadYaw, = ax.plot(time, yawAngle[:], 'r') + pitch, = ax.plot(time, pitchAngle[:], 'c') + refYaw, = ax.plot(time, ref_yaw, 'r--') + refPitch, = ax.plot(time, ref_pitch, 'c--') + ax.scatter(time[keyframe_theta_times], keyorientations[0, :], c="red") + ax.scatter(time[keyframe_theta_times], keyorientations[1, :], c="cyan") + # ax.scatter(steps[keyorientation_times], yawAngle[keyorientation_times], c="red", marker="s") + # ax.scatter(steps[keyorientation_times], pitchAngle[keyorientation_times], c="cyan", marker="s") + # ax.legend([gimbalYaw, quadYaw, overallYaw, pitch, refYaw, refPitch], ["g. yaw", "q. yaw", "yaw", "g. pitch", "yaw-ref", "pitch-ref"]) + # ax.legend([gimbalYaw, quadYaw, overallYaw, pitch, refYaw, refPitch], ["gy", "qy", "y", "gp", "yr", "pr"]) + ax.set_title("Camera Orientation") + + ax = fig.add_subplot(335) + vx, = ax.plot(time, velVectors[0, :]) + vy, = ax.plot(time, velVectors[1, :]) + vz, = ax.plot(time, velVectors[2, :]) + pv, = ax.plot(time, velProfile) + ax.plot(time, yawAngleVelocity) + ax.plot(time, pitchAngleVelocity) + if trajGen.velocity_weight != 0: + vref, = ax.plot(time, ref_vel, 'c--') + ax.scatter(time[keyframe_theta_times], velocity_profile, c="cyan") + # ax.legend([vx, vy, vz, pv, vref], ["vx", "vy", "vz", "vel-prof", "v-ref"]) + # ax.legend([vx, vy, vz, pv, vref], ["vx", "vy", "vz", "vp", "vr"]) + ax.set_title("Velocity") + + ax = fig.add_subplot(336) + ax.plot(time, accVectors[0, :]) + ax.plot(time, accVectors[1, :]) + ax.plot(time, accVectors[2, :]) + ax.plot(time, yawAngleAcc) + ax.plot(time, pitchAngleAcc) + ax.set_title("Acceleration") + + # do not print last input as it is meaningless + ax = fig.add_subplot(337) + ax.plot(time, inputVectors[0, :]) + ax.plot(time, inputVectors[1, :]) + ax.plot(time, inputVectors[2, :]) + ax.plot(time, inputVectors[3, :]) + ax.plot(time, inputVectors[4, :]) + ax.plot(time, inputVectors[5, :]) + ax.set_title("Input") + + ax = fig.add_subplot(338) + ax.plot(trajGen.theta, trajGen.ref_positions[:, 0], 'b--') + ax.plot(trajGen.theta, trajGen.ref_positions[:, 1], 'g--') + ax.plot(trajGen.theta, trajGen.ref_positions[:, 2], 'r--') + for i in range(0, trajGen.old_progress_id.shape[0]): + k = trajGen.old_progress_id[i] + if k >= trajGen.nStages - (trajGen.fitlength / 2): + fitrange = np.arange(trajGen.nStages + 1 - trajGen.fitlength, trajGen.nStages + 1, dtype=int) + elif k > (trajGen.fitlength / 2): + fitrange = np.arange(k - (trajGen.fitlength / 2), k + (trajGen.fitlength / 2), dtype=int) + else: + fitrange = np.arange(0, trajGen.fitlength, dtype=int) + + quad_fit_x = np.polyval(trajGen.param[0:3, i],trajGen.theta[fitrange]) + ax.plot(trajGen.theta[fitrange],quad_fit_x,'b') + quad_fit_y = np.polyval(trajGen.param[3:6, i],trajGen.theta[fitrange]) + ax.plot(trajGen.theta[fitrange],quad_fit_y,'g') + quad_fit_z = np.polyval(trajGen.param[6:9, i],trajGen.theta[fitrange]) + ax.plot(trajGen.theta[fitrange],quad_fit_z,'r') + ax.set_title("Local Quadratic Fit Plot") + + ax = fig.add_subplot(339) + ax.plot(trajGen.theta, trajGen.ref_yaw, 'b--') + ax.plot(trajGen.theta, trajGen.ref_pitch, 'g--') + for i in range(0, trajGen.old_progress_id.shape[0]): + k = trajGen.old_progress_id[i] + if k >= trajGen.nStages - (trajGen.fitlength / 2): + fitrange = np.arange(trajGen.nStages + 1 - trajGen.fitlength, trajGen.nStages + 1, dtype=int) + elif k > (trajGen.fitlength / 2): + fitrange = np.arange(k - (trajGen.fitlength / 2), k + (trajGen.fitlength / 2), dtype=int) + else: + fitrange = np.arange(0, trajGen.fitlength, dtype=int) + + quad_fit_yaw = np.polyval(trajGen.param[22:25, i],trajGen.theta[fitrange]) + ax.plot(trajGen.theta[fitrange],quad_fit_yaw,'b') + quad_fit_pitch = np.polyval(trajGen.param[25:28, i],trajGen.theta[fitrange]) + ax.plot(trajGen.theta[fitrange],quad_fit_pitch,'g') + ax.set_title('Gimbal Local Quadratic Fit') + + if file is None: + plt.show() + else: + f = plt.gcf() + default_size = f.get_size_inches() + f.set_size_inches((default_size[0] * 4, default_size[1] * 3)) + plt.savefig('./plots/' + file +'.png') + plt.close(fig) \ No newline at end of file diff --git a/parameter-learning_nd_disc/plots/1_record_2.h5_mpcc.png b/parameter-learning_nd_disc/plots/1_record_2.h5_mpcc.png new file mode 100755 index 0000000..14501a3 Binary files /dev/null and b/parameter-learning_nd_disc/plots/1_record_2.h5_mpcc.png differ diff --git a/parameter-learning_nd_disc/plots/saffa.h5_mpcc.png b/parameter-learning_nd_disc/plots/saffa.h5_mpcc.png new file mode 100755 index 0000000..5080e5e Binary files /dev/null and b/parameter-learning_nd_disc/plots/saffa.h5_mpcc.png differ diff --git a/parameter-learning_nd_disc/pref_GP.py b/parameter-learning_nd_disc/pref_GP.py new file mode 100755 index 0000000..2a48e1c --- /dev/null +++ b/parameter-learning_nd_disc/pref_GP.py @@ -0,0 +1,683 @@ +from time import time +# from copy import copy +import pdb + +from numpy import * +import numpy as np +import scipy as sci +import h5py +import sklearn.gaussian_process as gp + +from scipy.stats import norm +from numpy.linalg import inv, LinAlgError +from scipy.optimize import fmin_bfgs, fmin_tnc, minimize +from kernel import GaussianKernel_ard, GaussianKernel_iso, MaternKernel3, MaternKernel5 +from QuadCameraContourTrajectory import QuadCameraContourTrajectory +from generate_kml_file import generate_kml_file +from ei import sample_next_hyperparameter, expected_improvement + + +############################################################################# +# this implementation of erf, cdf and pdf is substantially faster than +# the scipy implementation (a C implementation would probably be faster yet) +############################################################################# +# +# from: http://www.cs.princeton.edu/introcs/21function/ErrorFunction.java.html +# Implements the Gauss error function. +# erf(z) = 2 / sqrt(pi) * integral(exp(-t*t), t = 0..z) +# +# fractional error in math formula less than 1.2 * 10 ^ -7. +# although subject to catastrophic cancellation when z in very close to 0 +# from Chebyshev fitting formula for erf(z) from Numerical Recipes, 6.2 +def erf(z): + t = 1.0 / (1.0 + 0.5 * abs(z)) + # use Horner's method + ans = 1 - t * exp( -z*z - 1.26551223 + + t * ( 1.00002368 + + t * ( 0.37409196 + + t * ( 0.09678418 + + t * (-0.18628806 + + t * ( 0.27886807 + + t * (-1.13520398 + + t * ( 1.48851587 + + t * (-0.82215223 + + t * ( 0.17087277)))))))))) + if z >= 0.0: + return ans + else: + return -ans + +def CDF(x): + return 0.5 * (1 + erf((x) * 0.707106)) + +def PDF(x): + return exp(-(x**2/2)) * 0.398942 + + + +class GaussianProcess(object): + + def __init__(self, kernel, X=None, Y=None, prior=None, noise=.1, gnoise=1e-4, G=None): + """ + Initialize a Gaussian Process. + + @param kernel: kernel object to use + @param prior: object defining the GP prior on the mean. must + be a descendant of GPMeanPrior + @param noise: noise hyperparameter sigma^2_n + @param X: initial training data + @param Y: initial observations + """ + self.kernel = kernel + self.prior = prior + self.noise = noise + self.gnoise = array(gnoise, ndmin=1) + + self.R = None + + if (X is None and Y is not None) or (X is not None and Y is None): + raise ValueError + + self.X = zeros((0,0)) + self.Y = zeros((0)) + + self.G = None + + self.name = 'GP' # for legend + self.starttime = time() # for later analysis + + if X is not None: + self.addData(X, Y) + + self.augR = None + self.augL = None + self.augX = None + + # mostly for testing/logging + self.selected = None + self.endtime = None + + # if prior is None: + # print 'prior is None' + # else: + # print 'prior is NOT None' + # + # if self.prior is None: + # print 'self.prior is None' + # else: + # print 'self.prior is NOT None' + + + def _computeCorrelations(self, X): + """ compute correlations between data """ + M, (N, D) = len(self.X), X.shape + r = eye(N, dtype=float) + self.noise + m = empty((M,N)) + + for i in range(N): + for j in range(i): + r[i,j] = r[j,i] = self.kernel.cov(X[i], X[j]) + + for i in range(M): + for j in range(N): + m[i,j] = self.kernel.cov(self.X[i], X[j]) + + return r, m + + def _computeAugCorrelations(self, X): + """ compute correlations between data """ + + M, (N,D) = len(self.augX), X.shape + r = eye(N, dtype=float) + self.noise + m = empty((M,N)) + + for i in range(N): + for j in range(i): + r[i,j] = r[j,i] = self.kernel.cov(X[i], X[j]) + + for i in range(M): + for j in range(N): + m[i,j] = self.kernel.cov(self.augX[i], X[j]) + + return r, m + + + def posterior(self, X, getvar=True): + """ Get posterior mean and variance for a point X. """ + if len(self.X)==0: + if self.prior is None: + if getvar: + return 0.0, 1.0 + else: + return 0.0 + else: + if getvar: + return self.prior.mu(X), 1.0 + else: + return self.prior.mu(X) + + X = array(X, copy=False, dtype=float, ndmin=2) + M, (N,D) = len(self.X), X.shape + + m = 0.0 + if self.prior is not None: + m = self.prior.mu(X) + assert isscalar(m) + + d = self.Y-m + r = empty((M, N)) + for i in range(M): + for j in range(N): + r[i,j] = self.kernel.cov(self.X[i], X[j]) + + # calculate the mean. + Lr = linalg.solve(self.L, r) + mu = m + dot(Lr.T, linalg.solve(self.L,d)) + + if getvar: + # calculate the variance. + if self.augL is None: + sigma2 = (1 + self.noise) - sum(Lr**2, axis=0) + else: + M, (N,D) = len(self.augX), X.shape + r = empty((M, N)) + for i in range(M): + for j in range(N): + r[i,j] = self.kernel.cov(self.augX[i], X[j]) + Lr = linalg.solve(self.augL, r) + sigma2 = (1 + self.noise) - sum(Lr**2, axis=0) + sigma2 = clip(sigma2, 10e-8, 10) + + return mu[0], sigma2[0] + else: + return mu[0] + + + def posteriors(self, X): + """ + get arrays of posterior values for the array in X + """ + M = [] + V = [] + for x in X: + if isscalar(x): + m, v = self.posterior(array([x])) + else: + m, v = self.posterior(x) + M.append(m) + V.append(v) + return array(M), array(V) + + + def mu(self, x): + """ + get posterior mean for a point x + + NOTE: if you are getting the variance as well, this is less efficient + than using self.posterior() + """ + return self.posterior(x, getvar=False) + + + def negmu(self, x): + """ + needed occasionally for optimization + """ + nm = -self.mu(x) + # if self.prior is not None and len(self.X)==0: + # print 'no data, using prior = %.4f'%nm + return nm + + + def addData(self, X, Y, G=None): + """ + Add new data to model and update. + + We assume that X is an (N,D)-array, Y is an N-vector, and G is either + an (N,D)-array or None. Further, if X or G are a single D-dimensional + vector these will be interpreted as (1,D)-arrays, i.e. one observation. + """ + X = array(X, copy=False, dtype=float, ndmin=2) + Y = array(Y, copy=False, dtype=float, ndmin=1).flatten() + G = array(G, copy=False, dtype=float, ndmin=2) if (G is not None) else None + + assert len(Y) == len(X), 'wrong number of Y-observations given' + assert G is None or G.shape == X.shape, 'wrong number (or dimensionality) of gradient-observations given' + # print '(', len(self.X), self.G, G, ')' + # assert not (len(self.X) > 0 and self.G is not None and G is None), 'gradients must either be always or never given' + + # this just makes sure that if we used the default gradient noise for + # each dimension it gets lengthened to the proper size. + if len(self.X) == 0 and len(self.gnoise) == 1: + self.gnoise = tile(self.gnoise, X.shape[1]) + + # compute the correlations between our data points. + r, m = \ + self._computeCorrelations(X) if (G is None) else \ + self._computeCorrelationsWithGradients(X) + + if len(self.X) == 0: + self.X = copy(X) + self.Y = copy(Y) + self.G = copy(G) if (G is not None) else None + self.R = r + self.L = linalg.cholesky(self.R) + else: + self.X = r_[self.X, X] + self.Y = r_[self.Y, Y] + self.G = r_[self.G, G] if (G is not None) else None + self.R = r_[c_[self.R, m], c_[m.T, r]] + + z = linalg.solve(self.L, m) + d = linalg.cholesky(r - dot(z.T, z)) + self.L = r_[c_[self.L, zeros(z.shape)], c_[z.T, d]] + # print '\nself.G =', G, ', for which selfG is None is', (self.G is None) + + + def getYfromX(self, qx): + """ + get the (first) Y value for a given training datum X. return None if x + is not found. + """ + for x, y in zip(self.X, self.Y): + if all(qx==x): + return y + return None + + def done(self, x): + """ + indication that the GP has been terminated and that a final point has + been selected (mostly relevant for logging) + """ + self.selected = x + self.endtime = time() + + +class PrefGaussianProcess(GaussianProcess): + """ + Like a regular Gaussian Process, but trained on preference data. Note + that you cannot (currently) add non-preference data. This is because I + haven't gotten around to it, not because it's impossible. + """ + def __init__(self, kernel, prefs=None, **kwargs): + super(PrefGaussianProcess, self).__init__(kernel, **kwargs) + + self.preferences = np.empty((0,0,0)) + self.C = None + self.loss = [] + + if prefs is not None: + self.addPreferences(prefs) + def predict(self): + return mu, sigma + + #based on EI function to find the next parameter + def find_newpoint(self, p_bounds): + return sample_next_hyperparameter(expected_improvement, self.X[np.argmax(self.Y)], self.kernel, self, self.Y, greater_is_better=True, bounds= p_bounds, n_restarts=50) + + #now just want to approximate -(x-2)^2 x=2; further design an user-input + def build_preference(self, x_new): + #input: x_new: new parameter + #output: preference (data type: np_array2d) + def f(x): + return (x[0] - 2)**2 + (x[1] - 1)**2 + x_new = np.ravel(x_new) + x_min = self.X[np.argmin(f(self.X))] + + pref = np.zeros((2,1,len(x_new))) + if (f(x_new) < f(x_min)): + pref[0,0,:] = x_new + pref[1,0,:] = x_min + elif (f(x_new) > f(x_min)): + pref[0,0,:] = x_min + pref[1,0,:] = x_new + else: #no preference + print('finishes') + return np.array([]) + return pref + + def addPreferences(self, prefs, showPrefLikelihood=False): + """ + Add a set of preferences to the GP and update. + + @param prefs: sequence of preference triples (xv, xu) where xv + is a datum preferred to xu + + first dimension is comparison, second is num of preferences, third is num of parameters per sample + """ + + # add new preferences + if len(self.preferences) == 0: + self.preferences = prefs + else: + self.preferences = np.concatenate((self.preferences,prefs),axis=1) + + x2ind = {}#dictionary + ind = 0 + + for i in range(0,self.preferences.shape[1]): + v = tuple(self.preferences[0,i,:]) + u = tuple(self.preferences[1,i,:]) + if v not in x2ind: + x2ind[v] = ind + ind += 1 + if u not in x2ind: + x2ind[u] = ind + ind += 1 + + #generate new X + newX = np.zeros((0,prefs.shape[2])) + for x in x2ind: + newX = np.concatenate((newX, np.asarray(x).reshape(1,-1)), axis = 0) + + # update X, R + self.X = np.zeros((0,0)) + r, m = self._computeCorrelations(newX) + self.X = newX + self.R = r + self.L = np.linalg.cholesky(self.R) + + # use existing Ys as starting point for optimizer + start = np.empty((len(x2ind),1)) + if len(self.Y) > 0: + #x_new in new preference has been used before, there is no new sample be added + if(len(self.Y) == len(x2ind)): + start = self.Y + #x_new has never been used + else: + start = np.concatenate((self.Y, np.atleast_2d(np.random.uniform(np.min(self.Y), np.max(self.Y)))),axis=0) + else: #initialization for the first iteration + for i in range(0,len(x2ind)): + start[i] = np.random.uniform(0,5) + + # optimize S to find a good Y + # self.Y = fmin_bfgs(S, start, args=(prefinds, self.L), epsilon=0.1, maxiter=30, disp=0) + + def S(x, useC=False): + """ + the MAP functional to be minimized + """ + logCDFs = 0. + sigma = sqrt(self.noise) + epsilon = 1e-10 + Z = sqrt(2) * sigma + for i in range(0,self.preferences.shape[1]): + s1 = x2ind[tuple(self.preferences[0,i,:])] + s2 = x2ind[tuple(self.preferences[1,i,:])] + logCDFs += log(CDF((x[s1]-x[s2])/Z)+epsilon) + + Lx = linalg.solve(self.L, x) + #print(Lx.shape) + val = -logCDFs + dot(Lx, Lx)/2.0 + if not isfinite(val): + print ('non-finite val!') + pdb.set_trace() + # print '\n***** val =', val + return val + + self.Y = fmin_bfgs(S, start, disp=0).reshape(-1,1) #record MAP + + + def Q(var): + """ + optimize hyperparameter(eg: noise sigma) + """ + logCDFs = 0. + sigma = var + epsilon = 1e-10 + Z = sqrt(2) * sigma + for i in range(0,self.preferences.shape[1]): + s1 = x2ind[tuple(self.preferences[0,i,:])] + s2 = x2ind[tuple(self.preferences[1,i,:])] + logCDFs += log(CDF((self.Y[s1]-self.Y[s2])/Z)+epsilon) + + Lx = linalg.solve(self.L, self.Y.ravel()) + + #C = eye(len(self.X), dtype=float) * 5 + C = zeros((len(self.X), len(self.X))) + for i in range(len(self.X)): + for j in range(len(self.X)): + for k in range(self.preferences.shape[1]): + r = self.preferences[0,k,:] + c = self.preferences[1,k,:] + alpha = 0 + if all(r==self.X[i]) and all(c==self.X[j]): + alpha = -1 + elif all(r==self.X[j]) and all(c==self.X[i]): + alpha = -1 + elif all(r==self.X[i]) and i==j: + alpha = 1 + elif all(c==self.X[i]) and i==j: + alpha = 1 + if alpha != 0: + # print 'have an entry for %d, %d!' % (i,j) + Z_ = (self.mu(r)-self.mu(c)) / (sqrt(2)*sqrt(sigma)) + # print '\td=',d + cdf = CDF(Z_) + pdf = PDF(Z_) + if cdf < 1e-10: + cdf = 1e-10 + if pdf < 1e-10: + pdf = 1e-10 + C[i,j] += alpha / (2*sigma) * (pdf**2/cdf**2 + Z_ * pdf/cdf) + + val = -logCDFs + dot(Lx, Lx)/2.0 + 0.5*log(np.linalg.det(np.eye(len(self.X)) + dot(self.R, C))) #add noise prior + if not isfinite(val): + print ('non-finite val!') + pdb.set_trace() + # print '\n***** val =', val + return val + + ''' + optimize noise, randomdize 4 times + ''' + #self.noise = fmin_tnc(Q, self.noise, bounds=((0.1, 5),), approx_grad=True)[0] #optimize hyperparameter + res = minimize(Q, self.noise, bounds=((0.1, 5),)) + self.noise = res['x'] + best_noise_obj_value = res['fun'] + print('noise:', self.noise) + print('obj_value: ', best_noise_obj_value) + + best_noise_obj_value = np.inf + for i in range(0, 5): + res = minimize(Q, np.random.uniform(0.1, 5), bounds=((0.1, 5),)) + noise = res['x'] + obj_value = res['fun'] + if obj_value < best_noise_obj_value: + self.noise = noise + best_noise_obj_value = obj_value + print('noise: ', noise) + print('obj_value: ', obj_value) + + print('final_noise: ', self.noise) + print('best_noise_obj_value: ', best_noise_obj_value) + + print ('[addPreferences] checking pref pairs') + for i in range(0,self.preferences.shape[1]): + r = tuple(self.preferences[0,i,:]) + c = tuple(self.preferences[1,i,:]) + if self.Y[x2ind[r]] <= self.Y[x2ind[c]]: + print (' FAILED! %.2f ! > %.2f' % (self.Y[x2ind[r]], self.Y[x2ind[c]])) + print ('which preference:', r, c) + # print ' FAILED! %.2f ! > %.2f' % (self.Y[x2ind[r]], self.Y[x2ind[c]]) + # print ' can we fix it?' + # if there is nothing preferred to this item, bump it up + ''' + for r1, c1 in self.preferences: + if all(tuple(c1)==tuple(r)): + break + else: + self.Y[x2ind[r]] = self.Y[x2ind[c]] + .1 + # print ' changed Y to %.2f' % self.Y[x2ind[r]] + ''' + for j in range(0,self.preferences.shape[1]): + if r == tuple(self.preferences[1,j,:]): + print('remain') + break + else: + self.Y[x2ind[r]] = self.Y[x2ind[c]] + .1 + print(' changed Y to %.2f' % self.Y[x2ind[r]]) + + # now we can learn the C matrix + #self.C = eye(len(self.X), dtype=float) * 5 + self.C = zeros((len(self.X), len(self.X))) + + for i in range(len(self.X)): + for j in range(len(self.X)): + for k in range(self.preferences.shape[1]): + r = self.preferences[0,k,:] + c = self.preferences[1,k,:] + alpha = 0 + if all(r==self.X[i]) and all(c==self.X[j]): + alpha = -1 + elif all(r==self.X[j]) and all(c==self.X[i]): + alpha = -1 + elif all(r==self.X[i]) and i==j: + alpha = 1 + elif all(c==self.X[i]) and i==j: + alpha = 1 + if alpha != 0: + # print 'have an entry for %d, %d!' % (i,j) + Z = (self.mu(r)-self.mu(c)) / (sqrt(2)*sqrt(self.noise)) + # print '\td=',d + cdf = CDF(Z) + pdf = PDF(Z) + if cdf < 1e-10: + cdf = 1e-10 + if pdf < 1e-10: + pdf = 1e-10 + self.C[i,j] += alpha / (2*self.noise) * (pdf**2/cdf**2 + Z * pdf/cdf) + try: + self.L = linalg.cholesky(self.R+linalg.inv(self.C)) + except LinAlgError: + print ('[addPreferences] GP.C matrix is ill-conditioned, adding regularizer delta = 1') + for i in range(10): + self.C += eye(len(self.X)) + try: + self.L = linalg.cholesky(self.R+linalg.inv(self.C)) + except LinAlgError: + print ('[addPreferences] GP.C matrix is ill-conditioned, adding regularizer delta = %d' % (i+2)) + else: + break + + + + def addObservationPoint(self, X): + """ + Add a point at which we will observe, but for which we don't have the + observation yet. (Used by the gallery selection algorithms.) + """ + X = array(X, copy=False, dtype=float, ndmin=2) + + if self.augR is None: + self.augR = self.R.copy() + self.augX = self.X.copy() + + r, m = self._computeAugCorrelations(X) + self.augR = r_[c_[self.augR, m], c_[m.T, r]] + + invC = zeros_like(self.augR) + invC[:self.C.shape[0], :self.C.shape[0]] = linalg.inv(self.C) + self.augL = linalg.cholesky(self.augR+invC) + self.augX = r_[self.augX, X] + + + + def addData(self, X, Y, G=None): + """ + I have an idea about how to do this... (see notebook). + """ + raise NotImplementedError("can't (yet) add explicit ratings to preference GP") + + def build_preference_ge(self, weights): + trajectory_name = 'saffa.h5' + + # weights term in paper + lag_weight = 1 # weight on e^l + contour_weight = weights[0,0] # weight on e^c + angular_weight = 1 # w_phi and w_psi + # learn jerk + jerk_weight = weights[0,1] # w_j on position + angular_jerk_weight = 1 # w_j on angles + theta_input_weight = 1 # weight on v_i + # not necessary + min_time_weight = 1 # w_end + end_time_weight = 0 # w_len + timing_weight = 0 # w_t + + # load trajectory + keyframes, keyorientations, keytimes, gps_trajectory = load_trajectory(trajectory_name) + if keyframes.shape[1] > 3: + keyframes = keyframes[:,0:3] + + # specifying weights for optimizer + options = dict() + options["keytimes"] = keytimes + options["lag_weight"] = lag_weight + options["contour_weight"] = contour_weight + options["gimbal_weight"] = angular_weight + options["smoothness_weight"] = jerk_weight + options["angular_smoothness_weight"] = angular_jerk_weight + options["theta_input_weight"] = theta_input_weight + options["min_time_weight"] = min_time_weight + options["end_time_weight"] = end_time_weight + options["timing_weight"] = timing_weight + + trajGen = QuadCameraContourTrajectory(keyframes, keyorientations, options) + trajectory, keytimes = trajGen.generate_trajectory() + end_time = trajectory[trajGen.endTimeStateIndex, -1]; + err_new = np.absolute(end_time -25) + c_w_new = np.asscalar(contour_weight) + j_w_new = np.asscalar(jerk_weight) + + # create kml-file and save to directory "kmls" + generate_kml_file(trajGen, trajectory, gps_trajectory, trajectory_name, '_new') + + c_w_min, j_w_min = self.X[np.argmax(self.Y)] + contour_weight = c_w_min + jerk_weight = j_w_min + options["contour_weight"] = contour_weight + options["smoothness_weight"] = jerk_weight + trajGen = QuadCameraContourTrajectory(keyframes, keyorientations, options) + trajectory, keytimes = trajGen.generate_trajectory() + end_time = trajectory[trajGen.endTimeStateIndex, -1]; + err_min = np.absolute(end_time -25) + # create kml-file and save to directory "kmls" + generate_kml_file(trajGen, trajectory, gps_trajectory, trajectory_name, '_premax') + + print(weights, 'new_sample error is: '+str(err_new)) + print(self.X[np.argmax(self.Y)], 'premax_sample error is: '+str(err_min)) + #pref_decision = input(":(n for new setting parameters and p for pre_max) ") + pref = np.zeros((2,1,2)) + + if (err_new < err_min): + pref[0,0,:] = np.array([c_w_new, j_w_new]).reshape((1,-1)) + pref[1,0,:] = np.array([c_w_min, j_w_min]).reshape((1,-1)) + elif (err_new > err_min): + pref[0,0,:] = np.array([c_w_min, j_w_min]).reshape((1,-1)) + pref[1,0,:] = np.array([c_w_new, j_w_new]).reshape((1,-1)) + else: #no preference + print('finishes') + return np.array([]) + ''' + if (pref_decision == 'n'): + pref[0,0,:] = np.array([c_w_new, j_w_new]).reshape((1,-1)) + pref[1,0,:] = np.array([c_w_min, j_w_min]).reshape((1,-1)) + elif (pref_decision == 'p'): + pref[0,0,:] = np.array([c_w_min, j_w_min]).reshape((1,-1)) + pref[1,0,:] = np.array([c_w_new, j_w_new]).reshape((1,-1)) + else: #no preference + print('finishes') + return np.array([]) + ''' + self.loss.append(err_new) + + return pref + +def load_trajectory(traj_name): + with h5py.File('./data/' + traj_name, 'r') as hf: + keytimes = np.array(hf.get('keytimes')) + keyframes = np.transpose(np.array(hf.get('keyframes'))) + keyorientations = np.transpose(np.array(hf.get('keyorientations'))) + trajectory = np.transpose(np.array(hf.get('trajectory'))) + return keyframes, keyorientations, keytimes, trajectory diff --git a/parameter-learning_nd_disc/source code PL/README.gpref b/parameter-learning_nd_disc/source code PL/README.gpref new file mode 100755 index 0000000..2d09ca3 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/README.gpref @@ -0,0 +1,95 @@ +######################################################################## + +Gaussian Processes for Preference Learning over Instances v1.0 + --- MAP and Laplace Approximation + +Chu Wei (C)Copyright 2002-2004 at Gatsby Unit. + +######################################################################## + +1. Installation + a) download gpref.tar to your machine (Linux is assumed) + b) tar -xvf gpref.tar + c) cd gpref + e) gcc -o gpref *.c -lm -O2 -Wall + f) the program using ARD kernel is generated by + gcc -o gpref_ard *.c -lm -O2 -Wall -D _GPREF_ARD + +2. Data Format + a) a space delimited plain text file with a new-line character + at the end of each line + b) each line contains one sample. + c) the file containing samples is named as mytask_samples.1 + d) the file containing preference relations for training is named as mytask_train.1 + e) the file containing preference relations for test is named as mytask_test.1 + f) each line contains two indices, say i j, that means the sample on the i-th line of mytask_samples.1 is preferred to the sample on the j-th line of mytask_samples.1. + h) "mytask" could be any string followed by "_train" and "_test". + i) see the example files under the folder: + toy_train.dat, toy_test.dat and toy_samples.dat. + +3. Input and Output + a) prepare your data files + "mytask_train.0" + "mytask_test.0" + "mytask_samples.0" + b) run the program + ./gpref mytask_train.0 mytask_samples.0 + or try the toy samples + ./gpref toy_train.dat toy_samples.dat + c) Laplace Approx will be done for model selection as default + d) output files + 1) "mytask_test.0.guess" to save predictive ordinal scales + for test data, integers from 1 to R. + 2) "mytask_test.0.conf" to save the variance of predictive + distribution of test data. + 3) "mytask_test.0.func" to save the mean of predictive + distribution of test data. + 4) "mytask_test.0.prob" to save the predictive probability + of ordinal scales of test data. + 5) "mytask_train.0.log" to save the optimal settings of + the Gaussian process model, including kernel parameters, + noise level and thresholds. + 6) "mytask_train.0.ard" to save the optimal ARD parameters + if ARD kernel was used. + 7) "gpref_lap_batch.log" to save results + for batch tasks, including zero-one error, absolute error, + mean absolute error and CPU time consumed in seconds. + + e) if you have a BATCH of tasks, prepare your data files as + "mytask_samples.0" "mytask_train.0" "mytask_test.0" , + "mytask_samples.1" "mytask_train.1" "mytask_test.1" , + "mytask_samples.2" "mytask_train.2" "mytask_test.2" , + ... ... + the script program "gprefbatch.sh" would make them done one by one. + the results of these files are saved in "gpref_lap_batch.log". + +4. Options + a) for help information + ./gpref + b) specify initial noise variance, say 0.4 + ./gpref -S 0.4 mytask_train.0 mytask_samples.0 + c) specify initial kernel parameter, say 0.01 + ./gpref -K 0.01 mytask_train.0 mytask_samples.0 + d) specify to use Gaussian kernel (default Linear kernel) + ./gpref -G mytask_train.0 mytask_samples.0 + e) specify the power level, say 3.0 + ./gpref -O 3 mytask_train.0 mytask_samples.0 + +5. Reference + "Preference Learning with Gaussian processes", + Chu, W and Z. Ghahramani, Technical Report, 2005 + http://www.gatsby.ucl.ac.uk/~chuwei/paper/gppl.pdf + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/parameter-learning_nd_disc/source code PL/gpref.tar.gz b/parameter-learning_nd_disc/source code PL/gpref.tar.gz new file mode 100755 index 0000000..3d18578 Binary files /dev/null and b/parameter-learning_nd_disc/source code PL/gpref.tar.gz differ diff --git a/parameter-learning_nd_disc/source code PL/gpref/README.gpref b/parameter-learning_nd_disc/source code PL/gpref/README.gpref new file mode 100755 index 0000000..2d09ca3 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/README.gpref @@ -0,0 +1,95 @@ +######################################################################## + +Gaussian Processes for Preference Learning over Instances v1.0 + --- MAP and Laplace Approximation + +Chu Wei (C)Copyright 2002-2004 at Gatsby Unit. + +######################################################################## + +1. Installation + a) download gpref.tar to your machine (Linux is assumed) + b) tar -xvf gpref.tar + c) cd gpref + e) gcc -o gpref *.c -lm -O2 -Wall + f) the program using ARD kernel is generated by + gcc -o gpref_ard *.c -lm -O2 -Wall -D _GPREF_ARD + +2. Data Format + a) a space delimited plain text file with a new-line character + at the end of each line + b) each line contains one sample. + c) the file containing samples is named as mytask_samples.1 + d) the file containing preference relations for training is named as mytask_train.1 + e) the file containing preference relations for test is named as mytask_test.1 + f) each line contains two indices, say i j, that means the sample on the i-th line of mytask_samples.1 is preferred to the sample on the j-th line of mytask_samples.1. + h) "mytask" could be any string followed by "_train" and "_test". + i) see the example files under the folder: + toy_train.dat, toy_test.dat and toy_samples.dat. + +3. Input and Output + a) prepare your data files + "mytask_train.0" + "mytask_test.0" + "mytask_samples.0" + b) run the program + ./gpref mytask_train.0 mytask_samples.0 + or try the toy samples + ./gpref toy_train.dat toy_samples.dat + c) Laplace Approx will be done for model selection as default + d) output files + 1) "mytask_test.0.guess" to save predictive ordinal scales + for test data, integers from 1 to R. + 2) "mytask_test.0.conf" to save the variance of predictive + distribution of test data. + 3) "mytask_test.0.func" to save the mean of predictive + distribution of test data. + 4) "mytask_test.0.prob" to save the predictive probability + of ordinal scales of test data. + 5) "mytask_train.0.log" to save the optimal settings of + the Gaussian process model, including kernel parameters, + noise level and thresholds. + 6) "mytask_train.0.ard" to save the optimal ARD parameters + if ARD kernel was used. + 7) "gpref_lap_batch.log" to save results + for batch tasks, including zero-one error, absolute error, + mean absolute error and CPU time consumed in seconds. + + e) if you have a BATCH of tasks, prepare your data files as + "mytask_samples.0" "mytask_train.0" "mytask_test.0" , + "mytask_samples.1" "mytask_train.1" "mytask_test.1" , + "mytask_samples.2" "mytask_train.2" "mytask_test.2" , + ... ... + the script program "gprefbatch.sh" would make them done one by one. + the results of these files are saved in "gpref_lap_batch.log". + +4. Options + a) for help information + ./gpref + b) specify initial noise variance, say 0.4 + ./gpref -S 0.4 mytask_train.0 mytask_samples.0 + c) specify initial kernel parameter, say 0.01 + ./gpref -K 0.01 mytask_train.0 mytask_samples.0 + d) specify to use Gaussian kernel (default Linear kernel) + ./gpref -G mytask_train.0 mytask_samples.0 + e) specify the power level, say 3.0 + ./gpref -O 3 mytask_train.0 mytask_samples.0 + +5. Reference + "Preference Learning with Gaussian processes", + Chu, W and Z. Ghahramani, Technical Report, 2005 + http://www.gatsby.ucl.ac.uk/~chuwei/paper/gppl.pdf + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/parameter-learning_nd_disc/source code PL/gpref/alphas.c b/parameter-learning_nd_disc/source code PL/gpref/alphas.c new file mode 100755 index 0000000..a5ffd92 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/alphas.c @@ -0,0 +1,130 @@ +// main function + +// softmax for multi-classification + +// Chu Wei (C) Copyright 2004 + +#include +#include +#include "pref.h" + +Alphas * Create_Alphas (Pref_Settings * settings) +{ + Alphas * alpha = NULL ; + Data_Node * node ; + Pref_Node * pair ; + int i = 0, u, v ; + int serial = 0 ; + int j ; + if (NULL == settings->pairs) + return alpha ; + + alpha = (Alphas *) malloc(settings->pairs->count*sizeof(Alphas)) ; + if (NULL == alpha) + { + printf("fail to malloc alpha.\n") ; + return alpha ; + } + + // initialize + node = settings->pairs->front ; + while (NULL != node) + { + (alpha+i)->pair = node ; + (alpha+i)->p_cache = NULL ; + (alpha+i)->pair->serial = 0 ; + (alpha+i)->pair->fold = 1 ; + (alpha+i)->kernels = (double *)malloc((i+1)*sizeof(double)) ; + (alpha+i)->postcov = (double *)malloc((i+1)*sizeof(double)) ; + if (NULL == (alpha+i)->kernels || NULL == (alpha+i)->postcov) + { + printf("fail to malloc alpha->kernels.\n") ; + exit(1) ; + } + for (j=0;j<=i;j++) + { + (alpha+i)->kernels[j] = Calc_Covfun((alpha+i)->pair->point,(alpha+j)->pair->point,settings) ; + (alpha+i)->postcov[j] = (alpha+i)->kernels[j] ; + } + (alpha+i)->alpha = 0 ; + (alpha+i)->beta = 0 ; + (alpha+i)->nu = 0 ; + (alpha+i)->loomean = 0 ; + (alpha+i)->loovar = 0 ; + (alpha+i)->z1 = 0 ; + (alpha+i)->z2 = 0 ; + (alpha+i)->hnew = 0 ; // new posterior mean + (alpha+i)->mnew = 0 ; // new individual mean + (alpha+i)->pnew = 0 ; // new individual variance + (alpha+i)->snew = 0 ; // new individual amplitude + + // clear node + node->epamp = 1 ; + node->epinvvar = 0 ; + node->epmean = 0 ; + node->postmean = 0 ; + node->weight = 0 ; + i+=1 ; + node = node -> next ; + } + + // mark the training points + pair = settings->pairs->trainpair.front ; + settings->pairs->train = 0 ; + while (NULL != pair) + { + u = pair->u ; + v = pair->v ; + if ((alpha+(u-1))->pair->fold>0) + { + (alpha+(u-1))->pair->fold = -1 ; + settings->pairs->train += 1 ; + } + if ((alpha+(v-1))->pair->fold>0) + { + (alpha+(v-1))->pair->fold = -1 ; + settings->pairs->train += 1 ; + } + pair = pair->next ; + } + // + node = settings->pairs->front ; + i=0 ; + while (NULL != node) + { + if ((alpha+i)->pair->fold<0) + { + serial += 1 ; + (alpha+i)->pair->serial = serial ; + } + else + (alpha+i)->pair->serial = 0 ; + node = node->next ; + i+=1 ; + } + return alpha ; +} + +int Clear_Alphas (Alphas * alpha, Data_List * list) +{ + Data_Node * node ; + int i = 0 ; + + if (NULL == list || NULL == alpha) + return 1 ; + node = list->front ; + while (NULL != node) + { + if (NULL != (alpha+i)->p_cache) + free((alpha+i)->p_cache) ; + if (NULL != (alpha+i)->kernels) + free((alpha+i)->kernels) ; + if (NULL != (alpha+i)->postcov) + free((alpha+i)->postcov) ; + i+=1 ; + node = node -> next ; + } + free(alpha) ; + alpha = NULL ; + return 0 ; +} diff --git a/parameter-learning_nd_disc/source code PL/gpref/bfgs_settings.c b/parameter-learning_nd_disc/source code PL/gpref/bfgs_settings.c new file mode 100755 index 0000000..bc510ae --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/bfgs_settings.c @@ -0,0 +1,234 @@ +/*******************************************************************************************\ + + bfgs_settings.c in Sequential Minimal Optimization ver2.0 + + implements the functions of creating and clearing bfgs_Setting structure. + + Chu Wei Copyright(C) National Univeristy of Singapore + Create on Jan. 16 2000 at Control Lab of Mechanical Engineering + Update on Aug. 23 2001 + +\*******************************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "pref.h" + + +/*******************************************************************************************\ + + BOOL Clear_bfgs_FuncGrad ( bfgs_FuncGrad * funcgrad ) + + purpose: to clear a bfgs_FuncGrad structure. + input: the pointer to the bfgs_FuncGrad structure. + output: TRUE or FALSE + +\*******************************************************************************************/ + +void Clear_Bfgs_FuncGrad ( bfgs_FuncGrad * funcgrad ) +{ + if ( NULL != funcgrad ) + { + if (NULL != funcgrad->gx) + free (funcgrad->gx) ; + if (NULL != funcgrad->x) + free (funcgrad->x) ; + free (funcgrad) ; + funcgrad = NULL ; + } +} + +/*******************************************************************************************\ + + bfgs_FuncGrad * Create_bfgs_FuncGrad ( unsigned int number ) + + purpose: to create and initialize a structure of bfgs_FuncGrad. + input: the number of all adjustable parameters. + output: the pointer of bfgs_FuncGrad + +\*******************************************************************************************/ + +bfgs_FuncGrad * Create_Bfgs_FuncGrad ( unsigned int number ) +{ + bfgs_FuncGrad * funcgrad = NULL ; + unsigned int i = 0 ; + + if (number <= 0 ) + return NULL ; + + if ( NULL == ( funcgrad = (bfgs_FuncGrad *) malloc(sizeof(bfgs_FuncGrad)) ) ) + return NULL ; + + funcgrad->x = NULL ; + funcgrad->gx = NULL ; + funcgrad->var_number = number ; + funcgrad->norm2gx = 0 ; + funcgrad->maskednorm = 0 ; + funcgrad->fx = 0 ; + funcgrad->iternum = 0 ; + + if ( NULL == ( funcgrad->x = (double *) malloc(number*sizeof(double)) ) ) + { + Clear_Bfgs_FuncGrad ( funcgrad ) ; + return NULL ; + } + if ( NULL == ( funcgrad->gx = (double *) malloc(number*sizeof(double)) ) ) + { + Clear_Bfgs_FuncGrad ( funcgrad ) ; + return NULL ; + } + for ( i=0;ix[i] = 0 ; + funcgrad->gx[i] = 0 ; + } + return funcgrad ; +} + + +/*******************************************************************************************\ + + BOOL bfgs_smo_Settings ( smo_Settings * setting, bfgs_FuncGrad * funcgrad ) + + purpose: change smo parameters by copying funcgrad->X into the smo_Settings structure + and be called by bfgs_training only to change parameter settings. + input: the pointer to structure of smo_Settings and bfgs_FuncGrad + output: TRUE or FALSE + +\*******************************************************************************************/ + +int Bfgs_Pref_Settings ( Pref_Settings * settings, bfgs_FuncGrad * funcgrad ) +{ + unsigned int i = 0 ; + + if ( NULL == settings || NULL == funcgrad ) + { + printf("\r\nFATAL ERROR : input pointer is NULL in bfgs_smo_Settings.\r\n") ; + return 1 ; + } + if (PREFERENCE == settings->pairs->datatype) + { + /*if (funcgrad->x[0]>1000) + funcgrad->x[0]=1000 ; + if (funcgrad->x[0]<0.001) + funcgrad->x[0]=0.001 ;*/ + + settings->noisevar = 1.0/funcgrad->x[0] ; + //settings->kappa_o = exp( funcgrad->x[funcgrad->var_number-1] ) ; + /*settings->thresholds[0] = ( funcgrad->x[1] ) ; + for (i=1;ipairs->classes-1;i++) // intervals + { + settings->intervals[i] = exp( funcgrad->x[1+i] ) ; + if (settings->intervals[i]>6.0*sqrt(settings->noisevar)) + { + settings->intervals[i] = 6.0*sqrt(settings->noisevar) ; + funcgrad->x[1+i] = log(settings->intervals[i]) ; + } + settings->thresholds[i] = settings->thresholds[i-1] + settings->intervals[i] ; + }*/ + if ( 1 == settings->ardon ) + { + for ( i=0; ipairs->dimen; i++) + { + settings->kappa[i] = exp( funcgrad->x[settings->pairs->classes+i] ) ; + if (settings->kappa[i]>50) + { + settings->kappa[i]=50 ; + funcgrad->x[settings->pairs->classes+i]=log(settings->kappa[i]) ; + } + else if (settings->kappa[i]<10e-10) + { + settings->kappa[i]=10e-10 ; + funcgrad->x[settings->pairs->classes+i]=log(settings->kappa[i]) ; + } + } + } + else + settings->kappa_a = exp( funcgrad->x[settings->pairs->classes] ) ; + } + else + { + printf("\r\nFATAL ERROR : wrong DATATYPE in bfgs_smo_Settings.\r\n") ; + return 1 ; + } + return 0 ; +} + +int Pref_Bfgs_Settings ( Pref_Settings * settings, bfgs_FuncGrad * funcgrad ) +{ + unsigned int i = 0 ; + + if ( NULL == settings || NULL == funcgrad ) + { + printf("\r\nFATAL ERROR : input pointer is NULL in bfgs_smo_Settings.\r\n") ; + return 1 ; + } + if (PREFERENCE == settings->pairs->datatype) + { + funcgrad->x[0] = 1.0/(settings->noisevar) ; + //funcgrad->x[funcgrad->var_number-1] = log(settings->kappa_o) ; + /*funcgrad->x[1] = settings->thresholds[0] ; + for (i=1;ipairs->classes-1;i++) // intervals + funcgrad->x[1+i] = log(settings->intervals[i]) ;*/ + if ( 1 == settings->ardon ) + { + for ( i=0; ipairs->dimen; i++ ) + funcgrad->x[settings->pairs->classes+i] = log(settings->kappa[i]) ; + } + else + funcgrad->x[settings->pairs->classes] = log(settings->kappa_a) ; + } + else + { + printf("\r\nFATAL ERROR : wrong DATATYPE in bfgs_smo_Settings.\r\n") ; + return 1 ; + } + return 0 ; +} + +/*******************************************************************************************\ + + BOOL Duplicate_bfgs_FuncGrad( bfgs_FuncGrad * destination, bfgs_FuncGrad * source ) + + purpose: copy all the elements of bfgs_FuncGrad from source to destination. + input: the pointer of bfgs_FuncGrad, destination and source. + output: TRUE or FALSE + +\*******************************************************************************************/ + +int Duplicate_Bfgs_FuncGrad( bfgs_FuncGrad * destination, bfgs_FuncGrad * source ) +{ + unsigned int i = 0 ; + + if ( NULL == destination || NULL == source ) + { + printf("\r\nFATAL ERROR : in Duplicate_bmr_FuncGrad.\r\n") ; + return 1 ; + } + if ( destination->var_number != source->var_number ) + { + printf("\r\nFATAL ERROR : in Duplicate_bmr_FuncGrad.\r\n") ; + return 1 ; + } + + destination->var_number = source->var_number ; + destination->fx = source->fx ; + destination->norm2gx = source->norm2gx ; + destination->maskednorm = source->maskednorm ; + for ( i=0; ivar_number; i++ ) + { + destination->gx[i] = source->gx[i] ; + destination->x[i] = source->x[i] ; + } + return 0 ; +} + +// end of bfgs_settings.c + diff --git a/parameter-learning_nd_disc/source code PL/gpref/cg.c b/parameter-learning_nd_disc/source code PL/gpref/cg.c new file mode 100755 index 0000000..3d372e8 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/cg.c @@ -0,0 +1,108 @@ +// conjugate gradient +// min 1/2 x' * A * x + B' * x +// +#include +#include +#include +#include +#include + +int conjugate_gradient (double * A, double * B, double * x, unsigned int n) +{ + double * r ; + double * ap ; + double * p ; + unsigned int loop, i ; + long unsigned index = 1 ; + double pap, qij, nr=0, r1=0, r0=0, lambda, beta ; + + if (NULL ==A || NULL == B || NULL == x || n <= 0) + { + printf("input pointers are NULL.\n") ; + return 1 ; + } + if (n>50000) + { + printf("input dimension %u is too high.\n", n) ; + return 1 ; + } + + r = (double *) malloc((n)*sizeof(double)) ; + ap = (double *) malloc((n)*sizeof(double)) ; + p = (double *) malloc((n)*sizeof(double)) ; + + + if ( NULL == r || NULL == ap || NULL == p ) + { + printf("out of memory.\n") ; + return 1 ; + } + + // initialize r, kin, p + for (loop=0;loop 0.000001 || index == 1 )// + { + if (index == 1) + { + for (loop=0;loop +#include +#include +#include "pref.h" + +/*******************************************************************************\ + + int Create_Data_List ( Data_List * list ) + + set all the elements in the list head to be the default values + input: the pointer to the head of Data_List + output: 0 or 1 + +\*******************************************************************************/ + +int Create_Data_List ( Data_List * list ) +{ + if (NULL == list) + { + printf("\r\nFATAL ERROR : input pointer is NULL.\r\n") ; + return 1 ; + } + list -> normalized_input = DEF_NORMALIZEINPUT ; + list -> normalized_output = DEF_NORMALIZETARGET ; + //will be initialized when loading data file by routine smo_Loadfile + list -> datatype = PREFERENCE ; + list -> featuretype = NULL ; + list -> kfold = DEF_KFOLDCV ; + list -> i_ymax = 0 ; + list -> i_ymin = 0 ; + list -> count = 0 ; + list -> dimen = 0 ; + list -> classes = 0 ; + list -> labels = NULL ; + list -> labelnum = NULL ; + list -> filename = NULL ; + list -> mean = 0 ; + list -> deviation = 0 ; + list -> x_devi = NULL ; + list -> x_mean = NULL ; + list -> front = NULL ; + list -> rear = NULL ; + list -> train = 0 ; + + list -> weights = NULL ; + + Create_Pref_List (&list -> trainpair) ; + Create_Pref_List (&list -> testpair) ; + + return 0 ; +} + +Data_Node * Create_Data_Node ( long unsigned int index, double * point, int y ) +{ + Data_Node * node = NULL ; + + if (NULL == point) + return NULL ; + + node = (Data_Node *) malloc (sizeof(Data_Node)) ; + + if (NULL == node) + printf ("fail to allocate memory!") ; + else + { + node -> index = index ; + node -> point = point ; + node -> fold = 1 ; + node -> target = y ; + node -> pred_prob = 0 ; + node -> pred_label = 0 ; + node -> pred_func = 0 ; + node -> pred_var = 0 ; + + node -> next = NULL ; + node -> prev = NULL ; + + node -> weight = 0 ; + node -> serial = 0 ; + node -> epamp = 1 ; + node -> epmean = 0 ; + node -> epinvvar = 0 ; + node -> postmean = 0 ; + } + return node ; +} + + +int Is_Data_Empty ( Data_List * list ) +{ + if (NULL == list) + { + printf ("FATAL ERROR : Data_List has been abused.\n") ; + return 1 ; + } + if ((list -> front == NULL) && (list -> rear == NULL)) + return 0 ; + else + return 1; +} + + +int Is_Node_Different ( Data_List * Pairs, Data_Node * node, Data_Node * temp ) +{ + + unsigned long int dimen = 0 ; + unsigned long int i = 0 ; + + if ( NULL == node || NULL == temp || NULL == Pairs ) + return 1 ; + + dimen = Pairs->dimen ; + + if ( node -> target != temp -> target ) + return 0 ; + else + { + for ( i=0; ipoint[i] != temp->point[i] ) + return 0 ; + } + } + return 1 ; +} + + +/*******************************************************************************\ + + int Add_Data_List ( Data_List * list, Data_Node * node ) + + add Data_Node node into the list rear. + free * node if node exists already in the list. + input: the pointer to the head of Data_List, and a pointer of Data_Node + output: 0 or 1 + +\*******************************************************************************/ + +int Add_Data_List ( Data_List * list, Data_Node * node ) +{ + + //Data_Node * temp = NULL ; + + if ( NULL == node ) + { + return 1 ; + } + + if ( NULL == list ) + { + free (node) ; + return 1 ; + } + else if (!Is_Data_Empty(list)) + list -> front = list -> rear = node ; + else + { + /*temp = list -> front ; + + while ( NULL != temp ) + { + // dulicated date are allowed. chuwei 2001/03/21 + //if ( 1 == Is_Node_Different(list ,node, temp) ) + //{ + // free (node) ; + // return 1 ; + //} + if ( temp->target < node->target ) + { + temp = temp -> next ; + } + else + { + node -> next = temp -> next ; + if (NULL == node -> next) + list -> rear = node ; + temp -> next = node ; + list -> count += 1 ; + return 0 ; + } + }*/ + list -> rear -> next = node ; + list -> rear = node ; + } + list -> count += 1 ; + return 0 ; +} + + +int Is_Label_Node_Different ( Data_List * Pairs, Data_Node * node, Data_Node * temp ) +{ + + unsigned long int dimen = 0 ; + + if ( NULL == node || NULL == temp || NULL == Pairs ) + return 1 ; + + dimen = Pairs->dimen ; + + if ( node -> target != temp -> target ) + return 0 ; + return 1 ; +} + + +int Add_Label_Data_List ( Data_List * list, Data_Node * node ) +{ + + Data_Node * temp = NULL ; + + if ( NULL == node ) + { + return 1 ; + } + + if ( NULL == list ) + { + free (node) ; + return 1 ; + } + else if (!Is_Data_Empty(list)) + list -> front = list -> rear = node ; + else + { + temp = list -> front ; + + while ( NULL != temp ) + { + // dulicated date are allowed. chuwei 2001/03/21 + if ( 1 == Is_Label_Node_Different(list ,node, temp) ) + { + temp->fold +=1 ; + free (node) ; + return 1 ; + } + temp = temp -> next ; + } + + list -> rear -> next = node ; + list -> rear = node ; + } + list -> count += 1 ; + node->point = NULL ; + return 0 ; +} + + +int Clear_Label_Data_List ( Data_List * list ) +{ + + Data_Node * temp = NULL ; + + if (NULL == list) + return 1 ; + + while (!Is_Data_Empty(list)) + { + temp = list->front ; + + if (list -> rear == list -> front) + list -> rear = list -> front = NULL ; + else + list -> front = list -> front -> next ; + + if (NULL != temp) + { + +#ifdef SMO_DEBUG + printf ("delete %d\n", temp->index) ; + printf ("%f\n", * temp->point) ; + printf ("%f\n\n", temp->target) ; +#endif + list->count -- ; + // not free the point + free (temp) ; + } + else + { + printf ("Data list error\n") ; + return 1 ; + } + } + +#ifdef SMO_DEBUG + + if (0 != list->count) + { + printf ("Error happened in Data_List\n") ; + list->count = 0 ; + return 1 ; + } + else + +#endif + { + list -> dimen = 0 ; + list->datatype = CLASSIFICATION ; + list->i_ymax = 0 ; + list->i_ymin = 0 ; + list -> count = 0 ; + list -> mean = 0 ; + list -> deviation = 0 ; + list -> front = NULL ; + list -> rear = NULL ; + if ( NULL != list->x_mean ) + { + free ( list->x_mean ) ; + list->x_mean = NULL ; + } + if ( NULL != list->x_devi ) + { + free ( list->x_devi ) ; + list->x_devi = NULL ; + } + if ( NULL != list->featuretype) + { + free ( list->featuretype ) ; + list->featuretype = NULL ; + } + if ( NULL != list->labels) + { + free ( list->labels ) ; + list->labels = NULL ; + } + if ( NULL != list->labelnum) + { + free ( list->labelnum ) ; + list->labelnum = NULL ; + } + if ( NULL != list->filename) + { + free ( list->filename ) ; + list->filename = NULL ; + } + } + return 0 ; +} + + +int Clear_Data_List ( Data_List * list ) +{ + + Data_Node * temp = NULL ; + + if (NULL == list) + return 1 ; + + while (1==Is_Data_Empty(list)) + { + temp = list->front ; + + if (list -> rear == list -> front) + list -> rear = list -> front = NULL ; + else + list -> front = list -> front -> next ; + + if (NULL != temp) + { + +#ifdef SMO_DEBUG + printf ("delete %d\n", temp->index) ; + printf ("%f\n", * temp->point) ; + printf ("%f\n\n", temp->target) ; +#endif + list->count -- ; + if (NULL != temp->point) + free (temp->point) ; + free (temp) ; + } + else + { + printf ("Data list error\n") ; + return 1 ; + } + } + +#ifdef SMO_DEBUG + + if (0 != list->count) + { + printf ("Error happened in Data_List\n") ; + list->count = 0 ; + return 1 ; + } + else + +#endif + { + list -> dimen = 0 ; + list->datatype = CLASSIFICATION ; + list->i_ymax = 0 ; + list->i_ymin = 0 ; + list -> count = 0 ; + list -> mean = 0 ; + list -> deviation = 0 ; + list -> front = NULL ; + list -> rear = NULL ; + + Clear_Pref_List (&list->trainpair) ; + Clear_Pref_List (&list->testpair) ; + + if ( NULL != list->filename) + { + free (list->filename) ; + list->filename = NULL ; + } + if ( NULL != list->labels) + { + free (list->labels) ; + list->labels = NULL ; + } + if ( NULL != list->labelnum) + { + free (list->labelnum) ; + list->labelnum = NULL ; + } + if ( NULL != list->weights) + { + free (list->weights) ; + list->weights = NULL ; + } + if ( NULL != list->featuretype ) + { + free (list->featuretype) ; + list->featuretype = NULL ; + } + if ( NULL != list->x_mean ) + { + free ( list->x_mean ) ; + list->x_mean = NULL ; + } + if ( NULL != list->x_devi ) + { + free ( list->x_devi ) ; + list->x_devi = NULL ; + } + } + return 0 ; +} + +// the end of datalist.c diff --git a/parameter-learning_nd_disc/source code PL/gpref/fromb.c b/parameter-learning_nd_disc/source code PL/gpref/fromb.c new file mode 100755 index 0000000..046ec0b --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/fromb.c @@ -0,0 +1,60 @@ +#include +#include +#include +#include "pref.h" +// romberg for normcdf + +double normpdf(double x) +{ + return exp(-0.5*x*x)/sqrt(2.0*PI) ; +} + +double normcdf(double ca, double eb) +{ + int m,n,i,k; + double eps ; + double y[20],h,ep,p,x,s,q=0,a,b ; + + eps = EPS*EPS ; + if (ca>eb) + { a=eb; b=ca; } + else + { a=ca; b=eb; } + + h=b-a; + y[0]=h*(normpdf(a)+normpdf(b))/2.0; + m=1; n=1; ep=eps+1.0; + while ((ep>=eps)&&(m<=19)) + { p=0.0; + for (i=0;i<=n-1;i++) + { x=a+(i+0.5)*h; + p=p+normpdf(x); + } + p=(y[0]+h*p)/2.0; + s=1.0; + for (k=1;k<=m;k++) + { s=4.0*s; + q=(s*p-y[k-1])/(s-1.0); + y[k-1]=p; p=q; + } + ep=fabs(q-y[m-1]); + m=m+1; y[m-1]=q; n=n+n; h=h/2.0; + } + if (ca>eb) + return(-q) ; + else + return(q) ; +} + +double gaussian(double x, double mean, double sig) +{ + if (sig>0) + return exp(-0.5*(x-mean)*(x-mean)/sig/sig)/sqrt(2.0*PI)/sig ; + else + { + printf("negative variance in Gaussian.\n") ; + return 0 ; + } +} +//end of fromb.c + diff --git a/parameter-learning_nd_disc/source code PL/gpref/gpref.c b/parameter-learning_nd_disc/source code PL/gpref/gpref.c new file mode 100755 index 0000000..93cacbd --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/gpref.c @@ -0,0 +1,184 @@ +// main function + +// Chu Wei (C) Copyright 2004 at GATSBY + +#include +#include +#include +#include +#include "pref.h" +#define VERSION (1) + +int main( int argc, char * argv[] ) +{ + Data_List rawdatalist ; + Pref_Settings * settings ; + double linear = 0 ; + double kappa_o = 0 ; + double kappa = 0 ; + double sigma = 0 ; + double regular = -1 ; + unsigned int sz = 0 ; + unsigned int index = 0 ; + double parameter = 0 ; + char buf[2048]="" ; + char filename[2048]="" ; + + printf("\n Gaussian Processes for Preference Learning - version 1.%d\n - Chu Wei Copyright(C) 2004 at Gatsby Unit\n\n", VERSION) ; + + if ( 1 == argc ) + { + // display help + printf(" Usage : gpref [-K k] [-M m] [-O o][-R r] training_pairs samples_data\n") ; + printf(" - training_pairs: the data file containing training pairs\n") ; + printf(" - samples_data: the data file containing sample features\n") ; + printf(" - K k: set initial Kappa at k\n") ; + printf(" - S s: set initial Sigma^2 at s (default 1)\n") ; + printf(" - O o: set initial kappa_O at o (default 1)\n") ; + printf(" - G : use Gaussian kernel (default Linear)\n\n") ; + //printf(" - R r: set Regularization factor at r (default 1)\n\n") ; + return 0 ; + } + else + { + sprintf(filename,"%s",argv[--argc]) ; + if (argc>1) + printf("Options:\n") ; + do + { + strcpy(buf, argv[--argc]) ; + sz = strlen(buf) ; + //printf ("%s %d\n", buf, sz) ; + if ( '-' == buf[0] ) + { + for (index = 1 ; index < sz ; index++) + { + switch (buf[index]) + { + case '-' : + break ; + case 'K' : + if (parameter > 0) + { + if (index + 1 == sz) + { + printf(" - initialize Kappa at the value %f.\n", parameter) ; + kappa = parameter ; + parameter = 0; + } + } + break ; + case 'O' : + if (parameter > 0) + { + if (index + 1 == sz) + { + printf(" - initialize kappa_O at the value %f.\n", parameter) ; + kappa_o = parameter ; + parameter = 0; + } + } + break ; + case 'S' : + if (parameter > 0) + { + if (index + 1 == sz) + { + printf(" - initialize Sigma^2 at the value %f.\n", parameter) ; + sigma = parameter ; + parameter = 0; + } + } + break ; + case 'G' : + printf(" - use GAUSSIAN kernel.\n") ; + linear = 1 ; + break ; + case 'R' : + if (parameter >= 0) + { + if (index + 1 == sz) + { + printf(" - initialize Regularization factor at the value %f.\n", parameter) ; + regular = parameter ; + parameter = 0; + } + } + break ; + default : + printf(" - %c is invalid.\n", buf[index]) ; + break ; + } + } + } + else + parameter = atof(buf) ; + } + while ( argc > 1 ) ; + printf("\n") ; + } + + Create_Data_List (&rawdatalist) ; + if ( 1 == Pref_Loadfile (&rawdatalist, filename) ) + { + printf("fail to load data from %s.\n\n",filename) ; + exit(1) ; + } + settings = Create_Pref_Settings(&rawdatalist) ; + if (NULL == settings) + { + printf("fail to generate ordinal settings.\n") ; + exit(1) ; + } + else + { + if (kappa>0) + { + if (0==settings->ardon) + settings->kappa_a = kappa ; + else + { + for (index=0;indexpairs->dimen;index++) + settings->kappa[index] = kappa ; + } + } + if (sigma>0) + settings->noisevar = sigma ; + if (kappa_o>0) + settings->kappa_o = kappa_o ; + if (regular>=0) + settings->regular = regular ; + if (linear>0.5) + settings->kernel = GAUSSIAN ; + } + + if ( 1 == Pref_Loadpair (&(rawdatalist.trainpair), settings->trainfile) ) + { + printf("fail to load training pairs from %s.\n\n",settings->trainfile) ; + exit(1) ; + } + + settings->bfgs = Create_Bfgs_FuncGrad(settings->number) ; + if (NULL == settings->bfgs) + { + printf("fail to create BFGSs.\n") ; + exit(1) ; + } + Pref_Bfgs_Settings(settings,settings->bfgs) ; + + //Pref_MAP_Training (settings) ; + +#ifdef _PREF_LP + Pref_LAPLACE_Training (settings) ; +#endif + + Pref_Prediction (settings) ; + + Dumping_Pref_Settings(settings) ; + + Clear_Pref_Settings(settings) ; + Clear_Data_List (&rawdatalist) ; + return 0 ; +} + + diff --git a/parameter-learning_nd_disc/source code PL/gpref/laplace.c b/parameter-learning_nd_disc/source code PL/gpref/laplace.c new file mode 100755 index 0000000..9c6044c --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/laplace.c @@ -0,0 +1,531 @@ +#include +#include +#include +#include +#include "pref.h" +#include "neal_matrix.h" + +// matrix product with matrix, Cmk = Amn * Bnk +void brmul(double a[],double b[],int m,int n,int k,double c[]) +{ + int i,j,l,u; + for (i=0; i<=m-1; i++) + for (j=0; j<=k-1; j++) + { u=i*k+j; c[u]=0.0; + for (l=0; l<=n-1; l++) + c[u]=c[u]+a[i*n+l]*b[l*k+j]; + } + return; +} + +int Pref_LAPLACE_Evaluate_FuncGrad ( void * pointer, bfgs_FuncGrad * bfgs ) +{ + Pref_Settings * settings ; + Pref_Node * pair ; + Alphas * alpha ; + Alphas * alphab ; + double * w ; + double * ph ; + + double * lambda ; + double * dsigma ; + double * dmat ; + double * df ; + double * dfk ; + double * dls ; + double * ssmat ; + double * sdmat ; + + double * zk ; // length = m + double * gk ; // length = m, first order + double * hk ; // length = m, second order + double * tk ; // length = m + + unsigned int u, v ; + unsigned int i, j ; + double phi, n, sk ; + + double * t1 ; + double * t2 ; + double temp ; + double cbe ; + unsigned int ii ; // settings->kappa + double sigma ; + + if (NULL == pointer || NULL == bfgs) + return 1 ; + settings = pointer ; + + Bfgs_Pref_Settings( settings,settings->bfgs ) ; + + // call EP routine to find posterior distribution + if (1 == Pref_MAP_Training (settings) ) + { + printf("MAP failed to get equilibrium.\n") ; + return 1 ; + } + + // evaluate functional and gradient + if (NULL != settings->invcov) + free(settings->invcov) ; + + settings->invcov = (double*)malloc(settings->pairs->train*settings->pairs->train*sizeof(double)) ; + dsigma = (double*)malloc(settings->pairs->train*settings->pairs->train*sizeof(double)) ; + lambda = (double*)calloc(settings->pairs->train*settings->pairs->train,sizeof(double)) ; + t1 = (double*)malloc(settings->pairs->train*sizeof(double)) ; + t2 = (double*)malloc(settings->pairs->train*sizeof(double)) ; + + dmat = (double*)malloc(settings->pairs->train*settings->pairs->train*sizeof(double)) ; + ssmat = (double*)malloc(settings->pairs->train*settings->pairs->train*sizeof(double)) ; + sdmat = (double*)malloc(settings->pairs->train*settings->pairs->train*sizeof(double)) ; + + w = (double*)malloc(settings->pairs->train*sizeof(double)) ; + ph = (double*)malloc(settings->pairs->train*sizeof(double)) ; + + zk = (double*)malloc(settings->pairs->trainpair.count*sizeof(double)) ; + gk = (double*)malloc(settings->pairs->trainpair.count*sizeof(double)) ; + hk = (double*)malloc(settings->pairs->trainpair.count*sizeof(double)) ; + tk = (double*)malloc(settings->pairs->trainpair.count*sizeof(double)) ; + + df = (double*)malloc(settings->pairs->train*sizeof(double)) ; + dfk = (double*)malloc(settings->pairs->train*sizeof(double)) ; + dls = (double*)calloc(settings->pairs->train*settings->pairs->train,sizeof(double)) ; + + sigma = sqrt(2.0*settings->noisevar) ; + + bfgs->fx = 0 ; + for (i=0;inumber;i++) + bfgs->gx[i] = 0 ; + + // initial Sigma + u=0 ; + for (i=0;ipairs->count;i++) + { + if ((settings->alpha+i)->pair->fold < 0) + { + assert((settings->alpha+i)->pair->serial>0) ; + v=0 ; + for (j=0;jalpha+j)->pair->fold < 0) + { + assert((settings->alpha+j)->pair->serial>0) ; + settings->invcov[u*settings->pairs->train+v] = + Calculate_Covfun(settings->alpha+i,settings->alpha+j,settings) ; + settings->invcov[v*settings->pairs->train+u] = + settings->invcov[u*settings->pairs->train+v] ; + v+=1 ; + } + } + w[u] = (settings->alpha+i)->pair->weight ; // alphas + ph[u] = 0 ; + settings->invcov[u*settings->pairs->train+u] = Calculate_Covfun(settings->alpha+i,settings->alpha+i,settings) ; + u+=1 ; + } + } + assert(u==settings->pairs->train) ; + + // fx = 0.5*w*Sigma*w + for (i=0;ipairs->train;i++) + { + for (j=0;jfx += settings->invcov[i*settings->pairs->train+j]*w[i]*w[j] ; + bfgs->fx += 0.5 * settings->invcov[i*settings->pairs->train+i]*w[i]*w[i] ; + } + + // traverse training samples + pair = settings->pairs->trainpair.front ; + i=0; + while (NULL != pair) + { + u = (settings->alpha+(pair->u-1))->pair->serial - 1 ; + v = (settings->alpha+(pair->v-1))->pair->serial - 1 ; + assert(uu&&upairs->train) ; + assert(vv&&vpairs->train) ; + + zk[i] = (settings->alpha+(pair->u-1))->pair->postmean + - (settings->alpha+(pair->v-1))->pair->postmean ; // f(u_k)-f(v_k) + zk[i] = zk[i] / sigma ; + n = normpdf(zk[i]) ; + phi = 0.5 + normcdf(0,zk[i]) ; + gk[i] = - n/phi/sigma ; + hk[i] = ((n*n)/(phi*phi)+zk[i]*n/phi)/sigma/sigma ; + tk[i] = (n/phi-2.0*(n*n*n)/(phi*phi*phi)-3.0*zk[i]*(n*n)/(phi*phi)-zk[i]*zk[i]*n/phi)/sigma/sigma/sigma ; + + sk = (zk[i]*zk[i]*n/phi+zk[i]*n*n/phi*phi-n/phi)/sigma/sigma*sqrt(2.0) ; + ph[u] += sk ; + ph[v] -= sk ; + + bfgs->fx -= log(phi) ; + bfgs->gx[0] += zk[i]*n/phi/sigma ; + + // labmda matrix + lambda[(u)*settings->pairs->train+(u)] += hk[i] ; + lambda[(v)*settings->pairs->train+(v)] += hk[i] ; + lambda[(u)*settings->pairs->train+(v)] -= hk[i] ; + lambda[(v)*settings->pairs->train+(u)] -= hk[i] ; + + i+=1 ; + pair = pair->next ; + } + assert(i==settings->pairs->trainpair.count) ; + + if (0 == cholesky(settings->invcov,settings->pairs->train,&temp)) + printf("Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + + for (i=0;ipairs->train;i++) + bfgs->fx += log(settings->invcov[i*settings->pairs->train+i]) ; + + if (0 == inverse_from_cholesky(settings->invcov, t1, t2, settings->pairs->train) ) + printf("Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + + // Sigma^-1 + Lambda + for (i=0;ipairs->train;i++) + { + for (j=0;jpairs->train+j] = settings->invcov[i*settings->pairs->train+j] + lambda[i*settings->pairs->train+j] ; + dmat[j*settings->pairs->train+i] = dmat[i*settings->pairs->train+j]; + } + dmat[i*settings->pairs->train+i] = settings->invcov[i*settings->pairs->train+i] + lambda[i*settings->pairs->train+i] ; + } + + if (0 == cholesky(dmat,settings->pairs->train,&temp)) + printf("Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + + for (i=0;ipairs->train;i++) + bfgs->fx += log(dmat[i*settings->pairs->train+i]) ; + // end of fx + if (0 == inverse_from_cholesky(dmat, t1, t2, settings->pairs->train) ) + printf("Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + + // for gx[0] --- ln\sigma + // df/ds + for (i=0;ipairs->train;i++) + { + df[i] = 0 ; + for (j=0;jpairs->train;j++) + { + df[i]+=dmat[i*settings->pairs->train+j]*ph[j] ; + } + } + + // d lambda + // traverse training samples + for (i=0;ipairs->train;i++) + { + for (j=0;jpairs->train;j++) + { + dls[i*settings->pairs->train+j] = -2.0*lambda[i*settings->pairs->train+j]/sigma ; + } + } + pair = settings->pairs->trainpair.front ; + i=0; + while (NULL != pair) + { + u = (settings->alpha+(pair->u-1))->pair->serial - 1 ; + v = (settings->alpha+(pair->v-1))->pair->serial - 1 ; + assert(uu&&upairs->train) ; + assert(vv&&vpairs->train) ; + // d labmda/d sigma matrix + dls[u*settings->pairs->train+v] += zk[i]*sqrt(2)*tk[i] ; + dls[v*settings->pairs->train+u] += zk[i]*sqrt(2)*tk[i] ; + dls[u*settings->pairs->train+u] -= zk[i]*sqrt(2)*tk[i] ; + dls[v*settings->pairs->train+v] -= zk[i]*sqrt(2)*tk[i] ; + // df + dls[u*settings->pairs->train+v] += tk[i]*(-df[u]+df[v]) ; + dls[v*settings->pairs->train+u] += tk[i]*(-df[u]+df[v]) ; + dls[u*settings->pairs->train+u] += tk[i]*(df[u]-df[v]) ; + dls[v*settings->pairs->train+v] += tk[i]*(df[u]-df[v]) ; + i+=1 ; + pair = pair->next ; + } + for (i=0;ipairs->train;i++) + { + for (j=0;jpairs->train;j++) + { + bfgs->gx[0] += 0.5*dmat[i*settings->pairs->train+j]*dls[j*settings->pairs->train+i] ; + } + } + bfgs->gx[0] = bfgs->gx[0]*(-0.5)*sigma*sigma*sigma ; // d /d 1/sigma^2 + if (settings->kernel==LINEAR&&settings->ardon==1) + bfgs->gx[0] = 0 ; + + // d ln kappa + // for kernel parameters + // calculate for each settings->kappa Gaussian parameter + if (1 == settings->ardon) + { + for (ii=0;iipairs->dimen;ii++) + { + // calculate dsigmam for each settings->kappa parameter + u=0 ; + for (i=0;ipairs->count;i++) + { + alpha = settings->alpha + i ; + if ( alpha->pair->fold < 0 ) + { + v=0 ; + for (j=0;j<=i;j++) + { + alphab = settings->alpha + j ; + if ( alphab->pair->fold < 0 ) + { + if ( GAUSSIAN == settings->kernel ) + { + dsigma[u*settings->pairs->train+v]=(alpha->kernels[j]-settings->kappa_m)*(-(alpha->pair-> + point[ii]-alphab->pair->point[ii])*(alpha->pair->point[ii]-alphab->pair->point[ii])/2.0/settings->pairs->dimen) ; + } + else if ( LINEAR == settings->kernel ) + { + dsigma[u*settings->pairs->train+v]=(alpha->pair->point[ii]*alphab->pair->point[ii])*settings->kappa_o ; + } + else if ( USERDEFINED == settings->kernel ) + { + cbe = 0 ; // temp storage + if (0==settings->pairs->featuretype[ii]) + cbe-=(alpha->pair->point[ii]-alphab->pair->point[ii]) + *(alpha->pair->point[ii]-alphab->pair->point[ii])/2.0 ; + else if (alpha->pair->point[ii]!=alphab->pair->point[ii]) + cbe-=1.0/2.0 ; + dsigma[u*settings->pairs->train+v] = (alpha->kernels[j]-settings->kappa_m) * cbe ; + } + else + printf ("Error in kernel type.\n") ; + dsigma[v*settings->pairs->train+u] = dsigma[u*settings->pairs->train+v] ; + v += 1 ; + } + } + u += 1 ; + } + } + brmul(dmat, settings->invcov, settings->pairs->train, settings->pairs->train, settings->pairs->train, ssmat) ;// VC*VC*a'*dsigma*a/2 + brmul(ssmat, dsigma, settings->pairs->train, settings->pairs->train, settings->pairs->train, sdmat) ; + // VC*VC*a'*dsigma*a/2 + for (i=0;ipairs->train;i++) + { + for (j=i+1;jpairs->train;j++) + bfgs->gx[ii+settings->pairs->classes] -= w[i]*w[j]*dsigma[i*settings->pairs->train+j] ; + bfgs->gx[ii+settings->pairs->classes] -= 0.5*w[i]*w[i]*dsigma[i*settings->pairs->train+i] ; + } + for (i=0;ipairs->train;i++) + for (j=0;jpairs->train;j++) + bfgs->gx[ii+settings->pairs->classes] += 0.5*sdmat[i*settings->pairs->train+j]*lambda[j*settings->pairs->train+i] ; + //dfk + for (i=0;ipairs->train;i++) + { + dfk[i] = 0 ; + for (j=0;jpairs->train;j++) + dfk[i] += sdmat[i*settings->pairs->train+j]*w[j] ; + } + for (i=0;ipairs->train;i++) + { + for (j=0;jpairs->train;j++) + { + dls[i*settings->pairs->train+j] = 0 ; + } + } + pair = settings->pairs->trainpair.front ; + i=0; + while (NULL != pair) + { + u = (settings->alpha+(pair->u-1))->pair->serial - 1 ; + v = (settings->alpha+(pair->v-1))->pair->serial - 1 ; + assert(u<=pair->u&&u<=settings->pairs->train) ; + assert(v<=pair->v&&v<=settings->pairs->train) ; + // df + dls[u*settings->pairs->train+v] += tk[i]*(-dfk[u]+dfk[v]) ; + dls[v*settings->pairs->train+u] += tk[i]*(-dfk[u]+dfk[v]) ; + dls[u*settings->pairs->train+u] += tk[i]*(dfk[u]-dfk[v]) ; + dls[v*settings->pairs->train+v] += tk[i]*(dfk[u]-dfk[v]) ; + i+=1 ; + pair = pair->next ; + } + for (i=0;ipairs->train;i++) + for (j=0;jpairs->train;j++) + bfgs->gx[ii+settings->pairs->classes] += 0.5*dmat[i*settings->pairs->train+j]*dls[j*settings->pairs->train+i] ; + +bfgs->gx[ii+settings->pairs->classes] += settings->regular*settings->kappa[ii] ; +bfgs->fx += 0.5*settings->regular*settings->kappa[ii]*settings->kappa[ii] ; +//bfgs->gx[ii+settings->pairs->classes] += settings->regular ; +//bfgs->fx += settings->regular*settings->kappa[ii] ; + + bfgs->gx[ii+settings->pairs->classes] = bfgs->gx[ii+settings->pairs->classes] * settings->kappa[ii] ; + } + } + else + { + u=0 ; + for (i=0;ipairs->count;i++) + { + alpha = settings->alpha + i ; + if ( alpha->pair->fold < 0 ) + { + v = 0 ; + for (j=0;j<=i;j++) + { + alphab = settings->alpha + j ; + if ( alphab->pair->fold < 0 ) + { + if ( GAUSSIAN == settings->kernel ) + { + cbe = 0 ; // temp storage + for (ii=0;iipairs->dimen;ii++) + cbe-=(alpha->pair->point[ii]-alphab->pair->point[ii]) + *(alpha->pair->point[ii]-alphab->pair->point[ii]) ; + dsigma[u*settings->pairs->train+v] = (alpha->kernels[j]-settings->kappa_m)*cbe/2.0/settings->pairs->dimen ; + } + else if (LINEAR == settings->kernel ) + { + cbe = 0 ; // temp storage + for (ii=0;iipairs->dimen;ii++) + cbe += alpha->pair->point[ii]*alphab->pair->point[ii] ; + dsigma[u*settings->pairs->train+v] = cbe*settings->kappa_o ; + } + else if ( USERDEFINED == settings->kernel ) + { + cbe = 0 ; // temp storage + for (ii=0;iipairs->dimen;ii++) + { + if (0==settings->pairs->featuretype[ii]) + cbe-=(alpha->pair->point[ii]-alphab->pair->point[ii]) + *(alpha->pair->point[ii]-alphab->pair->point[ii]) ; + else if (alpha->pair->point[ii]!=alphab->pair->point[ii]) + cbe-=1.0 ; + } + dsigma[u*settings->pairs->train+v] = (alpha->kernels[j]-settings->kappa_m) * cbe / 2.0 ; + } + else + printf ("Error in kernel type.\n") ; + dsigma[v*settings->pairs->train+u] = dsigma[u*settings->pairs->train+v] ; + v += 1 ; + } + } + u += 1 ; + } + } + brmul(dmat, settings->invcov, settings->pairs->train, settings->pairs->train, settings->pairs->train, ssmat) ;// VC*VC*a'*dsigma*a/2 + brmul(ssmat, dsigma, settings->pairs->train, settings->pairs->train, settings->pairs->train, sdmat) ; + // VC*VC*a'*dsigma*a/2 + for (i=0;ipairs->train;i++) + { + for (j=i+1;jpairs->train;j++) + bfgs->gx[settings->pairs->classes] -= w[i]*w[j]*dsigma[i*settings->pairs->train+j] ; + bfgs->gx[settings->pairs->classes] -= 0.5*w[i]*w[i]*dsigma[i*settings->pairs->train+i] ; + } + for (i=0;ipairs->train;i++) + for (j=0;jpairs->train;j++) + bfgs->gx[settings->pairs->classes] += 0.5*sdmat[i*settings->pairs->train+j]*lambda[j*settings->pairs->train+i] ; + //dfk + for (i=0;ipairs->train;i++) + { + dfk[i] = 0 ; + for (j=0;jpairs->train;j++) + dfk[i] += sdmat[i*settings->pairs->train+j]*w[j] ; + //printf("dfk=%f\n",dfk[i]) ; + } + for (i=0;ipairs->train;i++) + { + for (j=0;jpairs->train;j++) + { + dls[i*settings->pairs->train+j] = 0 ; + } + } + pair = settings->pairs->trainpair.front ; + i=0; + while (NULL != pair) + { + u = (settings->alpha+(pair->u-1))->pair->serial - 1 ; + v = (settings->alpha+(pair->v-1))->pair->serial - 1 ; + assert(u<=pair->u&&u<=settings->pairs->train) ; + assert(v<=pair->v&&v<=settings->pairs->train) ; + // df + dls[u*settings->pairs->train+v] += tk[i]*(-dfk[u]+dfk[v]) ; + dls[v*settings->pairs->train+u] += tk[i]*(-dfk[u]+dfk[v]) ; + dls[u*settings->pairs->train+u] += tk[i]*(dfk[u]-dfk[v]) ; + dls[v*settings->pairs->train+v] += tk[i]*(dfk[u]-dfk[v]) ; + i+=1 ; + pair = pair->next ; + } + for (i=0;ipairs->train;i++) + { + for (j=0;jpairs->train;j++) + bfgs->gx[settings->pairs->classes] += 0.5*dmat[i*settings->pairs->train+j] + *dls[j*settings->pairs->train+i] ; + } + + bfgs->gx[settings->pairs->classes] = bfgs->gx[settings->pairs->classes] * settings->kappa_a ; + + if (settings->kernel==LINEAR) + bfgs->gx[settings->pairs->classes] = 0 ; + } + + + // for (i=0;inumber;i++) + // { + //if (ipairs->classes) + // bfgs->gx[i]=0; + // } +//bfgs->gx[0] = 0 ; + +#ifdef _ORDINAL_DEBUG + //if (bfgs->x[0]>=100) + //bfgs->gx[settings->number-1] = 0 ; + printf("functional %f \n", bfgs->fx) ; + for (i=0;inumber;i++) + { + printf("gardient %f --- x %f\n", bfgs->gx[i], bfgs->x[i]) ; + } +#endif + free(dls) ; + free(dfk) ; + free(df) ; + free(tk) ; + free(hk) ; + free(gk) ; + free(zk) ; + free(ph) ; + free(w) ; + free(ssmat) ; + free(sdmat) ; + free(dmat) ; + free(t2) ; + free(t1) ; + free(lambda) ; + free(dsigma) ; + return 0 ; +} + +int Pref_LAPLACE_Training (Pref_Settings * settings) +{ + unsigned int i ; + + if (NULL == settings) + return 1 ; + + printf("Laplacian Approximation around MAP estimate ...\n") ; + if ( 1 == lbfgsb_minfunc ( Pref_LAPLACE_Evaluate_FuncGrad, settings, settings->bfgs ) ) + { + printf("fail to find local minimum.\n") ; + return 1; + } + // save best funcgrad to settings + Bfgs_Pref_Settings( settings, settings->bfgs ) ; + printf("Optimal Settings: \n") ; + printf("Noise Variance: %f\n",settings->noisevar) ; + printf("Kappa_O: %f\n",settings->kappa_o) ; + if (0==settings->ardon) + printf("Kernel: %f\n",settings->kappa_a) ; + else if (settings->pairs->dimen<10) + { + printf("Kernel:\n") ; + for (i=0;ipairs->dimen;i++) + printf("%u --- %f:\n", i, settings->kappa[i]) ; + } + tstart(); + Pref_MAP_Training (settings) ; + tend(); + settings->time = tval() ; + return 0 ; +} + diff --git a/parameter-learning_nd_disc/source code PL/gpref/lbfgsb.c b/parameter-learning_nd_disc/source code PL/gpref/lbfgsb.c new file mode 100755 index 0000000..b568d55 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/lbfgsb.c @@ -0,0 +1,3191 @@ +/* + * ME -- + * + * $Id: lbfgsb.c,v 1.1.1.1 2004/02/16 23:45:44 taku-ku Exp $; + * + * Copyright (C) 2001-2002 Taku Kudo + * All rights reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later verjsion. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * */ + +/* + NEOS, November 1994. (Latest revision April 1997.) + Optimization Technology Center. + Argonne National Laboratory and Northwestern University. + Written by Ciyou Zhu + in collaboration with R.H. Byrd, P. Lu-Chen and J. Nocedal. */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +typedef long int integer; +typedef unsigned long int uinteger; +typedef char *address; +typedef short int shortint; +typedef float real; +typedef double doublereal; +typedef long int logical; +typedef short int shortlogical; +typedef char logical1; +typedef char integer1; +typedef short flag; +typedef short ftnlen; +typedef short ftnint; + +#define TRUE_ (1) +#define FALSE_ (0) +#define abs(x) ((x) >= 0 ? (x) : -(x)) +#define min(a,b) ((a) <= (b) ? (a) : (b)) +#define max(a,b) ((a) >= (b) ? (a) : (b)) +#define s_cmp(a,b,c,d) (strncmp ((a),(b), (c) >= (d) ? (d) : (c))) +#define s_copy(a,b,c,d) (strcpy((a),(b))) + +static doublereal c_b9 = 0.; +static integer c__1 = 1; +static integer c__11 = 11; +static doublereal c_b275 = .001; +static doublereal c_b276 = .9; +static doublereal c_b277 = .1; + + +/* Subroutine */ int daxpy_( +integer *n, +doublereal *da, doublereal *dx, +integer *incx, +doublereal *dy, +integer *incy) +{ + /* System generated locals */ + integer i__1; + + /* Local variables */ + static integer i__, m, ix, iy, mp1; + + /* Parameter adjustments */ + --dy; + --dx; + + /* Function Body */ + if (*n <= 0) { + return 0; + } + if (*da == 0.) { + return 0; + } + if (*incx == 1 && *incy == 1) { + goto L20; + } + +/* code for unequal increments or equal increments */ +/* not equal to 1 */ + + ix = 1; + iy = 1; + if (*incx < 0) { + ix = (-(*n) + 1) * *incx + 1; + } + if (*incy < 0) { + iy = (-(*n) + 1) * *incy + 1; + } + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + dy[iy] += *da * dx[ix]; + ix += *incx; + iy += *incy; +/* L10: */ + } + return 0; + +/* code for both increments equal to 1 */ + + +/* clean-up loop */ + +L20: + m = *n % 4; + if (m == 0) { + goto L40; + } + i__1 = m; + for (i__ = 1; i__ <= i__1; ++i__) { + dy[i__] += *da * dx[i__]; +/* L30: */ + } + if (*n < 4) { + return 0; + } +L40: + mp1 = m + 1; + i__1 = *n; + for (i__ = mp1; i__ <= i__1; i__ += 4) { + dy[i__] += *da * dx[i__]; + dy[i__ + 1] += *da * dx[i__ + 1]; + dy[i__ + 2] += *da * dx[i__ + 2]; + dy[i__ + 3] += *da * dx[i__ + 3]; +/* L50: */ + } + return 0; +} /* daxpy_ */ + +doublereal ddot_( +integer *n, +doublereal *dx, +integer *incx, +doublereal *dy, +integer *incy) +{ + /* System generated locals */ + integer i__1; + doublereal ret_val; + + /* Local variables */ + static integer i__, m; + static doublereal dtemp; + static integer ix, iy, mp1; + + +/* forms the dot product of two vectors. */ +/* uses unrolled loops for increments equal to one. */ +/* jack dongarra, linpack, 3/11/78. */ + + + /* Parameter adjustments */ + --dy; + --dx; + + /* Function Body */ + ret_val = 0.; + dtemp = 0.; + if (*n <= 0) { + return ret_val; + } + if (*incx == 1 && *incy == 1) { + goto L20; + } + +/* code for unequal increments or equal increments */ +/* not equal to 1 */ + + ix = 1; + iy = 1; + if (*incx < 0) { + ix = (-(*n) + 1) * *incx + 1; + } + if (*incy < 0) { + iy = (-(*n) + 1) * *incy + 1; + } + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + dtemp += dx[ix] * dy[iy]; + ix += *incx; + iy += *incy; +/* L10: */ + } + ret_val = dtemp; + return ret_val; + +/* code for both increments equal to 1 */ + + +/* clean-up loop */ + +L20: + m = *n % 5; + if (m == 0) { + goto L40; + } + i__1 = m; + for (i__ = 1; i__ <= i__1; ++i__) { + dtemp += dx[i__] * dy[i__]; +/* L30: */ + } + if (*n < 5) { + goto L60; + } +L40: + mp1 = m + 1; + i__1 = *n; + for (i__ = mp1; i__ <= i__1; i__ += 5) { + dtemp = dtemp + dx[i__] * dy[i__] + dx[i__ + 1] * dy[i__ + 1] + dx[ + i__ + 2] * dy[i__ + 2] + dx[i__ + 3] * dy[i__ + 3] + dx[i__ + + 4] * dy[i__ + 4]; +/* L50: */ + } +L60: + ret_val = dtemp; + return ret_val; +} /* ddot_ */ + +/* ====================== The end of ddot ================================ */ + +/* Subroutine */ int dpofa_( +doublereal *a, +integer *lda, integer *n, integer *info) +{ + /* System generated locals */ + integer a_dim1, a_offset, i__1, i__2, i__3; + + /* Local variables */ + static integer j, k; + static doublereal s, t; + static integer jm1; + + /* Parameter adjustments */ + a_dim1 = *lda; + a_offset = 1 + a_dim1 * 1; + a -= a_offset; + + /* Function Body */ + i__1 = *n; + for (j = 1; j <= i__1; ++j) { + *info = j; + s = 0.; + jm1 = j - 1; + if (jm1 < 1) { + goto L20; + } + i__2 = jm1; + for (k = 1; k <= i__2; ++k) { + i__3 = k - 1; + t = a[k + j * a_dim1] - ddot_(&i__3, &a[k * a_dim1 + 1], &c__1, & + a[j * a_dim1 + 1], &c__1); + t /= a[k + k * a_dim1]; + a[k + j * a_dim1] = t; + s += t * t; +/* L10: */ + } +L20: + s = a[j + j * a_dim1] - s; +/* ......exit */ + if (s <= 0.) { + goto L40; + } + a[j + j * a_dim1] = sqrt(s); +/* L30: */ + } + *info = 0; +L40: + return 0; +} /* dpofa_ */ + +/* ====================== The end of dpofa =============================== */ + +/* Subroutine */ int dtrsl_( +doublereal *t, +integer *ldt, integer *n, +doublereal *b, +integer *job, integer *info) +{ + /* System generated locals */ + integer t_dim1, t_offset, i__1, i__2; + + /* Local variables */ + static integer case__; + static doublereal temp; + static integer j; + static integer jj; + + /* Parameter adjustments */ + t_dim1 = *ldt; + t_offset = 1 + t_dim1 * 1; + t -= t_offset; + --b; + + /* Function Body */ + i__1 = *n; + for (*info = 1; *info <= i__1; ++(*info)) { +/* ......exit */ + if (t[*info + *info * t_dim1] == 0.) { + goto L150; + } +/* L10: */ + } + *info = 0; + +/* determine the task and go to it. */ + + case__ = 1; + if (*job % 10 != 0) { + case__ = 2; + } + if (*job % 100 / 10 != 0) { + case__ += 2; + } + switch ((int)case__) { + case 1: goto L20; + case 2: goto L50; + case 3: goto L80; + case 4: goto L110; + } + +/* solve t*x=b for t lower triangular */ + +L20: + b[1] /= t[t_dim1 + 1]; + if (*n < 2) { + goto L40; + } + i__1 = *n; + for (j = 2; j <= i__1; ++j) { + temp = -b[j - 1]; + i__2 = *n - j + 1; + daxpy_(&i__2, &temp, &t[j + (j - 1) * t_dim1], &c__1, &b[j], &c__1); + b[j] /= t[j + j * t_dim1]; +/* L30: */ + } +L40: + goto L140; + +/* solve t*x=b for t upper triangular. */ + +L50: + b[*n] /= t[*n + *n * t_dim1]; + if (*n < 2) { + goto L70; + } + i__1 = *n; + for (jj = 2; jj <= i__1; ++jj) { + j = *n - jj + 1; + temp = -b[j + 1]; + daxpy_(&j, &temp, &t[(j + 1) * t_dim1 + 1], &c__1, &b[1], &c__1); + b[j] /= t[j + j * t_dim1]; +/* L60: */ + } +L70: + goto L140; + +/* solve trans(t)*x=b for t lower triangular. */ + +L80: + b[*n] /= t[*n + *n * t_dim1]; + if (*n < 2) { + goto L100; + } + i__1 = *n; + for (jj = 2; jj <= i__1; ++jj) { + j = *n - jj + 1; + i__2 = jj - 1; + b[j] -= ddot_(&i__2, &t[j + 1 + j * t_dim1], &c__1, &b[j + 1], &c__1); + b[j] /= t[j + j * t_dim1]; +/* L90: */ + } +L100: + goto L140; + +/* solve trans(t)*x=b for t upper triangular. */ + +L110: + b[1] /= t[t_dim1 + 1]; + if (*n < 2) { + goto L130; + } + i__1 = *n; + for (j = 2; j <= i__1; ++j) { + i__2 = j - 1; + b[j] -= ddot_(&i__2, &t[j * t_dim1 + 1], &c__1, &b[1], &c__1); + b[j] /= t[j + j * t_dim1]; +/* L120: */ + } +L130: +L140: +L150: + return 0; +} /* dtrsl_ */ + +/* Subroutine */ int dcopy_( +integer *n, +doublereal *dx, +integer *incx, +doublereal *dy, +integer *incy) +{ + /* System generated locals */ + integer i__1; + + /* Local variables */ + static integer i__, m, ix, iy, mp1; + + +/* copies a vector, x, to a vector, y. */ +/* uses unrolled loops for increments equal to one. */ +/* jack dongarra, linpack, 3/11/78. */ + + /* Parameter adjustments */ + --dy; + --dx; + + /* Function Body */ + if (*n <= 0) { + return 0; + } + if (*incx == 1 && *incy == 1) { + goto L20; + } + +/* code for unequal increments or equal increments */ +/* not equal to 1 */ + + ix = 1; + iy = 1; + if (*incx < 0) { + ix = (-(*n) + 1) * *incx + 1; + } + if (*incy < 0) { + iy = (-(*n) + 1) * *incy + 1; + } + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + dy[iy] = dx[ix]; + ix += *incx; + iy += *incy; +/* L10: */ + } + return 0; + +/* code for both increments equal to 1 */ + + +/* clean-up loop */ + +L20: + m = *n % 7; + if (m == 0) { + goto L40; + } + i__1 = m; + for (i__ = 1; i__ <= i__1; ++i__) { + dy[i__] = dx[i__]; +/* L30: */ + } + if (*n < 7) { + return 0; + } +L40: + mp1 = m + 1; + i__1 = *n; + for (i__ = mp1; i__ <= i__1; i__ += 7) { + dy[i__] = dx[i__]; + dy[i__ + 1] = dx[i__ + 1]; + dy[i__ + 2] = dx[i__ + 2]; + dy[i__ + 3] = dx[i__ + 3]; + dy[i__ + 4] = dx[i__ + 4]; + dy[i__ + 5] = dx[i__ + 5]; + dy[i__ + 6] = dx[i__ + 6]; +/* L50: */ + } + return 0; +} /* dcopy_ */ + +/* ====================== The end of dcopy =============================== */ + +/* Subroutine */ int active_( +integer *n, +doublereal *l, doublereal *u, +integer *nbd, +doublereal *x, +integer *iwhere, integer *iprint, +logical *prjctd, logical *cnstnd, logical *boxed) +{ + /* System generated locals */ + integer i__1; + + /* Local variables */ + static integer nbdd, i__; + +/* Initialize nbdd, prjctd, cnstnd and boxed. */ + /* Parameter adjustments */ + --iwhere; + --x; + --nbd; + --u; + --l; + + /* Function Body */ + nbdd = 0; + *prjctd = FALSE_; + *cnstnd = FALSE_; + *boxed = TRUE_; +/* Project the initial x to the easible set if necessary. */ + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + if (nbd[i__] > 0) { + if (nbd[i__] <= 2 && x[i__] <= l[i__]) { + if (x[i__] < l[i__]) { + *prjctd = TRUE_; + x[i__] = l[i__]; + } + ++nbdd; + } else if (nbd[i__] >= 2 && x[i__] >= u[i__]) { + if (x[i__] > u[i__]) { + *prjctd = TRUE_; + x[i__] = u[i__]; + } + ++nbdd; + } + } +/* L10: */ + } +/* Initialize iwhere and assign values to cnstnd and boxed. */ + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + if (nbd[i__] != 2) { + *boxed = FALSE_; + } + if (nbd[i__] == 0) { +/* this variable is always free */ + iwhere[i__] = -1; +/* otherwise set x(i)=mid(x(i), u(i), l(i)). */ + } else { + *cnstnd = TRUE_; + if (nbd[i__] == 2 && u[i__] - l[i__] <= 0.) { +/* this variable is always fixed */ + iwhere[i__] = 3; + } else { + iwhere[i__] = 0; + } + } +/* L20: */ + } + return 0; +} /* active_ */ + +/* ======================= The end of active ============================= */ +/* Subroutine */ int bmv_( +integer *m, +doublereal *sy, doublereal *wt, +integer *col, +doublereal *v, doublereal *p, +integer *info) +{ + /* System generated locals */ + integer sy_dim1, sy_offset, wt_dim1, wt_offset, i__1, i__2; + + /* Local variables */ + static integer i__, k; + static integer i2; + static doublereal sum; + + /* Parameter adjustments */ + wt_dim1 = *m; + wt_offset = 1 + wt_dim1 * 1; + wt -= wt_offset; + sy_dim1 = *m; + sy_offset = 1 + sy_dim1 * 1; + sy -= sy_offset; + --p; + --v; + + /* Function Body */ + if (*col == 0) { + return 0; + } +/* PART I: solve [ D^(1/2) O ] [ p1 ] = [ v1 ] */ +/* [ -L*D^(-1/2) J ] [ p2 ] [ v2 ]. */ +/* solve Jp2=v2+LD^(-1)v1. */ + p[*col + 1] = v[*col + 1]; + i__1 = *col; + for (i__ = 2; i__ <= i__1; ++i__) { + i2 = *col + i__; + sum = 0.; + i__2 = i__ - 1; + for (k = 1; k <= i__2; ++k) { + sum += sy[i__ + k * sy_dim1] * v[k] / sy[k + k * sy_dim1]; +/* L10: */ + } + p[i2] = v[i2] + sum; +/* L20: */ + } +/* Solve the triangular system */ + dtrsl_(&wt[wt_offset], m, col, &p[*col + 1], &c__11, info); + if (*info != 0) { + return 0; + } +/* solve D^(1/2)p1=v1. */ + i__1 = *col; + for (i__ = 1; i__ <= i__1; ++i__) { + p[i__] = v[i__] / sqrt(sy[i__ + i__ * sy_dim1]); +/* L30: */ + } +/* PART II: solve [ -D^(1/2) D^(-1/2)*L' ] [ p1 ] = [ p1 ] */ +/* [ 0 J' ] [ p2 ] [ p2 ]. */ +/* solve J^Tp2=p2. */ + dtrsl_(&wt[wt_offset], m, col, &p[*col + 1], &c__1, info); + if (*info != 0) { + return 0; + } +/* compute p1=-D^(-1/2)(p1-D^(-1/2)L'p2) */ +/* =-D^(-1/2)p1+D^(-1)L'p2. */ + i__1 = *col; + for (i__ = 1; i__ <= i__1; ++i__) { + p[i__] = -p[i__] / sqrt(sy[i__ + i__ * sy_dim1]); +/* L40: */ + } + i__1 = *col; + for (i__ = 1; i__ <= i__1; ++i__) { + sum = 0.; + i__2 = *col; + for (k = i__ + 1; k <= i__2; ++k) { + sum += sy[k + i__ * sy_dim1] * p[*col + k] / sy[i__ + i__ * + sy_dim1]; +/* L50: */ + } + p[i__] += sum; +/* L60: */ + } + return 0; +} /* bmv_ */ + +/* ======================== The end of bmv =============================== */ +/* Subroutine */ int cmprlb_( +integer *n, integer *m, +doublereal *x, doublereal *g, doublereal *ws, doublereal *wy, doublereal *sy, doublereal *wt, doublereal *z__, doublereal *r__, doublereal *wa, +integer *index, +doublereal *theta, +integer *col, integer *head, integer *nfree, +logical *cnstnd, +integer *info) +{ + /* System generated locals */ + integer ws_dim1, ws_offset, wy_dim1, wy_offset, sy_dim1, sy_offset, + wt_dim1, wt_offset, i__1, i__2; + + /* Local variables */ + static integer i__, j, k; + static doublereal a1, a2; + static integer pointr; + + /* Parameter adjustments */ + --index; + --r__; + --z__; + --g; + --x; + --wa; + wt_dim1 = *m; + wt_offset = 1 + wt_dim1 * 1; + wt -= wt_offset; + sy_dim1 = *m; + sy_offset = 1 + sy_dim1 * 1; + sy -= sy_offset; + wy_dim1 = *n; + wy_offset = 1 + wy_dim1 * 1; + wy -= wy_offset; + ws_dim1 = *n; + ws_offset = 1 + ws_dim1 * 1; + ws -= ws_offset; + + /* Function Body */ + if (! (*cnstnd) && *col > 0) { + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + r__[i__] = -g[i__]; +/* L26: */ + } + } else { + i__1 = *nfree; + for (i__ = 1; i__ <= i__1; ++i__) { + k = index[i__]; + r__[i__] = -(*theta) * (z__[k] - x[k]) - g[k]; +/* L30: */ + } + bmv_(m, &sy[sy_offset], &wt[wt_offset], col, &wa[(*m << 1) + 1], &wa[ + 1], info); + if (*info != 0) { + *info = -8; + return 0; + } + pointr = *head; + i__1 = *col; + for (j = 1; j <= i__1; ++j) { + a1 = wa[j]; + a2 = *theta * wa[*col + j]; + i__2 = *nfree; + for (i__ = 1; i__ <= i__2; ++i__) { + k = index[i__]; + r__[i__] = r__[i__] + wy[k + pointr * wy_dim1] * a1 + ws[k + + pointr * ws_dim1] * a2; +/* L32: */ + } + pointr = pointr % *m + 1; +/* L34: */ + } + } + return 0; +} /* cmprlb_ */ + +/* ======================= The end of cmprlb ============================= */ +/* Subroutine */ int errclb_( +integer *n, integer *m, +doublereal *factr, doublereal *l, doublereal *u, +integer *nbd, +char *task, +integer *info, integer *k, +ftnlen task_len) +{ + /* System generated locals */ + integer i__1; + + /* Local variables */ + static integer i__; + + /* Parameter adjustments */ + --nbd; + --u; + --l; + + /* Function Body */ + if (*n <= 0) { + s_copy(task, "ERROR: N .LE. 0", (ftnlen)60, (ftnlen)15); + } + if (*m <= 0) { + s_copy(task, "ERROR: M .LE. 0", (ftnlen)60, (ftnlen)15); + } + if (*factr < 0.) { + s_copy(task, "ERROR: FACTR .LT. 0", (ftnlen)60, (ftnlen)19); + } +/* Check the validity of the arrays nbd(i), u(i), and l(i). */ + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + if (nbd[i__] < 0 || nbd[i__] > 3) { +/* return */ + s_copy(task, "ERROR: INVALID NBD", (ftnlen)60, (ftnlen)18); + *info = -6; + *k = i__; + } + if (nbd[i__] == 2) { + if (l[i__] > u[i__]) { +/* return */ + s_copy(task, "ERROR: NO FEASIBLE SOLUTION", (ftnlen)60, ( + ftnlen)27); + *info = -7; + *k = i__; + } + } +/* L10: */ + } + return 0; +} /* errclb_ */ + +/* ======================= The end of errclb ============================= */ + +/* Subroutine */ int formt_( +integer *m, +doublereal *wt, doublereal *sy, doublereal *ss, +integer *col, +doublereal *theta, +integer *info) +{ + /* System generated locals */ + integer wt_dim1, wt_offset, sy_dim1, sy_offset, ss_dim1, ss_offset, i__1, + i__2, i__3; + + /* Local variables */ + static doublereal ddum; + static integer i__, j, k; + static integer k1; + + /* Parameter adjustments */ + ss_dim1 = *m; + ss_offset = 1 + ss_dim1 * 1; + ss -= ss_offset; + sy_dim1 = *m; + sy_offset = 1 + sy_dim1 * 1; + sy -= sy_offset; + wt_dim1 = *m; + wt_offset = 1 + wt_dim1 * 1; + wt -= wt_offset; + + /* Function Body */ + i__1 = *col; + for (j = 1; j <= i__1; ++j) { + wt[j * wt_dim1 + 1] = *theta * ss[j * ss_dim1 + 1]; +/* L52: */ + } + i__1 = *col; + for (i__ = 2; i__ <= i__1; ++i__) { + i__2 = *col; + for (j = i__; j <= i__2; ++j) { + k1 = min(i__,j) - 1; + ddum = 0.; + i__3 = k1; + for (k = 1; k <= i__3; ++k) { + ddum += sy[i__ + k * sy_dim1] * sy[j + k * sy_dim1] / sy[k + + k * sy_dim1]; +/* L53: */ + } + wt[i__ + j * wt_dim1] = ddum + *theta * ss[i__ + j * ss_dim1]; +/* L54: */ + } +/* L55: */ + } +/* Cholesky factorize T to J*J' with */ +/* J' stored in the upper triangle of wt. */ + dpofa_(&wt[wt_offset], m, col, info); + if (*info != 0) { + *info = -3; + } + return 0; +} /* formt_ */ + +/* ======================= The end of formt ============================== */ +/* Subroutine */ int freev_( +integer *n, integer *nfree, integer *index, integer *nenter, integer *ileave, integer *indx2, integer *iwhere, +logical *wrk, logical *updatd, logical *cnstnd, +integer *iprint, integer *iter) +{ + /* System generated locals */ + integer i__1; + + /* Builtin functions */ + //integer s_wsle(), do_lio(), e_wsle(); + + /* Local variables */ + static integer iact, i__, k; + + /* Parameter adjustments */ + --iwhere; + --indx2; + --index; + + /* Function Body */ + *nenter = 0; + *ileave = *n + 1; + if (*iter > 0 && *cnstnd) { +/* count the entering and leaving variables. */ + i__1 = *nfree; + for (i__ = 1; i__ <= i__1; ++i__) { + k = index[i__]; + if (iwhere[k] > 0) { + --(*ileave); + indx2[*ileave] = k; + } +/* L20: */ + } + i__1 = *n; + for (i__ = *nfree + 1; i__ <= i__1; ++i__) { + k = index[i__]; + if (iwhere[k] <= 0) { + ++(*nenter); + indx2[*nenter] = k; + } +/* L22: */ + } + } + *wrk = *ileave < *n + 1 || *nenter > 0 || *updatd; +/* Find the index set of free and active variables at the GCP. */ + *nfree = 0; + iact = *n + 1; + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + if (iwhere[i__] <= 0) { + ++(*nfree); + index[*nfree] = i__; + } else { + --iact; + index[iact] = i__; + } +/* L24: */ + } + return 0; +} /* freev_ */ + +/* ======================= The end of freev ============================== */ +/* Subroutine */ int hpsolb_( +integer *n, +doublereal *t, +integer *iorder, integer *iheap) +{ + /* System generated locals */ + integer i__1; + + /* Local variables */ + static doublereal ddum; + static integer i__, j, k, indxin, indxou; + static doublereal out; + +/* ************ */ + /* Parameter adjustments */ + --iorder; + --t; + + /* Function Body */ + if (*iheap == 0) { +/* Rearrange the elements t(1) to t(n) to form a heap. */ + i__1 = *n; + for (k = 2; k <= i__1; ++k) { + ddum = t[k]; + indxin = iorder[k]; +/* Add ddum to the heap. */ + i__ = k; +L10: + if (i__ > 1) { + j = i__ / 2; + if (ddum < t[j]) { + t[i__] = t[j]; + iorder[i__] = iorder[j]; + i__ = j; + goto L10; + } + } + t[i__] = ddum; + iorder[i__] = indxin; +/* L20: */ + } + } +/* Assign to 'out' the value of t(1), the least member of the heap, */ +/* and rearrange the remaining members to form a heap as */ +/* elements 1 to n-1 of t. */ + if (*n > 1) { + i__ = 1; + out = t[1]; + indxou = iorder[1]; + ddum = t[*n]; + indxin = iorder[*n]; +/* Restore the heap */ +L30: + j = i__ + i__; + if (j <= *n - 1) { + if (t[j + 1] < t[j]) { + ++j; + } + if (t[j] < ddum) { + t[i__] = t[j]; + iorder[i__] = iorder[j]; + i__ = j; + goto L30; + } + } + t[i__] = ddum; + iorder[i__] = indxin; +/* Put the least member in t(n). */ + t[*n] = out; + iorder[*n] = indxou; + } + return 0; +} /* hpsolb_ */ + +/* ====================== The end of hpsolb ============================== */ + +/* Subroutine */ int matupd_( +integer *n, integer *m, +doublereal *ws, doublereal *wy, doublereal *sy, doublereal *ss, doublereal *d__, doublereal *r__, +integer *itail, integer *iupdat, integer *col, integer *head, +doublereal *theta, doublereal *rr, doublereal *dr, doublereal *stp, doublereal *dtd) +{ + /* System generated locals */ + integer ws_dim1, ws_offset, wy_dim1, wy_offset, sy_dim1, sy_offset, + ss_dim1, ss_offset, i__1, i__2; + + /* Local variables */ + static integer j; + static integer pointr; + + /* Parameter adjustments */ + --r__; + --d__; + ss_dim1 = *m; + ss_offset = 1 + ss_dim1 * 1; + ss -= ss_offset; + sy_dim1 = *m; + sy_offset = 1 + sy_dim1 * 1; + sy -= sy_offset; + wy_dim1 = *n; + wy_offset = 1 + wy_dim1 * 1; + wy -= wy_offset; + ws_dim1 = *n; + ws_offset = 1 + ws_dim1 * 1; + ws -= ws_offset; + + /* Function Body */ + if (*iupdat <= *m) { + *col = *iupdat; + *itail = (*head + *iupdat - 2) % *m + 1; + } else { + *itail = *itail % *m + 1; + *head = *head % *m + 1; + } +/* Update matrices WS and WY. */ + dcopy_(n, &d__[1], &c__1, &ws[*itail * ws_dim1 + 1], &c__1); + dcopy_(n, &r__[1], &c__1, &wy[*itail * wy_dim1 + 1], &c__1); +/* Set theta=yy/ys. */ + *theta = *rr / *dr; +/* Form the middle matrix in B. */ +/* update the upper triangle of SS, */ +/* and the lower triangle of SY: */ + if (*iupdat > *m) { +/* move old information */ + i__1 = *col - 1; + for (j = 1; j <= i__1; ++j) { + dcopy_(&j, &ss[(j + 1) * ss_dim1 + 2], &c__1, &ss[j * ss_dim1 + 1] + , &c__1); + i__2 = *col - j; + dcopy_(&i__2, &sy[j + 1 + (j + 1) * sy_dim1], &c__1, &sy[j + j * + sy_dim1], &c__1); +/* L50: */ + } + } +/* add new information: the last row of SY */ +/* and the last column of SS: */ + pointr = *head; + i__1 = *col - 1; + for (j = 1; j <= i__1; ++j) { + sy[*col + j * sy_dim1] = ddot_(n, &d__[1], &c__1, &wy[pointr * + wy_dim1 + 1], &c__1); + ss[j + *col * ss_dim1] = ddot_(n, &ws[pointr * ws_dim1 + 1], &c__1, & + d__[1], &c__1); + pointr = pointr % *m + 1; +/* L51: */ + } + if (*stp == 1.) { + ss[*col + *col * ss_dim1] = *dtd; + } else { + ss[*col + *col * ss_dim1] = *stp * *stp * *dtd; + } + sy[*col + *col * sy_dim1] = *dr; + return 0; +} /* matupd_ */ + +/* Subroutine */ int prn2lb_( +integer *n, +doublereal *x, doublereal *f, doublereal *g, +integer *iprint, integer *itfile, integer *iter, integer *nfgv, integer *nact, +doublereal *sbgnrm, +integer *nint, +char *word, +integer *iword, integer *iback, +doublereal *stp, doublereal *xstep, +ftnlen word_len) +{ + /* Parameter adjustments */ + --g; + --x; + + /* Function Body */ + if (*iword == 0) { +/* the subspace minimization converged. */ + s_copy(word, "con", (ftnlen)3, (ftnlen)3); + } else if (*iword == 1) { +/* the subspace minimization stopped at a bound. */ + s_copy(word, "bnd", (ftnlen)3, (ftnlen)3); + } else if (*iword == 5) { +/* the truncated Newton step has been used. */ + s_copy(word, "TNT", (ftnlen)3, (ftnlen)3); + } else { + s_copy(word, "---", (ftnlen)3, (ftnlen)3); + } + return 0; +} /* prn2lb_ */ + +/* ======================= The end of prn2lb ============================= */ + +/* Subroutine */ int projgr_( +integer *n, +doublereal *l, doublereal *u, +integer *nbd, +doublereal *x, doublereal *g, doublereal *sbgnrm) +{ + /* System generated locals */ + integer i__1; + doublereal d__1, d__2; + + /* Local variables */ + static integer i__; + static doublereal gi; + + /* Parameter adjustments */ + --g; + --x; + --nbd; + --u; + --l; + + /* Function Body */ + *sbgnrm = 0.; + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + gi = g[i__]; + if (nbd[i__] != 0) { + if (gi < 0.) { + if (nbd[i__] >= 2) { +/* Computing MAX */ + d__1 = x[i__] - u[i__]; + gi = max(d__1,gi); + } + } else { + if (nbd[i__] <= 2) { +/* Computing MIN */ + d__1 = x[i__] - l[i__]; + gi = min(d__1,gi); + } + } + } +/* Computing MAX */ + d__1 = *sbgnrm, d__2 = abs(gi); + *sbgnrm = max(d__1,d__2); +/* L15: */ + } + return 0; +} /* projgr_ */ + +/* ======================= The end of projgr ============================= */ +/* Subroutine */ int subsm_( +integer *n, integer *m, integer *nsub, integer *ind, +doublereal *l, doublereal *u, +integer *nbd, +doublereal *x, doublereal *d__, doublereal *ws, doublereal *wy, doublereal *theta, +integer *col, integer *head, integer *iword, +doublereal *wv, doublereal *wn, +integer *iprint, integer *info) +{ + /* System generated locals */ + integer ws_dim1, ws_offset, wy_dim1, wy_offset, wn_dim1, wn_offset, i__1, + i__2; + + /* Local variables */ + static doublereal temp1, temp2; + static integer i__, j, k; + static doublereal alpha; + static integer m2; + static doublereal dk; + static integer js, jy, pointr, ibd, col2; + + /* Parameter adjustments */ + --d__; + --x; + --nbd; + --u; + --l; + wn_dim1 = 2 * *m; + wn_offset = 1 + wn_dim1 * 1; + wn -= wn_offset; + --wv; + wy_dim1 = *n; + wy_offset = 1 + wy_dim1 * 1; + wy -= wy_offset; + ws_dim1 = *n; + ws_offset = 1 + ws_dim1 * 1; + ws -= ws_offset; + --ind; + + /* Function Body */ + if (*nsub <= 0) { + return 0; + } +/* Compute wv = W'Zd. */ + pointr = *head; + i__1 = *col; + for (i__ = 1; i__ <= i__1; ++i__) { + temp1 = 0.; + temp2 = 0.; + i__2 = *nsub; + for (j = 1; j <= i__2; ++j) { + k = ind[j]; + temp1 += wy[k + pointr * wy_dim1] * d__[j]; + temp2 += ws[k + pointr * ws_dim1] * d__[j]; +/* L10: */ + } + wv[i__] = temp1; + wv[*col + i__] = *theta * temp2; + pointr = pointr % *m + 1; +/* L20: */ + } +/* Compute wv:=K^(-1)wv. */ + m2 = *m << 1; + col2 = *col << 1; + dtrsl_(&wn[wn_offset], &m2, &col2, &wv[1], &c__11, info); + if (*info != 0) { + return 0; + } + i__1 = *col; + for (i__ = 1; i__ <= i__1; ++i__) { + wv[i__] = -wv[i__]; +/* L25: */ + } + dtrsl_(&wn[wn_offset], &m2, &col2, &wv[1], &c__1, info); + if (*info != 0) { + return 0; + } +/* Compute d = (1/theta)d + (1/theta**2)Z'W wv. */ + pointr = *head; + i__1 = *col; + for (jy = 1; jy <= i__1; ++jy) { + js = *col + jy; + i__2 = *nsub; + for (i__ = 1; i__ <= i__2; ++i__) { + k = ind[i__]; + d__[i__] = d__[i__] + wy[k + pointr * wy_dim1] * wv[jy] / *theta + + ws[k + pointr * ws_dim1] * wv[js]; +/* L30: */ + } + pointr = pointr % *m + 1; +/* L40: */ + } + i__1 = *nsub; + for (i__ = 1; i__ <= i__1; ++i__) { + d__[i__] /= *theta; +/* L50: */ + } +/* Backtrack to the feasible region. */ + alpha = 1.; + temp1 = alpha; + i__1 = *nsub; + for (i__ = 1; i__ <= i__1; ++i__) { + k = ind[i__]; + dk = d__[i__]; + if (nbd[k] != 0) { + if (dk < 0. && nbd[k] <= 2) { + temp2 = l[k] - x[k]; + if (temp2 >= 0.) { + temp1 = 0.; + } else if (dk * alpha < temp2) { + temp1 = temp2 / dk; + } + } else if (dk > 0. && nbd[k] >= 2) { + temp2 = u[k] - x[k]; + if (temp2 <= 0.) { + temp1 = 0.; + } else if (dk * alpha > temp2) { + temp1 = temp2 / dk; + } + } + if (temp1 < alpha) { + alpha = temp1; + ibd = i__; + } + } +/* L60: */ + } + if (alpha < 1.) { + dk = d__[ibd]; + k = ind[ibd]; + if (dk > 0.) { + x[k] = u[k]; + d__[ibd] = 0.; + } else if (dk < 0.) { + x[k] = l[k]; + d__[ibd] = 0.; + } + } + i__1 = *nsub; + for (i__ = 1; i__ <= i__1; ++i__) { + k = ind[i__]; + x[k] += alpha * d__[i__]; +/* L70: */ + } + if (alpha < 1.) { + *iword = 1; + } else { + *iword = 0; + } + return 0; +} /* subsm_ */ + +/* ====================== The end of subsm =============================== */ + + +/* Subroutine */ int dcstep_( +doublereal *stx, doublereal *fx, doublereal *dx, doublereal *sty, doublereal *fy, +doublereal *dy, doublereal *stp, doublereal *fp, doublereal *dp, +logical *brackt, +doublereal *stpmin, doublereal *stpmax) +{ + /* System generated locals */ + doublereal d__1, d__2, d__3; + + /* Local variables */ + static doublereal sgnd, stpc, stpf, stpq, p, q, gamma, r__, s, theta; + + sgnd = *dp * (*dx / abs(*dx)); +/* First case: A higher function value. The minimum is bracketed. */ +/* If the cubic step is closer to stx than the quadratic step, the */ +/* cubic step is taken, otherwise the average of the cubic and */ +/* quadratic steps is taken. */ + if (*fp > *fx) { + theta = (*fx - *fp) * 3. / (*stp - *stx) + *dx + *dp; +/* Computing MAX */ + d__1 = abs(theta), d__2 = abs(*dx), d__1 = max(d__1,d__2), d__2 = abs( + *dp); + s = max(d__1,d__2); +/* Computing 2nd power */ + d__1 = theta / s; + gamma = s * sqrt(d__1 * d__1 - *dx / s * (*dp / s)); + if (*stp < *stx) { + gamma = -gamma; + } + p = gamma - *dx + theta; + q = gamma - *dx + gamma + *dp; + r__ = p / q; + stpc = *stx + r__ * (*stp - *stx); + stpq = *stx + *dx / ((*fx - *fp) / (*stp - *stx) + *dx) / 2. * (*stp + - *stx); + if ((d__1 = stpc - *stx, abs(d__1)) < (d__2 = stpq - *stx, abs(d__2))) + { + stpf = stpc; + } else { + stpf = stpc + (stpq - stpc) / 2.; + } + *brackt = TRUE_; +/* Second case: A lower function value and derivatives of opposite */ +/* sign. The minimum is bracketed. If the cubic step is farther from */ +/* stp than the secant step, the cubic step is taken, otherwise the */ +/* secant step is taken. */ + } else if (sgnd < 0.) { + theta = (*fx - *fp) * 3. / (*stp - *stx) + *dx + *dp; +/* Computing MAX */ + d__1 = abs(theta), d__2 = abs(*dx), d__1 = max(d__1,d__2), d__2 = abs( + *dp); + s = max(d__1,d__2); +/* Computing 2nd power */ + d__1 = theta / s; + gamma = s * sqrt(d__1 * d__1 - *dx / s * (*dp / s)); + if (*stp > *stx) { + gamma = -gamma; + } + p = gamma - *dp + theta; + q = gamma - *dp + gamma + *dx; + r__ = p / q; + stpc = *stp + r__ * (*stx - *stp); + stpq = *stp + *dp / (*dp - *dx) * (*stx - *stp); + if ((d__1 = stpc - *stp, abs(d__1)) > (d__2 = stpq - *stp, abs(d__2))) + { + stpf = stpc; + } else { + stpf = stpq; + } + *brackt = TRUE_; +/* Third case: A lower function value, derivatives of the same sign, */ +/* and the magnitude of the derivative decreases. */ + } else if (abs(*dp) < abs(*dx)) { +/* The cubic step is computed only if the cubic tends to infinity */ +/* in the direction of the step or if the minimum of the cubic */ +/* is beyond stp. Otherwise the cubic step is defined to be the */ +/* secant step. */ + theta = (*fx - *fp) * 3. / (*stp - *stx) + *dx + *dp; +/* Computing MAX */ + d__1 = abs(theta), d__2 = abs(*dx), d__1 = max(d__1,d__2), d__2 = abs( + *dp); + s = max(d__1,d__2); +/* The case gamma = 0 only arises if the cubic does not tend */ +/* to infinity in the direction of the step. */ +/* Computing MAX */ +/* Computing 2nd power */ + d__3 = theta / s; + d__1 = 0., d__2 = d__3 * d__3 - *dx / s * (*dp / s); + gamma = s * sqrt((max(d__1,d__2))); + if (*stp > *stx) { + gamma = -gamma; + } + p = gamma - *dp + theta; + q = gamma + (*dx - *dp) + gamma; + r__ = p / q; + if (r__ < 0. && gamma != 0.) { + stpc = *stp + r__ * (*stx - *stp); + } else if (*stp > *stx) { + stpc = *stpmax; + } else { + stpc = *stpmin; + } + stpq = *stp + *dp / (*dp - *dx) * (*stx - *stp); + if (*brackt) { +/* A minimizer has been bracketed. If the cubic step is */ +/* closer to stp than the secant step, the cubic step is */ +/* taken, otherwise the secant step is taken. */ + if ((d__1 = stpc - *stp, abs(d__1)) < (d__2 = stpq - *stp, abs( + d__2))) { + stpf = stpc; + } else { + stpf = stpq; + } + if (*stp > *stx) { +/* Computing MIN */ + d__1 = *stp + (*sty - *stp) * .66; + stpf = min(d__1,stpf); + } else { +/* Computing MAX */ + d__1 = *stp + (*sty - *stp) * .66; + stpf = max(d__1,stpf); + } + } else { +/* A minimizer has not been bracketed. If the cubic step is */ +/* farther from stp than the secant step, the cubic step is */ +/* taken, otherwise the secant step is taken. */ + if ((d__1 = stpc - *stp, abs(d__1)) > (d__2 = stpq - *stp, abs( + d__2))) { + stpf = stpc; + } else { + stpf = stpq; + } + stpf = min(*stpmax,stpf); + stpf = max(*stpmin,stpf); + } +/* Fourth case: A lower function value, derivatives of the */ +/* same sign, and the magnitude of the derivative does not */ +/* decrease. If the minimum is not bracketed, the step is either */ +/* stpmin or stpmax, otherwise the cubic step is taken. */ + } else { + if (*brackt) { + theta = (*fp - *fy) * 3. / (*sty - *stp) + *dy + *dp; +/* Computing MAX */ + d__1 = abs(theta), d__2 = abs(*dy), d__1 = max(d__1,d__2), d__2 = + abs(*dp); + s = max(d__1,d__2); +/* Computing 2nd power */ + d__1 = theta / s; + gamma = s * sqrt(d__1 * d__1 - *dy / s * (*dp / s)); + if (*stp > *sty) { + gamma = -gamma; + } + p = gamma - *dp + theta; + q = gamma - *dp + gamma + *dy; + r__ = p / q; + stpc = *stp + r__ * (*sty - *stp); + stpf = stpc; + } else if (*stp > *stx) { + stpf = *stpmax; + } else { + stpf = *stpmin; + } + } +/* Update the interval which contains a minimizer. */ + if (*fp > *fx) { + *sty = *stp; + *fy = *fp; + *dy = *dp; + } else { + if (sgnd < 0.) { + *sty = *stx; + *fy = *fx; + *dy = *dx; + } + *stx = *stp; + *fx = *fp; + *dx = *dp; + } +/* Compute the new step. */ + *stp = stpf; + + return 0; + +} /* dcstep_ */ + +/* Subroutine */ int dcsrch_( +doublereal *f, doublereal *g, doublereal *stp, doublereal *ftol, doublereal *gtol, +doublereal *xtol, doublereal *stpmin, doublereal *stpmax, +char *task, +integer *isave, +doublereal *dsave, +ftnlen task_len) +{ + /* System generated locals */ + doublereal d__1; + + /* Local variables */ + static integer stage; + static doublereal finit, ginit, width, ftest, gtest, stmin, stmax, width1, + fm, gm, fx, fy, gx, gy; + static logical brackt; + static doublereal fxm, fym, gxm, gym, stx, sty; + + /* Parameter adjustments */ + --dsave; + --isave; + + /* Function Body */ + if (s_cmp(task, "START", (ftnlen)5, (ftnlen)5) == 0) { +/* Check the input arguments for errors. */ + if (*stp < *stpmin) { + s_copy(task, "ERROR: STP .LT. STPMIN", task_len, (ftnlen)22); + } + if (*stp > *stpmax) { + s_copy(task, "ERROR: STP .GT. STPMAX", task_len, (ftnlen)22); + } + if (*g >= 0.) { + s_copy(task, "ERROR: INITIAL G .GE. ZERO", task_len, (ftnlen)26); + } + if (*ftol < 0.) { + s_copy(task, "ERROR: FTOL .LT. ZERO", task_len, (ftnlen)21); + } + if (*gtol < 0.) { + s_copy(task, "ERROR: GTOL .LT. ZERO", task_len, (ftnlen)21); + } + if (*xtol < 0.) { + s_copy(task, "ERROR: XTOL .LT. ZERO", task_len, (ftnlen)21); + } + if (*stpmin < 0.) { + s_copy(task, "ERROR: STPMIN .LT. ZERO", task_len, (ftnlen)23); + } + if (*stpmax < *stpmin) { + s_copy(task, "ERROR: STPMAX .LT. STPMIN", task_len, (ftnlen)25); + } +/* Exit if there are errors on input. */ + if (s_cmp(task, "ERROR", (ftnlen)5, (ftnlen)5) == 0) { + return 0; + } +/* Initialize local variables. */ + brackt = FALSE_; + stage = 1; + finit = *f; + ginit = *g; + gtest = *ftol * ginit; + width = *stpmax - *stpmin; + width1 = width / .5; +/* The variables stx, fx, gx contain the values of the step, */ +/* function, and derivative at the best step. */ +/* The variables sty, fy, gy contain the value of the step, */ +/* function, and derivative at sty. */ +/* The variables stp, f, g contain the values of the step, */ +/* function, and derivative at stp. */ + stx = 0.; + fx = finit; + gx = ginit; + sty = 0.; + fy = finit; + gy = ginit; + stmin = 0.; + stmax = *stp + *stp * 4.; + s_copy(task, "FG", task_len, (ftnlen)2); + goto L1000; + } else { +/* Restore local variables. */ + if (isave[1] == 1) { + brackt = TRUE_; + } else { + brackt = FALSE_; + } + stage = isave[2]; + ginit = dsave[1]; + gtest = dsave[2]; + gx = dsave[3]; + gy = dsave[4]; + finit = dsave[5]; + fx = dsave[6]; + fy = dsave[7]; + stx = dsave[8]; + sty = dsave[9]; + stmin = dsave[10]; + stmax = dsave[11]; + width = dsave[12]; + width1 = dsave[13]; + } +/* If psi(stp) <= 0 and f'(stp) >= 0 for some step, then the */ +/* algorithm enters the second stage. */ + ftest = finit + *stp * gtest; + if (stage == 1 && *f <= ftest && *g >= 0.) { + stage = 2; + } +/* Test for warnings. */ + if (brackt && (*stp <= stmin || *stp >= stmax)) { + s_copy(task, "WARNING: ROUNDING ERRORS PREVENT PROGRESS", task_len, ( + ftnlen)41); + } + if (brackt && stmax - stmin <= *xtol * stmax) { + s_copy(task, "WARNING: XTOL TEST SATISFIED", task_len, (ftnlen)28); + } + if (*stp == *stpmax && *f <= ftest && *g <= gtest) { + s_copy(task, "WARNING: STP = STPMAX", task_len, (ftnlen)21); + } + if (*stp == *stpmin && (*f > ftest || *g >= gtest)) { + s_copy(task, "WARNING: STP = STPMIN", task_len, (ftnlen)21); + } +/* Test for convergence. */ + if (*f <= ftest && abs(*g) <= *gtol * (-ginit)) { + s_copy(task, "CONVERGENCE", task_len, (ftnlen)11); + } +/* Test for termination. */ + if (s_cmp(task, "WARN", (ftnlen)4, (ftnlen)4) == 0 || s_cmp(task, "CONV", + (ftnlen)4, (ftnlen)4) == 0) { + goto L1000; + } +/* A modified function is used to predict the step during the */ +/* first stage if a lower function value has been obtained but */ +/* the decrease is not sufficient. */ + if (stage == 1 && *f <= fx && *f > ftest) { +/* Define the modified function and derivative values. */ + fm = *f - *stp * gtest; + fxm = fx - stx * gtest; + fym = fy - sty * gtest; + gm = *g - gtest; + gxm = gx - gtest; + gym = gy - gtest; +/* Call dcstep to update stx, sty, and to compute the new step. */ + dcstep_(&stx, &fxm, &gxm, &sty, &fym, &gym, stp, &fm, &gm, &brackt, & + stmin, &stmax); +/* Reset the function and derivative values for f. */ + fx = fxm + stx * gtest; + fy = fym + sty * gtest; + gx = gxm + gtest; + gy = gym + gtest; + } else { +/* Call dcstep to update stx, sty, and to compute the new step. */ + dcstep_(&stx, &fx, &gx, &sty, &fy, &gy, stp, f, g, &brackt, &stmin, & + stmax); + } +/* Decide if a bisection step is needed. */ + if (brackt) { + if ((d__1 = sty - stx, abs(d__1)) >= width1 * .66) { + *stp = stx + (sty - stx) * .5; + } + width1 = width; + width = (d__1 = sty - stx, abs(d__1)); + } +/* Set the minimum and maximum steps allowed for stp. */ + if (brackt) { + stmin = min(stx,sty); + stmax = max(stx,sty); + } else { + stmin = *stp + (*stp - stx) * 1.1; + stmax = *stp + (*stp - stx) * 4.; + } +/* Force the step to be within the bounds stpmax and stpmin. */ + *stp = max(*stp,*stpmin); + *stp = min(*stp,*stpmax); +/* If further progress is not possible, let stp be the best */ +/* point obtained during the search. */ + if ((brackt && (*stp <= stmin || *stp >= stmax)) || ((brackt) && (stmax - stmin <= *xtol * stmax))) { + *stp = stx; + } +/* Obtain another function and derivative. */ + s_copy(task, "FG", task_len, (ftnlen)2); +L1000: +/* Save local variables. */ + if (brackt) { + isave[1] = 1; + } else { + isave[1] = 0; + } + isave[2] = stage; + dsave[1] = ginit; + dsave[2] = gtest; + dsave[3] = gx; + dsave[4] = gy; + dsave[5] = finit; + dsave[6] = fx; + dsave[7] = fy; + dsave[8] = stx; + dsave[9] = sty; + dsave[10] = stmin; + dsave[11] = stmax; + dsave[12] = width; + dsave[13] = width1; + + return 0; +} /* dcsrch_ */ + +/* ====================== The end of dcsrch ============================== */ +/* Subroutine */ int lnsrlb_( +integer *n, +doublereal *l, doublereal *u, +integer *nbd, +doublereal *x, doublereal *f, doublereal *fold, doublereal *gd, doublereal *gdold, +doublereal *g, doublereal *d__, doublereal *r__, doublereal *t, doublereal *z__, doublereal *stp, doublereal *dnorm, + doublereal *dtd, doublereal *xstep, doublereal *stpmx, +integer *iter, integer *ifun, integer *iback, integer *nfgv, integer *info, +char *task, +logical *boxed, logical *cnstnd, +char *csave, +integer *isave, +doublereal *dsave, +ftnlen task_len, +ftnlen csave_len) +{ + /* System generated locals */ + integer i__1; + doublereal d__1; + + /* Local variables */ + static integer i__; + static doublereal a1, a2; + +/* ********** */ + /* Parameter adjustments */ + --z__; + --t; + --r__; + --d__; + --g; + --x; + --nbd; + --u; + --l; + --isave; + --dsave; + + /* Function Body */ + if (s_cmp(task, "FG_LN", (ftnlen)5, (ftnlen)5) == 0) { + goto L556; + } + *dtd = ddot_(n, &d__[1], &c__1, &d__[1], &c__1); + *dnorm = sqrt(*dtd); +/* Determine the maximum step length. */ + *stpmx = 1e10; + if (*cnstnd) { + if (*iter == 0) { + *stpmx = 1.; + } else { + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + a1 = d__[i__]; + if (nbd[i__] != 0) { + if (a1 < 0. && nbd[i__] <= 2) { + a2 = l[i__] - x[i__]; + if (a2 >= 0.) { + *stpmx = 0.; + } else if (a1 * *stpmx < a2) { + *stpmx = a2 / a1; + } + } else if (a1 > 0. && nbd[i__] >= 2) { + a2 = u[i__] - x[i__]; + if (a2 <= 0.) { + *stpmx = 0.; + } else if (a1 * *stpmx > a2) { + *stpmx = a2 / a1; + } + } + } +/* L43: */ + } + } + } + if (*iter == 0 && ! (*boxed)) { +/* Computing MIN */ + d__1 = 1. / *dnorm; + *stp = min(d__1,*stpmx); + } else { + *stp = 1.; + } + dcopy_(n, &x[1], &c__1, &t[1], &c__1); + dcopy_(n, &g[1], &c__1, &r__[1], &c__1); + *fold = *f; + *ifun = 0; + *iback = 0; + s_copy(csave, "START", (ftnlen)60, (ftnlen)5); +L556: + *gd = ddot_(n, &g[1], &c__1, &d__[1], &c__1); + if (*ifun == 0) { + *gdold = *gd; + if (*gd >= 0.) { +/* the directional derivative >=0. */ +/* Line search is impossible. */ + *info = -4; + return 0; + } + } + dcsrch_(f, gd, stp, &c_b275, &c_b276, &c_b277, &c_b9, stpmx, csave, & + isave[1], &dsave[1], (ftnlen)60); + *xstep = *stp * *dnorm; + if (s_cmp(csave, "CONV", (ftnlen)4, (ftnlen)4) != 0 && s_cmp(csave, "WARN" + , (ftnlen)4, (ftnlen)4) != 0) { + s_copy(task, "FG_LNSRCH", (ftnlen)60, (ftnlen)9); + ++(*ifun); + ++(*nfgv); + *iback = *ifun - 1; + if (*stp == 1.) { + dcopy_(n, &z__[1], &c__1, &x[1], &c__1); + } else { + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + x[i__] = *stp * d__[i__] + t[i__]; +/* L41: */ + } + } + } else { + s_copy(task, "NEW_X", (ftnlen)60, (ftnlen)5); + } + return 0; +} /* lnsrlb_ */ + +/* ======================= The end of lnsrlb ============================= */ + + +doublereal dnrm2_( +integer *n, +doublereal *x, +integer *incx) +{ + /* System generated locals */ + integer i__1, i__2; + doublereal ret_val, d__1, d__2, d__3; + + /* Local variables */ + static integer i__; + static doublereal scale; + + /* Parameter adjustments */ + --x; + + /* Function Body */ + ret_val = 0.; + scale = 0.; + i__1 = *n; + i__2 = *incx; + for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) { +/* Computing MAX */ + d__2 = scale, d__3 = (d__1 = x[i__], abs(d__1)); + scale = max(d__2,d__3); +/* L10: */ + } + if (scale == 0.) { + return ret_val; + } + i__2 = *n; + i__1 = *incx; + for (i__ = 1; i__1 < 0 ? i__ >= i__2 : i__ <= i__2; i__ += i__1) { +/* Computing 2nd power */ + d__1 = x[i__] / scale; + ret_val += d__1 * d__1; +/* L20: */ + } + ret_val = scale * sqrt(ret_val); + return ret_val; +} /* dnrm2_ */ + +/* ====================== The end of dnrm2 =============================== */ +doublereal dpmeps_() +{ + /* Initialized data */ + + static doublereal zero = 0.; + static doublereal one = 1.; + static doublereal two = 2.; + + /* System generated locals */ + integer i__1; + doublereal ret_val; + + /* Local variables */ + static doublereal beta; + static integer irnd; + static doublereal temp, temp1, a, b; + static integer i__; + static doublereal betah; + static integer ibeta, negep; + static doublereal tempa; + static integer itemp, it; + static doublereal betain; + +/* determine ibeta, beta ala malcolm. */ + a = one; + b = one; +L10: + a += a; + temp = a + one; + temp1 = temp - a; + if (temp1 - one == zero) { + goto L10; + } +L20: + b += b; + temp = a + b; + itemp = (integer) (temp - a); + if (itemp == 0) { + goto L20; + } + ibeta = itemp; + beta = (doublereal) ibeta; +/* determine it, irnd. */ + it = 0; + b = one; +L30: + ++it; + b *= beta; + temp = b + one; + temp1 = temp - b; + if (temp1 - one == zero) { + goto L30; + } + irnd = 0; + betah = beta / two; + temp = a + betah; + if (temp - a != zero) { + irnd = 1; + } + tempa = a + beta; + temp = tempa + betah; + if (irnd == 0 && temp - tempa != zero) { + irnd = 2; + } +/* determine dpmeps. */ + negep = it + 3; + betain = one / beta; + a = one; + i__1 = negep; + for (i__ = 1; i__ <= i__1; ++i__) { + a *= betain; +/* L40: */ + } +L50: + temp = one + a; + if (temp - one != zero) { + goto L60; + } + a *= beta; + goto L50; +L60: + ret_val = a; + if (ibeta == 2 || irnd == 0) { + goto L70; + } + a = a * (one + a) / two; + temp = one + a; + if (temp - one != zero) { + ret_val = a; + } +L70: + return ret_val; +} /* dpmeps_ */ + +/* ====================== The end of dpmeps ============================== */ + +/* Subroutine */ int dscal_( +integer *n, +doublereal *da, doublereal *dx, +integer *incx) +{ + /* System generated locals */ + integer i__1, i__2; + + /* Local variables */ + static integer i__, m, nincx, mp1; + + +/* scales a vector by a constant. */ +/* uses unrolled loops for increment equal to one. */ +/* jack dongarra, linpack, 3/11/78. */ +/* modified 3/93 to return if incx .le. 0. */ + + + /* Parameter adjustments */ + --dx; + + /* Function Body */ + if (*n <= 0 || *incx <= 0) { + return 0; + } + if (*incx == 1) { + goto L20; + } + +/* code for increment not equal to 1 */ + + nincx = *n * *incx; + i__1 = nincx; + i__2 = *incx; + for (i__ = 1; i__2 < 0 ? i__ >= i__1 : i__ <= i__1; i__ += i__2) { + dx[i__] = *da * dx[i__]; +/* L10: */ + } + return 0; + +/* code for increment equal to 1 */ + + +/* clean-up loop */ + +L20: + m = *n % 5; + if (m == 0) { + goto L40; + } + i__2 = m; + for (i__ = 1; i__ <= i__2; ++i__) { + dx[i__] = *da * dx[i__]; +/* L30: */ + } + if (*n < 5) { + return 0; + } +L40: + mp1 = m + 1; + i__2 = *n; + for (i__ = mp1; i__ <= i__2; i__ += 5) { + dx[i__] = *da * dx[i__]; + dx[i__ + 1] = *da * dx[i__ + 1]; + dx[i__ + 2] = *da * dx[i__ + 2]; + dx[i__ + 3] = *da * dx[i__ + 3]; + dx[i__ + 4] = *da * dx[i__ + 4]; +/* L50: */ + } + return 0; +} /* dscal_ */ + +/* ====================== The end of dscal =============================== */ +/* Subroutine */ int formk_( +integer *n, integer *nsub, integer *ind, integer *nenter, integer *ileave, integer *indx2, integer *iupdat, +logical *updatd, +doublereal *wn, doublereal *wn1, +integer *m, +doublereal *ws, doublereal *wy, doublereal *sy, doublereal *theta, +integer *col, integer *head, integer *info) +{ + /* System generated locals */ + integer wn_dim1, wn_offset, wn1_dim1, wn1_offset, ws_dim1, ws_offset, + wy_dim1, wy_offset, sy_dim1, sy_offset, i__1, i__2, i__3; + + /* Local variables */ + static integer dend, pend; + static integer upcl; + static doublereal temp1, temp2, temp3, temp4; + static integer i__, k; + static integer ipntr, jpntr, k1, m2, dbegin, is, js, iy, jy, pbegin, is1, + js1, col2; + + /* Parameter adjustments */ + --indx2; + --ind; + sy_dim1 = *m; + sy_offset = 1 + sy_dim1 * 1; + sy -= sy_offset; + wy_dim1 = *n; + wy_offset = 1 + wy_dim1 * 1; + wy -= wy_offset; + ws_dim1 = *n; + ws_offset = 1 + ws_dim1 * 1; + ws -= ws_offset; + wn1_dim1 = 2 * *m; + wn1_offset = 1 + wn1_dim1 * 1; + wn1 -= wn1_offset; + wn_dim1 = 2 * *m; + wn_offset = 1 + wn_dim1 * 1; + wn -= wn_offset; + + /* Function Body */ + if (*updatd) { + if (*iupdat > *m) { +/* shift old part of WN1. */ + i__1 = *m - 1; + for (jy = 1; jy <= i__1; ++jy) { + js = *m + jy; + i__2 = *m - jy; + dcopy_(&i__2, &wn1[jy + 1 + (jy + 1) * wn1_dim1], &c__1, &wn1[ + jy + jy * wn1_dim1], &c__1); + i__2 = *m - jy; + dcopy_(&i__2, &wn1[js + 1 + (js + 1) * wn1_dim1], &c__1, &wn1[ + js + js * wn1_dim1], &c__1); + i__2 = *m - 1; + dcopy_(&i__2, &wn1[*m + 2 + (jy + 1) * wn1_dim1], &c__1, &wn1[ + *m + 1 + jy * wn1_dim1], &c__1); +/* L10: */ + } + } +/* put new rows in blocks (1,1), (2,1) and (2,2). */ + pbegin = 1; + pend = *nsub; + dbegin = *nsub + 1; + dend = *n; + iy = *col; + is = *m + *col; + ipntr = *head + *col - 1; + if (ipntr > *m) { + ipntr -= *m; + } + jpntr = *head; + i__1 = *col; + for (jy = 1; jy <= i__1; ++jy) { + js = *m + jy; + temp1 = 0.; + temp2 = 0.; + temp3 = 0.; +/* compute element jy of row 'col' of Y'ZZ'Y */ + i__2 = pend; + for (k = pbegin; k <= i__2; ++k) { + k1 = ind[k]; + temp1 += wy[k1 + ipntr * wy_dim1] * wy[k1 + jpntr * wy_dim1]; +/* L15: */ + } +/* compute elements jy of row 'col' of L_a and S'AA'S */ + i__2 = dend; + for (k = dbegin; k <= i__2; ++k) { + k1 = ind[k]; + temp2 += ws[k1 + ipntr * ws_dim1] * ws[k1 + jpntr * ws_dim1]; + temp3 += ws[k1 + ipntr * ws_dim1] * wy[k1 + jpntr * wy_dim1]; +/* L16: */ + } + wn1[iy + jy * wn1_dim1] = temp1; + wn1[is + js * wn1_dim1] = temp2; + wn1[is + jy * wn1_dim1] = temp3; + jpntr = jpntr % *m + 1; +/* L20: */ + } +/* put new column in block (2,1). */ + jy = *col; + jpntr = *head + *col - 1; + if (jpntr > *m) { + jpntr -= *m; + } + ipntr = *head; + i__1 = *col; + for (i__ = 1; i__ <= i__1; ++i__) { + is = *m + i__; + temp3 = 0.; +/* compute element i of column 'col' of R_z */ + i__2 = pend; + for (k = pbegin; k <= i__2; ++k) { + k1 = ind[k]; + temp3 += ws[k1 + ipntr * ws_dim1] * wy[k1 + jpntr * wy_dim1]; +/* L25: */ + } + ipntr = ipntr % *m + 1; + wn1[is + jy * wn1_dim1] = temp3; +/* L30: */ + } + upcl = *col - 1; + } else { + upcl = *col; + } +/* modify the old parts in blocks (1,1) and (2,2) due to changes */ +/* in the set of free variables. */ + ipntr = *head; + i__1 = upcl; + for (iy = 1; iy <= i__1; ++iy) { + is = *m + iy; + jpntr = *head; + i__2 = iy; + for (jy = 1; jy <= i__2; ++jy) { + js = *m + jy; + temp1 = 0.; + temp2 = 0.; + temp3 = 0.; + temp4 = 0.; + i__3 = *nenter; + for (k = 1; k <= i__3; ++k) { + k1 = indx2[k]; + temp1 += wy[k1 + ipntr * wy_dim1] * wy[k1 + jpntr * wy_dim1]; + temp2 += ws[k1 + ipntr * ws_dim1] * ws[k1 + jpntr * ws_dim1]; +/* L35: */ + } + i__3 = *n; + for (k = *ileave; k <= i__3; ++k) { + k1 = indx2[k]; + temp3 += wy[k1 + ipntr * wy_dim1] * wy[k1 + jpntr * wy_dim1]; + temp4 += ws[k1 + ipntr * ws_dim1] * ws[k1 + jpntr * ws_dim1]; +/* L36: */ + } + wn1[iy + jy * wn1_dim1] = wn1[iy + jy * wn1_dim1] + temp1 - temp3; + wn1[is + js * wn1_dim1] = wn1[is + js * wn1_dim1] - temp2 + temp4; + jpntr = jpntr % *m + 1; +/* L40: */ + } + ipntr = ipntr % *m + 1; +/* L45: */ + } +/* modify the old parts in block (2,1). */ + ipntr = *head; + i__1 = *m + upcl; + for (is = *m + 1; is <= i__1; ++is) { + jpntr = *head; + i__2 = upcl; + for (jy = 1; jy <= i__2; ++jy) { + temp1 = 0.; + temp3 = 0.; + i__3 = *nenter; + for (k = 1; k <= i__3; ++k) { + k1 = indx2[k]; + temp1 += ws[k1 + ipntr * ws_dim1] * wy[k1 + jpntr * wy_dim1]; +/* L50: */ + } + i__3 = *n; + for (k = *ileave; k <= i__3; ++k) { + k1 = indx2[k]; + temp3 += ws[k1 + ipntr * ws_dim1] * wy[k1 + jpntr * wy_dim1]; +/* L51: */ + } + if (is <= jy + *m) { + wn1[is + jy * wn1_dim1] = wn1[is + jy * wn1_dim1] + temp1 - + temp3; + } else { + wn1[is + jy * wn1_dim1] = wn1[is + jy * wn1_dim1] - temp1 + + temp3; + } + jpntr = jpntr % *m + 1; +/* L55: */ + } + ipntr = ipntr % *m + 1; +/* L60: */ + } +/* Form the upper triangle of WN = [D+Y' ZZ'Y/theta -L_a'+R_z' ] */ +/* [-L_a +R_z S'AA'S*theta] */ + m2 = *m << 1; + i__1 = *col; + for (iy = 1; iy <= i__1; ++iy) { + is = *col + iy; + is1 = *m + iy; + i__2 = iy; + for (jy = 1; jy <= i__2; ++jy) { + js = *col + jy; + js1 = *m + jy; + wn[jy + iy * wn_dim1] = wn1[iy + jy * wn1_dim1] / *theta; + wn[js + is * wn_dim1] = wn1[is1 + js1 * wn1_dim1] * *theta; +/* L65: */ + } + i__2 = iy - 1; + for (jy = 1; jy <= i__2; ++jy) { + wn[jy + is * wn_dim1] = -wn1[is1 + jy * wn1_dim1]; +/* L66: */ + } + i__2 = *col; + for (jy = iy; jy <= i__2; ++jy) { + wn[jy + is * wn_dim1] = wn1[is1 + jy * wn1_dim1]; +/* L67: */ + } + wn[iy + iy * wn_dim1] += sy[iy + iy * sy_dim1]; +/* L70: */ + } +/* Form the upper triangle of */ +/* WN= [ LL' L^-1(-L_a'+R_z')] */ +/* [(-L_a +R_z)L'^-1 S'AA'S*theta ] */ +/* first Cholesky factor (1,1) block of wn to get LL' */ +/* with L' stored in the upper triangle of wn. */ + dpofa_(&wn[wn_offset], &m2, col, info); + if (*info != 0) { + *info = -1; + return 0; + } +/* then form L^-1(-L_a'+R_z') in the (1,2) block. */ + col2 = *col << 1; + i__1 = col2; + for (js = *col + 1; js <= i__1; ++js) { + dtrsl_(&wn[wn_offset], &m2, col, &wn[js * wn_dim1 + 1], &c__11, info); +/* L71: */ + } +/* Form S'AA'S*theta + (L^-1(-L_a'+R_z'))'L^-1(-L_a'+R_z') in the */ +/* upper triangle of (2,2) block of wn. */ + i__1 = col2; + for (is = *col + 1; is <= i__1; ++is) { + i__2 = col2; + for (js = is; js <= i__2; ++js) { + wn[is + js * wn_dim1] += ddot_(col, &wn[is * wn_dim1 + 1], &c__1, + &wn[js * wn_dim1 + 1], &c__1); +/* L74: */ + } +/* L72: */ + } +/* Cholesky factorization of (2,2) block of wn. */ + dpofa_(&wn[*col + 1 + (*col + 1) * wn_dim1], &m2, col, info); + if (*info != 0) { + *info = -2; + return 0; + } + return 0; +} /* formk_ */ + +/* ======================= The end of formk ============================== */ + +/* Subroutine */ int cauchy_( +integer *n, +doublereal *x, doublereal *l, doublereal *u, +integer *nbd, +doublereal *g, +integer *iorder, integer *iwhere, +doublereal *t, doublereal *d__, doublereal *xcp, +integer *m, +doublereal *wy, doublereal *ws, doublereal *sy, doublereal *wt, doublereal *theta, +integer *col, integer *head, +doublereal *p, doublereal *c__, doublereal *wbp, doublereal *v, +integer *nint, integer *iprint, +doublereal *sbgnrm, +integer *info, +doublereal *epsmch) +{ + /* System generated locals */ + integer wy_dim1, wy_offset, ws_dim1, ws_offset, sy_dim1, sy_offset, + wt_dim1, wt_offset, i__1, i__2; + doublereal d__1; + + /* Local variables */ + static doublereal dibp; + static integer iter; + static doublereal zibp, tsum, dibp2; + static integer i__, j; + static logical bnded; + static doublereal neggi; + static integer nfree; + static doublereal bkmin; + static integer nleft; + static doublereal f1, f2, f2_org__, dt, tj, tl; + static integer nbreak, ibkmin; + static doublereal tu; + static integer pointr; + static doublereal tj0; + static logical xlower, xupper; + static integer ibp; + static doublereal dtm; + static doublereal wmc, wmp, wmw; + static integer col2; + + /* Parameter adjustments */ + --xcp; + --d__; + --t; + --iwhere; + --iorder; + --g; + --nbd; + --u; + --l; + --x; + --v; + --wbp; + --c__; + --p; + wt_dim1 = *m; + wt_offset = 1 + wt_dim1 * 1; + wt -= wt_offset; + sy_dim1 = *m; + sy_offset = 1 + sy_dim1 * 1; + sy -= sy_offset; + ws_dim1 = *n; + ws_offset = 1 + ws_dim1 * 1; + ws -= ws_offset; + wy_dim1 = *n; + wy_offset = 1 + wy_dim1 * 1; + wy -= wy_offset; + + /* Function Body */ + if (*sbgnrm <= 0.) { + dcopy_(n, &x[1], &c__1, &xcp[1], &c__1); + return 0; + } + bnded = TRUE_; + nfree = *n + 1; + nbreak = 0; + ibkmin = 0; + bkmin = 0.; + col2 = *col << 1; + f1 = 0.; +/* We set p to zero and build it up as we determine d. */ + i__1 = col2; + for (i__ = 1; i__ <= i__1; ++i__) { + p[i__] = 0.; +/* L20: */ + } +/* In the following loop we determine for each variable its bound */ +/* status and its breakpoint, and update p accordingly. */ +/* Smallest breakpoint is identified. */ + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + neggi = -g[i__]; + if (iwhere[i__] != 3 && iwhere[i__] != -1) { +/* if x(i) is not a constant and has bounds, */ +/* compute the difference between x(i) and its bounds. */ + if (nbd[i__] <= 2) { + tl = x[i__] - l[i__]; + } + if (nbd[i__] >= 2) { + tu = u[i__] - x[i__]; + } +/* If a variable is close enough to a bound */ +/* we treat it as at bound. */ + xlower = nbd[i__] <= 2 && tl <= 0.; + xupper = nbd[i__] >= 2 && tu <= 0.; +/* reset iwhere(i). */ + iwhere[i__] = 0; + if (xlower) { + if (neggi <= 0.) { + iwhere[i__] = 1; + } + } else if (xupper) { + if (neggi >= 0.) { + iwhere[i__] = 2; + } + } else { + if (abs(neggi) <= 0.) { + iwhere[i__] = -3; + } + } + } + pointr = *head; + if (iwhere[i__] != 0 && iwhere[i__] != -1) { + d__[i__] = 0.; + } else { + d__[i__] = neggi; + f1 -= neggi * neggi; +/* calculate p := p - W'e_i* (g_i). */ + i__2 = *col; + for (j = 1; j <= i__2; ++j) { + p[j] += wy[i__ + pointr * wy_dim1] * neggi; + p[*col + j] += ws[i__ + pointr * ws_dim1] * neggi; + pointr = pointr % *m + 1; +/* L40: */ + } + if (nbd[i__] <= 2 && nbd[i__] != 0 && neggi < 0.) { +/* x(i) + d(i) is bounded; compute t(i). */ + ++nbreak; + iorder[nbreak] = i__; + t[nbreak] = tl / (-neggi); + if (nbreak == 1 || t[nbreak] < bkmin) { + bkmin = t[nbreak]; + ibkmin = nbreak; + } + } else if (nbd[i__] >= 2 && neggi > 0.) { +/* x(i) + d(i) is bounded; compute t(i). */ + ++nbreak; + iorder[nbreak] = i__; + t[nbreak] = tu / neggi; + if (nbreak == 1 || t[nbreak] < bkmin) { + bkmin = t[nbreak]; + ibkmin = nbreak; + } + } else { +/* x(i) + d(i) is not bounded. */ + --nfree; + iorder[nfree] = i__; + if (abs(neggi) > 0.) { + bnded = FALSE_; + } + } + } +/* L50: */ + } +/* The indices of the nonzero components of d are now stored */ +/* in iorder(1),...,iorder(nbreak) and iorder(nfree),...,iorder(n). */ +/* The smallest of the nbreak breakpoints is in t(ibkmin)=bkmin. */ + if (*theta != 1.) { +/* complete the initialization of p for theta not= one. */ + dscal_(col, theta, &p[*col + 1], &c__1); + } +/* Initialize GCP xcp = x. */ + dcopy_(n, &x[1], &c__1, &xcp[1], &c__1); + if (nbreak == 0 && nfree == *n + 1) { +/* is a zero vector, return with the initial xcp as GCP. */ + return 0; + } +/* Initialize c = W'(xcp - x) = 0. */ + i__1 = col2; + for (j = 1; j <= i__1; ++j) { + c__[j] = 0.; +/* L60: */ + } +/* Initialize derivative f2. */ + f2 = -(*theta) * f1; + f2_org__ = f2; + if (*col > 0) { + bmv_(m, &sy[sy_offset], &wt[wt_offset], col, &p[1], &v[1], info); + if (*info != 0) { + return 0; + } + f2 -= ddot_(&col2, &v[1], &c__1, &p[1], &c__1); + } + dtm = -f1 / f2; + tsum = 0.; + *nint = 1; +/* If there are no breakpoints, locate the GCP and return. */ + if (nbreak == 0) { + goto L888; + } + nleft = nbreak; + iter = 1; + tj = 0.; +/* ------------------- the beginning of the loop ------------------------- */ +L777: +/* Find the next smallest breakpoint; */ +/* compute dt = t(nleft) - t(nleft + 1). */ + tj0 = tj; + if (iter == 1) { +/* Since we already have the smallest breakpoint we need not do */ +/* heapsort yet. Often only one breakpoint is used and the */ +/* cost of heapsort is avoided. */ + tj = bkmin; + ibp = iorder[ibkmin]; + } else { + if (iter == 2) { +/* Replace the already used smallest breakpoint with the */ +/* breakpoint numbered nbreak > nlast, before heapsort call. */ + if (ibkmin != nbreak) { + t[ibkmin] = t[nbreak]; + iorder[ibkmin] = iorder[nbreak]; + } +/* Update heap structure of breakpoints */ +/* (if iter=2, initialize heap). */ + } + i__1 = iter - 2; + hpsolb_(&nleft, &t[1], &iorder[1], &i__1); + tj = t[nleft]; + ibp = iorder[nleft]; + } + dt = tj - tj0; +/* If a minimizer is within this interval, */ +/* locate the GCP and return. */ + if (dtm < dt) { + goto L888; + } +/* Otherwise fix one variable and */ +/* reset the corresponding component of d to zero. */ + tsum += dt; + --nleft; + ++iter; + dibp = d__[ibp]; + d__[ibp] = 0.; + if (dibp > 0.) { + zibp = u[ibp] - x[ibp]; + xcp[ibp] = u[ibp]; + iwhere[ibp] = 2; + } else { + zibp = l[ibp] - x[ibp]; + xcp[ibp] = l[ibp]; + iwhere[ibp] = 1; + } + if (nleft == 0 && nbreak == *n) { +/* all n variables are fixed, */ +/* return with xcp as GCP. */ + dtm = dt; + goto L999; + } +/* Update the derivative information. */ + ++(*nint); +/* Computing 2nd power */ + d__1 = dibp; + dibp2 = d__1 * d__1; +/* Update f1 and f2. */ +/* temporarily set f1 and f2 for col=0. */ + f1 = f1 + dt * f2 + dibp2 - *theta * dibp * zibp; + f2 -= *theta * dibp2; + if (*col > 0) { +/* update c = c + dt*p. */ + daxpy_(&col2, &dt, &p[1], &c__1, &c__[1], &c__1); +/* choose wbp, */ +/* the row of W corresponding to the breakpoint encountered. */ + pointr = *head; + i__1 = *col; + for (j = 1; j <= i__1; ++j) { + wbp[j] = wy[ibp + pointr * wy_dim1]; + wbp[*col + j] = *theta * ws[ibp + pointr * ws_dim1]; + pointr = pointr % *m + 1; +/* L70: */ + } +/* compute (wbp)Mc, (wbp)Mp, and (wbp)M(wbp)'. */ + bmv_(m, &sy[sy_offset], &wt[wt_offset], col, &wbp[1], &v[1], info); + if (*info != 0) { + return 0; + } + wmc = ddot_(&col2, &c__[1], &c__1, &v[1], &c__1); + wmp = ddot_(&col2, &p[1], &c__1, &v[1], &c__1); + wmw = ddot_(&col2, &wbp[1], &c__1, &v[1], &c__1); +/* update p = p - dibp*wbp. */ + d__1 = -dibp; + daxpy_(&col2, &d__1, &wbp[1], &c__1, &p[1], &c__1); +/* complete updating f1 and f2 while col > 0. */ + f1 += dibp * wmc; + f2 = f2 + dibp * 2. * wmp - dibp2 * wmw; + } +/* Computing MAX */ + d__1 = *epsmch * f2_org__; + f2 = max(d__1,f2); + if (nleft > 0) { + dtm = -f1 / f2; + goto L777; +/* to repeat the loop for unsearched intervals. */ + } else if (bnded) { + f1 = 0.; + f2 = 0.; + dtm = 0.; + } else { + dtm = -f1 / f2; + } +/* ------------------- the end of the loop ------------------------------- */ +L888: + if (dtm <= 0.) { + dtm = 0.; + } + tsum += dtm; +/* Move free variables (i.e., the ones w/o breakpoints) and */ +/* the variables whose breakpoints haven't been reached. */ + daxpy_(n, &tsum, &d__[1], &c__1, &xcp[1], &c__1); +L999: +/* Update c = c + dtm*p = W'(x^c - x) */ +/* which will be used in computing r = Z'(B(x^c - x) + g). */ + if (*col > 0) { + daxpy_(&col2, &dtm, &p[1], &c__1, &c__[1], &c__1); + } + return 0; +} /* cauchy_ */ + +/* ====================== The end of cauchy ============================== */ + +/* Subroutine */ int mainlb_(integer *n, integer *m, +doublereal *x, doublereal *l, doublereal *u, +integer *nbd, +doublereal *f, doublereal *g, doublereal *factr, doublereal *pgtol, doublereal *ws, doublereal *wy, +doublereal *sy, doublereal *ss, doublereal *wt, doublereal *wn, doublereal *snd, doublereal *z__, +doublereal *r__, doublereal *d__, doublereal *t, doublereal *wa, integer *index, integer *iwhere, integer *indx2, +char *task, integer *iprint, char *csave, logical *lsave, integer *isave, doublereal *dsave, +ftnlen task_len, ftnlen csave_len) +{ + /* System generated locals */ + integer ws_dim1, ws_offset, wy_dim1, wy_offset, sy_dim1, sy_offset, + ss_dim1, ss_offset, wt_dim1, wt_offset, wn_dim1, wn_offset, + snd_dim1, snd_offset, i__1; + doublereal d__1, d__2; + + /* Local variables */ + static integer head; + static doublereal fold; + static integer nact; + static doublereal ddum; + static integer info; + static integer nfgv, ifun, iter, nint; + static char word[3]; + static integer i__, iback, k; + static doublereal gdold; + static integer nfree; + static logical boxed; + static integer itail; + static doublereal theta; + static doublereal dnorm; + static integer nskip, iword; + static doublereal xstep, stpmx; + static doublereal gd, dr, rr; + static integer ileave; + static integer itfile; + static doublereal cachyt, epsmch; + static logical updatd; + static logical prjctd; + static integer iupdat; + static logical cnstnd; + static doublereal sbgnrm; + static integer nenter; + static doublereal lnscht; + static integer nintol; + static doublereal dtd; + static integer col; + static doublereal tol; + static logical wrk; + static doublereal stp, cpu1, cpu2; + + /* Parameter adjustments */ + --indx2; + --iwhere; + --index; + --t; + --d__; + --r__; + --z__; + --g; + --nbd; + --u; + --l; + --x; + --wa; + snd_dim1 = 2 * *m; + snd_offset = 1 + snd_dim1 * 1; + snd -= snd_offset; + wn_dim1 = 2 * *m; + wn_offset = 1 + wn_dim1 * 1; + wn -= wn_offset; + wt_dim1 = *m; + wt_offset = 1 + wt_dim1 * 1; + wt -= wt_offset; + ss_dim1 = *m; + ss_offset = 1 + ss_dim1 * 1; + ss -= ss_offset; + sy_dim1 = *m; + sy_offset = 1 + sy_dim1 * 1; + sy -= sy_offset; + wy_dim1 = *n; + wy_offset = 1 + wy_dim1 * 1; + wy -= wy_offset; + ws_dim1 = *n; + ws_offset = 1 + ws_dim1 * 1; + ws -= ws_offset; + --lsave; + --isave; + --dsave; + + /* Function Body */ + if (s_cmp(task, "START", (ftnlen)60, (ftnlen)5) == 0) { +/* Generate the current machine precision. */ + epsmch = dpmeps_(); + fold = 0.; + dnorm = 0.; + cpu1 = 0.; + gd = 0.; + sbgnrm = 0.; + stp = 0.; + stpmx = 0.; + gdold = 0.; + dtd = 0.; +/* Initialize counters and scalars when task='START'. */ +/* for the limited memory BFGS matrices: */ + col = 0; + head = 1; + theta = 1.; + iupdat = 0; + updatd = FALSE_; + iback = 0; + itail = 0; + ifun = 0; + iword = 0; + nact = 0; + ileave = 0; + nenter = 0; +/* for operation counts: */ + iter = 0; + nfgv = 0; + nint = 0; + nintol = 0; + nskip = 0; + nfree = *n; +/* for stopping tolerance: */ + tol = *factr * epsmch; + cachyt = 0.; + lnscht = 0.; +/* 'word' records the status of subspace solutions. */ + s_copy(word, "---", (ftnlen)3, (ftnlen)3); +/* 'info' records the termination information. */ + info = 0; + itfile = 0; +/* Check the input arguments for errors. */ + errclb_(n, m, factr, &l[1], &u[1], &nbd[1], task, &info, &k, (ftnlen) + 60); + if (s_cmp(task, "ERROR", (ftnlen)5, (ftnlen)5) == 0) { + return 0; + } +/* Initialize iwhere & project x onto the feasible set. */ + active_(n, &l[1], &u[1], &nbd[1], &x[1], &iwhere[1], iprint, &prjctd, + &cnstnd, &boxed); +/* The end of the initialization. */ + } else { +/* restore local variables. */ + prjctd = lsave[1]; + cnstnd = lsave[2]; + boxed = lsave[3]; + updatd = lsave[4]; + nintol = isave[1]; + itfile = isave[3]; + iback = isave[4]; + nskip = isave[5]; + head = isave[6]; + col = isave[7]; + itail = isave[8]; + iter = isave[9]; + iupdat = isave[10]; + nint = isave[12]; + nfgv = isave[13]; + info = isave[14]; + ifun = isave[15]; + iword = isave[16]; + nfree = isave[17]; + nact = isave[18]; + ileave = isave[19]; + nenter = isave[20]; + theta = dsave[1]; + fold = dsave[2]; + tol = dsave[3]; + dnorm = dsave[4]; + epsmch = dsave[5]; + cpu1 = dsave[6]; + cachyt = dsave[7]; + lnscht = dsave[9]; + gd = dsave[11]; + stpmx = dsave[12]; + sbgnrm = dsave[13]; + stp = dsave[14]; + gdold = dsave[15]; + dtd = dsave[16]; +/* After returning from the driver go to the point where execution */ +/* is to resume. */ + if (s_cmp(task, "FG_LN", (ftnlen)5, (ftnlen)5) == 0) { + goto L666; + } + if (s_cmp(task, "NEW_X", (ftnlen)5, (ftnlen)5) == 0) { + goto L777; + } + if (s_cmp(task, "FG_ST", (ftnlen)5, (ftnlen)5) == 0) { + goto L111; + } + if (s_cmp(task, "STOP", (ftnlen)4, (ftnlen)4) == 0) { + if (s_cmp(task + 6, "CPU", (ftnlen)3, (ftnlen)3) == 0) { +/* restore the previous iterate. */ + dcopy_(n, &t[1], &c__1, &x[1], &c__1); + dcopy_(n, &r__[1], &c__1, &g[1], &c__1); + *f = fold; + } + goto L999; + } + } +/* Compute f0 and g0. */ + s_copy(task, "FG_START", (ftnlen)60, (ftnlen)8); +/* return to the driver to calculate f and g; reenter at 111. */ + goto L1000; +L111: + nfgv = 1; +/* Compute the infinity norm of the (-) projected gradient. */ + projgr_(n, &l[1], &u[1], &nbd[1], &x[1], &g[1], &sbgnrm); + if (sbgnrm <= *pgtol) { +/* terminate the algorithm. */ + s_copy(task, "CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL", ( + ftnlen)60, (ftnlen)48); + goto L999; + } +/* ----------------- the beginning of the loop -------------------------- */ +L222: + iword = -1; + + if (! cnstnd && col > 0) { +/* skip the search for GCP. */ + dcopy_(n, &x[1], &c__1, &z__[1], &c__1); + wrk = updatd; + nint = 0; + goto L333; + } +/* ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ + +/* Compute the Generalized Cauchy Point (GCP). */ + +/* ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ + cauchy_(n, &x[1], &l[1], &u[1], &nbd[1], &g[1], &indx2[1], &iwhere[1], &t[ + 1], &d__[1], &z__[1], m, &wy[wy_offset], &ws[ws_offset], &sy[ + sy_offset], &wt[wt_offset], &theta, &col, &head, &wa[1], &wa[(*m + << 1) + 1], &wa[(*m << 2) + 1], &wa[*m * 6 + 1], &nint, iprint, & + sbgnrm, &info, &epsmch); + if (info != 0) { +/* singular triangular system detected; refresh the lbfgs memory. */ + info = 0; + col = 0; + head = 1; + theta = 1.; + iupdat = 0; + updatd = FALSE_; + cachyt = cachyt + cpu2 - cpu1; + goto L222; + } + cachyt = cachyt + cpu2 - cpu1; + nintol += nint; +/* Count the entering and leaving variables for iter > 0; */ +/* find the index set of free and active variables at the GCP. */ + freev_(n, &nfree, &index[1], &nenter, &ileave, &indx2[1], &iwhere[1], & + wrk, &updatd, &cnstnd, iprint, &iter); + nact = *n - nfree; +L333: +/* If there are no free variables or B=theta*I, then */ +/* skip the subspace minimization. */ + if (nfree == 0 || col == 0) { + goto L555; + } +/* ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ + +/* Subspace minimization. */ + +/* ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ +/* Form the LEL^T factorization of the indefinite */ +/* matrix K = [-D -Y'ZZ'Y/theta L_a'-R_z' ] */ +/* [L_a -R_z theta*S'AA'S ] */ +/* where E = [-I 0] */ +/* [ 0 I] */ + if (wrk) { + formk_(n, &nfree, &index[1], &nenter, &ileave, &indx2[1], &iupdat, & + updatd, &wn[wn_offset], &snd[snd_offset], m, &ws[ws_offset], & + wy[wy_offset], &sy[sy_offset], &theta, &col, &head, &info); + } + if (info != 0) { +/* nonpositive definiteness in Cholesky factorization; */ +/* refresh the lbfgs memory and restart the iteration. */ + info = 0; + col = 0; + head = 1; + theta = 1.; + iupdat = 0; + updatd = FALSE_; + goto L222; + } +/* compute r=-Z'B(xcp-xk)-Z'g (using wa(2m+1)=W'(xcp-x) */ +/* from 'cauchy'). */ + cmprlb_(n, m, &x[1], &g[1], &ws[ws_offset], &wy[wy_offset], &sy[sy_offset] + , &wt[wt_offset], &z__[1], &r__[1], &wa[1], &index[1], &theta, & + col, &head, &nfree, &cnstnd, &info); + if (info != 0) { + goto L444; + } +/* call the direct method. */ + subsm_(n, m, &nfree, &index[1], &l[1], &u[1], &nbd[1], &z__[1], &r__[1], & + ws[ws_offset], &wy[wy_offset], &theta, &col, &head, &iword, &wa[1] + , &wn[wn_offset], iprint, &info); +L444: + if (info != 0) { +/* singular triangular system detected; */ +/* refresh the lbfgs memory and restart the iteration. */ + info = 0; + col = 0; + head = 1; + theta = 1.; + iupdat = 0; + updatd = FALSE_; + goto L222; + } +L555: +/* ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ + +/* Line search and optimality tests. */ + +/* ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ +/* Generate the search direction d:=z-x. */ + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + d__[i__] = z__[i__] - x[i__]; +/* L40: */ + } +L666: + lnsrlb_(n, &l[1], &u[1], &nbd[1], &x[1], f, &fold, &gd, &gdold, &g[1], & + d__[1], &r__[1], &t[1], &z__[1], &stp, &dnorm, &dtd, &xstep, & + stpmx, &iter, &ifun, &iback, &nfgv, &info, task, &boxed, &cnstnd, + csave, &isave[22], &dsave[17], (ftnlen)60, (ftnlen)60); + if (info != 0 || iback >= 20) { +/* restore the previous iterate. */ + dcopy_(n, &t[1], &c__1, &x[1], &c__1); + dcopy_(n, &r__[1], &c__1, &g[1], &c__1); + *f = fold; + if (col == 0) { +/* abnormal termination. */ + if (info == 0) { + info = -9; +/* restore the actual number of f and g evaluations etc. */ + --nfgv; + --ifun; + --iback; + } + s_copy(task, "ABNORMAL_TERMINATION_IN_LNSRCH", (ftnlen)60, ( + ftnlen)30); + ++iter; + goto L999; + } else { +/* refresh the lbfgs memory and restart the iteration. */ + if (info == 0) { + --nfgv; + } + info = 0; + col = 0; + head = 1; + theta = 1.; + iupdat = 0; + updatd = FALSE_; + s_copy(task, "RESTART_FROM_LNSRCH", (ftnlen)60, (ftnlen)19); + lnscht = lnscht + cpu2 - cpu1; + goto L222; + } + } else if (s_cmp(task, "FG_LN", (ftnlen)5, (ftnlen)5) == 0) { +/* return to the driver for calculating f and g; reenter at 666. */ + goto L1000; + } else { +/* calculate and print out the quantities related to the new X. */ + lnscht = lnscht + cpu2 - cpu1; + ++iter; +/* Compute the infinity norm of the projected (-)gradient. */ + projgr_(n, &l[1], &u[1], &nbd[1], &x[1], &g[1], &sbgnrm); +/* Print iteration information. */ + prn2lb_(n, &x[1], f, &g[1], iprint, &itfile, &iter, &nfgv, &nact, & + sbgnrm, &nint, word, &iword, &iback, &stp, &xstep, (ftnlen)3); + goto L1000; + } +L777: +/* Test for termination. */ + if (sbgnrm <= *pgtol) { +/* terminate the algorithm. */ + s_copy(task, "CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL", ( + ftnlen)60, (ftnlen)48); + goto L999; + } +/* Computing MAX */ + d__1 = abs(fold), d__2 = abs(*f), d__1 = max(d__1,d__2); + ddum = max(d__1,1.); + if (fold - *f <= tol * ddum) { +/* terminate the algorithm. */ + s_copy(task, "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH", ( + ftnlen)60, (ftnlen)47); + if (iback >= 10) { + info = -5; + } +/* i.e., to issue a warning if iback>10 in the line search. */ + goto L999; + } +/* Compute d=newx-oldx, r=newg-oldg, rr=y'y and dr=y's. */ + i__1 = *n; + for (i__ = 1; i__ <= i__1; ++i__) { + r__[i__] = g[i__] - r__[i__]; +/* L42: */ + } + rr = ddot_(n, &r__[1], &c__1, &r__[1], &c__1); + if (stp == 1.) { + dr = gd - gdold; + ddum = -gdold; + } else { + dr = (gd - gdold) * stp; + dscal_(n, &stp, &d__[1], &c__1); + ddum = -gdold * stp; + } + if (dr <= epsmch * ddum) { +/* skip the L-BFGS update. */ + ++nskip; + updatd = FALSE_; + goto L888; + } +/* ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ + +/* Update the L-BFGS matrix. */ + +/* ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc */ + updatd = TRUE_; + ++iupdat; +/* Update matrices WS and WY and form the middle matrix in B. */ + matupd_(n, m, &ws[ws_offset], &wy[wy_offset], &sy[sy_offset], &ss[ + ss_offset], &d__[1], &r__[1], &itail, &iupdat, &col, &head, & + theta, &rr, &dr, &stp, &dtd); +/* Form the upper half of the pds T = theta*SS + L*D^(-1)*L'; */ +/* Store T in the upper triangular of the array wt; */ +/* Cholesky factorize T to J*J' with */ +/* J' stored in the upper triangular of wt. */ + formt_(m, &wt[wt_offset], &sy[sy_offset], &ss[ss_offset], &col, &theta, & + info); + if (info != 0) { +/* nonpositive definiteness in Cholesky factorization; */ +/* refresh the lbfgs memory and restart the iteration. */ + info = 0; + col = 0; + head = 1; + theta = 1.; + iupdat = 0; + updatd = FALSE_; + goto L222; + } +/* Now the inverse of the middle matrix in B is */ +/* [ D^(1/2) O ] [ -D^(1/2) D^(-1/2)*L' ] */ +/* [ -L*D^(-1/2) J ] [ 0 J' ] */ +L888: +/* -------------------- the end of the loop ----------------------------- */ + goto L222; +L999: + +L1000: +/* Save local variables. */ + lsave[1] = prjctd; + lsave[2] = cnstnd; + lsave[3] = boxed; + lsave[4] = updatd; + isave[1] = nintol; + isave[3] = itfile; + isave[4] = iback; + isave[5] = nskip; + isave[6] = head; + isave[7] = col; + isave[8] = itail; + isave[9] = iter; + isave[10] = iupdat; + isave[12] = nint; + isave[13] = nfgv; + isave[14] = info; + isave[15] = ifun; + isave[16] = iword; + isave[17] = nfree; + isave[18] = nact; + isave[19] = ileave; + isave[20] = nenter; + dsave[1] = theta; + dsave[2] = fold; + dsave[3] = tol; + dsave[4] = dnorm; + dsave[5] = epsmch; + dsave[6] = cpu1; + dsave[7] = cachyt; + dsave[9] = lnscht; + dsave[11] = gd; + dsave[12] = stpmx; + dsave[13] = sbgnrm; + dsave[14] = stp; + dsave[15] = gdold; + dsave[16] = dtd; + return 0; +} /* mainlb_ */ + +/* ======================= The end of mainlb ============================= */ + +/* ================ L-BFGS-B (version 2.3) ========================== */ +/* Subroutine */ int lbfgsb(integer *n, integer *m, doublereal *x, doublereal *l, doublereal *u, integer *nbd, doublereal *f, +doublereal *g, doublereal *factr, doublereal *pgtol, doublereal *wa, integer *iwa, char *task, +integer *iprint, char *csave, logical *lsave, integer *isave, doublereal *dsave, ftnlen task_len, +ftnlen csave_len) +{ + /* System generated locals */ + integer i__1; + + /* Local variables */ + static integer lsnd, l1, l2, l3, ld, lr, lt; + static integer lz, lwa, lwn, lss, lws, lwt, lsy, lwy; + + /* Parameter adjustments */ + --iwa; + --g; + --nbd; + --u; + --l; + --x; + --wa; + --lsave; + --isave; + --dsave; + + /* Function Body */ + if (s_cmp(task, "START", (ftnlen)60, (ftnlen)5) == 0) { + isave[1] = *m * *n; +/* Computing 2nd power */ + i__1 = *m; + isave[2] = i__1 * i__1; +/* Computing 2nd power */ + i__1 = *m; + isave[3] = i__1 * i__1 << 2; + isave[4] = 1; + isave[5] = isave[4] + isave[1]; + isave[6] = isave[5] + isave[1]; + isave[7] = isave[6] + isave[2]; + isave[8] = isave[7] + isave[2]; + isave[9] = isave[8]; + isave[10] = isave[9] + isave[2]; + isave[11] = isave[10] + isave[3]; + isave[12] = isave[11] + isave[3]; + isave[13] = isave[12] + *n; + isave[14] = isave[13] + *n; + isave[15] = isave[14] + *n; + isave[16] = isave[15] + *n; + } + l1 = isave[1]; + l2 = isave[2]; + l3 = isave[3]; + lws = isave[4]; + lwy = isave[5]; + lsy = isave[6]; + lss = isave[7]; + lwt = isave[9]; + lwn = isave[10]; + lsnd = isave[11]; + lz = isave[12]; + lr = isave[13]; + ld = isave[14]; + lt = isave[15]; + lwa = isave[16]; + mainlb_(n, m, &x[1], &l[1], &u[1], &nbd[1], f, &g[1], factr, pgtol, &wa[ + lws], &wa[lwy], &wa[lsy], &wa[lss], &wa[lwt], &wa[lwn], &wa[lsnd], + &wa[lz], &wa[lr], &wa[ld], &wa[lt], &wa[lwa], &iwa[1], &iwa[*n + + 1], &iwa[(*n << 1) + 1], task, iprint, csave, &lsave[1], &isave[ + 22], &dsave[1], (ftnlen)60, (ftnlen)60); + return 0; +} /* setulb_ */ + +/* ======================= The end of setulb ============================= */ +#ifdef __cplusplus + } +#endif diff --git a/parameter-learning_nd_disc/source code PL/gpref/lbfgsb.h b/parameter-learning_nd_disc/source code PL/gpref/lbfgsb.h new file mode 100755 index 0000000..858daed --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/lbfgsb.h @@ -0,0 +1,46 @@ +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _LBFGSB_H +#define _LBFGSB_H + +typedef long int integer; +typedef unsigned long int uinteger; +typedef char *address; +typedef short int shortint; +typedef float real; +typedef double doublereal; +typedef long int logical; +typedef short int shortlogical; +typedef char logical1; +typedef char integer1; +typedef short flag; +typedef short ftnlen; +typedef short ftnint; + +#define s_cmp(a,b,c,d) (strncmp ((a),(b), (c) >= (d) ? (d) : (c))) +#define s_copy(a,b,c,d) (strcpy((a),(b))) + +typedef struct bfgssettings +{ + unsigned int number ; + double * x ; + double fx ; + double * gx ; + unsigned int iternum ; + +} Bfgs_Settings ; + +Bfgs_Settings * CreateBfgsSettings(unsigned int); +void ClearBfgsSettings(Bfgs_Settings *); +int lbfgsb_minfunc(int(* f)(void *,Bfgs_Settings *),void *,Bfgs_Settings *); +int lbfgs_minfunc(int(* f)(void *,Bfgs_Settings *),void *,Bfgs_Settings *); + +#endif + +#ifdef __cplusplus +} +#endif +// end of lbfgsb.h + diff --git a/parameter-learning_nd_disc/source code PL/gpref/lbfgsb_dump.c b/parameter-learning_nd_disc/source code PL/gpref/lbfgsb_dump.c new file mode 100755 index 0000000..f1cc6e0 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/lbfgsb_dump.c @@ -0,0 +1,243 @@ + +// driver1.f -- translated by f2c (version of 23 April 1993 18:34:30). + + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "lbfgsb.h" + +#define BFGSPRINT ((long int)-1) +#define BFGSFACTR (1e6) +#define BFGSPGTOL (1e-5) +//#define BFGSNMAX ((long int)2700) +#define BFGSM ((long int)5) +#define BFGSMMAX (BFGSM)//17 +#define EVALLIMIT (200) + +/* DRIVER 1 */ +/* -------------------------------------------------------------- */ +/* SIMPLE DRIVER FOR L-BFGS-B (version 2.1) */ +/* -------------------------------------------------------------- */ + +/* L-BFGS-B is a code for solving large nonlinear optimization */ +/* problems with simple bounds on the variables. */ + +/* The code can also be used for unconstrained problems and is */ +/* as efficient for these problems as the earlier limited memory */ +/* code L-BFGS. */ + +/* This is the simplest driver in the package. It uses all the */ +/* default settings of the code. */ + + +/* References: */ + +/* [1] R. H. Byrd, P. Lu, J. Nocedal and C. Zhu, ``A limited */ +/* memory algorithm for bound constrained optimization'', */ +/* SIAM J. Scientific Computing 16 (1995), no. 5, pp. 1190--1208. */ + +/* [2] C. Zhu, R.H. Byrd, P. Lu, J. Nocedal, ``L-BFGS-B: FORTRAN */ +/* Subroutines for Large Scale Bound Constrained Optimization'' */ +/* Tech. Report, NAM-11, EECS Department, Northwestern University, */ +/* 1994. */ + + +/* (Postscript files of these papers are available via anonymous */ +/* ftp to eecs.nwu.edu in the directory pub/lbfgs/lbfgs_bcm.) */ + +/* * * * */ + +/* NEOS, November 1994. (Latest revision June 1996.) */ +/* Optimization Technology Center. */ +/* Argonne National Laboratory and Northwestern University. */ +/* Written by */ +/* Ciyou Zhu */ +/* in collaboration with R.H. Byrd, P. Lu-Chen and J. Nocedal. */ + +/* NOTE: The user should adapt the subroutine 'timer' if 'etime' is */ +/* not available on the system. An example for system */ +/* AIX Version 3.2 is available at the end of this driver. */ + +/* ************** */ +/* Subroutine */ +extern int lbfgsb(integer *, integer *, doublereal *, + doublereal *, doublereal *, integer *, doublereal *, doublereal *, + doublereal *, doublereal *, doublereal *, integer *, char *, + integer *, char *, logical *, integer *, doublereal *, ftnlen, + ftnlen); + +int lbfgsb_minfunc ( int (* Evaluate_FuncGrad)(void *, Bfgs_Settings *), + void * setting, Bfgs_Settings * bfgssetting ) +{ + /* Local variables */ + char task[60]; + //doublereal f, *x, *g; + integer m, n; + doublereal *l=NULL, *u=NULL, factr; + char csave[60]; + doublereal dsave[29]; + integer isave[44]; + logical lsave[4]; + doublereal pgtol, *wa; + integer iprint, *nbd, *iwa; +/* + // bin file + struct stat s ; + int ms_fd ; + FILE * fid ; + long unsigned int i, j ; + double t=0 ; +*/ + + if ( NULL == bfgssetting ) + return 1 ; + +/* This simple driver demonstrates how to call the L-BFGS-B code to */ +/* solve a sample problem (the extended Rosenbrock function */ +/* subject to bounds on the variables). The dimension n of this */ +/* problem is variable. */ +/* nmax is the dimension of the largest problem to be solved. */ +/* mmax is the maximum number of limited memory corrections. */ +/* Declare the variables needed by the code. */ +/* A description of all these variables is given at the end of */ +/* the driver. */ +/* Declare a few additional variables for this sample problem. */ +/* We wish to have output at every iteration. */ + + // copy bfgs settings + iprint = BFGSPRINT ; // no print +/* We specify the tolerances in the stopping criteria. */ + factr = BFGSFACTR ; //1e7; + pgtol = BFGSPGTOL ; //1e-5; +/* We specify the dimension n of the sample problem and the number */ +/* m of limited memory corrections stored. (n and m should not */ +/* exceed the limits nmax and mmax respectively.) */ + m = BFGSM ; + n = bfgssetting->number ; +/* We now provide nbd which defines the bounds on the variables: */ +/* l specifies the lower bounds, */ +/* u specifies the upper bounds. */ +/* First set bounds on the odd-numbered variables. */ + + //g=(doublereal*)malloc(n*sizeof(double)) ; + //x=(doublereal*)malloc(n*sizeof(double)) ; + //l=(doublereal*)malloc(n*sizeof(double)) ; + //u=(doublereal*)malloc(n*sizeof(double)) ; + nbd=(integer*)calloc(n,sizeof(integer)) ; + iwa=(integer*)malloc(3*n*sizeof(integer)) ; + wa=(double*)malloc((4*n+2*n*BFGSMMAX+12*BFGSMMAX+12*BFGSMMAX*BFGSMMAX)*sizeof(double)) ; +/* + fid = fopen("wa.bin","w+b") ; + for (i=0;i<12*BFGSMMAX+12*BFGSMMAX*BFGSMMAX;i++) + fwrite( &t, sizeof(double), 1, fid ) ; + for (i=0;iBFGSMMAX) + abort() ; + +/* We now define the starting point. */ + + printf("bfgs with %ld variables\n",n) ; + +/* We start the iteration by initializing task. */ + + s_copy(task, "START", 60L, 5L); +/* ------- the beginning of the loop ---------- */ +L111: +/* This is the call to the L-BFGS-B code. */ + lbfgsb(&n, &m, bfgssetting->x, l, u, nbd, &bfgssetting->fx, bfgssetting->gx, &factr, &pgtol, wa, iwa, task, & + iprint, csave, lsave, isave, dsave, 60L, 60L); + if (s_cmp(task, "FG", 2L, 2L) == 0) { +/* the minimization routine has returned to request the */ +/* function f and gradient g values at the current x. */ +/* Compute function value f for the sample problem. */ +/* Computing 2nd power */ + + // calculate fx and gx at the POINT x + if ( 1 == (*Evaluate_FuncGrad)(setting, bfgssetting) ) + { + printf( "\r\nFATAL ERROR : Evaluate_FuncGrad failed in BFGS.\r\n" ) ; + abort() ; + } + +/* go back to the minimization routine. */ + goto L111; + } + + if (s_cmp(task, "NEW_X", 5L, 5L) == 0) + { + bfgssetting->iternum = isave[29] ; + printf("%2d: obj f = %.2f |proj g| = %.2f with %d evaluations\n", + (int)isave[29], bfgssetting->fx, dsave[12], (int)isave[33] ) ; + if (isave[33] >= EVALLIMIT && EVALLIMIT>0) + { + s_copy(task, "STOP: TOTAL NO. of f AND g EVALUATIONS EXCEEDS LIMIT", 60L, 52L); + printf ("Stop: the number of evaluations exceeds limit.\n") ; + } + if (dsave[12] <= ( fabs(bfgssetting->fx) + 1.) * 1e-5) + { + s_copy(task, "STOP: THE PROJECTED GRADIENT IS SUFFICIENTLY SMALL", 60L, 50L); + printf("Stop: the projected gradient is sufficiently small.\n") ; + } + /*if ( fabs(dsave[1]-f) < fabs(dsave[1])*1e-6 && isave[29] > 2 ) + { + s_copy(task, "STOP: THE DESCENT ON FUNCTION IS SUFFICIENTLY SMALL", 60L, 50L); + printf("Stop: the descent on function is sufficiently small.\n") ; + }*/ + goto L111; + } +/* the minimization routine has returned with a new iterate, */ +/* and we have opted to continue the iteration. */ +/* ---------- the end of the loop ------------- */ +/* If task is neither FG nor NEW_X we terminate execution. */ + + bfgssetting->iternum = isave[29] ; + //free(g); + //free(x); + //free(l); + //free(u); + free(nbd); + free(iwa); +/* + // unmount + munmap(wa, s.st_size) ; + close(ms_fd) ; +*/ + free(wa); + return 0 ; +} +#ifdef __cplusplus + } +#endif diff --git a/parameter-learning_nd_disc/source code PL/gpref/loadfile.c b/parameter-learning_nd_disc/source code PL/gpref/loadfile.c new file mode 100755 index 0000000..9f29e91 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/loadfile.c @@ -0,0 +1,513 @@ +/*******************************************************************************\ + + loadfile.c in Sequential Minimal Optimization ver2.0 + + loads data file from disk in data list. + + Chu Wei Copyright(C) National Univeristy of Singapore + Create on Jan. 16 2000 at Control Lab of Mechanical Engineering + Update on Aug. 23 2001 + +\*******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "pref.h" + +/*******************************************************************************\ + + BOOL Pref_Loadfile ( Pairs * pairs, char * filename, unsigned int inputdim ) + + load data file settings->inputfile, and create the data list Pairs + input: the pointers to pairs and filename + output: 0 or 1 + +\*******************************************************************************/ + +int Pref_Loadfile ( Data_List * pairs, char * inputfilename ) +{ + + FILE * smo_stream ; + FILE * smo_target = NULL ; + char * pstr = NULL ; + char buf[LENGTH] ; + char * temp ; + int dim = -1 ; + unsigned long index = 1 ; + unsigned int result ; + int var = 0, chg = 0 ; + double * point = NULL ; + int y = 0 ; + int i = 0, j = 0 ; + int inputdim = 0 ; + double mean = 0 ; + double ymax = LONG_MIN ; + double ymin = LONG_MAX ; + double * xmean = NULL; + Data_Node * node = NULL ; + int t0=0 , tr=0 ; + FILE * fid ; + unsigned int sz ; + + Data_List label ; + + if ( NULL == pairs || NULL == inputfilename ) + return 1 ; + + Clear_Data_List( pairs ) ; + Create_Data_List( &label ) ; + + if( (smo_stream = fopen( inputfilename, "r+t" )) == NULL ) + { + //printf( "can not open the file %s.\n", inputfilename ); + return 1 ; + } + + // save file name + var = strlen( inputfilename ) ; + if (NULL != pairs->filename) + free(pairs->filename) ; + pairs->filename = (char*)malloc((var+1)*sizeof(char)) ; + if (NULL == pairs->filename) + { + printf("fail to malloc for pairs->filename.\n") ; + exit(0) ; + } + strncpy(pairs->filename,inputfilename,var) ; + pairs->filename[var]='\0' ; + + // check the input dimension here + + if ( NULL == fgets( buf, LENGTH, smo_stream )) + { + printf( "fgets error in reading the first line.\n" ); + fclose( smo_stream ); + return 1 ; + } + + var = strlen( buf ) ; + + if (var >= LENGTH-1) + { + printf( "the line is too long in the file %s.\n", inputfilename ); + fclose( smo_stream ); + return 1 ; + } + + if (0 < var) + { + do + { + dim = dim + 1 ; + strtod( buf, &temp ) ; + strcpy( buf, temp ) ; + chg = var - strlen(buf) ; + var = var - chg ; + } + while ( 0 != chg ) ; + } + else + { + fclose( smo_stream ); + printf("the first line in the file is empty.\n") ; + return 1 ; + } + + if ( 0 > dim ) + { + fclose( smo_stream ); + +#ifdef SMO_DEBUG + printf( "input dimension is less than one.\n") ; +#endif + return 1 ; + } + + if (inputdim > 0) + { + if (inputdim == dim + 1 ) // test file without target + { + // try to open "*target*.*" as target + // create target file name + pstr = strstr( inputfilename , "test" ) ; + if (NULL != pstr) + { + result = abs( inputfilename - pstr ) ; + strncpy (buf, inputfilename, result ) ; + buf[result] = '\0' ; + strcat(buf, "targets") ; + strcat (buf, pstr+4) ; + smo_target = fopen( buf, "r+t" ) ; + } + dim = inputdim ; + pairs->dimen = dim ; + } + else if ( inputdim != dim ) + { + printf("Dimensionality in testdata is inconsistent with traindata.\n") ; + return 1 ; + } + else + pairs->dimen = dim ; + } + else + pairs->dimen = dim ; + + //initialize the x_mean and x_devi in Data_List pairs + + if ( NULL == (pairs->x_mean = (double *)(malloc(dim*sizeof(double))) ) \ + || NULL == (pairs->x_devi = (double *)(malloc(dim*sizeof(double))) ) \ + || NULL == (xmean = (double *)(malloc(dim*sizeof(double))) ) ) + { + if (NULL != pairs->x_mean) + free(pairs->x_mean) ; + if (NULL != pairs->x_devi) + free(pairs->x_devi) ; + if (NULL != xmean) + free(xmean) ; + if (NULL != smo_target) + fclose( smo_target ) ; + if (NULL != smo_stream) + fclose( smo_stream ); + return 1 ; + } + for ( j = 0; j < dim; j ++ ) + pairs->x_mean[j] = 0 ; + for ( j = 0; j < dim; j ++ ) + pairs->x_devi[j] = 0 ; + for ( j = 0; j < dim; j ++ ) + xmean[j] = 0 ; + + // begin to initialize data_list for digital input only + printf("\nLoading samples from %s ... \n", inputfilename) ; + pairs->datatype = PREFERENCE ; + + rewind( smo_stream ) ; + fgets( buf, LENGTH, smo_stream ) ; + do + { + +#ifdef SMO_DEBUG + printf("%d\n", index) ; + printf("%s\n\n\n", buf) ; +#endif + point = (double *) malloc( (dim+1) * sizeof(double) ) ; // Pairs to free them + if ( NULL == point ) + { + printf("not enough memory.\n") ; + if (NULL != smo_target) + fclose( smo_target ) ; + if (NULL != smo_stream) + fclose( smo_stream ); + if (NULL != pairs->x_mean) + free(pairs->x_mean) ; + if (NULL != pairs->x_devi) + free(pairs->x_devi) ; + if (NULL != xmean) + free(xmean) ; + Clear_Data_List( pairs ) ; + return 1 ; + } + var = strlen( buf ) ; + i = 0 ; + chg = dim ; + + while ( chg>0 && i0 && var>=0) + //y = (int)strtod( buf, &temp ) ; + y = 0 ; + else + { + free(point) ; + //y = 0 ; + printf("Warning: the input file contains a blank or defective line %lu.\n",index ) ; + //exit(1); + } + // load y as target from other file when dim+1 + if (NULL != smo_target) + { + if ( NULL != fgets( buf, LENGTH, smo_target ) ) + { + var = strlen( buf ) ; + y = (int)strtod( buf, &temp ) ; + strcpy( buf, temp ) ; + chg = var - strlen(buf) ; + if (chg==0) + printf("Warning: the target file contains a blank line.\n") ; + } + else + printf("Warning: the target file is shorter than the input file.\n") ; + } + + /* for ( i = 0; i < dim; i ++ ) + { + point[i] = strtod( buf, &temp ) ; + strcpy( buf, temp ) ; + } + y = strtod( buf, &temp ) ; + + // load y as target from other file when dim+1 + if (NULL != smo_target) + { + fgets( buf, LENGTH, smo_target ) ; + y = strtod( buf, &temp ) ; + }*/ + + if (chg>0) + { + if ( 0 == Add_Data_List( pairs, Create_Data_Node(index, point, y) ) ) + { + // update statistics + pairs->mean = (mean * (((double)(pairs->count)) - 1) + y )/ ((double)(pairs->count)) ; + pairs->deviation = pairs->deviation + (y-mean)*(y-mean) * ((double)(pairs->count)-1)/((double)(pairs->count)); + mean = pairs->mean ; + for ( j=0; jx_mean[j] = (xmean[j] * (((double)(pairs->count)) - 1) + point[j] )/ ((double)(pairs->count)) ; + pairs->x_devi[j] = pairs->x_devi[j] + (point[j]-xmean[j])*(point[j]-xmean[j]) * ((double)(pairs->count)-1)/((double)(pairs->count)); + xmean[j] = pairs->x_mean[j] ; + } + if (y>ymax) + { ymax = y ; pairs->i_ymax = index ;} + if (yi_ymin = index ;} + + // check data type + Add_Label_Data_List( &label, Create_Data_Node(index, point, y) ) ; + index ++ ; + } + else + { +#ifdef SMO_DEBUG + printf("%d\n", index) ; + printf("duplicate data \n") ; +#endif + } + } + } + while( !feof( smo_stream ) && NULL != fgets( buf, LENGTH, smo_stream ) ) ; + + if (label.count>=2) + pairs->datatype = ORDINALREGRESSION ; + //else + // printf("Warning : not a ordinal regression.\n") ; + + if (pairs->count < MINNUM || (pairs->datatype == UNKNOWN && inputdim == 0 ) ) + { + printf("too few input pairs\n") ; + Clear_Data_List( pairs ) ; + if (NULL != pairs->x_mean) + free(pairs->x_mean) ; + if (NULL != pairs->x_devi) + free(pairs->x_devi) ; + if (NULL != xmean) + free(xmean) ; + if (NULL != smo_target) + fclose( smo_target ) ; + if (NULL != smo_stream) + fclose( smo_stream ); + return 1 ; + } + + pairs->featuretype = (int *) malloc(pairs->dimen*sizeof(int)) ; + if (NULL != pairs->featuretype) + { + //default 0 + for (sz=0;szdimen;sz++) + pairs->featuretype[sz] = 0 ; + + if (0==inputdim) + pstr = strstr( inputfilename, "train") ; // 46 + else + pstr = strstr( inputfilename, "test") ; // 46 + if (NULL != pstr) + { + sz = abs( pstr - inputfilename ) ; + pstr = strrchr( inputfilename, '.') ; // 46 + strncpy( buf, inputfilename, sz ) ; + buf[sz]='\0' ; + strcat( buf, "feature" ) ; + strcat( buf, pstr ) ; + fid = fopen(buf,"r+t") ; + if (NULL != fid) + { + printf("Loading the specifications of feature type in %s ...",buf) ; + sz = 0 ; + while (!feof(fid) && NULL!=fgets(buf,LENGTH,fid) ) + { + i=strlen(buf) ; + if (i>1) + { + if (sz>=pairs->dimen) + { + printf("Warning : feature type file is too long.\n") ; + sz = pairs->dimen-1 ; + } + pairs->featuretype[sz] = atoi(buf) ; + sz += 1 ; + } + else + printf("Warning : blank line in feature type file.\n") ; + } + if (sz!=pairs->dimen) + { + //default 0 + for (sz=0;szdimen;sz++) + pairs->featuretype[sz] = 0 ; + printf(" RESET as default.\n") ; + } + else + printf(" done.\n") ; + fclose(fid) ; + } + } + } + + pairs->deviation = sqrt( pairs->deviation / ((double)(pairs->count - 1.0)) ) ; + for ( j=0; jx_devi[j] = sqrt( pairs->x_devi[j] / ((double)(pairs->count - 1.0)) ) ; + + // set target value as +1 or -1, if data type is CLASSIFICATION + if ( UNKNOWN != pairs->datatype && 0 == inputdim ) + { + node = pairs->front ; + while ( node != NULL ) + { + node = node->next ; + } + pairs->deviation = 1.0 ; + pairs->mean = 0 ; + pairs->normalized_output = 0 ; + } + + for ( j=0; jfeaturetype[j] != 0) + { + pairs->x_devi[j] = 1 ; + pairs->x_mean[j] = 0 ; + } + } + + if (inputdim>0) // do not normailize data for TESTING + { + pairs->normalized_output = 0 ; + pairs->normalized_input = 0 ; + } + + // normalize the target if needed + node = pairs->front ; + while ( node != NULL ) + { + if ( 1 == pairs->normalized_input ) + { + for ( j=0; jx_devi[j]>0) + node->point[j] = (node->point[j]-pairs->x_mean[j])/(pairs->x_devi[j]) ; + else + node->point[j] = 0 ; + } + } + node = node->next ; + } + printf("Total %lu samples with %lu dimensions for ", pairs->count, pairs->dimen) ; + + if (inputdim > 0) + printf("TESTING.\r\n") ; + else + { + if( PREFERENCE == pairs->datatype ) + { + printf("PREFERENCE.\r\n") ; + pairs->classes = 1 ; + } + else if ( ORDINALREGRESSION == pairs->datatype ) + { + printf("ORDINAL %lu REGRESSION.\r\n",label.count) ; + pairs->classes = label.count ; + if (NULL != pairs->labels) + free( pairs->labels ) ; + i=0; + pairs->labels = (int*)malloc(pairs->classes*sizeof(int)) ; + pairs->labelnum = (int*)malloc(pairs->classes*sizeof(int)) ; + if (NULL != pairs->labels&&NULL != pairs->labelnum) + { + node = label.front ; + j=0 ; + printf("ordinal varibles : ") ; + while (NULL!=node) + { + if (node->target<1 || node->target>pairs->classes || node->target!=(unsigned int)j+1) + { + printf("\nError : samples should be sorted with target from 1 to %d.\n",(int)pairs->classes) ; + exit(1) ; + } + pairs->labels[node->target-1] = node->target ; + if (node->target-1==0) + t0 = node->target ; + if (node->target==(int)pairs->classes) + tr = node->target ; + pairs->labelnum[node->target-1] = node->fold ; + i += node->fold ; + printf("%d(%d) ", node->target, node->fold) ; + node = node->next ; + j+=1 ; + } + printf("\n") ; + if (i!=(int)pairs->count||t0!=1||tr!=(int)pairs->classes) + { + printf("Error in data list.\n") ; + exit(1) ; + } + } + else + { + printf("fail to malloc for pairs->labels.\n") ; + exit(1) ; + } + } + else + printf("UNKNOWN.\r\n") ; + } + if (1 == pairs->normalized_input) + printf("Inputs are normalized.\r\n") ; + + if (1 == pairs->normalized_output && pairs->deviation > 0) + printf("Outputs are normalized.\r\n") ; + if ( inputdim > 0 && pairs->deviation <= 0 ) + printf("Tragets are not at hand.\r\n") ; + +#ifdef _SOFTMAX_SERVER + pairs->classes = 3 ; + pairs->labels[0] = 2 ; + pairs->labelnum[0] = 0 ; + pairs->labels[1] = 0 ; + pairs->labelnum[1] = 0 ; + pairs->labels[2] = 1 ; + pairs->labelnum[2] = 0 ; +#endif + + Clear_Label_Data_List ( &label ) ; + if (NULL != smo_target) + fclose( smo_target ) ; + if (NULL != smo_stream) + fclose( smo_stream ); + if ( NULL != xmean ) + free( xmean ) ; + return 0 ; +} + +// end of loadfile.c diff --git a/parameter-learning_nd_disc/source code PL/gpref/loadpair.c b/parameter-learning_nd_disc/source code PL/gpref/loadpair.c new file mode 100755 index 0000000..228cb18 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/loadpair.c @@ -0,0 +1,134 @@ +/*******************************************************************************\ + + loadfile.c in Sequential Minimal Optimization ver2.0 + + loads data file from disk in data list. + + Chu Wei Copyright(C) National Univeristy of Singapore + Create on Jan. 16 2000 at Control Lab of Mechanical Engineering + Update on Aug. 23 2001 + +\*******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include "pref.h" + +int Create_Pref_List(Pref_List * list) +{ + if (NULL == list) + return 1 ; + list->count=0; + list->front=NULL; + list->rear=NULL; + return 0 ; +} +Pref_Node * Create_Pref_Node(unsigned long int index) +{ + Pref_Node * node ; + if (index<1) + return NULL ; + node = (Pref_Node *) malloc(sizeof(Pref_Node)) ; + if (NULL == node) + return node ; + node -> index = index ; + node -> next = NULL ; + return node ; +} +int Is_Pref_Empty(Pref_List * list) +{ + if (NULL == list) + return 1 ; + if ((list -> front == NULL) && (list -> rear == NULL)) + return 0 ; + else + return 1; +} +int Add_Pref_List(Pref_List * list, Pref_Node * node) +{ + //Pref_Node * temp = NULL ; + if ( NULL == node || NULL == list) + return 1 ; + + if (!Is_Pref_Empty(list)) + list -> front = list -> rear = node ; + else + { + list -> rear -> next = node ; + list -> rear = node ; + } + list -> count += 1 ; + return 0 ; +} +int Clear_Pref_List(Pref_List * list) +{ + Pref_Node * node ; + Pref_Node * temp ; + if (NULL ==list) + return 0 ; + node = list->front ; + while (NULL!=node) + { + temp=node ; + node=node->next ; + //printf("%ld: u=%ld v=%ld\n",temp->index,temp->u,temp->v) ; + free(temp) ; + list->count -= 1 ; + } + list->front = NULL ; + list->rear = NULL ; + + if (list->count!=0) + { + printf("Error in the Pref_List.\n"); + list->count = 0 ; + } + return 0 ; +} + +int Pref_Loadpair ( Pref_List * pref, char * inputfilename ) +{ + FILE * fid ; + unsigned long int index = 0 ; + Pref_Node * node ; + char buf[LENGTH] ; + char * temp ; + + if (NULL==pref || NULL==inputfilename) + return 1 ; + + fid = fopen(inputfilename,"r+t") ; + if (NULL == fid) + return 1 ; + + printf("\nLoading preference pairs from %s ... \n", inputfilename) ; + + rewind( fid ) ; + fgets( buf, LENGTH, fid ) ; + if (strlen( buf ) < 1) + { + fclose(fid) ; + return 1 ; + } + do + { + index += 1 ; + node = Create_Pref_Node (index) ; + node->u = strtol( buf, &temp, 10 ) ; + strcpy( buf, temp ) ; + node->v = strtol( buf, &temp, 10 ) ; + Add_Pref_List( pref, node) ; + } + while( !feof( fid ) && NULL != fgets( buf, LENGTH, fid ) ) ; + + printf("%ld pairs loaded for training.\n", pref->count) ; + fclose(fid) ; + + return 0 ; +} + +// end of loadpair.c diff --git a/parameter-learning_nd_disc/source code PL/gpref/neal_matrix.c b/parameter-learning_nd_disc/source code PL/gpref/neal_matrix.c new file mode 100755 index 0000000..3de1804 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/neal_matrix.c @@ -0,0 +1,594 @@ +/* MATRIX.C - Routines for doing matrix operations. */ + +/* Copyright (c) 1996, 1998 by Radford M. Neal + * + * Permission is granted for anyone to copy, use, or modify this program + * for purposes of research or education, provided this copyright notice + * is retained, and note is made of any changes that have been made. + * + * This program is distributed without any warranty, express or implied. + * As this program was written for research purposes only, it has not been + * tested to the degree that would be advisable in any important application. + * All use of this program is entirely at the user's own risk. + */ + + +#include +#include +#include +#include + +//#ifdef __cplusplus +//extern "C" { +//#endif + +#include "neal_matrix.h" + + +/* SET A SQUARE MATRIX TO THE IDENTITY. */ + +void identity_matrix +( double *m, /* The matrix to set to the identity */ + int n /* Dimension of the matrix */ +) +{ + int k; + + for (k = n*n-1; k>=0; k--) m[k] = 0; + + for (k = n*n-1; k>=0; k -= n+1) m[k] = 1; +} + + +/* FIND THE SQUARED NORM OF A VECTOR. The vector (of length n) is + stored in memory in successive locations that are at a given distance + apart. For an ordinary vector, a distance of 1 is used, but other + distances can come about from looking at columns of a matrix. */ + +double squared_norm +( double *v, /* The vector */ + int d, /* Distance between elements */ + int n /* Number of elements */ +) +{ + double s; + int i; + + s = 0; + + for (i = n; i>0; i--) + { s += *v * *v; + v += d; + } + + return s; +} + + +/* FIND THE INNER PRODUCT OF TWO VECTORS. Each vector is of length n, and + is stored in memory in successive locations that are at a given distance + apart. For an ordinary vector, a distance of 1 is used, but other + distances can come about from looking at columns of a matrix. */ + +double inner_product +( double *v1, /* First vector */ + int d1, /* Distance between elements of first vector */ + double *v2, /* Second vector */ + int d2, /* Distance between elements of second vector */ + int n /* Number of elements in the vectors */ +) +{ + double s; + int i; + + s = 0; + + for (i = n; i>0; i--) + { s += *v1 * *v2; + v1 += d1; + v2 += d2; + } + + return s; +} + + +/* FIND THE PRODUCT OF TWO MATRICES. The matrix elements are stored in + contiguous locations in row-major order. */ + +void matrix_product +( double *m1, /* Left operand */ + double *m2, /* Right operand */ + double *r, /* Place to store result */ + int n, /* Number of rows in result (and left operand) */ + int m, /* Number of columns in result (and right operand) */ + int k /* Number of columns in left operand & rows in right */ +) +{ + int i, j; + + for (i = 0; i=i; j--) + { s = x[j] - inner_product(q,n,p+1,1,n-j-1); + *p = s/d[j]; + q -= n+1; + p -= 1; + } + } + + /* Copy the inverse to the symmetric lower part. */ + + fill_lower_triangle (m, n); + + return 1; +} + + +/* FILL IN LOWER TRIANGLE FROM UPPER TRIANGLE. Sets the elements of + a square matrix below the diagonal to be the symmetric elements above + the diagonal. */ + +void fill_lower_triangle +( double *m, /* Matrix to fill lower triangle from upper triangle */ + int n /* Number of rows and columns in matrix */ +) +{ + double *p, *q; + int i, j; + + for (i = 0; i=0; i--) + { *x = (*b - inner_product (m+n, n, x+xo, xo, (n-1)-i)) / *m; + x -= xo; + b -= bo; + m -= n+1; + } +} + + +/* FIND EIGENVALUES AND EIGENVECTORS BY JACOBI ITERATION. Finds the + eigenvalues and eigenvectors of a symmetric matrix using Jacobi iteration. + The matrix is passed as the first argument, with only the upper triangle + being used. The eigenvalues will appear (in arbitrary order) on the + diagonal of this matrix, while the off-diagonal elements will be set to + near zero. The eigenvectors will be stored as the rows of the second + matrix passed, unless a null pointer is passed. + + The iteration will proceed until the magnitude of the largest off-diagonal + element is no greater than the tolerance value passed. The number of + 2D rotations done to achieve this is returned as the value of this function. + + This procedure tries to keep track of the largest off-diagonal element + in each row/column. The largest element according to this record is + zeroed in the next rotation. The record is not entirely accurate, but + the largest off-diagonal element is guaranteed to be no larger than the + largest of these records (so the record is safe to use for the termination + criterion). +*/ + +int jacobi +( double *m, /* The matrix, in upper triangle */ + double *e, /* Place to store eigenvectors, or null */ + double tol, /* Tolerance ratio */ + int n /* Size of the matrix */ +) +{ + double c, s, u, tmp; + double largest_off; + double lodi, lodj; + double mi, mj; + double ei, ej; + double x; + + double *lod; + int *lk; + + int L, i, j, k, l, t; + int ii, jj, ij; + int lki=0, lkj=0; + + /* Allocate space for recording the largest off-diagonal elements. */ + + lod = (double*)calloc (n, sizeof *lod); + lk = (int*)calloc (n, sizeof *lk); + + if (lod==0 || lk==0) + { fprintf(stderr,"jacobi: Can't allocate space\n"); + exit(1); + } + + /* Initialize the matrix of eigenvectors to the identity. */ + + if (e!=0) + { identity_matrix (e, n); + } + + /* Initialize the records of largest off-diagonal elements. */ + + for (l = 0; llod[l]) + { lod[l] = x; + lk[l] = k; + } + else if (-x>lod[l]) + { lod[l] = -x; + lk[l] = k; + } + k += n; + } + for (j = l+1; jlod[l]) + { lod[l] = x; + lk[l] = k; + } + else if (-x>lod[l]) + { lod[l] = -x; + lk[l] = k; + } + } + } + + /* Do the iterations, one 2D rotation each time around the loop. */ + + for (t = 0; ; t++) + { + /* Find the largest off-diagonal element; set i and j to it's location. */ + + largest_off = 0; + L = 0; + + for (l = 1; llargest_off) + { largest_off = lod[l]; + L = l; + } + } + + i = lk[L]/n; + j = lk[L]%n; + + /* Check whether we are done, according to the tolerance criterion. */ + + if (largest_off<=tol) + { free(lod); + free(lk); + return t; + } + + /* Find the locations of the elements undergoing rotation. */ + + ii = n*i + i; + jj = n*j + j; + + ij = ii + j-i; + + mi = m[ii]; + mj = m[jj]; + + /* Find the sine and cosine of the rotation angle. */ + + if (m[ij]<1e-100 && m[ij]>-1e-100) /* Set specially to avoid overflow */ + { c = 1; + s = 0; + } + else + { u = (mj-mi) / (2*m[ij]); + tmp = u>=0 ? 1/(u+sqrt(1+u*u)) : -1/(-u+sqrt(1+u*u)); + c = 1/sqrt(1+tmp*tmp); + s = tmp*c; + } + + /* Adjust the matrix being diagonalized by this rotation. Also keep + track of the new largest off-diagonal elements for these rows/columns. */ + + lodi = 0; + lodj = 0; + + m[ii] = c*c*mi - 2*c*s*m[ij] + s*s*mj; + m[jj] = s*s*mi + 2*s*c*m[ij] + c*c*mj; + + m[ij] = c*s*(mi-mj) + (c*c-s*s)*m[ij]; + + ii = i; + jj = j; + + for (k = i; k>0; k--) + { mi = m[ii]; + mj = m[jj]; + m[ii] = c*mi - s*mj; + if (m[ii]>lodi) { lodi = m[ii]; lki = ii; } + else if (-m[ii]>lodi) { lodi = -m[ii]; lki = ii; } + m[jj] = c*mj + s*mi; + if (m[jj]>lodj) { lodj = m[jj]; lkj = jj; } + else if (-m[jj]>lodj) { lodj = -m[jj]; lkj = jj; } + ii += n; + jj += n; + + } + + ii += 1; + jj += n; + + for (k = j-i-1; k>0; k--) + { mi = m[ii]; + mj = m[jj]; + m[ii] = c*mi - s*mj; + if (m[ii]>lodi) { lodi = m[ii]; lki = ii; } + else if (-m[ii]>lodi) { lodi = -m[ii]; lki = ii; } + m[jj] = c*mj + s*mi; + if (m[jj]>lodj) { lodj = m[jj]; lkj = jj; } + else if (-m[jj]>lodj) { lodj = -m[jj]; lkj = jj; } + ii += 1; + jj += n; + } + + ii += 1; + jj += 1; + + for (k = n-j-1; k>0; k--) + { mi = m[ii]; + mj = m[jj]; + m[ii] = c*mi - s*mj; + if (m[ii]>lodi) { lodi = m[ii]; lki = ii; } + else if (-m[ii]>lodi) { lodi = -m[ii]; lki = ii; } + m[jj] = c*mj + s*mi; + if (m[jj]>lodj) { lodj = m[jj]; lkj = jj; } + else if (-m[jj]>lodj) { lodj = -m[jj]; lkj = jj; } + ii += 1; + jj += 1; + } + + lod[i] = lodi; + lod[j] = lodj; + lk[i] = lki; + lk[j] = lkj; + + /* Adjust the future eigenvectors by this rotation. */ + + if (e!=0) + { + ii = n*i; + jj = n*j; + + for (k = n; k>0; k--) + { ei = e[ii]; + ej = e[jj]; + e[ii] = c*ei - s*ej; + e[jj] = c*ej + s*ei; + ii += 1; + jj += 1; + } + } + } +} +//#ifdef __cplusplus +//} +//#endif +/*end of neal_matrix.cpp*/ diff --git a/parameter-learning_nd_disc/source code PL/gpref/neal_matrix.h b/parameter-learning_nd_disc/source code PL/gpref/neal_matrix.h new file mode 100755 index 0000000..dd6e32d --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/neal_matrix.h @@ -0,0 +1,22 @@ + + +void identity_matrix (double *, int); + +double squared_norm (double *, int, int); +double inner_product (double *, int, double *, int, int); + +void matrix_product (double *, double *, double *, int, int, int); +double trace_of_product (double *, double *, int); + +int cholesky (double *, int, double *); +int inverse_from_cholesky (double *, double *, double *, int); + +void fill_lower_triangle (double *, int); +void fill_upper_triangle (double *, int); + +void forward_solve (double *, double *, int, double *, int, int); +void backward_solve (double *, double *, int, double *, int, int); + +int jacobi (double *, double *, double, int); + + diff --git a/parameter-learning_nd_disc/source code PL/gpref/pref.h b/parameter-learning_nd_disc/source code PL/gpref/pref.h new file mode 100755 index 0000000..724963e --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/pref.h @@ -0,0 +1,294 @@ +// header file --- ordinal.h + +// Gaussian Processes for Ordinal Regression + +// Chu Wei (C) Copyright 2004 + + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _PREFERENCE_REGRESSION +#define _PREFERENCE_REGRESSION + +#define MINNUM (3) // at least two +#define LENGTH (307200) // maximum value of line length in data file +#define PI (3.141592654) + +//********CHOOSE ONE MODE ONLY**********// +#ifdef _GPREF_EP +#define _PREF_EP +#else +#define _PREF_LP +#endif +//**************************************// + +//#define _PREF_DEBUG +//#define _GPREF_ARD + +typedef enum _Data_Type +{ + PREFERENCE = 6 , + REGRESSION = 3 , + ORDINALREGRESSION = 5 , + MULTICLASS = 4 , + CLASSIFICATION = 1 , + UNKNOWN = 0 , + +} Data_Type ; + +typedef enum _Kernel_Name +{ + GAUSSIAN = 0 , + POLYNOMIAL = 1 , + USERDEFINED = 3 , + LINEAR = 4 , + +} Kernel_Name ; + +typedef struct _Pref_Node +{ + long unsigned int index ; + unsigned long int u ; + unsigned long int v ; + struct _Pref_Node * next ; // point to next node in the list + +} Pref_Node ; + +typedef struct _Pref_List +{ + unsigned long int count ; // total number of pairs + Pref_Node * front ; // point to first node in the list + Pref_Node * rear ; // point to last node in the list + +} Pref_List ; + +typedef struct _Data_Node +{ + long unsigned int index ; // line number in data file loaded + double * point ; // point to one input point + int fold ; // fold label + int serial ; + unsigned int target ; // class label + unsigned int pred_label ; + double pred_func ; + double pred_prob ; // predictive probability + double pred_var ; + + struct _Data_Node * prev ; // point to next node in the list + struct _Data_Node * next ; // point to next node in the list + + double weight ; // contribution for the predictor + // Moment Matching + double epmean ; // individual mean in EP + double epinvvar ; // individual 1/variance in EP + double epamp ; // individual amplitude in EP + double postmean ; // mean in posterior distribution + +} Data_Node ; + +typedef struct _Data_List +{ + Data_Type datatype ; // regression problem or classification + int normalized_input ; // point data_node normalized or not + int normalized_output ; // target data_node normalized or not + + unsigned long int count ; // total number of samples + unsigned long int dimen ; // dimension of input vector + unsigned int classes ; // number of classes + + int kfold ; // for k-fold only + + int * featuretype ; // for userdefined Data_Type + + int * labels ; + int * labelnum ; + + double * weights ; // for linear models + + unsigned int train ; // distinct samples + Pref_List trainpair ; + Pref_List testpair ; + + char * filename ; + + unsigned int i_ymax ; + unsigned int i_ymin ; + double mean ; // mean of output + double deviation ; // deviation of output + double * x_mean ; // mean of input + double * x_devi ; // standard deviation of input + + Data_Node * front ; // point to first node in the list + Data_Node * rear ; // point to last node in the list + +} Data_List ; + +typedef struct _Alphas +{ + double alpha ; + double beta ; + double nu ; + double loomean ; + double loovar ; + double z1 ; + double z2 ; + double hnew ; // new posterior mean + double mnew ; // new individual mean + double pnew ; // new individual variance + double snew ; // new individual amplitude + + double * kernels ; + double * postcov ; + double * p_cache ; // save Pi(x) for CG + + Data_Node * pair ; // point to the corresponding pair + +} Alphas ; + +typedef struct _bfgs_FuncGrad +{ + unsigned int var_number ; + double * x ; + double fx ; + double * gx ; + double norm2gx ; // true norm square |g(x)|^2 + double maskednorm ; // norm |g(x)|^2 of masked gradient + unsigned int iternum ; + +} bfgs_FuncGrad ; + +typedef struct _Pref_Settings +{ + Kernel_Name kernel ; + unsigned int number ; + unsigned int p ; + unsigned int kfoldcv ; + int ardon ; + int cacheall ; + double kappa_o ; + double noisevar ; // noise variance + double kappa_a ; + double * kappa ; // kappa for ARD variables (d) + double kappa_m ; + double * thresholds ; // ordinal threshold (r-1) + double * intervals ; // threshold interval (r-2) + + double regular ; + double time ; + + char * trainfile ; // the name of train data file + char * testfile ; // the name of test data file + + double * invcov ; + + bfgs_FuncGrad * bfgs ; + + struct _Data_List * pairs ; // this is a reference from def_Settings + struct _Alphas * alpha ; // Pointers to Alphas matrix + +} Pref_Settings ; + +#define DEF_KFOLDCV (2) +#define DEF_NORMALIZEINPUT (0)// 1 - YES TRUE ; 0 - NO FALSE +#define DEF_NORMALIZETARGET (0) +#define DEF_CACHEALL (1) +#ifdef _GPREF_ARD +#define DEF_ARDON (1) +#else +#define DEF_ARDON (0) +#endif +#define DEF_KAPPA (1) +#define DEF_NOISEVAR (1) +#define DEF_KERNEL (LINEAR) +#define DEF_KAPPA_M (0) +#define DEF_KAPPA_O (1) +#define DEF_P (2) +#define DEF_JITTER (0.001) +#define DEF_REGULAR (0.01) +#define EPS (0.000001) +#define TOL (0.001) + + + +int Pref_Loadfile ( Data_List * pairs, char * inputfilename ) ; +int Pref_Loadpair ( Pref_List * pref, char * inputfilename ) ; + +Pref_Settings * Create_Pref_Settings(Data_List * list) ; +int Clear_Pref_Settings( Pref_Settings * settings) ; + +int Create_Pref_List(Pref_List * list) ; +int Clear_Pref_List(Pref_List * list) ; + +bfgs_FuncGrad * Create_Bfgs_FuncGrad ( unsigned int number ) ; +int Pref_Bfgs_Settings ( Pref_Settings * settings, bfgs_FuncGrad * funcgrad ) ; +int Bfgs_Pref_Settings ( Pref_Settings * settings, bfgs_FuncGrad * funcgrad ) ; +void Clear_Bfgs_FuncGrad ( bfgs_FuncGrad * funcgrad ) ; + +int lbfgsb_minfunc ( int (* Evaluate_FuncGrad)(void *, bfgs_FuncGrad *), void * , bfgs_FuncGrad * ) ; + +int Pref_Prediction (Pref_Settings * settings) ; +int Dumping_Pref_Settings (Pref_Settings * settings) ; + + +int Compute_EP_Weights (Pref_Settings * settings) ; + +double lerrf(double x) ; +double fromb_t1(int index, Pref_Settings * settings) ; +double fromb_t2(int index, Pref_Settings * settings) ; +double fromb_t3(int index, Pref_Settings * settings) ; +double fromb_t4(int index, Pref_Settings * settings) ; +double fromb_t5(int index, Pref_Settings * settings) ; + +//int Ordinal_EPEM_Evaluate_FuncGrad ( void * pointer, bfgs_FuncGrad * bfgs ) ; +//int Ordinal_EPEM_Training (Pref_Settings * settings) ; + +int Pref_LAPLACE_Training (Pref_Settings * settings) ; +int Pref_MAP_Training (Pref_Settings * settings) ; + +double normal(double x) ; +int Is_Data_Empty ( Data_List * list ) ; +int Create_Data_List ( Data_List * list ) ; +int Clear_Data_List ( Data_List * list ) ; +int Add_Data_List ( Data_List * list, Data_Node * node ) ; + +Data_Node * Create_Data_Node ( long unsigned int index, double * point, int y ) ; + + +Alphas * Create_Alphas (Pref_Settings * list) ; +int Clear_Alphas (Alphas * alpha, Data_List * list) ; + +double Calculate_Covfun( struct _Alphas * ai, struct _Alphas * aj, Pref_Settings * settings ) ; +double Calc_Covfun( double * pi, double * pj, Pref_Settings * settings ) ; + +//int Ordinal_EP_Training (Pref_Settings *) ; + +int Add_Label_Data_List ( Data_List * list, Data_Node * node ) ; +int Clear_Label_Data_List ( Data_List * list ) ; +//int Newton_Soft_Max (Data_List * list) ; + +int Create_Kfold_List (Data_List * list, int KFOLDCV) ; +Data_Node ** Create_Fold_List (Data_List * list, Data_List * train, Data_List * test, int fold) ; +int Clear_Fold_List (Data_List * list, Data_List * train, Data_List * test, Data_Node **) ; + + +int Find_Out_Label (int * labels, int size, int inquiry) ; +int * Test_Soft_Max(Data_List * train, Data_List * test) ; +int Initial_Pcache (Alphas * alpha, Data_List * list) ; + +double normpdf(double x) ; +double normcdf(double ca, double eb) ; +//timing routines +void tstart(void) ; +void tend(void) ; +double tval() ; + +int conjugate_gradient (double * A, double * B, double * x, unsigned int n) ; + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/parameter-learning_nd_disc/source code PL/gpref/pref_predict.c b/parameter-learning_nd_disc/source code PL/gpref/pref_predict.c new file mode 100755 index 0000000..57f2606 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/pref_predict.c @@ -0,0 +1,340 @@ +#include +#include +#include +#include +#include +#include +#include "pref.h" +#include "neal_matrix.h" + +extern double lerrf(double) ; +extern double fromb(double mean, double sig, double eps) ; + +int Pref_Prediction (Pref_Settings * settings) +{ + Pref_Node * pair ; + Data_Node * node ; + double * t1 ; + double * t2 ; + double * lambda ; + double * kcvx ; + double st ; + double zk, hk, n, phi ; + double temp, sigma ; + unsigned int i, j, k, u, v ; + char buf[2048] ; + FILE * fid ; + FILE * fid_guess ; + unsigned int error = 0, abserr = 0 ; + + assert(NULL != settings) ; + + // compute the invcov + if (NULL != settings->invcov) + free(settings->invcov) ; + + settings->invcov = (double*)malloc(settings->pairs->train*settings->pairs->train*sizeof(double)) ; + lambda = (double*)calloc(settings->pairs->train*settings->pairs->train,sizeof(double)) ; + t1 = (double*)malloc(settings->pairs->train*sizeof(double)) ; + t2 = (double*)malloc(settings->pairs->train*sizeof(double)) ; + + // initial Sigma + u=0 ; + for (i=0;ipairs->count;i++) + { + if ((settings->alpha+i)->pair->fold < 0) + { + assert((settings->alpha+i)->pair->serial>0) ; + v=0 ; + for (j=0;jalpha+j)->pair->fold < 0) + { + assert((settings->alpha+j)->pair->serial>0) ; + settings->invcov[u*settings->pairs->train+v] = + Calculate_Covfun(settings->alpha+i,settings->alpha+j,settings) ; + settings->invcov[v*settings->pairs->train+u] = + settings->invcov[u*settings->pairs->train+v] ; + v+=1 ; + } + } + settings->invcov[u*settings->pairs->train+u] = + Calculate_Covfun(settings->alpha+i,settings->alpha+i,settings)-DEF_JITTER ; + u+=1 ; + } + } + assert(u==settings->pairs->train) ; + // traverse training samples + sigma = sqrt(2.0*settings->noisevar) ; + // traverse training samples + pair = settings->pairs->trainpair.front ; + i=0; + while (NULL != pair) + { + u = (settings->alpha+(pair->u-1))->pair->serial - 1 ; + v = (settings->alpha+(pair->v-1))->pair->serial - 1 ; + assert(uu&&upairs->train) ; + assert(vv&&vpairs->train) ; + + zk = (settings->alpha+(pair->u-1))->pair->postmean + - (settings->alpha+(pair->v-1))->pair->postmean ; // f(u_k)-f(v_k) + zk = zk / sigma ; + n = normpdf(zk) ; + phi = 0.5 + normcdf(0,zk) ; + hk = ((n*n)/(phi*phi)+zk*n/phi)/sigma/sigma ; + // labmda matrix + lambda[(u)*settings->pairs->train+(u)] += hk ; + lambda[(v)*settings->pairs->train+(v)] += hk ; + lambda[(u)*settings->pairs->train+(v)] -= hk ; + lambda[(v)*settings->pairs->train+(u)] -= hk ; + i+=1 ; + pair = pair->next ; + } + assert(i==settings->pairs->trainpair.count) ; + for (i=0;ipairs->train;i++) + { + lambda[i*settings->pairs->train+i] += DEF_JITTER ; + for (j=0;jpairs->train;j++) + assert(lambda[i*settings->pairs->train+j]==lambda[j*settings->pairs->train+i]) ; + } + if (0 == cholesky(lambda,settings->pairs->train,&temp)) + printf("1Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + if (0 == inverse_from_cholesky(lambda, t1, t2, settings->pairs->train) ) + printf("2Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + + for (i=0;ipairs->train;i++) + { + for (j=0;jinvcov[i*settings->pairs->train+j] += lambda[i*settings->pairs->train+j] ; + settings->invcov[j*settings->pairs->train+i] = settings->invcov[i*settings->pairs->train+j] ; + } + settings->invcov[i*settings->pairs->train+i] += lambda[i*settings->pairs->train+i] ; + } + + if (0 == cholesky(settings->invcov,settings->pairs->train,&temp)) + printf("3Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + if (0 == inverse_from_cholesky(settings->invcov, t1, t2, settings->pairs->train) ) + printf("4Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + + // compute predictions + node = settings->pairs->front ; + while (NULL != node) + { + // for each point + node->pred_func = 0 ; + // cache kcx + kcvx = (double*)malloc(settings->pairs->train*sizeof(double)) ; + u=0 ; + for (i=0;ipairs->count;i++) + { + if ((settings->alpha+i)->pair->fold<0) + { + kcvx[u] = Calc_Covfun((settings->alpha+i)->pair->point,node->point,settings) ; + node->pred_func += (settings->alpha+i)->pair->weight*kcvx[u]; + u += 1 ; + } + else + assert((settings->alpha+i)->pair->weight==0) ; + } + assert(u==settings->pairs->train) ; + node->pred_var = Calc_Covfun(node->point,node->point,settings) ; ; + // compute sigmax + for (i=0;ipairs->train;i++) + { + for (k=0;kpred_var -= 2.0*kcvx[i]*kcvx[k]*settings->invcov[i*settings->pairs->train+k] ; + node->pred_var -= kcvx[i]*kcvx[i]*settings->invcov[i*settings->pairs->train+i] ; + } + //assert(node->pred_var >= 0) ; + if (node->pred_var <= 0) + printf("warning: negative variance in predictive distribution %f.\n", node->pred_var) ; + free(kcvx) ; + node=node->next ; + } + + // save the function values + sprintf(buf,"%s.func",settings->trainfile) ; + fid = fopen(buf,"w+t") ; + if (NULL != fid) + { + node = settings->pairs->front ; + while (NULL != node) + { + // for each new + fprintf(fid, "%f\n",node->pred_func) ; + node=node->next ; + } + fclose(fid) ; + } + + // save the variance values + sprintf(buf,"%s.conf",settings->trainfile) ; + fid = fopen(buf,"w+t") ; + if (NULL != fid) + { + node = settings->pairs->front ; + while (NULL != node) + { + // for each new + fprintf(fid, "%f\n", node->pred_var) ; + node=node->next ; + } + fclose(fid) ; + } + + // loading test data + Create_Pref_List (&(settings->pairs->testpair)) ; + Pref_Loadpair (&(settings->pairs->testpair), settings->testfile) ; + + // compute predictions + sprintf(buf,"%s.prob",settings->testfile) ; + fid = fopen(buf,"w+t") ; + sprintf(buf,"%s.guess",settings->testfile) ; + fid_guess = fopen(buf,"w+t") ; + pair = settings->pairs->testpair.front ; + while (NULL != pair) + { + // compute predictive probability + zk = (settings->alpha+(pair->u-1))->pair->pred_func + - (settings->alpha+(pair->v-1))->pair->pred_func ; + hk = 2.0*settings->noisevar + +(settings->alpha+(pair->u-1))->pair->pred_var + +(settings->alpha+(pair->v-1))->pair->pred_var ; + + // covariance + st = 0 ; + /*st = Calc_Covfun((settings->alpha+(pair->u-1))->pair->point,(settings->alpha+(pair->v-1))->pair->point,settings) ; + u=0 ; + for (i=0;ipairs->count;i++) + { + if ((settings->alpha+i)->pair->fold<0) + { + v = 0 ; + for (j=0;jpairs->count;j++) + { + if ((settings->alpha+j)->pair->fold<0) + { + st -= settings->invcov[u*settings->pairs->train+v] + *Calc_Covfun((settings->alpha+i)->pair->point,(settings->alpha+(pair->u-1))->pair->point,settings) + *Calc_Covfun((settings->alpha+j)->pair->point,(settings->alpha+(pair->v-1))->pair->point,settings) ; + v+=1 ; + } + else + assert((settings->alpha+j)->pair->weight==0) ; + } + u+=1 ; + } + }*/ + // the covriance + assert((hk-2.0*st)>0) ; + zk = zk/sqrt(hk-2.0*st) ; + phi = 0.5 + normcdf(0,zk) ; + if (zk<0) + { + error += 1 ; + abserr += 1 ; + } + if (NULL != fid) + fprintf(fid,"%f\n",phi) ; + if (NULL != fid_guess) + { + fprintf(fid_guess,"%d %f %d\n",phi>0.5?+1:-1,phi,1) ; + fprintf(fid_guess,"%d %f %d\n",phi<0.5?+1:-1,1.0-phi,-1) ; + } + pair=pair->next ; + } + if (NULL != fid) + fclose(fid) ; + if (NULL != fid_guess) + fclose(fid_guess) ; + + if (settings->pairs->deviation > 0) + printf("Testing error number %u with absolute error %u.\n", error, abserr) ; + + fid = fopen ("gpref_lap_batch.log","a+t") ; + + if (NULL != fid) + { + fprintf(fid,"%u %u %f %f\n", error, abserr, (double)abserr/(double)(settings->pairs->testpair.count), settings->time) ; + fclose(fid) ; + } + // save log files + free(t1) ; + free(t2) ; + return 0 ; +} + +int Dumping_Pref_Settings (Pref_Settings * settings) +{ + FILE * fid ; + char buf[2048] ; + unsigned int i, j ; + double temp ; + + if (NULL == settings) + return 1 ; + + sprintf(buf,"%s.log",settings->pairs->filename) ; + fid = fopen (buf,"w+t") ; + if (NULL != fid) + { + // add testing information + sprintf(buf, "final settings\n") ; + fwrite (buf, sizeof(char), strchr(buf,'\0')-buf, fid) ; + fprintf(fid,"kappa_o = %f\n",settings->kappa_o) ; + if (0 == settings->ardon) + fprintf(fid,"kappa = %f\n",settings->kappa_a) ; + else + { + for (i=0;ipairs->dimen;i++) + fprintf(fid,"kappa%d = %f\n", i+1, settings->kappa[i]) ; + } + fprintf(fid,"kappa_m = %f\n", settings->kappa_m) ; + fprintf(fid,"noise variance = %f\n", settings->noisevar) ; + for (i=0;ipairs->classes-1;i++) + fprintf(fid,"threshold%d = %f\n", i+1, settings->thresholds[i]) ; + fclose(fid) ; + } + if (1==settings->ardon) + { + sprintf(buf,"%s.ard",settings->pairs->filename) ; + fid = fopen (buf,"w+t") ; + if (NULL != fid) + { + // add testing information + for (i=0;ipairs->dimen;i++) + fprintf(fid,"%.10f\n", settings->kappa[i]) ; + } + fclose(fid) ; + } + if (LINEAR==settings->kernel) + { + sprintf(buf,"%s.lw",settings->pairs->filename) ; + fid = fopen (buf,"w+t") ; + if (NULL != fid) + { + // add testing information + for (i=0;ipairs->dimen;i++) + { + temp = 0 ; + for (j=0;jpairs->count;j++) + { + if ((settings->alpha+j)->pair->fold < 0) + { + temp += (settings->alpha+j)->pair->weight + *(settings->alpha+j)->pair->point[i] ; + } + else + assert((settings->alpha+j)->pair->weight==0) ; + } + fprintf(fid,"%.10f\n", temp) ; + } + } + fclose(fid) ; + } + return 0 ; +} + +// end of gpor_predict.cpp + diff --git a/parameter-learning_nd_disc/source code PL/gpref/prefmap.c b/parameter-learning_nd_disc/source code PL/gpref/prefmap.c new file mode 100755 index 0000000..8ac9faf --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/prefmap.c @@ -0,0 +1,526 @@ +#include +#include +#include +#include +#include +#include +#include "pref.h" +#include "neal_matrix.h" + +#define UPPERFUNC (10.0) + +int Compute_MAP_Weights (Pref_Settings * settings) +{ + double sigma, z, n, phi ; + unsigned int i,u,v ; + Pref_Node * node ; +#ifdef _PREF_DEBUG + unsigned int j ; + double * f ; + double * w ; + double * t ; + double error = 0 ; +#endif + + assert(NULL!=settings) ; + assert(settings->noisevar>0) ; + + sigma = sqrt(2.0*settings->noisevar) ; // sigma^\star + + i=0 ; + node = settings->pairs->trainpair.front ; + while (NULL != node) + { + // who is old function + // update alpha_old + u = (settings->alpha+(node->u-1))->pair->serial ; + v = (settings->alpha+(node->v-1))->pair->serial ; + assert(u<=node->u&&u<=settings->pairs->train) ; + assert(v<=node->v&&v<=settings->pairs->train) ; + z = (settings->alpha+(node->u-1))->pair->postmean + - (settings->alpha+(node->v-1))->pair->postmean ; // f(u_k)-f(v_k) + z = z / sigma ; + n = normpdf(z) ; + phi = 0.5 + normcdf(0,z) ; + (settings->alpha+(node->u-1))->pair->weight += n/phi/sigma ; + (settings->alpha+(node->v-1))->pair->weight -= n/phi/sigma ; + node = node -> next ; + i+=1 ; + } + assert(i==settings->pairs->trainpair.count) ; +#ifdef _PREF_DEBUG + for (i=0;ipairs->count;i++) + printf("w(%d)=%.3f\n",i,(settings->alpha+i)->pair->weight) ; + f = (double *)malloc(settings->pairs->train*sizeof(double)) ; + w = (double *)malloc(settings->pairs->train*sizeof(double)) ; + t = (double *)malloc(settings->pairs->train*sizeof(double)) ; + if (NULL != settings->invcov) + free (settings->invcov) ; + settings->invcov = (double *)malloc(settings->pairs->train*settings->pairs->train*sizeof(double)) ; + u=0 ; + for (i=0;ipairs->count;i++) + { + if ((settings->alpha+i)->pair->fold < 0) + { + assert((settings->alpha+i)->pair->serial>0) ; + v=0 ; + for (j=0;jalpha+j)->pair->fold < 0) + { + settings->invcov[u*settings->pairs->train+v] = + Calculate_Covfun(settings->alpha+i,settings->alpha+j,settings) ; + settings->invcov[v*settings->pairs->train+u] = + settings->invcov[u*settings->pairs->train+v] ; + v+=1 ; + } + } + f[u] = (settings->alpha+i)->pair->postmean ; // current f + w[u] = (settings->alpha+i)->pair->weight ; + settings->invcov[u*settings->pairs->train+u] = Calculate_Covfun(settings->alpha+i,settings->alpha+i,settings) ; + u+=1 ; + } + } + assert(u==settings->pairs->train) ; + + for (i=0;ipairs->train;i++) + printf("w(%d)=%.3f\n",i,w[i]) ; + + + for (i=0;ipairs->train;i++) + { + t[i] = 0 ; + for (j=0;jinvcov[i*settings->pairs->train+j]*w[j] ; + t[j] += settings->invcov[j*settings->pairs->train+i]*w[i] ; + } + t[i] += settings->invcov[i*settings->pairs->train+i]*w[i] ; + } + for (i=0;ipairs->train;i++) + { + error += fabs(f[i]-t[i]) ; + } + printf("distance : %f.\n", error) ; + free(t) ; + free(w) ; + free(f) ; +#endif + return 0 ; +} + +double Pref_MAP_Update(Pref_Settings * settings) +{ + double error = 0 ; + //unsigned int cnt = 0 ; + double sigma ; + double * f ; + double * a ; + double * lambda ; + unsigned int i, j, u=0, v=0 ; + double z1, phi1, n1 ; + //double func = 0 ; + double step = 1.0 ; + Pref_Node * node ; + double * t1 ; + double * Q ; + double * df ; + double err ; + + if (NULL == settings) + { + printf("Input pointer is NULL.\n") ; + return 0 ; + } + if (settings->noisevar<=0) + return 0 ; + + sigma = sqrt(2.0*settings->noisevar) ; // sigma^\star + + Q = (double *)malloc(settings->pairs->train*settings->pairs->train*sizeof(double)) ; // Sigma + lambda = (double *)calloc(settings->pairs->train*settings->pairs->train,sizeof(double)) ; // Sigma + f = (double *)malloc(settings->pairs->train*sizeof(double)) ; + t1 = (double *)malloc(settings->pairs->train*sizeof(double)) ; + df = (double *)malloc(settings->pairs->train*sizeof(double)) ; + a = (double *)calloc(settings->pairs->train,sizeof(double)) ; + + for (i=0;ipairs->count;i++) + { + (settings->alpha+i)->pair->weight = 0 ; // first order + if ((settings->alpha+i)->pair->fold < 0) + { + assert((settings->alpha+i)->pair->serial>0) ; + f[u] = (settings->alpha+i)->pair->postmean ; // current f + u+=1 ; + } + } + assert(u==settings->pairs->train) ; + + + /*for (i=0;ipairs->train;i++) + { + for (j=0;jpairs->train;j++) + printf("%.2f ", settings->invcov[i*settings->pairs->train+j]) ; + printf("\n") ; + }*/ + + // prepare w_i + i=0 ; + node = settings->pairs->trainpair.front ; + while (NULL != node) + { + // who is old function + // update alpha_old + u = (settings->alpha+(node->u-1))->pair->serial ; + v = (settings->alpha+(node->v-1))->pair->serial ; + assert(u<=node->u&&u<=settings->pairs->train) ; + assert(v<=node->v&&v<=settings->pairs->train) ; + z1 = f[u-1] - f[v-1] ; // f(u_k)-f(v_k) + z1 = z1 / sigma ; + n1 = normpdf(z1) ; + phi1 = 0.5 + normcdf(0,z1) ; + //(settings->alpha+(u-1))->pair->weight += n1/phi1/sigma ; + //(settings->alpha+(v-1))->pair->weight += n1/phi1/sigma ; + a[u-1]-=n1/phi1/sigma ; + a[v-1]+=n1/phi1/sigma ; + lambda[(u-1)*settings->pairs->train+(u-1)] += + ( (n1*n1)/(phi1*phi1)+z1*n1/phi1)/sigma/sigma ; + lambda[(v-1)*settings->pairs->train+(v-1)] += + ( (n1*n1)/(phi1*phi1)+z1*n1/phi1)/sigma/sigma ; + lambda[(u-1)*settings->pairs->train+(v-1)] -= + ( (n1*n1)/(phi1*phi1)+z1*n1/phi1)/sigma/sigma ; + lambda[(v-1)*settings->pairs->train+(u-1)] -= + ( (n1*n1)/(phi1*phi1)+z1*n1/phi1)/sigma/sigma ; + + + /*(settings->alpha+i)->alpha = (settings->alpha+i)->pair->epamp ; + (settings->alpha+i)->pair->epmean = (settings->alpha+i)->pair->postmean ; + + n1 = 0 ; + n2 = 0 ; + z1 = 0 ; + z2 = 0 ; + phi1 = 1 ; + phi2 = 0 ; + + if (1 == (settings->alpha+i)->pair->target) + { + z1 = (settings->thresholds[(settings->alpha+i)->pair->target-1]-(settings->alpha+i)->pair->epmean)/sigma ; + n1 = normpdf(z1) ; + phi1 = 0.5 + normcdf(0,z1) ; + dphi = phi1-phi2 ; + } + else if (settings->pairs->classes == (settings->alpha+i)->pair->target) + { + z2 = (settings->thresholds[(settings->alpha+i)->pair->target-2]-(settings->alpha+i)->pair->epmean)/sigma ; + n2 = normpdf(z2) ; + phi2 = 0.5 + normcdf(0,z2) ; + dphi = phi1-phi2 ; + } + else + { + z1 = (settings->thresholds[(settings->alpha+i)->pair->target-1]-(settings->alpha+i)->pair->epmean)/sigma ; + z2 = (settings->thresholds[(settings->alpha+i)->pair->target-2]-(settings->alpha+i)->pair->epmean)/sigma ; + n1 = normpdf(z1) ; + n2 = normpdf(z2) ; + dphi = normcdf(z2,z1); + } + + if (dphialpha+i)->pair->target) + { + (settings->alpha+i)->pair->weight = -z1/sigma ; + (settings->alpha+i)->pair->epinvvar = 1/sigma/sigma ; + } + else if (settings->pairs->classes == (settings->alpha+i)->pair->target) + { + (settings->alpha+i)->pair->weight = z2/sigma ; + (settings->alpha+i)->pair->epinvvar = 1/sigma/sigma ; + } + else + { + if ((n1-n2)>=0) + { + (settings->alpha+i)->pair->weight = -(z1*exp(-0.5*z1*z1+0.5*z2*z2)-z2)/(exp(-0.5*z1*z1+0.5*z2*z2)-1.0)/sigma ; + (settings->alpha+i)->pair->epinvvar = 1/sigma/sigma ; + //(settings->alpha+i)->pair->epinvvar = 1/sigma/sigma + // + (settings->alpha+i)->pair->weight*(settings->alpha+i)->pair->weight + // - (z1*z1*exp(-0.5*z1*z1+0.5*z2*z2)-z2*z2)/(exp(-0.5*z1*z1+0.5*z2*z2)-1.0)/sigma/sigma ; + } + else + { + //printf("n1 < n2 ;\n") ; + (settings->alpha+i)->pair->weight = 0 ; + (settings->alpha+i)->pair->epmean = 0 ; + (settings->alpha+i)->pair->postmean = 0 ; + (settings->alpha+i)->pair->epinvvar = 1/sigma/sigma ; + } + } +#ifdef _ORDINAL_DEBUG + //printf("%u approximation, w=%f, p=%f\n",i,(settings->alpha+i)->pair->weight,(settings->alpha+i)->pair->epinvvar) ; +#endif + } + else + { + (settings->alpha+i)->pair->weight = (n1-n2)/(dphi)/sigma ; + (settings->alpha+i)->pair->epinvvar = (settings->alpha+i)->pair->weight*(settings->alpha+i)->pair->weight + + (z1*n1-z2*n2)/(dphi)/sigma/sigma ; + // update func + func -= log(dphi) ; + } + + (settings->alpha+i)->pair->weight = -(settings->alpha+i)->pair->weight ; + + if ((settings->alpha+i)->pair->epinvvar>1.0/sigma/sigma) + { + //printf("error : %u, %f\n", i, (settings->alpha+i)->pair->epinvvar) ; + (settings->alpha+i)->pair->epinvvar = 1.0 - EPS*EPS ; + } + + if ((settings->alpha+i)->pair->epinvvar<0) + { + //printf("error : %u, %f\n", i, (settings->alpha+i)->pair->epinvvar) ; + (settings->alpha+i)->pair->epinvvar = EPS*EPS ; + }*/ + node = node -> next ; + i+=1 ; + } + assert(i==settings->pairs->trainpair.count) ; + + for (i=0;ipairs->train;i++) + { + t1[i] = 0 ; + for (j=0;jinvcov[i*settings->pairs->train+j]*f[j] ; + t1[j] += settings->invcov[j*settings->pairs->train+i]*f[i] ; + } + t1[i] += settings->invcov[i*settings->pairs->train+i]*f[i] ; + } + for (i=0;ipairs->train;i++) + { + a[i] += t1[i] ; + //printf("delta a(%d)=%f\n",i,a[i]) ; + } + + // Sigma*Lambda + for (i=0;ipairs->train;i++) + { + for (j=0;jpairs->train+j] = settings->invcov[i*settings->pairs->train+j] + lambda[i*settings->pairs->train+j] ; + Q[j*settings->pairs->train+i] = Q[i*settings->pairs->train+j] ; + } + Q[i*settings->pairs->train+i] = settings->invcov[i*settings->pairs->train+i] + lambda[i*settings->pairs->train+i] ; + } + + conjugate_gradient( Q, a, df, settings->pairs->train ) ; + +/* + if (0 == cholesky(settings->invcov,settings->pairs->train,&temp)) + printf("Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + if (0 == inverse_from_cholesky(settings->invcov, t1, t2, settings->pairs->train) ) + printf("Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + + for (i=0;ipairs->train;i++) + { + t1[i] = 0 ; + for (j=0;jinvcov[i*settings->pairs->train+j]*a[j] ; + t1[j] += settings->invcov[j*settings->pairs->train+i]*a[i] ; + } + t1[i] += settings->invcov[i*settings->pairs->train+i]*a[i] ; + } +*/ + err = 0 ; + for (i=0;ipairs->train;i++) + err += df[i] * df[i] ; + + if (err/(double)settings->pairs->train>1.0) + step = (double)settings->pairs->train / err ; + + j=0 ; + for (i=0;ipairs->count;i++) + { + if ((settings->alpha+i)->pair->fold < 0) + { + + (settings->alpha+i)->pair->postmean -= step*df[j] ; + //printf("delta f(%d)=%f\n",i, t1[j]) ; + /*if (fabs((settings->alpha+j)->pair->postmean)>UPPERFUNC) + { +//#ifdef _ORDINAL_DEBUG + printf("%u - new %f --- old %f ---- w %f \n",i, (settings->alpha+j)->pair->postmean,(settings->alpha+j)->pair->epmean,(settings->alpha+j)->pair->weight) ; +//#endif + //step = (UPPERFUNC-fabs((settings->alpha+i)->pair->epmean))/fabs(t1[i]) ; + (settings->alpha+j)->pair->postmean = UPPERFUNC ; + }*/ + if (errorpairs->count;i++) + { + (settings->alpha+i)->pair->weight = 0 ; // first order + if ((settings->alpha+i)->pair->fold < 0) + { + assert((settings->alpha+i)->pair->serial>0) ; + f[u] = (settings->alpha+i)->pair->postmean ; // current f + u+=1 ; + } + } + assert(u==settings->pairs->train) ; + i=0 ; + node = settings->pairs->trainpair.front ; + while (NULL != node) + { + // who is old function + // update alpha_old + u = (settings->alpha+(node->u-1))->pair->serial ; + v = (settings->alpha+(node->v-1))->pair->serial ; + assert(u<=node->u&&u<=settings->pairs->train) ; + assert(v<=node->v&&v<=settings->pairs->train) ; + z1 = f[u-1] - f[v-1] ; // f(u_k)-f(v_k) + z1 = z1 / sigma ; + n1 = normpdf(z1) ; + phi1 = 0.5 + normcdf(0,z1) ; + func -= log(phi1) ; + node = node -> next ; + } + for (i=0;ipairs->train;i++) + { + for (j=0;jinvcov[i*settings->pairs->train+j] * f[i] * f[j] ; + } + func += 0.5 * settings->invcov[i*settings->pairs->train+i] * f[i] * f[i] ; + } + printf("FUNCTIONAL : %f \n", func) ; +#endif + + free (df) ; + free (Q) ; + free (t1) ; + free (a) ; + free (f) ; + free (lambda) ; + return error ; +} + +int Pref_MAP_Training (Pref_Settings * settings) +{ + double error ; + int index = 0 ; + double * t1 ; + double * t2 ; + unsigned int i, j, u=0, v=0 ; + double temp ; + + if (NULL == settings) + return 0 ; + + // may refresh ALPHAS here + if (NULL != settings->alpha) + Clear_Alphas(settings->alpha, settings->pairs) ; + settings->alpha = Create_Alphas (settings) ; + if (NULL == settings->alpha) + { + printf("fail to create ALPHAs.\n") ; + exit(1) ; + } + +#ifdef _ORDINAL_DEBUG + printf("Current Settings: \n") ; + printf("Noise Variance: %.3f\n",settings->noisevar) ; + printf("Kappa_O: %.3f\n",settings->kappa_o) ; + if (0==settings->ardon) + printf("Kernel: %.3f\n",settings->kappa_a) ; + else + { + printf("Kernel:\n") ; + for (i=0;ipairs->dimen;i++) + printf("%u --- %.3f:\n", i, settings->kappa[i]) ; + } +#endif + + // intialize function + for (i=0;ipairs->count;i++) + (settings->alpha+i)->pair->postmean = 0 ; + // initialize the inverse matrix + t1 = (double *)malloc(settings->pairs->train*sizeof(double)) ; + t2 = (double *)malloc(settings->pairs->train*sizeof(double)) ; + if (NULL != settings->invcov) + free (settings->invcov) ; + settings->invcov = (double *)malloc(settings->pairs->train*settings->pairs->train*sizeof(double)) ; // Sigma + for (i=0;ipairs->count;i++) + { + if ((settings->alpha+i)->pair->fold < 0) + { + assert((settings->alpha+i)->pair->serial>0) ; + v=0 ; + for (j=0;jalpha+j)->pair->fold < 0) + { + settings->invcov[u*settings->pairs->train+v] = + Calculate_Covfun(settings->alpha+i,settings->alpha+j,settings) ; + settings->invcov[v*settings->pairs->train+u] = + settings->invcov[u*settings->pairs->train+v] ; + v+=1 ; + } + } + settings->invcov[u*settings->pairs->train+u] = Calculate_Covfun(settings->alpha+i,settings->alpha+i,settings) ; + u+=1 ; + } + } + assert(u==settings->pairs->train) ; + if (0 == cholesky(settings->invcov,settings->pairs->train,&temp)) + printf("Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + if (0 == inverse_from_cholesky(settings->invcov, t1, t2, settings->pairs->train) ) + printf("Fatal Error: Sigma+1/Pi is not positive definite.\n") ; + free(t1) ; + free(t2) ; + + do + { + error = Pref_MAP_Update(settings) ; // clear sign + index += 1 ; +#ifdef _ORDINAL_DEBUG + printf("Loop %d --- %f\n", index, error) ; +#endif + } + while (error>TOL*TOL&&index<100) ; + + if (1 == Compute_MAP_Weights (settings)) + return 1 ; + +#ifdef _ORDINAL_DEBUG + /*for (index=0;index<(int)settings->pairs->count;index++) + printf("%u --- post m %.3f - weight %.3f -alpha %.3f \n", + (settings->alpha+index)->pair->target, + (settings->alpha+index)->pair->postmean, + (settings->alpha+index)->pair->weight, + (settings->alpha+index)->alpha) ;*/ +#endif + return 0 ; +} + + + diff --git a/parameter-learning_nd_disc/source code PL/gpref/settings.c b/parameter-learning_nd_disc/source code PL/gpref/settings.c new file mode 100755 index 0000000..81dae1f --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/settings.c @@ -0,0 +1,166 @@ +#include +#include +#include +#include +#include "pref.h" + +Pref_Settings * Create_Pref_Settings(Data_List * list) +{ + Pref_Settings * settings = NULL ; + char buf[2048] ; + char * pstr ; + int result ; + FILE * fid ; + unsigned int sz ; + + if (NULL == list) + return NULL ; + settings = (Pref_Settings *) malloc(sizeof(Pref_Settings)) ; + if ( NULL != settings ) + { + settings->kernel = DEF_KERNEL ; + settings->pairs = list ; + settings->cacheall = DEF_CACHEALL ; + settings->ardon = DEF_ARDON ; + //settings->kappa_a = DEF_KAPPA ; +#ifdef _PREF_EP + settings->kappa_a = 1.0/(list->dimen) ; +#else + settings->kappa_a = 1.0/sqrt(list->dimen) ; +#endif + settings->kappa_o = DEF_KAPPA_O ;//* list->classes ; + settings->kappa_m = DEF_KAPPA_M ;//+list->classes ; + settings->kappa = NULL ; + settings->noisevar = DEF_NOISEVAR ; + settings->p = DEF_P ; + settings->kfoldcv = DEF_KFOLDCV ; + settings->invcov = NULL ; + settings->alpha = NULL ; + settings->regular = DEF_REGULAR ; + settings->time = 0 ; + // create testing file name + pstr = strstr(list->filename, "samples") ; + if (NULL == pstr) + { + printf("The input file name should contain the string samples.\n") ; + exit(1) ; + } + else + { + result = abs( list->filename - pstr ) ; + strncpy (buf, list->filename, result ) ; + buf[result] = '\0' ; + strcat(buf, "train") ; + strcat (buf, pstr+7) ; + settings->trainfile = strdup(buf) ; + + result = abs( list->filename - pstr ) ; + strncpy (buf, list->filename, result ) ; + buf[result] = '\0' ; + strcat(buf, "test") ; + strcat (buf, pstr+7) ; + settings->testfile = strdup(buf) ; + } + // ard + if (1 == settings->ardon) + { + settings->kappa = (double*) malloc(list->dimen*sizeof(double)) ; + if (NULL == settings->kappa) + { + printf("fail to malloc for ard.\n"); + exit(1); + } + strcpy(buf,list->filename) ; + strcat( buf,".ard") ; + fid = fopen(buf,"r+t") ; + if (NULL != fid) + { + printf("Loading the initial ARD values in %s ...",buf) ; + sz = 0 ; + while (!feof(fid) && NULL!=fgets(buf,1024,fid) ) + { + if (strlen(buf)>1) + { + if (sz>=list->dimen) + { + printf("Warning : ARD file is too long.\n") ; + sz = list->dimen-1 ; + } + settings->kappa[sz] = atof(buf) ; + sz += 1 ; + } + else + printf("Warning : blank line in ARD file.\n") ; + } + if (sz!=list->dimen) + { + //default 0 + for (result=0;result<(int)list->dimen;result++) + settings->kappa[result] = 1.0/sqrt((double)list->dimen) ; + printf(" RESET as default.\n") ; + } + else + printf(" done.\n") ; + fclose(fid) ; + } + else + { + for (result=0;result<(int)list->dimen;result++) + settings->kappa[result] = settings->kappa_a ; + } + settings->number = settings->pairs->classes + settings->pairs->dimen ; + printf("ARD kernel is used.\n") ; + } + else + settings->number = 1 + settings->pairs->classes ; //(kappa_o) & kappa_a + + // intervals&thresholds + settings->intervals = NULL ; + settings->thresholds = NULL ; + /*settings->intervals = (double*) calloc((list->classes-1),sizeof(double)) ; + settings->thresholds = (double*) calloc((list->classes-1),sizeof(double)) ; + if (NULL == settings->intervals || NULL == settings->thresholds) + { + printf("fail to malloc for intervals and thresholds.\n") ; + exit(1) ; + } + settings->thresholds[0]=-settings->kappa_o/2.0+settings->kappa_o*(double)list->labelnum[0]/((double)list->count) ; + for (result=1;result<(int)list->classes-1;result++) + settings->intervals[result] = settings->kappa_o*(double)list->labelnum[result]/((double)list->count) ; + for (result=1;result<(int)list->classes-1;result++) + settings->thresholds[result] = settings->thresholds[result-1] + settings->intervals[result] ; + */ + //Alpha + //settings->alpha = Create_Alphas (settings) ; + //if (NULL == settings->alpha) + //{ + // printf("fail to create ALPHAs.\n") ; + // exit(1) ; + //} + } + return settings ; +} + +int Clear_Pref_Settings( Pref_Settings * settings) +{ + if (NULL == settings) + return 0 ; + if (NULL != settings->testfile) + free(settings->testfile) ; + if (NULL != settings->trainfile) + free(settings->trainfile) ; + if (NULL != settings->alpha) + Clear_Alphas(settings->alpha, settings->pairs) ; + if (NULL != settings->kappa) + free(settings->kappa) ; + if (NULL != settings->thresholds) + free(settings->thresholds) ; + if (NULL != settings->intervals ) + free(settings->intervals) ; + if (NULL != settings->invcov) + free(settings->invcov) ; + Clear_Bfgs_FuncGrad(settings->bfgs) ; + free(settings) ; + return 0 ; +} + diff --git a/parameter-learning_nd_disc/source code PL/gpref/smo_kernels.c b/parameter-learning_nd_disc/source code PL/gpref/smo_kernels.c new file mode 100755 index 0000000..3fcb9c0 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/smo_kernels.c @@ -0,0 +1,167 @@ +/*******************************************************************************\ + + smo_kernel.c in Sequential Minimal Optimization ver2.0 + + calculates the Kernel. + + Chu Wei Copyright(C) National Univeristy of Singapore + Create on Jan. 16 2000 at Control Lab of Mechanical Engineering + Update on Aug. 23 2001 + +\*******************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pref.h" + +double Calc_Kernel( double * pi, double * pj, Pref_Settings * settings ) +{ + long unsigned int dimen = 0 ; + long unsigned int dimension = 0 ; + double kernel = 0 ; + + if ( NULL == pi || NULL == pj || NULL == settings ) + return kernel ; + + if ( 1 == settings->ardon ) + if (NULL == settings->kappa) + return kernel ; + + dimension = settings->pairs->dimen ; + + if ( POLYNOMIAL == settings->kernel ) + { + if ( 1 == settings->ardon ) + { + for ( dimen = 0; dimen < dimension; dimen ++ ) + if ( pi[dimen]!=0 && pj[dimen]!=0 ) + kernel = kernel + settings->kappa[dimen] * pi[dimen] * pj[dimen] ; + } + else + { + for ( dimen = 0; dimen < dimension; dimen ++ ) + if ( pi[dimen]!=0 && pj[dimen]!=0 ) + kernel = kernel + settings->kappa_a * pi[dimen] * pj[dimen] ; + } + if ((double) settings->p > 1.0) + kernel = pow( (kernel), (double) settings->p ) ; + else + kernel = (kernel) ; + } + else if ( LINEAR == settings->kernel ) + { + if ( 1 == settings->ardon ) + { + for ( dimen = 0; dimen < dimension; dimen ++ ) + if ( pi[dimen]!=0 && pj[dimen]!=0 ) + kernel = kernel + settings->kappa[dimen] * pi[dimen] * pj[dimen] ; + } + else + { + for ( dimen = 0; dimen < dimension; dimen ++ ) + if ( pi[dimen]!=0 && pj[dimen]!=0 ) + kernel = kernel + settings->kappa_a * pi[dimen] * pj[dimen] ; + } + kernel = settings->kappa_o * kernel ; + } + else if ( GAUSSIAN == settings->kernel ) + { + if ( 1 == settings->ardon ) + { + for ( dimen = 0; dimen < dimension; dimen ++ ) + //if ( pi[dimen]!=pj[dimen] ) + kernel = kernel + settings->kappa[dimen] * ( pi[dimen] - pj[dimen] ) * ( pi[dimen] - pj[dimen] ) ; + } + else + { + for ( dimen = 0; dimen < dimension; dimen ++ ) + //if ( pi[dimen]!=pj[dimen] ) + kernel = kernel + settings->kappa_a * ( pi[dimen] - pj[dimen] ) * ( pi[dimen] - pj[dimen] ) ; + } + kernel = settings->kappa_o * exp ( - kernel/2.0/settings->pairs->dimen ) ; + } + else if ( USERDEFINED == settings->kernel ) + { + if ( 1 == settings->ardon ) + { + for ( dimen = 0; dimen < dimension; dimen ++ ) + { + if ( 0 == settings->pairs->featuretype[dimen] ) + kernel = kernel + settings->kappa[dimen] * ( pi[dimen] - pj[dimen] )*( pi[dimen] - pj[dimen] ) ; + else if ( pi[dimen] != pj[dimen] ) + kernel = kernel + settings->kappa[dimen] * 1.0 ; + } + } + else + { + for ( dimen = 0; dimen < dimension; dimen ++ ) + { + if ( 0 == settings->pairs->featuretype[dimen] ) + kernel = kernel + settings->kappa_a * ( pi[dimen] - pj[dimen] )*( pi[dimen] - pj[dimen] ) ; + else if ( pi[dimen] != pj[dimen] ) + kernel = kernel + settings->kappa_a * 1.0 ; + } + } + kernel = settings->kappa_o * exp ( - kernel / 2.0 ) ; + } + + return kernel ; +} + +double Calc_Covfun( double * pi, double * pj, Pref_Settings * settings ) +{ + double kernel = 0 ; + if ( NULL == pi || NULL == pj || NULL == settings ) + return kernel ; + if ( 1 == settings->ardon ) + { + if (NULL == settings->kappa) + { + printf("ARD parameters have not been initialized.\n") ; + return kernel ; + } + } + // Call Calc_Kernel to initialize kernel + kernel = Calc_Kernel( pi, pj, settings ) ; + kernel = kernel + settings->kappa_m ; //plus bias term + if (pi==pj) + kernel += DEF_JITTER ; + return kernel ; +} + +double Calculate_Covfun( struct _Alphas * ai, struct _Alphas * aj, Pref_Settings * settings ) +{ + double kernel = 0 ; + int i, j ; + + if ( NULL == ai || NULL == aj || NULL == settings ) + return kernel ; + + if (settings->pairs->dimen<1) + { + printf("Warning : dimension is less than 1.\n") ; + return kernel ; + } + + if (1 == settings->cacheall) + { + // retrieve kernel values + i = ai - settings->alpha ; + j = aj - settings->alpha ; + if (i >= j) + return ai->kernels[j] ; + else + return aj->kernels[i] ; + } + else + return Calc_Covfun(ai->pair->point,aj->pair->point,settings) ; +} +// the end of smo_kernel.c + + diff --git a/parameter-learning_nd_disc/source code PL/gpref/smo_timer.c b/parameter-learning_nd_disc/source code PL/gpref/smo_timer.c new file mode 100755 index 0000000..b8a6c8f --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/smo_timer.c @@ -0,0 +1,88 @@ +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#include +__int64 FileTimeToQuadWord (PFILETIME pft) { + return(Int64ShllMod32(Int64ShllMod32(pft->dwHighDateTime, 16),16) | pft->dwLowDateTime); +} +static double _tstart, _tend; + +/* Subroutine */ void bmr_timer(double *ttime) +{ + FILETIME ftKernelTimePresent ; + FILETIME ftUserTimePresent ; + FILETIME ftDummy; + __int64 qwKernelTimeElapsed = 0, qwUserTimeElapsed = 0, qwTotalTimeElapsed = 0; + + GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy, \ + &ftKernelTimePresent, &ftUserTimePresent); + + // Get the elapsed kernel and user times by converting the start + // and end times from FILETIMEs to quad words, and then subtract + // the start times from the end times. + + qwKernelTimeElapsed = FileTimeToQuadWord(&ftKernelTimePresent) ; + qwUserTimeElapsed = FileTimeToQuadWord(&ftUserTimePresent) ; + // Get total time duration by adding the kernel and user times. + qwTotalTimeElapsed = qwKernelTimeElapsed + qwUserTimeElapsed ; + *ttime = (double)qwTotalTimeElapsed*(1.0E-7) ; //pow(10.0, 9.0) ; +} + + +void tstart(void) +{ +bmr_timer(&_tstart) ; +} +void tend(void) +{ +bmr_timer(&_tend) ; +} + +double tval() +{ + return (_tend - _tstart) ; +} +#else +#include +#include +#include +static struct rusage _tstart, _tend; + +void tstart(void) +{ + //gettimeofday(&_tstart, &tz); + getrusage(RUSAGE_SELF,&_tstart) ; +} +void tend(void) +{ + //gettimeofday(&_tend,&tz); + getrusage(RUSAGE_SELF,&_tend) ; +} + +double tval() +{ + double t1, t2; + + t1 = (double)_tstart.ru_utime.tv_sec + (double)_tstart.ru_utime.tv_usec/(1000*1000); + t1 += (double)_tstart.ru_stime.tv_sec + (double)_tstart.ru_stime.tv_usec/(1000*1000); + t2 = (double)_tend.ru_utime.tv_sec + (double)_tend.ru_utime.tv_usec/(1000*1000); + t2 += (double)_tend.ru_stime.tv_sec + (double)_tend.ru_stime.tv_usec/(1000*1000); + return t2-t1; +} +#endif +#ifdef _WIN32 +#include +#define SLASHC '\\' +#define SLASHSTR "\\" +#else +#include +#define SLASHC '/' +#define SLASHSTR "/" +#endif +// end of smo_timer.c + diff --git a/parameter-learning_nd_disc/source code PL/gpref/toy_samples.dat b/parameter-learning_nd_disc/source code PL/gpref/toy_samples.dat new file mode 100755 index 0000000..0690c2f --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/toy_samples.dat @@ -0,0 +1,100 @@ +-0.432565 -1.187777 0.635274 -0.896043 -0.071539 -1.444004 1.141773 -0.373461 0.758193 0.440836 0.715967 1.684295 -0.072801 -0.759267 0.530979 -2.103747 0.809537 -1.315840 -0.246258 0.866884 +-1.665584 -2.202321 -0.601412 0.135175 0.279198 0.612340 1.551936 -0.832030 -0.691940 0.565384 1.598648 0.119528 -0.994310 -0.595170 2.134498 -0.664684 1.928793 -0.301519 -0.145741 2.431569 +0.125332 0.986337 0.551185 -0.139040 1.373275 -1.323503 1.383630 0.286866 0.680179 -0.693623 -2.064741 0.650667 -0.747358 0.812400 0.354361 1.450110 0.396057 -2.599588 -1.169008 0.110204 +0.287676 -0.518635 -1.099840 -1.163395 0.179841 -0.661577 -0.758092 -1.818892 -1.072541 0.833869 -0.743632 2.080061 -0.030814 0.069541 0.231700 -0.329805 -0.861399 0.780078 -0.022011 0.026449 +-1.146471 0.327368 0.085991 1.183720 -0.542017 -0.146115 0.442663 -1.573051 0.899772 -2.237378 0.176185 -0.339225 0.988355 -1.833687 1.287980 2.701872 2.431936 0.602941 0.618278 0.970324 +1.190915 0.234057 -2.004563 -0.015430 1.634191 0.248085 0.911098 2.015666 -2.123092 1.097644 0.527839 0.730113 -0.599017 1.827363 -0.013488 -1.634939 -0.840518 0.942799 1.865865 -0.005260 +1.189164 0.021466 -0.493088 0.536219 0.825215 -0.076633 -1.074086 -0.071982 0.284712 -0.001617 -0.553153 0.293969 1.476644 0.654075 -1.333345 -0.536325 0.280451 -1.023913 0.081875 1.409542 +-0.037633 -1.003944 0.462048 -0.716429 0.230761 1.738170 0.201762 2.628909 -0.733323 -1.614573 0.298280 -0.849109 -0.813801 -1.544769 -0.556343 0.547223 0.820416 -0.067830 1.607995 1.757851 +0.327292 -0.947146 -0.321005 -0.655559 0.671634 1.621972 0.762863 -0.243317 -0.773376 -1.228727 -1.226607 -2.533858 0.645040 -0.375109 0.755597 1.492603 1.227828 0.081760 -0.380666 0.885011 +0.174639 -0.374429 1.236556 0.314363 -0.508078 0.626436 -1.288187 0.173276 0.151842 0.207405 -0.189676 -2.378941 -1.309919 0.207688 -0.911854 -0.455243 -0.063565 -1.767027 -1.299588 1.140862 +-0.186709 -1.185886 -0.631280 0.106814 0.856352 0.091814 -0.952962 0.923207 -0.336843 0.220942 -0.301713 -0.346276 -0.867425 -0.765615 1.371684 -0.496416 0.645265 -1.781264 -0.723958 0.403216 +0.725791 -1.055903 -2.325211 1.848216 0.268503 -0.807607 0.778175 -0.178553 0.970761 -1.006073 0.956956 -0.610937 -0.474233 -0.106355 0.245580 1.235260 -1.771318 -0.660354 -0.564984 0.191009 +-0.588317 1.472480 -1.231637 -0.275106 0.624975 -0.461337 -0.006331 -0.521705 -0.107236 -0.453067 -0.533366 -0.408192 0.222417 0.338769 0.118845 0.040926 0.059612 1.351417 0.621664 -0.693627 +2.183186 0.055744 1.055648 2.212554 -1.047338 -1.405969 0.524487 1.431962 1.013492 1.399453 -0.901082 -1.415611 1.871323 1.033461 0.384690 0.748467 -0.760177 2.136370 -1.335471 0.011036 +-0.136396 -1.217317 -0.113224 1.508526 1.535670 -0.374530 1.364272 -0.870117 -0.475347 -0.461964 -0.892552 0.227122 0.110001 -1.404822 -0.070152 1.230764 -1.690901 0.166783 -0.123108 -1.105586 +0.113931 -0.041227 0.379224 -1.945079 0.434426 -0.470911 0.482039 0.807542 0.068948 0.032716 0.278717 0.207974 -0.411341 -1.030570 -0.578309 0.304903 1.103672 -1.705227 -1.102815 1.907973 +1.066768 -1.128344 0.944200 -1.680543 -1.917136 1.751296 -0.787066 -0.510635 0.398592 0.798783 -0.745807 -0.719718 0.511242 -0.643372 0.469308 1.077771 1.462500 0.276528 -2.753176 -0.165412 +0.059281 -1.349278 -2.120427 -0.573534 0.469940 0.753225 0.751999 0.743514 1.116326 0.896816 1.603464 0.757762 -1.199117 0.170787 1.299687 0.765151 0.236213 0.394512 0.252017 -0.732430 +-0.095648 -0.261102 -0.644679 -0.185817 1.274351 0.064989 -0.166888 0.847898 0.620451 0.137892 0.574270 -1.643135 -0.096361 1.344839 1.634798 -1.319580 -1.097691 -0.098555 -0.858148 -0.990741 +-0.832349 0.953465 -0.704302 0.008934 0.638542 -0.292764 -0.816228 -0.829901 -0.287674 -1.619146 0.320655 -1.056813 0.445817 1.936273 -0.702809 -0.509191 2.415233 0.176450 1.135363 0.894305 +0.294411 0.128644 -1.018137 0.836950 1.380782 0.082823 2.094065 0.532994 -1.371773 -1.646606 -0.151383 -0.251662 -0.295825 0.741336 0.807253 0.555116 -0.402112 -1.837854 -0.297908 0.448227 +-1.336182 0.656468 -0.182082 -0.722271 1.319843 0.766191 0.080153 1.032848 -0.685868 0.428707 0.315762 -1.298441 -0.167996 0.811980 -1.027451 -1.957625 0.914131 -1.502291 1.154331 0.889219 +0.714325 -1.167819 1.521013 -0.721490 -0.909429 2.236850 -0.937295 -1.052024 0.331685 -0.737231 1.343703 1.233255 0.179543 -0.142808 1.294496 -0.760453 -0.135959 0.819197 1.046076 1.073337 +1.623562 -0.460605 -0.038439 -0.201181 -2.305605 0.326887 0.635739 0.362114 -0.997722 0.564926 -2.237832 1.494625 0.421118 -0.099858 0.014930 -2.443886 1.314193 -0.234568 2.126874 -0.104734 +-0.691776 -0.262440 1.227448 -0.020464 1.788730 0.863304 1.682028 -0.036787 0.291418 -1.384167 1.292906 0.235938 1.677678 -0.800131 0.218705 -0.659366 0.322361 -1.631598 -0.655774 1.547319 +0.857997 -1.213152 -0.696205 0.278890 0.390798 0.679387 0.593634 -1.227636 1.107078 0.460268 -0.378459 -1.404359 1.996949 0.493249 1.713188 -0.114779 -0.476496 -0.317939 -1.142368 0.169834 +1.254001 -1.319437 0.007524 1.058295 0.020324 0.554758 0.790153 -0.275099 0.244959 0.629384 0.002521 0.658791 0.696964 1.237574 -2.078805 0.300079 0.076162 -0.796289 0.949039 0.804048 +-1.593730 0.931218 -0.782893 0.621673 -0.405977 1.001630 0.105254 -0.160435 0.164976 0.379847 0.884641 -2.556613 -1.366382 1.295951 0.112917 -0.583996 -0.105147 0.690800 -0.404608 -1.724029 +-1.440964 0.011245 0.586939 -1.750615 -1.534895 1.259365 -0.158579 -1.083575 0.406231 -1.013330 0.582450 -0.534945 0.363045 -0.278196 -1.086491 -3.073745 1.417013 -0.042010 -0.384329 0.174133 +0.571148 -0.645146 -0.251207 0.697348 0.221373 0.044151 0.870907 -1.954213 1.215981 -0.347243 -1.614244 3.202525 -0.567044 0.217127 -1.558311 1.551042 0.707911 0.324041 0.482020 -0.484085 +-0.399886 0.805729 0.480136 0.811486 -1.374479 -0.314138 -0.194759 -0.909487 1.448424 0.441912 -1.503666 0.439198 -1.044154 0.630728 0.637406 -0.407369 0.367918 0.506456 0.443774 -0.731627 +0.689997 0.231626 0.668155 0.636345 -0.839286 0.226708 0.075474 -0.005579 -1.025137 -1.590240 0.573586 -1.149901 0.697139 -0.548549 -0.404576 1.428095 -0.602844 -1.028590 0.381100 -2.131905 +0.815622 -0.989760 -0.078321 1.310080 -0.208643 0.996692 -0.526635 -1.723490 0.205418 -0.701417 -0.910537 0.886765 0.484026 0.229632 -0.403325 -1.353242 -0.852110 0.099426 1.102348 -1.810366 +0.711908 1.339586 0.889173 0.327098 0.755913 1.215912 -0.685484 1.263077 0.588882 -1.077601 -1.631277 -0.283386 -0.193751 0.355311 0.084076 0.903970 0.655122 -0.116351 0.856447 -0.052338 +1.290250 0.289502 2.309287 -0.672993 0.375734 -0.542702 -0.268388 -0.600433 -0.264024 1.002220 -0.359138 1.035336 -0.378095 0.521284 -0.435349 0.541671 1.470184 0.689239 -1.178509 -0.086212 +0.668601 1.478917 0.524639 -0.149327 -1.345413 0.912228 -1.188346 -2.063925 2.495318 1.729481 -0.397616 -0.364878 -0.886374 -0.615971 -0.562623 -0.465020 -0.810403 1.883291 0.401970 -1.189738 +1.190838 1.138028 -0.011787 -2.449018 1.481876 -0.172141 0.248579 0.110911 0.855948 0.709032 -1.161307 1.341987 -1.840197 1.345803 0.878062 2.430415 -1.276157 0.325435 -0.584228 -0.754141 +-1.202457 -0.684139 0.913141 0.473286 0.032736 -0.335955 0.102452 1.487614 -0.850954 -0.747897 -1.109838 1.008872 -1.628195 0.974922 -0.814650 2.020479 1.722268 -0.095213 -0.979486 0.947278 +-0.019790 -1.291936 0.055941 0.116946 1.870453 0.541487 -0.041007 0.053002 0.811879 0.228862 0.290672 0.213874 -1.173789 -2.377934 -0.258363 0.797287 0.101878 0.031172 0.115106 -0.182628 +-0.156717 -0.072926 -1.107070 -0.591104 -1.208991 0.932111 -2.247582 0.161981 0.700242 -0.223497 -1.910239 -0.299264 -0.415411 -1.092319 0.493299 0.030996 -0.801997 -0.613800 0.068471 -0.066268 +-1.604086 -0.330599 0.485498 -0.654708 -0.782632 -0.570253 -0.510776 -0.026878 0.759938 -0.853275 1.314768 0.255849 0.175088 -0.325710 -0.802694 0.540738 -1.250837 -1.731258 -0.529900 0.905018 +0.257304 -0.843628 -0.005005 -1.080662 -0.767299 -1.498605 0.249243 0.173576 -1.712909 0.345627 0.665319 -0.190826 0.229433 -2.012228 -0.008329 0.683921 1.237717 0.478775 0.541112 1.458216 +-1.056473 0.497770 -0.276218 -0.047731 -0.107200 -0.050346 0.369197 0.882168 1.537021 0.109764 -0.275115 -0.079060 -1.240889 1.567660 0.627571 -0.590052 1.528165 -0.447835 0.681720 -1.117984 +1.415141 1.488490 1.276452 0.379345 -0.977057 0.553025 0.179197 0.182294 -1.609847 -1.133039 -0.023022 0.699851 0.700004 0.233337 0.154382 -0.261084 1.776923 0.386815 0.538565 1.813295 +-0.805090 -0.546476 1.863401 -0.330361 -0.963988 0.083498 -0.037283 0.755295 1.109526 -0.683124 -0.907976 -0.796540 0.426877 0.646420 2.580735 1.517068 0.631168 0.052959 -0.510035 0.150753 +0.528743 -0.846758 -0.522559 -0.499898 -2.379172 1.577524 -1.603310 0.508035 -1.109704 -0.277856 -1.043657 -0.801284 1.454803 -1.129412 -1.306246 1.007259 0.083259 -0.486085 -1.322111 -0.282994 +0.219321 -0.246337 0.103424 -0.035979 -0.838188 -0.330774 0.339372 0.131880 0.385469 0.654790 0.373516 -0.007599 -0.510186 0.197038 1.023526 0.303421 2.140043 0.244473 -0.610659 1.650122 +-0.921902 0.663024 -0.807649 -0.174760 0.257346 0.795155 -0.131135 0.280104 0.965231 -1.248394 0.901532 -0.726810 -0.006657 1.696870 0.777795 -0.817081 1.263469 0.718309 -0.565309 0.666378 +-2.170674 -0.854197 0.680439 -0.957265 -0.183834 -0.784800 0.485190 -0.982848 0.818297 -0.597539 1.278539 -1.490902 -0.525496 0.726034 -0.833884 -0.491192 -1.750645 0.153485 0.086175 -0.346362 +-0.059188 -1.201315 -2.364590 1.292548 -0.167615 -1.263121 0.598751 -0.944087 0.037049 -0.481813 -0.128456 0.870335 0.717698 0.792526 -0.586663 0.867467 -0.014432 0.133783 0.691501 -0.264042 +-1.010634 -0.119869 0.990115 0.440910 -0.116989 0.666655 -0.086031 -0.013058 -0.926012 0.983372 0.612821 -0.265675 1.088374 0.603357 0.065664 0.360790 2.468102 -1.006194 2.133751 -0.644349 +0.614463 -0.065294 0.218899 1.280941 0.168488 -1.392632 0.325292 0.354345 -0.111919 1.762121 1.956518 -1.566695 0.500552 -0.058405 -0.012342 -0.080371 -0.669158 1.306469 -0.002864 -0.905540 +0.507741 0.485296 0.261662 -0.497730 -0.501206 -1.300562 -0.335143 -0.894709 -0.803030 1.427402 2.266326 -0.394636 2.771790 -1.108666 -0.076987 0.749301 0.259927 1.199137 -0.089523 0.716679 +1.692430 -0.595491 1.213444 -1.118717 -0.705076 -0.605022 -0.322449 0.812111 -1.665006 0.911763 -0.373959 -0.143855 -0.160309 2.144229 -1.558587 -1.791968 -0.372328 -2.577336 -0.254982 -0.007336 +0.591283 -0.149668 -0.274667 0.807650 0.508165 -1.488565 -0.382374 0.109537 -0.901401 0.326823 2.238039 -2.334247 0.429489 -1.352821 1.702607 1.213226 1.318554 -2.086270 -0.874212 -2.814799 +-0.643595 -0.434752 -0.133134 0.041200 -0.420922 0.558543 -0.953371 2.731644 0.588350 0.069619 -0.159580 -1.357539 -1.966817 0.457021 -0.468984 -0.060524 -0.653081 0.386132 0.422928 -0.149546 +0.380337 -0.079330 -1.270500 -0.756209 0.229133 -0.277354 0.233576 0.411079 0.554159 -1.499763 -0.703281 -1.815689 -0.546019 0.391175 0.094619 -0.392520 0.062179 -0.861031 -0.133399 0.577495 +-1.009116 1.535152 -1.663606 -0.089129 -0.959497 -1.293685 1.235245 -1.306862 -0.415173 -0.418223 0.563477 1.108422 -1.888395 2.073013 0.287071 0.609547 -0.735873 -1.230808 0.539578 0.753117 +-0.019511 -0.606483 -0.703554 -2.008850 -0.146043 -0.888435 -0.578532 0.383806 0.061795 -0.021037 -0.050296 -0.142115 -0.107952 -0.323318 0.919354 0.643580 -0.179324 2.641554 0.875171 -0.166985 +-0.048221 -1.347363 0.280880 1.083918 0.744538 -0.986520 -0.501537 0.499504 0.457432 0.228425 1.163593 1.112757 -1.316144 1.468132 0.510136 1.019521 1.084675 -0.904404 -1.250776 -0.581816 +0.000043 0.469383 -0.541209 -0.981191 -0.890496 -0.071618 0.722864 -0.510786 0.199014 -1.008196 0.658808 0.559264 -0.672632 -0.502399 0.245440 0.934437 0.136915 -1.223338 0.868311 0.365758 +-0.317859 -0.903567 -1.333531 -0.688489 0.139062 -2.414591 0.039498 0.234922 0.257558 -0.664622 -1.550089 0.478370 -0.902365 0.209593 -1.400519 1.228582 -0.015608 0.303205 -0.804806 -0.548919 +1.095004 0.035880 1.072686 1.339479 -0.236144 -0.694349 1.541279 -0.597825 2.080730 0.558177 -3.029118 -0.679385 -0.154798 0.754800 0.969571 -0.249486 -0.938491 -0.730097 -0.752693 0.578737 +-1.873990 -0.627531 -0.712085 -0.909243 -0.075459 -1.391389 -1.701053 0.020771 -2.277237 -1.188542 0.540578 0.284967 0.947242 -0.948189 1.593698 -0.707583 -1.478085 -1.143570 -0.745812 -1.955799 +0.428183 0.535398 -0.011286 -0.412858 -0.358572 0.329648 -1.033741 0.419443 0.339022 -0.775481 -1.008998 -1.332935 1.550375 0.613157 -1.437917 -0.593824 0.361931 -1.413193 -0.309654 0.522006 +0.895638 0.552884 -0.000817 -0.506163 -2.077635 0.598544 -0.763708 1.191104 0.289894 0.271042 0.908047 -0.723980 0.429040 1.760503 -1.534230 -0.262310 0.477791 -0.591818 -1.521891 1.601135 +0.730957 -0.203690 -0.249436 1.619748 -0.143546 0.147175 2.176426 0.771214 0.662261 1.534976 1.582303 -0.663600 -0.560795 0.088762 -0.074710 1.242847 0.321742 0.518888 0.826531 0.732559 +0.577857 -2.054325 0.396575 0.080901 1.393341 -0.101439 0.431612 -2.644222 -0.580860 -1.052283 -0.979088 0.198443 0.179304 2.595570 0.081459 -1.548902 -1.877574 -1.492811 -0.612987 0.555747 +0.040314 0.132561 -0.264013 -1.081056 0.651804 -2.634981 -0.443765 0.285430 0.887752 0.625559 1.007902 -1.794868 -0.771509 -0.675470 -0.843240 -0.386760 0.680526 -0.086684 0.959728 -0.813346 +0.677089 1.592941 -1.664011 -1.124518 -0.377134 0.028053 0.029996 0.826093 0.171871 -0.797626 0.158491 -1.387673 -0.943390 2.786804 -0.564640 0.275098 0.233398 -0.012620 1.972988 -0.538975 +0.568900 1.018412 -1.028975 1.735676 -0.661443 -0.876310 -0.315671 -0.008122 0.848821 -0.313522 -0.586927 0.197768 -1.407569 -0.016827 -0.028207 0.826154 1.239492 -0.345858 0.294958 1.307876 +-0.255645 -1.580402 0.243095 1.937459 0.248958 -0.265477 0.977846 0.858438 0.963769 -0.602210 1.574082 1.469328 -1.906131 0.271651 -1.243702 -0.979279 0.125661 0.986311 -0.392651 -0.482579 +-0.377469 -0.078662 -1.256590 1.635068 -0.383516 -0.327578 0.018295 0.774788 1.321918 1.259060 -0.516649 0.366493 -0.065293 -0.914102 0.733039 -0.104297 0.179721 0.643256 0.575927 -1.752447 +-0.295887 -0.681657 -0.347183 -1.255940 -0.528480 -1.158247 0.817963 1.305945 -0.064345 0.858484 1.227800 -0.442775 0.672149 -1.951371 0.059580 0.127849 -0.605061 2.919944 -1.141419 -0.926570 +-1.475135 -1.024553 -0.941372 -0.213538 0.055388 0.580053 0.702341 1.231503 1.317053 -2.105292 1.583876 -0.048563 0.206147 -0.317418 0.149144 0.062544 -1.036850 -1.248585 0.061069 0.922440 +-0.234004 -1.234353 -1.174560 -0.198932 1.253769 0.239756 -0.231271 0.958564 0.228017 -0.360937 -2.088950 0.077709 -0.008124 0.588333 1.595857 0.371624 -0.295278 0.157115 0.012318 0.041001 +0.118445 0.288807 -1.021142 0.307499 -2.520004 -0.350885 -0.113690 -1.654548 -1.429637 0.553557 2.949545 1.957910 0.020042 0.828996 -0.777250 -0.103963 1.456114 0.788733 -0.168118 0.413647 +0.314809 -0.429303 -0.401667 -0.572325 0.584856 0.892098 0.127941 -0.990396 -0.149701 -1.556384 1.356125 -0.072848 -0.558447 -1.674851 1.550277 -0.696775 1.802525 -0.577083 -0.687349 0.597244 +1.443508 0.055801 0.173666 -0.977648 -1.008064 1.578299 -0.799410 0.685236 -0.504968 -0.206666 1.050068 0.938810 1.886079 -1.922293 1.055002 -0.386823 -1.333614 0.527634 -0.990650 1.924270 +-0.350975 -0.367874 -0.116118 -0.446809 0.944285 -1.108174 -0.238612 -0.974870 -1.729141 -0.425568 -0.767170 -0.079608 -0.219975 -0.436662 -0.166654 0.016134 0.387257 1.671694 -0.049762 0.714119 +0.623234 -0.464973 1.064119 1.082092 -2.423957 -0.025931 -0.089463 -0.606726 -0.417472 0.493778 -0.257653 -0.800959 -1.414395 0.044974 0.314484 1.369212 -0.022809 0.800079 0.719301 -2.312337 +0.799049 0.370961 -0.245386 2.372648 -0.223831 -1.110628 -1.023264 0.686794 -0.614969 -0.870908 -1.371845 0.309424 -0.302811 2.416609 1.419571 0.416877 0.110596 0.883787 -0.283063 1.380715 +0.940890 0.728283 -1.517539 0.229288 0.058070 0.750834 0.937538 0.020049 0.720777 0.079828 -1.267656 1.051826 -0.569574 -0.309892 0.327348 0.068741 0.812811 -0.224185 -1.424966 1.390703 +-0.992092 2.112160 0.009734 -0.266623 -0.424614 0.500167 -1.131719 1.063801 0.339364 -0.521619 -0.894948 -1.664211 -0.121495 0.187583 0.475653 0.294187 -1.009099 0.296991 0.461549 -0.453904 +0.212035 -1.357298 0.071373 0.701672 -0.202918 -0.517261 -0.710702 -1.341050 0.882845 -1.413861 0.589089 -1.090792 -0.390171 0.947699 0.398754 0.472633 -1.004572 -0.521008 1.091484 -0.628305 +0.237882 -1.022610 0.316536 -0.487590 -1.513077 -0.559209 -1.169501 0.479510 0.284245 -0.384293 1.842629 -0.191731 -0.844287 -0.525703 -0.072770 1.782735 0.282958 -0.155359 -1.044295 1.023225 +-1.007763 1.037834 0.499826 1.862480 -1.126352 -0.753371 1.065437 -1.633974 -0.145541 -0.457922 1.347967 0.463401 -1.737757 -1.115605 1.314784 0.260577 0.289750 -0.098498 -2.842784 -0.489111 +-0.742045 -0.389800 1.278084 1.106851 -0.815002 0.925813 -0.680394 -1.442665 -0.089646 -0.291471 -0.491253 -0.924147 -0.449520 -1.592320 0.978279 1.510728 -0.247297 0.997170 0.996824 -0.402405 +1.082295 -1.381266 -0.547816 -1.227566 0.366614 -0.248520 -1.725773 0.293781 0.289161 -0.301224 -2.177568 -0.649657 -1.547933 1.174844 1.722114 0.316968 -0.218864 0.434470 0.076534 1.399683 +-0.131500 0.315543 0.260808 -0.669885 -0.586107 -0.149835 0.813200 -0.140364 1.164831 -1.588594 0.237000 0.622893 -0.095776 0.485144 -0.412302 0.803473 0.898687 -0.025721 -1.866737 0.280561 +0.389880 1.553243 -0.013177 1.340929 1.537409 -1.258415 1.441867 -1.130341 0.805729 1.094287 -0.735411 -1.335107 0.907714 1.645480 0.565133 0.580874 -0.642213 -0.379934 -0.613614 1.880872 +0.087987 0.707894 -0.580264 0.388083 0.140072 0.312620 0.672272 -0.292538 -1.355643 1.324167 -1.779419 1.047689 2.369602 -0.454233 0.739851 1.778584 -0.180445 -0.242396 1.169354 -0.799673 +-0.635465 1.957385 2.136308 0.393059 -1.862767 2.690277 0.138665 -0.582536 0.120893 -0.126480 0.448030 0.863327 0.519768 1.008768 0.220138 -0.938075 0.717913 -1.165114 -0.575013 -0.560699 +-0.559573 0.504542 -0.257617 -1.707334 -0.454193 0.289696 -0.859534 -0.896348 -0.222178 -0.737164 0.581214 -0.642411 0.410525 2.049403 1.312807 -0.916672 0.301386 0.756605 -0.264795 1.708875 +0.443653 1.864529 -1.409528 0.227859 -0.652074 -1.422803 -0.752251 0.248601 0.571732 0.213719 0.856607 0.660010 1.052585 0.602020 0.629152 0.376006 1.548895 1.164162 0.004722 -0.644810 +-0.949904 -0.339812 1.770101 0.685633 0.103318 0.246786 1.229615 -1.489663 -0.300140 -0.400529 -0.266263 1.294116 0.428784 0.017860 -1.107987 0.909780 -0.044242 -1.023455 -0.039410 -1.422496 +0.781182 -1.139779 0.325546 -0.636790 -0.220632 -1.435773 1.150754 0.313509 1.134277 0.064938 -0.417470 0.314579 1.295088 -1.610426 -0.447001 0.154250 -0.029651 1.701589 -0.505393 -0.755937 +0.568961 -0.211123 -1.119040 -1.002606 -0.279043 0.148573 -0.608025 -2.025084 -0.179356 -1.757996 -0.205806 0.859573 -0.186053 1.238752 -0.725993 -0.202264 -0.382110 -0.494172 -1.157832 0.157520 +-0.821714 1.190245 0.620350 -0.185621 -0.733662 -1.693073 0.806158 0.528990 -1.467067 1.686748 -0.174323 0.128670 0.130733 0.683587 0.354045 1.488708 -0.553929 0.172714 0.710427 0.378346 +-0.265607 -1.116209 1.269782 -1.054033 -0.064534 0.719188 0.217133 0.343471 1.395346 0.327400 0.217577 0.016568 -0.657627 -0.780716 -0.506772 -0.621639 0.932358 0.354061 0.728172 0.178665 diff --git a/parameter-learning_nd_disc/source code PL/gpref/toy_test.dat b/parameter-learning_nd_disc/source code PL/gpref/toy_test.dat new file mode 100755 index 0000000..d9c48a0 --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/toy_test.dat @@ -0,0 +1,4950 @@ +1 2 +3 1 +1 4 +5 1 +6 1 +7 1 +8 1 +9 1 +1 10 +1 11 +12 1 +13 1 +14 1 +1 15 +16 1 +17 1 +18 1 +19 1 +20 1 +21 1 +1 22 +23 1 +24 1 +25 1 +26 1 +27 1 +28 1 +1 29 +30 1 +31 1 +1 32 +33 1 +34 1 +35 1 +36 1 +37 1 +38 1 +39 1 +1 40 +1 41 +1 42 +43 1 +44 1 +45 1 +1 46 +47 1 +48 1 +1 49 +50 1 +51 1 +52 1 +53 1 +1 54 +1 55 +56 1 +1 57 +58 1 +59 1 +60 1 +61 1 +1 62 +63 1 +1 64 +65 1 +66 1 +67 1 +1 68 +69 1 +70 1 +71 1 +72 1 +73 1 +74 1 +1 75 +76 1 +77 1 +1 78 +79 1 +1 80 +81 1 +82 1 +83 1 +84 1 +1 85 +86 1 +1 87 +88 1 +89 1 +90 1 +91 1 +92 1 +93 1 +94 1 +95 1 +96 1 +97 1 +1 98 +99 1 +100 1 +3 2 +4 2 +5 2 +6 2 +7 2 +8 2 +9 2 +2 10 +2 11 +12 2 +13 2 +14 2 +15 2 +16 2 +17 2 +18 2 +19 2 +20 2 +21 2 +22 2 +23 2 +24 2 +25 2 +26 2 +27 2 +28 2 +2 29 +30 2 +31 2 +32 2 +33 2 +34 2 +35 2 +36 2 +37 2 +38 2 +39 2 +2 40 +2 41 +42 2 +43 2 +44 2 +45 2 +2 46 +47 2 +48 2 +2 49 +50 2 +51 2 +52 2 +53 2 +2 54 +55 2 +56 2 +57 2 +58 2 +59 2 +60 2 +61 2 +62 2 +63 2 +2 64 +65 2 +66 2 +67 2 +2 68 +69 2 +70 2 +71 2 +72 2 +73 2 +74 2 +2 75 +76 2 +77 2 +78 2 +79 2 +80 2 +81 2 +82 2 +83 2 +84 2 +85 2 +86 2 +87 2 +88 2 +89 2 +90 2 +91 2 +92 2 +93 2 +94 2 +95 2 +96 2 +97 2 +98 2 +99 2 +100 2 +3 4 +5 3 +6 3 +7 3 +3 8 +3 9 +3 10 +3 11 +3 12 +3 13 +14 3 +3 15 +3 16 +3 17 +18 3 +3 19 +20 3 +3 21 +3 22 +3 23 +24 3 +3 25 +3 26 +27 3 +3 28 +3 29 +30 3 +31 3 +3 32 +3 33 +34 3 +35 3 +36 3 +37 3 +3 38 +3 39 +3 40 +3 41 +3 42 +43 3 +44 3 +45 3 +3 46 +47 3 +48 3 +3 49 +3 50 +51 3 +52 3 +53 3 +3 54 +3 55 +3 56 +3 57 +3 58 +3 59 +60 3 +3 61 +3 62 +63 3 +3 64 +3 65 +66 3 +67 3 +3 68 +3 69 +70 3 +71 3 +72 3 +73 3 +3 74 +3 75 +3 76 +77 3 +3 78 +3 79 +3 80 +3 81 +82 3 +83 3 +3 84 +3 85 +3 86 +3 87 +3 88 +3 89 +90 3 +91 3 +92 3 +93 3 +3 94 +95 3 +3 96 +97 3 +3 98 +3 99 +3 100 +5 4 +6 4 +7 4 +8 4 +9 4 +4 10 +4 11 +12 4 +13 4 +14 4 +4 15 +16 4 +17 4 +18 4 +19 4 +20 4 +21 4 +22 4 +23 4 +24 4 +25 4 +26 4 +27 4 +28 4 +4 29 +30 4 +31 4 +32 4 +33 4 +34 4 +35 4 +36 4 +37 4 +38 4 +39 4 +4 40 +4 41 +42 4 +43 4 +44 4 +45 4 +4 46 +47 4 +48 4 +4 49 +50 4 +51 4 +52 4 +53 4 +4 54 +4 55 +56 4 +57 4 +58 4 +59 4 +60 4 +61 4 +62 4 +63 4 +4 64 +65 4 +66 4 +67 4 +4 68 +69 4 +70 4 +71 4 +72 4 +73 4 +74 4 +4 75 +76 4 +77 4 +78 4 +79 4 +4 80 +81 4 +82 4 +83 4 +84 4 +4 85 +86 4 +87 4 +88 4 +89 4 +90 4 +91 4 +92 4 +93 4 +94 4 +95 4 +96 4 +97 4 +4 98 +99 4 +100 4 +5 6 +5 7 +5 8 +5 9 +5 10 +5 11 +5 12 +5 13 +14 5 +5 15 +5 16 +5 17 +5 18 +5 19 +5 20 +5 21 +5 22 +5 23 +5 24 +5 25 +5 26 +27 5 +5 28 +5 29 +30 5 +5 31 +5 32 +5 33 +34 5 +35 5 +36 5 +37 5 +5 38 +5 39 +5 40 +5 41 +5 42 +43 5 +44 5 +5 45 +5 46 +47 5 +5 48 +5 49 +5 50 +5 51 +5 52 +5 53 +5 54 +5 55 +5 56 +5 57 +5 58 +5 59 +5 60 +5 61 +5 62 +5 63 +5 64 +5 65 +5 66 +67 5 +5 68 +5 69 +5 70 +71 5 +5 72 +73 5 +5 74 +5 75 +5 76 +5 77 +5 78 +5 79 +5 80 +5 81 +82 5 +83 5 +5 84 +5 85 +5 86 +5 87 +5 88 +5 89 +5 90 +91 5 +5 92 +93 5 +5 94 +95 5 +5 96 +5 97 +5 98 +5 99 +5 100 +6 7 +6 8 +6 9 +6 10 +6 11 +6 12 +6 13 +14 6 +6 15 +6 16 +6 17 +18 6 +6 19 +6 20 +6 21 +6 22 +6 23 +24 6 +6 25 +6 26 +27 6 +6 28 +6 29 +30 6 +31 6 +6 32 +6 33 +34 6 +35 6 +36 6 +37 6 +6 38 +6 39 +6 40 +6 41 +6 42 +43 6 +44 6 +6 45 +6 46 +47 6 +48 6 +6 49 +6 50 +51 6 +6 52 +6 53 +6 54 +6 55 +6 56 +6 57 +6 58 +6 59 +6 60 +6 61 +6 62 +63 6 +6 64 +6 65 +66 6 +67 6 +6 68 +6 69 +70 6 +71 6 +6 72 +73 6 +6 74 +6 75 +6 76 +6 77 +6 78 +6 79 +6 80 +6 81 +82 6 +83 6 +6 84 +6 85 +6 86 +6 87 +6 88 +6 89 +90 6 +91 6 +92 6 +93 6 +6 94 +95 6 +6 96 +97 6 +6 98 +6 99 +6 100 +7 8 +7 9 +7 10 +7 11 +7 12 +7 13 +14 7 +7 15 +7 16 +7 17 +18 7 +7 19 +7 20 +7 21 +7 22 +7 23 +24 7 +7 25 +7 26 +27 7 +7 28 +7 29 +30 7 +31 7 +7 32 +7 33 +34 7 +35 7 +36 7 +37 7 +7 38 +7 39 +7 40 +7 41 +7 42 +43 7 +44 7 +45 7 +7 46 +47 7 +48 7 +7 49 +7 50 +51 7 +7 52 +7 53 +7 54 +7 55 +7 56 +7 57 +7 58 +7 59 +7 60 +7 61 +7 62 +63 7 +7 64 +7 65 +66 7 +67 7 +7 68 +7 69 +70 7 +71 7 +7 72 +73 7 +7 74 +7 75 +7 76 +77 7 +7 78 +7 79 +7 80 +7 81 +82 7 +83 7 +7 84 +7 85 +7 86 +7 87 +7 88 +7 89 +90 7 +91 7 +92 7 +93 7 +7 94 +95 7 +7 96 +97 7 +7 98 +7 99 +7 100 +8 9 +8 10 +8 11 +8 12 +13 8 +14 8 +8 15 +8 16 +17 8 +18 8 +8 19 +20 8 +8 21 +8 22 +23 8 +24 8 +25 8 +26 8 +27 8 +8 28 +8 29 +30 8 +31 8 +8 32 +33 8 +34 8 +35 8 +36 8 +37 8 +38 8 +8 39 +8 40 +8 41 +8 42 +43 8 +44 8 +45 8 +8 46 +47 8 +48 8 +8 49 +50 8 +51 8 +52 8 +53 8 +8 54 +8 55 +8 56 +8 57 +8 58 +59 8 +60 8 +61 8 +8 62 +63 8 +8 64 +65 8 +66 8 +67 8 +8 68 +8 69 +70 8 +71 8 +72 8 +73 8 +74 8 +8 75 +76 8 +77 8 +8 78 +79 8 +8 80 +81 8 +82 8 +83 8 +84 8 +8 85 +8 86 +8 87 +8 88 +8 89 +90 8 +91 8 +92 8 +93 8 +94 8 +95 8 +96 8 +97 8 +8 98 +99 8 +100 8 +9 10 +9 11 +9 12 +13 9 +14 9 +9 15 +9 16 +17 9 +18 9 +9 19 +20 9 +9 21 +9 22 +23 9 +24 9 +25 9 +26 9 +27 9 +9 28 +9 29 +30 9 +31 9 +9 32 +33 9 +34 9 +35 9 +36 9 +37 9 +38 9 +39 9 +9 40 +9 41 +9 42 +43 9 +44 9 +45 9 +9 46 +47 9 +48 9 +9 49 +50 9 +51 9 +52 9 +53 9 +9 54 +9 55 +56 9 +9 57 +9 58 +59 9 +60 9 +61 9 +9 62 +63 9 +9 64 +65 9 +66 9 +67 9 +9 68 +9 69 +70 9 +71 9 +72 9 +73 9 +74 9 +9 75 +76 9 +77 9 +9 78 +79 9 +9 80 +81 9 +82 9 +83 9 +84 9 +9 85 +86 9 +9 87 +9 88 +9 89 +90 9 +91 9 +92 9 +93 9 +94 9 +95 9 +96 9 +97 9 +9 98 +99 9 +100 9 +11 10 +12 10 +13 10 +14 10 +15 10 +16 10 +17 10 +18 10 +19 10 +20 10 +21 10 +22 10 +23 10 +24 10 +25 10 +26 10 +27 10 +28 10 +29 10 +30 10 +31 10 +32 10 +33 10 +34 10 +35 10 +36 10 +37 10 +38 10 +39 10 +40 10 +10 41 +42 10 +43 10 +44 10 +45 10 +46 10 +47 10 +48 10 +10 49 +50 10 +51 10 +52 10 +53 10 +54 10 +55 10 +56 10 +57 10 +58 10 +59 10 +60 10 +61 10 +62 10 +63 10 +10 64 +65 10 +66 10 +67 10 +10 68 +69 10 +70 10 +71 10 +72 10 +73 10 +74 10 +75 10 +76 10 +77 10 +78 10 +79 10 +80 10 +81 10 +82 10 +83 10 +84 10 +85 10 +86 10 +87 10 +88 10 +89 10 +90 10 +91 10 +92 10 +93 10 +94 10 +95 10 +96 10 +97 10 +98 10 +99 10 +100 10 +12 11 +13 11 +14 11 +15 11 +16 11 +17 11 +18 11 +19 11 +20 11 +21 11 +22 11 +23 11 +24 11 +25 11 +26 11 +27 11 +28 11 +29 11 +30 11 +31 11 +32 11 +33 11 +34 11 +35 11 +36 11 +37 11 +38 11 +39 11 +40 11 +11 41 +42 11 +43 11 +44 11 +45 11 +46 11 +47 11 +48 11 +11 49 +50 11 +51 11 +52 11 +53 11 +54 11 +55 11 +56 11 +57 11 +58 11 +59 11 +60 11 +61 11 +62 11 +63 11 +11 64 +65 11 +66 11 +67 11 +11 68 +69 11 +70 11 +71 11 +72 11 +73 11 +74 11 +75 11 +76 11 +77 11 +78 11 +79 11 +80 11 +81 11 +82 11 +83 11 +84 11 +85 11 +86 11 +87 11 +88 11 +89 11 +90 11 +91 11 +92 11 +93 11 +94 11 +95 11 +96 11 +97 11 +98 11 +99 11 +100 11 +13 12 +14 12 +12 15 +16 12 +17 12 +18 12 +12 19 +20 12 +12 21 +12 22 +23 12 +24 12 +25 12 +26 12 +27 12 +12 28 +12 29 +30 12 +31 12 +12 32 +33 12 +34 12 +35 12 +36 12 +37 12 +38 12 +39 12 +12 40 +12 41 +12 42 +43 12 +44 12 +45 12 +12 46 +47 12 +48 12 +12 49 +50 12 +51 12 +52 12 +53 12 +12 54 +12 55 +56 12 +12 57 +58 12 +59 12 +60 12 +61 12 +12 62 +63 12 +12 64 +65 12 +66 12 +67 12 +12 68 +69 12 +70 12 +71 12 +72 12 +73 12 +74 12 +12 75 +76 12 +77 12 +12 78 +79 12 +12 80 +81 12 +82 12 +83 12 +84 12 +12 85 +86 12 +12 87 +88 12 +12 89 +90 12 +91 12 +92 12 +93 12 +94 12 +95 12 +96 12 +97 12 +12 98 +99 12 +100 12 +14 13 +13 15 +13 16 +13 17 +18 13 +13 19 +20 13 +13 21 +13 22 +13 23 +24 13 +13 25 +13 26 +27 13 +13 28 +13 29 +30 13 +31 13 +13 32 +13 33 +34 13 +35 13 +36 13 +37 13 +13 38 +13 39 +13 40 +13 41 +13 42 +43 13 +44 13 +45 13 +13 46 +47 13 +48 13 +13 49 +13 50 +51 13 +52 13 +53 13 +13 54 +13 55 +13 56 +13 57 +13 58 +13 59 +60 13 +13 61 +13 62 +63 13 +13 64 +13 65 +66 13 +67 13 +13 68 +13 69 +70 13 +71 13 +72 13 +73 13 +13 74 +13 75 +13 76 +77 13 +13 78 +13 79 +13 80 +13 81 +82 13 +83 13 +13 84 +13 85 +13 86 +13 87 +13 88 +13 89 +90 13 +91 13 +92 13 +93 13 +13 94 +95 13 +13 96 +97 13 +13 98 +13 99 +13 100 +14 15 +14 16 +14 17 +14 18 +14 19 +14 20 +14 21 +14 22 +14 23 +14 24 +14 25 +14 26 +14 27 +14 28 +14 29 +14 30 +14 31 +14 32 +14 33 +14 34 +14 35 +14 36 +14 37 +14 38 +14 39 +14 40 +14 41 +14 42 +14 43 +14 44 +14 45 +14 46 +14 47 +14 48 +14 49 +14 50 +14 51 +14 52 +14 53 +14 54 +14 55 +14 56 +14 57 +14 58 +14 59 +14 60 +14 61 +14 62 +14 63 +14 64 +14 65 +14 66 +14 67 +14 68 +14 69 +14 70 +14 71 +14 72 +14 73 +14 74 +14 75 +14 76 +14 77 +14 78 +14 79 +14 80 +14 81 +14 82 +14 83 +14 84 +14 85 +14 86 +14 87 +14 88 +14 89 +14 90 +14 91 +14 92 +14 93 +14 94 +14 95 +14 96 +14 97 +14 98 +14 99 +14 100 +16 15 +17 15 +18 15 +19 15 +20 15 +21 15 +22 15 +23 15 +24 15 +25 15 +26 15 +27 15 +28 15 +15 29 +30 15 +31 15 +32 15 +33 15 +34 15 +35 15 +36 15 +37 15 +38 15 +39 15 +15 40 +15 41 +42 15 +43 15 +44 15 +45 15 +15 46 +47 15 +48 15 +15 49 +50 15 +51 15 +52 15 +53 15 +15 54 +55 15 +56 15 +57 15 +58 15 +59 15 +60 15 +61 15 +62 15 +63 15 +15 64 +65 15 +66 15 +67 15 +15 68 +69 15 +70 15 +71 15 +72 15 +73 15 +74 15 +15 75 +76 15 +77 15 +78 15 +79 15 +15 80 +81 15 +82 15 +83 15 +84 15 +85 15 +86 15 +87 15 +88 15 +89 15 +90 15 +91 15 +92 15 +93 15 +94 15 +95 15 +96 15 +97 15 +15 98 +99 15 +100 15 +17 16 +18 16 +16 19 +20 16 +16 21 +16 22 +23 16 +24 16 +25 16 +26 16 +27 16 +16 28 +16 29 +30 16 +31 16 +16 32 +33 16 +34 16 +35 16 +36 16 +37 16 +38 16 +39 16 +16 40 +16 41 +16 42 +43 16 +44 16 +45 16 +16 46 +47 16 +48 16 +16 49 +50 16 +51 16 +52 16 +53 16 +16 54 +16 55 +56 16 +16 57 +58 16 +59 16 +60 16 +61 16 +16 62 +63 16 +16 64 +65 16 +66 16 +67 16 +16 68 +16 69 +70 16 +71 16 +72 16 +73 16 +74 16 +16 75 +76 16 +77 16 +16 78 +79 16 +16 80 +81 16 +82 16 +83 16 +84 16 +16 85 +86 16 +16 87 +16 88 +16 89 +90 16 +91 16 +92 16 +93 16 +94 16 +95 16 +96 16 +97 16 +16 98 +99 16 +100 16 +18 17 +17 19 +20 17 +17 21 +17 22 +23 17 +24 17 +17 25 +17 26 +27 17 +17 28 +17 29 +30 17 +31 17 +17 32 +17 33 +34 17 +35 17 +36 17 +37 17 +38 17 +17 39 +17 40 +17 41 +17 42 +43 17 +44 17 +45 17 +17 46 +47 17 +48 17 +17 49 +17 50 +51 17 +52 17 +53 17 +17 54 +17 55 +17 56 +17 57 +17 58 +17 59 +60 17 +17 61 +17 62 +63 17 +17 64 +17 65 +66 17 +67 17 +17 68 +17 69 +70 17 +71 17 +72 17 +73 17 +17 74 +17 75 +17 76 +77 17 +17 78 +17 79 +17 80 +17 81 +82 17 +83 17 +17 84 +17 85 +17 86 +17 87 +17 88 +17 89 +90 17 +91 17 +92 17 +93 17 +17 94 +95 17 +17 96 +97 17 +17 98 +99 17 +100 17 +18 19 +18 20 +18 21 +18 22 +18 23 +24 18 +18 25 +18 26 +27 18 +18 28 +18 29 +30 18 +31 18 +18 32 +18 33 +34 18 +35 18 +36 18 +37 18 +18 38 +18 39 +18 40 +18 41 +18 42 +43 18 +44 18 +18 45 +18 46 +47 18 +48 18 +18 49 +18 50 +51 18 +18 52 +18 53 +18 54 +18 55 +18 56 +18 57 +18 58 +18 59 +18 60 +18 61 +18 62 +63 18 +18 64 +18 65 +66 18 +67 18 +18 68 +18 69 +70 18 +71 18 +18 72 +73 18 +18 74 +18 75 +18 76 +18 77 +18 78 +18 79 +18 80 +18 81 +82 18 +83 18 +18 84 +18 85 +18 86 +18 87 +18 88 +18 89 +18 90 +91 18 +92 18 +93 18 +18 94 +95 18 +18 96 +18 97 +18 98 +18 99 +18 100 +20 19 +19 21 +19 22 +23 19 +24 19 +25 19 +26 19 +27 19 +28 19 +19 29 +30 19 +31 19 +19 32 +33 19 +34 19 +35 19 +36 19 +37 19 +38 19 +39 19 +19 40 +19 41 +19 42 +43 19 +44 19 +45 19 +19 46 +47 19 +48 19 +19 49 +50 19 +51 19 +52 19 +53 19 +19 54 +19 55 +56 19 +19 57 +58 19 +59 19 +60 19 +61 19 +19 62 +63 19 +19 64 +65 19 +66 19 +67 19 +19 68 +69 19 +70 19 +71 19 +72 19 +73 19 +74 19 +19 75 +76 19 +77 19 +19 78 +79 19 +19 80 +81 19 +82 19 +83 19 +84 19 +19 85 +86 19 +19 87 +88 19 +89 19 +90 19 +91 19 +92 19 +93 19 +94 19 +95 19 +96 19 +97 19 +19 98 +99 19 +100 19 +20 21 +20 22 +20 23 +24 20 +20 25 +20 26 +27 20 +20 28 +20 29 +30 20 +31 20 +20 32 +20 33 +34 20 +35 20 +36 20 +37 20 +20 38 +20 39 +20 40 +20 41 +20 42 +43 20 +44 20 +45 20 +20 46 +47 20 +48 20 +20 49 +20 50 +51 20 +52 20 +53 20 +20 54 +20 55 +20 56 +20 57 +20 58 +20 59 +60 20 +20 61 +20 62 +63 20 +20 64 +20 65 +66 20 +67 20 +20 68 +20 69 +70 20 +71 20 +72 20 +73 20 +20 74 +20 75 +20 76 +77 20 +20 78 +20 79 +20 80 +20 81 +82 20 +83 20 +20 84 +20 85 +20 86 +20 87 +20 88 +20 89 +90 20 +91 20 +92 20 +93 20 +20 94 +95 20 +20 96 +97 20 +20 98 +20 99 +20 100 +21 22 +23 21 +24 21 +25 21 +26 21 +27 21 +28 21 +21 29 +30 21 +31 21 +21 32 +33 21 +34 21 +35 21 +36 21 +37 21 +38 21 +39 21 +21 40 +21 41 +21 42 +43 21 +44 21 +45 21 +21 46 +47 21 +48 21 +21 49 +50 21 +51 21 +52 21 +53 21 +21 54 +21 55 +56 21 +21 57 +58 21 +59 21 +60 21 +61 21 +21 62 +63 21 +21 64 +65 21 +66 21 +67 21 +21 68 +69 21 +70 21 +71 21 +72 21 +73 21 +74 21 +21 75 +76 21 +77 21 +21 78 +79 21 +21 80 +81 21 +82 21 +83 21 +84 21 +21 85 +86 21 +21 87 +88 21 +89 21 +90 21 +91 21 +92 21 +93 21 +94 21 +95 21 +96 21 +97 21 +21 98 +99 21 +100 21 +23 22 +24 22 +25 22 +26 22 +27 22 +28 22 +22 29 +30 22 +31 22 +32 22 +33 22 +34 22 +35 22 +36 22 +37 22 +38 22 +39 22 +22 40 +22 41 +22 42 +43 22 +44 22 +45 22 +22 46 +47 22 +48 22 +22 49 +50 22 +51 22 +52 22 +53 22 +22 54 +22 55 +56 22 +22 57 +58 22 +59 22 +60 22 +61 22 +62 22 +63 22 +22 64 +65 22 +66 22 +67 22 +22 68 +69 22 +70 22 +71 22 +72 22 +73 22 +74 22 +22 75 +76 22 +77 22 +78 22 +79 22 +22 80 +81 22 +82 22 +83 22 +84 22 +22 85 +86 22 +87 22 +88 22 +89 22 +90 22 +91 22 +92 22 +93 22 +94 22 +95 22 +96 22 +97 22 +22 98 +99 22 +100 22 +24 23 +23 25 +23 26 +27 23 +23 28 +23 29 +30 23 +31 23 +23 32 +23 33 +34 23 +35 23 +36 23 +37 23 +23 38 +23 39 +23 40 +23 41 +23 42 +43 23 +44 23 +45 23 +23 46 +47 23 +48 23 +23 49 +23 50 +51 23 +52 23 +53 23 +23 54 +23 55 +23 56 +23 57 +23 58 +23 59 +60 23 +23 61 +23 62 +63 23 +23 64 +23 65 +66 23 +67 23 +23 68 +23 69 +70 23 +71 23 +72 23 +73 23 +23 74 +23 75 +23 76 +77 23 +23 78 +23 79 +23 80 +23 81 +82 23 +83 23 +23 84 +23 85 +23 86 +23 87 +23 88 +23 89 +90 23 +91 23 +92 23 +93 23 +23 94 +95 23 +23 96 +97 23 +23 98 +23 99 +100 23 +24 25 +24 26 +27 24 +24 28 +24 29 +30 24 +31 24 +24 32 +24 33 +34 24 +35 24 +36 24 +37 24 +24 38 +24 39 +24 40 +24 41 +24 42 +43 24 +44 24 +24 45 +24 46 +47 24 +48 24 +24 49 +24 50 +51 24 +24 52 +24 53 +24 54 +24 55 +24 56 +24 57 +24 58 +24 59 +24 60 +24 61 +24 62 +63 24 +24 64 +24 65 +66 24 +67 24 +24 68 +24 69 +70 24 +71 24 +24 72 +73 24 +24 74 +24 75 +24 76 +24 77 +24 78 +24 79 +24 80 +24 81 +82 24 +83 24 +24 84 +24 85 +24 86 +24 87 +24 88 +24 89 +24 90 +91 24 +92 24 +93 24 +24 94 +95 24 +24 96 +24 97 +24 98 +24 99 +24 100 +26 25 +27 25 +25 28 +25 29 +30 25 +31 25 +25 32 +25 33 +34 25 +35 25 +36 25 +37 25 +38 25 +25 39 +25 40 +25 41 +25 42 +43 25 +44 25 +45 25 +25 46 +47 25 +48 25 +25 49 +50 25 +51 25 +52 25 +53 25 +25 54 +25 55 +25 56 +25 57 +25 58 +59 25 +60 25 +25 61 +25 62 +63 25 +25 64 +65 25 +66 25 +67 25 +25 68 +25 69 +70 25 +71 25 +72 25 +73 25 +74 25 +25 75 +76 25 +77 25 +25 78 +79 25 +25 80 +81 25 +82 25 +83 25 +84 25 +25 85 +25 86 +25 87 +25 88 +25 89 +90 25 +91 25 +92 25 +93 25 +25 94 +95 25 +25 96 +97 25 +25 98 +99 25 +100 25 +27 26 +26 28 +26 29 +30 26 +31 26 +26 32 +26 33 +34 26 +35 26 +36 26 +37 26 +38 26 +26 39 +26 40 +26 41 +26 42 +43 26 +44 26 +45 26 +26 46 +47 26 +48 26 +26 49 +26 50 +51 26 +52 26 +53 26 +26 54 +26 55 +26 56 +26 57 +26 58 +26 59 +60 26 +26 61 +26 62 +63 26 +26 64 +26 65 +66 26 +67 26 +26 68 +26 69 +70 26 +71 26 +72 26 +73 26 +26 74 +26 75 +26 76 +77 26 +26 78 +26 79 +26 80 +81 26 +82 26 +83 26 +26 84 +26 85 +26 86 +26 87 +26 88 +26 89 +90 26 +91 26 +92 26 +93 26 +26 94 +95 26 +26 96 +97 26 +26 98 +99 26 +100 26 +27 28 +27 29 +30 27 +27 31 +27 32 +27 33 +34 27 +35 27 +36 27 +37 27 +27 38 +27 39 +27 40 +27 41 +27 42 +43 27 +44 27 +27 45 +27 46 +47 27 +27 48 +27 49 +27 50 +27 51 +27 52 +27 53 +27 54 +27 55 +27 56 +27 57 +27 58 +27 59 +27 60 +27 61 +27 62 +27 63 +27 64 +27 65 +27 66 +67 27 +27 68 +27 69 +27 70 +71 27 +27 72 +27 73 +27 74 +27 75 +27 76 +27 77 +27 78 +27 79 +27 80 +27 81 +82 27 +83 27 +27 84 +27 85 +27 86 +27 87 +27 88 +27 89 +27 90 +91 27 +27 92 +93 27 +27 94 +95 27 +27 96 +27 97 +27 98 +27 99 +27 100 +28 29 +30 28 +31 28 +28 32 +33 28 +34 28 +35 28 +36 28 +37 28 +38 28 +39 28 +28 40 +28 41 +28 42 +43 28 +44 28 +45 28 +28 46 +47 28 +48 28 +28 49 +50 28 +51 28 +52 28 +53 28 +28 54 +28 55 +56 28 +28 57 +58 28 +59 28 +60 28 +61 28 +28 62 +63 28 +28 64 +65 28 +66 28 +67 28 +28 68 +69 28 +70 28 +71 28 +72 28 +73 28 +74 28 +28 75 +76 28 +77 28 +28 78 +79 28 +28 80 +81 28 +82 28 +83 28 +84 28 +28 85 +86 28 +28 87 +88 28 +28 89 +90 28 +91 28 +92 28 +93 28 +94 28 +95 28 +96 28 +97 28 +28 98 +99 28 +100 28 +30 29 +31 29 +32 29 +33 29 +34 29 +35 29 +36 29 +37 29 +38 29 +39 29 +40 29 +29 41 +42 29 +43 29 +44 29 +45 29 +46 29 +47 29 +48 29 +29 49 +50 29 +51 29 +52 29 +53 29 +54 29 +55 29 +56 29 +57 29 +58 29 +59 29 +60 29 +61 29 +62 29 +63 29 +29 64 +65 29 +66 29 +67 29 +29 68 +69 29 +70 29 +71 29 +72 29 +73 29 +74 29 +75 29 +76 29 +77 29 +78 29 +79 29 +80 29 +81 29 +82 29 +83 29 +84 29 +85 29 +86 29 +87 29 +88 29 +89 29 +90 29 +91 29 +92 29 +93 29 +94 29 +95 29 +96 29 +97 29 +98 29 +99 29 +100 29 +30 31 +30 32 +30 33 +30 34 +30 35 +30 36 +30 37 +30 38 +30 39 +30 40 +30 41 +30 42 +30 43 +30 44 +30 45 +30 46 +30 47 +30 48 +30 49 +30 50 +30 51 +30 52 +30 53 +30 54 +30 55 +30 56 +30 57 +30 58 +30 59 +30 60 +30 61 +30 62 +30 63 +30 64 +30 65 +30 66 +67 30 +30 68 +30 69 +30 70 +30 71 +30 72 +30 73 +30 74 +30 75 +30 76 +30 77 +30 78 +30 79 +30 80 +30 81 +30 82 +30 83 +30 84 +30 85 +30 86 +30 87 +30 88 +30 89 +30 90 +30 91 +30 92 +30 93 +30 94 +95 30 +30 96 +30 97 +30 98 +30 99 +30 100 +31 32 +31 33 +34 31 +35 31 +36 31 +37 31 +31 38 +31 39 +31 40 +31 41 +31 42 +43 31 +44 31 +31 45 +31 46 +47 31 +31 48 +31 49 +31 50 +31 51 +31 52 +31 53 +31 54 +31 55 +31 56 +31 57 +31 58 +31 59 +31 60 +31 61 +31 62 +63 31 +31 64 +31 65 +31 66 +67 31 +31 68 +31 69 +70 31 +71 31 +31 72 +73 31 +31 74 +31 75 +31 76 +31 77 +31 78 +31 79 +31 80 +31 81 +82 31 +83 31 +31 84 +31 85 +31 86 +31 87 +31 88 +31 89 +31 90 +91 31 +31 92 +93 31 +31 94 +95 31 +31 96 +31 97 +31 98 +31 99 +31 100 +33 32 +34 32 +35 32 +36 32 +37 32 +38 32 +39 32 +32 40 +32 41 +32 42 +43 32 +44 32 +45 32 +32 46 +47 32 +48 32 +32 49 +50 32 +51 32 +52 32 +53 32 +32 54 +32 55 +56 32 +32 57 +58 32 +59 32 +60 32 +61 32 +32 62 +63 32 +32 64 +65 32 +66 32 +67 32 +32 68 +69 32 +70 32 +71 32 +72 32 +73 32 +74 32 +32 75 +76 32 +77 32 +78 32 +79 32 +32 80 +81 32 +82 32 +83 32 +84 32 +32 85 +86 32 +87 32 +88 32 +89 32 +90 32 +91 32 +92 32 +93 32 +94 32 +95 32 +96 32 +97 32 +32 98 +99 32 +100 32 +34 33 +35 33 +36 33 +37 33 +38 33 +33 39 +33 40 +33 41 +33 42 +43 33 +44 33 +45 33 +33 46 +47 33 +48 33 +33 49 +50 33 +51 33 +52 33 +53 33 +33 54 +33 55 +33 56 +33 57 +33 58 +59 33 +60 33 +33 61 +33 62 +63 33 +33 64 +65 33 +66 33 +67 33 +33 68 +33 69 +70 33 +71 33 +72 33 +73 33 +74 33 +33 75 +76 33 +77 33 +33 78 +79 33 +33 80 +81 33 +82 33 +83 33 +84 33 +33 85 +33 86 +33 87 +33 88 +33 89 +90 33 +91 33 +92 33 +93 33 +33 94 +95 33 +96 33 +97 33 +33 98 +99 33 +100 33 +34 35 +34 36 +34 37 +34 38 +34 39 +34 40 +34 41 +34 42 +34 43 +34 44 +34 45 +34 46 +34 47 +34 48 +34 49 +34 50 +34 51 +34 52 +34 53 +34 54 +34 55 +34 56 +34 57 +34 58 +34 59 +34 60 +34 61 +34 62 +34 63 +34 64 +34 65 +34 66 +67 34 +34 68 +34 69 +34 70 +34 71 +34 72 +34 73 +34 74 +34 75 +34 76 +34 77 +34 78 +34 79 +34 80 +34 81 +34 82 +34 83 +34 84 +34 85 +34 86 +34 87 +34 88 +34 89 +34 90 +34 91 +34 92 +34 93 +34 94 +95 34 +34 96 +34 97 +34 98 +34 99 +34 100 +35 36 +35 37 +35 38 +35 39 +35 40 +35 41 +35 42 +35 43 +44 35 +35 45 +35 46 +35 47 +35 48 +35 49 +35 50 +35 51 +35 52 +35 53 +35 54 +35 55 +35 56 +35 57 +35 58 +35 59 +35 60 +35 61 +35 62 +35 63 +35 64 +35 65 +35 66 +67 35 +35 68 +35 69 +35 70 +35 71 +35 72 +35 73 +35 74 +35 75 +35 76 +35 77 +35 78 +35 79 +35 80 +35 81 +35 82 +35 83 +35 84 +35 85 +35 86 +35 87 +35 88 +35 89 +35 90 +35 91 +35 92 +35 93 +35 94 +95 35 +35 96 +35 97 +35 98 +35 99 +35 100 +36 37 +36 38 +36 39 +36 40 +36 41 +36 42 +36 43 +44 36 +36 45 +36 46 +36 47 +36 48 +36 49 +36 50 +36 51 +36 52 +36 53 +36 54 +36 55 +36 56 +36 57 +36 58 +36 59 +36 60 +36 61 +36 62 +36 63 +36 64 +36 65 +36 66 +67 36 +36 68 +36 69 +36 70 +36 71 +36 72 +36 73 +36 74 +36 75 +36 76 +36 77 +36 78 +36 79 +36 80 +36 81 +36 82 +36 83 +36 84 +36 85 +36 86 +36 87 +36 88 +36 89 +36 90 +36 91 +36 92 +36 93 +36 94 +95 36 +36 96 +36 97 +36 98 +36 99 +36 100 +37 38 +37 39 +37 40 +37 41 +37 42 +37 43 +44 37 +37 45 +37 46 +37 47 +37 48 +37 49 +37 50 +37 51 +37 52 +37 53 +37 54 +37 55 +37 56 +37 57 +37 58 +37 59 +37 60 +37 61 +37 62 +37 63 +37 64 +37 65 +37 66 +67 37 +37 68 +37 69 +37 70 +71 37 +37 72 +37 73 +37 74 +37 75 +37 76 +37 77 +37 78 +37 79 +37 80 +37 81 +82 37 +83 37 +37 84 +37 85 +37 86 +37 87 +37 88 +37 89 +37 90 +91 37 +37 92 +37 93 +37 94 +95 37 +37 96 +37 97 +37 98 +37 99 +37 100 +38 39 +38 40 +38 41 +38 42 +43 38 +44 38 +45 38 +38 46 +47 38 +48 38 +38 49 +38 50 +51 38 +52 38 +53 38 +38 54 +38 55 +38 56 +38 57 +38 58 +38 59 +60 38 +38 61 +38 62 +63 38 +38 64 +38 65 +66 38 +67 38 +38 68 +38 69 +70 38 +71 38 +72 38 +73 38 +38 74 +38 75 +38 76 +77 38 +38 78 +38 79 +38 80 +38 81 +82 38 +83 38 +38 84 +38 85 +38 86 +38 87 +38 88 +38 89 +90 38 +91 38 +92 38 +93 38 +38 94 +95 38 +38 96 +97 38 +38 98 +38 99 +100 38 +39 40 +39 41 +39 42 +43 39 +44 39 +45 39 +39 46 +47 39 +48 39 +39 49 +50 39 +51 39 +52 39 +53 39 +39 54 +39 55 +56 39 +39 57 +39 58 +59 39 +60 39 +61 39 +39 62 +63 39 +39 64 +65 39 +66 39 +67 39 +39 68 +39 69 +70 39 +71 39 +72 39 +73 39 +74 39 +39 75 +76 39 +77 39 +39 78 +79 39 +39 80 +81 39 +82 39 +83 39 +84 39 +39 85 +39 86 +39 87 +39 88 +39 89 +90 39 +91 39 +92 39 +93 39 +94 39 +95 39 +96 39 +97 39 +39 98 +99 39 +100 39 +40 41 +42 40 +43 40 +44 40 +45 40 +46 40 +47 40 +48 40 +40 49 +50 40 +51 40 +52 40 +53 40 +54 40 +55 40 +56 40 +57 40 +58 40 +59 40 +60 40 +61 40 +62 40 +63 40 +40 64 +65 40 +66 40 +67 40 +40 68 +69 40 +70 40 +71 40 +72 40 +73 40 +74 40 +75 40 +76 40 +77 40 +78 40 +79 40 +80 40 +81 40 +82 40 +83 40 +84 40 +85 40 +86 40 +87 40 +88 40 +89 40 +90 40 +91 40 +92 40 +93 40 +94 40 +95 40 +96 40 +97 40 +98 40 +99 40 +100 40 +42 41 +43 41 +44 41 +45 41 +46 41 +47 41 +48 41 +41 49 +50 41 +51 41 +52 41 +53 41 +54 41 +55 41 +56 41 +57 41 +58 41 +59 41 +60 41 +61 41 +62 41 +63 41 +41 64 +65 41 +66 41 +67 41 +41 68 +69 41 +70 41 +71 41 +72 41 +73 41 +74 41 +75 41 +76 41 +77 41 +78 41 +79 41 +80 41 +81 41 +82 41 +83 41 +84 41 +85 41 +86 41 +87 41 +88 41 +89 41 +90 41 +91 41 +92 41 +93 41 +94 41 +95 41 +96 41 +97 41 +98 41 +99 41 +100 41 +43 42 +44 42 +45 42 +42 46 +47 42 +48 42 +42 49 +50 42 +51 42 +52 42 +53 42 +42 54 +42 55 +56 42 +42 57 +58 42 +59 42 +60 42 +61 42 +62 42 +63 42 +42 64 +65 42 +66 42 +67 42 +42 68 +69 42 +70 42 +71 42 +72 42 +73 42 +74 42 +42 75 +76 42 +77 42 +78 42 +79 42 +42 80 +81 42 +82 42 +83 42 +84 42 +42 85 +86 42 +87 42 +88 42 +89 42 +90 42 +91 42 +92 42 +93 42 +94 42 +95 42 +96 42 +97 42 +42 98 +99 42 +100 42 +44 43 +43 45 +43 46 +47 43 +43 48 +43 49 +43 50 +43 51 +43 52 +43 53 +43 54 +43 55 +43 56 +43 57 +43 58 +43 59 +43 60 +43 61 +43 62 +43 63 +43 64 +43 65 +43 66 +67 43 +43 68 +43 69 +43 70 +71 43 +43 72 +43 73 +43 74 +43 75 +43 76 +43 77 +43 78 +43 79 +43 80 +43 81 +82 43 +83 43 +43 84 +43 85 +43 86 +43 87 +43 88 +43 89 +43 90 +91 43 +43 92 +43 93 +43 94 +95 43 +43 96 +43 97 +43 98 +43 99 +43 100 +44 45 +44 46 +44 47 +44 48 +44 49 +44 50 +44 51 +44 52 +44 53 +44 54 +44 55 +44 56 +44 57 +44 58 +44 59 +44 60 +44 61 +44 62 +44 63 +44 64 +44 65 +44 66 +67 44 +44 68 +44 69 +44 70 +44 71 +44 72 +44 73 +44 74 +44 75 +44 76 +44 77 +44 78 +44 79 +44 80 +44 81 +44 82 +44 83 +44 84 +44 85 +44 86 +44 87 +44 88 +44 89 +44 90 +44 91 +44 92 +44 93 +44 94 +95 44 +44 96 +44 97 +44 98 +44 99 +44 100 +45 46 +47 45 +48 45 +45 49 +45 50 +51 45 +45 52 +45 53 +45 54 +45 55 +45 56 +45 57 +45 58 +45 59 +45 60 +45 61 +45 62 +63 45 +45 64 +45 65 +66 45 +67 45 +45 68 +45 69 +70 45 +71 45 +45 72 +73 45 +45 74 +45 75 +45 76 +45 77 +45 78 +45 79 +45 80 +45 81 +82 45 +83 45 +45 84 +45 85 +45 86 +45 87 +45 88 +45 89 +90 45 +91 45 +92 45 +93 45 +45 94 +95 45 +45 96 +97 45 +45 98 +45 99 +45 100 +47 46 +48 46 +46 49 +50 46 +51 46 +52 46 +53 46 +46 54 +55 46 +56 46 +57 46 +58 46 +59 46 +60 46 +61 46 +62 46 +63 46 +46 64 +65 46 +66 46 +67 46 +46 68 +69 46 +70 46 +71 46 +72 46 +73 46 +74 46 +75 46 +76 46 +77 46 +78 46 +79 46 +80 46 +81 46 +82 46 +83 46 +84 46 +85 46 +86 46 +87 46 +88 46 +89 46 +90 46 +91 46 +92 46 +93 46 +94 46 +95 46 +96 46 +97 46 +98 46 +99 46 +100 46 +47 48 +47 49 +47 50 +47 51 +47 52 +47 53 +47 54 +47 55 +47 56 +47 57 +47 58 +47 59 +47 60 +47 61 +47 62 +47 63 +47 64 +47 65 +47 66 +67 47 +47 68 +47 69 +47 70 +71 47 +47 72 +47 73 +47 74 +47 75 +47 76 +47 77 +47 78 +47 79 +47 80 +47 81 +82 47 +83 47 +47 84 +47 85 +47 86 +47 87 +47 88 +47 89 +47 90 +91 47 +47 92 +47 93 +47 94 +95 47 +47 96 +47 97 +47 98 +47 99 +47 100 +48 49 +48 50 +48 51 +48 52 +48 53 +48 54 +48 55 +48 56 +48 57 +48 58 +48 59 +48 60 +48 61 +48 62 +63 48 +48 64 +48 65 +48 66 +67 48 +48 68 +48 69 +70 48 +71 48 +48 72 +73 48 +48 74 +48 75 +48 76 +48 77 +48 78 +48 79 +48 80 +48 81 +82 48 +83 48 +48 84 +48 85 +48 86 +48 87 +48 88 +48 89 +48 90 +91 48 +92 48 +93 48 +48 94 +95 48 +48 96 +48 97 +48 98 +48 99 +48 100 +50 49 +51 49 +52 49 +53 49 +54 49 +55 49 +56 49 +57 49 +58 49 +59 49 +60 49 +61 49 +62 49 +63 49 +49 64 +65 49 +66 49 +67 49 +68 49 +69 49 +70 49 +71 49 +72 49 +73 49 +74 49 +75 49 +76 49 +77 49 +78 49 +79 49 +80 49 +81 49 +82 49 +83 49 +84 49 +85 49 +86 49 +87 49 +88 49 +89 49 +90 49 +91 49 +92 49 +93 49 +94 49 +95 49 +96 49 +97 49 +98 49 +99 49 +100 49 +51 50 +52 50 +53 50 +50 54 +50 55 +50 56 +50 57 +50 58 +50 59 +60 50 +50 61 +50 62 +63 50 +50 64 +50 65 +66 50 +67 50 +50 68 +50 69 +70 50 +71 50 +72 50 +73 50 +50 74 +50 75 +50 76 +77 50 +50 78 +50 79 +50 80 +81 50 +82 50 +83 50 +50 84 +50 85 +50 86 +50 87 +50 88 +50 89 +90 50 +91 50 +92 50 +93 50 +50 94 +95 50 +50 96 +97 50 +50 98 +99 50 +100 50 +51 52 +51 53 +51 54 +51 55 +51 56 +51 57 +51 58 +51 59 +51 60 +51 61 +51 62 +63 51 +51 64 +51 65 +51 66 +67 51 +51 68 +51 69 +70 51 +71 51 +51 72 +73 51 +51 74 +51 75 +51 76 +51 77 +51 78 +51 79 +51 80 +51 81 +82 51 +83 51 +51 84 +51 85 +51 86 +51 87 +51 88 +51 89 +51 90 +91 51 +92 51 +93 51 +51 94 +95 51 +51 96 +51 97 +51 98 +51 99 +51 100 +53 52 +52 54 +52 55 +52 56 +52 57 +52 58 +52 59 +52 60 +52 61 +52 62 +63 52 +52 64 +52 65 +66 52 +67 52 +52 68 +52 69 +70 52 +71 52 +72 52 +73 52 +52 74 +52 75 +52 76 +77 52 +52 78 +52 79 +52 80 +52 81 +82 52 +83 52 +52 84 +52 85 +52 86 +52 87 +52 88 +52 89 +90 52 +91 52 +92 52 +93 52 +52 94 +95 52 +52 96 +97 52 +52 98 +52 99 +52 100 +53 54 +53 55 +53 56 +53 57 +53 58 +53 59 +53 60 +53 61 +53 62 +63 53 +53 64 +53 65 +66 53 +67 53 +53 68 +53 69 +70 53 +71 53 +72 53 +73 53 +53 74 +53 75 +53 76 +77 53 +53 78 +53 79 +53 80 +53 81 +82 53 +83 53 +53 84 +53 85 +53 86 +53 87 +53 88 +53 89 +90 53 +91 53 +92 53 +93 53 +53 94 +95 53 +53 96 +97 53 +53 98 +53 99 +53 100 +55 54 +56 54 +57 54 +58 54 +59 54 +60 54 +61 54 +62 54 +63 54 +54 64 +65 54 +66 54 +67 54 +54 68 +69 54 +70 54 +71 54 +72 54 +73 54 +74 54 +75 54 +76 54 +77 54 +78 54 +79 54 +80 54 +81 54 +82 54 +83 54 +84 54 +85 54 +86 54 +87 54 +88 54 +89 54 +90 54 +91 54 +92 54 +93 54 +94 54 +95 54 +96 54 +97 54 +98 54 +99 54 +100 54 +56 55 +57 55 +58 55 +59 55 +60 55 +61 55 +62 55 +63 55 +55 64 +65 55 +66 55 +67 55 +55 68 +69 55 +70 55 +71 55 +72 55 +73 55 +74 55 +55 75 +76 55 +77 55 +78 55 +79 55 +55 80 +81 55 +82 55 +83 55 +84 55 +85 55 +86 55 +87 55 +88 55 +89 55 +90 55 +91 55 +92 55 +93 55 +94 55 +95 55 +96 55 +97 55 +55 98 +99 55 +100 55 +56 57 +56 58 +59 56 +60 56 +61 56 +56 62 +63 56 +56 64 +65 56 +66 56 +67 56 +56 68 +56 69 +70 56 +71 56 +72 56 +73 56 +74 56 +56 75 +76 56 +77 56 +56 78 +79 56 +56 80 +81 56 +82 56 +83 56 +84 56 +56 85 +56 86 +56 87 +56 88 +56 89 +90 56 +91 56 +92 56 +93 56 +94 56 +95 56 +96 56 +97 56 +56 98 +99 56 +100 56 +58 57 +59 57 +60 57 +61 57 +62 57 +63 57 +57 64 +65 57 +66 57 +67 57 +57 68 +69 57 +70 57 +71 57 +72 57 +73 57 +74 57 +57 75 +76 57 +77 57 +78 57 +79 57 +57 80 +81 57 +82 57 +83 57 +84 57 +57 85 +86 57 +87 57 +88 57 +89 57 +90 57 +91 57 +92 57 +93 57 +94 57 +95 57 +96 57 +97 57 +57 98 +99 57 +100 57 +59 58 +60 58 +61 58 +58 62 +63 58 +58 64 +65 58 +66 58 +67 58 +58 68 +58 69 +70 58 +71 58 +72 58 +73 58 +74 58 +58 75 +76 58 +77 58 +58 78 +79 58 +58 80 +81 58 +82 58 +83 58 +84 58 +58 85 +86 58 +58 87 +58 88 +58 89 +90 58 +91 58 +92 58 +93 58 +94 58 +95 58 +96 58 +97 58 +58 98 +99 58 +100 58 +60 59 +59 61 +59 62 +63 59 +59 64 +59 65 +66 59 +67 59 +59 68 +59 69 +70 59 +71 59 +72 59 +73 59 +59 74 +59 75 +59 76 +77 59 +59 78 +59 79 +59 80 +81 59 +82 59 +83 59 +59 84 +59 85 +59 86 +59 87 +59 88 +59 89 +90 59 +91 59 +92 59 +93 59 +59 94 +95 59 +59 96 +97 59 +59 98 +99 59 +100 59 +60 61 +60 62 +63 60 +60 64 +60 65 +66 60 +67 60 +60 68 +60 69 +70 60 +71 60 +72 60 +73 60 +60 74 +60 75 +60 76 +77 60 +60 78 +60 79 +60 80 +60 81 +82 60 +83 60 +60 84 +60 85 +60 86 +60 87 +60 88 +60 89 +90 60 +91 60 +92 60 +93 60 +60 94 +95 60 +60 96 +97 60 +60 98 +60 99 +60 100 +61 62 +63 61 +61 64 +65 61 +66 61 +67 61 +61 68 +61 69 +70 61 +71 61 +72 61 +73 61 +74 61 +61 75 +76 61 +77 61 +61 78 +79 61 +61 80 +81 61 +82 61 +83 61 +84 61 +61 85 +61 86 +61 87 +61 88 +61 89 +90 61 +91 61 +92 61 +93 61 +61 94 +95 61 +96 61 +97 61 +61 98 +99 61 +100 61 +63 62 +62 64 +65 62 +66 62 +67 62 +62 68 +69 62 +70 62 +71 62 +72 62 +73 62 +74 62 +62 75 +76 62 +77 62 +78 62 +79 62 +62 80 +81 62 +82 62 +83 62 +84 62 +62 85 +86 62 +87 62 +88 62 +89 62 +90 62 +91 62 +92 62 +93 62 +94 62 +95 62 +96 62 +97 62 +62 98 +99 62 +100 62 +63 64 +63 65 +63 66 +67 63 +63 68 +63 69 +70 63 +71 63 +63 72 +73 63 +63 74 +63 75 +63 76 +63 77 +63 78 +63 79 +63 80 +63 81 +82 63 +83 63 +63 84 +63 85 +63 86 +63 87 +63 88 +63 89 +63 90 +91 63 +63 92 +93 63 +63 94 +95 63 +63 96 +63 97 +63 98 +63 99 +63 100 +65 64 +66 64 +67 64 +68 64 +69 64 +70 64 +71 64 +72 64 +73 64 +74 64 +75 64 +76 64 +77 64 +78 64 +79 64 +80 64 +81 64 +82 64 +83 64 +84 64 +85 64 +86 64 +87 64 +88 64 +89 64 +90 64 +91 64 +92 64 +93 64 +94 64 +95 64 +96 64 +97 64 +98 64 +99 64 +100 64 +66 65 +67 65 +65 68 +65 69 +70 65 +71 65 +72 65 +73 65 +74 65 +65 75 +65 76 +77 65 +65 78 +79 65 +65 80 +81 65 +82 65 +83 65 +84 65 +65 85 +65 86 +65 87 +65 88 +65 89 +90 65 +91 65 +92 65 +93 65 +65 94 +95 65 +65 96 +97 65 +65 98 +99 65 +100 65 +67 66 +66 68 +66 69 +70 66 +71 66 +66 72 +73 66 +66 74 +66 75 +66 76 +66 77 +66 78 +66 79 +66 80 +66 81 +82 66 +83 66 +66 84 +66 85 +66 86 +66 87 +66 88 +66 89 +66 90 +91 66 +92 66 +93 66 +66 94 +95 66 +66 96 +66 97 +66 98 +66 99 +66 100 +67 68 +67 69 +67 70 +67 71 +67 72 +67 73 +67 74 +67 75 +67 76 +67 77 +67 78 +67 79 +67 80 +67 81 +67 82 +67 83 +67 84 +67 85 +67 86 +67 87 +67 88 +67 89 +67 90 +67 91 +67 92 +67 93 +67 94 +95 67 +67 96 +67 97 +67 98 +67 99 +67 100 +69 68 +70 68 +71 68 +72 68 +73 68 +74 68 +75 68 +76 68 +77 68 +78 68 +79 68 +80 68 +81 68 +82 68 +83 68 +84 68 +85 68 +86 68 +87 68 +88 68 +89 68 +90 68 +91 68 +92 68 +93 68 +94 68 +95 68 +96 68 +97 68 +98 68 +99 68 +100 68 +70 69 +71 69 +72 69 +73 69 +74 69 +69 75 +76 69 +77 69 +69 78 +79 69 +69 80 +81 69 +82 69 +83 69 +84 69 +69 85 +86 69 +69 87 +88 69 +69 89 +90 69 +91 69 +92 69 +93 69 +94 69 +95 69 +96 69 +97 69 +69 98 +99 69 +100 69 +71 70 +70 72 +73 70 +70 74 +70 75 +70 76 +70 77 +70 78 +70 79 +70 80 +70 81 +82 70 +83 70 +70 84 +70 85 +70 86 +70 87 +70 88 +70 89 +70 90 +91 70 +70 92 +93 70 +70 94 +95 70 +70 96 +70 97 +70 98 +70 99 +70 100 +71 72 +71 73 +71 74 +71 75 +71 76 +71 77 +71 78 +71 79 +71 80 +71 81 +71 82 +71 83 +71 84 +71 85 +71 86 +71 87 +71 88 +71 89 +71 90 +91 71 +71 92 +71 93 +71 94 +95 71 +71 96 +71 97 +71 98 +71 99 +71 100 +73 72 +72 74 +72 75 +72 76 +77 72 +72 78 +72 79 +72 80 +72 81 +82 72 +83 72 +72 84 +72 85 +72 86 +72 87 +72 88 +72 89 +90 72 +91 72 +92 72 +93 72 +72 94 +95 72 +72 96 +97 72 +72 98 +72 99 +72 100 +73 74 +73 75 +73 76 +73 77 +73 78 +73 79 +73 80 +73 81 +82 73 +83 73 +73 84 +73 85 +73 86 +73 87 +73 88 +73 89 +73 90 +91 73 +73 92 +93 73 +73 94 +95 73 +73 96 +73 97 +73 98 +73 99 +73 100 +74 75 +74 76 +77 74 +74 78 +79 74 +74 80 +81 74 +82 74 +83 74 +84 74 +74 85 +74 86 +74 87 +74 88 +74 89 +90 74 +91 74 +92 74 +93 74 +74 94 +95 74 +74 96 +97 74 +74 98 +99 74 +100 74 +76 75 +77 75 +78 75 +79 75 +80 75 +81 75 +82 75 +83 75 +84 75 +85 75 +86 75 +87 75 +88 75 +89 75 +90 75 +91 75 +92 75 +93 75 +94 75 +95 75 +96 75 +97 75 +98 75 +99 75 +100 75 +77 76 +76 78 +79 76 +76 80 +81 76 +82 76 +83 76 +84 76 +76 85 +76 86 +76 87 +76 88 +76 89 +90 76 +91 76 +92 76 +93 76 +76 94 +95 76 +76 96 +97 76 +76 98 +99 76 +100 76 +77 78 +77 79 +77 80 +77 81 +82 77 +83 77 +77 84 +77 85 +77 86 +77 87 +77 88 +77 89 +90 77 +91 77 +92 77 +93 77 +77 94 +95 77 +77 96 +97 77 +77 98 +77 99 +77 100 +79 78 +78 80 +81 78 +82 78 +83 78 +84 78 +78 85 +86 78 +87 78 +88 78 +89 78 +90 78 +91 78 +92 78 +93 78 +94 78 +95 78 +96 78 +97 78 +78 98 +99 78 +100 78 +79 80 +81 79 +82 79 +83 79 +79 84 +79 85 +79 86 +79 87 +79 88 +79 89 +90 79 +91 79 +92 79 +93 79 +79 94 +95 79 +79 96 +97 79 +79 98 +99 79 +100 79 +81 80 +82 80 +83 80 +84 80 +85 80 +86 80 +87 80 +88 80 +89 80 +90 80 +91 80 +92 80 +93 80 +94 80 +95 80 +96 80 +97 80 +80 98 +99 80 +100 80 +82 81 +83 81 +81 84 +81 85 +81 86 +81 87 +81 88 +81 89 +90 81 +91 81 +92 81 +93 81 +81 94 +95 81 +81 96 +97 81 +81 98 +99 81 +100 81 +83 82 +82 84 +82 85 +82 86 +82 87 +82 88 +82 89 +82 90 +91 82 +82 92 +82 93 +82 94 +95 82 +82 96 +82 97 +82 98 +82 99 +82 100 +83 84 +83 85 +83 86 +83 87 +83 88 +83 89 +83 90 +91 83 +83 92 +83 93 +83 94 +95 83 +83 96 +83 97 +83 98 +83 99 +83 100 +84 85 +84 86 +84 87 +84 88 +84 89 +90 84 +91 84 +92 84 +93 84 +84 94 +95 84 +84 96 +97 84 +84 98 +99 84 +100 84 +86 85 +87 85 +88 85 +89 85 +90 85 +91 85 +92 85 +93 85 +94 85 +95 85 +96 85 +97 85 +85 98 +99 85 +100 85 +86 87 +86 88 +86 89 +90 86 +91 86 +92 86 +93 86 +94 86 +95 86 +96 86 +97 86 +86 98 +99 86 +100 86 +88 87 +89 87 +90 87 +91 87 +92 87 +93 87 +94 87 +95 87 +96 87 +97 87 +87 98 +99 87 +100 87 +88 89 +90 88 +91 88 +92 88 +93 88 +94 88 +95 88 +96 88 +97 88 +88 98 +99 88 +100 88 +90 89 +91 89 +92 89 +93 89 +94 89 +95 89 +96 89 +97 89 +89 98 +99 89 +100 89 +91 90 +92 90 +93 90 +90 94 +95 90 +90 96 +90 97 +90 98 +90 99 +90 100 +91 92 +91 93 +91 94 +95 91 +91 96 +91 97 +91 98 +91 99 +91 100 +93 92 +92 94 +95 92 +92 96 +92 97 +92 98 +92 99 +92 100 +93 94 +95 93 +93 96 +93 97 +93 98 +93 99 +93 100 +95 94 +96 94 +97 94 +94 98 +99 94 +100 94 +95 96 +95 97 +95 98 +95 99 +95 100 +97 96 +96 98 +99 96 +100 96 +97 98 +97 99 +97 100 +99 98 +100 98 +100 99 diff --git a/parameter-learning_nd_disc/source code PL/gpref/toy_train.dat b/parameter-learning_nd_disc/source code PL/gpref/toy_train.dat new file mode 100755 index 0000000..fa55bdc --- /dev/null +++ b/parameter-learning_nd_disc/source code PL/gpref/toy_train.dat @@ -0,0 +1,98 @@ +31 9 +23 59 +25 96 +16 21 +44 51 +4 11 +27 28 +13 23 +69 78 +71 59 +58 78 +14 72 +32 22 +43 3 +5 40 +42 54 +72 56 +53 64 +1 4 +12 75 +51 50 +24 10 +8 22 +9 4 +67 49 +69 19 +6 52 +86 49 +13 76 +77 86 +30 52 +67 97 +83 90 +38 87 +7 1 +48 75 +14 33 +37 4 +26 50 +26 42 +70 6 +35 96 +25 61 +30 54 +74 40 +63 77 +99 65 +73 81 +82 9 +82 80 +35 98 +3 11 +63 65 +19 98 +34 22 +35 36 +37 76 +26 86 +71 73 +43 53 +17 40 +6 60 +81 22 +29 68 +17 79 +28 62 +3 79 +65 1 +92 68 +68 49 +18 4 +73 23 +67 69 +30 22 +71 49 +99 79 +50 62 +24 23 +42 4 +36 56 +86 89 +28 85 +77 87 +66 80 +77 52 +70 53 +30 68 +73 54 +37 59 +13 46 +27 22 +89 21 +71 53 +43 40 +37 23 +66 94 +93 45 +73 72 diff --git a/parameter-learning_nd_disc/stdout_temp.txt b/parameter-learning_nd_disc/stdout_temp.txt new file mode 100755 index 0000000..2d29d58 --- /dev/null +++ b/parameter-learning_nd_disc/stdout_temp.txt @@ -0,0 +1,4 @@ + +OPTIMAL (within EQTOL=1.0e-06, STATTOL=1.0e-05, COMPTOL=1.0e-06). +Solve time: 263.468 ms (87 iterations) + diff --git a/parameter-learning_nd_disc/toy_example_GP.py b/parameter-learning_nd_disc/toy_example_GP.py new file mode 100755 index 0000000..a9819e1 --- /dev/null +++ b/parameter-learning_nd_disc/toy_example_GP.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +""" +Created on Sun Mar 18 12:24:34 2018 + +@author: chenyuw +""" +import numpy as np +import h5py +import pickle +from sklearn.gaussian_process import GaussianProcessRegressor +from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C +from matplotlib import pyplot as plt +from bayes_opt import BayesianOptimization +from QuadCameraContourTrajectory import QuadCameraContourTrajectory + +''' +jerk_w_prior = np.atleast_2d([5, 20, 35, 60, 90]).T +end_time = np.array([20.54273295, 24.70780309, 26.60373073, 28.55604608, 30.18930673]) + +#target_time T = 25s +err_t = np.absolute(end_time -25) +kernel = C(1.0, (1e-2, 1e2)) * RBF(10, (1e-2, 1e2)) +gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=20) +gp.fit(jerk_w_prior, err_t) + +# Make the prediction on the meshed x-axis (ask for MSE as well) +X = jerk_w_prior +x = np.atleast_2d(np.linspace(0, 100, 100)).T +y = err_t.ravel() +y_pred, sigma = gp.predict(x, return_std=True) +''' + +def load_trajectory(traj_name): + with h5py.File('./data/' + traj_name, 'r') as hf: + keytimes = np.array(hf.get('keytimes')) + keyframes = np.transpose(np.array(hf.get('keyframes'))) + keyorientations = np.transpose(np.array(hf.get('keyorientations'))) + trajectory = np.transpose(np.array(hf.get('trajectory'))) + return keyframes, keyorientations, keytimes, trajectory + +def target_func(j_w): + trajectory_name = 'saffa.h5' + + # weights term in paper + lag_weight = 1 # weight on e^l + contour_weight = 1 # weight on e^c + angular_weight = 1 # w_phi and w_psi + # learn jerk + jerk_weight = j_w # w_j on position + angular_jerk_weight = 1 # w_j on angles + theta_input_weight = 1 # weight on v_i + # not necessary + min_time_weight = 1 # w_end + end_time_weight = 0 # w_len + timing_weight = 0 # w_t + + # load trajectory + keyframes, keyorientations, keytimes, gps_trajectory = load_trajectory(trajectory_name) + if keyframes.shape[1] > 3: + keyframes = keyframes[:,0:3] + + # specifying weights for optimizer + options = dict() + options["keytimes"] = keytimes + options["lag_weight"] = lag_weight + options["contour_weight"] = contour_weight + options["gimbal_weight"] = angular_weight + options["smoothness_weight"] = jerk_weight + options["angular_smoothness_weight"] = angular_jerk_weight + options["theta_input_weight"] = theta_input_weight + options["min_time_weight"] = min_time_weight + options["end_time_weight"] = end_time_weight + options["timing_weight"] = timing_weight + + trajGen = QuadCameraContourTrajectory(keyframes, keyorientations, options) + trajectory, keytimes = trajGen.generate_trajectory() + + end_time = trajectory[trajGen.endTimeStateIndex, -1]; + err_t = np.absolute(end_time -25) + return -err_t #goal: maximize -err_t + +# Plot the function, the prediction and the 95% confidence interval based on +# the MSE +def plot_bo(f, bo): + mean, sigma = bo.gp.predict(np.arange(len(f)).reshape(-1, 1), return_std=True) + + plt.figure(figsize=(16, 9)) + plt.plot(f) + plt.plot(np.arange(len(f)), mean) + plt.fill_between(np.arange(len(f)), mean+sigma, mean-sigma, alpha=0.1, facecolor='green') + plt.scatter(bo.X.flatten(), bo.Y, c="red", s=50, zorder=10) + plt.xlim(0, len(f)) + plt.ylim(f.min()-0.1*(f.max()-f.min()), f.max()+0.1*(f.max()-f.min())) + plt.show() + + +bo = BayesianOptimization(f=lambda var: target_func(var), + pbounds={"var": (0, 100)}, + verbose=0) + +gp_params = {"alpha": 1e-5, "n_restarts_optimizer": 5} +bo.maximize(init_points=5, n_iter=20, acq="ei", kappa=1, **gp_params) + +infile = open('data_trajectory.pkl', 'r') +f = -np.absolute(pickle.load(infile) - 25) +plot_bo(f, bo) diff --git a/parameter-learning_nd_disc/toy_example_generate_example.py b/parameter-learning_nd_disc/toy_example_generate_example.py new file mode 100755 index 0000000..37b729e --- /dev/null +++ b/parameter-learning_nd_disc/toy_example_generate_example.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +""" +Created on Fri Mar 16 13:47:57 2018 + +@author: chenyuw +""" + +import numpy as np +import h5py +import pickle +from sklearn.gaussian_process import GaussianProcessRegressor +from sklearn.gaussian_process.kernels import RBF, ConstantKernel as C +from matplotlib import pyplot as plt + +from QuadCameraContourTrajectory import QuadCameraContourTrajectory +from plot_quad_camera_trajectory import create_quad_camera_contour_plots +from generate_kml_file import generate_kml_file + + +def main(): + # weights term in paper + lag_weight = 1 # weight on e^l + + + angular_weight = 1 # w_phi and w_psi + # learn jerk + angular_jerk_weight = 1 # w_j on angles + theta_input_weight = 1 # weight on v_i + # not necessary + min_time_weight = 1 # w_end + end_time_weight = 0 # w_len + timing_weight = 0 # w_t + + end_time = np.empty((10,1)) + abs_time = np.zeros((10,1)) + + weights = np.array([[1, 10],[10, 10],[10, 1],[10, 20],[0.2, 10],[1, 0.1],[30, 10], [10, 30], [20, 40], [40,20]]) #[[1, 10],[10, 10],[10, 1],[10, 20]] + + for ith_param in range(0,5): + # parameters + trajectory_name = 'saffa.h5' + + #learn jerk, contour + contour_weight = weights[ith_param,0] # weight on e^c + jerk_weight = weights[ith_param,1] # w_j on position + # load trajectory + keyframes, keyorientations, keytimes, gps_trajectory = load_trajectory(trajectory_name) + if keyframes.shape[1] > 3: + keyframes = keyframes[:,0:3] + + # specifying weights for optimizer + options = dict() + options["keytimes"] = keytimes + options["lag_weight"] = lag_weight + options["contour_weight"] = contour_weight + options["gimbal_weight"] = angular_weight + options["smoothness_weight"] = jerk_weight + options["angular_smoothness_weight"] = angular_jerk_weight + options["theta_input_weight"] = theta_input_weight + options["min_time_weight"] = min_time_weight + options["end_time_weight"] = end_time_weight + options["timing_weight"] = timing_weight + + trajGen = QuadCameraContourTrajectory(keyframes, keyorientations, options) + trajectory, keytimes = trajGen.generate_trajectory() + + if trajectory is None: + return + + #toy_goal + end_time[ith_param] = trajectory[trajGen.endTimeStateIndex, -1]; + abs_time[ith_param] = np.absolute(end_time[ith_param] - 25) + # create plot and save to directory "plots" +# create_quad_camera_contour_plots(trajGen, trajectory, file=trajectory_name + '_mpcc') + + # create kml-file and save to directory "kmls" +# generate_kml_file(trajGen, trajectory, gps_trajectory, trajectory_name, ith_param) + + output = open('data_trajectory.pkl','wb') + pickle.dump(end_time, output) + output.close() + print(abs_time) + +''' + #generate prior + #target_time T = 25s + err_t = np.absolute(end_time -25) + kernel = C(1.0, (1e-2, 1e2)) * RBF(10, (1e-2, 1e2)) + gp = GaussianProcessRegressor(kernel=kernel, n_restarts_optimizer=9) + gp.fit(jerk_w_prior, err_t) +''' + + + +def load_trajectory(traj_name): + with h5py.File('./data/' + traj_name, 'r') as hf: + keytimes = np.array(hf.get('keytimes')) + keyframes = np.transpose(np.array(hf.get('keyframes'))) + keyorientations = np.transpose(np.array(hf.get('keyorientations'))) + trajectory = np.transpose(np.array(hf.get('trajectory'))) + return keyframes, keyorientations, keytimes, trajectory + + +if __name__ == '__main__': + main() diff --git a/parameter-learning_nd_disc/untitled1.py b/parameter-learning_nd_disc/untitled1.py new file mode 100644 index 0000000..b4e04c5 --- /dev/null +++ b/parameter-learning_nd_disc/untitled1.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Fri May 4 11:01:50 2018 + +@author: root +""" +""" +Demonstrate the mixing of 2d and 3d subplots +""" +from mpl_toolkits.mplot3d import Axes3D +import matplotlib.pyplot as plt +import numpy as np + +print(len(np.zeros((3,4)))) + +def f(t): + s1 = np.cos(2*np.pi*t) + e1 = np.exp(-t) + return np.multiply(s1, e1) + + +################ +# First subplot +################ +t1 = np.arange(0.0, 5.0, 0.1) +t2 = np.arange(0.0, 5.0, 0.02) +t3 = np.arange(0.0, 2.0, 0.01) + +# Twice as tall as it is wide. +fig = plt.figure(figsize=plt.figaspect(2.)) +fig.suptitle('A tale of 2 subplots') +ax = fig.add_subplot(2, 1, 1) +l = ax.plot(t1, f(t1), 'bo', + t2, f(t2), 'k--', markerfacecolor='green') +ax.grid(True) +ax.set_ylabel('Damped oscillation') + + +################# +# Second subplot +################# +ax = fig.add_subplot(2, 1, 2, projection='3d') +X = np.arange(-5, 5, 0.25) +xlen = len(X) +Y = np.arange(-5, 5, 0.25) +ylen = len(Y) +X, Y = np.meshgrid(X, Y) +R = np.sqrt(X**2 + Y**2) +Z = np.sin(R) + +surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, + linewidth=0, antialiased=False) +print(X.shape, Z.shape) +ax.set_zlim3d(-1, 1) + +plt.show()